dolibarr 21.0.0-alpha
categories.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2016 Jamal Elbaz <jamelbaz@gmail.pro>
3 * Copyright (C) 2017-2024 Alexandre Spangaro <aspangaro@easya.solutions>
4 * Copyright (C) 2022 Laurent Destailleur <eldy@users.sourceforge.net>
5 * Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
6 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
28// Load Dolibarr environment
29require '../../main.inc.php';
30require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
31require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancycategory.class.php';
32require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
33
34$error = 0;
35
36// Load translation files required by the page
37$langs->loadLangs(array("bills", "accountancy", "compta"));
38
39$id = GETPOSTINT('id');
40$cancel = GETPOST('cancel', 'alpha');
41$action = GETPOST('action', 'aZ09');
42$cat_id = GETPOSTINT('account_category');
43$selectcpt = GETPOST('cpt_bk', 'array');
44$cpt_id = GETPOSTINT('cptid');
45
46if ($cat_id == 0) {
47 $cat_id = null;
48}
49
50// Load variable for pagination
51$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
52$sortfield = GETPOST('sortfield', 'aZ09comma');
53$sortorder = GETPOST('sortorder', 'aZ09comma');
54$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
55if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
56 // If $page is not defined, or '' or -1 or if we click on clear filters
57 $page = 0;
58}
59$offset = $limit * $page;
60$pageprev = $page - 1;
61$pagenext = $page + 1;
62
63if (empty($sortfield)) {
64 $sortfield = 'account_number';
65}
66if (empty($sortorder)) {
67 $sortorder = 'ASC';
68}
69
70// Security check
71if (!$user->hasRight('accounting', 'chartofaccount')) {
73}
74
75$accountingcategory = new AccountancyCategory($db);
76
77
78/*
79 * Actions
80 */
81
82// If we add account
83if (!empty($selectcpt)) {
84 $cpts = array();
85 foreach ($selectcpt as $selectedoption) {
86 if (!array_key_exists($selectedoption, $cpts)) {
87 $cpts[$selectedoption] = "'".$selectedoption."'";
88 }
89 }
90
91 $return = $accountingcategory->updateAccAcc($cat_id, $cpts);
92
93 if ($return < 0) {
94 setEventMessages($langs->trans('errors'), $accountingcategory->errors, 'errors');
95 } else {
96 setEventMessages($langs->trans('RecordModifiedSuccessfully'), null, 'mesgs');
97 }
98}
99
100if ($action == 'delete') {
101 if ($cpt_id) {
102 if ($accountingcategory->deleteCptCat($cpt_id)) {
103 setEventMessages($langs->trans('AccountRemovedFromGroup'), null, 'mesgs');
104 } else {
105 setEventMessages($langs->trans('errors'), null, 'errors');
106 }
107 }
108}
109
110
111/*
112 * View
113 */
114
115$form = new Form($db);
116$formaccounting = new FormAccounting($db);
117
118$title= $langs->trans('AccountingCategory');
119$help_url = 'EN:Module_Double_Entry_Accounting#Setup|FR:Module_Comptabilit&eacute;_en_Partie_Double#Configuration';
120
121llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-accountancy page-admin_categories');
122
123$linkback = '<a href="'.DOL_URL_ROOT.'/accountancy/admin/categories_list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
124$titlepicto = 'setup';
125
126print load_fiche_titre($langs->trans('AccountingCategory'), $linkback, $titlepicto);
127
128print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
129print '<input type="hidden" name="token" value="'.newToken().'">';
130print '<input type="hidden" name="action" value="display">';
131
132print dol_get_fiche_head();
133
134print '<table class="border centpercent">';
135
136// Select the category
137print '<tr><td class="titlefield">'.$langs->trans("AccountingCategory").'</td>';
138print '<td>';
139$s = $formaccounting->select_accounting_category($cat_id, 'account_category', 1, 0, 0, 0);
140if ($formaccounting->nbaccounts_category <= 0) {
141 print '<span class="opacitymedium">'.$s.'</span>';
142} else {
143 print $s;
144 print '<input type="submit" class="button small" value="'.$langs->trans("Select").'">';
145}
146print '</td></tr>';
147
148print '</table>';
149
150print dol_get_fiche_end();
151
152
153// Select the accounts
154if (!empty($cat_id)) {
155 $return = $accountingcategory->getAccountsWithNoCategory($cat_id);
156 if ($return < 0) {
157 setEventMessages(null, $accountingcategory->errors, 'errors');
158 }
159 print '<br>';
160
161 $arraykeyvalue = array();
162 foreach ($accountingcategory->lines_cptbk as $key => $val) {
163 $doc_ref = !empty($val->doc_ref) ? $val->doc_ref : '';
164 $arraykeyvalue[length_accountg($val->numero_compte)] = length_accountg($val->numero_compte) . ' - ' . $val->label_compte . ($doc_ref ? ' '.$doc_ref : '');
165 }
166
167 if (is_array($accountingcategory->lines_cptbk) && count($accountingcategory->lines_cptbk) > 0) {
168 print img_picto($langs->trans("AccountingAccount"), 'accounting_account', 'class="pictofixedwidth"');
169 print $form->multiselectarray('cpt_bk', $arraykeyvalue, GETPOST('cpt_bk', 'array'), 0, 0, '', 0, "80%", '', '', $langs->transnoentitiesnoconv("AddAccountFromBookKeepingWithNoCategories"));
170 print '<input type="submit" class="button button-add small" id="" class="action-delete" value="'.$langs->trans("Add").'"> ';
171 }
172}
173
174print '</form>';
175
176
177if ((empty($action) || $action == 'display' || $action == 'delete') && $cat_id > 0) {
178 $param = 'account_category='.((int) $cat_id);
179
180 print '<br>';
181 print '<table class="noborder centpercent">'."\n";
182 print '<tr class="liste_titre">';
183 print getTitleFieldOfList('AccountAccounting', 0, $_SERVER['PHP_SELF'], 'account_number', '', $param, '', $sortfield, $sortorder, '')."\n";
184 print getTitleFieldOfList('Label', 0, $_SERVER['PHP_SELF'], 'label', '', $param, '', $sortfield, $sortorder, '')."\n";
185 print getTitleFieldOfList('', 0, $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, '')."\n";
186 print '</tr>'."\n";
187
188 if (!empty($cat_id)) {
189 $return = $accountingcategory->display($cat_id); // This load ->lines_display
190 if ($return < 0) {
191 setEventMessages(null, $accountingcategory->errors, 'errors');
192 }
193
194 if (is_array($accountingcategory->lines_display) && count($accountingcategory->lines_display) > 0) {
195 $accountingcategory->lines_display = dol_sort_array($accountingcategory->lines_display, $sortfield, $sortorder, -1, 0, 1);
196
197 foreach ($accountingcategory->lines_display as $cpt) {
198 print '<tr class="oddeven">';
199 print '<td>'.length_accountg($cpt->account_number).'</td>';
200 print '<td>'.$cpt->label.'</td>';
201 print '<td class="right">';
202 print '<a href="'.$_SERVER['PHP_SELF'].'?action=delete&token='.newToken().'&account_category='.$cat_id.'&cptid='.$cpt->rowid.'">';
203 print $langs->trans("DeleteFromCat");
204 print img_picto($langs->trans("DeleteFromCat"), 'unlink', 'class="paddingleft"');
205 print "</a>";
206 print "</td>";
207 print "</tr>\n";
208 }
209 } else {
210 print '<tr><td colspan="3"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
211 }
212 }
213
214 print "</table>";
215}
216
217// End of page
218llxFooter();
219$db->close();
$id
Definition account.php:39
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:70
Class to manage categories of an accounting account.
Class to manage generation of HTML components for accounting management.
Class to manage generation of HTML components Only common components must be here.
llxFooter()
Footer empty.
Definition document.php:107
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
newToken()
Return the value of token currently saved into session with name 'newtoken'.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.