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