dolibarr 21.0.0-beta
list.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2011-2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
3 * Copyright (C) 2015-2016 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
5 * Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
6 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
7 * Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
8 * Copyright (C) 2024 Nick Fragoulis
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
31require '../main.inc.php';
32require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php';
33require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
34if (isModEnabled('accounting')) {
35 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
36}
37
46// Load translation files required by the page
47$langs->loadLangs(array("compta", "salaries", "bills", "hrm"));
48
49$action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ...
50$massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists)
51$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ?
52$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation
53$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button
54$toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list
55$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
56$backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page
57$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
58$mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...)
59
60
61// Load variable for pagination
62$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
63$sortfield = GETPOST('sortfield', 'aZ09comma');
64$sortorder = GETPOST('sortorder', 'aZ09comma');
65$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
66if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
67 // If $page is not defined, or '' or -1 or if we click on clear filters
68 $page = 0;
69}
70$offset = $limit * $page;
71$pageprev = $page - 1;
72$pagenext = $page + 1;
73if (!$sortfield) {
74 $sortfield = "s.datep,s.rowid";
75}
76if (!$sortorder) {
77 $sortorder = "DESC,DESC";
78}
79
80// Initialize technical objects
81$object = new Salary($db);
82$extrafields = new ExtraFields($db);
83$diroutputmassaction = $conf->user->dir_output.'/temp/massgeneration/'.$user->id;
84$hookmanager->initHooks(array('salarieslist')); // Note that conf->hooks_modules contains array
85
86// Fetch optionals attributes and labels
87$extrafields->fetch_name_optionals_label($object->table_element);
88
89$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
90
91if (!$sortfield) {
92 $sortfield = "s.datep,s.rowid";
93}
94if (!$sortorder) {
95 $sortorder = "DESC,DESC";
96}
97
98$search_ref = GETPOST('search_ref', 'alpha');
99$search_user = GETPOST('search_user', 'alpha');
100$search_label = GETPOST('search_label', 'alpha');
101$search_date_start_from = dol_mktime(0, 0, 0, GETPOSTINT('search_date_start_frommonth'), GETPOSTINT('search_date_start_fromday'), GETPOSTINT('search_date_start_fromyear'));
102$search_date_start_to = dol_mktime(23, 59, 59, GETPOSTINT('search_date_start_tomonth'), GETPOSTINT('search_date_start_today'), GETPOSTINT('search_date_start_toyear'));
103$search_date_end_from = dol_mktime(0, 0, 0, GETPOSTINT('search_date_end_frommonth'), GETPOSTINT('search_date_end_fromday'), GETPOSTINT('search_date_end_fromyear'));
104$search_date_end_to = dol_mktime(23, 59, 59, GETPOSTINT('search_date_end_tomonth'), GETPOSTINT('search_date_end_today'), GETPOSTINT('search_date_end_toyear'));
105$search_amount = GETPOST('search_amount', 'alpha');
106$search_account = GETPOST('search_account', 'alpha');
107$search_status = GETPOST('search_status', 'intcomma');
108$search_type_id = GETPOST('search_type_id', 'intcomma');
109
110$childids = $user->getAllChildIds(1);
111
112// Initialize array of search criteria
113$search_all = GETPOST("search_all", 'alpha');
114$search = array();
115foreach ($object->fields as $key => $val) {
116 if (GETPOST('search_'.$key, 'alpha') !== '') {
117 $search[$key] = GETPOST('search_'.$key, 'alpha');
118 }
119 if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) {
120 $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear'));
121 $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear'));
122 }
123}
124
125// List of fields to search into when doing a "search in all"
126$fieldstosearchall = array();
127foreach ($object->fields as $key => $val) {
128 if (!empty($val['searchall'])) {
129 $fieldstosearchall['s.'.$key] = $val['label'];
130 }
131}
132
133// Definition of array of fields for columns
134$arrayfields = array();
135foreach ($object->fields as $key => $val) {
136 // If $val['visible']==0, then we never show the field
137 if (!empty($val['visible'])) {
138 $visible = (int) dol_eval((string) $val['visible'], 1);
139 $arrayfields['s.'.$key] = array(
140 'label' => $val['label'],
141 'checked' => (($visible < 0) ? 0 : 1),
142 'enabled' => (abs($visible) != 3 && (bool) dol_eval($val['enabled'], 1)),
143 'position' => $val['position'],
144 'help' => isset($val['help']) ? $val['help'] : ''
145 );
146 }
147}
148// Extra fields
149include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
150
151$object->fields = dol_sort_array($object->fields, 'position');
152$arrayfields = dol_sort_array($arrayfields, 'position');
153
154$permissiontoread = $user->hasRight('salaries', 'read');
155$permissiontoadd = $user->hasRight('salaries', 'write');
156$permissiontodelete = $user->hasRight('salaries', 'delete');
157
158$error = 0;
159
160// Security check
161$socid = GETPOSTINT("socid");
162if ($user->socid) {
163 $socid = $user->socid;
164}
165restrictedArea($user, 'salaries', '', 'salary', '');
166
167
168/*
169 * Actions
170 */
171
172if (GETPOST('cancel', 'alpha')) {
173 $action = 'list';
174 $massaction = '';
175}
176if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
177 $massaction = '';
178}
179
180//credit transfer request
181if ($massaction == 'withdrawrequest') {
182 $langs->load("withdrawals");
183
184 if (!$user->hasRight('paymentbybanktransfer', 'create')) {
185 $error++;
186 setEventMessages($langs->trans("NotEnoughPermissions"), null, 'errors');
187 } else {
188 //Checking error
189 $error = 0;
190 $listofSalries = array();
191 $arrayofselected = is_array($toselect) ? $toselect : array();
192 foreach ($arrayofselected as $toselectid) {
193 $objecttmp = new Salary($db);
194 $result = $objecttmp->fetch($toselectid);
195 if ($result > 0) {
196 $totalpaid = $objecttmp->getSommePaiement();
197 $objecttmp->resteapayer = price2num((float) $objecttmp->amount - $totalpaid, 'MT');
198
199 // hook to finalize the remaining amount, considering e.g. cash discount agreements
200 $parameters = array('remaintopay' => $objecttmp->resteapayer);
201 $reshook = $hookmanager->executeHooks('finalizeAmountOfInvoice', $parameters, $objecttmp, $action); // Note that $action and $object may have been modified by some hooks
202 if ($reshook > 0) {
203 if (!empty($remaintopay = $hookmanager->resArray['remaintopay'])) {
204 $objecttmp->resteapayer = $remaintopay;
205 }
206 } elseif ($reshook < 0) {
207 $error++;
208 setEventMessages($objecttmp->ref.' '.$langs->trans("ProcessingError"), $hookmanager->errors, 'errors');
209 }
210
211 if ($objecttmp->status == Salary::STATUS_PAID || $objecttmp->resteapayer == 0) {
212 $error++;
213 setEventMessages($langs->trans("Salary").' '.$objecttmp->ref.' : '.$langs->trans("AlreadyPaid"), $objecttmp->errors, 'errors');
214 } elseif ($resteapayer < 0) {
215 $error++;
216 setEventMessages($langs->trans("Salary").' '.$objecttmp->ref.' : '.$langs->trans("AmountMustBePositive"), $objecttmp->errors, 'errors');
217 }
218
219 $rsql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande";
220 $rsql .= " , pfd.date_traite as date_traite";
221 $rsql .= " , pfd.amount";
222 $rsql .= " , u.rowid as user_id, u.lastname, u.firstname, u.login";
223 $rsql .= " FROM ".MAIN_DB_PREFIX."prelevement_demande as pfd";
224 $rsql .= " , ".MAIN_DB_PREFIX."user as u";
225 $rsql .= " WHERE fk_salary = ".((int) $objecttmp->id);
226 $rsql .= " AND pfd.fk_user_demande = u.rowid";
227 $rsql .= " AND pfd.traite = 0";
228 $rsql .= " ORDER BY pfd.date_demande DESC";
229
230 $result_sql = $db->query($rsql);
231 if ($result_sql) {
232 $numprlv = $db->num_rows($result_sql);
233 }
234
235 if ($numprlv > 0) {
236 //$error++; // Not an error, a simple warning we can ignore
237 setEventMessages($langs->trans("Salary").' '.$objecttmp->ref.' : '.$langs->trans("RequestAlreadyDone"), $objecttmp->errors, 'warnings');
238 } elseif (!empty($objecttmp->type_payment_code) && $objecttmp->type_payment_code != 'VIR') {
239 $langs->load("errors");
240 $error++;
241 setEventMessages($langs->trans("Salary").' '.$objecttmp->ref.' : '.$langs->trans("ErrorThisPaymentModeIsNotCreditTransfer"), $objecttmp->errors, 'errors');
242 } else {
243 $listofSalries[] = $objecttmp;
244 }
245 }
246 }
247
248 // Now process all record not in error
249 if (!$error && !empty($listofSalries)) {
250 $nbwithdrawrequestok = 0;
251 foreach ($listofSalries as $salary) {
252 $db->begin();
253 $result = $salary->demande_prelevement($user, (float) $salary->resteapayer, 'salaire');
254 if ($result > 0) {
255 $db->commit();
256 $nbwithdrawrequestok++;
257 } else {
258 $db->rollback();
259 setEventMessages($aBill->error, $aBill->errors, 'errors');
260 }
261 }
262 if ($nbwithdrawrequestok > 0) {
263 setEventMessages($langs->trans("WithdrawRequestsDone", $nbwithdrawrequestok), null, 'mesgs');
264 }
265 }
266 }
267}
268
269$parameters = array();
270$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
271if ($reshook < 0) {
272 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
273}
274
275if (empty($reshook)) {
276 // Selection of new fields
277 include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
278
279 // Purge search criteria
280 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All test are required to be compatible with all browsers
281 $search_ref = "";
282 $search_user = "";
283 $search_label = "";
284 $search_date_start_from = '';
285 $search_date_start_to = '';
286 $search_date_end_from = '';
287 $search_date_end_to = '';
288 $search_date_end = '';
289 $search_amount = "";
290 $search_account = '';
291 $search_status = '';
292 $search_type_id = "";
293 }
294 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')
295 || GETPOST('button_search_x', 'alpha') || GETPOST('button_search.x', 'alpha') || GETPOST('button_search', 'alpha')) {
296 $massaction = ''; // Protection to avoid mass action if we force a new search during a mass action confirmation
297 }
298
299 // Mass actions
300 $objectclass = 'Salary';
301 $objectlabel = 'Salaries';
302 $uploaddir = $conf->salaries->dir_output;
303 include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
304
305 // Validate records
306 if (!$error && $massaction == 'buildsepa' && $permissiontoadd) {
307 $objecttmp = new $objectclass($db);
308
309 // TODO
310 }
311}
312
313/*
314 * View
315 */
316
317$form = new Form($db);
318$salstatic = new Salary($db);
319$userstatic = new User($db);
320$accountstatic = new Account($db);
321
322$now = dol_now();
323
324$title = $langs->trans('Salaries');
325//$help_url="EN:Module_BillOfMaterials|FR:Module_BillOfMaterials_FR|ES:Módulo_BillOfMaterials";
326$help_url = '';
327$morejs = array();
328$morecss = array();
329
330// Build and execute select
331// --------------------------------------------------------------------
332$sql = "SELECT u.rowid as uid, u.lastname, u.firstname, u.login, u.email, u.admin, u.photo, u.salary as current_salary, u.fk_soc as fk_soc, u.statut as status,";
333$sql .= " s.rowid, s.fk_account, s.paye, s.fk_user, s.amount, s.salary, s.label, s.datesp, s.dateep, s.fk_typepayment as paymenttype, ";
334$sql .= " ba.rowid as bid, ba.ref as bref, ba.number as bnumber, ba.account_number, ba.fk_accountancy_journal, ba.label as blabel, ba.iban_prefix as iban, ba.bic, ba.currency_code, ba.clos,";
335$sql .= " pst.code as payment_code,";
336$sql .= " SUM(ps.amount) as alreadypayed";
337// Add fields from extrafields
338if (!empty($extrafields->attributes[$object->table_element]['label'])) {
339 foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
340 $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key." as options_".$key : '');
341 }
342}
343// Add fields from hooks
344$parameters = array();
345$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
346$sql .= $hookmanager->resPrint;
347$sql = preg_replace('/,\s*$/', '', $sql);
348//$sql .= ", COUNT(rc.rowid) as anotherfield";
349
350$sqlfields = $sql; // $sql fields to remove for count total
351
352$sql .= " FROM ".MAIN_DB_PREFIX."salary as s";
353if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
354 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (s.rowid = ef.fk_object)";
355}
356$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."payment_salary as ps ON (ps.fk_salary = s.rowid) ";
357$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as pst ON (s.fk_typepayment = pst.id) ";
358$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank_account ba ON (ba.rowid = s.fk_account), ";
359//$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."payment_salary as ps ON ps.fk_salary = s.rowid, ";
360$sql .= " ".MAIN_DB_PREFIX."user as u";
361$sql .= " WHERE u.rowid = s.fk_user";
362$sql .= " AND s.entity IN (".getEntity('salaries').")";
363if (!$user->hasRight('salaries', 'readall')) {
364 $sql .= " AND s.fk_user IN (".$db->sanitize(implode(',', $childids)).")";
365}
366//print $sql;
367
368// Search criteria
369if ($search_ref) {
370 $sql .= " AND s.rowid=".((int) $search_ref);
371}
372if ($search_user) {
373 $sql .= natural_search(array('u.login', 'u.lastname', 'u.firstname', 'u.email'), $search_user);
374}
375if ($search_label) {
376 $sql .= natural_search(array('s.label'), $search_label);
377}
378if (!empty($search_date_start_from)) {
379 $sql .= " AND s.datesp >= '".$db->idate($search_date_start_from)."'";
380}
381if (!empty($search_date_end_from)) {
382 $sql .= " AND s.dateep >= '".$db->idate($search_date_end_from)."'";
383}
384if (!empty($search_date_start_to)) {
385 $sql .= " AND s.datesp <= '".$db->idate($search_date_start_to)."'";
386}
387if (!empty($search_date_end_to)) {
388 $sql .= " AND s.dateep <= '".$db->idate($search_date_end_to)."'";
389}
390
391if ($search_amount) {
392 $sql .= natural_search("s.amount", $search_amount, 1);
393}
394if ($search_account > 0) {
395 $sql .= " AND s.fk_account=".((int) $search_account);
396}
397if ($search_status != '' && $search_status >= 0) {
398 $sql .= " AND s.paye = ".((int) $search_status);
399}
400if ($search_type_id) {
401 $sql .= " AND s.fk_typepayment=".((int) $search_type_id);
402}
403// Add where from extra fields
404include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
405$sql .= " GROUP BY u.rowid, u.lastname, u.firstname, u.login, u.email, u.admin, u.photo, u.salary, u.fk_soc, u.statut,";
406$sql .= " s.rowid, s.fk_account, s.paye, s.fk_user, s.amount, s.salary, s.label, s.datesp, s.dateep, s.fk_typepayment, s.fk_bank,";
407$sql .= " ba.rowid, ba.ref, ba.number, ba.account_number, ba.fk_accountancy_journal, ba.label, ba.iban_prefix, ba.bic, ba.currency_code, ba.clos,";
408$sql .= " pst.code";
409
410// Count total nb of records
411$nbtotalofrecords = '';
412if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
413 /* The fast and low memory method to get and count full list converts the sql into a sql count */
414 $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
415 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
416 $resql = $db->query($sqlforcount);
417 if ($resql) {
418 $objforcount = $db->fetch_object($resql);
419 $nbtotalofrecords = $objforcount->nbtotalofrecords;
420 } else {
421 dol_print_error($db);
422 }
423
424 if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
425 $page = 0;
426 $offset = 0;
427 }
428 $db->free($resql);
429}
430
431// Complete request and execute it with limit
432$sql .= $db->order($sortfield, $sortorder);
433if ($limit) {
434 $sql .= $db->plimit($limit + 1, $offset);
435}
436
437$resql = $db->query($sql);
438if (!$resql) {
439 dol_print_error($db);
440 exit;
441}
442
443$num = $db->num_rows($resql);
444
445
446// Direct jump if only one record found
447if ($num == 1 && getDolGlobalString('MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE') && $search_all && !$page) {
448 $obj = $db->fetch_object($resql);
449 $id = $obj->rowid;
450 header("Location: ".DOL_URL_ROOT.'/salaries/card.php?id='.$id);
451 exit;
452}
453
454
455// Output page
456// --------------------------------------------------------------------
457
458llxHeader('', $title, $help_url, '', 0, 0, $morejs, $morecss, '', 'bodyforlist'); // Can use also classforhorizontalscrolloftabs instead of bodyforlist for no horizontal scroll
459
460$arrayofselected = is_array($toselect) ? $toselect : array();
461
462$param = '';
463if (!empty($mode)) {
464 $param .= '&mode='.urlencode($mode);
465}
466if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
467 $param .= '&contextpage='.urlencode($contextpage);
468}
469if ($limit > 0 && $limit != $conf->liste_limit) {
470 $param .= '&limit='.((int) $limit);
471}
472if ($search_type_id) {
473 $param .= '&search_type_id='.urlencode($search_type_id);
474}
475if ($optioncss != '') {
476 $param .= '&optioncss='.urlencode($optioncss);
477}
478if ($search_ref != '') {
479 $param .= '&search_ref='.urlencode($search_ref);
480}
481if ($search_user != '') {
482 $param .= '&search_user='.urlencode($search_user);
483}
484if ($search_label) {
485 $param .= '&search_label='.urlencode($search_label);
486}
487if ($search_account) {
488 $param .= '&search_account='.urlencode((string) ($search_account));
489}
490if ($search_status != '' && $search_status != '-1') {
491 $param .= '&search_status='.urlencode($search_status);
492}
493if (!empty($search_date_start_from)) {
494 $param .= '&search_date_start_fromday='.urlencode(GETPOST('search_date_start_fromday')).'&search_date_start_frommonth='.urlencode(GETPOST('search_date_start_frommonth')).'&search_date_start_fromyear='.urlencode(GETPOST('search_date_start_fromyear'));
495}
496if (!empty($search_date_start_to)) {
497 $param .= "&search_date_start_today=".urlencode(GETPOST('search_date_start_today'))."&search_date_start_tomonth=".urlencode(GETPOST('search_date_start_tomonth'))."&search_date_start_toyear=".urlencode(GETPOST('search_date_start_toyear'));
498}
499if (!empty($search_date_end_from)) {
500 $param .= '&search_date_end_fromday='.urlencode(GETPOST('search_date_end_fromday')).'&search_date_end_frommonth='.urlencode(GETPOST('search_date_end_frommonth')).'&search_date_end_fromyear='.urlencode(GETPOST('search_date_end_fromyear'));
501}
502if (!empty($search_date_end_to)) {
503 $param .= "&search_date_end_today=".urlencode(GETPOST('search_date_end_today'))."&search_date_end_tomonth=".urlencode(GETPOST('search_date_end_tomonth'))."&search_date_end_toyear=".urlencode(GETPOST('search_date_end_toyear'));
504}
505
506// Add $param from extra fields
507include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
508// Add $param from hooks
509$parameters = array('param' => &$param);
510$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
511$param .= $hookmanager->resPrint;
512
513// List of mass actions available
514$arrayofmassactions = array(
515 //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
516 //'buildsepa'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("BuildSepa"), // TODO
517);
518if (!empty($permissiontodelete)) {
519 $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
520}
521if (isModEnabled('paymentbybanktransfer') && $user->hasRight('paymentbybanktransfer', 'create')) {
522 $langs->load("withdrawals");
523 $arrayofmassactions['withdrawrequest'] = img_picto('', 'payment', 'class="pictofixedwidth"').$langs->trans("MakeBankTransferOrder");
524}
525if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) {
526 $arrayofmassactions = array();
527}
528$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
529
530print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
531if ($optioncss != '') {
532 print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
533}
534print '<input type="hidden" name="token" value="'.newToken().'">';
535print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
536print '<input type="hidden" name="action" value="list">';
537print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
538print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
539print '<input type="hidden" name="page" value="'.$page.'">';
540print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
541print '<input type="hidden" name="page_y" value="">';
542print '<input type="hidden" name="mode" value="'.$mode.'">';
543
544
545$url = DOL_URL_ROOT.'/salaries/card.php?action=create';
546if (!empty($socid)) {
547 $url .= '&socid='.$socid;
548}
549
550$newcardbutton = '';
551$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'));
552$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'));
553$newcardbutton .= dolGetButtonTitleSeparator();
554$newcardbutton .= dolGetButtonTitle($langs->trans('NewSalary'), '', 'fa fa-plus-circle', $url, '', $permissiontoadd);
555
556print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $object->picto, 0, $newcardbutton, '', $limit, 0, 0, 1);
557
558// Add code for pre mass action (confirmation or email presend form)
559$topicmail = "SendSalaryRef";
560$modelmail = "salary";
561$objecttmp = new Salary($db);
562$trackid = 'sal'.$object->id;
563include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
564
565$moreforfilter = '';
566
567$parameters = array();
568$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
569if (empty($reshook)) {
570 $moreforfilter .= $hookmanager->resPrint;
571} else {
572 $moreforfilter = $hookmanager->resPrint;
573}
574
575if (!empty($moreforfilter)) {
576 print '<div class="liste_titre liste_titre_bydiv centpercent">';
577 print $moreforfilter;
578 print '</div>';
579}
580
581$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
582$htmlofselectarray = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields with user setup
583$selectedfields = ($mode != 'kanban' ? $htmlofselectarray : '');
584$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
585
586print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
587print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
588
589// Fields title search
590// --------------------------------------------------------------------
591print '<tr class="liste_titre_filter">';
592// Action column
593if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
594 print '<td class="liste_titre center maxwidthsearch">';
595 $searchpicto = $form->showFilterButtons('left');
596 print $searchpicto;
597 print '</td>';
598}
599// Ref
600if (!empty($arrayfields['s.ref']['checked'])) {
601 print '<td class="liste_titre left">';
602 print '<input class="flat width50" type="text" name="search_ref" value="'.$db->escape($search_ref).'">';
603 print '</td>';
604}
605
606// Label
607if (!empty($arrayfields['s.label']['checked'])) {
608 print '<td class="liste_titre"><input type="text" class="flat width100" name="search_label" value="'.$db->escape($search_label).'"></td>';
609}
610
611// Date start
612if (!empty($arrayfields['s.datesp']['checked'])) {
613 print '<td class="liste_titre center">';
614 print '<div class="nowrapfordate">';
615 print $form->selectDate($search_date_start_from ? $search_date_start_from : -1, 'search_date_start_from', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
616 print '</div>';
617 print '<div class="nowrapfordate">';
618 print $form->selectDate($search_date_start_to ? $search_date_start_to : -1, 'search_date_start_to', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
619 print '</div>';
620 print '</td>';
621}
622
623// Date End
624if (!empty($arrayfields['s.dateep']['checked'])) {
625 print '<td class="liste_titre center">';
626 print '<div class="nowrapfordate">';
627 print $form->selectDate($search_date_end_from ? $search_date_end_from : -1, 'search_date_end_from', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
628 print '</div>';
629 print '<div class="nowrapfordate">';
630 print $form->selectDate($search_date_end_to ? $search_date_end_to : -1, 'search_date_end_to', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
631 print '</div>';
632 print '</td>';
633}
634
635// Employee
636if (!empty($arrayfields['s.fk_user']['checked'])) {
637 print '<td class="liste_titre">';
638 print '<input class="flat" type="text" size="6" name="search_user" value="'.$db->escape($search_user).'">';
639 print '</td>';
640}
641
642// Type
643if (!empty($arrayfields['s.fk_typepayment']['checked'])) {
644 print '<td class="liste_titre left">';
645 print $form->select_types_paiements($search_type_id, 'search_type_id', '', 0, 1, 1, 16, 1, 'maxwidth125', 1);
646 print '</td>';
647}
648
649// Bank account
650if (isModEnabled("bank")) {
651 if (!empty($arrayfields['s.fk_account']['checked'])) {
652 print '<td class="liste_titre">';
653 print $form->select_comptes($search_account, 'search_account', 0, '', 1, '', 0, 'maxwidth125', 1);
654 print '</td>';
655 }
656}
657
658// Extra fields
659include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
660
661// Amount
662if (!empty($arrayfields['s.amount']['checked'])) {
663 print '<td class="liste_titre right"><input name="search_amount" class="flat" type="text" size="8" value="'.$db->escape($search_amount).'"></td>';
664}
665
666// Status
667if (!empty($arrayfields['s.paye']['checked'])) {
668 print '<td class="liste_titre center parentonrightofpage">';
669 $liststatus = array('0' => $langs->trans("Unpaid"), '1' => $langs->trans("Paid"));
670 // @phan-suppress-next-line PhanPluginSuspiciousParamOrder
671 print $form->selectarray('search_status', $liststatus, $search_status, 1, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage');
672 print '</td>';
673}
674
675// Fields from hook
676$parameters = array('arrayfields' => $arrayfields);
677$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
678print $hookmanager->resPrint;
679// Action column
680if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
681 print '<td class="liste_titre center maxwidthsearch">';
682 $searchpicto = $form->showFilterButtons();
683 print $searchpicto;
684 print '</td>';
685}
686print '</tr>'."\n";
687
688$totalarray = array();
689$totalarray['nbfield'] = 0;
690
691// Fields title label
692// --------------------------------------------------------------------
693print '<tr class="liste_titre">';
694// Action column
695if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
696 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
697 $totalarray['nbfield']++;
698}
699
700if (!empty($arrayfields['s.ref']['checked'])) {
701 print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "s.rowid", "", $param, "", $sortfield, $sortorder);
702 $totalarray['nbfield']++;
703}
704
705if (!empty($arrayfields['s.label']['checked'])) {
706 print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "s.label", "", $param, '', $sortfield, $sortorder);
707 $totalarray['nbfield']++;
708}
709
710if (!empty($arrayfields['s.datesp']['checked'])) {
711 print_liste_field_titre("DateStart", $_SERVER["PHP_SELF"], "s.datesp,s.rowid", "", $param, '', $sortfield, $sortorder, 'center ');
712 $totalarray['nbfield']++;
713}
714
715if (!empty($arrayfields['s.dateep']['checked'])) {
716 print_liste_field_titre("DateEnd", $_SERVER["PHP_SELF"], "s.dateep,s.rowid", "", $param, '', $sortfield, $sortorder, 'center ');
717 $totalarray['nbfield']++;
718}
719
720if (!empty($arrayfields['s.fk_user']['checked'])) {
721 print_liste_field_titre("Employee", $_SERVER["PHP_SELF"], "u.lastname", "", $param, "", $sortfield, $sortorder);
722 $totalarray['nbfield']++;
723}
724
725if (!empty($arrayfields['s.fk_typepayment']['checked'])) {
726 print_liste_field_titre("DefaultPaymentMode", $_SERVER["PHP_SELF"], "type", "", $param, '', $sortfield, $sortorder);
727 $totalarray['nbfield']++;
728}
729
730if (isModEnabled("bank")) {
731 if (!empty($arrayfields['s.fk_account']['checked'])) {
732 print_liste_field_titre("DefaultBankAccount", $_SERVER["PHP_SELF"], "ba.label", "", $param, "", $sortfield, $sortorder);
733 $totalarray['nbfield']++;
734 }
735}
736
737// Extra fields
738include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
739
740if (!empty($arrayfields['s.amount']['checked'])) {
741 print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "s.amount", "", $param, '', $sortfield, $sortorder, 'right ');
742 $totalarray['nbfield']++;
743}
744
745if (!empty($arrayfields['s.paye']['checked'])) {
746 print_liste_field_titre('Status', $_SERVER["PHP_SELF"], "s.paye", '', $param, '', $sortfield, $sortorder, 'center ');
747 $totalarray['nbfield']++;
748}
749
750// Hook fields
751$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray);
752$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
753print $hookmanager->resPrint;
754// Action column
755if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
756 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
757 $totalarray['nbfield']++;
758}
759print '</tr>'."\n";
760
761
762// Detect if we need a fetch on each output line
763$needToFetchEachLine = 0;
764if (isset($extrafields->attributes[$object->table_element]['computed']) && is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) {
765 foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) {
766 if (!is_null($val) && preg_match('/\$object/', $val)) {
767 $needToFetchEachLine++; // There is at least one compute field that use $object
768 }
769 }
770}
771
772// Loop on record
773// --------------------------------------------------------------------
774$i = 0;
775$savnbfield = $totalarray['nbfield'];
776$totalarray = array();
777$totalarray['nbfield'] = 0;
778$totalarray['val'] = array();
779$totalarray['val']['totalttcfield'] = 0;
780$imaxinloop = ($limit ? min($num, $limit) : $num);
781while ($i < $imaxinloop) {
782 $obj = $db->fetch_object($resql);
783 if (empty($obj)) {
784 break; // Should not happen
785 }
786
787 // Store properties in $object
788 $object->setVarsFromFetchObj($obj);
789
790 $userstatic->id = $obj->uid;
791 $userstatic->lastname = $obj->lastname;
792 $userstatic->firstname = $obj->firstname;
793 $userstatic->admin = $obj->admin;
794 $userstatic->login = $obj->login;
795 $userstatic->email = $obj->email;
796 $userstatic->socid = $obj->fk_soc;
797 $userstatic->statut = $obj->status; // deprecated
798 $userstatic->status = $obj->status;
799 $userstatic->photo = $obj->photo;
800
801 $salstatic->id = $obj->rowid;
802 $salstatic->ref = $obj->rowid;
803 $salstatic->label = $obj->label;
804 $salstatic->paye = $obj->paye;
805 $salstatic->status = $obj->paye;
806 $salstatic->alreadypaid = $obj->alreadypayed;
807 $salstatic->totalpaid = $obj->alreadypayed;
808 $salstatic->datesp = $obj->datesp;
809 $salstatic->dateep = $obj->dateep;
810 $salstatic->amount = $obj->amount;
811 $salstatic->type_payment = $obj->payment_code;
812
813 if ($mode == 'kanban') {
814 if ($i == 0) {
815 print '<tr class="trkanban"><td colspan="'.$savnbfield.'">';
816 print '<div class="box-flex-container kanban">';
817 }
818 // Output Kanban
819 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
820 $selected = 0;
821 if (in_array($object->id, $arrayofselected)) {
822 $selected = 1;
823 }
824 }
825 print $salstatic->getKanbanView('', array('user' => $userstatic, 'selected' => $selected));
826 if ($i == ($imaxinloop - 1)) {
827 print '</div>';
828 print '</td></tr>';
829 }
830 } else {
831 // Show here line of result
832 $j = 0;
833 print '<tr data-rowid="'.$object->id.'" class="oddeven">';
834 // Action column
835 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
836 print '<td class="nowrap center">';
837 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
838 $selected = 0;
839 if (in_array($object->id, $arrayofselected)) {
840 $selected = 1;
841 }
842 print '<input id="cb'.$object->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$object->id.'"'.($selected ? ' checked="checked"' : '').'>';
843 }
844 print '</td>';
845 if (!$i) {
846 $totalarray['nbfield']++;
847 }
848 }
849
850 // Ref
851 if (!empty($arrayfields['s.ref']['checked'])) {
852 print "<td>".$salstatic->getNomUrl(1)."</td>\n";
853 if (!$i) {
854 $totalarray['nbfield']++;
855 }
856 }
857
858 // Label payment
859 if (!empty($arrayfields['s.label']['checked'])) {
860 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($obj->label).'">'.dol_escape_htmltag($obj->label)."</td>\n";
861 if (!$i) {
862 $totalarray['nbfield']++;
863 }
864 }
865
866 // Date Start
867 if (!empty($arrayfields['s.datesp']['checked'])) {
868 print '<td class="center">'.dol_print_date($db->jdate($obj->datesp), 'day')."</td>\n";
869 if (!$i) {
870 $totalarray['nbfield']++;
871 }
872 }
873
874 // Date End
875 if (!empty($arrayfields['s.dateep']['checked'])) {
876 print '<td class="center">'.dol_print_date($db->jdate($obj->dateep), 'day')."</td>\n";
877 if (!$i) {
878 $totalarray['nbfield']++;
879 }
880 }
881
882 // Employee
883 if (!empty($arrayfields['s.fk_user']['checked'])) {
884 print '<td class="tdoverflowmax150">'.$userstatic->getNomUrl(-1)."</td>\n";
885 if (!$i) {
886 $totalarray['nbfield']++;
887 }
888 }
889
890 // Payment mode
891 if (!empty($arrayfields['s.fk_typepayment']['checked'])) {
892 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($langs->trans("PaymentTypeShort".$obj->payment_code)).'">';
893 if (!empty($obj->payment_code)) {
894 print $langs->trans("PaymentTypeShort".$obj->payment_code);
895 }
896 print '</td>';
897 if (!$i) {
898 $totalarray['nbfield']++;
899 }
900 }
901
902 // Account
903 if (isModEnabled("bank")) {
904 if (!empty($arrayfields['s.fk_account']['checked'])) {
905 print '<td>';
906 if ($obj->fk_account > 0) {
907 //$accountstatic->fetch($obj->fk_bank);
908 $accountstatic->id = $obj->bid;
909 $accountstatic->ref = $obj->bref;
910 $accountstatic->label = $obj->blabel;
911 $accountstatic->number = $obj->bnumber;
912 $accountstatic->iban = $obj->iban;
913 $accountstatic->bic = $obj->bic;
914 $accountstatic->currency_code = $langs->trans("Currency".$obj->currency_code);
915 $accountstatic->account_number = $obj->account_number;
916 $accountstatic->clos = $obj->clos;
917 $accountstatic->status = $obj->clos;
918
919 if (isModEnabled('accounting')) {
920 $accountstatic->account_number = $obj->account_number;
921
922 $accountingjournal = new AccountingJournal($db);
923 $accountingjournal->fetch($obj->fk_accountancy_journal);
924
925 $accountstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1, '', 1);
926 }
927 //$accountstatic->label = $obj->blabel;
928 print $accountstatic->getNomUrl(1);
929 } else {
930 print '&nbsp;';
931 }
932 print '</td>';
933 if (!$i) {
934 $totalarray['nbfield']++;
935 }
936 }
937 }
938
939 // Extra fields
940 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
941
942 // Amount
943 if (!empty($arrayfields['s.amount']['checked'])) {
944 print '<td class="nowraponall right"><span class="amount">'.price($obj->amount).'</span></td>';
945 if (!$i) {
946 $totalarray['nbfield']++;
947 }
948 if (!$i) {
949 $totalarray['pos'][$totalarray['nbfield']] = 'totalttcfield';
950 }
951 $totalarray['val']['totalttcfield'] += $obj->amount;
952 }
953
954 // Status
955 if (!empty($arrayfields['s.paye']['checked'])) {
956 print '<td class="nowraponall center">'.$salstatic->getLibStatut(5, $obj->alreadypayed).'</td>';
957 if (!$i) {
958 $totalarray['nbfield']++;
959 }
960 }
961
962 // Fields from hook
963 $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray);
964 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
965 print $hookmanager->resPrint;
966
967 // Action column
968 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
969 print '<td class="nowrap center">';
970 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
971 $selected = 0;
972 if (in_array($object->id, $arrayofselected)) {
973 $selected = 1;
974 }
975 print '<input id="cb'.$object->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$object->id.'"'.($selected ? ' checked="checked"' : '').'>';
976 }
977 print '</td>';
978 if (!$i) {
979 $totalarray['nbfield']++;
980 }
981 }
982
983 print '</tr>'."\n";
984 }
985 $i++;
986}
987
988// Show total line
989include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
990
991
992// If no record found
993if ($num == 0) {
994 /*$colspan = 1;
995 foreach ($arrayfields as $key => $val) {
996 if (!empty($val['checked'])) {
997 $colspan++;
998 }
999 }*/
1000 $colspan = 9;
1001 if (isModEnabled("bank")) {
1002 $colspan++;
1003 }
1004 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
1005}
1006
1007
1008$db->free($resql);
1009
1010$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql);
1011$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1012print $hookmanager->resPrint;
1013
1014print '</table>'."\n";
1015print '</div>'."\n";
1016
1017print '</form>'."\n";
1018
1019
1020// End of page
1021llxFooter();
1022$db->close();
$id
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:66
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:71
Class to manage bank accounts.
Class to manage accounting journals.
Class to manage standard extra fields.
Class to manage generation of HTML components Only common components must be here.
Class to manage salary payments.
Class to manage Dolibarr users.
llxFooter()
Footer empty.
Definition document.php:107
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
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_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
dolGetButtonTitleSeparator($moreClass="")
Add space between dolGetButtonTitle.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Definition member.php:79
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.