-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #33095 from aspangaro/22_accfydefault
NEW Accountancy - Define fiscal year by default
- Loading branch information
Showing
7 changed files
with
194 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
<?php | ||
/* Copyright (C) 2013-2025 Alexandre Spangaro <[email protected]> | ||
* Copyright (C) 2024 Frédéric France <[email protected]> | ||
/* Copyright (C) 2013-2025 Alexandre Spangaro <[email protected]> | ||
* Copyright (C) 2024 Frédéric France <[email protected]> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
|
@@ -24,6 +24,8 @@ | |
|
||
// Load Dolibarr environment | ||
require '../../main.inc.php'; | ||
|
||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; | ||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; | ||
require_once DOL_DOCUMENT_ROOT.'/core/class/fiscalyear.class.php'; | ||
|
||
|
@@ -83,7 +85,25 @@ | |
/* | ||
* Actions | ||
*/ | ||
if ($action == 'setdefault') { | ||
// Set a fiscal year as default | ||
$error = 0; | ||
|
||
$defaultFiscalYear = GETPOSTINT('value'); | ||
$defaultFiscalYearLabel = GETPOST('label', 'alpha'); | ||
|
||
if (!empty($defaultFiscalYear)) { | ||
dolibarr_set_const($db, 'ACCOUNTANCY_FISCALYEAR_DEFAULT', $defaultFiscalYear, 'chaine', 0, '', $conf->entity); | ||
} else { | ||
$error++; | ||
} | ||
|
||
if (!$error) { | ||
setEventMessages($langs->trans("FiscalYearSetAsDefault", $defaultFiscalYearLabel), null, 'mesgs'); | ||
} else { | ||
setEventMessages($langs->trans("Error"), null, 'errors'); | ||
} | ||
} | ||
|
||
|
||
/* | ||
|
@@ -148,6 +168,7 @@ | |
print '<td>'.$langs->trans("DateEnd").'</td>'; | ||
print '<td class="center">'.$langs->trans("NumberOfAccountancyEntries").'</td>'; | ||
print '<td class="center">'.$langs->trans("NumberOfAccountancyMovements").'</td>'; | ||
print '<td class="center">'.$langs->trans("Default").'</td>'; | ||
print '<td class="right">'.$langs->trans("Status").'</td>'; | ||
print '</tr>'; | ||
|
||
|
@@ -160,6 +181,7 @@ | |
|
||
$fiscalyearstatic->ref = $obj->rowid; | ||
$fiscalyearstatic->id = $obj->rowid; | ||
$fiscalyearstatic->label = $obj->label; | ||
$fiscalyearstatic->date_start = $obj->date_start; | ||
$fiscalyearstatic->date_end = $obj->date_end; | ||
$fiscalyearstatic->statut = $obj->status; | ||
|
@@ -174,12 +196,22 @@ | |
print '<td class="left">'.dol_print_date($db->jdate($obj->date_end), 'day').'</td>'; | ||
print '<td class="center">'.$object->getAccountancyEntriesByFiscalYear($obj->date_start, $obj->date_end).'</td>'; | ||
print '<td class="center">'.$object->getAccountancyMovementsByFiscalYear($obj->date_start, $obj->date_end).'</td>'; | ||
|
||
// Default | ||
print '<td class="center">'; | ||
if (getDolGlobalString('ACCOUNTANCY_FISCALYEAR_DEFAULT') == (int) $fiscalyearstatic->ref) { | ||
print img_picto($langs->trans("Default"), 'on'); | ||
} else { | ||
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=setdefault&token='.newToken().'&value='.urlencode($fiscalyearstatic->ref).'&label='.urlencode($fiscalyearstatic->label).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("SetAsDefault"), 'off').'</a>'; | ||
} | ||
print '</td>'; | ||
|
||
print '<td class="right">'.$fiscalyearstatic->LibStatut($obj->status, 5).'</td>'; | ||
print '</tr>'; | ||
$i++; | ||
} | ||
} else { | ||
print '<tr class="oddeven"><td colspan="7"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>'; | ||
print '<tr class="oddeven"><td colspan="8"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>'; | ||
} | ||
print '</table>'; | ||
print '</div>'; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
<?php | ||
/* Copyright (C) 2016 Olivier Geffroy <[email protected]> | ||
* Copyright (C) 2016 Florian Henry <[email protected]> | ||
* Copyright (C) 2016-2024 Alexandre Spangaro <[email protected]> | ||
* Copyright (C) 2016-2025 Alexandre Spangaro <[email protected]> | ||
* Copyright (C) 2018-2024 Frédéric France <[email protected]> | ||
* Copyright (C) 2024 MDW <[email protected]> | ||
* | ||
|
@@ -101,8 +101,13 @@ | |
$form = new Form($db); | ||
|
||
if (empty($search_date_start) && !GETPOSTISSET('formfilteraction')) { | ||
$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 = "SELECT date_start, date_end"; | ||
$sql .=" FROM ".MAIN_DB_PREFIX."accounting_fiscalyear "; | ||
if (getDolGlobalInt('ACCOUNTANCY_FISCALYEAR_DEFAULT')) { | ||
$sql .= " WHERE rowid = " . getDolGlobalInt('ACCOUNTANCY_FISCALYEAR_DEFAULT'); | ||
} else { | ||
$sql .= " WHERE date_start < '" . $db->idate(dol_now()) . "' and date_end > '" . $db->idate(dol_now()) . "'"; | ||
} | ||
$sql .= $db->plimit(1); | ||
$res = $db->query($sql); | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
<?php | ||
/* Copyright (C) 2013-2016 Olivier Geffroy <[email protected]> | ||
* Copyright (C) 2013-2016 Florian Henry <[email protected]> | ||
* Copyright (C) 2013-2024 Alexandre Spangaro <[email protected]> | ||
* Copyright (C) 2013-2025 Alexandre Spangaro <[email protected]> | ||
* Copyright (C) 2022 Lionel Vessiller <[email protected]> | ||
* Copyright (C) 2016-2017 Laurent Destailleur <[email protected]> | ||
* Copyright (C) 2018-2024 Frédéric France <[email protected]> | ||
|
@@ -170,9 +170,15 @@ | |
|
||
if (!in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && !GETPOSTISSET('begin') && !GETPOSTISSET('formfilteraction') && GETPOSTINT('page') == '' && !GETPOSTINT('noreset') && $user->hasRight('accounting', 'mouvements', 'export')) { | ||
if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('restore_lastsearch_values') && !GETPOST('search_accountancy_code_start')) { | ||
$query = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; | ||
$query .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."' limit 1"; | ||
$res = $db->query($query); | ||
$sql = "SELECT date_start, date_end"; | ||
$sql .=" FROM ".MAIN_DB_PREFIX."accounting_fiscalyear "; | ||
if (getDolGlobalInt('ACCOUNTANCY_FISCALYEAR_DEFAULT')) { | ||
$sql .= " WHERE rowid = " . getDolGlobalInt('ACCOUNTANCY_FISCALYEAR_DEFAULT'); | ||
} else { | ||
$sql .= " WHERE date_start < '" . $db->idate(dol_now()) . "' and date_end > '" . $db->idate(dol_now()) . "'"; | ||
} | ||
$sql .= $db->plimit(1); | ||
$res = $db->query($sql); | ||
|
||
if ($db->num_rows($res) > 0) { | ||
$fiscalYear = $db->fetch_object($res); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,12 @@ | ||
<?php | ||
/* Copyright (C) 2013-2016 Olivier Geffroy <[email protected]> | ||
* Copyright (C) 2013-2016 Florian Henry <[email protected]> | ||
* Copyright (C) 2013-2024 Alexandre Spangaro <alexandre@inoveasya.solutions> | ||
* Copyright (C) 2022 Lionel Vessiller <[email protected]> | ||
* Copyright (C) 2016-2017 Laurent Destailleur <[email protected]> | ||
* Copyright (C) 2018-2024 Frédéric France <[email protected]> | ||
* Copyright (C) 2022 Progiseize <[email protected]> | ||
* Copyright (C) 2024 MDW <[email protected]> | ||
/* Copyright (C) 2013-2016 Olivier Geffroy <[email protected]> | ||
* Copyright (C) 2013-2016 Florian Henry <[email protected]> | ||
* Copyright (C) 2013-2025 Alexandre Spangaro <alexandre@inovea-conseil.com> | ||
* Copyright (C) 2022 Lionel Vessiller <[email protected]> | ||
* Copyright (C) 2016-2017 Laurent Destailleur <[email protected]> | ||
* Copyright (C) 2018-2024 Frédéric France <[email protected]> | ||
* Copyright (C) 2022 Progiseize <[email protected]> | ||
* Copyright (C) 2024 MDW <[email protected]> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
|
@@ -149,14 +149,21 @@ | |
$object = new BookKeeping($db); | ||
$hookmanager->initHooks(array('bookkeepinglist')); | ||
|
||
$formfiscalyear = new FormFiscalYear($db); | ||
$formaccounting = new FormAccounting($db); | ||
$form = new Form($db); | ||
|
||
if (!in_array($action, array('delmouv', 'delmouvconfirm')) && !GETPOSTISSET('begin') && !GETPOSTISSET('formfilteraction') && GETPOST('page', 'alpha') == '' && !GETPOSTINT('noreset') && $user->hasRight('accounting', 'mouvements', 'export')) { | ||
if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('restore_lastsearch_values') && !GETPOST('search_accountancy_code_start')) { | ||
$query = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear "; | ||
$query .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."' limit 1"; | ||
$res = $db->query($query); | ||
$sql = "SELECT date_start, date_end"; | ||
$sql .=" FROM ".MAIN_DB_PREFIX."accounting_fiscalyear "; | ||
if (getDolGlobalInt('ACCOUNTANCY_FISCALYEAR_DEFAULT')) { | ||
$sql .= " WHERE rowid = " . getDolGlobalInt('ACCOUNTANCY_FISCALYEAR_DEFAULT'); | ||
} else { | ||
$sql .= " WHERE date_start < '" . $db->idate(dol_now()) . "' and date_end > '" . $db->idate(dol_now()) . "'"; | ||
} | ||
$sql .= $db->plimit(1); | ||
$res = $db->query($sql); | ||
|
||
if ($db->num_rows($res) > 0) { | ||
$fiscalYear = $db->fetch_object($res); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,7 @@ | |
/* Copyright (C) 2016 Neil Orley <[email protected]> | ||
* Copyright (C) 2013-2016 Olivier Geffroy <[email protected]> | ||
* Copyright (C) 2013-2020 Florian Henry <[email protected]> | ||
* Copyright (C) 2013-2024 Alexandre Spangaro <[email protected]> | ||
* Copyright (C) 2013-2025 Alexandre Spangaro <[email protected]> | ||
* Copyright (C) 2018-2024 Frédéric France <[email protected]> | ||
* Copyright (C) 2024 MDW <[email protected]> | ||
* | ||
|
@@ -162,8 +162,13 @@ | |
$form = new Form($db); | ||
|
||
if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('search_date_startday') && !GETPOSTISSET('search_date_startmonth') && !GETPOSTISSET('search_date_starthour')) { | ||
$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 = "SELECT date_start, date_end"; | ||
$sql .=" FROM ".MAIN_DB_PREFIX."accounting_fiscalyear "; | ||
if (getDolGlobalInt('ACCOUNTANCY_FISCALYEAR_DEFAULT')) { | ||
$sql .= " WHERE rowid = " . getDolGlobalInt('ACCOUNTANCY_FISCALYEAR_DEFAULT'); | ||
} else { | ||
$sql .= " WHERE date_start < '" . $db->idate(dol_now()) . "' and date_end > '" . $db->idate(dol_now()) . "'"; | ||
} | ||
$sql .= $db->plimit(1); | ||
$res = $db->query($sql); | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
<?php | ||
/* Copyright (C) 2025 Alexandre Spangaro <[email protected]> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
/** | ||
* \file htdocs/core/class/html.formfiscalyear.class.php | ||
* \ingroup Accountancy (Double entries) | ||
* \brief File of class with all html predefined components | ||
*/ | ||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; | ||
|
||
/** | ||
* Class to manage generation of HTML components for accounting management | ||
*/ | ||
class FormFiscalYear extends Form | ||
{ | ||
/** | ||
* @var DoliDB Database handler. | ||
*/ | ||
public $db; | ||
|
||
/** | ||
* @var string Error code (or message) | ||
*/ | ||
public $error = ''; | ||
|
||
/** | ||
* Constructor | ||
* | ||
* @param DoliDB $db Database handler | ||
*/ | ||
public function __construct($db) | ||
{ | ||
$this->db = $db; | ||
} | ||
|
||
/** | ||
* Return list of fiscal year | ||
* | ||
* @param int $selected Preselected type | ||
* @param string $htmlname Name of field in form | ||
* @param int $useempty Set to 1 if we want an empty value | ||
* @param int $maxlen Max length of text in combo box | ||
* @param int $help Add or not the admin help picto | ||
* @return void|string HTML component with the select | ||
*/ | ||
public function selectFiscalYear($selected = 0, $htmlname = 'fiscalyear', $useempty = 0, $maxlen = 0, $help = 1) | ||
{ | ||
global $conf, $langs; | ||
|
||
$out = ''; | ||
|
||
$sql = "SELECT f.rowid, f.label, f.date_start, f.date_end, f.statut as status"; | ||
$sql .= " FROM ".$this->db->prefix()."accounting_fiscalyear as f"; | ||
$sql .= " WHERE f.entity = ".$conf->entity; | ||
$sql .= " ORDER BY f.date_start ASC"; | ||
|
||
dol_syslog(get_class($this).'::'.__METHOD__, LOG_DEBUG); | ||
$resql = $this->db->query($sql); | ||
if ($resql) { | ||
$num = $this->db->num_rows($resql); | ||
if ($num) { | ||
$out .= '<select class="flat minwidth200" id="'.$htmlname.'" name="'.$htmlname.'">'; | ||
$i = 0; | ||
|
||
if ($useempty) { | ||
$out .= '<option value="0"> </option>'; | ||
} | ||
while ($i < $num) { | ||
$obj = $this->db->fetch_object($resql); | ||
|
||
$titletoshowhtml = ($maxlen ? dol_trunc($obj->label, $maxlen) : $obj->label).' <span class="opacitymedium">('.$obj->date_start . " - " . $obj->date_end.')</span>'; | ||
$titletoshow = ($maxlen ? dol_trunc($obj->label, $maxlen) : $obj->label).' <span class="opacitymedium">('.$langs->transnoentitiesnoconv("FiscalYearFromTo", $obj->date_start, $obj->date_end).')</span>'; | ||
|
||
$out .= '<option value="'.$obj->rowid.'"'; | ||
if ($obj->rowid == $selected) { | ||
$out .= ' selected'; | ||
} | ||
//$out .= ' data-html="'.dol_escape_htmltag(dol_string_onlythesehtmltags($titletoshowhtml, 1, 0, 0, 0, array('span'))).'"'; | ||
$out .= ' data-html="'.dolPrintHTMLForAttribute($titletoshowhtml).'"'; | ||
$out .= '>'; | ||
$out .= dol_escape_htmltag($titletoshow); | ||
$out .= '</option>'; | ||
$i++; | ||
} | ||
$out .= '</select>'; | ||
//if ($user->admin && $help) $out .= info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1); | ||
|
||
$out .= ajax_combobox($htmlname, array()); | ||
} else { | ||
$out .= '<span class="opacitymedium">'.$langs->trans("ErrorNoFiscalyearDefined", $langs->transnoentitiesnoconv("Accounting"), $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Fiscalyear")).'</span>'; | ||
} | ||
} else { | ||
dol_print_error($this->db); | ||
} | ||
|
||
return $out; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters