dolibarr 21.0.0-alpha
list.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2019 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2019 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2012 Marcos García <marcosgdf@gmail.com>
6 * Copyright (C) 2013-2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
7 * Copyright (C) 2015 Florian Henry <florian.henry@open-concept.pro>
8 * Copyright (C) 2016-2024 Josep Lluis Amador <joseplluis@lliuretic.cat>
9 * Copyright (C) 2016 Ferran Marcet <fmarcet@2byte.es>
10 * Copyright (C) 2017 Rui Strecht <rui.strecht@aliartalentos.com>
11 * Copyright (C) 2017 Juanjo Menent <jmenent@2byte.es>
12 * Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
13 * Copyright (C) 2020 Open-Dsi <support@open-dsi.fr>
14 * Copyright (C) 2021-2024 Frédéric France <frederic.france@free.fr>
15 * Copyright (C) 2022 Anthony Berton <anthony.berton@bb2a.fr>
16 * Copyright (C) 2023 William Mead <william.mead@manchenumerique.fr>
17 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
18 * Copyright (C) 2024 Benjamin Falière <benjamin.faliere@altairis.fr>
19 * Copyright (C) 2024 Nick Fragoulis
20 *
21 * This program is free software; you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation; either version 3 of the License, or
24 * (at your option) any later version.
25 *
26 * This program is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 * GNU General Public License for more details.
30 *
31 * You should have received a copy of the GNU General Public License
32 * along with this program. If not, see <https://www.gnu.org/licenses/>.
33 */
34
41// Load Dolibarr environment
42require_once '../main.inc.php';
43include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
44require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
45require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
46require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
47require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
48require_once DOL_DOCUMENT_ROOT.'/societe/class/client.class.php';
49if (isModEnabled('category')) {
50 require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
51 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcategory.class.php';
52}
53
54// Load translation files required by the page
55$langs->loadLangs(array("companies", "commercial", "customers", "suppliers", "bills", "compta", "categories", "cashdesk"));
56
57
58// Get parameters
59$action = GETPOST('action', 'aZ09');
60$massaction = GETPOST('massaction', 'alpha');
61$show_files = GETPOSTINT('show_files');
62$confirm = GETPOST('confirm', 'alpha');
63$toselect = GETPOST('toselect', 'array');
64$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'thirdpartylist';
65$optioncss = GETPOST('optioncss', 'alpha');
66if ($contextpage == 'poslist') {
67 $optioncss = 'print';
68}
69$mode = GETPOST("mode", 'alpha');
70
71// search fields
72$search_all = trim(GETPOST('search_all', 'alphanohtml') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml'));
73$search_cti = preg_replace('/^0+/', '', preg_replace('/[^0-9]/', '', GETPOST('search_cti', 'alphanohtml'))); // Phone number without any special chars
74
75$search_id = GETPOST("search_id", 'int');
76$search_nom = trim(GETPOST("search_nom", 'restricthtml'));
77$search_alias = trim(GETPOST("search_alias", 'restricthtml'));
78$search_nom_only = trim(GETPOST("search_nom_only", 'restricthtml'));
79$search_barcode = trim(GETPOST("search_barcode", 'alpha'));
80$search_customer_code = trim(GETPOST('search_customer_code', 'alpha'));
81$search_supplier_code = trim(GETPOST('search_supplier_code', 'alpha'));
82$search_account_customer_code = trim(GETPOST('search_account_customer_code', 'alpha'));
83$search_account_supplier_code = trim(GETPOST('search_account_supplier_code', 'alpha'));
84$search_address = trim(GETPOST('search_address', 'alpha'));
85$search_zip = trim(GETPOST("search_zip", 'alpha'));
86$search_town = trim(GETPOST("search_town", 'alpha'));
87$search_state = trim(GETPOST("search_state", 'alpha'));
88$search_region = trim(GETPOST("search_region", 'alpha'));
89$search_email = trim(GETPOST('search_email', 'alpha'));
90$search_phone = trim(GETPOST('search_phone', 'alpha'));
91$search_phone_mobile = trim(GETPOST('search_phone_mobile', 'alpha'));
92$search_fax = trim(GETPOST('search_fax', 'alpha'));
93$search_url = trim(GETPOST('search_url', 'alpha'));
94$search_idprof1 = trim(GETPOST('search_idprof1', 'alpha'));
95$search_idprof2 = trim(GETPOST('search_idprof2', 'alpha'));
96$search_idprof3 = trim(GETPOST('search_idprof3', 'alpha'));
97$search_idprof4 = trim(GETPOST('search_idprof4', 'alpha'));
98$search_idprof5 = trim(GETPOST('search_idprof5', 'alpha'));
99$search_idprof6 = trim(GETPOST('search_idprof6', 'alpha'));
100$search_vat = trim(GETPOST('search_vat', 'alpha'));
101$search_sale = GETPOSTINT("search_sale");
102$search_categ_cus = GETPOSTINT("search_categ_cus");
103$search_categ_sup = GETPOSTINT("search_categ_sup");
104$searchCategoryCustomerOperator = GETPOSTINT('search_category_customer_operator');
105$searchCategorySupplierOperator = GETPOSTINT('search_category_supplier_operator');
106if (GETPOSTISSET('formfilteraction')) {
107 $searchCategoryCustomerOperator = GETPOST('search_category_customer_operator');
108 $searchCategorySupplierOperator = GETPOST('search_category_supplier_operator');
109} elseif (getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT')) {
110 $searchCategoryCustomerOperator = getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT');
111 $searchCategorySupplierOperator = getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT');
112}
113$searchCategoryCustomerList = GETPOST('search_category_customer_list', 'array');
114if (!empty($search_categ_cus) && empty($searchCategoryCustomerList)) {
115 $searchCategoryCustomerList = array($search_categ_cus);
116}
117$searchCategorySupplierList = GETPOST('search_category_supplier_list', 'array');
118if (!empty($search_categ_sup) && empty($searchCategorySupplierList)) {
119 $searchCategorySupplierList = array($search_categ_sup);
120}
121$search_country = GETPOST("search_country", 'aZ09');
122$search_type_thirdparty = GETPOST("search_type_thirdparty", 'intcomma');
123$search_price_level = GETPOST('search_price_level', 'int');
124$search_staff = GETPOST("search_staff", 'int');
125$search_legalform = GETPOST("search_legalform", 'int');
126$search_status = GETPOST("search_status", 'intcomma');
127$search_type = GETPOST('search_type', 'alpha');
128$search_level = GETPOST("search_level", "array:alpha");
129$search_stcomm = GETPOST('search_stcomm', "array:int");
130$search_import_key = trim(GETPOST("search_import_key", "alpha"));
131$search_parent_name = trim(GETPOST('search_parent_name', 'alpha'));
132
133$search_date_creation_startmonth = GETPOSTINT('search_date_creation_startmonth');
134$search_date_creation_startyear = GETPOSTINT('search_date_creation_startyear');
135$search_date_creation_startday = GETPOSTINT('search_date_creation_startday');
136$search_date_creation_start = dol_mktime(0, 0, 0, $search_date_creation_startmonth, $search_date_creation_startday, $search_date_creation_startyear); // Use tzserver
137$search_date_creation_endmonth = GETPOSTINT('search_date_creation_endmonth');
138$search_date_creation_endyear = GETPOSTINT('search_date_creation_endyear');
139$search_date_creation_endday = GETPOSTINT('search_date_creation_endday');
140$search_date_creation_end = dol_mktime(23, 59, 59, $search_date_creation_endmonth, $search_date_creation_endday, $search_date_creation_endyear); // Use tzserver
141
142$search_date_modif_startmonth = GETPOSTINT('search_date_modif_startmonth');
143$search_date_modif_startyear = GETPOSTINT('search_date_modif_startyear');
144$search_date_modif_startday = GETPOSTINT('search_date_modif_startday');
145$search_date_modif_start = dol_mktime(0, 0, 0, $search_date_modif_startmonth, $search_date_modif_startday, $search_date_modif_startyear); // Use tzserver
146$search_date_modif_endmonth = GETPOSTINT('search_date_modif_endmonth');
147$search_date_modif_endyear = GETPOSTINT('search_date_modif_endyear');
148$search_date_modif_endday = GETPOSTINT('search_date_modif_endday');
149$search_date_modif_end = dol_mktime(23, 59, 59, $search_date_modif_endmonth, $search_date_modif_endday, $search_date_modif_endyear); // Use tzserver
150
151$type = GETPOST('type', 'alpha');
152$place = GETPOST('place', 'aZ09') ? GETPOST('place', 'aZ09') : '0'; // $place is string id of table for Bar or Restaurant
153
154$diroutputmassaction = $conf->societe->dir_output.'/temp/massgeneration/'.$user->id;
155
156// Load variable for pagination
157$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
158$sortfield = GETPOST('sortfield', 'aZ09comma');
159$sortorder = GETPOST('sortorder', 'aZ09comma');
160$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
161if (!$sortorder) {
162 $sortorder = "ASC";
163}
164if (!$sortfield) {
165 $sortfield = "s.nom";
166}
167if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
168 // If $page is not defined, or '' or -1 or if we click on clear filters
169 $page = 0;
170}
171$offset = $limit * $page;
172$pageprev = $page - 1;
173$pagenext = $page + 1;
174
175if ($type == 'c') {
176 if (empty($contextpage) || $contextpage == 'thirdpartylist') {
177 $contextpage = 'customerlist';
178 }
179 if ($search_type == '') {
180 $search_type = '1,3';
181 }
182}
183if ($type == 'p') {
184 if (empty($contextpage) || $contextpage == 'thirdpartylist') {
185 $contextpage = 'prospectlist';
186 }
187 if ($search_type == '') {
188 $search_type = '2,3';
189 }
190}
191if ($type == 't') {
192 if (empty($contextpage) || $contextpage == 'poslist') {
193 $contextpage = 'poslist';
194 }
195 if ($search_type == '') {
196 $search_type = '1,2,3';
197 }
198}
199if ($type == 'f') {
200 if (empty($contextpage) || $contextpage == 'thirdpartylist') {
201 $contextpage = 'supplierlist';
202 }
203 if ($search_type == '') {
204 $search_type = '4';
205 }
206}
207// Initialize a technical objects to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
208$object = new Societe($db);
209$extrafields = new ExtraFields($db);
210$hookmanager->initHooks(array($contextpage, 'thirdpartylist'));
211
212// Fetch optionals attributes and labels
213$extrafields->fetch_name_optionals_label($object->table_element);
214
215$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
216
217// List of fields to search into when doing a "search in all"
218$fieldstosearchall = array(
219 's.nom' => "ThirdPartyName",
220 's.name_alias' => "AliasNameShort",
221 's.code_client' => "CustomerCode",
222 's.code_fournisseur' => "SupplierCode",
223 's.code_compta' => "CustomerAccountancyCodeShort",
224 's.code_compta_fournisseur' => "SupplierAccountancyCodeShort",
225 's.zip' => "Zip",
226 's.town' => "Town",
227 's.email' => "EMail",
228 's.url' => "URL",
229 's.tva_intra' => "VATIntra",
230 's.siren' => "ProfId1",
231 's.siret' => "ProfId2",
232 's.ape' => "ProfId3",
233 's.phone' => "Phone",
234 's.phone_mobile' => "PhoneMobile",
235 's.fax' => "Fax",
236);
237if (($tmp = $langs->transnoentities("ProfId4".$mysoc->country_code)) && $tmp != "ProfId4".$mysoc->country_code && $tmp != '-') {
238 $fieldstosearchall['s.idprof4'] = 'ProfId4';
239}
240if (($tmp = $langs->transnoentities("ProfId5".$mysoc->country_code)) && $tmp != "ProfId5".$mysoc->country_code && $tmp != '-') {
241 $fieldstosearchall['s.idprof5'] = 'ProfId5';
242}
243if (($tmp = $langs->transnoentities("ProfId6".$mysoc->country_code)) && $tmp != "ProfId6".$mysoc->country_code && $tmp != '-') {
244 $fieldstosearchall['s.idprof6'] = 'ProfId6';
245}
246if (isModEnabled('barcode')) {
247 $fieldstosearchall['s.barcode'] = 'Gencod';
248}
249// Personalized search criteria. Example: $conf->global->THIRDPARTY_QUICKSEARCH_ON_FIELDS = 's.nom=ThirdPartyName;s.name_alias=AliasNameShort;s.code_client=CustomerCode'
250if (getDolGlobalString('THIRDPARTY_QUICKSEARCH_ON_FIELDS')) {
251 $fieldstosearchall = dolExplodeIntoArray($conf->global->THIRDPARTY_QUICKSEARCH_ON_FIELDS);
252}
253
254
255// Define list of fields to show into list
256$checkedcustomercode = (in_array($contextpage, array('thirdpartylist', 'customerlist', 'prospectlist', 'poslist')) ? 1 : 0);
257$checkedsuppliercode = (in_array($contextpage, array('supplierlist')) ? 1 : 0);
258$checkedcustomeraccountcode = (in_array($contextpage, array('customerlist')) ? 1 : 0);
259$checkedsupplieraccountcode = (in_array($contextpage, array('supplierlist')) ? 1 : 0);
260$checkedtypetiers = 1;
261$checkedprofid1 = 0;
262$checkedprofid2 = 0;
263$checkedprofid3 = 0;
264$checkedprofid4 = 0;
265$checkedprofid5 = 0;
266$checkedprofid6 = 0;
267//$checkedprofid4=((($tmp = $langs->transnoentities("ProfId4".$mysoc->country_code)) && $tmp != "ProfId4".$mysoc->country_code && $tmp != '-') ? 1 : 0);
268//$checkedprofid5=((($tmp = $langs->transnoentities("ProfId5".$mysoc->country_code)) && $tmp != "ProfId5".$mysoc->country_code && $tmp != '-') ? 1 : 0);
269//$checkedprofid6=((($tmp = $langs->transnoentities("ProfId6".$mysoc->country_code)) && $tmp != "ProfId6".$mysoc->country_code && $tmp != '-') ? 1 : 0);
270$checkprospectlevel = (in_array($contextpage, array('prospectlist')) ? 1 : 0);
271$checkstcomm = (in_array($contextpage, array('prospectlist')) ? 1 : 0);
272$arrayfields = array(
273 's.rowid' => array('label' => "TechnicalID", 'position' => 1, 'checked' => -1, 'enabled' => 1),
274 's.nom' => array('label' => "ThirdPartyName", 'position' => 2, 'checked' => 1),
275 's.name_alias' => array('label' => "AliasNameShort", 'position' => 3, 'checked' => 1),
276 's.barcode' => array('label' => "Gencod", 'position' => 5, 'checked' => 1, 'enabled' => (isModEnabled('barcode'))),
277 's.code_client' => array('label' => "CustomerCodeShort", 'position' => 10, 'checked' => $checkedcustomercode),
278 's.code_fournisseur' => array('label' => "SupplierCodeShort", 'position' => 11, 'checked' => $checkedsuppliercode, 'enabled' => (isModEnabled("supplier_order") || isModEnabled("supplier_invoice"))),
279 's.code_compta' => array('label' => "CustomerAccountancyCodeShort", 'position' => 13, 'checked' => $checkedcustomeraccountcode),
280 's.code_compta_fournisseur' => array('label' => "SupplierAccountancyCodeShort", 'position' => 14, 'checked' => $checkedsupplieraccountcode, 'enabled' => (isModEnabled("supplier_order") || isModEnabled("supplier_invoice"))),
281 's.address' => array('label' => "Address", 'position' => 19, 'checked' => 0),
282 's.zip' => array('label' => "Zip", 'position' => 20, 'checked' => 1),
283 's.town' => array('label' => "Town", 'position' => 21, 'checked' => 0),
284 'state.nom' => array('label' => "State", 'position' => 22, 'checked' => 0),
285 'region.nom' => array('label' => "Region", 'position' => 23, 'checked' => 0),
286 'country.code_iso' => array('label' => "Country", 'position' => 24, 'checked' => 0),
287 's.email' => array('label' => "Email", 'position' => 25, 'checked' => 0),
288 's.url' => array('label' => "Url", 'position' => 26, 'checked' => 0),
289 's.phone' => array('label' => "Phone", 'position' => 27, 'checked' => 1),
290 's.fax' => array('label' => "Fax", 'position' => 28, 'checked' => 0),
291 'typent.code' => array('label' => "ThirdPartyType", 'position' => 29, 'checked' => $checkedtypetiers),
292 'staff.code' => array('label' => "Workforce", 'position' => 31, 'checked' => 0),
293 'legalform.code' => array('label' => 'JuridicalStatus', 'position' => 32, 'checked' => 0),
294 's.phone_mobile' => array('label' => "PhoneMobile", 'position' => 35, 'checked' => 0),
295 's.siren' => array('label' => "ProfId1Short", 'position' => 40, 'checked' => $checkedprofid1),
296 's.siret' => array('label' => "ProfId2Short", 'position' => 41, 'checked' => $checkedprofid2),
297 's.ape' => array('label' => "ProfId3Short", 'position' => 42, 'checked' => $checkedprofid3),
298 's.idprof4' => array('label' => "ProfId4Short", 'position' => 43, 'checked' => $checkedprofid4),
299 's.idprof5' => array('label' => "ProfId5Short", 'position' => 44, 'checked' => $checkedprofid5),
300 's.idprof6' => array('label' => "ProfId6Short", 'position' => 45, 'checked' => $checkedprofid6),
301 's.tva_intra' => array('label' => "VATIntraShort", 'position' => 50, 'checked' => 0),
302 'customerorsupplier' => array('label' => 'NatureOfThirdParty', 'position' => 61, 'checked' => 1),
303 's.fk_prospectlevel' => array('label' => "ProspectLevel", 'position' => 62, 'checked' => $checkprospectlevel),
304 's.fk_stcomm' => array('label' => "StatusProsp", 'position' => 63, 'checked' => $checkstcomm),
305 's2.nom' => array('label' => 'ParentCompany', 'position' => 64, 'checked' => 0),
306 's.datec' => array('label' => "DateCreation", 'checked' => 0, 'position' => 500),
307 's.tms' => array('label' => "DateModificationShort", 'checked' => 0, 'position' => 500),
308 's.note_public' => array('label' => 'NotePublic', 'checked' => 0, 'position' => 520, 'enabled' => (!getDolGlobalInt('MAIN_LIST_HIDE_PUBLIC_NOTES'))),
309 's.note_private' => array('label' => 'NotePrivate', 'checked' => 0, 'position' => 521, 'enabled' => (!getDolGlobalInt('MAIN_LIST_HIDE_PRIVATE_NOTES'))),
310 's.status' => array('label' => "Status", 'checked' => 1, 'position' => 1000),
311 's.import_key' => array('label' => "ImportId", 'checked' => 0, 'position' => 1100),
312);
313if (getDolGlobalString('PRODUIT_MULTIPRICES') || getDolGlobalString('PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES') || getDolGlobalString('PRODUIT_CUSTOMER_PRICES_AND_MULTIPRICES')) {
314 $arrayfields['s.price_level'] = array('label' => "PriceLevel", 'position' => 30, 'checked' => 0);
315}
316
317// Add non object fields to fields for list
318$arrayfields['sales.representative'] = array('label' => $langs->trans("SalesRepresentatives"), 'checked' => 1, 'position' => 12);
319
320// Extra fields
321include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
322
323$object->fields = dol_sort_array($object->fields, 'position');
324$arrayfields = dol_sort_array($arrayfields, 'position');
325'@phan-var-force array<string,array{label:string,checked?:int<0,1>,position?:int,help?:string}> $arrayfields'; // dol_sort_array looses type for Phan
326
327// Security check
328$socid = GETPOSTINT('socid');
329if ($user->socid) {
330 $socid = $user->socid;
331}
332$result = restrictedArea($user, 'societe', $socid, '');
333
334$permissiontoadd = $user->hasRight('societe', 'lire');
335
336
337/*
338 * Actions
339 */
340
341if ($action == "change" && $user->hasRight('takepos', 'run')) { // Change customer for TakePOS
342 $idcustomer = GETPOSTINT('idcustomer');
343
344 // Check if draft invoice already exists, if not create it
345 $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."facture where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' AND entity IN (".getEntity('invoice').")";
346 $result = $db->query($sql);
347 $num_lines = $db->num_rows($result);
348 if ($num_lines == 0) {
349 require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
350 $invoice = new Facture($db);
351 $constforthirdpartyid = 'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"];
352 $invoice->socid = getDolGlobalInt($constforthirdpartyid);
353 $invoice->date = dol_now();
354 $invoice->module_source = 'takepos';
355 $invoice->pos_source = $_SESSION["takeposterminal"];
356 $placeid = $invoice->create($user);
357 $sql = "UPDATE ".MAIN_DB_PREFIX."facture set ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' where rowid = ".((int) $placeid);
358 $db->query($sql);
359 }
360
361 $sql = "UPDATE ".MAIN_DB_PREFIX."facture set fk_soc=".((int) $idcustomer)." where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")'";
362 $resql = $db->query($sql); ?>
363 <script>
364 console.log("Reload page invoice.php with place=<?php print $place; ?>");
365 parent.$("#poslines").load("invoice.php?place=<?php print $place; ?>", function() {
366 //parent.$("#poslines").scrollTop(parent.$("#poslines")[0].scrollHeight);
367 <?php if (!$resql) { ?>
368 alert('Error failed to update customer on draft invoice.');
369 <?php } ?>
370 parent.$.colorbox.close(); /* Close the popup */
371 });
372 </script>
373 <?php
374 exit;
375}
376
377if (GETPOST('cancel', 'alpha')) {
378 $action = 'list';
379 $massaction = '';
380}
381if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
382 $massaction = '';
383}
384
385$parameters = array('arrayfields' => &$arrayfields);
386$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
387if ($reshook < 0) {
388 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
389}
390
391if (empty($reshook)) {
392 // Selection of new fields
393 include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
394
395 // Purge search criteria
396 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
397 $search_id = '';
398 $search_nom = '';
399 $search_alias = '';
400 $search_categ_cus = 0;
401 $search_categ_sup = 0;
402 $searchCategoryCustomerOperator = 0;
403 $searchCategorySupplierOperator = 0;
404 $searchCategoryCustomerList = array();
405 $searchCategorySupplierList = array();
406 $search_sale = '';
407 $search_barcode = "";
408 $search_customer_code = '';
409 $search_supplier_code = '';
410 $search_account_customer_code = '';
411 $search_account_supplier_code = '';
412 $search_address = '';
413 $search_zip = "";
414 $search_town = "";
415 $search_state = "";
416 $search_region = "";
417 $search_country = '';
418 $search_email = '';
419 $search_phone = '';
420 $search_phone_mobile = '';
421 $search_fax = '';
422 $search_url = '';
423 $search_idprof1 = '';
424 $search_idprof2 = '';
425 $search_idprof3 = '';
426 $search_idprof4 = '';
427 $search_idprof5 = '';
428 $search_idprof6 = '';
429 $search_vat = '';
430 $search_type = '';
431 $search_price_level = '';
432 $search_type_thirdparty = '';
433 $search_staff = '';
434 $search_legalform = '';
435 $search_date_creation_startmonth = "";
436 $search_date_creation_startyear = "";
437 $search_date_creation_startday = "";
438 $search_date_creation_start = "";
439 $search_date_creation_endmonth = "";
440 $search_date_creation_endyear = "";
441 $search_date_creation_endday = "";
442 $search_date_creation_end = "";
443 $search_date_modif_startmonth = "";
444 $search_date_modif_startyear = "";
445 $search_date_modif_startday = "";
446 $search_date_modif_start = "";
447 $search_date_modif_endmonth = "";
448 $search_date_modif_endyear = "";
449 $search_date_modif_endday = "";
450 $search_date_modif_end = "";
451 $search_status = -1;
452 $search_stcomm = '';
453 $search_level = '';
454 $search_parent_name = '';
455 $search_import_key = '';
456
457 $search_all = '';
458 $toselect = array();
459 $search_array_options = array();
460 }
461
462 // Mass actions
463 $objectclass = 'Societe';
464 $objectlabel = 'ThirdParty';
465 $permissiontoread = $user->hasRight('societe', 'lire');
466 $permissiontodelete = $user->hasRight('societe', 'supprimer');
467 $permissiontoadd = $user->hasRight("societe", "creer");
468 $uploaddir = $conf->societe->dir_output;
469 include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
470
471 if ($action == 'setstcomm' && $permissiontoadd) {
472 $object = new Client($db);
473 $result = $object->fetch(GETPOST('stcommsocid'));
474 $object->stcomm_id = dol_getIdFromCode($db, GETPOST('stcomm', 'alpha'), 'c_stcomm');
475 $result = $object->update($object->id, $user);
476 if ($result < 0) {
477 setEventMessages($object->error, $object->errors, 'errors');
478 }
479
480 $action = '';
481 }
482}
483
484if ($search_status == '' && empty($search_all)) {
485 $search_status = 1; // display active thirdparty only by default
486}
487
488
489
490/*
491 * View
492 */
493
494/*
495 REM: Rules on permissions to see thirdparties
496 Internal or External user + No permission to see customers => See nothing
497 Internal user socid=0 + Permission to see ALL customers => See all thirdparties
498 Internal user socid=0 + No permission to see ALL customers => See only thirdparties linked to user that are sale representative
499 External user socid=x + Permission to see ALL customers => Can see only himself
500 External user socid=x + No permission to see ALL customers => Can see only himself
501 */
502
503$form = new Form($db);
504$formother = new FormOther($db);
505$companystatic = new Societe($db);
506$companyparent = new Societe($db);
507$formcompany = new FormCompany($db);
508$prospectstatic = new Client($db);
509$prospectstatic->client = 2;
510$prospectstatic->loadCacheOfProspStatus();
511
512$now = dol_now();
513
514$title = $langs->trans("ThirdParties");
515if ($type == 'c' && (empty($search_type) || ($search_type == '1,3'))) {
516 $title = $langs->trans("Customers");
517}
518if ($type == 'p' && (empty($search_type) || ($search_type == '2,3'))) {
519 $title = $langs->trans("Prospects");
520}
521if ($type == 'f' && (empty($search_type) || ($search_type == '4'))) {
522 $title = $langs->trans("Suppliers");
523}
524$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas';
525
526
527// Select every potentials, and note each potentials which fit in search parameters
528$tab_level = array();
529$sql = "SELECT code, label, sortorder";
530$sql .= " FROM ".MAIN_DB_PREFIX."c_prospectlevel";
531$sql .= " WHERE active > 0";
532$sql .= " ORDER BY sortorder";
533$resql = $db->query($sql);
534if ($resql) {
535 while ($obj = $db->fetch_object($resql)) {
536 // Compute level text
537 $level = $langs->trans($obj->code);
538 if ($level == $obj->code) {
539 $level = $langs->trans($obj->label);
540 }
541 $tab_level[$obj->code] = $level;
542 }
543} else {
544 dol_print_error($db);
545}
546
547// Build and execute select
548// --------------------------------------------------------------------
549$sql = "SELECT s.rowid, s.nom as name, s.name_alias, s.barcode, s.address, s.town, s.zip, s.datec, s.code_client, s.code_fournisseur, s.logo,";
550$sql .= " s.entity,";
551$sql .= " st.libelle as stcomm, st.picto as stcomm_picto, s.fk_stcomm as stcomm_id, s.fk_prospectlevel, s.prefix_comm, s.client, s.fournisseur, s.canvas, s.status as status, s.note_private, s.note_public,";
552$sql .= " s.email, s.phone, s.phone_mobile, s.fax, s.url, s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4 as idprof4, s.idprof5 as idprof5, s.idprof6 as idprof6, s.tva_intra, s.fk_pays,";
553$sql .= " s.tms as date_modification, s.datec as date_creation, s.import_key,";
554$sql .= " s.code_compta, s.code_compta_fournisseur, s.parent as fk_parent,s.price_level,";
555$sql .= " s2.nom as name2,";
556$sql .= " typent.code as typent_code,";
557$sql .= " staff.code as staff_code,";
558$sql .= " s.fk_forme_juridique as legalform_code,";
559$sql .= " country.code as country_code, country.label as country_label,";
560$sql .= " state.code_departement as state_code, state.nom as state_name,";
561$sql .= " region.code_region as region_code, region.nom as region_name";
562// Add fields from extrafields
563if (!empty($extrafields->attributes[$object->table_element]['label'])) {
564 foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
565 $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key." as options_".$key : '');
566 }
567}
568// Add fields from hooks
569$parameters = array();
570$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
571$sql .= $hookmanager->resPrint;
572$sql = preg_replace('/,\s*$/', '', $sql);
573//$sql .= ", COUNT(rc.rowid) as anotherfield";
574
575$sqlfields = $sql; // $sql fields to remove for count total
576
577$sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
578$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s2 ON s.parent = s2.rowid";
579if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
580 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (s.rowid = ef.fk_object)";
581}
582
583$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)";
584$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)";
585$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_effectif as staff on (staff.id = s.fk_effectif)";
586//$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_forme_juridique as legalform on (legalform.rowid = s.fk_forme_juridique)";
587$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)";
588$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_regions as region on (region.code_region = state.fk_region)";
589$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."c_stcomm as st ON s.fk_stcomm = st.id";
590// Add table from hooks
591$parameters = array();
592$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
593$sql .= $hookmanager->resPrint;
594$sql .= " WHERE s.entity IN (".getEntity('societe').")";
595if (!$user->hasRight('fournisseur', 'lire')) {
596 $sql .= " AND (s.fournisseur <> 1 OR s.client <> 0)"; // client=0, fournisseur=0 must be visible
597}
598// Search on sale representative
599if ($search_sale && $search_sale != '-1') {
600 if ($search_sale == -2) {
601 $sql .= " AND NOT EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc WHERE sc.fk_soc = s.rowid)";
602 } elseif ($search_sale > 0) {
603 $sql .= " AND EXISTS (SELECT sc.fk_soc FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc WHERE sc.fk_soc = s.rowid AND sc.fk_user = ".((int) $search_sale).")";
604 }
605}
606
607// Search for tag/category ($searchCategoryCustomerList is an array of ID)
608if (!empty($searchCategoryCustomerList)) {
609 $searchCategoryCustomerSqlList = array();
610 $listofcategoryid = '';
611 foreach ($searchCategoryCustomerList as $searchCategoryCustomer) {
612 if (intval($searchCategoryCustomer) == -2) {
613 $searchCategoryCustomerSqlList[] = "NOT EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_societe as ck WHERE s.rowid = ck.fk_soc)";
614 } elseif (intval($searchCategoryCustomer) > 0) {
615 if ($searchCategoryCustomerOperator == 0) {
616 $searchCategoryCustomerSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_societe as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie = ".((int) $searchCategoryCustomer).")";
617 } else {
618 $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategoryCustomer);
619 }
620 }
621 }
622 if ($listofcategoryid) {
623 $searchCategoryCustomerSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_societe as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))";
624 }
625 if ($searchCategoryCustomerOperator == 1) {
626 if (!empty($searchCategoryCustomerSqlList)) {
627 $sql .= " AND (".implode(' OR ', $searchCategoryCustomerSqlList).")";
628 }
629 } else {
630 if (!empty($searchCategoryCustomerSqlList)) {
631 $sql .= " AND (".implode(' AND ', $searchCategoryCustomerSqlList).")";
632 }
633 }
634}
635
636// Search for tag/category ($searchCategorySupplierList is an array of ID)
637if (!empty($searchCategorySupplierList)) {
638 $searchCategorySupplierSqlList = array();
639 $listofcategoryid = '';
640 foreach ($searchCategorySupplierList as $searchCategorySupplier) {
641 if (intval($searchCategorySupplier) == -2) {
642 $searchCategorySupplierSqlList[] = "NOT EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_fournisseur as ck WHERE s.rowid = ck.fk_soc)";
643 } elseif (intval($searchCategorySupplier) > 0) {
644 if ($searchCategorySupplierOperator == 0) {
645 $searchCategorySupplierSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_fournisseur as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie = ".((int) $searchCategorySupplier).")";
646 } else {
647 $listofcategoryid .= ($listofcategoryid ? ', ' : '') .((int) $searchCategorySupplier);
648 }
649 }
650 }
651 if ($listofcategoryid) {
652 $searchCategorySupplierSqlList[] = " EXISTS (SELECT ck.fk_soc FROM ".MAIN_DB_PREFIX."categorie_fournisseur as ck WHERE s.rowid = ck.fk_soc AND ck.fk_categorie IN (".$db->sanitize($listofcategoryid)."))";
653 }
654 if ($searchCategorySupplierOperator == 1) {
655 if (!empty($searchCategorySupplierSqlList)) {
656 $sql .= " AND (".implode(' OR ', $searchCategorySupplierSqlList).")";
657 }
658 } else {
659 if (!empty($searchCategorySupplierSqlList)) {
660 $sql .= " AND (".implode(' AND ', $searchCategorySupplierSqlList).")";
661 }
662 }
663}
664if ($search_all) {
665 $sql .= natural_search(array_keys($fieldstosearchall), $search_all);
666}
667if (strlen($search_cti)) {
668 $sql .= natural_search('s.phone', $search_cti);
669}
670if ($search_id > 0) {
671 $sql .= natural_search("s.rowid", $search_id, 1);
672}
673if (empty($arrayfields['s.name_alias']['checked']) && $search_nom) {
674 $sql .= natural_search(array("s.nom", "s.name_alias"), $search_nom);
675} else {
676 if ($search_nom) {
677 $sql .= natural_search("s.nom", $search_nom);
678 }
679
680 if ($search_alias) {
681 $sql .= natural_search("s.name_alias", $search_alias);
682 }
683}
684if ($search_nom_only) {
685 $sql .= natural_search("s.nom", $search_nom_only);
686}
687if ($search_customer_code) {
688 $sql .= natural_search("s.code_client", $search_customer_code);
689}
690if ($search_supplier_code) {
691 $sql .= natural_search("s.code_fournisseur", $search_supplier_code);
692}
693if ($search_account_customer_code) {
694 $sql .= natural_search("s.code_compta", $search_account_customer_code);
695}
696if ($search_account_supplier_code) {
697 $sql .= natural_search("s.code_compta_fournisseur", $search_account_supplier_code);
698}
699if ($search_address) {
700 $sql .= natural_search('s.address', $search_address);
701}
702if (strlen($search_zip)) {
703 $sql .= natural_search("s.zip", $search_zip);
704}
705if ($search_town) {
706 $sql .= natural_search("s.town", $search_town);
707}
708if ($search_state) {
709 $sql .= natural_search("state.nom", $search_state);
710}
711if ($search_region) {
712 $sql .= natural_search("region.nom", $search_region);
713}
714if ($search_country && $search_country != '-1') {
715 $sql .= " AND s.fk_pays IN (".$db->sanitize($search_country).')';
716}
717if ($search_email) {
718 $sql .= natural_search("s.email", $search_email);
719}
720if (strlen($search_phone)) {
721 $sql .= natural_search("s.phone", $search_phone);
722}
723if (strlen($search_phone_mobile)) {
724 $sql .= natural_search("s.phone_mobile", $search_phone_mobile);
725}
726if (strlen($search_fax)) {
727 $sql .= natural_search("s.fax", $search_fax);
728}
729if ($search_url) {
730 $sql .= natural_search("s.url", $search_url);
731}
732if (strlen($search_idprof1)) {
733 $sql .= natural_search("s.siren", $search_idprof1);
734}
735if (strlen($search_idprof2)) {
736 $sql .= natural_search("s.siret", $search_idprof2);
737}
738if (strlen($search_idprof3)) {
739 $sql .= natural_search("s.ape", $search_idprof3);
740}
741if (strlen($search_idprof4)) {
742 $sql .= natural_search("s.idprof4", $search_idprof4);
743}
744if (strlen($search_idprof5)) {
745 $sql .= natural_search("s.idprof5", $search_idprof5);
746}
747if (strlen($search_idprof6)) {
748 $sql .= natural_search("s.idprof6", $search_idprof6);
749}
750if (strlen($search_vat)) {
751 $sql .= natural_search("s.tva_intra", $search_vat);
752}
753// Filter on type of thirdparty
754if ($search_type > 0 && in_array($search_type, array('1,3', '1,2,3', '2,3'))) {
755 $sql .= " AND s.client IN (".$db->sanitize($search_type).")";
756}
757if ($search_type > 0 && in_array($search_type, array('4'))) {
758 $sql .= " AND s.fournisseur = 1";
759}
760if ($search_type == '0') {
761 $sql .= " AND s.client = 0 AND s.fournisseur = 0";
762}
763if ($search_status != '' && $search_status >= 0) {
764 $sql .= natural_search("s.status", $search_status, 2);
765}
766if (isModEnabled('barcode') && $search_barcode) {
767 $sql .= natural_search("s.barcode", $search_barcode);
768}
769if ($search_price_level && $search_price_level != '-1') {
770 $sql .= natural_search("s.price_level", $search_price_level, 2);
771}
772if ($search_type_thirdparty && $search_type_thirdparty > 0) {
773 $sql .= natural_search("s.fk_typent", $search_type_thirdparty, 2);
774}
775if (!empty($search_staff) && $search_staff != '-1') {
776 $sql .= natural_search("s.fk_effectif", $search_staff, 2);
777}
778if (!empty($search_legalform) && $search_legalform != '-1') {
779 $sql .= natural_search("s.fk_forme_juridique", $search_legalform, 2);
780}
781if ($search_parent_name) {
782 $sql .= natural_search("s2.nom", $search_parent_name);
783}
784if ($search_level) {
785 $sql .= natural_search("s.fk_prospectlevel", implode(',', $search_level), 3);
786}
787if ($search_stcomm) {
788 $sql .= natural_search("s.fk_stcomm", implode(',', $search_stcomm), 2);
789}
790if ($search_import_key) {
791 $sql .= natural_search("s.import_key", $search_import_key);
792}
793if ($search_date_creation_start) {
794 $sql .= " AND s.datec >= '".$db->idate($search_date_creation_start)."'";
795}
796if ($search_date_creation_end) {
797 $sql .= " AND s.datec <= '".$db->idate($search_date_creation_end)."'";
798}
799
800if ($search_date_modif_start) {
801 $sql .= " AND s.tms >= '".$db->idate($search_date_modif_start)."'";
802}
803if ($search_date_modif_end) {
804 $sql .= " AND s.tms <= '".$db->idate($search_date_modif_end)."'";
805}
806
807// Add where from extra fields
808include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
809// Add where from hooks
810$parameters = array('socid' => $socid);
811$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
812if (empty($reshook)) {
813 if ($socid) {
814 $sql .= " AND s.rowid = ".((int) $socid);
815 }
816}
817$sql .= $hookmanager->resPrint;
818
819// Add GroupBy from hooks
820$parameters = array('fieldstosearchall' => $fieldstosearchall);
821$reshook = $hookmanager->executeHooks('printFieldListGroupBy', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
822$sql .= $hookmanager->resPrint;
823
824// Count total nb of records
825$nbtotalofrecords = '';
826if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
827 /* The fast and low memory method to get and count full list converts the sql into a sql count */
828 $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
829 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
830 $resql = $db->query($sqlforcount);
831 if ($resql) {
832 $objforcount = $db->fetch_object($resql);
833 $nbtotalofrecords = $objforcount->nbtotalofrecords;
834 } else {
835 dol_print_error($db);
836 }
837
838 if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
839 $page = 0;
840 $offset = 0;
841 }
842 $db->free($resql);
843}
844
845// Complete request and execute it with limit
846$sql .= $db->order($sortfield, $sortorder);
847if ($limit) {
848 $sql .= $db->plimit($limit + 1, $offset);
849}
850
851$resql = $db->query($sql);
852if (!$resql) {
853 dol_print_error($db);
854 exit;
855}
856
857$num = $db->num_rows($resql);
858
859
860// Direct jump if only one record found
861if ($num == 1 && getDolGlobalString('MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE') && ($search_all != '' || $search_cti != '') && $action != 'list') {
862 $obj = $db->fetch_object($resql);
863 $id = $obj->rowid;
864 if (getDolGlobalString('SOCIETE_ON_SEARCH_AND_LIST_GO_ON_CUSTOMER_OR_SUPPLIER_CARD')) {
865 if ($obj->client > 0) {
866 header("Location: ".DOL_URL_ROOT.'/comm/card.php?socid='.$id);
867 exit;
868 }
869 if ($obj->fournisseur > 0) {
870 header("Location: ".DOL_URL_ROOT.'/fourn/card.php?socid='.$id);
871 exit;
872 }
873 }
874
875 header("Location: ".DOL_URL_ROOT.'/societe/card.php?socid='.$id);
876 exit;
877}
878
879// Output page
880// --------------------------------------------------------------------
881
882$paramsCat = '';
883foreach ($searchCategoryCustomerList as $searchCategoryCustomer) {
884 $paramsCat .= "&search_category_customer_list[]=".urlencode($searchCategoryCustomer);
885}
886foreach ($searchCategorySupplierList as $searchCategorySupplier) {
887 $paramsCat .= "&search_category_supplier_list[]=".urlencode($searchCategorySupplier);
888}
889
890llxHeader('', $title, $help_url, '', 0, 0, array(), array(), $paramsCat, 'bodyforlist');
891
892
893$arrayofselected = is_array($toselect) ? $toselect : array();
894
895$param = '';
896if (!empty($mode)) {
897 $param .= '&mode='.urlencode($mode);
898}
899if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
900 $param .= '&contextpage='.urlencode($contextpage);
901}
902if ($limit > 0 && $limit != $conf->liste_limit) {
903 $param .= '&limit='.((int) $limit);
904}
905if ($optioncss != '') {
906 $param .= '&optioncss='.urlencode($optioncss);
907}
908if ($search_all != '') {
909 $param = "&search_all=".urlencode($search_all);
910}
911if ($search_categ_cus > 0) {
912 $param .= '&search_categ_cus='.urlencode((string) ($search_categ_cus));
913}
914if ($search_categ_sup > 0) {
915 $param .= '&search_categ_sup='.urlencode((string) ($search_categ_sup));
916}
917if ($searchCategoryCustomerOperator == 1) {
918 $param .= "&search_category_customer_operator=".urlencode((string) ($searchCategoryCustomerOperator));
919}
920if ($searchCategorySupplierOperator == 1) {
921 $param .= "&search_category_supplier_operator=".urlencode((string) ($searchCategorySupplierOperator));
922}
923foreach ($searchCategoryCustomerList as $searchCategoryCustomer) {
924 $param .= "&search_category_customer_list[]=".urlencode($searchCategoryCustomer);
925}
926foreach ($searchCategorySupplierList as $searchCategorySupplier) {
927 $param .= "&search_category_supplier_list[]=".urlencode($searchCategorySupplier);
928}
929if ($search_sale > 0) {
930 $param .= '&search_sale='.((int) $search_sale);
931}
932if ($search_id > 0) {
933 $param .= "&search_id=".((int) $search_id);
934}
935if ($search_nom != '') {
936 $param .= "&search_nom=".urlencode($search_nom);
937}
938if ($search_alias != '') {
939 $param .= "&search_alias=".urlencode($search_alias);
940}
941if ($search_address != '') {
942 $param .= '&search_address='.urlencode($search_address);
943}
944if ($search_zip != '') {
945 $param .= "&search_zip=".urlencode($search_zip);
946}
947if ($search_town != '') {
948 $param .= "&search_town=".urlencode($search_town);
949}
950if ($search_phone != '') {
951 $param .= "&search_phone=".urlencode($search_phone);
952}
953if ($search_phone_mobile != '') {
954 $param .= "&search_phone_mobile=".urlencode($search_phone_mobile);
955}
956if ($search_fax != '') {
957 $param .= "&search_fax=".urlencode($search_fax);
958}
959if ($search_email != '') {
960 $param .= "&search_email=".urlencode($search_email);
961}
962if ($search_url != '') {
963 $param .= "&search_url=".urlencode($search_url);
964}
965if ($search_state != '') {
966 $param .= "&search_state=".urlencode($search_state);
967}
968if ($search_region != '') {
969 $param .= "&search_region=".urlencode($search_region);
970}
971if ($search_country != '') {
972 $param .= "&search_country=".urlencode($search_country);
973}
974if ($search_customer_code != '') {
975 $param .= "&search_customer_code=".urlencode($search_customer_code);
976}
977if ($search_supplier_code != '') {
978 $param .= "&search_supplier_code=".urlencode($search_supplier_code);
979}
980if ($search_account_customer_code != '') {
981 $param .= "&search_account_customer_code=".urlencode($search_account_customer_code);
982}
983if ($search_account_supplier_code != '') {
984 $param .= "&search_account_supplier_code=".urlencode($search_account_supplier_code);
985}
986if ($search_barcode != '') {
987 $param .= "&search_barcode=".urlencode($search_barcode);
988}
989if ($search_idprof1 != '') {
990 $param .= '&search_idprof1='.urlencode($search_idprof1);
991}
992if ($search_idprof2 != '') {
993 $param .= '&search_idprof2='.urlencode($search_idprof2);
994}
995if ($search_idprof3 != '') {
996 $param .= '&search_idprof3='.urlencode($search_idprof3);
997}
998if ($search_idprof4 != '') {
999 $param .= '&search_idprof4='.urlencode($search_idprof4);
1000}
1001if ($search_idprof5 != '') {
1002 $param .= '&search_idprof5='.urlencode($search_idprof5);
1003}
1004if ($search_idprof6 != '') {
1005 $param .= '&search_idprof6='.urlencode($search_idprof6);
1006}
1007if ($search_vat != '') {
1008 $param .= '&search_vat='.urlencode($search_vat);
1009}
1010if ($search_price_level != '') {
1011 $param .= '&search_price_level='.urlencode($search_price_level);
1012}
1013if ($search_type_thirdparty != '' && $search_type_thirdparty > 0) {
1014 $param .= '&search_type_thirdparty='.urlencode((string) ($search_type_thirdparty));
1015}
1016if ($search_type != '') {
1017 $param .= '&search_type='.urlencode($search_type);
1018}
1019if ($search_status != '') {
1020 $param .= '&search_status='.urlencode((string) ($search_status));
1021}
1022if (is_array($search_level) && count($search_level)) {
1023 foreach ($search_level as $slevel) {
1024 $param .= '&search_level[]='.urlencode($slevel);
1025 }
1026}
1027if (is_array($search_stcomm) && count($search_stcomm)) {
1028 foreach ($search_stcomm as $slevel) {
1029 $param .= '&search_stcomm[]='.urlencode($slevel);
1030 }
1031}
1032if ($search_parent_name != '') {
1033 $param .= '&search_parent_name='.urlencode($search_parent_name);
1034}
1035if ($search_import_key != '') {
1036 $param .= '&search_import_key='.urlencode($search_import_key);
1037}
1038if ($type != '') {
1039 $param .= '&type='.urlencode($type);
1040}
1041if ($search_date_creation_startmonth) {
1042 $param .= '&search_date_creation_startmonth='.urlencode((string) ($search_date_creation_startmonth));
1043}
1044if ($search_date_creation_startyear) {
1045 $param .= '&search_date_creation_startyear='.urlencode((string) ($search_date_creation_startyear));
1046}
1047if ($search_date_creation_startday) {
1048 $param .= '&search_date_creation_startday='.urlencode((string) ($search_date_creation_startday));
1049}
1050if ($search_date_creation_start) {
1051 $param .= '&search_date_creation_start='.urlencode($search_date_creation_start);
1052}
1053if ($search_date_creation_endmonth) {
1054 $param .= '&search_date_creation_endmonth='.urlencode((string) ($search_date_creation_endmonth));
1055}
1056if ($search_date_creation_endyear) {
1057 $param .= '&search_date_creation_endyear='.urlencode((string) ($search_date_creation_endyear));
1058}
1059if ($search_date_creation_endday) {
1060 $param .= '&search_date_creation_endday='.urlencode((string) ($search_date_creation_endday));
1061}
1062if ($search_date_creation_end) {
1063 $param .= '&search_date_creation_end='.urlencode($search_date_creation_end);
1064}
1065if ($search_date_modif_startmonth) {
1066 $param .= '&search_date_modif_startmonth='.urlencode((string) ($search_date_modif_startmonth));
1067}
1068if ($search_date_modif_startyear) {
1069 $param .= '&search_date_modif_startyear='.urlencode((string) ($search_date_modif_startyear));
1070}
1071if ($search_date_modif_startday) {
1072 $param .= '&search_date_modif_startday='.urlencode((string) ($search_date_modif_startday));
1073}
1074if ($search_date_modif_start) {
1075 $param .= '&search_date_modif_start='.urlencode($search_date_modif_start);
1076}
1077if ($search_date_modif_endmonth) {
1078 $param .= '&search_date_modif_endmonth='.urlencode((string) ($search_date_modif_endmonth));
1079}
1080if ($search_date_modif_endyear) {
1081 $param .= '&search_date_modif_endyear='.urlencode((string) ($search_date_modif_endyear));
1082}
1083if ($search_date_modif_endday) {
1084 $param .= '&search_date_modif_endday='.urlencode((string) ($search_date_modif_endday));
1085}
1086if ($search_date_modif_end) {
1087 $param .= '&search_date_modif_end=' . urlencode($search_date_modif_end);
1088}
1089
1090// Add $param from extra fields
1091include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
1092// Add $param from hooks
1093$parameters = array('param' => &$param);
1094$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1095$param .= $hookmanager->resPrint;
1096
1097// Show delete result message
1098if (GETPOST('delsoc')) {
1099 setEventMessages($langs->trans("CompanyDeleted", GETPOST('delsoc')), null, 'mesgs');
1100}
1101
1102// List of mass actions available
1103$arrayofmassactions = array(
1104 'presend' => img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
1105 //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
1106);
1107//if($user->rights->societe->creer) $arrayofmassactions['createbills']=$langs->trans("CreateInvoiceForThisCustomer");
1108if (isModEnabled('category') && $user->hasRight("societe", "creer")) {
1109 $arrayofmassactions['preaffecttag'] = img_picto('', 'category', 'class="pictofixedwidth"').$langs->trans("AffectTag");
1110}
1111if ($user->hasRight("societe", "creer")) {
1112 $arrayofmassactions['preenable'] = img_picto('', 'stop-circle', 'class="pictofixedwidth"').$langs->trans("SetToStatus", $object->LibStatut($object::STATUS_INACTIVITY));
1113}
1114if ($user->hasRight("societe", "creer")) {
1115 $arrayofmassactions['predisable'] = img_picto('', 'stop-circle', 'class="pictofixedwidth"').$langs->trans("SetToStatus", $object->LibStatut($object::STATUS_CEASED));
1116}
1117if ($user->hasRight("societe", "creer")) {
1118 $arrayofmassactions['presetcommercial'] = img_picto('', 'user', 'class="pictofixedwidth"').$langs->trans("AllocateCommercial");
1119 $arrayofmassactions['unsetcommercial'] = img_picto('', 'user', 'class="pictofixedwidth"').$langs->trans("UnallocateCommercial");
1120}
1121
1122if ($user->hasRight('societe', 'supprimer')) {
1123 $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
1124}
1125if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete', 'preaffecttag', 'preenable', 'preclose'))) {
1126 $arrayofmassactions = array();
1127}
1128$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
1129
1130$typefilter = '';
1131$label = 'MenuNewThirdParty';
1132
1133if (!empty($type)) {
1134 $typefilter = '&amp;type='.$type;
1135 if ($type == 'p') {
1136 $label = 'MenuNewProspect';
1137 }
1138 if ($type == 'c') {
1139 $label = 'MenuNewCustomer';
1140 }
1141 if ($type == 'f') {
1142 $label = 'NewSupplier';
1143 }
1144}
1145
1146if ($contextpage == 'poslist' && $type == 't' && (getDolGlobalString('PRODUIT_MULTIPRICES') || getDolGlobalString('PRODUIT_CUSTOMER_PRICES') || getDolGlobalString('PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES') || getDolGlobalString('PRODUIT_CUSTOMER_PRICES_AND_MULTIPRICES'))) {
1147 print get_htmloutput_mesg(img_warning('default').' '.$langs->trans("BecarefullChangeThirdpartyBeforeAddProductToInvoice"), [], 'warning', 1);
1148}
1149
1150// Show the new button only when this page is not opend from the Extended POS (pop-up window)
1151// but allow it too, when a user has the rights to create a new customer
1152if ($contextpage != 'poslist') {
1153 $url = DOL_URL_ROOT.'/societe/card.php?action=create'.$typefilter;
1154 if (!empty($socid)) {
1155 $url .= '&socid='.$socid;
1156 }
1157 $newcardbutton = '';
1158 $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition'));
1159 $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition'));
1160 $newcardbutton .= dolGetButtonTitle($langs->trans($label), '', 'fa fa-plus-circle', $url, '', $user->hasRight('societe', 'creer'));
1161} elseif ($user->hasRight('societe', 'creer')) {
1162 $url = DOL_URL_ROOT.'/societe/card.php?action=create&type=t&contextpage=poslist&optioncss=print&backtopage='.urlencode($_SERVER["PHP_SELF"].'?type=t&contextpage=poslist&nomassaction=1&optioncss=print&place='.$place);
1163 $label = 'MenuNewCustomer';
1164 $newcardbutton = dolGetButtonTitle($langs->trans($label), '', 'fa fa-plus-circle', $url);
1165}
1166
1167print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'" name="formfilter" autocomplete="off">'."\n";
1168if ($optioncss != '') {
1169 print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
1170}
1171print '<input type="hidden" name="token" value="'.newToken().'">';
1172print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
1173print '<input type="hidden" name="action" value="list">';
1174print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
1175print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
1176//print '<input type="hidden" name="page" value="'.$page.'">';
1177print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
1178if (!empty($place)) {
1179 print '<input type="hidden" name="place" value="'.$place.'">';
1180}
1181print '<input type="hidden" name="page_y" value="">';
1182print '<input type="hidden" name="mode" value="'.$mode.'">';
1183if (empty($arrayfields['customerorsupplier']['checked'])) {
1184 print '<input type="hidden" name="type" value="'.$type.'">';
1185}
1186if (!empty($place)) {
1187 print '<input type="hidden" name="place" value="'.$place.'">';
1188}
1189
1190print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'building', 0, $newcardbutton, '', $limit, 0, 0, 1);
1191
1192$langs->load("other");
1193$textprofid = array();
1194foreach (array(1, 2, 3, 4, 5, 6) as $key) {
1195 $label = $langs->transnoentities("ProfId".$key.$mysoc->country_code);
1196 $textprofid[$key] = '';
1197 if ($label != "ProfId".$key.$mysoc->country_code) { // Get only text between ()
1198 if (preg_match('/\‍((.*)\‍)/i', $label, $reg)) {
1199 $label = $reg[1];
1200 }
1201 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
1202 $textprofid[$key] = $langs->trans("ProfIdShortDesc", $key, $mysoc->country_code, $label);
1203 }
1204}
1205
1206// Add code for pre mass action (confirmation or email presend form)
1207$topicmail = "Information";
1208$modelmail = "thirdparty";
1209$objecttmp = new Societe($db);
1210$trackid = 'thi'.$object->id;
1211include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
1212
1213/*
1214if (!empty($search_categ_cus) || !empty($search_categ_sup)) {
1215 print "<div id='ways'>";
1216 $c = new Categorie($db);
1217 $ways = $c->print_all_ways(' &gt; ', 'societe/list.php');
1218 print " &gt; ".$ways[0]."<br>\n";
1219 print "</div><br>";
1220}
1221*/
1222
1223if ($search_all) {
1224 $setupstring = '';
1225 foreach ($fieldstosearchall as $key => $val) {
1226 $fieldstosearchall[$key] = $langs->trans($val);
1227 $setupstring .= $key."=".$val.";";
1228 }
1229 print '<!-- Search done like if SOCIETE_QUICKSEARCH_ON_FIELDS = '.$setupstring.' -->'."\n";
1230 print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $search_all).implode(', ', $fieldstosearchall).'</div>';
1231}
1232
1233$moreforfilter = '';
1234
1235// Filter for customer categories
1236if (empty($type) || $type == 'c' || $type == 'p') {
1237 if (isModEnabled('category') && $user->hasRight('categorie', 'read')) {
1238 $formcategory = new FormCategory($db);
1239 $moreforfilter .= $formcategory->getFilterBox(Categorie::TYPE_CUSTOMER, $searchCategoryCustomerList, 'minwidth300', $searchCategoryCustomerOperator ? $searchCategoryCustomerOperator : 0, 1, 1, $langs->transnoentities("CustomersProspectsCategoriesShort"));
1240 }
1241}
1242
1243// Filter for supplier categories
1244if (empty($type) || $type == 'f') {
1245 if (isModEnabled("fournisseur") && isModEnabled('category') && $user->hasRight('categorie', 'read')) {
1246 $formcategory = new FormCategory($db);
1247 $moreforfilter .= $formcategory->getFilterBox(Categorie::TYPE_SUPPLIER, $searchCategorySupplierList, 'minwidth300', $searchCategorySupplierOperator ? $searchCategorySupplierOperator : 0, 1, 1, $langs->transnoentities("SuppliersCategoriesShort"));
1248 }
1249}
1250
1251// If the user can view prospects other than his'
1252if ($user->hasRight("societe", "client", "voir") || $socid) {
1253 $moreforfilter .= '<div class="divsearchfield">';
1254 $tmptitle = $langs->trans('SalesRepresentatives');
1255 $moreforfilter .= img_picto($tmptitle, 'user', 'class="pictofixedwidth"');
1256 $moreforfilter .= $formother->select_salesrepresentatives($search_sale, 'search_sale', $user, 0, $langs->trans('SalesRepresentatives'), ($conf->dol_optimize_smallscreen ? 'maxwidth200' : 'maxwidth300'), 1);
1257 $moreforfilter .= '</div>';
1258}
1259if (!empty($moreforfilter)) {
1260 print '<div class="liste_titre liste_titre_bydiv centpercent">';
1261 print $moreforfilter;
1262 $parameters = array('type' => $type);
1263 $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1264 print $hookmanager->resPrint;
1265 print '</div>';
1266}
1267
1268$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
1269$htmlofselectarray = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields with user setup
1270$selectedfields = ($mode != 'kanban' ? $htmlofselectarray : '');
1271$selectedfields .= ((count($arrayofmassactions) && $contextpage != 'poslist') ? $form->showCheckAddButtons('checkforselect', 1) : '');
1272
1273print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
1274print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
1275
1276// Fields title search
1277// --------------------------------------------------------------------
1278print '<tr class="liste_titre_filter">';
1279// Action column
1280if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1281 print '<td class="liste_titre maxwidthsearch center actioncolumn">';
1282 $searchpicto = $form->showFilterButtons('left');
1283 print $searchpicto;
1284 print '</td>';
1285}
1286if (!empty($arrayfields['s.rowid']['checked'])) {
1287 print '<td class="liste_titre" data-key="id">';
1288 print '<input class="flat searchstring" type="text" name="search_id" size="1" value="'.dol_escape_htmltag($search_id).'">';
1289 print '</td>';
1290}
1291if (!empty($arrayfields['s.nom']['checked'])) {
1292 print '<td class="liste_titre" data-key="ref">';
1293 if (!empty($search_nom_only) && empty($search_nom)) {
1294 $search_nom = $search_nom_only;
1295 }
1296 print '<input class="flat searchstring maxwidth75imp" type="text" name="search_nom" value="'.dol_escape_htmltag($search_nom).'">';
1297 print '</td>';
1298}
1299if (!empty($arrayfields['s.name_alias']['checked'])) {
1300 print '<td class="liste_titre">';
1301 print '<input class="flat searchstring maxwidth75imp" type="text" name="search_alias" value="'.dol_escape_htmltag($search_alias).'">';
1302 print '</td>';
1303}
1304// Barcode
1305if (!empty($arrayfields['s.barcode']['checked'])) {
1306 print '<td class="liste_titre">';
1307 print '<input class="flat searchstring maxwidth75imp" type="text" name="search_barcode" value="'.dol_escape_htmltag($search_barcode).'">';
1308 print '</td>';
1309}
1310// Customer code
1311if (!empty($arrayfields['s.code_client']['checked'])) {
1312 print '<td class="liste_titre">';
1313 print '<input class="flat searchstring maxwidth75imp" type="text" name="search_customer_code" value="'.dol_escape_htmltag($search_customer_code).'">';
1314 print '</td>';
1315}
1316// Supplier code
1317if (!empty($arrayfields['s.code_fournisseur']['checked'])) {
1318 print '<td class="liste_titre">';
1319 print '<input class="flat searchstring maxwidth75imp" type="text" name="search_supplier_code" value="'.dol_escape_htmltag($search_supplier_code).'">';
1320 print '</td>';
1321}
1322// Account Customer code
1323if (!empty($arrayfields['s.code_compta']['checked'])) {
1324 print '<td class="liste_titre">';
1325 print '<input class="flat searchstring maxwidth75imp" type="text" name="search_account_customer_code" value="'.dol_escape_htmltag($search_account_customer_code).'">';
1326 print '</td>';
1327}
1328// Account Supplier code
1329if (!empty($arrayfields['s.code_compta_fournisseur']['checked'])) {
1330 print '<td class="liste_titre">';
1331 print '<input class="flat maxwidth75imp" type="text" name="search_account_supplier_code" value="'.dol_escape_htmltag($search_account_supplier_code).'">';
1332 print '</td>';
1333}
1334// Address
1335if (!empty($arrayfields['s.address']['checked'])) {
1336 print '<td class="liste_titre">';
1337 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_address" value="'.dol_escape_htmltag($search_address).'">';
1338 print '</td>';
1339}
1340// Sales representatives
1341if (!empty($arrayfields['sales.representative']['checked'])) {
1342 print '<td class="liste_titre">';
1343 print '</td>';
1344}
1345// Zip
1346if (!empty($arrayfields['s.zip']['checked'])) {
1347 print '<td class="liste_titre">';
1348 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_zip" value="'.dol_escape_htmltag($search_zip).'">';
1349 print '</td>';
1350}
1351// Town
1352if (!empty($arrayfields['s.town']['checked'])) {
1353 print '<td class="liste_titre">';
1354 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_town" value="'.dol_escape_htmltag($search_town).'">';
1355 print '</td>';
1356}
1357// State
1358if (!empty($arrayfields['state.nom']['checked'])) {
1359 print '<td class="liste_titre">';
1360 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_state" value="'.dol_escape_htmltag($search_state).'">';
1361 print '</td>';
1362}
1363// Region
1364if (!empty($arrayfields['region.nom']['checked'])) {
1365 print '<td class="liste_titre">';
1366 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_region" value="'.dol_escape_htmltag($search_region).'">';
1367 print '</td>';
1368}
1369// Country
1370if (!empty($arrayfields['country.code_iso']['checked'])) {
1371 print '<td class="liste_titre center">';
1372 print $form->select_country($search_country, 'search_country', '', 0, 'minwidth100imp maxwidth100');
1373 print '</td>';
1374}
1375// Company type
1376if (!empty($arrayfields['typent.code']['checked'])) {
1377 print '<td class="liste_titre maxwidthonsmartphone center">';
1378 // We use showempty=0 here because there is already an unknown value into dictionary.
1379 print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 1, 0, 0, '', 0, 0, 0, (!getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? 'ASC' : $conf->global->SOCIETE_SORT_ON_TYPEENT), 'minwidth50 maxwidth125', 1);
1380 print '</td>';
1381}
1382// Multiprice level
1383if (!empty($arrayfields['s.price_level']['checked'])) {
1384 print '<td class="liste_titre">';
1385 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_price_level" value="'.dol_escape_htmltag($search_price_level).'">';
1386 print '</td>';
1387}
1388// Staff
1389if (!empty($arrayfields['staff.code']['checked'])) {
1390 print '<td class="liste_titre maxwidthonsmartphone center">';
1391 print $form->selectarray("search_staff", $formcompany->effectif_array(0), $search_staff, 0, 0, 0, '', 0, 0, 0, 'ASC', 'maxwidth100', 1);
1392 print '</td>';
1393}
1394// Legal form
1395if (!empty($arrayfields['legalform.code']['checked'])) {
1396 print '<td class="liste_titre maxwidthonsmartphone center">';
1397 //print $form->selectarray("search_legalform", $formcompany->effectif_array(0), $search_legalform, 0, 0, 0, '', 0, 0, 0, 'ASC', 'maxwidth100', 1);
1398 print '</td>';
1399}
1400if (!empty($arrayfields['s.email']['checked'])) {
1401 // Email
1402 print '<td class="liste_titre">';
1403 print '<input class="flat searchemail maxwidth50imp" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).'">';
1404 print '</td>';
1405}
1406if (!empty($arrayfields['s.phone']['checked'])) {
1407 // Phone
1408 print '<td class="liste_titre">';
1409 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_phone" value="'.dol_escape_htmltag($search_phone).'">';
1410 print '</td>';
1411}
1412if (!empty($arrayfields['s.phone_mobile']['checked'])) {
1413 // PhoneMobile
1414 print '<td class="liste_titre">';
1415 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_phone_mobile" value="'.dol_escape_htmltag($search_phone_mobile).'">';
1416 print '</td>';
1417}
1418if (!empty($arrayfields['s.fax']['checked'])) {
1419 // Fax
1420 print '<td class="liste_titre">';
1421 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_fax" value="'.dol_escape_htmltag($search_fax).'">';
1422 print '</td>';
1423}
1424if (!empty($arrayfields['s.url']['checked'])) {
1425 // Url
1426 print '<td class="liste_titre">';
1427 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_url" value="'.dol_escape_htmltag($search_url).'">';
1428 print '</td>';
1429}
1430if (!empty($arrayfields['s.siren']['checked'])) {
1431 // IdProf1
1432 print '<td class="liste_titre">';
1433 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_idprof1" value="'.dol_escape_htmltag($search_idprof1).'">';
1434 print '</td>';
1435}
1436if (!empty($arrayfields['s.siret']['checked'])) {
1437 // IdProf2
1438 print '<td class="liste_titre">';
1439 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_idprof2" value="'.dol_escape_htmltag($search_idprof2).'">';
1440 print '</td>';
1441}
1442if (!empty($arrayfields['s.ape']['checked'])) {
1443 // IdProf3
1444 print '<td class="liste_titre">';
1445 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_idprof3" value="'.dol_escape_htmltag($search_idprof3).'">';
1446 print '</td>';
1447}
1448if (!empty($arrayfields['s.idprof4']['checked'])) {
1449 // IdProf4
1450 print '<td class="liste_titre">';
1451 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_idprof4" value="'.dol_escape_htmltag($search_idprof4).'">';
1452 print '</td>';
1453}
1454if (!empty($arrayfields['s.idprof5']['checked'])) {
1455 // IdProf5
1456 print '<td class="liste_titre">';
1457 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_idprof5" value="'.dol_escape_htmltag($search_idprof5).'">';
1458 print '</td>';
1459}
1460if (!empty($arrayfields['s.idprof6']['checked'])) {
1461 // IdProf6
1462 print '<td class="liste_titre">';
1463 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_idprof6" value="'.dol_escape_htmltag($search_idprof6).'">';
1464 print '</td>';
1465}
1466if (!empty($arrayfields['s.tva_intra']['checked'])) {
1467 // Vat number
1468 print '<td class="liste_titre">';
1469 print '<input class="flat searchstring maxwidth50imp" type="text" name="search_vat" value="'.dol_escape_htmltag($search_vat).'">';
1470 print '</td>';
1471}
1472
1473// Nature (customer/prospect/supplier)
1474if (!empty($arrayfields['customerorsupplier']['checked'])) {
1475 print '<td class="liste_titre maxwidthonsmartphone center">';
1476 if ($type != '') {
1477 print '<input type="hidden" name="type" value="'.$type.'">';
1478 }
1479 print $formcompany->selectProspectCustomerType($search_type, 'search_type', 'search_type', 'list');
1480 print '</td>';
1481}
1482// Prospect level
1483if (!empty($arrayfields['s.fk_prospectlevel']['checked'])) {
1484 print '<td class="liste_titre center">';
1485 print $form->multiselectarray('search_level', $tab_level, $search_level, 0, 0, 'width75', 0, 0, '', '', '', 2);
1486 print '</td>';
1487}
1488// Prospect status
1489if (!empty($arrayfields['s.fk_stcomm']['checked'])) {
1490 print '<td class="liste_titre maxwidthonsmartphone center">';
1491 $arraystcomm = array();
1492 foreach ($prospectstatic->cacheprospectstatus as $key => $val) {
1493 $arraystcomm[$val['id']] = ($langs->trans("StatusProspect".$val['id']) != "StatusProspect".$val['id'] ? $langs->trans("StatusProspect".$val['id']) : $val['label']);
1494 }
1495 //print $form->selectarray('search_stcomm', $arraystcomm, $search_stcomm, -2, 0, 0, '', 0, 0, 0, '', '', 1);
1496 print $form->multiselectarray('search_stcomm', $arraystcomm, $search_stcomm, 0, 0, 'width100', 0, 0, '', '', '', 2);
1497 print '</td>';
1498}
1499if (!empty($arrayfields['s2.nom']['checked'])) {
1500 print '<td class="liste_titre center">';
1501 print '<input class="flat searchstring maxwidth75imp" type="text" name="search_parent_name" value="'.dol_escape_htmltag($search_parent_name).'">';
1502 print '</td>';
1503}
1504// Extra fields
1505include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
1506
1507// Fields from hook
1508$parameters = array('arrayfields' => $arrayfields);
1509$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1510print $hookmanager->resPrint;
1511// Creation date
1512if (!empty($arrayfields['s.datec']['checked'])) {
1513 print '<td class="liste_titre center nowraponall">';
1514 print '<div class="nowrapfordate">';
1515 print $form->selectDate($search_date_creation_start ? $search_date_creation_start : -1, 'search_date_creation_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
1516 print '</div>';
1517 print '<div class="nowrapfordate">';
1518 print $form->selectDate($search_date_creation_end ? $search_date_creation_end : -1, 'search_date_creation_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
1519 print '</div>';
1520 print '</td>';
1521}
1522// Modification date
1523if (!empty($arrayfields['s.tms']['checked'])) {
1524 print '<td class="liste_titre center nowraponall">';
1525 print '<div class="nowrapfordate">';
1526 print $form->selectDate($search_date_modif_start ? $search_date_modif_start : -1, 'search_date_modif_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
1527 print '</div>';
1528 print '<div class="nowrapfordate">';
1529 print $form->selectDate($search_date_modif_end ? $search_date_modif_end : -1, 'search_date_modif_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
1530 print '</div>';
1531 print '</td>';
1532}
1533if (!empty($arrayfields['s.note_public']['checked'])) {
1534 // Note public
1535 print '<td class="liste_titre">';
1536 print '</td>';
1537}
1538if (!empty($arrayfields['s.note_private']['checked'])) {
1539 // Note private
1540 print '<td class="liste_titre">';
1541 print '</td>';
1542}
1543// Status
1544if (!empty($arrayfields['s.status']['checked'])) {
1545 print '<td class="liste_titre center minwidth75imp parentonrightofpage">';
1546 print $form->selectarray('search_status', array('0' => $langs->trans('ActivityCeased'), '1' => $langs->trans('InActivity')), $search_status, 1, 0, 0, '', 0, 0, 0, '', 'search_status width100 onrightofpage', 1);
1547 print '</td>';
1548}
1549if (!empty($arrayfields['s.import_key']['checked'])) {
1550 print '<td class="liste_titre center">';
1551 print '<input class="flat searchstring maxwidth50" type="text" name="search_import_key" value="'.dol_escape_htmltag($search_import_key).'">';
1552 print '</td>';
1553}
1554// Action column
1555if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1556 print '<td class="liste_titre center maxwidthsearch actioncolumn">';
1557 $searchpicto = $form->showFilterButtons();
1558 print $searchpicto;
1559 print '</td>';
1560}
1561
1562print '</tr>'."\n";
1563
1564$totalarray = array();
1565$totalarray['nbfield'] = 0;
1566
1567// Fields title label
1568// --------------------------------------------------------------------
1569print '<tr class="liste_titre">';
1570// Action column
1571if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1572 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
1573 $totalarray['nbfield']++;
1574}
1575if (!empty($arrayfields['s.rowid']['checked'])) {
1576 print_liste_field_titre($arrayfields['s.rowid']['label'], $_SERVER["PHP_SELF"], "s.rowid", "", $param, ' data-key="id"', $sortfield, $sortorder, '');
1577 $totalarray['nbfield']++;
1578}
1579if (!empty($arrayfields['s.nom']['checked'])) {
1580 print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], "s.nom", "", $param, ' data-key="ref"', $sortfield, $sortorder, ' ');
1581 $totalarray['nbfield']++;
1582}
1583if (!empty($arrayfields['s.name_alias']['checked'])) {
1584 // @phan-suppress-next-line PhanTypeInvalidDimOffset
1585 print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"], "s.name_alias", "", $param, "", $sortfield, $sortorder);
1586 $totalarray['nbfield']++;
1587}
1588if (!empty($arrayfields['s.barcode']['checked'])) {
1589 print_liste_field_titre($arrayfields['s.barcode']['label'], $_SERVER["PHP_SELF"], "s.barcode", $param, '', '', $sortfield, $sortorder);
1590 $totalarray['nbfield']++;
1591}
1592if (!empty($arrayfields['s.code_client']['checked'])) {
1593 print_liste_field_titre($arrayfields['s.code_client']['label'], $_SERVER["PHP_SELF"], "s.code_client", "", $param, '', $sortfield, $sortorder);
1594 $totalarray['nbfield']++;
1595}
1596if (!empty($arrayfields['s.code_fournisseur']['checked'])) {
1597 print_liste_field_titre($arrayfields['s.code_fournisseur']['label'], $_SERVER["PHP_SELF"], "s.code_fournisseur", "", $param, '', $sortfield, $sortorder);
1598 $totalarray['nbfield']++;
1599}
1600if (!empty($arrayfields['s.code_compta']['checked'])) {
1601 print_liste_field_titre($arrayfields['s.code_compta']['label'], $_SERVER["PHP_SELF"], "s.code_compta", "", $param, '', $sortfield, $sortorder);
1602 $totalarray['nbfield']++;
1603}
1604if (!empty($arrayfields['s.code_compta_fournisseur']['checked'])) {
1605 print_liste_field_titre($arrayfields['s.code_compta_fournisseur']['label'], $_SERVER["PHP_SELF"], "s.code_compta_fournisseur", "", $param, '', $sortfield, $sortorder);
1606 $totalarray['nbfield']++;
1607}
1608if (!empty($arrayfields['s.address']['checked'])) {
1609 print_liste_field_titre($arrayfields['s.address']['label'], $_SERVER['PHP_SELF'], 's.address', '', $param, '', $sortfield, $sortorder);
1610 $totalarray['nbfield']++;
1611}
1612if (!empty($arrayfields['sales.representative']['checked'])) {
1613 print_liste_field_titre($arrayfields['sales.representative']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder);
1614 $totalarray['nbfield']++;
1615}
1616if (!empty($arrayfields['s.zip']['checked'])) {
1617 print_liste_field_titre($arrayfields['s.zip']['label'], $_SERVER["PHP_SELF"], "s.zip", "", $param, '', $sortfield, $sortorder);
1618 $totalarray['nbfield']++;
1619}
1620if (!empty($arrayfields['s.town']['checked'])) {
1621 print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], "s.town", "", $param, '', $sortfield, $sortorder);
1622 $totalarray['nbfield']++;
1623}
1624if (!empty($arrayfields['state.nom']['checked'])) {
1625 print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER["PHP_SELF"], "state.nom", "", $param, '', $sortfield, $sortorder);
1626 $totalarray['nbfield']++;
1627}
1628if (!empty($arrayfields['region.nom']['checked'])) {
1629 print_liste_field_titre($arrayfields['region.nom']['label'], $_SERVER["PHP_SELF"], "region.nom", "", $param, '', $sortfield, $sortorder);
1630 $totalarray['nbfield']++;
1631}
1632if (!empty($arrayfields['country.code_iso']['checked'])) {
1633 print_liste_field_titre($arrayfields['country.code_iso']['label'], $_SERVER["PHP_SELF"], "country.code_iso", "", $param, '', $sortfield, $sortorder, 'center ');
1634 $totalarray['nbfield']++;
1635}
1636if (!empty($arrayfields['typent.code']['checked'])) {
1637 print_liste_field_titre($arrayfields['typent.code']['label'], $_SERVER["PHP_SELF"], "typent.code", "", $param, "", $sortfield, $sortorder, 'center ');
1638 $totalarray['nbfield']++;
1639}
1640if (!empty($arrayfields['staff.code']['checked'])) {
1641 print_liste_field_titre($arrayfields['staff.code']['label'], $_SERVER["PHP_SELF"], "staff.code", "", $param, '', $sortfield, $sortorder, 'center ');
1642 $totalarray['nbfield']++;
1643}
1644if (!empty($arrayfields['legalform.code']['checked'])) {
1645 print_liste_field_titre($arrayfields['legalform.code']['label'], $_SERVER["PHP_SELF"], "legalform.code", "", $param, '', $sortfield, $sortorder);
1646 $totalarray['nbfield']++;
1647}
1648if (!empty($arrayfields['s.price_level']['checked'])) {
1649 print_liste_field_titre($arrayfields['s.price_level']['label'], $_SERVER["PHP_SELF"], "s.price_level", "", $param, '', $sortfield, $sortorder);
1650 $totalarray['nbfield']++;
1651}
1652if (!empty($arrayfields['s.email']['checked'])) {
1653 print_liste_field_titre($arrayfields['s.email']['label'], $_SERVER["PHP_SELF"], "s.email", "", $param, '', $sortfield, $sortorder);
1654 $totalarray['nbfield']++;
1655}
1656if (!empty($arrayfields['s.phone']['checked'])) {
1657 print_liste_field_titre($arrayfields['s.phone']['label'], $_SERVER["PHP_SELF"], "s.phone", "", $param, '', $sortfield, $sortorder);
1658 $totalarray['nbfield']++;
1659}
1660if (!empty($arrayfields['s.phone_mobile']['checked'])) {
1661 print_liste_field_titre($arrayfields['s.phone_mobile']['label'], $_SERVER["PHP_SELF"], "s.phone_mobile", "", $param, '', $sortfield, $sortorder);
1662 $totalarray['nbfield']++;
1663}
1664if (!empty($arrayfields['s.fax']['checked'])) {
1665 print_liste_field_titre($arrayfields['s.fax']['label'], $_SERVER["PHP_SELF"], "s.fax", "", $param, '', $sortfield, $sortorder);
1666 $totalarray['nbfield']++;
1667}
1668if (!empty($arrayfields['s.url']['checked'])) {
1669 print_liste_field_titre($arrayfields['s.url']['label'], $_SERVER["PHP_SELF"], "s.url", "", $param, '', $sortfield, $sortorder);
1670 $totalarray['nbfield']++;
1671}
1672if (!empty($arrayfields['s.siren']['checked'])) {
1673 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId1Short"), $textprofid[1], 1, 0), $_SERVER["PHP_SELF"], "s.siren", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1674 $totalarray['nbfield']++;
1675}
1676if (!empty($arrayfields['s.siret']['checked'])) {
1677 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId2Short"), $textprofid[2], 1, 0), $_SERVER["PHP_SELF"], "s.siret", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1678 $totalarray['nbfield']++;
1679}
1680if (!empty($arrayfields['s.ape']['checked'])) {
1681 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId3Short"), $textprofid[3], 1, 0), $_SERVER["PHP_SELF"], "s.ape", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1682 $totalarray['nbfield']++;
1683}
1684if (!empty($arrayfields['s.idprof4']['checked'])) {
1685 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId4Short"), $textprofid[4], 1, 0), $_SERVER["PHP_SELF"], "s.idprof4", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1686 $totalarray['nbfield']++;
1687}
1688if (!empty($arrayfields['s.idprof5']['checked'])) {
1689 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId5Short"), $textprofid[5], 1, 0), $_SERVER["PHP_SELF"], "s.idprof5", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1690 $totalarray['nbfield']++;
1691}
1692if (!empty($arrayfields['s.idprof6']['checked'])) {
1693 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId6Short"), $textprofid[6], 1, 0), $_SERVER["PHP_SELF"], "s.idprof6", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1694 $totalarray['nbfield']++;
1695}
1696if (!empty($arrayfields['s.tva_intra']['checked'])) {
1697 print_liste_field_titre($arrayfields['s.tva_intra']['label'], $_SERVER["PHP_SELF"], "s.tva_intra", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1698 $totalarray['nbfield']++;
1699}
1700if (!empty($arrayfields['customerorsupplier']['checked'])) {
1701 print_liste_field_titre($arrayfields['customerorsupplier']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'center '); // type of customer
1702 $totalarray['nbfield']++;
1703}
1704if (!empty($arrayfields['s.fk_prospectlevel']['checked'])) {
1705 print_liste_field_titre($arrayfields['s.fk_prospectlevel']['label'], $_SERVER["PHP_SELF"], "s.fk_prospectlevel", "", $param, '', $sortfield, $sortorder, 'center ');
1706 $totalarray['nbfield']++;
1707}
1708if (!empty($arrayfields['s.fk_stcomm']['checked'])) {
1709 print_liste_field_titre($arrayfields['s.fk_stcomm']['label'], $_SERVER["PHP_SELF"], "s.fk_stcomm", "", $param, '', $sortfield, $sortorder, 'center ');
1710 $totalarray['nbfield']++;
1711}
1712if (!empty($arrayfields['s2.nom']['checked'])) {
1713 print_liste_field_titre($arrayfields['s2.nom']['label'], $_SERVER["PHP_SELF"], "s2.nom", "", $param, '', $sortfield, $sortorder, 'center ');
1714 $totalarray['nbfield']++;
1715}
1716// Extra fields
1717include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
1718// Hook fields
1719$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder);
1720$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1721print $hookmanager->resPrint;
1722if (!empty($arrayfields['s.datec']['checked'])) {
1723 print_liste_field_titre($arrayfields['s.datec']['label'], $_SERVER["PHP_SELF"], "s.datec", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
1724 $totalarray['nbfield']++; // For the column action
1725}
1726if (!empty($arrayfields['s.tms']['checked'])) {
1727 print_liste_field_titre($arrayfields['s.tms']['label'], $_SERVER["PHP_SELF"], "s.tms", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
1728 $totalarray['nbfield']++; // For the column action
1729}
1730if (!empty($arrayfields['s.status']['checked'])) {
1731 print_liste_field_titre($arrayfields['s.status']['label'], $_SERVER["PHP_SELF"], "s.status", "", $param, '', $sortfield, $sortorder, 'center ');
1732 $totalarray['nbfield']++; // For the column action
1733}
1734if (!empty($arrayfields['s.note_public']['checked'])) {
1735 print_liste_field_titre($arrayfields['s.note_public']['label'], $_SERVER["PHP_SELF"], "s.note_public", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
1736 $totalarray['nbfield']++;
1737}
1738if (!empty($arrayfields['s.note_private']['checked'])) {
1739 print_liste_field_titre($arrayfields['s.note_private']['label'], $_SERVER["PHP_SELF"], "s.note_private", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
1740 $totalarray['nbfield']++;
1741}
1742if (!empty($arrayfields['s.import_key']['checked'])) {
1743 print_liste_field_titre($arrayfields['s.import_key']['label'], $_SERVER["PHP_SELF"], "s.import_key", "", $param, '', $sortfield, $sortorder, 'center ');
1744 $totalarray['nbfield']++; // For the column action
1745}
1746// Action column
1747if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1748 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
1749 $totalarray['nbfield']++;
1750}
1751print '</tr>'."\n";
1752
1753
1754// Loop on record
1755// --------------------------------------------------------------------
1756$i = 0;
1757$savnbfield = $totalarray['nbfield'];
1758$totalarray = array();
1759$totalarray['nbfield'] = 0;
1760$imaxinloop = ($limit ? min($num, $limit) : $num);
1761while ($i < $imaxinloop) {
1762 $obj = $db->fetch_object($resql);
1763 if (empty($obj)) {
1764 break; // Should not happen
1765 }
1766
1767 $parameters = array('staticdata' => $obj);
1768 // Note that $action and $object may have been modified by hook
1769 // do companystatic fetch in hook if wanted or anything else
1770 $reshook = $hookmanager->executeHooks('loadStaticObject', $parameters, $companystatic, $action);
1771 if (empty($reshook)) {
1772 $companystatic->id = $obj->rowid;
1773 $companystatic->name = $obj->name;
1774 $companystatic->name_alias = $obj->name_alias;
1775 $companystatic->logo = $obj->logo;
1776 $companystatic->barcode = $obj->barcode;
1777 $companystatic->canvas = $obj->canvas;
1778 $companystatic->client = $obj->client;
1779 $companystatic->status = $obj->status;
1780 $companystatic->email = $obj->email;
1781 $companystatic->phone = $obj->phone;
1782 $companystatic->phone_mobile = $obj->phone_mobile;
1783 $companystatic->fax = $obj->fax;
1784 $companystatic->address = $obj->address;
1785 $companystatic->zip = $obj->zip;
1786 $companystatic->town = $obj->town;
1787 $companystatic->fournisseur = $obj->fournisseur;
1788 $companystatic->code_client = $obj->code_client;
1789 $companystatic->code_fournisseur = $obj->code_fournisseur;
1790 $companystatic->tva_intra = $obj->tva_intra;
1791 $companystatic->country_code = $obj->country_code;
1792
1793 $companystatic->code_compta_client = $obj->code_compta;
1794 $companystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
1795 $companystatic->note_public = $obj->note_public;
1796 $companystatic->note_private = $obj->note_private;
1797 $companystatic->fk_prospectlevel = $obj->fk_prospectlevel;
1798 $companystatic->parent = $obj->fk_parent;
1799 $companystatic->entity = $obj->entity;
1800
1801 $object = $companystatic;
1802 }
1803
1804 if ($mode == 'kanban') {
1805 if ($i == 0) {
1806 print '<tr class="trkanban"><td colspan="'.$savnbfield.'">';
1807 print '<div class="box-flex-container kanban">';
1808 }
1809 // Output Kanban
1810 print $companystatic->getKanbanView('', array('selected' => in_array($obj->rowid, $arrayofselected)));
1811 if ($i == ($imaxinloop - 1)) {
1812 print '</div>';
1813 print '</td></tr>';
1814 }
1815 } else {
1816 // Show line of result
1817 $j = 0;
1818 print '<tr data-rowid="'.$companystatic->id.'" class="oddeven"';
1819 if ($contextpage == 'poslist') {
1820 print ' onclick="location.href=\'list.php?action=change&contextpage=poslist&idcustomer='.$obj->rowid.'&place='.urlencode($place).'\'"';
1821 }
1822 print '>';
1823
1824 // Action column (Show the massaction button only when this page is not opend from the Extended POS)
1825 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1826 print '<td class="nowrap center actioncolumn">';
1827 if (($massactionbutton || $massaction) && $contextpage != 'poslist') { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
1828 $selected = 0;
1829 if (in_array($obj->rowid, $arrayofselected)) {
1830 $selected = 1;
1831 }
1832 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
1833 }
1834 print '</td>';
1835 if (!$i) {
1836 $totalarray['nbfield']++;
1837 }
1838 }
1839 if (!empty($arrayfields['s.rowid']['checked'])) {
1840 print '<td class="tdoverflowmax50" data-key="id">';
1841 print dol_escape_htmltag($obj->rowid);
1842 print "</td>\n";
1843 if (!$i) {
1844 $totalarray['nbfield']++;
1845 }
1846 }
1847 if (!empty($arrayfields['s.nom']['checked'])) {
1848 print '<td'.(getDolGlobalString('MAIN_SOCIETE_SHOW_COMPLETE_NAME') ? '' : ' class="tdoverflowmax200"').' data-key="ref">';
1849 if ($contextpage == 'poslist') {
1850 print dol_escape_htmltag($companystatic->name);
1851 } else {
1852 print $companystatic->getNomUrl(1, '', 100, 0, 1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1);
1853 }
1854 print "</td>\n";
1855 if (!$i) {
1856 $totalarray['nbfield']++;
1857 }
1858 }
1859 if (!empty($arrayfields['s.name_alias']['checked'])) {
1860 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($companystatic->name_alias).'">';
1861 print dol_escape_htmltag($companystatic->name_alias);
1862 print "</td>\n";
1863 if (!$i) {
1864 $totalarray['nbfield']++;
1865 }
1866 }
1867 // Barcode
1868 if (!empty($arrayfields['s.barcode']['checked'])) {
1869 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($companystatic->barcode).'">'.dol_escape_htmltag($companystatic->barcode).'</td>';
1870 if (!$i) {
1871 $totalarray['nbfield']++;
1872 }
1873 }
1874 // Customer code
1875 if (!empty($arrayfields['s.code_client']['checked'])) {
1876 print '<td class="nowraponall">'.dol_escape_htmltag($companystatic->code_client).'</td>';
1877 if (!$i) {
1878 $totalarray['nbfield']++;
1879 }
1880 }
1881 // Supplier code
1882 if (!empty($arrayfields['s.code_fournisseur']['checked'])) {
1883 print '<td class="nowraponall">'.dol_escape_htmltag($companystatic->code_fournisseur).'</td>';
1884 if (!$i) {
1885 $totalarray['nbfield']++;
1886 }
1887 }
1888 // Account customer code
1889 if (!empty($arrayfields['s.code_compta']['checked'])) {
1890 print '<td>'.dol_escape_htmltag($companystatic->code_compta_client).'</td>';
1891 if (!$i) {
1892 $totalarray['nbfield']++;
1893 }
1894 }
1895 // Account supplier code
1896 if (!empty($arrayfields['s.code_compta_fournisseur']['checked'])) {
1897 print '<td>'.dol_escape_htmltag($companystatic->code_compta_fournisseur).'</td>';
1898 if (!$i) {
1899 $totalarray['nbfield']++;
1900 }
1901 }
1902 // Address
1903 if (!empty($arrayfields['s.address']['checked'])) {
1904 print '<td class="tdoverflowmax250" title="'.dol_escape_htmltag($companystatic->address).'">'.dol_escape_htmltag($companystatic->address).'</td>';
1905 if (!$i) {
1906 $totalarray['nbfield']++;
1907 }
1908 }
1909 // Sales Representative
1910 if (!empty($arrayfields['sales.representative']['checked'])) {
1911 print '<td class="nowraponall tdoverflowmax200">';
1912 $listsalesrepresentatives = $companystatic->getSalesRepresentatives($user);
1913 $nbofsalesrepresentative = count($listsalesrepresentatives);
1914 if ($nbofsalesrepresentative > 6) {
1915 // We print only number
1916 print $nbofsalesrepresentative;
1917 } elseif ($nbofsalesrepresentative > 0) {
1918 $userstatic = new User($db);
1919 $j = 0;
1920 foreach ($listsalesrepresentatives as $val) {
1921 $userstatic->id = $val['id'];
1922 $userstatic->lastname = $val['lastname'];
1923 $userstatic->firstname = $val['firstname'];
1924 $userstatic->email = $val['email'];
1925 $userstatic->entity = $val['entity'];
1926 $userstatic->photo = $val['photo'];
1927 $userstatic->login = $val['login'];
1928 $userstatic->office_phone = $val['office_phone'];
1929 $userstatic->office_fax = $val['office_fax'];
1930 $userstatic->user_mobile = $val['user_mobile'];
1931 $userstatic->job = $val['job'];
1932 $userstatic->gender = $val['gender'];
1933 print ($nbofsalesrepresentative < 2) ? $userstatic->getNomUrl(-1, '', 0, 0, 12) : $userstatic->getNomUrl(-2);
1934 $j++;
1935 if ($j < $nbofsalesrepresentative) {
1936 print ' ';
1937 }
1938 }
1939 } else {
1940 print '&nbsp;';
1941 }
1942 print '</td>';
1943 if (!$i) {
1944 $totalarray['nbfield']++;
1945 }
1946 }
1947 // Zip
1948 if (!empty($arrayfields['s.zip']['checked'])) {
1949 print "<td>".dol_escape_htmltag($companystatic->zip)."</td>\n";
1950 if (!$i) {
1951 $totalarray['nbfield']++;
1952 }
1953 }
1954 // Town
1955 if (!empty($arrayfields['s.town']['checked'])) {
1956 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($companystatic->town).'">'.dol_escape_htmltag($companystatic->town)."</td>\n";
1957 if (!$i) {
1958 $totalarray['nbfield']++;
1959 }
1960 }
1961 // State
1962 if (!empty($arrayfields['state.nom']['checked'])) {
1963 print "<td>".dol_escape_htmltag($obj->state_name)."</td>\n";
1964 if (!$i) {
1965 $totalarray['nbfield']++;
1966 }
1967 }
1968 // Region
1969 if (!empty($arrayfields['region.nom']['checked'])) {
1970 print "<td>".dol_escape_htmltag($obj->region_name)."</td>\n";
1971 if (!$i) {
1972 $totalarray['nbfield']++;
1973 }
1974 }
1975 // Country
1976 if (!empty($arrayfields['country.code_iso']['checked'])) {
1977 print '<td class="center tdoverflowmax100">';
1978 $labelcountry = ($companystatic->country_code && ($langs->trans("Country".$companystatic->country_code) != "Country".$companystatic->country_code)) ? $langs->trans("Country".$companystatic->country_code) : $obj->country_label;
1979 print $labelcountry;
1980 print '</td>';
1981 if (!$i) {
1982 $totalarray['nbfield']++;
1983 }
1984 }
1985 // Type ent
1986 if (!empty($arrayfields['typent.code']['checked'])) {
1987 if (!isset($typenArray) || !is_array($typenArray) || count($typenArray) == 0) {
1988 $typenArray = $formcompany->typent_array(1);
1989 }
1990 $labeltypeofcompany = empty($typenArray[$obj->typent_code]) ? '' : $typenArray[$obj->typent_code];
1991
1992 print '<td class="center tdoverflowmax125" title="'.dol_escape_htmltag($labeltypeofcompany).'">';
1993 print dol_escape_htmltag($labeltypeofcompany);
1994 print '</td>';
1995 if (!$i) {
1996 $totalarray['nbfield']++;
1997 }
1998 }
1999 // Multiprice level
2000 if (!empty($arrayfields['s.price_level']['checked'])) {
2001 print '<td class="center">'.$obj->price_level."</td>\n";
2002 if (!$i) {
2003 $totalarray['nbfield']++;
2004 }
2005 }
2006 // Staff
2007 if (!empty($arrayfields['staff.code']['checked'])) {
2008 print '<td class="center">';
2009 if (!empty($obj->staff_code)) {
2010 if (empty($conf->cache['staffArray'])) {
2011 $conf->cache['staffArray'] = $formcompany->effectif_array(1);
2012 }
2013 print $conf->cache['staffArray'][$obj->staff_code];
2014 }
2015 print '</td>';
2016 if (!$i) {
2017 $totalarray['nbfield']++;
2018 }
2019 }
2020 // Legal form
2021 if (!empty($arrayfields['legalform.code']['checked'])) {
2022 $labeltoshow = '';
2023 if (!empty($obj->legalform_code)) {
2024 if (empty($conf->cache['legalformArray'][$obj->legalform_code])) {
2025 $conf->cache['legalformArray'][$obj->legalform_code] = getFormeJuridiqueLabel($obj->legalform_code);
2026 }
2027 $labeltoshow = $conf->cache['legalformArray'][$obj->legalform_code];
2028 }
2029 print '<td class="center tdoverflowmax100" title="'.dol_escape_htmltag($labeltoshow).'">';
2030 print dol_escape_htmltag($labeltoshow);
2031 print '</td>';
2032 if (!$i) {
2033 $totalarray['nbfield']++;
2034 }
2035 }
2036 // Email
2037 if (!empty($arrayfields['s.email']['checked'])) {
2038 print '<td class="tdoverflowmax150">'.dol_print_email($obj->email, $obj->rowid, $obj->rowid, 1, 0, 0, 1)."</td>\n";
2039 if (!$i) {
2040 $totalarray['nbfield']++;
2041 }
2042 }
2043 if (!empty($arrayfields['s.phone']['checked'])) {
2044 print '<td class="nowraponall">'.dol_print_phone($obj->phone, $companystatic->country_code, 0, $obj->rowid, 'AC_TEL', ' ', 'phone')."</td>\n";
2045 if (!$i) {
2046 $totalarray['nbfield']++;
2047 }
2048 }
2049 if (!empty($arrayfields['s.phone_mobile']['checked'])) {
2050 print '<td class="nowraponall">'.dol_print_phone($obj->phone_mobile, $companystatic->country_code, 0, $obj->rowid, 'AC_TEL', ' ', 'phone_mobile')."</td>\n";
2051 if (!$i) {
2052 $totalarray['nbfield']++;
2053 }
2054 }
2055 if (!empty($arrayfields['s.fax']['checked'])) {
2056 print '<td class="nowraponall">'.dol_print_phone($obj->fax, $companystatic->country_code, 0, $obj->rowid, 'AC_TEL', ' ', 'fax')."</td>\n";
2057 if (!$i) {
2058 $totalarray['nbfield']++;
2059 }
2060 }
2061 if (!empty($arrayfields['s.url']['checked'])) {
2062 print "<td>".dol_print_url($obj->url, '', 0, 1)."</td>\n";
2063 if (!$i) {
2064 $totalarray['nbfield']++;
2065 }
2066 }
2067 if (!empty($arrayfields['s.siren']['checked'])) {
2068 print "<td>".$obj->idprof1."</td>\n";
2069 if (!$i) {
2070 $totalarray['nbfield']++;
2071 }
2072 }
2073 if (!empty($arrayfields['s.siret']['checked'])) {
2074 print "<td>".$obj->idprof2."</td>\n";
2075 if (!$i) {
2076 $totalarray['nbfield']++;
2077 }
2078 }
2079 if (!empty($arrayfields['s.ape']['checked'])) {
2080 print "<td>".$obj->idprof3."</td>\n";
2081 if (!$i) {
2082 $totalarray['nbfield']++;
2083 }
2084 }
2085 if (!empty($arrayfields['s.idprof4']['checked'])) {
2086 print "<td>".$obj->idprof4."</td>\n";
2087 if (!$i) {
2088 $totalarray['nbfield']++;
2089 }
2090 }
2091 if (!empty($arrayfields['s.idprof5']['checked'])) {
2092 print "<td>".$obj->idprof5."</td>\n";
2093 if (!$i) {
2094 $totalarray['nbfield']++;
2095 }
2096 }
2097 if (!empty($arrayfields['s.idprof6']['checked'])) {
2098 print "<td>".$obj->idprof6."</td>\n";
2099 if (!$i) {
2100 $totalarray['nbfield']++;
2101 }
2102 }
2103 // VAT
2104 if (!empty($arrayfields['s.tva_intra']['checked'])) {
2105 print '<td class="tdoverflowmax125" title="'.dol_escape_htmltag($companystatic->tva_intra).'">';
2106 if ($companystatic->tva_intra && !isValidVATID($companystatic)) {
2107 print img_warning("BadVATNumber", '', 'pictofixedwidth');
2108 }
2109 print $companystatic->tva_intra;
2110 print "</td>\n";
2111 if (!$i) {
2112 $totalarray['nbfield']++;
2113 }
2114 }
2115 // Nature
2116 if (!empty($arrayfields['customerorsupplier']['checked'])) {
2117 print '<td class="center">';
2118 print $companystatic->getTypeUrl(1);
2119 print '</td>';
2120 if (!$i) {
2121 $totalarray['nbfield']++;
2122 }
2123 }
2124 // Prospect level
2125 if (!empty($arrayfields['s.fk_prospectlevel']['checked'])) {
2126 print '<td class="center nowraponall">';
2127 print $companystatic->getLibProspLevel();
2128 print "</td>";
2129 if (!$i) {
2130 $totalarray['nbfield']++;
2131 }
2132 }
2133 // Prospect status
2134 if (!empty($arrayfields['s.fk_stcomm']['checked'])) {
2135 print '<td class="center nowraponall">';
2136
2137 $prospectid = $obj->rowid;
2138 $statusprospect = $obj->stcomm_id;
2139
2140 $formcompany->selectProspectStatus('status_prospect', $prospectstatic, $statusprospect, $prospectid);
2141
2142 print '</td>';
2143 if (!$i) {
2144 $totalarray['nbfield']++;
2145 }
2146 }
2147 // Parent company
2148 if (!empty($arrayfields['s2.nom']['checked'])) {
2149 print '<td class="center tdoverflowmax100">';
2150 if ($companystatic->parent > 0) {
2151 $companyparent->fetch($companystatic->parent);
2152 print $companyparent->getNomUrl(1);
2153 }
2154 print "</td>";
2155 if (!$i) {
2156 $totalarray['nbfield']++;
2157 }
2158 }
2159 // Extra fields
2160 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
2161 // Fields from hook
2162 $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray);
2163 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
2164 print $hookmanager->resPrint;
2165 // Date creation
2166 if (!empty($arrayfields['s.datec']['checked'])) {
2167 print '<td class="center nowraponall">';
2168 print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser');
2169 print '</td>';
2170 if (!$i) {
2171 $totalarray['nbfield']++;
2172 }
2173 }
2174 // Date modification
2175 if (!empty($arrayfields['s.tms']['checked'])) {
2176 print '<td class="center nowraponall">';
2177 print dol_print_date($db->jdate($obj->date_modification), 'dayhour', 'tzuser');
2178 print '</td>';
2179 if (!$i) {
2180 $totalarray['nbfield']++;
2181 }
2182 }
2183 // Note public
2184 if (!empty($arrayfields['s.note_public']['checked'])) {
2185 print '<td class="flat maxwidth250imp">';
2186 print dolPrintHTML(dolGetFirstLineOfText($obj->note_public), 5);
2187 print '</td>';
2188 if (!$i) {
2189 $totalarray['nbfield']++;
2190 }
2191 }
2192 // Note private
2193 if (!empty($arrayfields['s.note_private']['checked'])) {
2194 print '<td class="flat maxwidth250imp">';
2195 print dolPrintHTML(dolGetFirstLineOfText($obj->note_private), 5);
2196 print '</td>';
2197 if (!$i) {
2198 $totalarray['nbfield']++;
2199 }
2200 }
2201 // Status
2202 if (!empty($arrayfields['s.status']['checked'])) {
2203 print '<td class="center nowraponall">'.$companystatic->getLibStatut(5).'</td>';
2204 if (!$i) {
2205 $totalarray['nbfield']++;
2206 }
2207 }
2208 // Import key
2209 if (!empty($arrayfields['s.import_key']['checked'])) {
2210 print '<td class="tdoverflowmax125" title="'.dol_escape_htmltag($obj->import_key).'">';
2211 print dol_escape_htmltag($obj->import_key);
2212 print "</td>\n";
2213 if (!$i) {
2214 $totalarray['nbfield']++;
2215 }
2216 }
2217 // Action column (Show the massaction button only when this page is not opend from the Extended POS)
2218 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2219 print '<td class="nowrap center actioncolumn">';
2220 if (($massactionbutton || $massaction) && $contextpage != 'poslist') { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
2221 $selected = 0;
2222 if (in_array($obj->rowid, $arrayofselected)) {
2223 $selected = 1;
2224 }
2225 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
2226 }
2227 print '</td>';
2228 if (!$i) {
2229 $totalarray['nbfield']++;
2230 }
2231 }
2232
2233 print '</tr>'."\n";
2234 }
2235 $i++;
2236}
2237
2238// Show total line
2239include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
2240
2241// If no record found
2242if ($num == 0) {
2243 $colspan = 1;
2244 foreach ($arrayfields as $key => $val) {
2245 if (!empty($val['checked'])) {
2246 $colspan++;
2247 }
2248 }
2249 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
2250}
2251
2252$db->free($resql);
2253
2254$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql);
2255$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
2256print $hookmanager->resPrint;
2257
2258print '</table>'."\n";
2259print '</div>'."\n";
2260
2261// Line that calls the select_status function by passing it js as the 5th parameter in order to activate the js script
2262$formcompany->selectProspectStatus('status_prospect', $prospectstatic, null, null, "js");
2263
2264print '</form>'."\n";
2265
2266// End of page
2267llxFooter();
2268$db->close();
$id
Definition account.php:39
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:70
$object ref
Definition info.php:79
Class to manage customers or prospects.
Class to manage standard extra fields.
Class to manage invoices.
Class to manage forms for categories.
Class to build HTML component for third parties management Only common components are here.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation de composants html autre Only common components are here.
Class to manage third parties objects (customers, suppliers, prospects...)
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
dolExplodeIntoArray($string, $delimiter=';', $kv='=')
Split a string with 2 keys into key array.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
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...
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
print_barre_liste($title, $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.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
get_htmloutput_mesg($mesgstring='', $mesgarray=[], $style='ok', $keepembedded=0)
Get formatted messages to output (Used to show messages on html output).
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.