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-2021 Florian Henry <florian.henry@open-concept.pro>
6  * Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
7  * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>s
8  * Copyright (C) 2016 Laurent Destailleur <eldy@users.sourceforge.net>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <https://www.gnu.org/licenses/>.
22  */
23 
29 require '../../main.inc.php';
30 
31 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
36 require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
37 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
38 require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
39 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
40 require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
41 
42 // Load translation files required by the page
43 $langs->loadLangs(array("bills", "companies", "compta", "accountancy", "other", "productbatch", "products"));
44 
45 $action = GETPOST('action', 'aZ09');
46 $massaction = GETPOST('massaction', 'alpha');
47 $confirm = GETPOST('confirm', 'alpha');
48 $toselect = GETPOST('toselect', 'array');
49 $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'accountancysupplierlist'; // To manage different context of search
50 $optioncss = GETPOST('optioncss', 'alpha');
51 
52 $default_account = GETPOST('default_account', 'int');
53 
54 // Select Box
55 $mesCasesCochees = GETPOST('toselect', 'array');
56 
57 // Search Getpost
58 $search_societe = GETPOST('search_societe', 'alpha');
59 $search_lineid = GETPOST('search_lineid', 'int');
60 $search_ref = GETPOST('search_ref', 'alpha');
61 $search_ref_supplier = GETPOST('search_ref_supplier', 'alpha');
62 $search_invoice = GETPOST('search_invoice', 'alpha');
63 $search_label = GETPOST('search_label', 'alpha');
64 $search_desc = GETPOST('search_desc', 'alpha');
65 $search_amount = GETPOST('search_amount', 'alpha');
66 $search_account = GETPOST('search_account', 'alpha');
67 $search_vat = GETPOST('search_vat', 'alpha');
68 $search_date_startday = GETPOST('search_date_startday', 'int');
69 $search_date_startmonth = GETPOST('search_date_startmonth', 'int');
70 $search_date_startyear = GETPOST('search_date_startyear', 'int');
71 $search_date_endday = GETPOST('search_date_endday', 'int');
72 $search_date_endmonth = GETPOST('search_date_endmonth', 'int');
73 $search_date_endyear = GETPOST('search_date_endyear', 'int');
74 $search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear); // Use tzserver
75 $search_date_end = dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
76 $search_country = GETPOST('search_country', 'alpha');
77 $search_tvaintra = GETPOST('search_tvaintra', 'alpha');
78 
79 // Load variable for pagination
80 $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : (empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION) ? $conf->liste_limit : $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION);
81 $sortfield = GETPOST('sortfield', 'aZ09comma');
82 $sortorder = GETPOST('sortorder', 'aZ09comma');
83 $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
84 if (empty($page) || $page < 0) {
85  $page = 0;
86 }
87 $offset = $limit * $page;
88 $pageprev = $page - 1;
89 $pagenext = $page + 1;
90 if (!$sortfield) {
91  $sortfield = "f.datef, f.ref, l.rowid";
92 }
93 if (!$sortorder) {
94  if ($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_TODO > 0) {
95  $sortorder = "DESC";
96  } else {
97  $sortorder = "ASC";
98  }
99 }
100 
101 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
102 $hookmanager->initHooks(array('accountancysupplierlist'));
103 
104 $formaccounting = new FormAccounting($db);
105 $accountingAccount = new AccountingAccount($db);
106 
107 $chartaccountcode = dol_getIdFromCode($db, getDolGlobalInt('CHARTOFACCOUNTS'), 'accounting_system', 'rowid', 'pcg_version');
108 
109 // Security check
110 if (!isModEnabled('accounting')) {
111  accessforbidden();
112 }
113 if ($user->socid > 0) {
114  accessforbidden();
115 }
116 if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
117  accessforbidden();
118 }
119 
120 
121 /*
122  * Actions
123  */
124 
125 if (GETPOST('cancel', 'alpha')) {
126  $action = 'list'; $massaction = '';
127 }
128 if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
129  $massaction = '';
130 }
131 
132 $parameters = array();
133 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
134 if ($reshook < 0) {
135  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
136 }
137 
138 if (empty($reshook)) {
139  // Purge search criteria
140  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
141  $search_societe = '';
142  $search_lineid = '';
143  $search_ref = '';
144  $search_ref_supplier = '';
145  $search_invoice = '';
146  $search_label = '';
147  $search_desc = '';
148  $search_amount = '';
149  $search_account = '';
150  $search_vat = '';
151  $search_date_startday = '';
152  $search_date_startmonth = '';
153  $search_date_startyear = '';
154  $search_date_endday = '';
155  $search_date_endmonth = '';
156  $search_date_endyear = '';
157  $search_date_start = '';
158  $search_date_end = '';
159  $search_country = '';
160  $search_tvaintra = '';
161  }
162 
163  // Mass actions
164  $objectclass = 'AccountingAccount';
165  $permissiontoread = $user->hasRight('accounting', 'read');
166  $permissiontodelete = $user->hasRight('accounting', 'delete');
167  $uploaddir = $conf->accounting->dir_output;
168  include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
169 }
170 
171 
172 if ($massaction == 'ventil' && $user->hasRight('accounting', 'bind', 'write')) {
173  $msg = '';
174 
175  if (!empty($mesCasesCochees)) {
176  $msg = '<div>'.$langs->trans("SelectedLines").': '.count($mesCasesCochees).'</div>';
177  $msg .= '<div class="detail">';
178  $cpt = 0;
179  $ok = 0;
180  $ko = 0;
181 
182  foreach ($mesCasesCochees as $maLigneCochee) {
183  $maLigneCourante = explode("_", $maLigneCochee);
184  $monId = $maLigneCourante[0];
185  $monCompte = GETPOST('codeventil'.$monId);
186 
187  if ($monCompte <= 0) {
188  $msg .= '<div><span class="error">'.$langs->trans("Lineofinvoice").' '.$monId.' - '.$langs->trans("NoAccountSelected").'</span></div>';
189  $ko++;
190  } else {
191  $sql = " UPDATE ".MAIN_DB_PREFIX."facture_fourn_det";
192  $sql .= " SET fk_code_ventilation = ".((int) $monCompte);
193  $sql .= " WHERE rowid = ".((int) $monId);
194 
195  $accountventilated = new AccountingAccount($db);
196  $accountventilated->fetch($monCompte, '', 1);
197 
198  dol_syslog('accountancy/supplier/list.php', LOG_DEBUG);
199  if ($db->query($sql)) {
200  $msg .= '<div><span class="green">'.$langs->trans("Lineofinvoice").' '.$monId.' - '.$langs->trans("VentilatedinAccount").' : '.length_accountg($accountventilated->account_number).'</span></div>';
201  $ok++;
202  } else {
203  $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>';
204  $ko++;
205  }
206  }
207 
208  $cpt++;
209  }
210  $msg .= '</div>';
211  $msg .= '<div>'.$langs->trans("EndProcessing").'</div>';
212  }
213 }
214 
215 if (GETPOST('sortfield') == 'f.datef, f.ref, l.rowid') {
216  $value = (GETPOST('sortorder') == 'asc,asc,asc' ? 0 : 1);
217  require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
218  $res = dolibarr_set_const($db, "ACCOUNTING_LIST_SORT_VENTILATION_TODO", $value, 'yesno', 0, '', $conf->entity);
219 }
220 
221 
222 /*
223  * View
224  */
225 
226 $form = new Form($db);
227 $formother = new FormOther($db);
228 
229 llxHeader('', $langs->trans("SuppliersVentilation"));
230 
231 if (empty($chartaccountcode)) {
232  print $langs->trans("ErrorChartOfAccountSystemNotSelected");
233  // End of page
234  llxFooter();
235  $db->close();
236  exit;
237 }
238 
239 // Supplier Invoice Lines
240 $sql = "SELECT f.rowid as facid, f.ref, f.ref_supplier, f.libelle as invoice_label, f.datef, f.type as ftype, f.fk_facture_source,";
241 $sql .= " l.rowid, l.fk_product, l.description, l.total_ht, l.fk_code_ventilation, l.product_type as type_l, l.tva_tx as tva_tx_line, l.vat_src_code,";
242 $sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.tva_tx as tva_tx_prod,";
243 if (!empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED)) {
244  $sql .= " ppe.accountancy_code_sell as code_sell, ppe.accountancy_code_sell_intra as code_sell_intra, ppe.accountancy_code_sell_export as code_sell_export,";
245  $sql .= " ppe.accountancy_code_buy as code_buy, ppe.accountancy_code_buy_intra as code_buy_intra, ppe.accountancy_code_buy_export as code_buy_export,";
246 } else {
247  $sql .= " p.accountancy_code_sell as code_sell, p.accountancy_code_sell_intra as code_sell_intra, p.accountancy_code_sell_export as code_sell_export,";
248  $sql .= " p.accountancy_code_buy as code_buy, p.accountancy_code_buy_intra as code_buy_intra, p.accountancy_code_buy_export as code_buy_export,";
249 }
250 $sql .= " p.tosell as status, p.tobuy as status_buy,";
251 $sql .= " aa.rowid as aarowid, aa2.rowid as aarowid_intra, aa3.rowid as aarowid_export, aa4.rowid as aarowid_thirdparty,";
252 $sql .= " co.code as country_code, co.label as country_label,";
253 $sql .= " s.rowid as socid, s.nom as name, s.tva_intra, s.email, s.town, s.zip, s.fk_pays, s.client, s.fournisseur, s.code_client, s.code_fournisseur,";
254 if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
255  $sql .= " spe.accountancy_code_customer as code_compta_client,";
256  $sql .= " spe.accountancy_code_supplier as code_compta_fournisseur,";
257  $sql .= " spe.accountancy_code_buy as company_code_buy";
258 } else {
259  $sql .= " s.code_compta as code_compta_client,";
260  $sql .= " s.code_compta_fournisseur,";
261  $sql .= " s.accountancy_code_buy as company_code_buy";
262 }
263 $parameters = array();
264 $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook
265 $sql .= $hookmanager->resPrint;
266 $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
267 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = f.fk_soc";
268 if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
269  $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe_perentity as spe ON spe.fk_soc = s.rowid AND spe.entity = " . ((int) $conf->entity);
270 }
271 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as co ON co.rowid = s.fk_pays ";
272 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."facture_fourn_det as l ON f.rowid = l.fk_facture_fourn";
273 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = l.fk_product";
274 if (!empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED)) {
275  $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product_perentity as ppe ON ppe.fk_product = p.rowid AND ppe.entity = " . ((int) $conf->entity);
276 }
277 $alias_societe_perentity = empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED) ? "s" : "spe";
278 $alias_product_perentity = empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED) ? "p" : "ppe";
279 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as aa ON " . $alias_product_perentity . ".accountancy_code_buy = aa.account_number AND aa.active = 1 AND aa.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa.entity = ".$conf->entity;
280 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as aa2 ON " . $alias_product_perentity . ".accountancy_code_buy_intra = aa2.account_number AND aa2.active = 1 AND aa2.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa2.entity = ".$conf->entity;
281 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as aa3 ON " . $alias_product_perentity . ".accountancy_code_buy_export = aa3.account_number AND aa3.active = 1 AND aa3.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa3.entity = ".$conf->entity;
282 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as aa4 ON " . $alias_societe_perentity . ".accountancy_code_buy = aa4.account_number AND aa4.active = 1 AND aa4.fk_pcg_version = '".$db->escape($chartaccountcode)."' AND aa4.entity = ".$conf->entity;
283 $sql .= " WHERE f.fk_statut > 0 AND l.fk_code_ventilation <= 0";
284 $sql .= " AND l.product_type <= 2";
285 // Define begin binding date
286 if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) {
287  $sql .= " AND f.datef >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING)."'";
288 }
289 // Add search filter like
290 if ($search_societe) {
291  $sql .= natural_search('s.nom', $search_societe);
292 }
293 if ($search_lineid) {
294  $sql .= natural_search("l.rowid", $search_lineid, 1);
295 }
296 if (strlen(trim($search_invoice))) {
297  $sql .= natural_search(array("f.ref", "f.ref_supplier"), $search_invoice);
298 }
299 if (strlen(trim($search_ref))) {
300  $sql .= natural_search("p.ref", $search_ref);
301 }
302 /*if (strlen(trim($search_ref_supplier))) {
303  $sql .= natural_search("f.ref_supplier", $search_ref_supplier);
304 }*/
305 if (strlen(trim($search_label))) {
306  $sql .= natural_search(array("p.label", "f.libelle"), $search_label);
307 }
308 if (strlen(trim($search_desc))) {
309  $sql .= natural_search("l.description", $search_desc);
310 }
311 if (strlen(trim($search_amount))) {
312  $sql .= natural_search("l.total_ht", $search_amount, 1);
313 }
314 if (strlen(trim($search_account))) {
315  $sql .= natural_search("aa.account_number", $search_account);
316 }
317 if (strlen(trim($search_vat))) {
318  $sql .= natural_search("l.tva_tx", price2num($search_vat), 1);
319 }
320 if ($search_date_start) {
321  $sql .= " AND f.datef >= '".$db->idate($search_date_start)."'";
322 }
323 if ($search_date_end) {
324  $sql .= " AND f.datef <= '".$db->idate($search_date_end)."'";
325 }
326 if (strlen(trim($search_country))) {
327  $arrayofcode = getCountriesInEEC();
328  $country_code_in_EEC = $country_code_in_EEC_without_me = '';
329  foreach ($arrayofcode as $key => $value) {
330  $country_code_in_EEC .= ($country_code_in_EEC ? "," : "")."'".$value."'";
331  if ($value != $mysoc->country_code) {
332  $country_code_in_EEC_without_me .= ($country_code_in_EEC_without_me ? "," : "")."'".$value."'";
333  }
334  }
335  if ($search_country == 'special_allnotme') {
336  $sql .= " AND co.code <> '".$db->escape($mysoc->country_code)."'";
337  } elseif ($search_country == 'special_eec') {
338  $sql .= " AND co.code IN (".$db->sanitize($country_code_in_EEC, 1).")";
339  } elseif ($search_country == 'special_eecnotme') {
340  $sql .= " AND co.code IN (".$db->sanitize($country_code_in_EEC_without_me, 1).")";
341  } elseif ($search_country == 'special_noteec') {
342  $sql .= " AND co.code NOT IN (".$db->sanitize($country_code_in_EEC, 1).")";
343  } else {
344  $sql .= natural_search("co.code", $search_country);
345  }
346 }
347 if (strlen(trim($search_tvaintra))) {
348  $sql .= natural_search("s.tva_intra", $search_tvaintra);
349 }
350 if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
351  $sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_SITUATION.")";
352 } else {
354 }
355 $sql .= " AND f.entity IN (".getEntity('facture_fourn', 0).")"; // We don't share object for accountancy
356 
357 // Add where from hooks
358 $parameters = array();
359 $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters); // Note that $action and $object may have been modified by hook
360 $sql .= $hookmanager->resPrint;
361 
362 $sql .= $db->order($sortfield, $sortorder);
363 
364 // Count total nb of records
365 $nbtotalofrecords = '';
366 if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
367  $result = $db->query($sql);
368  $nbtotalofrecords = $db->num_rows($result);
369  if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller then paging size (filtering), goto and load page 0
370  $page = 0;
371  $offset = 0;
372  }
373 }
374 
375 $sql .= $db->plimit($limit + 1, $offset);
376 
377 dol_syslog('accountancy/supplier/list.php', LOG_DEBUG);
378 // MAX_JOIN_SIZE can be very low (ex: 300000) on some limited configurations (ex: https://www.online.net/fr/hosting/online-perso)
379 // 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
380 if ($db->type == 'mysqli') {
381  $db->query("SET SQL_BIG_SELECTS=1");
382 }
383 
384 $result = $db->query($sql);
385 if ($result) {
386  $num_lines = $db->num_rows($result);
387  $i = 0;
388 
389  $arrayofselected = is_array($toselect) ? $toselect : array();
390 
391  $param = '';
392  if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
393  $param .= '&contextpage='.urlencode($contextpage);
394  }
395  if ($limit > 0 && $limit != $conf->liste_limit) {
396  $param .= '&limit='.((int) $limit);
397  }
398  if ($search_societe) {
399  $param .= '&search_societe='.urlencode($search_societe);
400  }
401  if ($search_lineid) {
402  $param .= '&search_lineid='.urlencode($search_lineid);
403  }
404  if ($search_date_startday) {
405  $param .= '&search_date_startday='.urlencode($search_date_startday);
406  }
407  if ($search_date_startmonth) {
408  $param .= '&search_date_startmonth='.urlencode($search_date_startmonth);
409  }
410  if ($search_date_startyear) {
411  $param .= '&search_date_startyear='.urlencode($search_date_startyear);
412  }
413  if ($search_date_endday) {
414  $param .= '&search_date_endday='.urlencode($search_date_endday);
415  }
416  if ($search_date_endmonth) {
417  $param .= '&search_date_endmonth='.urlencode($search_date_endmonth);
418  }
419  if ($search_date_endyear) {
420  $param .= '&search_date_endyear='.urlencode($search_date_endyear);
421  }
422  if ($search_invoice) {
423  $param .= '&search_invoice='.urlencode($search_invoice);
424  }
425  if ($search_ref) {
426  $param .= '&search_ref='.urlencode($search_ref);
427  }
428  if ($search_ref_supplier) {
429  $param .= '&search_ref_supplier='.urlencode($search_ref_supplier);
430  }
431  if ($search_label) {
432  $param .= '&search_label='.urlencode($search_label);
433  }
434  if ($search_desc) {
435  $param .= '&search_desc='.urlencode($search_desc);
436  }
437  if ($search_amount) {
438  $param .= '&search_amount='.urlencode($search_amount);
439  }
440  if ($search_vat) {
441  $param .= '&search_vat='.urlencode($search_vat);
442  }
443  if ($search_country) {
444  $param .= "&search_country=".urlencode($search_country);
445  }
446  if ($search_tvaintra) {
447  $param .= "&search_tvaintra=".urlencode($search_tvaintra);
448  }
449 
450  $arrayofmassactions = array(
451  'ventil'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Ventilate")
452  ,'set_default_account'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("ConfirmPreselectAccount")
453  //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
454  //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
455  );
456  //if ($user->hasRight('mymodule', 'supprimer')) $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
457  //if (in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array();
458  if ($massaction !== 'set_default_account') {
459  $massactionbutton = $form->selectMassAction('ventil', $arrayofmassactions, 1);
460  }
461 
462  print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
463  print '<input type="hidden" name="action" value="ventil">';
464  if ($optioncss != '') {
465  print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
466  }
467  print '<input type="hidden" name="token" value="'.newToken().'">';
468  print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
469  print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
470  print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
471  print '<input type="hidden" name="page" value="'.$page.'">';
472 
473  print_barre_liste($langs->trans("InvoiceLines"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num_lines, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit);
474 
475  if ($massaction == 'set_default_account') {
476  $formquestion[]=array('type' => 'other',
477  'name' => 'set_default_account',
478  'label' => $langs->trans("AccountancyCode"),
479  'value' => $formaccounting->select_account('', 'default_account', 1, array(), 0, 0, 'maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone'));
480  print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmPreselectAccount"), $langs->trans("ConfirmPreselectAccountQuestion", count($toselect)), "confirm_set_default_account", $formquestion, 1, 0, 200, 500, 1);
481  }
482 
483  print '<span class="opacitymedium">'.$langs->trans("DescVentilTodoCustomer").'</span></br><br>';
484 
485  if (!empty($msg)) {
486  print $msg.'<br>';
487  }
488 
489  $moreforfilter = '';
490 
491  print '<div class="div-table-responsive">';
492  print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
493 
494  // We add search filter
495  print '<tr class="liste_titre_filter">';
496  print '<td class="liste_titre"><input type="text" class="flat maxwidth25" name="search_lineid" value="'.dol_escape_htmltag($search_lineid).'"></td>';
497  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_invoice" value="'.dol_escape_htmltag($search_invoice).'"></td>';
498  //print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_ref_supplier" value="'.dol_escape_htmltag($search_ref_supplier).'"></td>';
499  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_label" value="'.dol_escape_htmltag($search_label).'"></td>';
500  print '<td class="liste_titre center">';
501  print '<div class="nowrap">';
502  print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
503  print '</div>';
504  print '<div class="nowrap">';
505  print $form->selectDate($search_date_end ? $search_date_end : -1, 'search_date_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
506  print '</div>';
507  print '</td>';
508  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_ref" value="'.dol_escape_htmltag($search_ref).'"></td>';
509  print '<td class="liste_titre"><input type="text" class="flat maxwidth100" name="search_desc" value="'.dol_escape_htmltag($search_desc).'"></td>';
510  print '<td class="liste_titre right"><input type="text" class="flat maxwidth50 right" name="search_amount" value="'.dol_escape_htmltag($search_amount).'"></td>';
511  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>';
512  print '<td class="liste_titre"><input type="text" class="flat maxwidth75imp" name="search_societe" value="'.dol_escape_htmltag($search_societe).'"></td>';
513  print '<td class="liste_titre">';
514  print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth100', 'code2', 1, 0, 1);
515  //print '<input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '">';
516  print '</td>';
517  print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_tvaintra" value="'.dol_escape_htmltag($search_tvaintra).'"></td>';
518  print '<td class="liste_titre"></td>';
519  print '<td class="liste_titre"></td>';
520  print '<td class="center liste_titre">';
521  $searchpicto = $form->showFilterButtons();
522  print $searchpicto;
523  print '</td>';
524  print "</tr>\n";
525 
526  print '<tr class="liste_titre">';
527  print_liste_field_titre("LineId", $_SERVER["PHP_SELF"], "l.rowid", "", $param, '', $sortfield, $sortorder);
528  print_liste_field_titre("Invoice", $_SERVER["PHP_SELF"], "f.ref", "", $param, '', $sortfield, $sortorder);
529  //print_liste_field_titre("RefSupplier", $_SERVER["PHP_SELF"], "f.ref_supplier", "", $param, '', $sortfield, $sortorder);
530  print_liste_field_titre("InvoiceLabel", $_SERVER["PHP_SELF"], "f.libelle", "", $param, '', $sortfield, $sortorder);
531  print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "f.datef, f.ref, l.rowid", "", $param, '', $sortfield, $sortorder, 'center ');
532  print_liste_field_titre("ProductRef", $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder);
533  //print_liste_field_titre("ProductLabel", $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder);
534  print_liste_field_titre("ProductDescription", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder);
535  print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 ');
536  print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "l.tva_tx", "", $param, '', $sortfield, $sortorder, 'right ', '', 1);
537  print_liste_field_titre("ThirdParty", $_SERVER["PHP_SELF"], "s.nom", "", $param, '', $sortfield, $sortorder);
538  print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder);
539  print_liste_field_titre("VATIntraShort", $_SERVER["PHP_SELF"], "s.tva_intra", "", $param, '', $sortfield, $sortorder);
540  print_liste_field_titre("DataUsedToSuggestAccount", '', '', '', '', '', '', '', 'nowraponall ');
541  print_liste_field_titre("AccountAccountingSuggest", '', '', '', '', '', '', '', 'center ');
542  $checkpicto = '';
543  if ($massactionbutton) {
544  $checkpicto = $form->showCheckAddButtons('checkforselect', 1);
545  }
546  print_liste_field_titre($checkpicto, '', '', '', '', '', '', '', 'center ');
547  print "</tr>\n";
548 
549  $thirdpartystatic = new Societe($db);
550  $facturefourn_static = new FactureFournisseur($db);
551  $facturefourn_static_det = new SupplierInvoiceLine($db);
552  $product_static = new Product($db);
553 
554 
555  $accountingaccount_codetotid_cache = array();
556 
557  while ($i < min($num_lines, $limit)) {
558  $objp = $db->fetch_object($result);
559 
560  // product_type: 0 = service, 1 = product
561  // if product does not exist we use the value of product_type provided in facturedet to define if this is a product or service
562  // issue : if we change product_type value in product DB it should differ from the value stored in facturedet DB !
563  $code_buy_l = '';
564  $code_buy_p = '';
565  $code_buy_t = '';
566 
567  $thirdpartystatic->id = $objp->socid;
568  $thirdpartystatic->name = $objp->name;
569  $thirdpartystatic->client = $objp->client;
570  $thirdpartystatic->fournisseur = $objp->fournisseur;
571  $thirdpartystatic->code_client = $objp->code_client;
572  $thirdpartystatic->code_compta_client = $objp->code_compta_client;
573  $thirdpartystatic->code_fournisseur = $objp->code_fournisseur;
574  $thirdpartystatic->code_compta_fournisseur = $objp->code_compta_fournisseur;
575  $thirdpartystatic->email = $objp->email;
576  $thirdpartystatic->country_code = $objp->country_code;
577  $thirdpartystatic->tva_intra = $objp->tva_intra;
578  $thirdpartystatic->code_compta_product = $objp->company_code_buy; // The accounting account for product stored on thirdparty object (for level3 suggestion)
579 
580  $product_static->ref = $objp->product_ref;
581  $product_static->id = $objp->product_id;
582  $product_static->type = $objp->type;
583  $product_static->label = $objp->product_label;
584  $product_static->status = $objp->status;
585  $product_static->status_buy = $objp->status_buy;
586  $product_static->accountancy_code_sell = $objp->code_sell;
587  $product_static->accountancy_code_sell_intra = $objp->code_sell_intra;
588  $product_static->accountancy_code_sell_export = $objp->code_sell_export;
589  $product_static->accountancy_code_buy = $objp->code_buy;
590  $product_static->accountancy_code_buy_intra = $objp->code_buy_intra;
591  $product_static->accountancy_code_buy_export = $objp->code_buy_export;
592  $product_static->tva_tx = $objp->tva_tx_prod;
593 
594  $facturefourn_static->ref = $objp->ref;
595  $facturefourn_static->id = $objp->facid;
596  $facturefourn_static->type = $objp->ftype;
597  $facturefourn_static->ref_supplier = $objp->ref_supplier;
598  $facturefourn_static->label = $objp->invoice_label;
599  $facturefourn_static->date = $db->jdate($objp->datef);
600  $facturefourn_static->fk_facture_source = $objp->fk_facture_source;
601 
602  $facturefourn_static_det->id = $objp->rowid;
603  $facturefourn_static_det->total_ht = $objp->total_ht;
604  $facturefourn_static_det->tva_tx = $objp->tva_tx_line;
605  $facturefourn_static_det->vat_src_code = $objp->vat_src_code;
606  $facturefourn_static_det->product_type = $objp->type_l;
607  $facturefourn_static_det->desc = $objp->description;
608 
609  $accountingAccountArray = array(
610  'dom'=>$objp->aarowid,
611  'intra'=>$objp->aarowid_intra,
612  'export'=>$objp->aarowid_export,
613  'thirdparty' =>$objp->aarowid_thirdparty);
614 
615  $code_buy_p_notset = '';
616  $code_buy_t_notset = '';
617 
618  $suggestedid = 0;
619 
620  $return=$accountingAccount->getAccountingCodeToBind($mysoc, $thirdpartystatic, $product_static, $facturefourn_static, $facturefourn_static_det, $accountingAccountArray, 'supplier');
621  if (!is_array($return) && $return<0) {
622  setEventMessage($accountingAccount->error, 'errors');
623  } else {
624  $suggestedid=$return['suggestedid'];
625  $suggestedaccountingaccountfor=$return['suggestedaccountingaccountfor'];
626  $suggestedaccountingaccountbydefaultfor=$return['suggestedaccountingaccountbydefaultfor'];
627  $code_buy_l=$return['code_l'];
628  $code_buy_p=$return['code_p'];
629  $code_buy_t=$return['code_t'];
630  }
631  //var_dump($return);
632 
633  if (!empty($code_buy_p)) {
634  // Value was defined previously
635  } else {
636  $code_buy_p_notset = 'color:orange';
637  }
638  if (empty($code_buy_l) && empty($code_buy_p)) {
639  $code_buy_p_notset = 'color:red';
640  }
641  /*if ($suggestedaccountingaccountfor == 'eecwithoutvatnumber' && empty($code_sell_p_notset)) {
642  $code_sell_p_notset = 'color:orange';
643  }*/
644 
645  // $code_buy_l is now default code of product/service
646  // $code_buy_p is now code of product/service
647  // $code_buy_t is now code of thirdparty
648  //var_dump($code_buy_l.' - '.$code_buy_p.' - '.$code_buy_t.' -> '.$suggestedid.' ('.$suggestedaccountingaccountbydefaultfor.' '.$suggestedaccountingaccountfor.')');
649 
650  print '<tr class="oddeven">';
651 
652  // Line id
653  print '<td>'.$facturefourn_static_det->id.'</td>';
654 
655  // Ref Invoice
656  print '<td class="nowraponall">'.$facturefourn_static->getNomUrl(1);
657  if ($objp->ref_supplier) {
658  print '<br><span class="opacitymedium small">'.dol_escape_htmltag($objp->ref_supplier).'</span>';
659  }
660  print '</td>';
661 
662  // Ref supplier invoice
663  /*print '<td class="tdoverflowmax100" title="'.dol_escape_htmltag($objp->ref_supplier).'">';
664  print $objp->ref_supplier;
665  print '</td>';*/
666 
667  // Supplier invoice label
668  print '<td class="tdoverflowmax100 small" title="'.dol_escape_htmltag($objp->invoice_label).'">';
669  print dol_escape_htmltag($objp->invoice_label);
670  print '</td>';
671 
672  // Date
673  print '<td class="center">'.dol_print_date($facturefourn_static->date, 'day').'</td>';
674 
675  // Ref Product
676  print '<td class="tdoverflowmax100">';
677  if ($product_static->id > 0) {
678  print $product_static->getNomUrl(1);
679  }
680  if ($product_static->label) {
681  print '<br><span class="opacitymedium small">'.dol_escape_htmltag($product_static->label).'</span>';
682  }
683  print '</td>';
684 
685  // Description of line
686  print '<td class="tdoverflowonsmartphone small">';
687  $text = dolGetFirstLineOfText(dol_string_nohtmltag($facturefourn_static_det->desc, 1));
688  $trunclength = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION) ? 32 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION;
689  print $form->textwithtooltip(dol_trunc($text, $trunclength), $facturefourn_static_det->desc);
690  print '</td>';
691 
692  print '<td class="right nowraponall amount">';
693  print price($objp->total_ht);
694  print '</td>';
695 
696  // Vat rate
697  $code_vat_differ = '';
698  //if ($objp->vat_tx_l != $objp->vat_tx_p && price2num($objp->vat_tx_p) && price2num($objp->vat_tx_l)) { // Note: having a vat rate of 0 is often the normal case when sells is intra b2b or to export
699  // $code_vat_differ = 'warning bold';
700  //}
701  print '<td class="right'.($code_vat_differ?' '.$code_vat_differ:'').'">';
702  print vatrate($facturefourn_static_det->tva_tx.($facturefourn_static_det->vat_src_code ? ' ('.$facturefourn_static_det->vat_src_code.')' : ''), false, 0, 0, 1);
703  print '</td>';
704 
705  // Thirdparty
706  print '<td class="tdoverflowmax100">'.$thirdpartystatic->getNomUrl(1, 'supplier').'</td>';
707 
708  // Country
709  $labelcountry = ($objp->country_code && ($langs->trans("Country".$objp->country_code) != "Country".$objp->country_code)) ? $langs->trans("Country".$objp->country_code) : $objp->country_label;
710  print '<td class="tdoverflowmax100" title="'.dol_escape_htmltag($labelcountry).'">';
711  print dol_escape_htmltag($labelcountry);
712  print '</td>';
713 
714  // VAT Num
715  print '<td class="tdoverflowmax80" title="'.dol_escape_htmltag($objp->tva_intra).'">'.dol_escape_htmltag($objp->tva_intra).'</td>';
716 
717  // Found accounts
718  print '<td class="small">';
719  $s = '1. '.(($facturefourn_static_det->product_type == 1) ? $langs->trans("DefaultForService") : $langs->trans("DefaultForProduct")).': ';
720  $shelp = ''; $ttype = 'help';
721  if ($suggestedaccountingaccountbydefaultfor == 'eec') {
722  $shelp .= $langs->trans("SaleEEC");
723  } elseif ($suggestedaccountingaccountbydefaultfor == 'eecwithvat') {
724  $shelp = $langs->trans("SaleEECWithVAT");
725  } elseif ($suggestedaccountingaccountbydefaultfor == 'eecwithoutvatnumber') {
726  $shelp = $langs->trans("SaleEECWithoutVATNumber");
727  $ttype = 'warning';
728  } elseif ($suggestedaccountingaccountbydefaultfor == 'export') {
729  $shelp .= $langs->trans("SaleExport");
730  }
731  $s .= ($code_buy_l > 0 ? length_accountg($code_buy_l) : '<span style="'.$code_buy_p_notset.'">'.$langs->trans("NotDefined").'</span>');
732  print $form->textwithpicto($s, $shelp, 1, $ttype, '', 0, 2, '', 1);
733  if ($product_static->id > 0) {
734  print '<br>';
735  $s = '2. '.(($facturefourn_static_det->product_type == 1) ? $langs->trans("ThisService") : $langs->trans("ThisProduct")).': ';
736  $shelp = ''; $ttype = 'help';
737  if ($suggestedaccountingaccountfor == 'eec') {
738  $shelp = $langs->trans("SaleEEC");
739  } elseif ($suggestedaccountingaccountfor == 'eecwithvat') {
740  $shelp = $langs->trans("SaleEECWithVAT");
741  } elseif ($suggestedaccountingaccountfor == 'eecwithoutvatnumber') {
742  $shelp = $langs->trans("SaleEECWithoutVATNumber");
743  $ttype = 'warning';
744  } elseif ($suggestedaccountingaccountfor == 'export') {
745  $shelp = $langs->trans("SaleExport");
746  }
747  $s .= (empty($code_buy_p) ? '<span style="'.$code_buy_p_notset.'">'.$langs->trans("NotDefined").'</span>' : length_accountg($code_buy_p));
748  print $form->textwithpicto($s, $shelp, 1, $ttype, '', 0, 2, '', 1);
749  } else {
750  print '<br>';
751  $s = '2. '.(($objp->type_l == 1) ? $langs->trans("ThisService") : $langs->trans("ThisProduct")).': ';
752  $shelp = '';
753  $s .= $langs->trans("NotDefined");
754  print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1);
755  }
756  if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) {
757  print '<br>';
758  $s = '3. '.(($facturefourn_static_det->product_type == 1) ? $langs->trans("ServiceForThisThirdparty") : $langs->trans("ProductForThisThirdparty")).': ';
759  $shelp = '';
760  $s .= ($code_buy_t > 0 ? length_accountg($code_buy_t) : '<span style="'.$code_buy_t_notset.'">'.$langs->trans("NotDefined").'</span>');
761  print $form->textwithpicto($s, $shelp, 1, 'help', '', 0, 2, '', 1);
762  }
763  print '</td>';
764 
765  // Suggested accounting account
766  print '<td>';
767  print $formaccounting->select_account(($default_account > 0 && $confirm === 'yes' && in_array($objp->rowid."_".$i, $toselect)) ? $default_account : $suggestedid, 'codeventil'.$facturefourn_static_det->id, 1, array(), 0, 0, 'codeventil maxwidth150 maxwidthonsmartphone', 'cachewithshowemptyone');
768  print '</td>';
769 
770  // Column with checkbox
771  print '<td class="center">';
772  $ischecked = 0;
773  if (!empty($suggestedid) && $suggestedaccountingaccountfor != '' && $suggestedaccountingaccountfor != 'eecwithoutvatnumber') {
774  $ischecked = 1;
775  }
776 
777  if (!empty($toselect)) {
778  $ischecked = 0;
779  if (in_array($objp->rowid."_".$i, $toselect)) {
780  $ischecked=1;
781  }
782  }
783 
784  print '<input type="checkbox" class="flat checkforselect checkforselect'.$facturefourn_static_det->id.'" name="toselect[]" value="'.$facturefourn_static_det->id."_".$i.'"'.($ischecked ? " checked" : "").'/>';
785  print '</td>';
786 
787  print '</tr>';
788  $i++;
789  }
790  if ($num_lines == 0) {
791  print '<tr><td colspan="14"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
792  }
793 
794  print '</table>';
795  print "</div>";
796 
797  print '</form>';
798 } else {
799  print $db->error();
800 }
801 if ($db->type == 'mysqli') {
802  $db->query("SET SQL_BIG_SELECTS=0"); // Enable MAX_JOIN_SIZE limitation
803 }
804 
805 // Add code to auto check the box when we select an account
806 print '<script type="text/javascript">
807 jQuery(document).ready(function() {
808  jQuery(".codeventil").change(function() {
809  var s=$(this).attr("id").replace("codeventil", "")
810  console.log(s+" "+$(this).val());
811  if ($(this).val() == -1) jQuery(".checkforselect"+s).prop("checked", false);
812  else jQuery(".checkforselect"+s).prop("checked", true);
813  });
814 });
815 </script>';
816 
817 // End of page
818 llxFooter();
819 $db->close();
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
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
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.
const TYPE_SITUATION
Situation invoice.
Class to manage suppliers invoices.
const TYPE_DEPOSIT
Deposit invoice.
const TYPE_CREDIT_NOTE
Credit note invoice.
const TYPE_REPLACEMENT
Replacement invoice.
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 products or services.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage line invoices.
getCountriesInEEC()
Return list of countries that are inside the EEC (European Economic Community) Note: Try to keep this...
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
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.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0)
Set event message in dol_events session object.
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...
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.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
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.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.