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