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();
dol_getdate
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
Definition: functions.lib.php:2925
dol_sanitizeFileName
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
Definition: functions.lib.php:1323
llxFooter
llxFooter()
Empty footer.
Definition: wrapper.php:70
dol_escape_htmltag
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...
Definition: functions.lib.php:1600
GETPOST
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
Definition: functions.lib.php:609
FactureFournisseur
Class to manage suppliers invoices.
Definition: fournisseur.facture.class.php:51
dol_print_error
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
Definition: functions.lib.php:5107
BookKeepingLine
Class BookKeepingLine.
Definition: bookkeeping.class.php:2171
AccountancyCategory
Class to manage categories of an accounting account.
Definition: accountancycategory.class.php:32
$form
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
FormOther
Classe permettant la generation de composants html autre Only common components are here.
Definition: html.formother.class.php:39
Facture
Class to manage invoices.
Definition: facture.class.php:60
FormAccounting
Class to manage generation of HTML components for accounting management.
Definition: html.formaccounting.class.php:33
dol_print_date
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
Definition: functions.lib.php:2675
img_picto
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
Definition: functions.lib.php:4135
llxHeader
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
get_exdir
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
Definition: functions.lib.php:6882
$formconfirm
$formconfirm
if ($action == 'delbookkeepingyear') {
Definition: listbyaccount.php:634
FormFile
Class to offer components to list and upload files.
Definition: html.formfile.class.php:36
AccountingJournal
Class to manage accounting journals.
Definition: accountingjournal.class.php:27
dolGetButtonTitle
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.
Definition: functions.lib.php:11263
print_barre_liste
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.
Definition: functions.lib.php:5530
setEventMessages
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
Definition: functions.lib.php:8673
$sql
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
dol_get_last_day
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
isModEnabled
isModEnabled($module)
Is Dolibarr module enabled.
Definition: functions.lib.php:207
BookKeeping
Class to manage Ledger (General Ledger and Subledger)
Definition: bookkeeping.class.php:33
getDolGlobalString
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
Definition: functions.lib.php:142
GETPOSTISSET
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
Definition: functions.lib.php:509
print_liste_field_titre
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
Definition: functions.lib.php:5295
Lettering
Class Lettering.
Definition: lettering.class.php:34
natural_search
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...
Definition: functions.lib.php:10024
Form
Class to manage generation of HTML components Only common components must be here.
Definition: html.form.class.php:53
AccountLine
Class to manage bank transaction lines.
Definition: account.class.php:1874
ExpenseReport
Class to manage Trips and Expenses.
Definition: expensereport.class.php:36
dol_now
dol_now($mode='auto')
Return date for now.
Definition: functions.lib.php:3056
price
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.
Definition: functions.lib.php:5829
accessforbidden
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
Definition: security.lib.php:1169
dol_mktime
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...
Definition: functions.lib.php:2968
getDolGlobalInt
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
Definition: functions.lib.php:156