dolibarr 20.0.4
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 Frédéric France <frederic.france@netlogic.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 *
20 * This program is free software; you can redistribute it and/or modify
21 * it under the terms of the GNU General Public License as published by
22 * the Free Software Foundation; either version 3 of the License, or
23 * (at your option) any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28 * GNU General Public License for more details.
29 *
30 * You should have received a copy of the GNU General Public License
31 * along with this program. If not, see <https://www.gnu.org/licenses/>.
32 */
33
40// Load Dolibarr environment
41require_once '../main.inc.php';
42include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
43require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
44require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
45require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
46require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
47require_once DOL_DOCUMENT_ROOT.'/societe/class/client.class.php';
48if (isModEnabled('category')) {
49 require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
50 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcategory.class.php';
51}
52
53// Load translation files required by the page
54$langs->loadLangs(array("companies", "commercial", "customers", "suppliers", "bills", "compta", "categories", "cashdesk"));
55
56
57// Get parameters
58$action = GETPOST('action', 'aZ09');
59$massaction = GETPOST('massaction', 'alpha');
60$show_files = GETPOSTINT('show_files');
61$confirm = GETPOST('confirm', 'alpha');
62$toselect = GETPOST('toselect', 'array');
63$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'thirdpartylist';
64$optioncss = GETPOST('optioncss', 'alpha');
65if ($contextpage == 'poslist') {
66 $optioncss = 'print';
67}
68$mode = GETPOST("mode", 'alpha');
69
70// search fields
71$search_all = trim(GETPOST('search_all', 'alphanohtml') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml'));
72$search_cti = preg_replace('/^0+/', '', preg_replace('/[^0-9]/', '', GETPOST('search_cti', 'alphanohtml'))); // Phone number without any special chars
73
74$search_id = GETPOST("search_id", 'int');
75$search_nom = trim(GETPOST("search_nom", 'restricthtml'));
76$search_alias = trim(GETPOST("search_alias", 'restricthtml'));
77$search_nom_only = trim(GETPOST("search_nom_only", 'restricthtml'));
78$search_barcode = trim(GETPOST("search_barcode", 'alpha'));
79$search_customer_code = trim(GETPOST('search_customer_code', 'alpha'));
80$search_supplier_code = trim(GETPOST('search_supplier_code', 'alpha'));
81$search_account_customer_code = trim(GETPOST('search_account_customer_code', 'alpha'));
82$search_account_supplier_code = trim(GETPOST('search_account_supplier_code', 'alpha'));
83$search_address = trim(GETPOST('search_address', 'alpha'));
84$search_zip = trim(GETPOST("search_zip", 'alpha'));
85$search_town = trim(GETPOST("search_town", 'alpha'));
86$search_state = trim(GETPOST("search_state", 'alpha'));
87$search_region = trim(GETPOST("search_region", 'alpha'));
88$search_email = trim(GETPOST('search_email', 'alpha'));
89$search_phone = trim(GETPOST('search_phone', 'alpha'));
90$search_phone_mobile = trim(GETPOST('search_phone_mobile', 'alpha'));
91$search_fax = trim(GETPOST('search_fax', 'alpha'));
92$search_url = trim(GETPOST('search_url', 'alpha'));
93$search_idprof1 = trim(GETPOST('search_idprof1', 'alpha'));
94$search_idprof2 = trim(GETPOST('search_idprof2', 'alpha'));
95$search_idprof3 = trim(GETPOST('search_idprof3', 'alpha'));
96$search_idprof4 = trim(GETPOST('search_idprof4', 'alpha'));
97$search_idprof5 = trim(GETPOST('search_idprof5', 'alpha'));
98$search_idprof6 = trim(GETPOST('search_idprof6', 'alpha'));
99$search_vat = trim(GETPOST('search_vat', 'alpha'));
100$search_sale = GETPOSTINT("search_sale");
101$search_categ_cus = GETPOSTINT("search_categ_cus");
102$search_categ_sup = GETPOSTINT("search_categ_sup");
103$searchCategoryCustomerOperator = GETPOSTINT('search_category_customer_operator');
104$searchCategorySupplierOperator = GETPOSTINT('search_category_supplier_operator');
105if (GETPOSTISSET('formfilteraction')) {
106 $searchCategoryCustomerOperator = GETPOST('search_category_customer_operator');
107 $searchCategorySupplierOperator = GETPOST('search_category_supplier_operator');
108} elseif (getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT')) {
109 $searchCategoryCustomerOperator = getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT');
110 $searchCategorySupplierOperator = getDolGlobalString('MAIN_SEARCH_CAT_OR_BY_DEFAULT');
111}
112$searchCategoryCustomerList = GETPOST('search_category_customer_list', 'array');
113if (!empty($search_categ_cus) && empty($searchCategoryCustomerList)) {
114 $searchCategoryCustomerList = array($search_categ_cus);
115}
116$searchCategorySupplierList = GETPOST('search_category_supplier_list', 'array');
117if (!empty($search_categ_sup) && empty($searchCategorySupplierList)) {
118 $searchCategorySupplierList = array($search_categ_sup);
119}
120$search_country = GETPOST("search_country", 'aZ09');
121$search_type_thirdparty = GETPOST("search_type_thirdparty", 'intcomma');
122$search_price_level = GETPOST('search_price_level', 'int');
123$search_staff = GETPOST("search_staff", 'int');
124$search_legalform = GETPOST("search_legalform", 'int');
125$search_status = GETPOST("search_status", 'intcomma');
126$search_type = GETPOST('search_type', 'alpha');
127$search_level = GETPOST("search_level", "array:alpha");
128$search_stcomm = GETPOST('search_stcomm', "array:int");
129$search_import_key = trim(GETPOST("search_import_key", "alpha"));
130$search_parent_name = trim(GETPOST('search_parent_name', 'alpha'));
131
132$search_date_creation_startmonth = GETPOSTINT('search_date_creation_startmonth');
133$search_date_creation_startyear = GETPOSTINT('search_date_creation_startyear');
134$search_date_creation_startday = GETPOSTINT('search_date_creation_startday');
135$search_date_creation_start = dol_mktime(0, 0, 0, $search_date_creation_startmonth, $search_date_creation_startday, $search_date_creation_startyear); // Use tzserver
136$search_date_creation_endmonth = GETPOSTINT('search_date_creation_endmonth');
137$search_date_creation_endyear = GETPOSTINT('search_date_creation_endyear');
138$search_date_creation_endday = GETPOSTINT('search_date_creation_endday');
139$search_date_creation_end = dol_mktime(23, 59, 59, $search_date_creation_endmonth, $search_date_creation_endday, $search_date_creation_endyear); // Use tzserver
140
141$search_date_modif_startmonth = GETPOSTINT('search_date_modif_startmonth');
142$search_date_modif_startyear = GETPOSTINT('search_date_modif_startyear');
143$search_date_modif_startday = GETPOSTINT('search_date_modif_startday');
144$search_date_modif_start = dol_mktime(0, 0, 0, $search_date_modif_startmonth, $search_date_modif_startday, $search_date_modif_startyear); // Use tzserver
145$search_date_modif_endmonth = GETPOSTINT('search_date_modif_endmonth');
146$search_date_modif_endyear = GETPOSTINT('search_date_modif_endyear');
147$search_date_modif_endday = GETPOSTINT('search_date_modif_endday');
148$search_date_modif_end = dol_mktime(23, 59, 59, $search_date_modif_endmonth, $search_date_modif_endday, $search_date_modif_endyear); // Use tzserver
149
150$type = GETPOST('type', 'alpha');
151$place = GETPOST('place', 'aZ09') ? GETPOST('place', 'aZ09') : '0'; // $place is string id of table for Bar or Restaurant
152
153$diroutputmassaction = $conf->societe->dir_output.'/temp/massgeneration/'.$user->id;
154
155// Load variable for pagination
156$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
157$sortfield = GETPOST('sortfield', 'aZ09comma');
158$sortorder = GETPOST('sortorder', 'aZ09comma');
159$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
160if (!$sortorder) {
161 $sortorder = "ASC";
162}
163if (!$sortfield) {
164 $sortfield = "s.nom";
165}
166if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
167 // If $page is not defined, or '' or -1 or if we click on clear filters
168 $page = 0;
169}
170$offset = $limit * $page;
171$pageprev = $page - 1;
172$pagenext = $page + 1;
173
174if ($type == 'c') {
175 if (empty($contextpage) || $contextpage == 'thirdpartylist') {
176 $contextpage = 'customerlist';
177 }
178 if ($search_type == '') {
179 $search_type = '1,3';
180 }
181}
182if ($type == 'p') {
183 if (empty($contextpage) || $contextpage == 'thirdpartylist') {
184 $contextpage = 'prospectlist';
185 }
186 if ($search_type == '') {
187 $search_type = '2,3';
188 }
189}
190if ($type == 't') {
191 if (empty($contextpage) || $contextpage == 'poslist') {
192 $contextpage = 'poslist';
193 }
194 if ($search_type == '') {
195 $search_type = '1,2,3';
196 }
197}
198if ($type == 'f') {
199 if (empty($contextpage) || $contextpage == 'thirdpartylist') {
200 $contextpage = 'supplierlist';
201 }
202 if ($search_type == '') {
203 $search_type = '4';
204 }
205}
206// Initialize technical objects to manage hooks of page. Note that conf->hooks_modules contains array of hook context
207$object = new Societe($db);
208$extrafields = new ExtraFields($db);
209$hookmanager->initHooks(array($contextpage, 'thirdpartylist'));
210
211// Fetch optionals attributes and labels
212$extrafields->fetch_name_optionals_label($object->table_element);
213
214$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
215
216// List of fields to search into when doing a "search in all"
217$fieldstosearchall = array(
218 's.nom' => "ThirdPartyName",
219 's.name_alias' => "AliasNameShort",
220 's.code_client' => "CustomerCode",
221 's.code_fournisseur' => "SupplierCode",
222 's.code_compta' => "CustomerAccountancyCodeShort",
223 's.code_compta_fournisseur' => "SupplierAccountancyCodeShort",
224 's.zip' => "Zip",
225 's.town' => "Town",
226 's.email' => "EMail",
227 's.url' => "URL",
228 's.tva_intra' => "VATIntra",
229 's.siren' => "ProfId1",
230 's.siret' => "ProfId2",
231 's.ape' => "ProfId3",
232 's.phone' => "Phone",
233 's.phone_mobile' => "PhoneMobile",
234 's.fax' => "Fax",
235);
236if (($tmp = $langs->transnoentities("ProfId4".$mysoc->country_code)) && $tmp != "ProfId4".$mysoc->country_code && $tmp != '-') {
237 $fieldstosearchall['s.idprof4'] = 'ProfId4';
238}
239if (($tmp = $langs->transnoentities("ProfId5".$mysoc->country_code)) && $tmp != "ProfId5".$mysoc->country_code && $tmp != '-') {
240 $fieldstosearchall['s.idprof5'] = 'ProfId5';
241}
242if (($tmp = $langs->transnoentities("ProfId6".$mysoc->country_code)) && $tmp != "ProfId6".$mysoc->country_code && $tmp != '-') {
243 $fieldstosearchall['s.idprof6'] = 'ProfId6';
244}
245if (isModEnabled('barcode')) {
246 $fieldstosearchall['s.barcode'] = 'Gencod';
247}
248// Personalized search criteria. Example: $conf->global->THIRDPARTY_QUICKSEARCH_ON_FIELDS = 's.nom=ThirdPartyName;s.name_alias=AliasNameShort;s.code_client=CustomerCode'
249if (getDolGlobalString('THIRDPARTY_QUICKSEARCH_ON_FIELDS')) {
250 $fieldstosearchall = dolExplodeIntoArray($conf->global->THIRDPARTY_QUICKSEARCH_ON_FIELDS);
251}
252
253
254// Define list of fields to show into list
255$checkedcustomercode = (in_array($contextpage, array('thirdpartylist', 'customerlist', 'prospectlist', 'poslist')) ? 1 : 0);
256$checkedsuppliercode = (in_array($contextpage, array('supplierlist')) ? 1 : 0);
257$checkedcustomeraccountcode = (in_array($contextpage, array('customerlist')) ? 1 : 0);
258$checkedsupplieraccountcode = (in_array($contextpage, array('supplierlist')) ? 1 : 0);
259$checkedtypetiers = 1;
260$checkedprofid1 = 0;
261$checkedprofid2 = 0;
262$checkedprofid3 = 0;
263$checkedprofid4 = 0;
264$checkedprofid5 = 0;
265$checkedprofid6 = 0;
266//$checkedprofid4=((($tmp = $langs->transnoentities("ProfId4".$mysoc->country_code)) && $tmp != "ProfId4".$mysoc->country_code && $tmp != '-') ? 1 : 0);
267//$checkedprofid5=((($tmp = $langs->transnoentities("ProfId5".$mysoc->country_code)) && $tmp != "ProfId5".$mysoc->country_code && $tmp != '-') ? 1 : 0);
268//$checkedprofid6=((($tmp = $langs->transnoentities("ProfId6".$mysoc->country_code)) && $tmp != "ProfId6".$mysoc->country_code && $tmp != '-') ? 1 : 0);
269$checkprospectlevel = (in_array($contextpage, array('prospectlist')) ? 1 : 0);
270$checkstcomm = (in_array($contextpage, array('prospectlist')) ? 1 : 0);
271$arrayfields = array(
272 's.rowid' => array('label' => "TechnicalID", 'position' => 1, 'checked' => -1, 'enabled' => 1),
273 's.nom' => array('label' => "ThirdPartyName", 'position' => 2, 'checked' => 1),
274 's.name_alias' => array('label' => "AliasNameShort", 'position' => 3, 'checked' => 1),
275 's.barcode' => array('label' => "Gencod", 'position' => 5, 'checked' => 1, 'enabled' => (isModEnabled('barcode'))),
276 's.code_client' => array('label' => "CustomerCodeShort", 'position' => 10, 'checked' => $checkedcustomercode),
277 's.code_fournisseur' => array('label' => "SupplierCodeShort", 'position' => 11, 'checked' => $checkedsuppliercode, 'enabled' => (isModEnabled("supplier_order") || isModEnabled("supplier_invoice"))),
278 's.code_compta' => array('label' => "CustomerAccountancyCodeShort", 'position' => 13, 'checked' => $checkedcustomeraccountcode),
279 's.code_compta_fournisseur' => array('label' => "SupplierAccountancyCodeShort", 'position' => 14, 'checked' => $checkedsupplieraccountcode, 'enabled' => (isModEnabled("supplier_order") || isModEnabled("supplier_invoice"))),
280 's.address' => array('label' => "Address", 'position' => 19, 'checked' => 0),
281 's.zip' => array('label' => "Zip", 'position' => 20, 'checked' => 1),
282 's.town' => array('label' => "Town", 'position' => 21, 'checked' => 0),
283 'state.nom' => array('label' => "State", 'position' => 22, 'checked' => 0),
284 'region.nom' => array('label' => "Region", 'position' => 23, 'checked' => 0),
285 'country.code_iso' => array('label' => "Country", 'position' => 24, 'checked' => 0),
286 's.email' => array('label' => "Email", 'position' => 25, 'checked' => 0),
287 's.url' => array('label' => "Url", 'position' => 26, 'checked' => 0),
288 's.phone' => array('label' => "Phone", 'position' => 27, 'checked' => 1),
289 's.fax' => array('label' => "Fax", 'position' => 28, 'checked' => 0),
290 'typent.code' => array('label' => "ThirdPartyType", 'position' => 29, 'checked' => $checkedtypetiers),
291 'staff.code' => array('label' => "Workforce", 'position' => 31, 'checked' => 0),
292 'legalform.code' => array('label' => 'JuridicalStatus', 'position'=>32, 'checked' => 0),
293 's.phone_mobile' => array('label' => "PhoneMobile", 'position' => 35, 'checked' => 0),
294 's.siren' => array('label' => "ProfId1Short", 'position' => 40, 'checked' => $checkedprofid1),
295 's.siret' => array('label' => "ProfId2Short", 'position' => 41, 'checked' => $checkedprofid2),
296 's.ape' => array('label' => "ProfId3Short", 'position' => 42, 'checked' => $checkedprofid3),
297 's.idprof4' => array('label' => "ProfId4Short", 'position' => 43, 'checked' => $checkedprofid4),
298 's.idprof5' => array('label' => "ProfId5Short", 'position' => 44, 'checked' => $checkedprofid5),
299 's.idprof6' => array('label' => "ProfId6Short", 'position' => 45, 'checked' => $checkedprofid6),
300 's.tva_intra' => array('label' => "VATIntraShort", 'position' => 50, 'checked' => 0),
301 'customerorsupplier' => array('label' => 'NatureOfThirdParty', 'position' => 61, 'checked' => 1),
302 's.fk_prospectlevel' => array('label' => "ProspectLevel", 'position' => 62, 'checked' => $checkprospectlevel),
303 's.fk_stcomm' => array('label' => "StatusProsp", 'position' => 63, 'checked' => $checkstcomm),
304 's2.nom' => array('label' => 'ParentCompany', 'position' => 64, 'checked' => 0),
305 's.datec' => array('label' => "DateCreation", 'checked' => 0, 'position' => 500),
306 's.tms' => array('label' => "DateModificationShort", 'checked' => 0, 'position' => 500),
307 's.status' => array('label' => "Status", 'checked' => 1, 'position' => 1000),
308 's.import_key' => array('label' => "ImportId", 'checked' => 0, 'position' => 1100),
309);
310if (getDolGlobalString('PRODUIT_MULTIPRICES') || getDolGlobalString('PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES')) {
311 $arrayfields['s.price_level'] = array('label' => "PriceLevel", 'position' => 30, 'checked' => 0);
312}
313
314// Add non object fields to fields for list
315$arrayfields['sales.representative'] = array('label' => $langs->trans("SalesRepresentatives"), 'checked' => 1, 'position' => 12);
316
317// Extra fields
318include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
319
320$object->fields = dol_sort_array($object->fields, 'position');
321$arrayfields = dol_sort_array($arrayfields, 'position');
322'@phan-var-force array<string,array{label:string,checked?:int<0,1>,position?:int,help?:string}> $arrayfields'; // dol_sort_array looses type for Phan
323
324// Security check
325$socid = GETPOSTINT('socid');
326if ($user->socid) {
327 $socid = $user->socid;
328}
329$result = restrictedArea($user, 'societe', $socid, '');
330
331
332/*
333 * Actions
334 */
335
336if ($action == "change" && $user->hasRight('takepos', 'run')) { // Change customer for TakePOS
337 $idcustomer = GETPOSTINT('idcustomer');
338
339 // Check if draft invoice already exists, if not create it
340 $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."facture where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' AND entity IN (".getEntity('invoice').")";
341 $result = $db->query($sql);
342 $num_lines = $db->num_rows($result);
343 if ($num_lines == 0) {
344 require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
345 $invoice = new Facture($db);
346 $constforthirdpartyid = 'CASHDESK_ID_THIRDPARTY'.$_SESSION["takeposterminal"];
347 $invoice->socid = getDolGlobalInt($constforthirdpartyid);
348 $invoice->date = dol_now();
349 $invoice->module_source = 'takepos';
350 $invoice->pos_source = $_SESSION["takeposterminal"];
351 $placeid = $invoice->create($user);
352 $sql = "UPDATE ".MAIN_DB_PREFIX."facture set ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' where rowid = ".((int) $placeid);
353 $db->query($sql);
354 }
355
356 $sql = "UPDATE ".MAIN_DB_PREFIX."facture set fk_soc=".((int) $idcustomer)." where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")'";
357 $resql = $db->query($sql); ?>
358 <script>
359 console.log("Reload page invoice.php with place=<?php print $place; ?>");
360 parent.$("#poslines").load("invoice.php?place=<?php print $place; ?>", function() {
361 //parent.$("#poslines").scrollTop(parent.$("#poslines")[0].scrollHeight);
362 <?php if (!$resql) { ?>
363 alert('Error failed to update customer on draft invoice.');
364 <?php } ?>
365 parent.$.colorbox.close(); /* Close the popup */
366 });
367 </script>
368 <?php
369 exit;
370}
371
372if (GETPOST('cancel', 'alpha')) {
373 $action = 'list';
374 $massaction = '';
375}
376if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
377 $massaction = '';
378}
379
380$parameters = array('arrayfields' => &$arrayfields);
381$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
382if ($reshook < 0) {
383 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
384}
385
386if (empty($reshook)) {
387 // Selection of new fields
388 include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
389
390 // Purge search criteria
391 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
392 $search_id = '';
393 $search_nom = '';
394 $search_alias = '';
395 $search_categ_cus = 0;
396 $search_categ_sup = 0;
397 $searchCategoryCustomerOperator = 0;
398 $searchCategorySupplierOperator = 0;
399 $searchCategoryCustomerList = array();
400 $searchCategorySupplierList = array();
401 $search_sale = '';
402 $search_barcode = "";
403 $search_customer_code = '';
404 $search_supplier_code = '';
405 $search_account_customer_code = '';
406 $search_account_supplier_code = '';
407 $search_address = '';
408 $search_zip = "";
409 $search_town = "";
410 $search_state = "";
411 $search_region = "";
412 $search_country = '';
413 $search_email = '';
414 $search_phone = '';
415 $search_phone_mobile = '';
416 $search_fax = '';
417 $search_url = '';
418 $search_idprof1 = '';
419 $search_idprof2 = '';
420 $search_idprof3 = '';
421 $search_idprof4 = '';
422 $search_idprof5 = '';
423 $search_idprof6 = '';
424 $search_vat = '';
425 $search_type = '';
426 $search_price_level = '';
427 $search_type_thirdparty = '';
428 $search_staff = '';
429 $search_legalform = '';
430 $search_date_creation_startmonth = "";
431 $search_date_creation_startyear = "";
432 $search_date_creation_startday = "";
433 $search_date_creation_start = "";
434 $search_date_creation_endmonth = "";
435 $search_date_creation_endyear = "";
436 $search_date_creation_endday = "";
437 $search_date_creation_end = "";
438 $search_date_modif_startmonth = "";
439 $search_date_modif_startyear = "";
440 $search_date_modif_startday = "";
441 $search_date_modif_start = "";
442 $search_date_modif_endmonth = "";
443 $search_date_modif_endyear = "";
444 $search_date_modif_endday = "";
445 $search_date_modif_end = "";
446 $search_status = -1;
447 $search_stcomm = '';
448 $search_level = '';
449 $search_parent_name = '';
450 $search_import_key = '';
451
452 $search_all = '';
453 $toselect = array();
454 $search_array_options = array();
455 }
456
457 // Mass actions
458 $objectclass = 'Societe';
459 $objectlabel = 'ThirdParty';
460 $permissiontoread = $user->hasRight('societe', 'lire');
461 $permissiontodelete = $user->hasRight('societe', 'supprimer');
462 $permissiontoadd = $user->hasRight("societe", "creer");
463 $uploaddir = $conf->societe->dir_output;
464 include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
465
466 if ($action == 'setstcomm') {
467 $object = new Client($db);
468 $result = $object->fetch(GETPOST('stcommsocid'));
469 $object->stcomm_id = dol_getIdFromCode($db, GETPOST('stcomm', 'alpha'), 'c_stcomm');
470 $result = $object->update($object->id, $user);
471 if ($result < 0) {
472 setEventMessages($object->error, $object->errors, 'errors');
473 }
474
475 $action = '';
476 }
477}
478
479if ($search_status == '' && empty($search_all)) {
480 $search_status = 1; // display active thirdparty only by default
481}
482
483
484
485/*
486 * View
487 */
488
489/*
490 REM: Rules on permissions to see thirdparties
491 Internal or External user + No permission to see customers => See nothing
492 Internal user socid=0 + Permission to see ALL customers => See all thirdparties
493 Internal user socid=0 + No permission to see ALL customers => See only thirdparties linked to user that are sale representative
494 External user socid=x + Permission to see ALL customers => Can see only himself
495 External user socid=x + No permission to see ALL customers => Can see only himself
496 */
497
498$form = new Form($db);
499$formother = new FormOther($db);
500$companystatic = new Societe($db);
501$companyparent = new Societe($db);
502$formcompany = new FormCompany($db);
503$prospectstatic = new Client($db);
504$prospectstatic->client = 2;
505$prospectstatic->loadCacheOfProspStatus();
506
507$now = dol_now();
508
509$title = $langs->trans("ThirdParties");
510if ($type == 'c' && (empty($search_type) || ($search_type == '1,3'))) {
511 $title = $langs->trans("Customers");
512}
513if ($type == 'p' && (empty($search_type) || ($search_type == '2,3'))) {
514 $title = $langs->trans("Prospects");
515}
516if ($type == 'f' && (empty($search_type) || ($search_type == '4'))) {
517 $title = $langs->trans("Suppliers");
518}
519$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas';
520
521
522// Select every potentials, and note each potentials which fit in search parameters
523$tab_level = array();
524$sql = "SELECT code, label, sortorder";
525$sql .= " FROM ".MAIN_DB_PREFIX."c_prospectlevel";
526$sql .= " WHERE active > 0";
527$sql .= " ORDER BY sortorder";
528$resql = $db->query($sql);
529if ($resql) {
530 while ($obj = $db->fetch_object($resql)) {
531 // Compute level text
532 $level = $langs->trans($obj->code);
533 if ($level == $obj->code) {
534 $level = $langs->trans($obj->label);
535 }
536 $tab_level[$obj->code] = $level;
537 }
538} else {
539 dol_print_error($db);
540}
541
542// Build and execute select
543// --------------------------------------------------------------------
544$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,";
545$sql .= " s.entity,";
546$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,";
547$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,";
548$sql .= " s.tms as date_modification, s.datec as date_creation, s.import_key,";
549$sql .= " s.code_compta, s.code_compta_fournisseur, s.parent as fk_parent,s.price_level,";
550$sql .= " s2.nom as name2,";
551$sql .= " typent.code as typent_code,";
552$sql .= " staff.code as staff_code,";
553$sql .= " s.fk_forme_juridique as legalform_code,";
554$sql .= " country.code as country_code, country.label as country_label,";
555$sql .= " state.code_departement as state_code, state.nom as state_name,";
556$sql .= " region.code_region as region_code, region.nom as region_name";
557// Add fields from extrafields
558if (!empty($extrafields->attributes[$object->table_element]['label'])) {
559 foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
560 $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key." as options_".$key : '');
561 }
562}
563// Add fields from hooks
564$parameters = array();
565$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
566$sql .= $hookmanager->resPrint;
567$sql = preg_replace('/,\s*$/', '', $sql);
568//$sql .= ", COUNT(rc.rowid) as anotherfield";
569
570$sqlfields = $sql; // $sql fields to remove for count total
571
572$sql .= " FROM ".MAIN_DB_PREFIX."societe as s";
573$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s2 ON s.parent = s2.rowid";
574if (!empty($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
575 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (s.rowid = ef.fk_object)";
576}
577
578$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)";
579$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)";
580$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_effectif as staff on (staff.id = s.fk_effectif)";
581//$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_forme_juridique as legalform on (legalform.rowid = s.fk_forme_juridique)";
582$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)";
583$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_regions as region on (region.code_region = state.fk_region)";
584$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."c_stcomm as st ON s.fk_stcomm = st.id";
585// Add table from hooks
586$parameters = array();
587$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
588$sql .= $hookmanager->resPrint;
589$sql .= " WHERE s.entity IN (".getEntity('societe').")";
590if (!$user->hasRight('fournisseur', 'lire')) {
591 $sql .= " AND (s.fournisseur <> 1 OR s.client <> 0)"; // client=0, fournisseur=0 must be visible
592}
593
594//Force the sales representative if they don't have permissions
595if (!$user->hasRight('societe', 'client', 'voir') && !$socid) {
596 $search_sale = $user->id;
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'))) {
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}
1533// Status
1534if (!empty($arrayfields['s.status']['checked'])) {
1535 print '<td class="liste_titre center minwidth75imp parentonrightofpage">';
1536 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);
1537 print '</td>';
1538}
1539if (!empty($arrayfields['s.import_key']['checked'])) {
1540 print '<td class="liste_titre center">';
1541 print '<input class="flat searchstring maxwidth50" type="text" name="search_import_key" value="'.dol_escape_htmltag($search_import_key).'">';
1542 print '</td>';
1543}
1544// Action column
1545if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1546 print '<td class="liste_titre center maxwidthsearch actioncolumn">';
1547 $searchpicto = $form->showFilterButtons();
1548 print $searchpicto;
1549 print '</td>';
1550}
1551
1552print '</tr>'."\n";
1553
1554$totalarray = array();
1555$totalarray['nbfield'] = 0;
1556
1557// Fields title label
1558// --------------------------------------------------------------------
1559print '<tr class="liste_titre">';
1560// Action column
1561if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1562 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
1563 $totalarray['nbfield']++;
1564}
1565if (!empty($arrayfields['s.rowid']['checked'])) {
1566 print_liste_field_titre($arrayfields['s.rowid']['label'], $_SERVER["PHP_SELF"], "s.rowid", "", $param, ' data-key="id"', $sortfield, $sortorder, '');
1567 $totalarray['nbfield']++;
1568}
1569if (!empty($arrayfields['s.nom']['checked'])) {
1570 print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"], "s.nom", "", $param, ' data-key="ref"', $sortfield, $sortorder, ' ');
1571 $totalarray['nbfield']++;
1572}
1573if (!empty($arrayfields['s.name_alias']['checked'])) {
1574 print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"], "s.name_alias", "", $param, "", $sortfield, $sortorder);
1575 $totalarray['nbfield']++;
1576}
1577if (!empty($arrayfields['s.barcode']['checked'])) {
1578 print_liste_field_titre($arrayfields['s.barcode']['label'], $_SERVER["PHP_SELF"], "s.barcode", $param, '', '', $sortfield, $sortorder);
1579 $totalarray['nbfield']++;
1580}
1581if (!empty($arrayfields['s.code_client']['checked'])) {
1582 print_liste_field_titre($arrayfields['s.code_client']['label'], $_SERVER["PHP_SELF"], "s.code_client", "", $param, '', $sortfield, $sortorder);
1583 $totalarray['nbfield']++;
1584}
1585if (!empty($arrayfields['s.code_fournisseur']['checked'])) {
1586 print_liste_field_titre($arrayfields['s.code_fournisseur']['label'], $_SERVER["PHP_SELF"], "s.code_fournisseur", "", $param, '', $sortfield, $sortorder);
1587 $totalarray['nbfield']++;
1588}
1589if (!empty($arrayfields['s.code_compta']['checked'])) {
1590 print_liste_field_titre($arrayfields['s.code_compta']['label'], $_SERVER["PHP_SELF"], "s.code_compta", "", $param, '', $sortfield, $sortorder);
1591 $totalarray['nbfield']++;
1592}
1593if (!empty($arrayfields['s.code_compta_fournisseur']['checked'])) {
1594 print_liste_field_titre($arrayfields['s.code_compta_fournisseur']['label'], $_SERVER["PHP_SELF"], "s.code_compta_fournisseur", "", $param, '', $sortfield, $sortorder);
1595 $totalarray['nbfield']++;
1596}
1597if (!empty($arrayfields['s.address']['checked'])) {
1598 print_liste_field_titre($arrayfields['s.address']['label'], $_SERVER['PHP_SELF'], 's.address', '', $param, '', $sortfield, $sortorder);
1599 $totalarray['nbfield']++;
1600}
1601if (!empty($arrayfields['sales.representative']['checked'])) {
1602 print_liste_field_titre($arrayfields['sales.representative']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder);
1603 $totalarray['nbfield']++;
1604}
1605if (!empty($arrayfields['s.zip']['checked'])) {
1606 print_liste_field_titre($arrayfields['s.zip']['label'], $_SERVER["PHP_SELF"], "s.zip", "", $param, '', $sortfield, $sortorder);
1607 $totalarray['nbfield']++;
1608}
1609if (!empty($arrayfields['s.town']['checked'])) {
1610 print_liste_field_titre($arrayfields['s.town']['label'], $_SERVER["PHP_SELF"], "s.town", "", $param, '', $sortfield, $sortorder);
1611 $totalarray['nbfield']++;
1612}
1613if (!empty($arrayfields['state.nom']['checked'])) {
1614 print_liste_field_titre($arrayfields['state.nom']['label'], $_SERVER["PHP_SELF"], "state.nom", "", $param, '', $sortfield, $sortorder);
1615 $totalarray['nbfield']++;
1616}
1617if (!empty($arrayfields['region.nom']['checked'])) {
1618 print_liste_field_titre($arrayfields['region.nom']['label'], $_SERVER["PHP_SELF"], "region.nom", "", $param, '', $sortfield, $sortorder);
1619 $totalarray['nbfield']++;
1620}
1621if (!empty($arrayfields['country.code_iso']['checked'])) {
1622 print_liste_field_titre($arrayfields['country.code_iso']['label'], $_SERVER["PHP_SELF"], "country.code_iso", "", $param, '', $sortfield, $sortorder, 'center ');
1623 $totalarray['nbfield']++;
1624}
1625if (!empty($arrayfields['typent.code']['checked'])) {
1626 print_liste_field_titre($arrayfields['typent.code']['label'], $_SERVER["PHP_SELF"], "typent.code", "", $param, "", $sortfield, $sortorder, 'center ');
1627 $totalarray['nbfield']++;
1628}
1629if (!empty($arrayfields['staff.code']['checked'])) {
1630 print_liste_field_titre($arrayfields['staff.code']['label'], $_SERVER["PHP_SELF"], "staff.code", "", $param, '', $sortfield, $sortorder, 'center ');
1631 $totalarray['nbfield']++;
1632}
1633if (!empty($arrayfields['legalform.code']['checked'])) {
1634 // s.fk_forme_juridique as legalform_code
1635 print_liste_field_titre($arrayfields['legalform.code']['label'], $_SERVER["PHP_SELF"], "legalform_code", "", $param, '', $sortfield, $sortorder);
1636 $totalarray['nbfield']++;
1637}
1638if (!empty($arrayfields['s.price_level']['checked'])) {
1639 print_liste_field_titre($arrayfields['s.price_level']['label'], $_SERVER["PHP_SELF"], "s.price_level", "", $param, '', $sortfield, $sortorder);
1640 $totalarray['nbfield']++;
1641}
1642if (!empty($arrayfields['s.email']['checked'])) {
1643 print_liste_field_titre($arrayfields['s.email']['label'], $_SERVER["PHP_SELF"], "s.email", "", $param, '', $sortfield, $sortorder);
1644 $totalarray['nbfield']++;
1645}
1646if (!empty($arrayfields['s.phone']['checked'])) {
1647 print_liste_field_titre($arrayfields['s.phone']['label'], $_SERVER["PHP_SELF"], "s.phone", "", $param, '', $sortfield, $sortorder);
1648 $totalarray['nbfield']++;
1649}
1650if (!empty($arrayfields['s.phone_mobile']['checked'])) {
1651 print_liste_field_titre($arrayfields['s.phone_mobile']['label'], $_SERVER["PHP_SELF"], "s.phone_mobile", "", $param, '', $sortfield, $sortorder);
1652 $totalarray['nbfield']++;
1653}
1654if (!empty($arrayfields['s.fax']['checked'])) {
1655 print_liste_field_titre($arrayfields['s.fax']['label'], $_SERVER["PHP_SELF"], "s.fax", "", $param, '', $sortfield, $sortorder);
1656 $totalarray['nbfield']++;
1657}
1658if (!empty($arrayfields['s.url']['checked'])) {
1659 print_liste_field_titre($arrayfields['s.url']['label'], $_SERVER["PHP_SELF"], "s.url", "", $param, '', $sortfield, $sortorder);
1660 $totalarray['nbfield']++;
1661}
1662if (!empty($arrayfields['s.siren']['checked'])) {
1663 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId1Short"), $textprofid[1], 1, 0), $_SERVER["PHP_SELF"], "s.siren", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1664 $totalarray['nbfield']++;
1665}
1666if (!empty($arrayfields['s.siret']['checked'])) {
1667 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId2Short"), $textprofid[2], 1, 0), $_SERVER["PHP_SELF"], "s.siret", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1668 $totalarray['nbfield']++;
1669}
1670if (!empty($arrayfields['s.ape']['checked'])) {
1671 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId3Short"), $textprofid[3], 1, 0), $_SERVER["PHP_SELF"], "s.ape", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1672 $totalarray['nbfield']++;
1673}
1674if (!empty($arrayfields['s.idprof4']['checked'])) {
1675 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId4Short"), $textprofid[4], 1, 0), $_SERVER["PHP_SELF"], "s.idprof4", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1676 $totalarray['nbfield']++;
1677}
1678if (!empty($arrayfields['s.idprof5']['checked'])) {
1679 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId5Short"), $textprofid[5], 1, 0), $_SERVER["PHP_SELF"], "s.idprof5", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1680 $totalarray['nbfield']++;
1681}
1682if (!empty($arrayfields['s.idprof6']['checked'])) {
1683 print_liste_field_titre($form->textwithpicto($langs->trans("ProfId6Short"), $textprofid[6], 1, 0), $_SERVER["PHP_SELF"], "s.idprof6", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1684 $totalarray['nbfield']++;
1685}
1686if (!empty($arrayfields['s.tva_intra']['checked'])) {
1687 print_liste_field_titre($arrayfields['s.tva_intra']['label'], $_SERVER["PHP_SELF"], "s.tva_intra", "", $param, '', $sortfield, $sortorder, 'nowrap ');
1688 $totalarray['nbfield']++;
1689}
1690if (!empty($arrayfields['customerorsupplier']['checked'])) {
1691 print_liste_field_titre($arrayfields['customerorsupplier']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder, 'center '); // type of customer
1692 $totalarray['nbfield']++;
1693}
1694if (!empty($arrayfields['s.fk_prospectlevel']['checked'])) {
1695 print_liste_field_titre($arrayfields['s.fk_prospectlevel']['label'], $_SERVER["PHP_SELF"], "s.fk_prospectlevel", "", $param, '', $sortfield, $sortorder, 'center ');
1696 $totalarray['nbfield']++;
1697}
1698if (!empty($arrayfields['s.fk_stcomm']['checked'])) {
1699 print_liste_field_titre($arrayfields['s.fk_stcomm']['label'], $_SERVER["PHP_SELF"], "s.fk_stcomm", "", $param, '', $sortfield, $sortorder, 'center ');
1700 $totalarray['nbfield']++;
1701}
1702if (!empty($arrayfields['s2.nom']['checked'])) {
1703 print_liste_field_titre($arrayfields['s2.nom']['label'], $_SERVER["PHP_SELF"], "s2.nom", "", $param, '', $sortfield, $sortorder, 'center ');
1704 $totalarray['nbfield']++;
1705}
1706// Extra fields
1707include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
1708// Hook fields
1709$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder);
1710$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1711print $hookmanager->resPrint;
1712if (!empty($arrayfields['s.datec']['checked'])) {
1713 print_liste_field_titre($arrayfields['s.datec']['label'], $_SERVER["PHP_SELF"], "s.datec", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
1714 $totalarray['nbfield']++; // For the column action
1715}
1716if (!empty($arrayfields['s.tms']['checked'])) {
1717 print_liste_field_titre($arrayfields['s.tms']['label'], $_SERVER["PHP_SELF"], "s.tms", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
1718 $totalarray['nbfield']++; // For the column action
1719}
1720if (!empty($arrayfields['s.status']['checked'])) {
1721 print_liste_field_titre($arrayfields['s.status']['label'], $_SERVER["PHP_SELF"], "s.status", "", $param, '', $sortfield, $sortorder, 'center ');
1722 $totalarray['nbfield']++; // For the column action
1723}
1724if (!empty($arrayfields['s.import_key']['checked'])) {
1725 print_liste_field_titre($arrayfields['s.import_key']['label'], $_SERVER["PHP_SELF"], "s.import_key", "", $param, '', $sortfield, $sortorder, 'center ');
1726 $totalarray['nbfield']++; // For the column action
1727}
1728// Action column
1729if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1730 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
1731 $totalarray['nbfield']++;
1732}
1733print '</tr>'."\n";
1734
1735
1736// Loop on record
1737// --------------------------------------------------------------------
1738$i = 0;
1739$savnbfield = $totalarray['nbfield'];
1740$totalarray = array();
1741$totalarray['nbfield'] = 0;
1742$imaxinloop = ($limit ? min($num, $limit) : $num);
1743while ($i < $imaxinloop) {
1744 $obj = $db->fetch_object($resql);
1745 if (empty($obj)) {
1746 break; // Should not happen
1747 }
1748
1749 $parameters = array('staticdata' => $obj);
1750 // Note that $action and $object may have been modified by hook
1751 // do companystatic fetch in hook if wanted or anything else
1752 $reshook = $hookmanager->executeHooks('loadStaticObject', $parameters, $companystatic, $action);
1753 if (empty($reshook)) {
1754 $companystatic->id = $obj->rowid;
1755 $companystatic->name = $obj->name;
1756 $companystatic->name_alias = $obj->name_alias;
1757 $companystatic->logo = $obj->logo;
1758 $companystatic->barcode = $obj->barcode;
1759 $companystatic->canvas = $obj->canvas;
1760 $companystatic->client = $obj->client;
1761 $companystatic->status = $obj->status;
1762 $companystatic->email = $obj->email;
1763 $companystatic->address = $obj->address;
1764 $companystatic->zip = $obj->zip;
1765 $companystatic->town = $obj->town;
1766 $companystatic->fournisseur = $obj->fournisseur;
1767 $companystatic->code_client = $obj->code_client;
1768 $companystatic->code_fournisseur = $obj->code_fournisseur;
1769 $companystatic->tva_intra = $obj->tva_intra;
1770 $companystatic->country_code = $obj->country_code;
1771
1772 $companystatic->code_compta_client = $obj->code_compta;
1773 $companystatic->code_compta_fournisseur = $obj->code_compta_fournisseur;
1774
1775 $companystatic->fk_prospectlevel = $obj->fk_prospectlevel;
1776 $companystatic->parent = $obj->fk_parent;
1777 $companystatic->entity = $obj->entity;
1778
1779 $object = $companystatic;
1780 }
1781
1782 if ($mode == 'kanban') {
1783 if ($i == 0) {
1784 print '<tr class="trkanban"><td colspan="'.$savnbfield.'">';
1785 print '<div class="box-flex-container kanban">';
1786 }
1787 // Output Kanban
1788 print $companystatic->getKanbanView('', array('selected' => in_array($obj->rowid, $arrayofselected)));
1789 if ($i == ($imaxinloop - 1)) {
1790 print '</div>';
1791 print '</td></tr>';
1792 }
1793 } else {
1794 // Show line of result
1795 $j = 0;
1796 print '<tr data-rowid="'.$companystatic->id.'" class="oddeven"';
1797 if ($contextpage == 'poslist') {
1798 print ' onclick="location.href=\'list.php?action=change&contextpage=poslist&idcustomer='.$obj->rowid.'&place='.urlencode($place).'\'"';
1799 }
1800 print '>';
1801
1802 // Action column (Show the massaction button only when this page is not opend from the Extended POS)
1803 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1804 print '<td class="nowrap center actioncolumn">';
1805 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
1806 $selected = 0;
1807 if (in_array($obj->rowid, $arrayofselected)) {
1808 $selected = 1;
1809 }
1810 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
1811 }
1812 print '</td>';
1813 if (!$i) {
1814 $totalarray['nbfield']++;
1815 }
1816 }
1817 if (!empty($arrayfields['s.rowid']['checked'])) {
1818 print '<td class="tdoverflowmax50" data-key="id">';
1819 print dol_escape_htmltag($obj->rowid);
1820 print "</td>\n";
1821 if (!$i) {
1822 $totalarray['nbfield']++;
1823 }
1824 }
1825 if (!empty($arrayfields['s.nom']['checked'])) {
1826 print '<td'.(getDolGlobalString('MAIN_SOCIETE_SHOW_COMPLETE_NAME') ? '' : ' class="tdoverflowmax200"').' data-key="ref">';
1827 if ($contextpage == 'poslist') {
1828 print dol_escape_htmltag($companystatic->name);
1829 } else {
1830 print $companystatic->getNomUrl(1, '', 100, 0, 1, empty($arrayfields['s.name_alias']['checked']) ? 0 : 1);
1831 }
1832 print "</td>\n";
1833 if (!$i) {
1834 $totalarray['nbfield']++;
1835 }
1836 }
1837 if (!empty($arrayfields['s.name_alias']['checked'])) {
1838 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($companystatic->name_alias).'">';
1839 print dol_escape_htmltag($companystatic->name_alias);
1840 print "</td>\n";
1841 if (!$i) {
1842 $totalarray['nbfield']++;
1843 }
1844 }
1845 // Barcode
1846 if (!empty($arrayfields['s.barcode']['checked'])) {
1847 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($companystatic->barcode).'">'.dol_escape_htmltag($companystatic->barcode).'</td>';
1848 if (!$i) {
1849 $totalarray['nbfield']++;
1850 }
1851 }
1852 // Customer code
1853 if (!empty($arrayfields['s.code_client']['checked'])) {
1854 print '<td class="nowraponall">'.dol_escape_htmltag($companystatic->code_client).'</td>';
1855 if (!$i) {
1856 $totalarray['nbfield']++;
1857 }
1858 }
1859 // Supplier code
1860 if (!empty($arrayfields['s.code_fournisseur']['checked'])) {
1861 print '<td class="nowraponall">'.dol_escape_htmltag($companystatic->code_fournisseur).'</td>';
1862 if (!$i) {
1863 $totalarray['nbfield']++;
1864 }
1865 }
1866 // Account customer code
1867 if (!empty($arrayfields['s.code_compta']['checked'])) {
1868 print '<td>'.dol_escape_htmltag($companystatic->code_compta_client).'</td>';
1869 if (!$i) {
1870 $totalarray['nbfield']++;
1871 }
1872 }
1873 // Account supplier code
1874 if (!empty($arrayfields['s.code_compta_fournisseur']['checked'])) {
1875 print '<td>'.dol_escape_htmltag($companystatic->code_compta_fournisseur).'</td>';
1876 if (!$i) {
1877 $totalarray['nbfield']++;
1878 }
1879 }
1880 // Address
1881 if (!empty($arrayfields['s.address']['checked'])) {
1882 print '<td class="tdoverflowmax250" title="'.dol_escape_htmltag($companystatic->address).'">'.dol_escape_htmltag($companystatic->address).'</td>';
1883 if (!$i) {
1884 $totalarray['nbfield']++;
1885 }
1886 }
1887 // Sales Representative
1888 if (!empty($arrayfields['sales.representative']['checked'])) {
1889 print '<td class="nowraponall tdoverflowmax200">';
1890 $listsalesrepresentatives = $companystatic->getSalesRepresentatives($user);
1891 $nbofsalesrepresentative = count($listsalesrepresentatives);
1892 if ($nbofsalesrepresentative > 6) {
1893 // We print only number
1894 print $nbofsalesrepresentative;
1895 } elseif ($nbofsalesrepresentative > 0) {
1896 $userstatic = new User($db);
1897 $j = 0;
1898 foreach ($listsalesrepresentatives as $val) {
1899 $userstatic->id = $val['id'];
1900 $userstatic->lastname = $val['lastname'];
1901 $userstatic->firstname = $val['firstname'];
1902 $userstatic->email = $val['email'];
1903 $userstatic->entity = $val['entity'];
1904 $userstatic->photo = $val['photo'];
1905 $userstatic->login = $val['login'];
1906 $userstatic->office_phone = $val['office_phone'];
1907 $userstatic->office_fax = $val['office_fax'];
1908 $userstatic->user_mobile = $val['user_mobile'];
1909 $userstatic->job = $val['job'];
1910 $userstatic->gender = $val['gender'];
1911 $userstatic->statut = $val['statut'];
1912 print ($nbofsalesrepresentative < 2) ? $userstatic->getNomUrl(-1, '', 0, 0, 12) : $userstatic->getNomUrl(-2);
1913 $j++;
1914 if ($j < $nbofsalesrepresentative) {
1915 print ' ';
1916 }
1917 }
1918 } else {
1919 print '&nbsp;';
1920 }
1921 print '</td>';
1922 if (!$i) {
1923 $totalarray['nbfield']++;
1924 }
1925 }
1926 // Zip
1927 if (!empty($arrayfields['s.zip']['checked'])) {
1928 print "<td>".dol_escape_htmltag($companystatic->zip)."</td>\n";
1929 if (!$i) {
1930 $totalarray['nbfield']++;
1931 }
1932 }
1933 // Town
1934 if (!empty($arrayfields['s.town']['checked'])) {
1935 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($companystatic->town).'">'.dol_escape_htmltag($companystatic->town)."</td>\n";
1936 if (!$i) {
1937 $totalarray['nbfield']++;
1938 }
1939 }
1940 // State
1941 if (!empty($arrayfields['state.nom']['checked'])) {
1942 print "<td>".dol_escape_htmltag($obj->state_name)."</td>\n";
1943 if (!$i) {
1944 $totalarray['nbfield']++;
1945 }
1946 }
1947 // Region
1948 if (!empty($arrayfields['region.nom']['checked'])) {
1949 print "<td>".dol_escape_htmltag($obj->region_name)."</td>\n";
1950 if (!$i) {
1951 $totalarray['nbfield']++;
1952 }
1953 }
1954 // Country
1955 if (!empty($arrayfields['country.code_iso']['checked'])) {
1956 print '<td class="center tdoverflowmax100">';
1957 $labelcountry = ($companystatic->country_code && ($langs->trans("Country".$companystatic->country_code) != "Country".$companystatic->country_code)) ? $langs->trans("Country".$companystatic->country_code) : $obj->country_label;
1958 print $labelcountry;
1959 print '</td>';
1960 if (!$i) {
1961 $totalarray['nbfield']++;
1962 }
1963 }
1964 // Type ent
1965 if (!empty($arrayfields['typent.code']['checked'])) {
1966 if (!isset($typenArray) || !is_array($typenArray) || count($typenArray) == 0) {
1967 $typenArray = $formcompany->typent_array(1);
1968 }
1969 $labeltypeofcompany = empty($typenArray[$obj->typent_code]) ? '' : $typenArray[$obj->typent_code];
1970
1971 print '<td class="center tdoverflowmax125" title="'.dol_escape_htmltag($labeltypeofcompany).'">';
1972 print dol_escape_htmltag($labeltypeofcompany);
1973 print '</td>';
1974 if (!$i) {
1975 $totalarray['nbfield']++;
1976 }
1977 }
1978 // Multiprice level
1979 if (!empty($arrayfields['s.price_level']['checked'])) {
1980 print '<td class="center">'.$obj->price_level."</td>\n";
1981 if (!$i) {
1982 $totalarray['nbfield']++;
1983 }
1984 }
1985 // Staff
1986 if (!empty($arrayfields['staff.code']['checked'])) {
1987 print '<td class="center">';
1988 if (!empty($obj->staff_code)) {
1989 if (empty($conf->cache['staffArray'])) {
1990 $conf->cache['staffArray'] = $formcompany->effectif_array(1);
1991 }
1992 print $conf->cache['staffArray'][$obj->staff_code];
1993 }
1994 print '</td>';
1995 if (!$i) {
1996 $totalarray['nbfield']++;
1997 }
1998 }
1999 // Legal form
2000 if (!empty($arrayfields['legalform.code']['checked'])) {
2001 $labeltoshow = '';
2002 if (!empty($obj->legalform_code)) {
2003 if (empty($conf->cache['legalformArray'][$obj->legalform_code])) {
2004 $conf->cache['legalformArray'][$obj->legalform_code] = getFormeJuridiqueLabel($obj->legalform_code);
2005 }
2006 $labeltoshow = $conf->cache['legalformArray'][$obj->legalform_code];
2007 }
2008 print '<td class="center tdoverflowmax100" title="'.dol_escape_htmltag($labeltoshow).'">';
2009 print dol_escape_htmltag($labeltoshow);
2010 print '</td>';
2011 if (!$i) {
2012 $totalarray['nbfield']++;
2013 }
2014 }
2015 // Email
2016 if (!empty($arrayfields['s.email']['checked'])) {
2017 print '<td class="tdoverflowmax150">'.dol_print_email($obj->email, $obj->rowid, $obj->rowid, 1, 0, 0, 1)."</td>\n";
2018 if (!$i) {
2019 $totalarray['nbfield']++;
2020 }
2021 }
2022 if (!empty($arrayfields['s.phone']['checked'])) {
2023 print '<td class="nowraponall">'.dol_print_phone($obj->phone, $companystatic->country_code, 0, $obj->rowid, 'AC_TEL', ' ', 'phone')."</td>\n";
2024 if (!$i) {
2025 $totalarray['nbfield']++;
2026 }
2027 }
2028 if (!empty($arrayfields['s.phone_mobile']['checked'])) {
2029 print '<td class="nowraponall">'.dol_print_phone($obj->phone_mobile, $companystatic->country_code, 0, $obj->rowid, 'AC_TEL', ' ', 'phone_mobile')."</td>\n";
2030 if (!$i) {
2031 $totalarray['nbfield']++;
2032 }
2033 }
2034 if (!empty($arrayfields['s.fax']['checked'])) {
2035 print '<td class="nowraponall">'.dol_print_phone($obj->fax, $companystatic->country_code, 0, $obj->rowid, 'AC_TEL', ' ', 'fax')."</td>\n";
2036 if (!$i) {
2037 $totalarray['nbfield']++;
2038 }
2039 }
2040 if (!empty($arrayfields['s.url']['checked'])) {
2041 print "<td>".dol_print_url($obj->url, '', '', 1)."</td>\n";
2042 if (!$i) {
2043 $totalarray['nbfield']++;
2044 }
2045 }
2046 if (!empty($arrayfields['s.siren']['checked'])) {
2047 print "<td>".$obj->idprof1."</td>\n";
2048 if (!$i) {
2049 $totalarray['nbfield']++;
2050 }
2051 }
2052 if (!empty($arrayfields['s.siret']['checked'])) {
2053 print "<td>".$obj->idprof2."</td>\n";
2054 if (!$i) {
2055 $totalarray['nbfield']++;
2056 }
2057 }
2058 if (!empty($arrayfields['s.ape']['checked'])) {
2059 print "<td>".$obj->idprof3."</td>\n";
2060 if (!$i) {
2061 $totalarray['nbfield']++;
2062 }
2063 }
2064 if (!empty($arrayfields['s.idprof4']['checked'])) {
2065 print "<td>".$obj->idprof4."</td>\n";
2066 if (!$i) {
2067 $totalarray['nbfield']++;
2068 }
2069 }
2070 if (!empty($arrayfields['s.idprof5']['checked'])) {
2071 print "<td>".$obj->idprof5."</td>\n";
2072 if (!$i) {
2073 $totalarray['nbfield']++;
2074 }
2075 }
2076 if (!empty($arrayfields['s.idprof6']['checked'])) {
2077 print "<td>".$obj->idprof6."</td>\n";
2078 if (!$i) {
2079 $totalarray['nbfield']++;
2080 }
2081 }
2082 // VAT
2083 if (!empty($arrayfields['s.tva_intra']['checked'])) {
2084 print '<td class="tdoverflowmax125" title="'.dol_escape_htmltag($companystatic->tva_intra).'">';
2085 if ($companystatic->tva_intra && !isValidVATID($companystatic)) {
2086 print img_warning("BadVATNumber", '', 'pictofixedwidth');
2087 }
2088 print $companystatic->tva_intra;
2089 print "</td>\n";
2090 if (!$i) {
2091 $totalarray['nbfield']++;
2092 }
2093 }
2094 // Nature
2095 if (!empty($arrayfields['customerorsupplier']['checked'])) {
2096 print '<td class="center">';
2097 print $companystatic->getTypeUrl(1);
2098 print '</td>';
2099 if (!$i) {
2100 $totalarray['nbfield']++;
2101 }
2102 }
2103 // Prospect level
2104 if (!empty($arrayfields['s.fk_prospectlevel']['checked'])) {
2105 print '<td class="center nowraponall">';
2106 print $companystatic->getLibProspLevel();
2107 print "</td>";
2108 if (!$i) {
2109 $totalarray['nbfield']++;
2110 }
2111 }
2112 // Prospect status
2113 if (!empty($arrayfields['s.fk_stcomm']['checked'])) {
2114 print '<td class="center nowraponall">';
2115
2116 $prospectid = $obj->rowid;
2117 $statusprospect = $obj->stcomm_id;
2118
2119 $formcompany->selectProspectStatus('status_prospect', $prospectstatic, $statusprospect, $prospectid);
2120
2121 print '</td>';
2122 if (!$i) {
2123 $totalarray['nbfield']++;
2124 }
2125 }
2126 // Parent company
2127 if (!empty($arrayfields['s2.nom']['checked'])) {
2128 print '<td class="center tdoverflowmax100">';
2129 if ($companystatic->parent > 0) {
2130 $companyparent->fetch($companystatic->parent);
2131 print $companyparent->getNomUrl(1);
2132 }
2133 print "</td>";
2134 if (!$i) {
2135 $totalarray['nbfield']++;
2136 }
2137 }
2138 // Extra fields
2139 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
2140 // Fields from hook
2141 $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray);
2142 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
2143 print $hookmanager->resPrint;
2144 // Date creation
2145 if (!empty($arrayfields['s.datec']['checked'])) {
2146 print '<td class="center nowraponall">';
2147 print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser');
2148 print '</td>';
2149 if (!$i) {
2150 $totalarray['nbfield']++;
2151 }
2152 }
2153 // Date modification
2154 if (!empty($arrayfields['s.tms']['checked'])) {
2155 print '<td class="center nowraponall">';
2156 print dol_print_date($db->jdate($obj->date_modification), 'dayhour', 'tzuser');
2157 print '</td>';
2158 if (!$i) {
2159 $totalarray['nbfield']++;
2160 }
2161 }
2162 // Status
2163 if (!empty($arrayfields['s.status']['checked'])) {
2164 print '<td class="center nowraponall">'.$companystatic->getLibStatut(5).'</td>';
2165 if (!$i) {
2166 $totalarray['nbfield']++;
2167 }
2168 }
2169 // Import key
2170 if (!empty($arrayfields['s.import_key']['checked'])) {
2171 print '<td class="tdoverflowmax125" title="'.dol_escape_htmltag($obj->import_key).'">';
2172 print dol_escape_htmltag($obj->import_key);
2173 print "</td>\n";
2174 if (!$i) {
2175 $totalarray['nbfield']++;
2176 }
2177 }
2178 // Action column (Show the massaction button only when this page is not opend from the Extended POS)
2179 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2180 print '<td class="nowrap center actioncolumn">';
2181 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
2182 $selected = 0;
2183 if (in_array($obj->rowid, $arrayofselected)) {
2184 $selected = 1;
2185 }
2186 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
2187 }
2188 print '</td>';
2189 if (!$i) {
2190 $totalarray['nbfield']++;
2191 }
2192 }
2193
2194 print '</tr>'."\n";
2195 }
2196 $i++;
2197}
2198
2199// Show total line
2200include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
2201
2202// If no record found
2203if ($num == 0) {
2204 $colspan = 1;
2205 foreach ($arrayfields as $key => $val) {
2206 if (!empty($val['checked'])) {
2207 $colspan++;
2208 }
2209 }
2210 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
2211}
2212
2213$db->free($resql);
2214
2215$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql);
2216$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
2217print $hookmanager->resPrint;
2218
2219print '</table>'."\n";
2220print '</div>'."\n";
2221
2222// Line that calls the select_status function by passing it js as the 5th parameter in order to activate the js script
2223$formcompany->selectProspectStatus('status_prospect', $prospectstatic, null, null, "js");
2224
2225print '</form>'."\n";
2226
2227// End of page
2228llxFooter();
2229$db->close();
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()
Empty header.
Definition wrapper.php:55
$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...
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
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 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.