dolibarr  16.0.5
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 $show_files = GETPOST('show_files', 'int');
44 $confirm = GETPOST('confirm', 'alpha');
45 $toselect = GETPOST('toselect', 'array');
46 $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'expensereportlist'; // To manage different context of search
47 $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
48 
49 
50 // Select Box
51 $mesCasesCochees = GETPOST('toselect', 'array');
52 
53 // Search Getpost
54 $search_login = GETPOST('search_login', 'alpha');
55 $search_lineid = GETPOST('search_lineid', 'alpha');
56 $search_expensereport = GETPOST('search_expensereport', 'alpha');
57 $search_label = GETPOST('search_label', 'alpha');
58 $search_desc = GETPOST('search_desc', 'alpha');
59 $search_amount = GETPOST('search_amount', 'alpha');
60 $search_account = GETPOST('search_account', 'alpha');
61 $search_vat = GETPOST('search_vat', 'alpha');
62 $search_date_startday = GETPOST('search_date_startday', 'int');
63 $search_date_startmonth = GETPOST('search_date_startmonth', 'int');
64 $search_date_startyear = GETPOST('search_date_startyear', 'int');
65 $search_date_endday = GETPOST('search_date_endday', 'int');
66 $search_date_endmonth = GETPOST('search_date_endmonth', 'int');
67 $search_date_endyear = GETPOST('search_date_endyear', 'int');
68 $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver
69 $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
70 
71 // Load variable for pagination
72 $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : (empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION) ? $conf->liste_limit : $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION);
73 $sortfield = GETPOST('sortfield', 'aZ09comma');
74 $sortorder = GETPOST('sortorder', 'aZ09comma');
75 $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
76 if (empty($page) || $page < 0) {
77  $page = 0;
78 }
79 $offset = $limit * $page;
80 $pageprev = $page - 1;
81 $pagenext = $page + 1;
82 if (!$sortfield) {
83  $sortfield = "erd.date, erd.rowid";
84 }
85 if (!$sortorder) {
86  if ($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_TODO > 0) {
87  $sortorder = "DESC";
88  }
89 }
90 
91 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
92 $hookmanager->initHooks(array('accountancyexpensereportlist'));
93 
94 $formaccounting = new FormAccounting($db);
95 $accounting = new AccountingAccount($db);
96 
97 $chartaccountcode = dol_getIdFromCode($db, $conf->global->CHARTOFACCOUNTS, 'accounting_system', 'rowid', 'pcg_version');
98 
99 // Security check
100 if (!isModEnabled('accounting')) {
101  accessforbidden();
102 }
103 if ($user->socid > 0) {
104  accessforbidden();
105 }
106 if (empty($user->rights->accounting->mouvements->lire)) {
107  accessforbidden();
108 }
109 
110 
111 /*
112  * Actions
113  */
114 
115 if (GETPOST('cancel', 'alpha')) {
116  $action = 'list'; $massaction = '';
117 }
118 if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
119  $massaction = '';
120 }
121 
122 $parameters = array();
123 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
124 if ($reshook < 0) {
125  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
126 }
127 
128 if (empty($reshook)) {
129  // Purge search criteria
130  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
131  $search_login = '';
132  $search_expensereport = '';
133  $search_label = '';
134  $search_desc = '';
135  $search_amount = '';
136  $search_account = '';
137  $search_vat = '';
138  $search_date_startday = '';
139  $search_date_startmonth = '';
140  $search_date_startyear = '';
141  $search_date_endday = '';
142  $search_date_endmonth = '';
143  $search_date_endyear = '';
144  $search_date_start = '';
145  $search_date_end = '';
146  $search_country = '';
147  $search_tvaintra = '';
148  }
149 
150  // Mass actions
151  $objectclass = 'ExpenseReport';
152  $objectlabel = 'ExpenseReport';
153  $permissiontoread = $user->hasRight('accounting', 'read');
154  $permissiontodelete = $user->hasRight('accounting', 'delete');
155  $uploaddir = $conf->expensereport->dir_output;
156  include DOL_DOCUMENT_ROOT . '/core/actions_massactions.inc.php';
157 }
158 
159 
160 if ($massaction == 'ventil' && $user->rights->accounting->bind->write) {
161  $msg = '';
162 
163  //print '<div><span style="color:red">' . $langs->trans("Processing") . '...</span></div>';
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 style="color:red">'.$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 style="color:green">'.$langs->trans("LineOfExpenseReport").' '.$monId.' - '.$langs->trans("VentilatedinAccount").' : '.length_accountg($accountventilated->account_number).'</span></div>';
190  $ok++;
191  } else {
192  $msg .= '<div><span style="color:red">'.$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 
205 
206 /*
207  * View
208  */
209 
210 $form = new Form($db);
211 $formother = new FormOther($db);
212 
213 llxHeader('', $langs->trans("ExpenseReportsVentilation"));
214 
215 if (empty($chartaccountcode)) {
216  print $langs->trans("ErrorChartOfAccountSystemNotSelected");
217  // End of page
218  llxFooter();
219  $db->close();
220  exit;
221 }
222 
223 // Expense report lines
224 $sql = "SELECT er.ref, er.rowid as erid, er.date_debut, er.date_valid,";
225 $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,";
226 $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,";
227 $sql .= " u.rowid as userid, u.login, u.lastname, u.firstname, u.email, u.gender, u.employee, u.photo, u.statut,";
228 $sql .= " aa.rowid as aarowid";
229 $parameters = array();
230 $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook
231 $sql .= $hookmanager->resPrint;
232 $sql .= " FROM ".MAIN_DB_PREFIX."expensereport as er";
233 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."expensereport_det as erd ON er.rowid = erd.fk_expensereport";
234 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_type_fees as f ON f.id = erd.fk_c_type_fees";
235 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid = er.fk_user_author";
236 $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;
237 $sql .= " WHERE er.fk_statut IN (".ExpenseReport::STATUS_APPROVED.", ".ExpenseReport::STATUS_CLOSED.") AND erd.fk_code_ventilation <= 0";
238 // Define begin binding date
239 if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) {
240  $sql .= " AND er.date_debut >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING)."'";
241 }
242 // Add search filter like
243 if (strlen(trim($search_login))) {
244  $sql .= natural_search("u.login", $search_login);
245 }
246 if (strlen(trim($search_expensereport))) {
247  $sql .= natural_search("er.ref", $search_expensereport);
248 }
249 if (strlen(trim($search_label))) {
250  $sql .= natural_search("f.label", $search_label);
251 }
252 if (strlen(trim($search_desc))) {
253  $sql .= natural_search("erd.comments", $search_desc);
254 }
255 if (strlen(trim($search_amount))) {
256  $sql .= natural_search("erd.total_ht", $search_amount, 1);
257 }
258 if (strlen(trim($search_account))) {
259  $sql .= natural_search("aa.account_number", $search_account);
260 }
261 if (strlen(trim($search_vat))) {
262  $sql .= natural_search("erd.tva_tx", $search_vat, 1);
263 }
264 if ($search_date_start) {
265  $sql .= " AND erd.date >= '".$db->idate($search_date_start)."'";
266 }
267 if ($search_date_end) {
268  $sql .= " AND erd.date <= '".$db->idate($search_date_end)."'";
269 }
270 $sql .= " AND er.entity IN (".getEntity('expensereport', 0).")"; // We don't share object for accountancy
271 
272 // Add where from hooks
273 $parameters = array();
274 $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook
275 $sql .= $hookmanager->resPrint;
276 
277 $sql .= $db->order($sortfield, $sortorder);
278 
279 // Count total nb of records
280 $nbtotalofrecords = '';
281 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
282  $result = $db->query($sql);
283  $nbtotalofrecords = $db->num_rows($result);
284  if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
285  $page = 0;
286  $offset = 0;
287  }
288 }
289 
290 $sql .= $db->plimit($limit + 1, $offset);
291 
292 dol_syslog("accountancy/expensereport/list.php", LOG_DEBUG);
293 // MAX_JOIN_SIZE can be very low (ex: 300000) on some limited configurations (ex: https://www.online.net/fr/hosting/online-perso)
294 // 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
295 if ($db->type == 'mysqli') {
296  $db->query("SET SQL_BIG_SELECTS=1");
297 }
298 
299 $result = $db->query($sql);
300 if ($result) {
301  $num_lines = $db->num_rows($result);
302  $i = 0;
303 
304  $arrayofselected = is_array($toselect) ? $toselect : array();
305 
306  $param = '';
307  if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
308  $param .= '&contextpage='.urlencode($contextpage);
309  }
310  if ($limit > 0 && $limit != $conf->liste_limit) {
311  $param .= '&limit='.urlencode($limit);
312  }
313  if ($search_login) {
314  $param .= '&search_login='.urlencode($search_login);
315  }
316  if ($search_lineid) {
317  $param .= '&search_lineid='.urlencode($search_lineid);
318  }
319  if ($search_date_startday) {
320  $param .= '&search_date_startday='.urlencode($search_date_startday);
321  }
322  if ($search_date_startmonth) {
323  $param .= '&search_date_startmonth='.urlencode($search_date_startmonth);
324  }
325  if ($search_date_startyear) {
326  $param .= '&search_date_startyear='.urlencode($search_date_startyear);
327  }
328  if ($search_date_endday) {
329  $param .= '&search_date_endday='.urlencode($search_date_endday);
330  }
331  if ($search_date_endmonth) {
332  $param .= '&search_date_endmonth='.urlencode($search_date_endmonth);
333  }
334  if ($search_date_endyear) {
335  $param .= '&search_date_endyear='.urlencode($search_date_endyear);
336  }
337  if ($search_expensereport) {
338  $param .= '&search_expensereport='.urlencode($search_expensereport);
339  }
340  if ($search_label) {
341  $param .= '&search_label='.urlencode($search_label);
342  }
343  if ($search_desc) {
344  $param .= '&search_desc='.urlencode($search_desc);
345  }
346  if ($search_amount) {
347  $param .= '&search_amount='.urlencode($search_amount);
348  }
349  if ($search_vat) {
350  $param .= '&search_vat='.urlencode($search_vat);
351  }
352 
353  $arrayofmassactions = array(
354  'ventil' => img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Ventilate")
355  );
356  $massactionbutton = $form->selectMassAction('ventil', $arrayofmassactions, 1);
357 
358  print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
359  print '<input type="hidden" name="action" value="ventil">';
360  if ($optioncss != '') {
361  print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
362  }
363  print '<input type="hidden" name="token" value="'.newToken().'">';
364  print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
365  print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
366  print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
367  print '<input type="hidden" name="page" value="'.$page.'">';
368 
369  print_barre_liste($langs->trans("ExpenseReportLines"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit);
370 
371  print '<span class="opacitymedium">'.$langs->trans("DescVentilTodoExpenseReport").'</span></br><br>';
372 
373  if (!empty($msg)) {
374  print $msg.'<br>';
375  }
376 
377  $moreforfilter = '';
378 
379  print '<div class="div-table-responsive">';
380  print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
381 
382  // We add search filter
383  print '<tr class="liste_titre_filter">';
384  print '<td class="liste_titre"><input type="text" name="search_login" class="maxwidth50" value="'.$search_login.'"></td>';
385  print '<td class="liste_titre"></td>';
386  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_expensereport" value="'.dol_escape_htmltag($search_expensereport).'"></td>';
387  if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
388  print '<td class="liste_titre"></td>';
389  }
390  print '<td class="liste_titre center">';
391  print '<div class="nowrap">';
392  print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
393  print '</div>';
394  print '<div class="nowrap">';
395  print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
396  print '</div>';
397  print '</td>';
398  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_label" value="'.dol_escape_htmltag($search_label).'"></td>';
399  print '<td class="liste_titre"><input type="text" class="flat maxwidthonsmartphone" name="search_desc" value="'.dol_escape_htmltag($search_desc).'"></td>';
400  print '<td class="liste_titre right"><input type="text" class="flat maxwidth50 right" name="search_amount" value="'.dol_escape_htmltag($search_amount).'"></td>';
401  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>';
402  print '<td class="liste_titre"></td>';
403  print '<td class="liste_titre"></td>';
404  print '<td class="center liste_titre">';
405  $searchpicto = $form->showFilterButtons();
406  print $searchpicto;
407  print '</td>';
408  print '</tr>';
409 
410  print '<tr class="liste_titre">';
411  print_liste_field_titre("Employee", $_SERVER['PHP_SELF'], "u.login", $param, "", "", $sortfield, $sortorder);
412  print_liste_field_titre("LineId", $_SERVER["PHP_SELF"], "erd.rowid", "", $param, '', $sortfield, $sortorder);
413  print_liste_field_titre("ExpenseReport", $_SERVER["PHP_SELF"], "er.ref", "", $param, '', $sortfield, $sortorder);
414  if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
415  print_liste_field_titre("DateValidation", $_SERVER["PHP_SELF"], "er.date_valid", "", $param, '', $sortfield, $sortorder, 'center ');
416  }
417  print_liste_field_titre("DateOfLine", $_SERVER["PHP_SELF"], "erd.date, erd.rowid", "", $param, '', $sortfield, $sortorder, 'center ');
418  print_liste_field_titre("TypeFees", $_SERVER["PHP_SELF"], "f.label", "", $param, '', $sortfield, $sortorder);
419  print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "erd.comments", "", $param, '', $sortfield, $sortorder);
420  print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "erd.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 ');
421  print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "erd.tva_tx", "", $param, '', $sortfield, $sortorder, 'right ');
422  print_liste_field_titre("AccountAccountingSuggest", '', '', '', '', '', '', '', 'nowraponall ');
423  print_liste_field_titre("IntoAccount", '', '', '', '', '', '', '', '');
424  $checkpicto = '';
425  if ($massactionbutton) {
426  $checkpicto = $form->showCheckAddButtons('checkforselect', 1);
427  }
428  print_liste_field_titre($checkpicto, '', '', '', '', '', '', '', 'center ');
429  print "</tr>\n";
430 
431 
432  $expensereport_static = new ExpenseReport($db);
433  $userstatic = new User($db);
434  $form = new Form($db);
435 
436  while ($i < min($num_lines, $limit)) {
437  $objp = $db->fetch_object($result);
438 
439  $objp->aarowid_suggest = '';
440  $objp->aarowid_suggest = $objp->aarowid;
441 
442  $expensereport_static->ref = $objp->ref;
443  $expensereport_static->id = $objp->erid;
444 
445  $userstatic->id = $objp->userid;
446  $userstatic->ref = $objp->label;
447  $userstatic->login = $objp->login;
448  $userstatic->statut = $objp->statut;
449  $userstatic->email = $objp->email;
450  $userstatic->gender = $objp->gender;
451  $userstatic->firstname = $objp->firstname;
452  $userstatic->lastname = $objp->lastname;
453  $userstatic->employee = $objp->employee;
454  $userstatic->photo = $objp->photo;
455 
456  print '<tr class="oddeven">';
457 
458  // Login
459  print '<td class="nowraponall">';
460  print $userstatic->getNomUrl(-1, '', 0, 0, 24, 1, 'login', '', 1);
461  print '</td>';
462 
463  // Line id
464  print '<td>'.$objp->rowid.'</td>';
465 
466  // Ref Expense report
467  print '<td>'.$expensereport_static->getNomUrl(1).'</td>';
468 
469  // Date validation
470  if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
471  print '<td class="center">'.dol_print_date($db->jdate($objp->date_valid), 'day').'</td>';
472  }
473 
474  // Date
475  print '<td class="center">'.dol_print_date($db->jdate($objp->date), 'day').'</td>';
476 
477  // Fees label
478  print '<td>';
479  print ($langs->trans($objp->type_fees_code) == $objp->type_fees_code ? $objp->type_fees_label : $langs->trans(($objp->type_fees_code)));
480  print '</td>';
481 
482  // Fees description -- Can be null
483  print '<td>';
484  $text = dolGetFirstLineOfText(dol_string_nohtmltag($objp->comments, 1));
485  $trunclength = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION) ? 32 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION;
486  print $form->textwithtooltip(dol_trunc($text, $trunclength), $objp->comments);
487  print '</td>';
488 
489  // Amount without taxes
490  print '<td class="right nowraponall amount">';
491  print price($objp->price);
492  print '</td>';
493 
494  // Vat rate
495  print '<td class="right">';
496  print vatrate($objp->tva_tx_line.($objp->vat_src_code ? ' ('.$objp->vat_src_code.')' : ''));
497  print '</td>';
498 
499  // Current account
500  print '<td>';
501  print length_accountg(html_entity_decode($objp->code_buy));
502  print '</td>';
503 
504  // Suggested accounting account
505  print '<td>';
506  print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth300 maxwidthonsmartphone', 'cachewithshowemptyone');
507  print '</td>';
508 
509  print '<td class="center">';
510  print '<input type="checkbox" class="flat checkforselect checkforselect'.$objp->rowid.'" name="toselect[]" value="'.$objp->rowid."_".$i.'"'.($objp->aarowid ? "checked" : "").'/>';
511  print '</td>';
512 
513  print "</tr>";
514  $i++;
515  }
516 
517  print '</table>';
518  print "</div>";
519 
520  print '</form>';
521 } else {
522  print $db->error();
523 }
524 if ($db->type == 'mysqli') {
525  $db->query("SET SQL_BIG_SELECTS=0"); // Enable MAX_JOIN_SIZE limitation
526 }
527 
528 // Add code to auto check the box when we select an account
529 print '<script type="text/javascript">
530 jQuery(document).ready(function() {
531  jQuery(".codeventil").change(function() {
532  var s=$(this).attr("id").replace("codeventil", "")
533  console.log(s+" "+$(this).val());
534  if ($(this).val() == -1) jQuery(".checkforselect"+s).prop("checked", false);
535  else jQuery(".checkforselect"+s).prop("checked", true);
536  });
537 });
538 </script>';
539 
540 // End of page
541 llxFooter();
542 $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:3805
llxFooter
llxFooter()
Empty footer.
Definition: wrapper.php:73
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:484
$form
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:142
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:3880
ExpenseReport\STATUS_CLOSED
const STATUS_CLOSED
Classified paid.
Definition: expensereport.class.php:165
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:8535
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:6694
dol_syslog
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
Definition: functions.lib.php:1603
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:5257
isModEnabled
isModEnabled($module)
Is Dolibarr module enabled.
Definition: functions.lib.php:105
AccountingAccount
Class to manage accounting accounts.
Definition: accountingaccount.class.php:36
User
Class to manage Dolibarr users.
Definition: user.class.php:44
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:386
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:5026
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:9420
Form
Class to manage generation of HTML components Only common components must be here.
Definition: html.form.class.php:52
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:5541
setEventMessages
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
Definition: functions.lib.php:8137
dolGetFirstLineOfText
dolGetFirstLineOfText($text, $nboflines=1, $charset='UTF-8')
Return first line of text.
Definition: functions.lib.php:6907
accessforbidden
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
Definition: security.lib.php:933
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:2757
llxHeader
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOCSRFCHECK')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:59
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:5492