From 0336fe56862e09477099875768d1809bfa572e9c Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 1 Sep 2020 16:18:07 +0200 Subject: [PATCH] NEW Accountancy - On transfers, select the periodicity by default --- htdocs/accountancy/admin/index.php | 8 ++- htdocs/accountancy/journal/bankjournal.php | 51 ++++++++++++++++--- .../journal/expensereportsjournal.php | 51 ++++++++++++++++--- .../accountancy/journal/purchasesjournal.php | 51 ++++++++++++++++--- htdocs/accountancy/journal/sellsjournal.php | 51 ++++++++++++++++--- htdocs/langs/en_US/accountancy.lang | 1 + htdocs/langs/en_US/other.lang | 2 + 7 files changed, 181 insertions(+), 34 deletions(-) diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php index 26ea76d2277..2125bfcf8bb 100644 --- a/htdocs/accountancy/admin/index.php +++ b/htdocs/accountancy/admin/index.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; // Load translation files required by the page -$langs->loadLangs(array("compta", "bills", "admin", "accountancy")); +$langs->loadLangs(array("compta", "bills", "admin", "accountancy", "other")); // Security access if (empty($user->rights->accounting->chartofaccount)) @@ -54,6 +54,7 @@ $list = array( $list_binding = array( 'ACCOUNTING_DATE_START_BINDING', + 'ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER' ); /* @@ -354,7 +355,10 @@ foreach ($list_binding as $key) print ''; if ($key == 'ACCOUNTING_DATE_START_BINDING') { print $form->selectDate(($conf->global->$key ? $db->idate($conf->global->$key) : -1), $key, 0, 0, 1); - } else { + } elseif ($key == 'ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER') { + $array=array(0=>$langs->trans("PreviousMonth"), 1=>$langs->trans("CurrentMonth"), 2=>$langs->trans("Fiscalyear")); + print $form->selectarray($key, $array, (isset($conf->global->ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER)?$conf->global->ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER:0)); + } else { print ''; } diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 29f1cb76d0b..a98be38d67c 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -90,17 +90,52 @@ if ($user->socid > 0 && empty($id_journal)) $error = 0; -$year_current = strftime("%Y", dol_now()); -$pastmonth = strftime("%m", dol_now()) - 1; -$pastmonthyear = $year_current; -if ($pastmonth == 0) { - $pastmonth = 12; - $pastmonthyear--; -} - $date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); $date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); +// Period by default on transfer (0: previous month | 1: current month | 2: fiscal year) +$periodbydefaultontransfer = $conf->global->ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER; +isset($periodbydefaultontransfer)?$periodbydefaultontransfer:0; +if($periodbydefaultontransfer == 2) { + $sql = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; + $sql .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."'"; + $sql .= $db->plimit(1); + $res = $db->query($sql); + if ($res->num_rows > 0) { + $fiscalYear = $db->fetch_object($res); + $date_start = strtotime($fiscalYear->date_start); + $date_end = strtotime($fiscalYear->date_end); + } else { + $month_start = ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1); + $year_start = dol_print_date(dol_now(), '%Y'); + $year_end = $year_start + 1; + $month_end = $month_start - 1; + if ($month_end < 1) + { + $month_end = 12; + $year_end--; + } + $date_start = dol_mktime(0, 0, 0, $month_start, 1, $year_start); + $date_end = dol_get_last_day($year_end, $month_end); + } +} elseif ($periodbydefaultontransfer == 1) { + $year_current = strftime("%Y", dol_now()); + $pastmonth = strftime("%m", dol_now()); + $pastmonthyear = $year_current; + if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; + } +} else { + $year_current = strftime("%Y", dol_now()); + $pastmonth = strftime("%m", dol_now())-1; + $pastmonthyear = $year_current; + if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; + } +} + if (!GETPOSTISSET('date_startmonth') && (empty($date_start) || empty($date_end))) // We define date_start and date_end, only if we did not submit the form { $date_start = dol_get_first_day($pastmonthyear, $pastmonth, false); diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php index 4a1d2935f0f..7c5fa86231c 100644 --- a/htdocs/accountancy/journal/expensereportsjournal.php +++ b/htdocs/accountancy/journal/expensereportsjournal.php @@ -70,17 +70,52 @@ $accountingjournalstatic->fetch($id_journal); $journal = $accountingjournalstatic->code; $journal_label = $accountingjournalstatic->label; -$year_current = strftime("%Y", dol_now()); -$pastmonth = strftime("%m", dol_now()) - 1; -$pastmonthyear = $year_current; -if ($pastmonth == 0) { - $pastmonth = 12; - $pastmonthyear--; -} - $date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); $date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); +// Period by default on transfer (0: previous month | 1: current month | 2: fiscal year) +$periodbydefaultontransfer = $conf->global->ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER; +isset($periodbydefaultontransfer)?$periodbydefaultontransfer:0; +if($periodbydefaultontransfer == 2) { + $sql = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; + $sql .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."'"; + $sql .= $db->plimit(1); + $res = $db->query($sql); + if ($res->num_rows > 0) { + $fiscalYear = $db->fetch_object($res); + $date_start = strtotime($fiscalYear->date_start); + $date_end = strtotime($fiscalYear->date_end); + } else { + $month_start = ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1); + $year_start = dol_print_date(dol_now(), '%Y'); + $year_end = $year_start + 1; + $month_end = $month_start - 1; + if ($month_end < 1) + { + $month_end = 12; + $year_end--; + } + $date_start = dol_mktime(0, 0, 0, $month_start, 1, $year_start); + $date_end = dol_get_last_day($year_end, $month_end); + } +} elseif ($periodbydefaultontransfer == 1) { + $year_current = strftime("%Y", dol_now()); + $pastmonth = strftime("%m", dol_now()); + $pastmonthyear = $year_current; + if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; + } +} else { + $year_current = strftime("%Y", dol_now()); + $pastmonth = strftime("%m", dol_now())-1; + $pastmonthyear = $year_current; + if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; + } +} + if (!GETPOSTISSET('date_startmonth') && (empty($date_start) || empty($date_end))) // We define date_start and date_end, only if we did not submit the form { $date_start = dol_get_first_day($pastmonthyear, $pastmonth, false); diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php index 4c9e25725f2..279e294f865 100644 --- a/htdocs/accountancy/journal/purchasesjournal.php +++ b/htdocs/accountancy/journal/purchasesjournal.php @@ -75,17 +75,52 @@ $accountingjournalstatic->fetch($id_journal); $journal = $accountingjournalstatic->code; $journal_label = $accountingjournalstatic->label; -$year_current = strftime("%Y", dol_now()); -$pastmonth = strftime("%m", dol_now()) - 1; -$pastmonthyear = $year_current; -if ($pastmonth == 0) { - $pastmonth = 12; - $pastmonthyear--; -} - $date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); $date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); +// Period by default on transfer (0: previous month | 1: current month | 2: fiscal year) +$periodbydefaultontransfer = $conf->global->ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER; +isset($periodbydefaultontransfer)?$periodbydefaultontransfer:0; +if($periodbydefaultontransfer == 2) { + $sql = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; + $sql .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."'"; + $sql .= $db->plimit(1); + $res = $db->query($sql); + if ($res->num_rows > 0) { + $fiscalYear = $db->fetch_object($res); + $date_start = strtotime($fiscalYear->date_start); + $date_end = strtotime($fiscalYear->date_end); + } else { + $month_start = ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1); + $year_start = dol_print_date(dol_now(), '%Y'); + $year_end = $year_start + 1; + $month_end = $month_start - 1; + if ($month_end < 1) + { + $month_end = 12; + $year_end--; + } + $date_start = dol_mktime(0, 0, 0, $month_start, 1, $year_start); + $date_end = dol_get_last_day($year_end, $month_end); + } +} elseif ($periodbydefaultontransfer == 1) { + $year_current = strftime("%Y", dol_now()); + $pastmonth = strftime("%m", dol_now()); + $pastmonthyear = $year_current; + if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; + } +} else { + $year_current = strftime("%Y", dol_now()); + $pastmonth = strftime("%m", dol_now())-1; + $pastmonthyear = $year_current; + if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; + } +} + if (!GETPOSTISSET('date_startmonth') && (empty($date_start) || empty($date_end))) // We define date_start and date_end, only if we did not submit the form { $date_start = dol_get_first_day($pastmonthyear, $pastmonth, false); diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php index 4b66feb9e3d..fe16ad0e4a5 100644 --- a/htdocs/accountancy/journal/sellsjournal.php +++ b/htdocs/accountancy/journal/sellsjournal.php @@ -78,17 +78,52 @@ $accountingjournalstatic->fetch($id_journal); $journal = $accountingjournalstatic->code; $journal_label = $accountingjournalstatic->label; -$year_current = strftime("%Y", dol_now()); -$pastmonth = strftime("%m", dol_now()) - 1; -$pastmonthyear = $year_current; -if ($pastmonth == 0) { - $pastmonth = 12; - $pastmonthyear--; -} - $date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear); $date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear); +// Period by default on transfer (0: previous month | 1: current month | 2: fiscal year) +$periodbydefaultontransfer = $conf->global->ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER; +isset($periodbydefaultontransfer)?$periodbydefaultontransfer:0; +if($periodbydefaultontransfer == 2) { + $sql = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; + $sql .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."'"; + $sql .= $db->plimit(1); + $res = $db->query($sql); + if ($res->num_rows > 0) { + $fiscalYear = $db->fetch_object($res); + $date_start = strtotime($fiscalYear->date_start); + $date_end = strtotime($fiscalYear->date_end); + } else { + $month_start = ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1); + $year_start = dol_print_date(dol_now(), '%Y'); + $year_end = $year_start + 1; + $month_end = $month_start - 1; + if ($month_end < 1) + { + $month_end = 12; + $year_end--; + } + $date_start = dol_mktime(0, 0, 0, $month_start, 1, $year_start); + $date_end = dol_get_last_day($year_end, $month_end); + } +} elseif ($periodbydefaultontransfer == 1) { + $year_current = strftime("%Y", dol_now()); + $pastmonth = strftime("%m", dol_now()); + $pastmonthyear = $year_current; + if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; + } +} else { + $year_current = strftime("%Y", dol_now()); + $pastmonth = strftime("%m", dol_now())-1; + $pastmonthyear = $year_current; + if ($pastmonth == 0) { + $pastmonth = 12; + $pastmonthyear --; + } +} + if (!GETPOSTISSET('date_startmonth') && (empty($date_start) || empty($date_end))) // We define date_start and date_end, only if we did not submit the form { $date_start = dol_get_first_day($pastmonthyear, $pastmonth, false); diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 7b59e33b296..0b032867881 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -150,6 +150,7 @@ BANK_DISABLE_DIRECT_INPUT=Disable direct recording of transaction in bank accoun ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Enable draft export on journal ACCOUNTANCY_COMBO_FOR_AUX=Enable combo list for subsidiary account (may be slow if you have a lot of third parties) ACCOUNTING_DATE_START_BINDING=Define a date to start binding & transfer in accountancy. Below this date, the transactions will not be transferred to accounting. +ACCOUNTING_DEFAULT_PERIOD_ON_TRANSFER=On accountancy transfer, select period show by default ACCOUNTING_SELL_JOURNAL=Sell journal ACCOUNTING_PURCHASE_JOURNAL=Purchase journal diff --git a/htdocs/langs/en_US/other.lang b/htdocs/langs/en_US/other.lang index 54c0572d453..ac0e7be5ccb 100644 --- a/htdocs/langs/en_US/other.lang +++ b/htdocs/langs/en_US/other.lang @@ -16,6 +16,8 @@ PreviousMonthOfInvoice=Previous month (number 1-12) of invoice date TextPreviousMonthOfInvoice=Previous month (text) of invoice date NextMonthOfInvoice=Following month (number 1-12) of invoice date TextNextMonthOfInvoice=Following month (text) of invoice date +PreviousMonth=Previous month +CurrentMonth=Current month ZipFileGeneratedInto=Zip file generated into %s. DocFileGeneratedInto=Doc file generated into %s. JumpToLogin=Disconnected. Go to login page...