dolibarr  19.0.0-dev
list.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2013-2016 Olivier Geffroy <jeff@jeffinfo.com>
3  * Copyright (C) 2013-2016 Florian Henry <florian.henry@open-concept.pro>
4  * Copyright (C) 2013-2023 Alexandre Spangaro <aspangaro@open-dsi.fr>
5  * Copyright (C) 2022 Lionel Vessiller <lvessiller@open-dsi.fr>
6  * Copyright (C) 2016-2017 Laurent Destailleur <eldy@users.sourceforge.net>
7  * Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
8  * Copyright (C) 2022 Progiseize <a.bisotti@progiseize.fr>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <https://www.gnu.org/licenses/>.
22  */
23 
30 // Load Dolibarr environment
31 require '../../main.inc.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
33 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/lettering.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
36 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
37 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
38 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
39 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
40 require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
41 
42 // Load translation files required by the page
43 $langs->loadLangs(array("accountancy", "compta"));
44 
45 $socid = GETPOST('socid', 'int');
46 
47 $action = GETPOST('action', 'aZ09');
48 $massaction = GETPOST('massaction', 'alpha');
49 $confirm = GETPOST('confirm', 'alpha');
50 $toselect = GETPOST('toselect', 'array');
51 $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'bookkeepinglist';
52 $search_mvt_num = GETPOST('search_mvt_num', 'int');
53 $search_doc_type = GETPOST("search_doc_type", 'alpha');
54 $search_doc_ref = GETPOST("search_doc_ref", 'alpha');
55 $search_date_startyear = GETPOST('search_date_startyear', 'int');
56 $search_date_startmonth = GETPOST('search_date_startmonth', 'int');
57 $search_date_startday = GETPOST('search_date_startday', 'int');
58 $search_date_endyear = GETPOST('search_date_endyear', 'int');
59 $search_date_endmonth = GETPOST('search_date_endmonth', 'int');
60 $search_date_endday = GETPOST('search_date_endday', 'int');
61 $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
62 $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
63 $search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int'));
64 $search_date_creation_startyear = GETPOST('search_date_creation_startyear', 'int');
65 $search_date_creation_startmonth = GETPOST('search_date_creation_startmonth', 'int');
66 $search_date_creation_startday = GETPOST('search_date_creation_startday', 'int');
67 $search_date_creation_endyear = GETPOST('search_date_creation_endyear', 'int');
68 $search_date_creation_endmonth = GETPOST('search_date_creation_endmonth', 'int');
69 $search_date_creation_endday = GETPOST('search_date_creation_endday', 'int');
70 $search_date_creation_start = dol_mktime(0, 0, 0, $search_date_creation_startmonth, $search_date_creation_startday, $search_date_creation_startyear);
71 $search_date_creation_end = dol_mktime(23, 59, 59, $search_date_creation_endmonth, $search_date_creation_endday, $search_date_creation_endyear);
72 $search_date_modification_startyear = GETPOST('search_date_modification_startyear', 'int');
73 $search_date_modification_startmonth = GETPOST('search_date_modification_startmonth', 'int');
74 $search_date_modification_startday = GETPOST('search_date_modification_startday', 'int');
75 $search_date_modification_endyear = GETPOST('search_date_modification_endyear', 'int');
76 $search_date_modification_endmonth = GETPOST('search_date_modification_endmonth', 'int');
77 $search_date_modification_endday = GETPOST('search_date_modification_endday', 'int');
78 $search_date_modification_start = dol_mktime(0, 0, 0, $search_date_modification_startmonth, $search_date_modification_startday, $search_date_modification_startyear);
79 $search_date_modification_end = dol_mktime(23, 59, 59, $search_date_modification_endmonth, $search_date_modification_endday, $search_date_modification_endyear);
80 $search_date_export_startyear = GETPOST('search_date_export_startyear', 'int');
81 $search_date_export_startmonth = GETPOST('search_date_export_startmonth', 'int');
82 $search_date_export_startday = GETPOST('search_date_export_startday', 'int');
83 $search_date_export_endyear = GETPOST('search_date_export_endyear', 'int');
84 $search_date_export_endmonth = GETPOST('search_date_export_endmonth', 'int');
85 $search_date_export_endday = GETPOST('search_date_export_endday', 'int');
86 $search_date_export_start = dol_mktime(0, 0, 0, $search_date_export_startmonth, $search_date_export_startday, $search_date_export_startyear);
87 $search_date_export_end = dol_mktime(23, 59, 59, $search_date_export_endmonth, $search_date_export_endday, $search_date_export_endyear);
88 $search_date_validation_startyear = GETPOST('search_date_validation_startyear', 'int');
89 $search_date_validation_startmonth = GETPOST('search_date_validation_startmonth', 'int');
90 $search_date_validation_startday = GETPOST('search_date_validation_startday', 'int');
91 $search_date_validation_endyear = GETPOST('search_date_validation_endyear', 'int');
92 $search_date_validation_endmonth = GETPOST('search_date_validation_endmonth', 'int');
93 $search_date_validation_endday = GETPOST('search_date_validation_endday', 'int');
94 $search_date_validation_start = dol_mktime(0, 0, 0, $search_date_validation_startmonth, $search_date_validation_startday, $search_date_validation_startyear);
95 $search_date_validation_end = dol_mktime(23, 59, 59, $search_date_validation_endmonth, $search_date_validation_endday, $search_date_validation_endyear);
96 $search_import_key = GETPOST("search_import_key", 'alpha');
97 
98 $search_account_category = GETPOST('search_account_category', 'int');
99 
100 $search_accountancy_code = GETPOST("search_accountancy_code", 'alpha');
101 $search_accountancy_code_start = GETPOST('search_accountancy_code_start', 'alpha');
102 if ($search_accountancy_code_start == - 1) {
103  $search_accountancy_code_start = '';
104 }
105 $search_accountancy_code_end = GETPOST('search_accountancy_code_end', 'alpha');
106 if ($search_accountancy_code_end == - 1) {
107  $search_accountancy_code_end = '';
108 }
109 
110 $search_accountancy_aux_code = GETPOST("search_accountancy_aux_code", 'alpha');
111 $search_accountancy_aux_code_start = GETPOST('search_accountancy_aux_code_start', 'alpha');
112 if ($search_accountancy_aux_code_start == - 1) {
113  $search_accountancy_aux_code_start = '';
114 }
115 $search_accountancy_aux_code_end = GETPOST('search_accountancy_aux_code_end', 'alpha');
116 if ($search_accountancy_aux_code_end == - 1) {
117  $search_accountancy_aux_code_end = '';
118 }
119 $search_mvt_label = GETPOST('search_mvt_label', 'alpha');
120 $search_direction = GETPOST('search_direction', 'alpha');
121 $search_debit = GETPOST('search_debit', 'alpha');
122 $search_credit = GETPOST('search_credit', 'alpha');
123 $search_ledger_code = GETPOST('search_ledger_code', 'array');
124 $search_lettering_code = GETPOST('search_lettering_code', 'alpha');
125 $search_not_reconciled = GETPOST('search_not_reconciled', 'alpha');
126 
127 // Load variable for pagination
128 $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : (empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION) ? $conf->liste_limit : $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION);
129 $sortfield = GETPOST('sortfield', 'aZ09comma');
130 $sortorder = GETPOST('sortorder', 'aZ09comma');
131 $optioncss = GETPOST('optioncss', 'alpha');
132 $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
133 if (empty($page) || $page < 0) {
134  $page = 0;
135 }
136 $offset = $limit * $page;
137 $pageprev = $page - 1;
138 $pagenext = $page + 1;
139 if ($sortorder == "") {
140  $sortorder = "ASC";
141 }
142 if ($sortfield == "") {
143  $sortfield = "t.piece_num,t.rowid";
144 }
145 
146 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
147 $object = new BookKeeping($db);
148 $hookmanager->initHooks(array('bookkeepinglist'));
149 
150 $formaccounting = new FormAccounting($db);
151 $form = new Form($db);
152 
153 if (!in_array($action, array('delmouv', 'delmouvconfirm')) && !GETPOSTISSET('begin') && !GETPOSTISSET('formfilteraction') && GETPOST('page', 'int') == '' && !GETPOST('noreset', 'int') && $user->hasRight('accounting', 'mouvements', 'export')) {
154  if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('restore_lastsearch_values') && !GETPOST('search_accountancy_code_start')) {
155  $query = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear ";
156  $query .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."' limit 1";
157  $res = $db->query($query);
158 
159  if ($res->num_rows > 0) {
160  $fiscalYear = $db->fetch_object($res);
161  $search_date_start = strtotime($fiscalYear->date_start);
162  $search_date_end = strtotime($fiscalYear->date_end);
163  } else {
164  $month_start = ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1);
165  $year_start = dol_print_date(dol_now(), '%Y');
166  if (dol_print_date(dol_now(), '%m') < $month_start) {
167  $year_start--; // If current month is lower that starting fiscal month, we start last year
168  }
169  $year_end = $year_start + 1;
170  $month_end = $month_start - 1;
171  if ($month_end < 1) {
172  $month_end = 12;
173  $year_end--;
174  }
175  $search_date_start = dol_mktime(0, 0, 0, $month_start, 1, $year_start);
176  $search_date_end = dol_get_last_day($year_end, $month_end);
177  }
178  }
179 }
180 
181 
182 $arrayfields = array(
183  't.piece_num'=>array('label'=>$langs->trans("TransactionNumShort"), 'checked'=>1),
184  't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1),
185  't.doc_date'=>array('label'=>$langs->trans("Docdate"), 'checked'=>1),
186  't.doc_ref'=>array('label'=>$langs->trans("Piece"), 'checked'=>1),
187  't.numero_compte'=>array('label'=>$langs->trans("AccountAccountingShort"), 'checked'=>1),
188  't.subledger_account'=>array('label'=>$langs->trans("SubledgerAccount"), 'checked'=>1),
189  't.label_operation'=>array('label'=>$langs->trans("Label"), 'checked'=>1),
190  't.debit'=>array('label'=>$langs->trans("AccountingDebit"), 'checked'=>1),
191  't.credit'=>array('label'=>$langs->trans("AccountingCredit"), 'checked'=>1),
192  't.lettering_code'=>array('label'=>$langs->trans("LetteringCode"), 'checked'=>1),
193  't.date_creation'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0),
194  't.tms'=>array('label'=>$langs->trans("DateModification"), 'checked'=>0),
195  't.date_export'=>array('label'=>$langs->trans("DateExport"), 'checked'=>0),
196  't.date_validated'=>array('label'=>$langs->trans("DateValidationAndLock"), 'checked'=>0, 'enabled'=>!getDolGlobalString("ACCOUNTANCY_DISABLE_CLOSURE_LINE_BY_LINE")),
197  't.import_key'=>array('label'=>$langs->trans("ImportId"), 'checked'=>0, 'position'=>1100),
198 );
199 
200 if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING)) {
201  unset($arrayfields['t.lettering_code']);
202 }
203 
204 $error = 0;
205 
206 if (!isModEnabled('accounting')) {
207  accessforbidden();
208 }
209 if ($user->socid > 0) {
210  accessforbidden();
211 }
212 if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
213  accessforbidden();
214 }
215 
216 
217 /*
218  * Actions
219  */
220 
221 $param = '';
222 
223 if (GETPOST('cancel', 'alpha')) {
224  $action = 'list'; $massaction = '';
225 }
226 if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunletteringauto' && $massaction != 'preunletteringmanual' && $massaction != 'predeletebookkeepingwriting') {
227  $massaction = '';
228 }
229 
230 $parameters = array('socid'=>$socid);
231 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
232 if ($reshook < 0) {
233  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
234 }
235 
236 if (empty($reshook)) {
237  include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
238 
239  if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
240  $search_mvt_num = '';
241  $search_doc_type = '';
242  $search_doc_ref = '';
243  $search_doc_date = '';
244  $search_account_category = '';
245  $search_accountancy_code = '';
246  $search_accountancy_code_start = '';
247  $search_accountancy_code_end = '';
248  $search_accountancy_aux_code = '';
249  $search_accountancy_aux_code_start = '';
250  $search_accountancy_aux_code_end = '';
251  $search_mvt_label = '';
252  $search_direction = '';
253  $search_ledger_code = array();
254  $search_date_startyear = '';
255  $search_date_startmonth = '';
256  $search_date_startday = '';
257  $search_date_endyear = '';
258  $search_date_endmonth = '';
259  $search_date_endday = '';
260  $search_date_start = '';
261  $search_date_end = '';
262  $search_date_creation_startyear = '';
263  $search_date_creation_startmonth = '';
264  $search_date_creation_startday = '';
265  $search_date_creation_endyear = '';
266  $search_date_creation_endmonth = '';
267  $search_date_creation_endday = '';
268  $search_date_creation_start = '';
269  $search_date_creation_end = '';
270  $search_date_modification_startyear = '';
271  $search_date_modification_startmonth = '';
272  $search_date_modification_startday = '';
273  $search_date_modification_endyear = '';
274  $search_date_modification_endmonth = '';
275  $search_date_modification_endday = '';
276  $search_date_modification_start = '';
277  $search_date_modification_end = '';
278  $search_date_export_startyear = '';
279  $search_date_export_startmonth = '';
280  $search_date_export_startday = '';
281  $search_date_export_endyear = '';
282  $search_date_export_endmonth = '';
283  $search_date_export_endday = '';
284  $search_date_export_start = '';
285  $search_date_export_end = '';
286  $search_date_validation_startyear = '';
287  $search_date_validation_startmonth = '';
288  $search_date_validation_startday = '';
289  $search_date_validation_endyear = '';
290  $search_date_validation_endmonth = '';
291  $search_date_validation_endday = '';
292  $search_date_validation_start = '';
293  $search_date_validation_end = '';
294  $search_debit = '';
295  $search_credit = '';
296  $search_lettering_code = '';
297  $search_not_reconciled = '';
298  $search_import_key = '';
299  $toselect = array();
300  }
301 
302  // Must be after the remove filter action, before the export.
303  $filter = array();
304  if (!empty($search_date_start)) {
305  $filter['t.doc_date>='] = $search_date_start;
306  $tmp = dol_getdate($search_date_start);
307  $param .= '&search_date_startmonth='.urlencode($tmp['mon']).'&search_date_startday='.urlencode($tmp['mday']).'&search_date_startyear='.urlencode($tmp['year']);
308  }
309  if (!empty($search_date_end)) {
310  $filter['t.doc_date<='] = $search_date_end;
311  $tmp = dol_getdate($search_date_end);
312  $param .= '&search_date_endmonth='.urlencode($tmp['mon']).'&search_date_endday='.urlencode($tmp['mday']).'&search_date_endyear='.urlencode($tmp['year']);
313  }
314  if (!empty($search_doc_date)) {
315  $filter['t.doc_date'] = $search_doc_date;
316  $tmp = dol_getdate($search_doc_date);
317  $param .= '&doc_datemonth='.urlencode($tmp['mon']).'&doc_dateday='.urlencode($tmp['mday']).'&doc_dateyear='.urlencode($tmp['year']);
318  }
319  if (!empty($search_doc_type)) {
320  $filter['t.doc_type'] = $search_doc_type;
321  $param .= '&search_doc_type='.urlencode($search_doc_type);
322  }
323  if (!empty($search_doc_ref)) {
324  $filter['t.doc_ref'] = $search_doc_ref;
325  $param .= '&search_doc_ref='.urlencode($search_doc_ref);
326  }
327  if ($search_account_category != '-1' && !empty($search_account_category)) {
328  require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancycategory.class.php';
329  $accountingcategory = new AccountancyCategory($db);
330 
331  $listofaccountsforgroup = $accountingcategory->getCptsCat(0, 'fk_accounting_category = '.((int) $search_account_category));
332  $listofaccountsforgroup2 = array();
333  if (is_array($listofaccountsforgroup)) {
334  foreach ($listofaccountsforgroup as $tmpval) {
335  $listofaccountsforgroup2[] = "'".$db->escape($tmpval['id'])."'";
336  }
337  }
338  $filter['t.search_accounting_code_in'] = join(',', $listofaccountsforgroup2);
339  $param .= '&search_account_category='.urlencode($search_account_category);
340  }
341  if (!empty($search_accountancy_code)) {
342  $filter['t.numero_compte'] = $search_accountancy_code;
343  $param .= '&search_accountancy_code='.urlencode($search_accountancy_code);
344  }
345  if (!empty($search_accountancy_code_start)) {
346  $filter['t.numero_compte>='] = $search_accountancy_code_start;
347  $param .= '&search_accountancy_code_start='.urlencode($search_accountancy_code_start);
348  }
349  if (!empty($search_accountancy_code_end)) {
350  $filter['t.numero_compte<='] = $search_accountancy_code_end;
351  $param .= '&search_accountancy_code_end='.urlencode($search_accountancy_code_end);
352  }
353  if (!empty($search_accountancy_aux_code)) {
354  $filter['t.subledger_account'] = $search_accountancy_aux_code;
355  $param .= '&search_accountancy_aux_code='.urlencode($search_accountancy_aux_code);
356  }
357  if (!empty($search_accountancy_aux_code_start)) {
358  $filter['t.subledger_account>='] = $search_accountancy_aux_code_start;
359  $param .= '&search_accountancy_aux_code_start='.urlencode($search_accountancy_aux_code_start);
360  }
361  if (!empty($search_accountancy_aux_code_end)) {
362  $filter['t.subledger_account<='] = $search_accountancy_aux_code_end;
363  $param .= '&search_accountancy_aux_code_end='.urlencode($search_accountancy_aux_code_end);
364  }
365  if (!empty($search_mvt_label)) {
366  $filter['t.label_operation'] = $search_mvt_label;
367  $param .= '&search_mvt_label='.urlencode($search_mvt_label);
368  }
369  if (!empty($search_direction)) {
370  $filter['t.sens'] = $search_direction;
371  $param .= '&search_direction='.urlencode($search_direction);
372  }
373  if (!empty($search_ledger_code)) {
374  $filter['t.code_journal'] = $search_ledger_code;
375  foreach ($search_ledger_code as $code) {
376  $param .= '&search_ledger_code[]='.urlencode($code);
377  }
378  }
379  if (!empty($search_mvt_num)) {
380  $filter['t.piece_num'] = $search_mvt_num;
381  $param .= '&search_mvt_num='.urlencode($search_mvt_num);
382  }
383  if (!empty($search_date_creation_start)) {
384  $filter['t.date_creation>='] = $search_date_creation_start;
385  $tmp = dol_getdate($search_date_creation_start);
386  $param .= '&search_date_creation_startmonth='.urlencode($tmp['mon']).'&search_date_creation_startday='.urlencode($tmp['mday']).'&search_date_creation_startyear='.urlencode($tmp['year']);
387  }
388  if (!empty($search_date_creation_end)) {
389  $filter['t.date_creation<='] = $search_date_creation_end;
390  $tmp = dol_getdate($search_date_creation_end);
391  $param .= '&search_date_creation_endmonth='.urlencode($tmp['mon']).'&search_date_creation_endday='.urlencode($tmp['mday']).'&search_date_creation_endyear='.urlencode($tmp['year']);
392  }
393  if (!empty($search_date_modification_start)) {
394  $filter['t.tms>='] = $search_date_modification_start;
395  $tmp = dol_getdate($search_date_modification_start);
396  $param .= '&search_date_modification_startmonth='.urlencode($tmp['mon']).'&search_date_modification_startday='.urlencode($tmp['mday']).'&search_date_modification_startyear='.urlencode($tmp['year']);
397  }
398  if (!empty($search_date_modification_end)) {
399  $filter['t.tms<='] = $search_date_modification_end;
400  $tmp = dol_getdate($search_date_modification_end);
401  $param .= '&search_date_modification_endmonth='.urlencode($tmp['mon']).'&search_date_modification_endday='.urlencode($tmp['mday']).'&search_date_modification_endyear='.urlencode($tmp['year']);
402  }
403  if (!empty($search_date_export_start)) {
404  $filter['t.date_export>='] = $search_date_export_start;
405  $tmp = dol_getdate($search_date_export_start);
406  $param .= '&search_date_export_startmonth='.urlencode($tmp['mon']).'&search_date_export_startday='.urlencode($tmp['mday']).'&search_date_export_startyear='.urlencode($tmp['year']);
407  }
408  if (!empty($search_date_export_end)) {
409  $filter['t.date_export<='] = $search_date_export_end;
410  $tmp = dol_getdate($search_date_export_end);
411  $param .= '&search_date_export_endmonth='.urlencode($tmp['mon']).'&search_date_export_endday='.urlencode($tmp['mday']).'&search_date_export_endyear='.urlencode($tmp['year']);
412  }
413  if (!empty($search_date_validation_start)) {
414  $filter['t.date_validated>='] = $search_date_validation_start;
415  $tmp = dol_getdate($search_date_validation_start);
416  $param .= '&search_date_validation_startmonth='.urlencode($tmp['mon']).'&search_date_validation_startday='.urlencode($tmp['mday']).'&search_date_validation_startyear='.urlencode($tmp['year']);
417  }
418  if (!empty($search_date_validation_end)) {
419  $filter['t.date_validated<='] = $search_date_validation_end;
420  $tmp = dol_getdate($search_date_validation_end);
421  $param .= '&search_date_validation_endmonth='.urlencode($tmp['mon']).'&search_date_validation_endday='.urlencode($tmp['mday']).'&search_date_validation_endyear='.urlencode($tmp['year']);
422  }
423  if (!empty($search_debit)) {
424  $filter['t.debit'] = $search_debit;
425  $param .= '&search_debit='.urlencode($search_debit);
426  }
427  if (!empty($search_credit)) {
428  $filter['t.credit'] = $search_credit;
429  $param .= '&search_credit='.urlencode($search_credit);
430  }
431  if (!empty($search_lettering_code)) {
432  $filter['t.lettering_code'] = $search_lettering_code;
433  $param .= '&search_lettering_code='.urlencode($search_lettering_code);
434  }
435  if (!empty($search_not_reconciled)) {
436  $filter['t.reconciled_option'] = $search_not_reconciled;
437  $param .= '&search_not_reconciled='.urlencode($search_not_reconciled);
438  }
439  if (!empty($search_import_key)) {
440  $filter['t.import_key'] = $search_import_key;
441  $param .= '&search_import_key='.urlencode($search_import_key);
442  }
443 
444  // Mass actions
445  $objectclass = 'Bookkeeping';
446  $objectlabel = 'Bookkeeping';
447  $permissiontoread = $user->hasRight('societe', 'lire');
448  $permissiontodelete = $user->hasRight('societe', 'supprimer');
449  $permissiontoadd = $user->hasRight('societe', 'creer');
450  $uploaddir = $conf->societe->dir_output;
451  include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
452 
453  if (!$error && $action == 'deletebookkeepingwriting' && $confirm == "yes" && $user->hasRight('accounting', 'mouvements', 'supprimer')) {
454  $db->begin();
455 
456  if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
457  $lettering = new Lettering($db);
458  $nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
459  if ($nb_lettering < 0) {
460  setEventMessages('', $lettering->errors, 'errors');
461  $error++;
462  }
463  }
464 
465  $nbok = 0;
466  if (!$error) {
467  foreach ($toselect as $toselectid) {
468  $result = $object->fetch($toselectid);
469  if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) {
470  $result = $object->deleteMvtNum($object->piece_num);
471  if ($result > 0) {
472  $nbok++;
473  } else {
474  setEventMessages($object->error, $object->errors, 'errors');
475  $error++;
476  break;
477  }
478  } elseif ($result < 0) {
479  setEventMessages($object->error, $object->errors, 'errors');
480  $error++;
481  break;
482  }
483  }
484  }
485 
486  if (!$error) {
487  $db->commit();
488 
489  // Message for elements well deleted
490  if ($nbok > 1) {
491  setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs');
492  } elseif ($nbok > 0) {
493  setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs');
494  } else {
495  setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs');
496  }
497 
498  header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : ''));
499  exit;
500  } else {
501  $db->rollback();
502  }
503  }
504 
505  // others mass actions
506  if (!$error && getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) {
507  if ($massaction == 'letteringauto') {
508  $lettering = new Lettering($db);
509  $nb_lettering = $lettering->bookkeepingLetteringAll($toselect);
510  if ($nb_lettering < 0) {
511  setEventMessages('', $lettering->errors, 'errors');
512  $error++;
513  $nb_lettering = max(0, abs($nb_lettering) - 2);
514  } elseif ($nb_lettering == 0) {
515  $nb_lettering = 0;
516  setEventMessages($langs->trans('AccountancyNoLetteringModified'), array(), 'mesgs');
517  }
518  if ($nb_lettering == 1) {
519  setEventMessages($langs->trans('AccountancyOneLetteringModifiedSuccessfully'), array(), 'mesgs');
520  } elseif ($nb_lettering > 1) {
521  setEventMessages($langs->trans('AccountancyLetteringModifiedSuccessfully', $nb_lettering), array(), 'mesgs');
522  }
523 
524  if (!$error) {
525  header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
526  exit();
527  }
528  } elseif ($massaction == 'letteringmanual') {
529  $lettering = new Lettering($db);
530  $result = $lettering->updateLettering($toselect);
531  if ($result < 0) {
532  setEventMessages('', $lettering->errors, 'errors');
533  } else {
534  setEventMessages($langs->trans('AccountancyOneLetteringModifiedSuccessfully'), array(), 'mesgs');
535  header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
536  exit();
537  }
538  } elseif ($action == 'unletteringauto' && $confirm == "yes") {
539  $lettering = new Lettering($db);
540  $nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
541  if ($nb_lettering < 0) {
542  setEventMessages('', $lettering->errors, 'errors');
543  $error++;
544  $nb_lettering = max(0, abs($nb_lettering) - 2);
545  } elseif ($nb_lettering == 0) {
546  $nb_lettering = 0;
547  setEventMessages($langs->trans('AccountancyNoUnletteringModified'), array(), 'mesgs');
548  }
549  if ($nb_lettering == 1) {
550  setEventMessages($langs->trans('AccountancyOneUnletteringModifiedSuccessfully'), array(), 'mesgs');
551  } elseif ($nb_lettering > 1) {
552  setEventMessages($langs->trans('AccountancyUnletteringModifiedSuccessfully', $nb_lettering), array(), 'mesgs');
553  }
554 
555  if (!$error) {
556  header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
557  exit();
558  }
559  } elseif ($action == 'unletteringmanual' && $confirm == "yes") {
560  $lettering = new Lettering($db);
561  $nb_lettering = $lettering->deleteLettering($toselect);
562  if ($result < 0) {
563  setEventMessages('', $lettering->errors, 'errors');
564  } else {
565  setEventMessages($langs->trans('AccountancyOneUnletteringModifiedSuccessfully'), array(), 'mesgs');
566  header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
567  exit();
568  }
569  }
570  }
571 }
572 
573 // Build and execute select (used by page and export action)
574 // must de set after the action that set $filter
575 // --------------------------------------------------------------------
576 
577 $sql = 'SELECT';
578 $sql .= ' t.rowid,';
579 $sql .= " t.doc_date,";
580 $sql .= " t.doc_type,";
581 $sql .= " t.doc_ref,";
582 $sql .= " t.fk_doc,";
583 $sql .= " t.fk_docdet,";
584 $sql .= " t.thirdparty_code,";
585 $sql .= " t.subledger_account,";
586 $sql .= " t.subledger_label,";
587 $sql .= " t.numero_compte,";
588 $sql .= " t.label_compte,";
589 $sql .= " t.label_operation,";
590 $sql .= " t.debit,";
591 $sql .= " t.credit,";
592 $sql .= " t.lettering_code,";
593 $sql .= " t.montant as amount,";
594 $sql .= " t.sens,";
595 $sql .= " t.fk_user_author,";
596 $sql .= " t.import_key,";
597 $sql .= " t.code_journal,";
598 $sql .= " t.journal_label,";
599 $sql .= " t.piece_num,";
600 $sql .= " t.date_creation,";
601 $sql .= " t.tms as date_modification,";
602 $sql .= " t.date_export,";
603 $sql .= " t.date_validated as date_validation,";
604 $sql .= " t.import_key";
605 
606 $sqlfields = $sql; // $sql fields to remove for count total
607 
608 $sql .= ' FROM '.MAIN_DB_PREFIX.$object->table_element.' as t';
609 // Manage filter
610 $sqlwhere = array();
611 if (count($filter) > 0) {
612  foreach ($filter as $key => $value) {
613  if ($key == 't.doc_date') {
614  $sqlwhere[] = $key."='".$db->idate($value)."'";
615  } elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') {
616  $sqlwhere[] = $key."'".$db->idate($value)."'";
617  } elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.subledger_account>=' || $key == 't.subledger_account<=') {
618  $sqlwhere[] = $key."'".$db->escape($value)."'";
619  } elseif ($key == 't.fk_doc' || $key == 't.fk_docdet' || $key == 't.piece_num') {
620  $sqlwhere[] = $key.'='.((int) $value);
621  } elseif ($key == 't.subledger_account' || $key == 't.numero_compte') {
622  $sqlwhere[] = $key." LIKE '".$db->escape($value)."%'";
623  } elseif ($key == 't.subledger_account') {
624  $sqlwhere[] = natural_search($key, $value, 0, 1);
625  } elseif ($key == 't.date_creation>=' || $key == 't.date_creation<=') {
626  $sqlwhere[] = $key."'".$db->idate($value)."'";
627  } elseif ($key == 't.tms>=' || $key == 't.tms<=') {
628  $sqlwhere[] = $key."'".$db->idate($value)."'";
629  } elseif ($key == 't.date_export>=' || $key == 't.date_export<=') {
630  $sqlwhere[] = $key."'".$db->idate($value)."'";
631  } elseif ($key == 't.date_validated>=' || $key == 't.date_validated<=') {
632  $sqlwhere[] = $key."'".$db->idate($value)."'";
633  } elseif ($key == 't.credit' || $key == 't.debit') {
634  $sqlwhere[] = natural_search($key, $value, 1, 1);
635  } elseif ($key == 't.reconciled_option') {
636  $sqlwhere[] = 't.lettering_code IS NULL';
637  } elseif ($key == 't.code_journal' && !empty($value)) {
638  if (is_array($value)) {
639  $sqlwhere[] = natural_search("t.code_journal", join(',', $value), 3, 1);
640  } else {
641  $sqlwhere[] = natural_search("t.code_journal", $value, 3, 1);
642  }
643  } elseif ($key == 't.search_accounting_code_in' && !empty($value)) {
644  $sqlwhere[] = 't.numero_compte IN ('.$db->sanitize($value, 1).')';
645  } else {
646  $sqlwhere[] = natural_search($key, $value, 0, 1);
647  }
648  }
649 }
650 $sql .= ' WHERE t.entity IN ('.getEntity('accountancy').')';
651 
652 if (count($sqlwhere) > 0) {
653  $sql .= ' AND '.implode(' AND ', $sqlwhere);
654 }
655 //print $sql;
656 
657 /*
658  * View
659  */
660 
661 $formother = new FormOther($db);
662 $formfile = new FormFile($db);
663 
664 $title_page = $langs->trans("Operations").' - '.$langs->trans("Journals");
665 
666 // Count total nb of records
667 $nbtotalofrecords = '';
668 if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
669  /* The fast and low memory method to get and count full list converts the sql into a sql count */
670  $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
671  $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
672  $resql = $db->query($sqlforcount);
673  if ($resql) {
674  $objforcount = $db->fetch_object($resql);
675  $nbtotalofrecords = $objforcount->nbtotalofrecords;
676  } else {
677  dol_print_error($db);
678  }
679 
680  if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
681  $page = 0;
682  $offset = 0;
683  }
684  $db->free($resql);
685 }
686 
687 // Complete request and execute it with limit
688 $sql .= $db->order($sortfield, $sortorder);
689 if ($limit) {
690  $sql .= $db->plimit($limit + 1, $offset);
691 }
692 
693 $resql = $db->query($sql);
694 if (!$resql) {
695  dol_print_error($db);
696  exit;
697 }
698 
699 $num = $db->num_rows($resql);
700 
701 $arrayofselected = is_array($toselect) ? $toselect : array();
702 
703 // Output page
704 // --------------------------------------------------------------------
705 
706 llxHeader('', $title_page);
707 
708 $formconfirm = '';
709 
710 // Print form confirm
711 print $formconfirm;
712 
713 //$param=''; param started before
714 if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
715  $param .= '&contextpage='.urlencode($contextpage);
716 }
717 if ($limit > 0 && $limit != $conf->liste_limit) {
718  $param .= '&limit='.((int) $limit);
719 }
720 
721 // List of mass actions available
722 $arrayofmassactions = array();
723 if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) {
724  $arrayofmassactions['letteringauto'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringAuto');
725  $arrayofmassactions['preunletteringauto'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringAuto');
726  $arrayofmassactions['letteringmanual'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringManual');
727  $arrayofmassactions['preunletteringmanual'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringManual');
728 }
729 if ($user->hasRight('accounting', 'mouvements', 'supprimer')) {
730  $arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
731 }
732 if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) {
733  $arrayofmassactions = array();
734 }
735 $massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions);
736 
737 print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
738 print '<input type="hidden" name="token" value="'.newToken().'">';
739 print '<input type="hidden" name="action" value="list">';
740 if ($optioncss != '') {
741  print '<input type="hidden" name="optioncss" value="'.urlencode($optioncss).'">';
742 }
743 print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
744 print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
745 print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
746 print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
747 
748 if (count($filter)) {
749  $buttonLabel = $langs->trans("ExportFilteredList");
750 } else {
751  $buttonLabel = $langs->trans("ExportList");
752 }
753 
754 $parameters = array('param' => $param);
755 $reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
756 if ($reshook < 0) {
757  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
758 }
759 
760 $newcardbutton = empty($hookmanager->resPrint) ? '' : $hookmanager->resPrint;
761 
762 if (empty($reshook)) {
763  $newcardbutton .= dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
764  $newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly'));
765  $newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?type=sub'.$param, '', 1, array('morecss' => 'marginleftonly'));
766 
767  $url = './card.php?action=create';
768  if (!empty($socid)) {
769  $url .= '&socid='.$socid;
770  }
771  $newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', $url, '', $user->hasRight('accounting', 'mouvements', 'creer'));
772 }
773 
774 print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
775 
776 if ($massaction == 'preunletteringauto') {
777  print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringAuto"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringauto", null, '', 0, 200, 500, 1);
778 } elseif ($massaction == 'preunletteringmanual') {
779  print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringManual"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringmanual", null, '', 0, 200, 500, 1);
780 } elseif ($massaction == 'predeletebookkeepingwriting') {
781  print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDeleteBookkeepingWriting"), $langs->trans("ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), "deletebookkeepingwriting", null, '', 0, 200, 500, 1);
782 }
783 
784 //$topicmail = "Information";
785 //$modelmail = "accountingbookkeeping";
786 //$objecttmp = new BookKeeping($db);
787 //$trackid = 'bk'.$object->id;
788 include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
789 
790 $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
791 $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields
792 if ($massactionbutton && $contextpage != 'poslist') {
793  $selectedfields .= $form->showCheckAddButtons('checkforselect', 1);
794 }
795 
796 $moreforfilter = '';
797 $moreforfilter .= '<div class="divsearchfield">';
798 $moreforfilter .= $langs->trans('AccountingCategory').': ';
799 $moreforfilter .= '<div class="nowrap inline-block">';
800 $moreforfilter .= $formaccounting->select_accounting_category($search_account_category, 'search_account_category', 1, 0, 0, 0);
801 $moreforfilter .= '</div>';
802 $moreforfilter .= '</div>';
803 
804 $parameters = array();
805 $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
806 if (empty($reshook)) {
807  $moreforfilter .= $hookmanager->resPrint;
808 } else {
809  $moreforfilter = $hookmanager->resPrint;
810 }
811 
812 print '<div class="liste_titre liste_titre_bydiv centpercent">';
813 print $moreforfilter;
814 print '</div>';
815 
816 print '<div class="div-table-responsive">';
817 print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">';
818 
819 // Filters lines
820 print '<tr class="liste_titre_filter">';
821 // Action column
822 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
823  print '<td class="liste_titre center">';
824  $searchpicto = $form->showFilterButtons('left');
825  print $searchpicto;
826  print '</td>';
827 }
828 // Movement number
829 if (!empty($arrayfields['t.piece_num']['checked'])) {
830  print '<td class="liste_titre"><input type="text" name="search_mvt_num" size="6" value="'.dol_escape_htmltag($search_mvt_num).'"></td>';
831 }
832 // Code journal
833 if (!empty($arrayfields['t.code_journal']['checked'])) {
834  print '<td class="liste_titre center">';
835  print $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1, 'small maxwidth75');
836  print '</td>';
837 }
838 // Date document
839 if (!empty($arrayfields['t.doc_date']['checked'])) {
840  print '<td class="liste_titre center">';
841  print '<div class="nowrap">';
842  print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
843  print '</div>';
844  print '<div class="nowrap">';
845  print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
846  print '</div>';
847  print '</td>';
848 }
849 // Ref document
850 if (!empty($arrayfields['t.doc_ref']['checked'])) {
851  print '<td class="liste_titre"><input type="text" name="search_doc_ref" size="8" value="'.dol_escape_htmltag($search_doc_ref).'"></td>';
852 }
853 // Accountancy account
854 if (!empty($arrayfields['t.numero_compte']['checked'])) {
855  print '<td class="liste_titre">';
856  print '<div class="nowrap">';
857  print $formaccounting->select_account($search_accountancy_code_start, 'search_accountancy_code_start', $langs->trans('From'), array(), 1, 1, 'maxwidth150', 'account');
858  print '</div>';
859  print '<div class="nowrap">';
860  print $formaccounting->select_account($search_accountancy_code_end, 'search_accountancy_code_end', $langs->trans('to'), array(), 1, 1, 'maxwidth150', 'account');
861  print '</div>';
862  print '</td>';
863 }
864 // Subledger account
865 if (!empty($arrayfields['t.subledger_account']['checked'])) {
866  print '<td class="liste_titre">';
867  // TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because it does not
868  // use setup of keypress to select thirdparty and this hang browser on large database.
869  if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
870  print '<div class="nowrap">';
871  //print $langs->trans('From').' ';
872  print $formaccounting->select_auxaccount($search_accountancy_aux_code_start, 'search_accountancy_aux_code_start', $langs->trans('From'), 'maxwidth250', 'subledgeraccount');
873  print '</div>';
874  print '<div class="nowrap">';
875  print $formaccounting->select_auxaccount($search_accountancy_aux_code_end, 'search_accountancy_aux_code_end', $langs->trans('to'), 'maxwidth250', 'subledgeraccount');
876  print '</div>';
877  } else {
878  print '<input type="text" class="maxwidth75" name="search_accountancy_aux_code" value="'.dol_escape_htmltag($search_accountancy_aux_code).'">';
879  }
880  print '</td>';
881 }
882 // Label operation
883 if (!empty($arrayfields['t.label_operation']['checked'])) {
884  print '<td class="liste_titre">';
885  print '<input type="text" size="7" class="flat" name="search_mvt_label" value="'.dol_escape_htmltag($search_mvt_label).'"/>';
886  print '</td>';
887 }
888 // Debit
889 if (!empty($arrayfields['t.debit']['checked'])) {
890  print '<td class="liste_titre right">';
891  print '<input type="text" class="flat" name="search_debit" size="4" value="'.dol_escape_htmltag($search_debit).'">';
892  print '</td>';
893 }
894 // Credit
895 if (!empty($arrayfields['t.credit']['checked'])) {
896  print '<td class="liste_titre right">';
897  print '<input type="text" class="flat" name="search_credit" size="4" value="'.dol_escape_htmltag($search_credit).'">';
898  print '</td>';
899 }
900 // Lettering code
901 if (!empty($arrayfields['t.lettering_code']['checked'])) {
902  print '<td class="liste_titre center">';
903  print '<input type="text" size="3" class="flat" name="search_lettering_code" value="'.dol_escape_htmltag($search_lettering_code).'"/>';
904  print '<br><span class="nowrap"><input type="checkbox" name="search_not_reconciled" value="notreconciled"'.($search_not_reconciled == 'notreconciled' ? ' checked' : '').'>'.$langs->trans("NotReconciled").'</span>';
905  print '</td>';
906 }
907 
908 // Fields from hook
909 $parameters = array('arrayfields'=>$arrayfields);
910 $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook
911 print $hookmanager->resPrint;
912 
913 // Date creation
914 if (!empty($arrayfields['t.date_creation']['checked'])) {
915  print '<td class="liste_titre center">';
916  print '<div class="nowrap">';
917  print $form->selectDate($search_date_creation_start, 'search_date_creation_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
918  print '</div>';
919  print '<div class="nowrap">';
920  print $form->selectDate($search_date_creation_end, 'search_date_creation_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
921  print '</div>';
922  print '</td>';
923 }
924 // Date modification
925 if (!empty($arrayfields['t.tms']['checked'])) {
926  print '<td class="liste_titre center">';
927  print '<div class="nowrap">';
928  print $form->selectDate($search_date_modification_start, 'search_date_modification_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
929  print '</div>';
930  print '<div class="nowrap">';
931  print $form->selectDate($search_date_modification_end, 'search_date_modification_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
932  print '</div>';
933  print '</td>';
934 }
935 // Date export
936 if (!empty($arrayfields['t.date_export']['checked'])) {
937  print '<td class="liste_titre center">';
938  print '<div class="nowrap">';
939  print $form->selectDate($search_date_export_start, 'search_date_export_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
940  print '</div>';
941  print '<div class="nowrap">';
942  print $form->selectDate($search_date_export_end, 'search_date_export_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
943  print '</div>';
944  print '</td>';
945 }
946 // Date validation
947 if (!empty($arrayfields['t.date_validated']['checked'])) {
948  print '<td class="liste_titre center">';
949  print '<div class="nowrap">';
950  print $form->selectDate($search_date_validation_start, 'search_date_validation_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
951  print '</div>';
952  print '<div class="nowrap">';
953  print $form->selectDate($search_date_validation_end, 'search_date_validation_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
954  print '</div>';
955  print '</td>';
956 }
957 if (!empty($arrayfields['t.import_key']['checked'])) {
958  print '<td class="liste_titre center">';
959  print '<input class="flat searchstring maxwidth50" type="text" name="search_import_key" value="'.dol_escape_htmltag($search_import_key).'">';
960  print '</td>';
961 }
962 // Action column
963 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
964  print '<td class="liste_titre center">';
965  $searchpicto = $form->showFilterButtons();
966  print $searchpicto;
967  print '</td>';
968 }
969 print "</tr>\n";
970 
971 print '<tr class="liste_titre">';
972 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
973  print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch actioncolumn ');}
974 if (!empty($arrayfields['t.piece_num']['checked'])) {
975  print_liste_field_titre($arrayfields['t.piece_num']['label'], $_SERVER['PHP_SELF'], "t.piece_num", "", $param, "", $sortfield, $sortorder);
976 }
977 if (!empty($arrayfields['t.code_journal']['checked'])) {
978  print_liste_field_titre($arrayfields['t.code_journal']['label'], $_SERVER['PHP_SELF'], "t.code_journal", "", $param, '', $sortfield, $sortorder, 'center ');
979 }
980 if (!empty($arrayfields['t.doc_date']['checked'])) {
981  print_liste_field_titre($arrayfields['t.doc_date']['label'], $_SERVER['PHP_SELF'], "t.doc_date", "", $param, '', $sortfield, $sortorder, 'center ');
982 }
983 if (!empty($arrayfields['t.doc_ref']['checked'])) {
984  print_liste_field_titre($arrayfields['t.doc_ref']['label'], $_SERVER['PHP_SELF'], "t.doc_ref", "", $param, "", $sortfield, $sortorder);
985 }
986 if (!empty($arrayfields['t.numero_compte']['checked'])) {
987  print_liste_field_titre($arrayfields['t.numero_compte']['label'], $_SERVER['PHP_SELF'], "t.numero_compte", "", $param, "", $sortfield, $sortorder);
988 }
989 if (!empty($arrayfields['t.subledger_account']['checked'])) {
990  print_liste_field_titre($arrayfields['t.subledger_account']['label'], $_SERVER['PHP_SELF'], "t.subledger_account", "", $param, "", $sortfield, $sortorder);
991 }
992 if (!empty($arrayfields['t.label_operation']['checked'])) {
993  print_liste_field_titre($arrayfields['t.label_operation']['label'], $_SERVER['PHP_SELF'], "t.label_operation", "", $param, "", $sortfield, $sortorder);
994 }
995 if (!empty($arrayfields['t.debit']['checked'])) {
996  print_liste_field_titre($arrayfields['t.debit']['label'], $_SERVER['PHP_SELF'], "t.debit", "", $param, '', $sortfield, $sortorder, 'right ');
997 }
998 if (!empty($arrayfields['t.credit']['checked'])) {
999  print_liste_field_titre($arrayfields['t.credit']['label'], $_SERVER['PHP_SELF'], "t.credit", "", $param, '', $sortfield, $sortorder, 'right ');
1000 }
1001 if (!empty($arrayfields['t.lettering_code']['checked'])) {
1002  print_liste_field_titre($arrayfields['t.lettering_code']['label'], $_SERVER['PHP_SELF'], "t.lettering_code", "", $param, '', $sortfield, $sortorder, 'center ');
1003 }
1004 // Hook fields
1005 $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder);
1006 $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook
1007 print $hookmanager->resPrint;
1008 if (!empty($arrayfields['t.date_creation']['checked'])) {
1009  print_liste_field_titre($arrayfields['t.date_creation']['label'], $_SERVER['PHP_SELF'], "t.date_creation", "", $param, '', $sortfield, $sortorder, 'center ');
1010 }
1011 if (!empty($arrayfields['t.tms']['checked'])) {
1012  print_liste_field_titre($arrayfields['t.tms']['label'], $_SERVER['PHP_SELF'], "t.tms", "", $param, '', $sortfield, $sortorder, 'center ');
1013 }
1014 if (!empty($arrayfields['t.date_export']['checked'])) {
1015  print_liste_field_titre($arrayfields['t.date_export']['label'], $_SERVER['PHP_SELF'], "t.date_export,t.doc_date", "", $param, '', $sortfield, $sortorder, 'center ');
1016 }
1017 if (!empty($arrayfields['t.date_validated']['checked'])) {
1018  print_liste_field_titre($arrayfields['t.date_validated']['label'], $_SERVER['PHP_SELF'], "t.date_validated,t.doc_date", "", $param, '', $sortfield, $sortorder, 'center ');
1019 }
1020 if (!empty($arrayfields['t.import_key']['checked'])) {
1021  print_liste_field_titre($arrayfields['t.import_key']['label'], $_SERVER["PHP_SELF"], "t.import_key", "", $param, '', $sortfield, $sortorder, 'center ');
1022 }
1023 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1024  print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ');
1025 }
1026 print "</tr>\n";
1027 
1028 
1029 $line = new BookKeepingLine();
1030 
1031 // Loop on record
1032 // --------------------------------------------------------------------
1033 $i = 0;
1034 $totalarray = array();
1035 $totalarray['nbfield'] = 0;
1036 $total_debit = 0;
1037 $total_credit = 0;
1038 $totalarray['val'] = array ();
1039 $totalarray['val']['totaldebit'] = 0;
1040 $totalarray['val']['totalcredit'] = 0;
1041 
1042 while ($i < min($num, $limit)) {
1043  $obj = $db->fetch_object($resql);
1044  if (empty($obj)) {
1045  break; // Should not happen
1046  }
1047 
1048  $line->id = $obj->rowid;
1049  $line->doc_date = $db->jdate($obj->doc_date);
1050  $line->doc_type = $obj->doc_type;
1051  $line->doc_ref = $obj->doc_ref;
1052  $line->fk_doc = $obj->fk_doc;
1053  $line->fk_docdet = $obj->fk_docdet;
1054  $line->thirdparty_code = $obj->thirdparty_code;
1055  $line->subledger_account = $obj->subledger_account;
1056  $line->subledger_label = $obj->subledger_label;
1057  $line->numero_compte = $obj->numero_compte;
1058  $line->label_compte = $obj->label_compte;
1059  $line->label_operation = $obj->label_operation;
1060  $line->debit = $obj->debit;
1061  $line->credit = $obj->credit;
1062  $line->montant = $obj->amount; // deprecated
1063  $line->amount = $obj->amount;
1064  $line->sens = $obj->sens;
1065  $line->lettering_code = $obj->lettering_code;
1066  $line->fk_user_author = $obj->fk_user_author;
1067  $line->import_key = $obj->import_key;
1068  $line->code_journal = $obj->code_journal;
1069  $line->journal_label = $obj->journal_label;
1070  $line->piece_num = $obj->piece_num;
1071  $line->date_creation = $db->jdate($obj->date_creation);
1072  $line->date_modification = $db->jdate($obj->date_modification);
1073  $line->date_export = $db->jdate($obj->date_export);
1074  $line->date_validation = $db->jdate($obj->date_validation);
1075 
1076  $total_debit += $line->debit;
1077  $total_credit += $line->credit;
1078 
1079  print '<tr class="oddeven">';
1080  // Action column
1081  if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1082  print '<td class="nowraponall center">';
1083  if (($massactionbutton || $massaction) && $contextpage != 'poslist') { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
1084  $selected = 0;
1085  if (in_array($line->id, $arrayofselected)) {
1086  $selected = 1;
1087  }
1088  print '<input id="cb'.$line->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$line->id.'"'.($selected ? ' checked="checked"' : '').' />';
1089  }
1090  print '</td>';
1091  if (!$i) {
1092  $totalarray['nbfield']++;
1093  }
1094  }
1095 
1096  // Piece number
1097  if (!empty($arrayfields['t.piece_num']['checked'])) {
1098  print '<td>';
1099  $object->id = $line->id;
1100  $object->piece_num = $line->piece_num;
1101  print $object->getNomUrl(1, '', 0, '', 1);
1102  print '</td>';
1103  if (!$i) {
1104  $totalarray['nbfield']++;
1105  }
1106  }
1107 
1108  // Journal code
1109  if (!empty($arrayfields['t.code_journal']['checked'])) {
1110  $accountingjournal = new AccountingJournal($db);
1111  $result = $accountingjournal->fetch('', $line->code_journal);
1112  $journaltoshow = (($result > 0) ? $accountingjournal->getNomUrl(0, 0, 0, '', 0) : $line->code_journal);
1113  print '<td class="center tdoverflowmax150">'.$journaltoshow.'</td>';
1114  if (!$i) {
1115  $totalarray['nbfield']++;
1116  }
1117  }
1118 
1119  // Document date
1120  if (!empty($arrayfields['t.doc_date']['checked'])) {
1121  print '<td class="center">'.dol_print_date($line->doc_date, 'day').'</td>';
1122  if (!$i) {
1123  $totalarray['nbfield']++;
1124  }
1125  }
1126 
1127  // Document ref
1128  if (!empty($arrayfields['t.doc_ref']['checked'])) {
1129  if ($line->doc_type == 'customer_invoice') {
1130  $langs->loadLangs(array('bills'));
1131 
1132  require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
1133  $objectstatic = new Facture($db);
1134  $objectstatic->fetch($line->fk_doc);
1135  //$modulepart = 'facture';
1136 
1137  $filename = dol_sanitizeFileName($line->doc_ref);
1138  $filedir = $conf->facture->dir_output.'/'.dol_sanitizeFileName($line->doc_ref);
1139  $urlsource = $_SERVER['PHP_SELF'].'?id='.$objectstatic->id;
1140  $documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
1141  } elseif ($line->doc_type == 'supplier_invoice') {
1142  $langs->loadLangs(array('bills'));
1143 
1144  require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
1145  $objectstatic = new FactureFournisseur($db);
1146  $objectstatic->fetch($line->fk_doc);
1147  //$modulepart = 'invoice_supplier';
1148 
1149  $filename = dol_sanitizeFileName($line->doc_ref);
1150  $filedir = $conf->fournisseur->facture->dir_output.'/'.get_exdir($line->fk_doc, 2, 0, 0, $objectstatic, $modulepart).dol_sanitizeFileName($line->doc_ref);
1151  $subdir = get_exdir($objectstatic->id, 2, 0, 0, $objectstatic, $modulepart).dol_sanitizeFileName($line->doc_ref);
1152  $documentlink = $formfile->getDocumentsLink($objectstatic->element, $subdir, $filedir);
1153  } elseif ($line->doc_type == 'expense_report') {
1154  $langs->loadLangs(array('trips'));
1155 
1156  require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
1157  $objectstatic = new ExpenseReport($db);
1158  $objectstatic->fetch($line->fk_doc);
1159  //$modulepart = 'expensereport';
1160 
1161  $filename = dol_sanitizeFileName($line->doc_ref);
1162  $filedir = $conf->expensereport->dir_output.'/'.dol_sanitizeFileName($line->doc_ref);
1163  $urlsource = $_SERVER['PHP_SELF'].'?id='.$objectstatic->id;
1164  $documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
1165  } elseif ($line->doc_type == 'bank') {
1166  require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
1167  $objectstatic = new AccountLine($db);
1168  $objectstatic->fetch($line->fk_doc);
1169  } else {
1170  // Other type
1171  }
1172 
1173  $labeltoshow = '';
1174  $labeltoshowalt = '';
1175  if ($line->doc_type == 'customer_invoice' || $line->doc_type == 'supplier_invoice' || $line->doc_type == 'expense_report') {
1176  $labeltoshow .= $objectstatic->getNomUrl(1, '', 0, 0, '', 0, -1, 1);
1177  $labeltoshow .= $documentlink;
1178  $labeltoshowalt .= $objectstatic->ref;
1179  } elseif ($line->doc_type == 'bank') {
1180  $labeltoshow .= $objectstatic->getNomUrl(1);
1181  $labeltoshowalt .= $objectstatic->ref;
1182  $bank_ref = strstr($line->doc_ref, '-');
1183  $labeltoshow .= " " . $bank_ref;
1184  $labeltoshowalt .= " " . $bank_ref;
1185  } else {
1186  $labeltoshow .= $line->doc_ref;
1187  $labeltoshowalt .= $line->doc_ref;
1188  }
1189 
1190  print '<td class="nowraponall tdoverflowmax200" title="'.dol_escape_htmltag($labeltoshowalt).'">';
1191  print $labeltoshow;
1192  print "</td>\n";
1193  if (!$i) {
1194  $totalarray['nbfield']++;
1195  }
1196  }
1197 
1198  // Account number
1199  if (!empty($arrayfields['t.numero_compte']['checked'])) {
1200  print '<td>'.length_accountg($line->numero_compte).'</td>';
1201  if (!$i) {
1202  $totalarray['nbfield']++;
1203  }
1204  }
1205 
1206  // Subledger account
1207  if (!empty($arrayfields['t.subledger_account']['checked'])) {
1208  print '<td>'.length_accounta($line->subledger_account).'</td>';
1209  if (!$i) {
1210  $totalarray['nbfield']++;
1211  }
1212  }
1213 
1214  // Label operation
1215  if (!empty($arrayfields['t.label_operation']['checked'])) {
1216  print '<td class="small tdoverflowmax200" title="'.dol_escape_htmltag($line->label_operation).'">'.dol_escape_htmltag($line->label_operation).'</td>';
1217  if (!$i) {
1218  $totalarray['nbfield']++;
1219  }
1220  }
1221 
1222  // Amount debit
1223  if (!empty($arrayfields['t.debit']['checked'])) {
1224  print '<td class="right nowraponall amount">'.($line->debit != 0 ? price($line->debit) : '').'</td>';
1225  if (!$i) {
1226  $totalarray['nbfield']++;
1227  }
1228  if (!$i) {
1229  $totalarray['pos'][$totalarray['nbfield']] = 'totaldebit';
1230  }
1231  $totalarray['val']['totaldebit'] += $line->debit;
1232  }
1233 
1234  // Amount credit
1235  if (!empty($arrayfields['t.credit']['checked'])) {
1236  print '<td class="right nowraponall amount">'.($line->credit != 0 ? price($line->credit) : '').'</td>';
1237  if (!$i) {
1238  $totalarray['nbfield']++;
1239  }
1240  if (!$i) {
1241  $totalarray['pos'][$totalarray['nbfield']] = 'totalcredit';
1242  }
1243  $totalarray['val']['totalcredit'] += $line->credit;
1244  }
1245 
1246  // Lettering code
1247  if (!empty($arrayfields['t.lettering_code']['checked'])) {
1248  print '<td class="center">'.$line->lettering_code.'</td>';
1249  if (!$i) {
1250  $totalarray['nbfield']++;
1251  }
1252  }
1253 
1254  // Fields from hook
1255  $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);
1256  $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook
1257  print $hookmanager->resPrint;
1258 
1259  // Creation operation date
1260  if (!empty($arrayfields['t.date_creation']['checked'])) {
1261  print '<td class="center">'.dol_print_date($line->date_creation, 'dayhour', 'tzuserrel').'</td>';
1262  if (!$i) {
1263  $totalarray['nbfield']++;
1264  }
1265  }
1266 
1267  // Modification operation date
1268  if (!empty($arrayfields['t.tms']['checked'])) {
1269  print '<td class="center">'.dol_print_date($line->date_modification, 'dayhour', 'tzuserrel').'</td>';
1270  if (!$i) {
1271  $totalarray['nbfield']++;
1272  }
1273  }
1274 
1275  // Exported operation date
1276  if (!empty($arrayfields['t.date_export']['checked'])) {
1277  print '<td class="center nowraponall">'.dol_print_date($line->date_export, 'dayhour', 'tzuserrel').'</td>';
1278  if (!$i) {
1279  $totalarray['nbfield']++;
1280  }
1281  }
1282 
1283  // Validated operation date
1284  if (!empty($arrayfields['t.date_validated']['checked'])) {
1285  print '<td class="center nowraponall">'.dol_print_date($line->date_validation, 'dayhour', 'tzuserrel').'</td>';
1286  if (!$i) {
1287  $totalarray['nbfield']++;
1288  }
1289  }
1290 
1291  if (!empty($arrayfields['t.import_key']['checked'])) {
1292  print '<td class="tdoverflowmax100">'.$obj->import_key."</td>\n";
1293  if (!$i) {
1294  $totalarray['nbfield']++;
1295  }
1296  }
1297 
1298  // Action column
1299  if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1300  print '<td class="nowraponall center">';
1301  if (($massactionbutton || $massaction) && $contextpage != 'poslist') { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
1302  $selected = 0;
1303  if (in_array($line->id, $arrayofselected)) {
1304  $selected = 1;
1305  }
1306  print '<input id="cb'.$line->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$line->id.'"'.($selected ? ' checked="checked"' : '').' />';
1307  }
1308  print '</td>';
1309  if (!$i) {
1310  $totalarray['nbfield']++;
1311  }
1312  }
1313 
1314 
1315  print "</tr>\n";
1316 
1317  $i++;
1318 }
1319 
1320 // Show total line
1321 include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
1322 
1323 // If no record found
1324 if ($num == 0) {
1325  $colspan = 1;
1326  foreach ($arrayfields as $key => $val) {
1327  if (!empty($val['checked'])) {
1328  $colspan++;
1329  }
1330  }
1331  print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
1332 }
1333 
1334 $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql);
1335 $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1336 print $hookmanager->resPrint;
1337 
1338 print "</table>";
1339 print '</div>';
1340 
1341 print '</form>';
1342 
1343 // End of page
1344 llxFooter();
1345 
1346 $db->close();
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage bank transaction lines.
Class to manage categories of an accounting account.
Class to manage accounting journals.
Class to manage Ledger (General Ledger and Subledger)
Class BookKeepingLine.
Class to manage Trips and Expenses.
Class to manage suppliers invoices.
Class to manage invoices.
Class to manage generation of HTML components for accounting management.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Classe permettant la generation de composants html autre Only common components are here.
Class Lettering.
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
Definition: date.lib.php:595
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show 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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
$formconfirm
if ($action == 'delbookkeepingyear') {
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.