dolibarr  19.0.0-dev
list.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
3  * Copyright (C) 2013-2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
4  * Copyright (C) 2014-2015 Ari Elbaz (elarifr) <github@accedinfo.com>
5  * Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro>
6  * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>s
7  * Copyright (C) 2016 Laurent Destailleur <eldy@users.sourceforge.net>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  */
22 
28 require '../../main.inc.php';
29 
30 require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
31 require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
36 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
37 
38 // Load translation files required by the page
39 $langs->loadLangs(array("bills", "companies", "compta", "accountancy", "other", "trips", "productbatch", "hrm"));
40 
41 $action = GETPOST('action', 'aZ09');
42 $massaction = GETPOST('massaction', 'alpha');
43 $confirm = GETPOST('confirm', 'alpha');
44 $toselect = GETPOST('toselect', 'array');
45 $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'accountancyexpensereportlist'; // To manage different context of search
46 $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
47 
48 
49 // Select Box
50 $mesCasesCochees = GETPOST('toselect', 'array');
51 
52 // Search Getpost
53 $search_login = GETPOST('search_login', 'alpha');
54 $search_lineid = GETPOST('search_lineid', 'alpha');
55 $search_expensereport = GETPOST('search_expensereport', 'alpha');
56 $search_label = GETPOST('search_label', 'alpha');
57 $search_desc = GETPOST('search_desc', 'alpha');
58 $search_amount = GETPOST('search_amount', 'alpha');
59 $search_account = GETPOST('search_account', 'alpha');
60 $search_vat = GETPOST('search_vat', 'alpha');
61 $search_date_startday = GETPOST('search_date_startday', 'int');
62 $search_date_startmonth = GETPOST('search_date_startmonth', 'int');
63 $search_date_startyear = GETPOST('search_date_startyear', 'int');
64 $search_date_endday = GETPOST('search_date_endday', 'int');
65 $search_date_endmonth = GETPOST('search_date_endmonth', 'int');
66 $search_date_endyear = GETPOST('search_date_endyear', 'int');
67 $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver
68 $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
69 
70 // Load variable for pagination
71 $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : (empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION) ? $conf->liste_limit : $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION);
72 $sortfield = GETPOST('sortfield', 'aZ09comma');
73 $sortorder = GETPOST('sortorder', 'aZ09comma');
74 $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
75 if (empty($page) || $page < 0) {
76  $page = 0;
77 }
78 $offset = $limit * $page;
79 $pageprev = $page - 1;
80 $pagenext = $page + 1;
81 if (!$sortfield) {
82  $sortfield = "erd.date, erd.rowid";
83 }
84 if (!$sortorder) {
85  if ($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_TODO > 0) {
86  $sortorder = "DESC";
87  } else {
88  $sortorder = "ASC";
89  }
90 }
91 
92 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
93 $hookmanager->initHooks(array('accountancyexpensereportlist'));
94 
95 $formaccounting = new FormAccounting($db);
96 $accounting = new AccountingAccount($db);
97 
98 $chartaccountcode = dol_getIdFromCode($db, getDolGlobalInt('CHARTOFACCOUNTS'), 'accounting_system', 'rowid', 'pcg_version');
99 
100 // Security check
101 if (!isModEnabled('accounting')) {
102  accessforbidden();
103 }
104 if ($user->socid > 0) {
105  accessforbidden();
106 }
107 if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
108  accessforbidden();
109 }
110 
111 
112 /*
113  * Actions
114  */
115 
116 if (GETPOST('cancel', 'alpha')) {
117  $action = 'list'; $massaction = '';
118 }
119 if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
120  $massaction = '';
121 }
122 
123 $parameters = array();
124 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
125 if ($reshook < 0) {
126  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
127 }
128 
129 if (empty($reshook)) {
130  // Purge search criteria
131  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
132  $search_login = '';
133  $search_expensereport = '';
134  $search_label = '';
135  $search_desc = '';
136  $search_amount = '';
137  $search_account = '';
138  $search_vat = '';
139  $search_date_startday = '';
140  $search_date_startmonth = '';
141  $search_date_startyear = '';
142  $search_date_endday = '';
143  $search_date_endmonth = '';
144  $search_date_endyear = '';
145  $search_date_start = '';
146  $search_date_end = '';
147  $search_country = '';
148  $search_tvaintra = '';
149  }
150 
151  // Mass actions
152  $objectclass = 'ExpenseReport';
153  $objectlabel = 'ExpenseReport';
154  $permissiontoread = $user->hasRight('accounting', 'read');
155  $permissiontodelete = $user->hasRight('accounting', 'delete');
156  $uploaddir = $conf->expensereport->dir_output;
157  include DOL_DOCUMENT_ROOT . '/core/actions_massactions.inc.php';
158 }
159 
160 
161 if ($massaction == 'ventil' && $user->hasRight('accounting', 'bind', 'write')) {
162  $msg = '';
163 
164  if (!empty($mesCasesCochees)) {
165  $msg = '<div>'.$langs->trans("SelectedLines").': '.count($mesCasesCochees).'</div>';
166  $msg .= '<div class="detail">';
167  $cpt = 0;
168  $ok = 0;
169  $ko = 0;
170 
171  foreach ($mesCasesCochees as $maLigneCochee) {
172  $maLigneCourante = explode("_", $maLigneCochee);
173  $monId = $maLigneCourante[0];
174  $monCompte = GETPOST('codeventil'.$monId);
175 
176  if ($monCompte <= 0) {
177  $msg .= '<div><span class="error">'.$langs->trans("Lineofinvoice").' '.$monId.' - '.$langs->trans("NoAccountSelected").'</span></div>';
178  $ko++;
179  } else {
180  $sql = " UPDATE ".MAIN_DB_PREFIX."expensereport_det";
181  $sql .= " SET fk_code_ventilation = ".((int) $monCompte);
182  $sql .= " WHERE rowid = ".((int) $monId);
183 
184  $accountventilated = new AccountingAccount($db);
185  $accountventilated->fetch($monCompte, '', 1);
186 
187  dol_syslog('accountancy/expensereport/list.php:: sql='.$sql, LOG_DEBUG);
188  if ($db->query($sql)) {
189  $msg .= '<div><span class="green">'.$langs->trans("LineOfExpenseReport").' '.$monId.' - '.$langs->trans("VentilatedinAccount").' : '.length_accountg($accountventilated->account_number).'</span></div>';
190  $ok++;
191  } else {
192  $msg .= '<div><span class="error">'.$langs->trans("ErrorDB").' : '.$langs->trans("Lineofinvoice").' '.$monId.' - '.$langs->trans("NotVentilatedinAccount").' : '.length_accountg($accountventilated->account_number).'<br> <pre>'.$sql.'</pre></span></div>';
193  $ko++;
194  }
195  }
196 
197  $cpt++;
198  }
199  $msg .= '</div>';
200  $msg .= '<div>'.$langs->trans("EndProcessing").'</div>';
201  }
202 }
203 
204 if (GETPOST('sortfield') == 'erd.date, erd.rowid') {
205  $value = (GETPOST('sortorder') == 'asc,asc' ? 0 : 1);
206  require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
207  $res = dolibarr_set_const($db, "ACCOUNTING_LIST_SORT_VENTILATION_TODO", $value, 'yesno', 0, '', $conf->entity);
208 }
209 
210 
211 /*
212  * View
213  */
214 
215 $form = new Form($db);
216 $formother = new FormOther($db);
217 
218 llxHeader('', $langs->trans("ExpenseReportsVentilation"));
219 
220 if (empty($chartaccountcode)) {
221  print $langs->trans("ErrorChartOfAccountSystemNotSelected");
222  // End of page
223  llxFooter();
224  $db->close();
225  exit;
226 }
227 
228 // Expense report lines
229 $sql = "SELECT er.ref, er.rowid as erid, er.date_debut, er.date_valid,";
230 $sql .= " erd.rowid, erd.fk_c_type_fees, erd.comments, erd.total_ht as price, erd.fk_code_ventilation, erd.tva_tx as tva_tx_line, erd.vat_src_code, erd.date,";
231 $sql .= " f.id as type_fees_id, f.code as type_fees_code, f.label as type_fees_label, f.accountancy_code as code_buy,";
232 $sql .= " u.rowid as userid, u.login, u.lastname, u.firstname, u.email, u.gender, u.employee, u.photo, u.statut,";
233 $sql .= " aa.rowid as aarowid";
234 $parameters = array();
235 $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook
236 $sql .= $hookmanager->resPrint;
237 $sql .= " FROM ".MAIN_DB_PREFIX."expensereport as er";
238 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."expensereport_det as erd ON er.rowid = erd.fk_expensereport";
239 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_type_fees as f ON f.id = erd.fk_c_type_fees";
240 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid = er.fk_user_author";
241 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as aa ON f.accountancy_code = aa.account_number AND aa.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa.entity = ".$conf->entity;
242 $sql .= " WHERE er.fk_statut IN (".ExpenseReport::STATUS_APPROVED.", ".ExpenseReport::STATUS_CLOSED.") AND erd.fk_code_ventilation <= 0";
243 // Define begin binding date
244 if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) {
245  $sql .= " AND er.date_debut >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING)."'";
246 }
247 // Add search filter like
248 if (strlen(trim($search_login))) {
249  $sql .= natural_search("u.login", $search_login);
250 }
251 if (strlen(trim($search_expensereport))) {
252  $sql .= natural_search("er.ref", $search_expensereport);
253 }
254 if (strlen(trim($search_label))) {
255  $sql .= natural_search("f.label", $search_label);
256 }
257 if (strlen(trim($search_desc))) {
258  $sql .= natural_search("erd.comments", $search_desc);
259 }
260 if (strlen(trim($search_amount))) {
261  $sql .= natural_search("erd.total_ht", $search_amount, 1);
262 }
263 if (strlen(trim($search_account))) {
264  $sql .= natural_search("aa.account_number", $search_account);
265 }
266 if (strlen(trim($search_vat))) {
267  $sql .= natural_search("erd.tva_tx", $search_vat, 1);
268 }
269 if ($search_date_start) {
270  $sql .= " AND erd.date >= '".$db->idate($search_date_start)."'";
271 }
272 if ($search_date_end) {
273  $sql .= " AND erd.date <= '".$db->idate($search_date_end)."'";
274 }
275 $sql .= " AND er.entity IN (".getEntity('expensereport', 0).")"; // We don't share object for accountancy
276 
277 // Add where from hooks
278 $parameters = array();
279 $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook
280 $sql .= $hookmanager->resPrint;
281 
282 $sql .= $db->order($sortfield, $sortorder);
283 
284 // Count total nb of records
285 $nbtotalofrecords = '';
286 if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
287  $result = $db->query($sql);
288  $nbtotalofrecords = $db->num_rows($result);
289  if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
290  $page = 0;
291  $offset = 0;
292  }
293 }
294 
295 $sql .= $db->plimit($limit + 1, $offset);
296 
297 dol_syslog("accountancy/expensereport/list.php", LOG_DEBUG);
298 // MAX_JOIN_SIZE can be very low (ex: 300000) on some limited configurations (ex: https://www.online.net/fr/hosting/online-perso)
299 // This big SELECT command may exceed the MAX_JOIN_SIZE limit => Therefore we use SQL_BIG_SELECTS=1 to disable the MAX_JOIN_SIZE security
300 if ($db->type == 'mysqli') {
301  $db->query("SET SQL_BIG_SELECTS=1");
302 }
303 
304 $result = $db->query($sql);
305 if ($result) {
306  $num_lines = $db->num_rows($result);
307  $i = 0;
308 
309  $arrayofselected = is_array($toselect) ? $toselect : array();
310 
311  $param = '';
312  if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
313  $param .= '&contextpage='.urlencode($contextpage);
314  }
315  if ($limit > 0 && $limit != $conf->liste_limit) {
316  $param .= '&limit='.((int) $limit);
317  }
318  if ($search_login) {
319  $param .= '&search_login='.urlencode($search_login);
320  }
321  if ($search_lineid) {
322  $param .= '&search_lineid='.urlencode($search_lineid);
323  }
324  if ($search_date_startday) {
325  $param .= '&search_date_startday='.urlencode($search_date_startday);
326  }
327  if ($search_date_startmonth) {
328  $param .= '&search_date_startmonth='.urlencode($search_date_startmonth);
329  }
330  if ($search_date_startyear) {
331  $param .= '&search_date_startyear='.urlencode($search_date_startyear);
332  }
333  if ($search_date_endday) {
334  $param .= '&search_date_endday='.urlencode($search_date_endday);
335  }
336  if ($search_date_endmonth) {
337  $param .= '&search_date_endmonth='.urlencode($search_date_endmonth);
338  }
339  if ($search_date_endyear) {
340  $param .= '&search_date_endyear='.urlencode($search_date_endyear);
341  }
342  if ($search_expensereport) {
343  $param .= '&search_expensereport='.urlencode($search_expensereport);
344  }
345  if ($search_label) {
346  $param .= '&search_label='.urlencode($search_label);
347  }
348  if ($search_desc) {
349  $param .= '&search_desc='.urlencode($search_desc);
350  }
351  if ($search_amount) {
352  $param .= '&search_amount='.urlencode($search_amount);
353  }
354  if ($search_vat) {
355  $param .= '&search_vat='.urlencode($search_vat);
356  }
357 
358  $arrayofmassactions = array(
359  'ventil' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Ventilate")
360  );
361  $massactionbutton = $form->selectMassAction('ventil', $arrayofmassactions, 1);
362 
363  print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
364  print '<input type="hidden" name="action" value="ventil">';
365  if ($optioncss != '') {
366  print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
367  }
368  print '<input type="hidden" name="token" value="'.newToken().'">';
369  print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
370  print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
371  print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
372  print '<input type="hidden" name="page" value="'.$page.'">';
373 
374  print_barre_liste($langs->trans("ExpenseReportLines"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit);
375 
376  print '<span class="opacitymedium">'.$langs->trans("DescVentilTodoExpenseReport").'</span></br><br>';
377 
378  if (!empty($msg)) {
379  print $msg.'<br>';
380  }
381 
382  $moreforfilter = '';
383 
384  print '<div class="div-table-responsive">';
385  print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
386 
387  // We add search filter
388  print '<tr class="liste_titre_filter">';
389  print '<td class="liste_titre"><input type="text" name="search_login" class="maxwidth50" value="'.$search_login.'"></td>';
390  print '<td class="liste_titre"></td>';
391  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_expensereport" value="'.dol_escape_htmltag($search_expensereport).'"></td>';
392  if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
393  print '<td class="liste_titre"></td>';
394  }
395  print '<td class="liste_titre center">';
396  print '<div class="nowrap">';
397  print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
398  print '</div>';
399  print '<div class="nowrap">';
400  print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
401  print '</div>';
402  print '</td>';
403  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_label" value="'.dol_escape_htmltag($search_label).'"></td>';
404  print '<td class="liste_titre"><input type="text" class="flat maxwidthonsmartphone" name="search_desc" value="'.dol_escape_htmltag($search_desc).'"></td>';
405  print '<td class="liste_titre right"><input type="text" class="flat maxwidth50 right" name="search_amount" value="'.dol_escape_htmltag($search_amount).'"></td>';
406  print '<td class="liste_titre right"><input type="text" class="flat maxwidth50 right" name="search_vat" placeholder="%" size="1" value="'.dol_escape_htmltag($search_vat).'"></td>';
407  print '<td class="liste_titre"></td>';
408  print '<td class="liste_titre"></td>';
409  print '<td class="center liste_titre">';
410  $searchpicto = $form->showFilterButtons();
411  print $searchpicto;
412  print '</td>';
413  print '</tr>';
414 
415  print '<tr class="liste_titre">';
416  print_liste_field_titre("Employee", $_SERVER['PHP_SELF'], "u.login", $param, "", "", $sortfield, $sortorder);
417  print_liste_field_titre("LineId", $_SERVER["PHP_SELF"], "erd.rowid", "", $param, '', $sortfield, $sortorder);
418  print_liste_field_titre("ExpenseReport", $_SERVER["PHP_SELF"], "er.ref", "", $param, '', $sortfield, $sortorder);
419  if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
420  print_liste_field_titre("DateValidation", $_SERVER["PHP_SELF"], "er.date_valid", "", $param, '', $sortfield, $sortorder, 'center ');
421  }
422  print_liste_field_titre("DateOfLine", $_SERVER["PHP_SELF"], "erd.date, erd.rowid", "", $param, '', $sortfield, $sortorder, 'center ');
423  print_liste_field_titre("TypeFees", $_SERVER["PHP_SELF"], "f.label", "", $param, '', $sortfield, $sortorder);
424  print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "erd.comments", "", $param, '', $sortfield, $sortorder);
425  print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "erd.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 ');
426  print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "erd.tva_tx", "", $param, '', $sortfield, $sortorder, 'right ');
427  print_liste_field_titre("DataUsedToSuggestAccount", '', '', '', '', '', '', '', 'nowraponall ');
428  print_liste_field_titre("AccountAccountingSuggest", '', '', '', '', '', '', '', '');
429  $checkpicto = '';
430  if ($massactionbutton) {
431  $checkpicto = $form->showCheckAddButtons('checkforselect', 1);
432  }
433  print_liste_field_titre($checkpicto, '', '', '', '', '', '', '', 'center ');
434  print "</tr>\n";
435 
436 
437  $expensereport_static = new ExpenseReport($db);
438  $userstatic = new User($db);
439  $form = new Form($db);
440 
441  while ($i < min($num_lines, $limit)) {
442  $objp = $db->fetch_object($result);
443 
444  $objp->aarowid_suggest = '';
445  $objp->aarowid_suggest = $objp->aarowid;
446 
447  $expensereport_static->ref = $objp->ref;
448  $expensereport_static->id = $objp->erid;
449 
450  $userstatic->id = $objp->userid;
451  $userstatic->login = $objp->login;
452  $userstatic->statut = $objp->statut;
453  $userstatic->email = $objp->email;
454  $userstatic->gender = $objp->gender;
455  $userstatic->firstname = $objp->firstname;
456  $userstatic->lastname = $objp->lastname;
457  $userstatic->employee = $objp->employee;
458  $userstatic->photo = $objp->photo;
459 
460  print '<tr class="oddeven">';
461 
462  // Login
463  print '<td class="nowraponall">';
464  print $userstatic->getNomUrl(-1, '', 0, 0, 24, 1, 'login', '', 1);
465  print '</td>';
466 
467  // Line id
468  print '<td>'.$objp->rowid.'</td>';
469 
470  // Ref Expense report
471  print '<td>'.$expensereport_static->getNomUrl(1).'</td>';
472 
473  // Date validation
474  if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
475  print '<td class="center">'.dol_print_date($db->jdate($objp->date_valid), 'day').'</td>';
476  }
477 
478  // Date
479  print '<td class="center">'.dol_print_date($db->jdate($objp->date), 'day').'</td>';
480 
481  // Fees label
482  print '<td>';
483  print ($langs->trans($objp->type_fees_code) == $objp->type_fees_code ? $objp->type_fees_label : $langs->trans(($objp->type_fees_code)));
484  print '</td>';
485 
486  // Fees description -- Can be null
487  print '<td>';
488  $text = dolGetFirstLineOfText(dol_string_nohtmltag($objp->comments, 1));
489  $trunclength = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION) ? 32 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION;
490  print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->comments);
491  print '</td>';
492 
493  // Amount without taxes
494  print '<td class="right nowraponall amount">';
495  print price($objp->price);
496  print '</td>';
497 
498  // Vat rate
499  print '<td class="right">';
500  print vatrate($objp->tva_tx_line.($objp->vat_src_code ? ' ('.$objp->vat_src_code.')' : ''));
501  print '</td>';
502 
503  // Current account
504  print '<td>';
505  print length_accountg(html_entity_decode($objp->code_buy));
506  print '</td>';
507 
508  // Suggested accounting account
509  print '<td>';
510  print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone');
511  print '</td>';
512 
513  print '<td class="center">';
514  print '<input type="checkbox" class="flat checkforselect checkforselect'.$objp->rowid.'" name="toselect[]" value="'.$objp->rowid."_".$i.'"'.($objp->aarowid ? "checked" : "").'/>';
515  print '</td>';
516 
517  print "</tr>";
518  $i++;
519  }
520  if ($num_lines == 0) {
521  print '<tr><td colspan="13"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
522  }
523 
524  print '</table>';
525  print "</div>";
526 
527  print '</form>';
528 } else {
529  print $db->error();
530 }
531 if ($db->type == 'mysqli') {
532  $db->query("SET SQL_BIG_SELECTS=0"); // Enable MAX_JOIN_SIZE limitation
533 }
534 
535 // Add code to auto check the box when we select an account
536 print '<script type="text/javascript">
537 jQuery(document).ready(function() {
538  jQuery(".codeventil").change(function() {
539  var s=$(this).attr("id").replace("codeventil", "")
540  console.log(s+" "+$(this).val());
541  if ($(this).val() == -1) jQuery(".checkforselect"+s).prop("checked", false);
542  else jQuery(".checkforselect"+s).prop("checked", true);
543  });
544 });
545 </script>';
546 
547 // End of page
548 llxFooter();
549 $db->close();
dol_trunc
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
Definition: functions.lib.php:4059
llxFooter
llxFooter()
Empty footer.
Definition: wrapper.php:70
GETPOST
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
Definition: functions.lib.php:609
$form
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
FormOther
Classe permettant la generation de composants html autre Only common components are here.
Definition: html.formother.class.php:39
FormAccounting
Class to manage generation of HTML components for accounting management.
Definition: html.formaccounting.class.php:33
img_picto
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
Definition: functions.lib.php:4135
llxHeader
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
ExpenseReport\STATUS_CLOSED
const STATUS_CLOSED
Classified paid.
Definition: expensereport.class.php:213
dol_getIdFromCode
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
Definition: functions.lib.php:9091
length_accountg
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
Definition: accounting.lib.php:94
dol_string_nohtmltag
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
Definition: functions.lib.php:7046
dol_syslog
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
Definition: functions.lib.php:1741
print_barre_liste
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
Definition: functions.lib.php:5530
setEventMessages
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
Definition: functions.lib.php:8673
$sql
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
isModEnabled
isModEnabled($module)
Is Dolibarr module enabled.
Definition: functions.lib.php:207
dolibarr_set_const
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
Definition: admin.lib.php:638
AccountingAccount
Class to manage accounting accounts.
Definition: accountingaccount.class.php:36
User
Class to manage Dolibarr users.
Definition: user.class.php:47
GETPOSTISSET
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
Definition: functions.lib.php:509
print_liste_field_titre
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
Definition: functions.lib.php:5295
natural_search
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
Definition: functions.lib.php:10024
Form
Class to manage generation of HTML components Only common components must be here.
Definition: html.form.class.php:53
ExpenseReport
Class to manage Trips and Expenses.
Definition: expensereport.class.php:36
price
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
Definition: functions.lib.php:5829
dolGetFirstLineOfText
dolGetFirstLineOfText($text, $nboflines=1, $charset='UTF-8')
Return first line of text.
Definition: functions.lib.php:7278
accessforbidden
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
Definition: security.lib.php:1169
dol_mktime
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
Definition: functions.lib.php:2968
getDolGlobalInt
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
Definition: functions.lib.php:156
vatrate
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formated for view output Used into pdf and HTML pages.
Definition: functions.lib.php:5780