dolibarr 18.0.6
list.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
5 * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
6 * Copyright (C) 2015 Alexandre Spangaro <aspangaro@open-dsi.fr>
7 * Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
8 * Copyright (C) 2018 Charlene Benke <charlie@patas-monkey.com>
9 * Copyright (C) 2019 Juanjo Menent <jmenent@2byte.es>
10 * Copyright (C) 2019-2021 Frédéric France <frederic.france@netlogic.fr>
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 3 of the License, or
15 * (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program. If not, see <https://www.gnu.org/licenses/>.
24 */
25
32// Load Dolibarr environment
33require '../main.inc.php';
34require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
35require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
36require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
37require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
38require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
39require_once DOL_DOCUMENT_ROOT.'/core/class/html.formexpensereport.class.php';
40require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php';
41require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport_ik.class.php';
42
43// Load translation files required by the page
44$langs->loadLangs(array('companies', 'users', 'trips'));
45
46$action = GETPOST('action', 'aZ09');
47$massaction = GETPOST('massaction', 'alpha');
48$show_files = GETPOST('show_files', 'int');
49$confirm = GETPOST('confirm', 'alpha');
50$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button
51$toselect = GETPOST('toselect', 'array');
52$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'expensereportlist';
53$mode = GETPOST('mode', 'alpha');
54
55$childids = $user->getAllChildIds(1);
56
57// Security check
58$socid = GETPOST('socid', 'int');
59if ($user->socid) {
60 $socid = $user->socid;
61}
62$result = restrictedArea($user, 'expensereport', '', '');
63$id = GETPOST('id', 'int');
64// If we are on the view of a specific user
65if ($id > 0) {
66 $canread = 0;
67 if ($id == $user->id) {
68 $canread = 1;
69 }
70 if (!empty($user->rights->expensereport->readall)) {
71 $canread = 1;
72 }
73 if (!empty($user->rights->expensereport->lire) && in_array($id, $childids)) {
74 $canread = 1;
75 }
76 if (!$canread) {
78 }
79}
80
81$diroutputmassaction = $conf->expensereport->dir_output.'/temp/massgeneration/'.$user->id;
82
83
84// Load variable for pagination
85$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
86$sortfield = GETPOST('sortfield', 'aZ09comma');
87$sortorder = GETPOST('sortorder', 'aZ09comma');
88$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
89if (empty($page) || $page == -1) {
90 $page = 0;
91} // If $page is not defined, or '' or -1
92$offset = $limit * $page;
93$pageprev = $page - 1;
94$pagenext = $page + 1;
95if (!$sortorder) {
96 $sortorder = "DESC";
97}
98if (!$sortfield) {
99 $sortfield = "d.date_debut";
100}
101
102
103$sall = trim((GETPOST('search_all', 'alphanohtml') != '') ?GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml'));
104
105$search_ref = GETPOST('search_ref', 'alpha');
106$search_user = GETPOST('search_user', 'int');
107$search_amount_ht = GETPOST('search_amount_ht', 'alpha');
108$search_amount_vat = GETPOST('search_amount_vat', 'alpha');
109$search_amount_ttc = GETPOST('search_amount_ttc', 'alpha');
110$search_status = (GETPOST('search_status', 'intcomma') != '' ?GETPOST('search_status', 'intcomma') : GETPOST('statut', 'intcomma'));
111
112$search_date_startday = GETPOST('search_date_startday', 'int');
113$search_date_startmonth = GETPOST('search_date_startmonth', 'int');
114$search_date_startyear = GETPOST('search_date_startyear', 'int');
115$search_date_startendday = GETPOST('search_date_startendday', 'int');
116$search_date_startendmonth = GETPOST('search_date_startendmonth', 'int');
117$search_date_startendyear = GETPOST('search_date_startendyear', 'int');
118$search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver
119$search_date_startend = dol_mktime(23, 59, 59, $search_date_startendmonth, $search_date_startendday, $search_date_startendyear);
120
121$search_date_endday = GETPOST('search_date_endday', 'int');
122$search_date_endmonth = GETPOST('search_date_endmonth', 'int');
123$search_date_endyear = GETPOST('search_date_endyear', 'int');
124$search_date_endendday = GETPOST('search_date_endendday', 'int');
125$search_date_endendmonth = GETPOST('search_date_endendmonth', 'int');
126$search_date_endendyear = GETPOST('search_date_endendyear', 'int');
127$search_date_end = dol_mktime(0, 0, 0, $search_date_endmonth, $search_date_endday, $search_date_endyear); // Use tzserver
128$search_date_endend = dol_mktime(23, 59, 59, $search_date_endendmonth, $search_date_endendday, $search_date_endendyear);
129
130$optioncss = GETPOST('optioncss', 'alpha');
131
132if ($search_status == '') {
133 $search_status = -1;
134}
135if ($search_user == '') {
136 $search_user = -1;
137}
138
139// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
140$object = new ExpenseReport($db);
141$hookmanager->initHooks(array('expensereportlist'));
142$extrafields = new ExtraFields($db);
143
144// fetch optionals attributes and labels
145$extrafields->fetch_name_optionals_label($object->table_element);
146
147$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
148
149
150// List of fields to search into when doing a "search in all"
151$fieldstosearchall = array(
152 'd.ref'=>'Ref',
153 'd.note_public'=>"NotePublic",
154 'u.lastname'=>'EmployeeLastname',
155 'u.firstname'=>"EmployeeFirstname",
156 'u.login'=>"Login",
157);
158if (empty($user->socid)) {
159 $fieldstosearchall["d.note_private"] = "NotePrivate";
160}
161
162$arrayfields = array(
163 'd.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
164 'user'=>array('label'=>$langs->trans("User"), 'checked'=>1),
165 'd.date_debut'=>array('label'=>$langs->trans("DateStart"), 'checked'=>1),
166 'd.date_fin'=>array('label'=>$langs->trans("DateEnd"), 'checked'=>1),
167 'd.date_valid'=>array('label'=>$langs->trans("DateValidation"), 'checked'=>1),
168 'd.date_approve'=>array('label'=>$langs->trans("DateApprove"), 'checked'=>1),
169 'd.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1),
170 'd.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>1),
171 'd.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>1),
172 'd.date_create'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
173 'd.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
174 'd.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000),
175);
176// Extra fields
177include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
178
179$canedituser = (!empty($user->admin) || $user->hasRight('user', 'user', 'creer'));
180
181$objectuser = new User($db);
182
183
184/*
185 * Actions
186 */
187
188if (GETPOST('cancel', 'alpha')) {
189 $action = 'list'; $massaction = '';
190}
191if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
192 $massaction = '';
193}
194
195$parameters = array('socid'=>$socid);
196$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
197if ($reshook < 0) {
198 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
199}
200
201if (empty($reshook)) {
202 // Selection of new fields
203 include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
204
205 // Purge search criteria
206 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
207 $search_ref = "";
208 $search_user = "";
209 $search_amount_ht = "";
210 $search_amount_vat = "";
211 $search_amount_ttc = "";
212 $search_status = "";
213 $search_date_startday = '';
214 $search_date_startmonth = '';
215 $search_date_startyear = '';
216 $search_date_startendday = '';
217 $search_date_startendmonth = '';
218 $search_date_startendyear = '';
219 $search_date_start = '';
220 $search_date_startend = '';
221 $search_date_endday = '';
222 $search_date_endmonth = '';
223 $search_date_endyear = '';
224 $search_date_endendday = '';
225 $search_date_endendmonth = '';
226 $search_date_endendyear = '';
227 $search_date_end = '';
228 $search_date_endend = '';
229 $toselect = array();
230 $search_array_options = array();
231 }
232 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')
233 || GETPOST('button_search_x', 'alpha') || GETPOST('button_search.x', 'alpha') || GETPOST('button_search', 'alpha')) {
234 $massaction = ''; // Protection to avoid mass action if we force a new search during a mass action confirmation
235 }
236
237 // Mass actions
238 $objectclass = 'ExpenseReport';
239 $objectlabel = 'ExpenseReport';
240 $permissiontoread = $user->rights->expensereport->lire;
241 $permissiontodelete = $user->rights->expensereport->supprimer;
242 $uploaddir = $conf->expensereport->dir_output;
243 include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
244}
245
246
247/*
248 * View
249 */
250
251$form = new Form($db);
252$formother = new FormOther($db);
253$formfile = new FormFile($db);
254$formexpensereport = new FormExpenseReport($db);
255
256$fuser = new User($db);
257
258$title = $langs->trans("TripsAndExpenses");
259llxHeader('', $title);
260
261$max_year = 5;
262$min_year = 10;
263
264// Get current user id
265$user_id = $user->id;
266
267if ($id > 0) {
268 // Charge utilisateur edite
269 $fuser->fetch($id, '', '', 1);
270 $fuser->getrights();
271 $user_id = $fuser->id;
272
273 $search_user = $user_id;
274}
275
276$sql = "SELECT d.rowid, d.ref, d.fk_user_author, d.total_ht, d.total_tva, d.total_ttc, d.fk_statut as status,";
277$sql .= " d.date_debut, d.date_fin, d.date_create, d.tms as date_modif, d.date_valid, d.date_approve, d.note_private, d.note_public,";
278$sql .= " u.rowid as id_user, u.firstname, u.lastname, u.login, u.email, u.statut, u.photo";
279// Add fields from extrafields
280if (!empty($extrafields->attributes[$object->table_element]['label'])) {
281 foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
282 $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key." as options_".$key : '');
283 }
284}
285// Add fields from hooks
286$parameters = array();
287$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook
288$sql .= $hookmanager->resPrint;
289
290$sqlfields = $sql; // $sql fields to remove for count total
291
292$sql .= " FROM ".MAIN_DB_PREFIX."expensereport as d";
293if (isset($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
294 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (d.rowid = ef.fk_object)";
295}
296$sql .= ", ".MAIN_DB_PREFIX."user as u";
297$sql .= " WHERE d.fk_user_author = u.rowid AND d.entity IN (".getEntity('expensereport').")";
298// Search all
299if (!empty($sall)) {
300 $sql .= natural_search(array_keys($fieldstosearchall), $sall);
301}
302// Ref
303if (!empty($search_ref)) {
304 $sql .= natural_search('d.ref', $search_ref);
305}
306// Date Start
307if ($search_date_start) {
308 $sql .= " AND d.date_debut >= '".$db->idate($search_date_start)."'";
309}
310if ($search_date_startend) {
311 $sql .= " AND d.date_debut <= '".$db->idate($search_date_startend)."'";
312}
313// Date End
314if ($search_date_end) {
315 $sql .= " AND d.date_fin >= '".$db->idate($search_date_end)."'";
316}
317if ($search_date_endend) {
318 $sql .= " AND d.date_fin <= '".$db->idate($search_date_endend)."'";
319}
320
321if ($search_amount_ht != '') {
322 $sql .= natural_search('d.total_ht', $search_amount_ht, 1);
323}
324if ($search_amount_ttc != '') {
325 $sql .= natural_search('d.total_ttc', $search_amount_ttc, 1);
326}
327// User
328if ($search_user != '' && $search_user >= 0) {
329 $sql .= " AND u.rowid = '".$db->escape($search_user)."'";
330}
331// Status
332if ($search_status != '' && $search_status >= 0) {
333 $sql .= " AND d.fk_statut IN (".$db->sanitize($search_status).")";
334}
335// RESTRICT RIGHTS
336if (empty($user->rights->expensereport->readall) && empty($user->rights->expensereport->lire_tous)
337 && (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || empty($user->rights->expensereport->writeall_advance))) {
338 $sql .= " AND d.fk_user_author IN (".$db->sanitize(join(',', $childids)).")\n";
339}
340// Add where from extra fields
341include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
342// Add where from hooks
343$parameters = array();
344$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook
345$sql .= $hookmanager->resPrint;
346
347// Count total nb of records
348$nbtotalofrecords = '';
349if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
350 /* The fast and low memory method to get and count full list converts the sql into a sql count */
351 $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
352 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
353 $resql = $db->query($sqlforcount);
354 if ($resql) {
355 $objforcount = $db->fetch_object($resql);
356 $nbtotalofrecords = $objforcount->nbtotalofrecords;
357 } else {
358 dol_print_error($db);
359 }
360
361 if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
362 $page = 0;
363 $offset = 0;
364 }
365 $db->free($resql);
366}
367
368// Complete request and execute it with limit
369$sql .= $db->order($sortfield, $sortorder);
370if ($limit) {
371 $sql .= $db->plimit($limit + 1, $offset);
372}
373
374//print $sql;
375$resql = $db->query($sql);
376if ($resql) {
377 $num = $db->num_rows($resql);
378
379 $arrayofselected = is_array($toselect) ? $toselect : array();
380
381 $param = '';
382 if (!empty($mode)) {
383 $param .= '&mode='.urlencode($mode);
384 }
385 if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
386 $param .= '&contextpage='.urlencode($contextpage);
387 }
388 if ($limit > 0 && $limit != $conf->liste_limit) {
389 $param .= '&limit='.((int) $limit);
390 }
391 if ($sall) {
392 $param .= "&sall=".urlencode($sall);
393 }
394 if ($search_ref) {
395 $param .= "&search_ref=".urlencode($search_ref);
396 }
397 // Start date
398 if ($search_date_startday) {
399 $param .= '&search_date_startday='.urlencode($search_date_startday);
400 }
401 if ($search_date_startmonth) {
402 $param .= '&search_date_startmonth='.urlencode($search_date_startmonth);
403 }
404 if ($search_date_startyear) {
405 $param .= '&search_date_startyear='.urlencode($search_date_startyear);
406 }
407 if ($search_date_startendday) {
408 $param .= '&search_date_startendday='.urlencode($search_date_startendday);
409 }
410 if ($search_date_startendmonth) {
411 $param .= '&search_date_startendmonth='.urlencode($search_date_startendmonth);
412 }
413 if ($search_date_startendyear) {
414 $param .= '&search_date_startendyear='.urlencode($search_date_startendyear);
415 }
416 // End date
417 if ($search_date_endday) {
418 $param .= '&search_date_endday='.urlencode($search_date_endday);
419 }
420 if ($search_date_endmonth) {
421 $param .= '&search_date_endmonth='.urlencode($search_date_endmonth);
422 }
423 if ($search_date_endyear) {
424 $param .= '&search_date_endyear='.urlencode($search_date_endyear);
425 }
426 if ($search_date_endendday) {
427 $param .= '&search_date_endendday='.urlencode($search_date_endendday);
428 }
429 if ($search_date_endendmonth) {
430 $param .= '&search_date_endendmonth='.urlencode($search_date_endendmonth);
431 }
432 if ($search_date_endendyear) {
433 $param .= '&search_date_endendyear='.urlencode($search_date_endendyear);
434 }
435 if ($search_user) {
436 $param .= "&search_user=".urlencode($search_user);
437 }
438 if ($search_amount_ht) {
439 $param .= "&search_amount_ht=".urlencode($search_amount_ht);
440 }
441 if ($search_amount_ttc) {
442 $param .= "&search_amount_ttc=".urlencode($search_amount_ttc);
443 }
444 if ($search_status >= 0) {
445 $param .= "&search_status=".urlencode($search_status);
446 }
447 if ($optioncss != '') {
448 $param .= '&optioncss='.urlencode($optioncss);
449 }
450 // Add $param from extra fields
451 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
452
453 // List of mass actions available
454 $arrayofmassactions = array(
455 'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"),
456 'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
457 'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
458 );
459 if ($user->rights->expensereport->supprimer) {
460 $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
461 }
462 if (in_array($massaction, array('presend', 'predelete'))) {
463 $arrayofmassactions = array();
464 }
465 $massactionbutton = $form->selectMassAction('', $arrayofmassactions);
466
467 // Lines of title fields
468 print '<form id="searchFormList" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
469 if ($optioncss != '') {
470 print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
471 }
472 print '<input type="hidden" name="token" value="'.newToken().'">';
473 print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
474 print '<input type="hidden" name="action" value="'.($action == 'edit' ? 'update' : 'list').'">';
475 print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
476 print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
477 print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
478 print '<input type="hidden" name="mode" value="'.$mode.'">';
479 if ($id > 0) {
480 print '<input type="hidden" name="id" value="'.$id.'">';
481 }
482
483 if ($id > 0) { // For user tab
484 $title = $langs->trans("User");
485 $linkback = '<a href="'.DOL_URL_ROOT.'/user/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
486 $head = user_prepare_head($fuser);
487
488 print dol_get_fiche_head($head, 'expensereport', $title, -1, 'user');
489
490 dol_banner_tab($fuser, 'id', $linkback, $user->rights->user->user->lire || $user->admin);
491
492 print dol_get_fiche_end();
493
494 if ($action != 'edit') {
495 print '<div class="tabsAction">';
496
497 $childids = $user->getAllChildIds(1);
498
499 $canedit = ((in_array($user_id, $childids) && $user->rights->expensereport->creer)
500 || ($conf->global->MAIN_USE_ADVANCED_PERMS && $user->rights->expensereport->writeall_advance));
501
502 // Buttons for actions
503 if ($canedit) {
504 print '<a href="'.DOL_URL_ROOT.'/expensereport/card.php?action=create&fk_user_author='.$fuser->id.'" class="butAction">'.$langs->trans("AddTrip").'</a>';
505 } else {
506 print '<a href="#" class="butActionRefused" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans("AddTrip").'</a>';
507 }
508
509 print '</div>';
510 } else {
511 print $form->buttonsSaveCancel("Save", '');
512 }
513 } else {
514 $title = $langs->trans("ListTripsAndExpenses");
515
516 $url = DOL_URL_ROOT.'/expensereport/card.php?action=create';
517 if (!empty($socid)) {
518 $url .= '&socid='.$socid;
519 }
520 $newcardbutton = '';
521 $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition'));
522 $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition'));
523 $newcardbutton .= dolGetButtonTitle($langs->trans('NewTrip'), '', 'fa fa-plus-circle', $url, '', $user->rights->expensereport->creer);
524
525 print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'trip', 0, $newcardbutton, '', $limit, 0, 0, 1);
526 }
527
528 $topicmail = "SendExpenseReport";
529 $modelmail = "expensereport";
530 $objecttmp = new ExpenseReport($db);
531 $trackid = 'exp'.$object->id;
532 include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
533
534 if ($sall) {
535 foreach ($fieldstosearchall as $key => $val) {
536 $fieldstosearchall[$key] = $langs->trans($val);
537 }
538 print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $sall).join(', ', $fieldstosearchall).'</div>';
539 }
540
541 $moreforfilter = '';
542
543 $parameters = array();
544 $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook
545 if (empty($reshook)) {
546 $moreforfilter .= $hookmanager->resPrint;
547 } else {
548 $moreforfilter = $hookmanager->resPrint;
549 }
550
551 if (!empty($moreforfilter)) {
552 print '<div class="liste_titre liste_titre_bydiv centpercent">';
553 print $moreforfilter;
554 print '</div>';
555 }
556
557 $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
558 $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields
559 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
560
561 print '<div class="div-table-responsive">';
562 print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
563
564 // Filters
565 print '<tr class="liste_titre_filter">';
566 // Action column
567 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
568 print '<td class="liste_titre maxwidthsearch">';
569 $searchpicto = $form->showFilterButtons('left');
570 print $searchpicto;
571 print '</td>';
572 }
573 if (!empty($arrayfields['d.ref']['checked'])) {
574 print '<td class="liste_titre" align="left">';
575 print '<input class="flat" size="15" type="text" name="search_ref" value="'.$search_ref.'">';
576 print '</td>';
577 }
578 // User
579 if (!empty($arrayfields['user']['checked'])) {
580 if ($user->rights->expensereport->readall || $user->rights->expensereport->lire_tous) {
581 print '<td class="liste_titre maxwidthonspartphone" align="left">';
582 print $form->select_dolusers($search_user, 'search_user', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth200');
583 print '</td>';
584 } else {
585 print '<td class="liste_titre">&nbsp;</td>';
586 }
587 }
588 // Date start
589 if (!empty($arrayfields['d.date_debut']['checked'])) {
590 print '<td class="liste_titre" align="center">';
591 print '<div class="nowrap">';
592 print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
593 print '</div>';
594 print '<div class="nowrap">';
595 print $form->selectDate($search_date_startend ? $search_date_startend : -1, 'search_date_startend', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
596 print '</div>';
597 print '</td>';
598 }
599 // Date end
600 if (!empty($arrayfields['d.date_fin']['checked'])) {
601 print '<td class="liste_titre" align="center">';
602 print '<div class="nowrap">';
603 print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
604 print '</div>';
605 print '<div class="nowrap">';
606 print $form->selectDate($search_date_endend ? $search_date_endend : -1, 'search_date_endend', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
607 print '</div>';
608 print '</td>';
609 }
610 // Date valid
611 if (!empty($arrayfields['d.date_valid']['checked'])) {
612 print '<td class="liste_titre" align="center">';
613 //print '<input class="flat" type="text" size="1" maxlength="2" name="month_end" value="'.$month_end.'">';
614 //print $formother->selectyear($year_end,'year_end',1, $min_year, $max_year);
615 print '</td>';
616 }
617 // Date approve
618 if (!empty($arrayfields['d.date_approve']['checked'])) {
619 print '<td class="liste_titre" align="center">';
620 //print '<input class="flat" type="text" size="1" maxlength="2" name="month_end" value="'.$month_end.'">';
621 //print $formother->selectyear($year_end,'year_end',1, $min_year, $max_year);
622 print '</td>';
623 }
624 // Amount with no tax
625 if (!empty($arrayfields['d.total_ht']['checked'])) {
626 print '<td class="liste_titre right"><input class="flat" type="text" size="5" name="search_amount_ht" value="'.$search_amount_ht.'"></td>';
627 }
628 if (!empty($arrayfields['d.total_vat']['checked'])) {
629 print '<td class="liste_titre right"><input class="flat" type="text" size="5" name="search_amount_vat" value="'.$search_amount_vat.'"></td>';
630 }
631 // Amount with all taxes
632 if (!empty($arrayfields['d.total_ttc']['checked'])) {
633 print '<td class="liste_titre right"><input class="flat" type="text" size="5" name="search_amount_ttc" value="'.$search_amount_ttc.'"></td>';
634 }
635 // Extra fields
636 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
637
638 // Fields from hook
639 $parameters = array('arrayfields'=>$arrayfields);
640 $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters); // Note that $action and $object may have been modified by hook
641 print $hookmanager->resPrint;
642 // Date creation
643 if (!empty($arrayfields['d.date_create']['checked'])) {
644 print '<td class="liste_titre">';
645 print '</td>';
646 }
647 // Date modification
648 if (!empty($arrayfields['d.tms']['checked'])) {
649 print '<td class="liste_titre">';
650 print '</td>';
651 }
652 // Status
653 if (!empty($arrayfields['d.fk_statut']['checked'])) {
654 print '<td class="liste_titre right">';
655 $formexpensereport->selectExpensereportStatus($search_status, 'search_status', 1, 1);
656 print '</td>';
657 }
658 // Action column
659 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
660 print '<td class="liste_titre maxwidthsearch">';
661 $searchpicto = $form->showFilterButtons();
662 print $searchpicto;
663 print '</td>';
664 }
665
666 print "</tr>\n";
667
668 $totalarray = array();
669 $totalarray['nbfield'] = 0;
670
671 print '<tr class="liste_titre">';
672 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
673 print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch ');
674 $totalarray['nbfield']++;
675 }
676 if (!empty($arrayfields['d.ref']['checked'])) {
677 print_liste_field_titre($arrayfields['d.ref']['label'], $_SERVER["PHP_SELF"], "d.ref", "", $param, '', $sortfield, $sortorder);
678 $totalarray['nbfield']++;
679 }
680 if (!empty($arrayfields['user']['checked'])) {
681 print_liste_field_titre($arrayfields['user']['label'], $_SERVER["PHP_SELF"], "u.lastname", "", $param, '', $sortfield, $sortorder);
682 $totalarray['nbfield']++;
683 }
684 if (!empty($arrayfields['d.date_debut']['checked'])) {
685 print_liste_field_titre($arrayfields['d.date_debut']['label'], $_SERVER["PHP_SELF"], "d.date_debut", "", $param, 'align="center"', $sortfield, $sortorder);
686 $totalarray['nbfield']++;
687 }
688 if (!empty($arrayfields['d.date_fin']['checked'])) {
689 print_liste_field_titre($arrayfields['d.date_fin']['label'], $_SERVER["PHP_SELF"], "d.date_fin", "", $param, 'align="center"', $sortfield, $sortorder);
690 $totalarray['nbfield']++;
691 }
692 if (!empty($arrayfields['d.date_valid']['checked'])) {
693 print_liste_field_titre($arrayfields['d.date_valid']['label'], $_SERVER["PHP_SELF"], "d.date_valid", "", $param, 'align="center"', $sortfield, $sortorder);
694 $totalarray['nbfield']++;
695 }
696 if (!empty($arrayfields['d.date_approve']['checked'])) {
697 print_liste_field_titre($arrayfields['d.date_approve']['label'], $_SERVER["PHP_SELF"], "d.date_approve", "", $param, 'align="center"', $sortfield, $sortorder);
698 $totalarray['nbfield']++;
699 }
700 if (!empty($arrayfields['d.total_ht']['checked'])) {
701 print_liste_field_titre($arrayfields['d.total_ht']['label'], $_SERVER["PHP_SELF"], "d.total_ht", "", $param, 'align="right"', $sortfield, $sortorder);
702 $totalarray['nbfield']++;
703 }
704 if (!empty($arrayfields['d.total_vat']['checked'])) {
705 print_liste_field_titre($arrayfields['d.total_vat']['label'], $_SERVER["PHP_SELF"], "d.total_tva", "", $param, 'align="right"', $sortfield, $sortorder);
706 $totalarray['nbfield']++;
707 }
708 if (!empty($arrayfields['d.total_ttc']['checked'])) {
709 print_liste_field_titre($arrayfields['d.total_ttc']['label'], $_SERVER["PHP_SELF"], "d.total_ttc", "", $param, 'align="right"', $sortfield, $sortorder);
710 $totalarray['nbfield']++;
711 }
712 // Extra fields
713 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
714 // Hook fields
715 $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder);
716 $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters); // Note that $action and $object may have been modified by hook
717 print $hookmanager->resPrint;
718 if (!empty($arrayfields['d.date_create']['checked'])) {
719 print_liste_field_titre($arrayfields['d.date_create']['label'], $_SERVER["PHP_SELF"], "d.date_create", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder);
720 $totalarray['nbfield']++;
721 }
722 if (!empty($arrayfields['d.tms']['checked'])) {
723 print_liste_field_titre($arrayfields['d.tms']['label'], $_SERVER["PHP_SELF"], "d.tms", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder);
724 $totalarray['nbfield']++;
725 }
726 if (!empty($arrayfields['d.fk_statut']['checked'])) {
727 print_liste_field_titre($arrayfields['d.fk_statut']['label'], $_SERVER["PHP_SELF"], "d.fk_statut", "", $param, 'align="right"', $sortfield, $sortorder);
728 $totalarray['nbfield']++;
729 }
730 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
731 print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch ');
732 $totalarray['nbfield']++;
733 }
734 print "</tr>\n";
735
736 $total_total_ht = 0;
737 $total_total_ttc = 0;
738 $total_total_tva = 0;
739
740 $expensereportstatic = new ExpenseReport($db);
741 $usertmp = new User($db);
742
743 if ($num > 0) {
744 $i = 0;
745 $savnbfield = $totalarray['nbfield'];
746 $totalarray = array();
747 $totalarray['nbfield'] = 0;
748 $totalarray['val'] = array();
749 $totalarray['val']['d.total_ht'] = 0;
750 $totalarray['val']['d.total_tva'] = 0;
751 $totalarray['val']['d.total_ttc'] = 0;
752 $totalarray['totalizable'] = array();
753
754 $imaxinloop = ($limit ? min($num, $limit) : $num);
755 while ($i < min($num, $limit)) {
756 $obj = $db->fetch_object($resql);
757
758 $expensereportstatic->id = $obj->rowid;
759 $expensereportstatic->ref = $obj->ref;
760 $expensereportstatic->status = $obj->status;
761 $expensereportstatic->date_debut = $db->jdate($obj->date_debut);
762 $expensereportstatic->date_fin = $db->jdate($obj->date_fin);
763 $expensereportstatic->date_create = $db->jdate($obj->date_create);
764 $expensereportstatic->date_modif = $db->jdate($obj->date_modif);
765 $expensereportstatic->date_valid = $db->jdate($obj->date_valid);
766 $expensereportstatic->date_approve = $db->jdate($obj->date_approve);
767 $expensereportstatic->note_private = $obj->note_private;
768 $expensereportstatic->note_public = $obj->note_public;
769
770 if ($mode == 'kanban') {
771 if ($i == 0) {
772 print '<tr class="trkanban"><td colspan="'.$savnbfield.'">';
773 print '<div class="box-flex-container kanban">';
774 }
775 // TODO Use a cache on user
776 $usertmp->fetch($obj->id_user);
777
778 // Output Kanban
779 if ($massactionbutton || $massaction) {
780 $selected = 0;
781
782 print $expensereportstatic->getKanbanView('', array('userauthor' => $usertmp->getNomUrl(1), 'selected' => in_array($expensereportstatic->id, $arrayofselected)));
783 }
784 if ($i == ($imaxinloop - 1)) {
785 print '</div>';
786 print '</td></tr>';
787 }
788 } else {
789 print '<tr class="oddeven">';
790 // Action column
791 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
792 print '<td class="nowrap center">';
793 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
794 $selected = 0;
795 if (in_array($obj->rowid, $arrayofselected)) {
796 $selected = 1;
797 }
798 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
799 }
800 print '</td>';
801 if (!$i) {
802 $totalarray['nbfield']++;
803 }
804 }
805 // Ref
806 if (!empty($arrayfields['d.ref']['checked'])) {
807 print '<td>';
808 print '<table class="nobordernopadding"><tr class="nocellnopadd">';
809 print '<td class="nobordernopadding nowrap">';
810 print $expensereportstatic->getNomUrl(1);
811 print '</td>';
812 // Warning late icon and note
813 print '<td class="nobordernopadding nowrap">';
814 if ($expensereportstatic->status == 2 && $expensereportstatic->hasDelay('toappove')) {
815 print img_warning($langs->trans("Late"));
816 }
817 if ($expensereportstatic->status == 5 && $expensereportstatic->hasDelay('topay')) {
818 print img_warning($langs->trans("Late"));
819 }
820 if (!empty($obj->note_private) || !empty($obj->note_public)) {
821 print ' <span class="note">';
822 print '<a href="'.DOL_URL_ROOT.'/expensereport/note.php?id='.$obj->rowid.'">'.img_picto($langs->trans("ViewPrivateNote"), 'object_generic').'</a>';
823 print '</span>';
824 }
825 print '</td>';
826 print '<td width="16" class="nobordernopadding hideonsmartphone right">';
827 $filename = dol_sanitizeFileName($obj->ref);
828 $filedir = $conf->expensereport->dir_output.'/'.dol_sanitizeFileName($obj->ref);
829 $urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->rowid;
830 print $formfile->getDocumentsLink($expensereportstatic->element, $filename, $filedir);
831 print '</td>';
832 print '</tr></table>';
833 print '</td>';
834 if (!$i) {
835 $totalarray['nbfield']++;
836 }
837 }
838 // User
839 if (!empty($arrayfields['user']['checked'])) {
840 print '<td class="left">';
841 $usertmp->id = $obj->id_user;
842 $usertmp->lastname = $obj->lastname;
843 $usertmp->firstname = $obj->firstname;
844 $usertmp->login = $obj->login;
845 $usertmp->statut = $obj->statut;
846 $usertmp->photo = $obj->photo;
847 $usertmp->email = $obj->email;
848 print $usertmp->getNomUrl(-1);
849 print '</td>';
850 if (!$i) {
851 $totalarray['nbfield']++;
852 }
853 }
854 // Start date
855 if (!empty($arrayfields['d.date_debut']['checked'])) {
856 print '<td class="center">'.($obj->date_debut > 0 ? dol_print_date($db->jdate($obj->date_debut), 'day') : '').'</td>';
857 if (!$i) {
858 $totalarray['nbfield']++;
859 }
860 }
861 // End date
862 if (!empty($arrayfields['d.date_fin']['checked'])) {
863 print '<td class="center">'.($obj->date_fin > 0 ? dol_print_date($db->jdate($obj->date_fin), 'day') : '').'</td>';
864 if (!$i) {
865 $totalarray['nbfield']++;
866 }
867 }
868 // Date validation
869 if (!empty($arrayfields['d.date_valid']['checked'])) {
870 print '<td class="center">'.($obj->date_valid > 0 ? dol_print_date($db->jdate($obj->date_valid), 'day') : '').'</td>';
871 if (!$i) {
872 $totalarray['nbfield']++;
873 }
874 }
875 // Date approval
876 if (!empty($arrayfields['d.date_approve']['checked'])) {
877 print '<td class="center">'.($obj->date_approve > 0 ? dol_print_date($db->jdate($obj->date_approve), 'day') : '').'</td>';
878 if (!$i) {
879 $totalarray['nbfield']++;
880 }
881 }
882 // Amount HT
883 if (!empty($arrayfields['d.total_ht']['checked'])) {
884 print '<td class="right">'.price($obj->total_ht)."</td>\n";
885 if (!$i) {
886 $totalarray['nbfield']++;
887 }
888 if (!$i) {
889 $totalarray['pos'][$totalarray['nbfield']] = 'd.total_ht';
890 }
891 $totalarray['val']['d.total_ht'] += $obj->total_ht;
892 }
893 // Amount VAT
894 if (!empty($arrayfields['d.total_vat']['checked'])) {
895 print '<td class="right">'.price($obj->total_tva)."</td>\n";
896 if (!$i) {
897 $totalarray['nbfield']++;
898 }
899 if (!$i) {
900 $totalarray['pos'][$totalarray['nbfield']] = 'd.total_tva';
901 }
902 $totalarray['val']['d.total_tva'] += $obj->total_tva;
903 }
904 // Amount TTC
905 if (!empty($arrayfields['d.total_ttc']['checked'])) {
906 print '<td class="right">'.price($obj->total_ttc)."</td>\n";
907 if (!$i) {
908 $totalarray['nbfield']++;
909 }
910 if (!$i) {
911 $totalarray['pos'][$totalarray['nbfield']] = 'd.total_ttc';
912 }
913 $totalarray['val']['d.total_ttc'] += $obj->total_ttc;
914 }
915
916 // Extra fields
917 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
918 // Fields from hook
919 $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);
920 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook
921 print $hookmanager->resPrint;
922
923 // Date creation
924 if (!empty($arrayfields['d.date_create']['checked'])) {
925 print '<td class="nowrap center">';
926 print dol_print_date($db->jdate($obj->date_create), 'dayhour');
927 print '</td>';
928 if (!$i) {
929 $totalarray['nbfield']++;
930 }
931 }
932 // Date modification
933 if (!empty($arrayfields['d.tms']['checked'])) {
934 print '<td class="nowrap center">';
935 print dol_print_date($db->jdate($obj->date_modif), 'dayhour');
936 print '</td>';
937 if (!$i) {
938 $totalarray['nbfield']++;
939 }
940 }
941 // Status
942 if (!empty($arrayfields['d.fk_statut']['checked'])) {
943 print '<td class="nowrap right">'.$expensereportstatic->getLibStatut(5).'</td>';
944 if (!$i) {
945 $totalarray['nbfield']++;
946 }
947 }
948 // Action column
949 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
950 print '<td class="nowrap center">';
951 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
952 $selected = 0;
953 if (in_array($obj->rowid, $arrayofselected)) {
954 $selected = 1;
955 }
956 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
957 }
958 print '</td>';
959 if (!$i) {
960 $totalarray['nbfield']++;
961 }
962 }
963
964 print "</tr>\n";
965 }
966
967 $total_total_ht = $total_total_ht + $obj->total_ht;
968 $total_total_tva = $total_total_tva + $obj->total_tva;
969 $total_total_ttc = $total_total_ttc + $obj->total_ttc;
970
971 $i++;
972 }
973 } else {
974 $colspan = 1;
975 foreach ($arrayfields as $key => $val) {
976 if (!empty($val['checked'])) {
977 $colspan++;
978 }
979 }
980 print '<tr><td colspan="'.$colspan.'" class="opacitymedium">'.$langs->trans("NoRecordFound").'</td></tr>';
981 }
982
983 // Show total line
984 include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
985
986 $db->free($resql);
987
988 $parameters = array('arrayfields'=>$arrayfields, 'sql'=>$sql);
989 $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters); // Note that $action and $object may have been modified by hook
990 print $hookmanager->resPrint;
991
992 print '</table>'."\n";
993 print '</div>';
994
995 print '</form>'."\n";
996
997 if (empty($id)) {
998 $hidegeneratedfilelistifempty = 1;
999 if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) {
1000 $hidegeneratedfilelistifempty = 0;
1001 }
1002
1003 // Show list of available documents
1004 $urlsource = $_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
1005 $urlsource .= str_replace('&amp;', '&', $param);
1006
1007 $filedir = $diroutputmassaction;
1008 $genallowed = $user->rights->expensereport->lire;
1009 $delallowed = $user->rights->expensereport->creer;
1010
1011 print $formfile->showdocuments('massfilesarea_expensereport', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty);
1012 }
1013} else {
1014 dol_print_error($db);
1015}
1016
1017// End of page
1018llxFooter();
1019$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 Trips and Expenses.
Class to manage standard extra fields.
Class to manage generation of HTML components for contract module.
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 to manage Dolibarr users.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
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...
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_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.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
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...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
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.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
user_prepare_head(User $object)
Prepare array with list of tabs.