dolibarr  x.y.z
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 maxwidth200 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  if ($num_lines == 0) {
517  print '<tr><td colspan="13"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
518  }
519 
520  print '</table>';
521  print "</div>";
522 
523  print '</form>';
524 } else {
525  print $db->error();
526 }
527 if ($db->type == 'mysqli') {
528  $db->query("SET SQL_BIG_SELECTS=0"); // Enable MAX_JOIN_SIZE limitation
529 }
530 
531 // Add code to auto check the box when we select an account
532 print '<script type="text/javascript">
533 jQuery(document).ready(function() {
534  jQuery(".codeventil").change(function() {
535  var s=$(this).attr("id").replace("codeventil", "")
536  console.log(s+" "+$(this).val());
537  if ($(this).val() == -1) jQuery(".checkforselect"+s).prop("checked", false);
538  else jQuery(".checkforselect"+s).prop("checked", true);
539  });
540 });
541 </script>';
542 
543 // End of page
544 llxFooter();
545 $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:45
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.