dolibarr 25.0.0-alpha
dict.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
5 * Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
6 * Copyright (C) 2010-2022 Juanjo Menent <jmenent@2byte.es>
7 * Copyright (C) 2011-2021 Philippe Grand <philippe.grand@atoo-net.com>
8 * Copyright (C) 2011 Remy Younes <ryounes@gmail.com>
9 * Copyright (C) 2012-2015 Marcos García <marcosgdf@gmail.com>
10 * Copyright (C) 2012 Christophe Battarel <christophe.battarel@ltairis.fr>
11 * Copyright (C) 2011-2025 Alexandre Spangaro <alexandre@inovea-conseil.com>
12 * Copyright (C) 2015 Ferran Marcet <fmarcet@2byte.es>
13 * Copyright (C) 2016 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
14 * Copyright (C) 2019-2026 Frédéric France <frederic.france@free.fr>
15 * Copyright (C) 2020-2026 Open-Dsi <support@open-dsi.fr>
16 * Copyright (C) 2024-2025 Charlene Benke <charlene@patas-monkey.com>
17 * Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
18 *
19 * This program is free software; you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License as published by
21 * the Free Software Foundation; either version 3 of the License, or
22 * (at your option) any later version.
23 *
24 * This program is distributed in the hope that it will be useful,
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 * GNU General Public License for more details.
28 *
29 * You should have received a copy of the GNU General Public License
30 * along with this program. If not, see <https://www.gnu.org/licenses/>.
31 */
32
39// Load Dolibarr environment
40require '../main.inc.php';
41require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
42require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
43require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
44require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
45require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
46require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
47require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
48require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
49require_once DOL_DOCUMENT_ROOT.'/core/lib/socialnetwork.lib.php';
50
51// constants for IDs of core dictionaries
52const DICT_FORME_JURIDIQUE = 1;
53const DICT_DEPARTEMENTS = 2;
54const DICT_REGIONS = 3;
55const DICT_COUNTRY = 4;
56const DICT_CIVILITY = 5;
57const DICT_ACTIONCOMM = 6;
58const DICT_CHARGESOCIALES = 7;
59const DICT_TYPENT = 8;
60const DICT_CURRENCIES = 9;
61const DICT_TVA = 10;
62const DICT_TYPE_CONTACT = 11;
63const DICT_PAYMENT_TERM = 12;
64const DICT_PAIEMENT = 13;
65const DICT_ECOTAXE = 14;
66const DICT_PAPER_FORMAT = 15;
67const DICT_PROSPECTLEVEL = 16;
68const DICT_TYPE_FEES = 17;
69const DICT_SHIPMENT_MODE = 18;
70const DICT_EFFECTIF = 19;
71const DICT_INPUT_METHOD = 20;
72const DICT_AVAILABILITY = 21;
73const DICT_INPUT_REASON = 22;
74const DICT_REVENUESTAMP = 23;
75const DICT_TYPE_RESOURCE = 24;
76const DICT_TYPE_CONTAINER = 25;
77//const DICT_UNITS = 26;
78const DICT_STCOMM = 27;
79const DICT_HOLIDAY_TYPES = 28;
80const DICT_LEAD_STATUS = 29;
81const DICT_FORMAT_CARDS = 30;
82const DICT_INVOICE_SUBTYPE = 31;
83const DICT_HRM_PUBLIC_HOLIDAY = 32;
84const DICT_HRM_DEPARTMENT = 33;
85const DICT_HRM_FUNCTION = 34;
86const DICT_EXP_TAX_CAT = 35;
87const DICT_EXP_TAX_RANGE = 36;
88const DICT_UNITS = 37;
89const DICT_SOCIALNETWORKS = 38;
90const DICT_PROSPECTCONTACTLEVEL = 39;
91const DICT_STCOMMCONTACT = 40;
92const DICT_TRANSPORT_MODE = 41;
93const DICT_PRODUCT_NATURE = 42;
94const DICT_PRODUCTBATCH_QCSTATUS = 43;
95const DICT_ASSET_DISPOSAL_TYPE = 44;
96
106// Load translation files required by the page
107$langs->loadLangs(array("errors", "admin", "main", "companies", "compta", "resource", "holiday", "accountancy", "hrm", "orders", "contracts", "projects", "propal", "bills", "interventions", "ticket"));
108
109$action = GETPOST('action', 'alpha') ? GETPOST('action', 'alpha') : 'view';
110$confirm = GETPOST('confirm', 'alpha');
111
112$id = GETPOSTINT('id');
113$rowid = GETPOST('rowid', 'alpha');
114$entity = GETPOST('entity', 'alpha'); // Do not use GETPOSTINT here. Should be '', 0 or >0.
115$code = GETPOST('code', 'alpha');
116$from = GETPOST('from', 'alpha');
117
118$acts = array();
119$actl = array();
120$acts[0] = "activate";
121$acts[1] = "disable";
122$actl[0] = img_picto($langs->trans("Disabled"), 'switch_off', 'class="size15x"');
123$actl[1] = img_picto($langs->trans("Activated"), 'switch_on', 'class="size15x"');
124
125// Load variable for pagination
126$listlimit = GETPOST('listlimit') > 0 ? GETPOST('listlimit') : $conf->liste_limit; // To avoid too long dictionaries
127$sortfield = GETPOST('sortfield', 'aZ09comma');
128$sortorder = GETPOST('sortorder', 'aZ09comma');
129$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
130if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
131 // If $page is not defined, or '' or -1 or if we click on clear filters
132 $page = 0;
133}
134$offset = $listlimit * $page;
135$pageprev = $page - 1;
136$pagenext = $page + 1;
137
138$search_country_id = GETPOST('search_country_id', 'int');
139$search_code = GETPOST('search_code', 'alpha');
140$search_active = GETPOST('search_active', 'alpha');
141
142// Special case to set a default value for country according to dictionary
143if (!GETPOSTISSET('search_country_id') && $search_country_id == '' && ($id == DICT_DEPARTEMENTS || $id == DICT_REGIONS || $id == DICT_TVA)) { // Not a so good idea to force on current country for all dictionaries. Some tables have entries that are for all countries, we must be able to see them, so this is done for dedicated dictionaries only.
144 $search_country_id = $mysoc->country_id;
145}
146
147// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
148$hookmanager->initHooks(array('admin', 'dictionaryadmin'));
149
150$allowed = $user->admin;
151if ($id == DICT_CHARGESOCIALES && $user->hasRight('accounting', 'chartofaccount')) {
152 $allowed = 1; // Tax page allowed to manager of chart account
153}
154if ($id == DICT_TVA && $user->hasRight('accounting', 'chartofaccount')) {
155 $allowed = 1; // Vat page allowed to manager of chart account
156}
157if ($id == DICT_TYPE_FEES && $user->hasRight('accounting', 'chartofaccount')) {
158 $allowed = 1; // Dictionary with type of expense report and accounting account allowed to manager of chart account
159}
160if (!$allowed) {
162}
163
164$permissiontoadd = $allowed;
165
166
167// This page is a generic page to edit dictionaries
168// Put here declaration of dictionaries properties
169
170// Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this.
171$taborder = array(DICT_CURRENCIES, DICT_PAPER_FORMAT, DICT_FORMAT_CARDS, 0, DICT_COUNTRY, DICT_REGIONS, DICT_DEPARTEMENTS, 0, DICT_FORME_JURIDIQUE, DICT_TYPENT, DICT_EFFECTIF, DICT_PROSPECTLEVEL, DICT_PROSPECTCONTACTLEVEL, DICT_STCOMM, DICT_STCOMMCONTACT, DICT_SOCIALNETWORKS, 0, DICT_CIVILITY, DICT_TYPE_CONTACT, 0, DICT_ACTIONCOMM, DICT_TYPE_RESOURCE, 0, DICT_LEAD_STATUS, 0, DICT_HRM_DEPARTMENT, DICT_HRM_FUNCTION, DICT_HRM_PUBLIC_HOLIDAY, DICT_HOLIDAY_TYPES, DICT_TYPE_FEES, DICT_EXP_TAX_CAT, DICT_EXP_TAX_RANGE, 0, DICT_TVA, DICT_INVOICE_SUBTYPE, DICT_REVENUESTAMP, DICT_PAYMENT_TERM, DICT_PAIEMENT, DICT_CHARGESOCIALES, 0, DICT_ECOTAXE, 0, DICT_INPUT_REASON, DICT_INPUT_METHOD, DICT_SHIPMENT_MODE, DICT_AVAILABILITY, DICT_TRANSPORT_MODE, 0, DICT_UNITS, DICT_PRODUCT_NATURE, 0, DICT_PRODUCTBATCH_QCSTATUS, 0, DICT_TYPE_CONTAINER, 0, DICT_ASSET_DISPOSAL_TYPE, 0);
172
173// Name of SQL tables of dictionaries
174$tabname = array();
175$tabname[DICT_FORME_JURIDIQUE] = "c_forme_juridique";
176$tabname[DICT_DEPARTEMENTS] = "c_departements";
177$tabname[DICT_REGIONS] = "c_regions";
178$tabname[DICT_COUNTRY] = "c_country";
179$tabname[DICT_CIVILITY] = "c_civility";
180$tabname[DICT_ACTIONCOMM] = "c_actioncomm";
181$tabname[DICT_CHARGESOCIALES] = "c_chargesociales";
182$tabname[DICT_TYPENT] = "c_typent";
183$tabname[DICT_CURRENCIES] = "c_currencies";
184$tabname[DICT_TVA] = "c_tva";
185$tabname[DICT_TYPE_CONTACT] = "c_type_contact";
186$tabname[DICT_PAYMENT_TERM] = "c_payment_term";
187$tabname[DICT_PAIEMENT] = "c_paiement";
188$tabname[DICT_ECOTAXE] = "c_ecotaxe";
189$tabname[DICT_PAPER_FORMAT] = "c_paper_format";
190$tabname[DICT_PROSPECTLEVEL] = "c_prospectlevel";
191$tabname[DICT_TYPE_FEES] = "c_type_fees";
192$tabname[DICT_SHIPMENT_MODE] = "c_shipment_mode";
193$tabname[DICT_EFFECTIF] = "c_effectif";
194$tabname[DICT_INPUT_METHOD] = "c_input_method";
195$tabname[DICT_AVAILABILITY] = "c_availability";
196$tabname[DICT_INPUT_REASON] = "c_input_reason";
197$tabname[DICT_REVENUESTAMP] = "c_revenuestamp";
198$tabname[DICT_TYPE_RESOURCE] = "c_type_resource";
199$tabname[DICT_TYPE_CONTAINER] = "c_type_container";
200//$tabname[DICT_UNITS]= "c_units";
201$tabname[DICT_STCOMM] = "c_stcomm";
202$tabname[DICT_HOLIDAY_TYPES] = "c_holiday_types";
203$tabname[DICT_LEAD_STATUS] = "c_lead_status";
204$tabname[DICT_FORMAT_CARDS] = "c_format_cards";
205$tabname[DICT_INVOICE_SUBTYPE] = "c_invoice_subtype";
206$tabname[DICT_HRM_PUBLIC_HOLIDAY] = "c_hrm_public_holiday";
207$tabname[DICT_HRM_DEPARTMENT] = "c_hrm_department";
208$tabname[DICT_HRM_FUNCTION] = "c_hrm_function";
209$tabname[DICT_EXP_TAX_CAT] = "c_exp_tax_cat";
210$tabname[DICT_EXP_TAX_RANGE] = "c_exp_tax_range";
211$tabname[DICT_UNITS] = "c_units";
212$tabname[DICT_SOCIALNETWORKS] = "c_socialnetworks";
213$tabname[DICT_PROSPECTCONTACTLEVEL] = "c_prospectcontactlevel";
214$tabname[DICT_STCOMMCONTACT] = "c_stcommcontact";
215$tabname[DICT_TRANSPORT_MODE] = "c_transport_mode";
216$tabname[DICT_PRODUCT_NATURE] = "c_product_nature";
217$tabname[DICT_PRODUCTBATCH_QCSTATUS] = "c_productbatch_qcstatus";
218$tabname[DICT_ASSET_DISPOSAL_TYPE] = "c_asset_disposal_type";
219
220// Dictionary labels
221$tablib = array();
222$tablib[DICT_FORME_JURIDIQUE] = "DictionaryCompanyJuridicalType";
223$tablib[DICT_DEPARTEMENTS] = "DictionaryCanton";
224$tablib[DICT_REGIONS] = "DictionaryRegion";
225$tablib[DICT_COUNTRY] = "DictionaryCountry";
226$tablib[DICT_CIVILITY] = "DictionaryCivility";
227$tablib[DICT_ACTIONCOMM] = "DictionaryActions";
228$tablib[DICT_CHARGESOCIALES] = "DictionarySocialContributions";
229$tablib[DICT_TYPENT] = "DictionaryCompanyType";
230$tablib[DICT_CURRENCIES] = "DictionaryCurrency";
231$tablib[DICT_TVA] = "DictionaryVAT";
232$tablib[DICT_TYPE_CONTACT] = "DictionaryTypeContact";
233$tablib[DICT_PAYMENT_TERM] = "DictionaryPaymentConditions";
234$tablib[DICT_PAIEMENT] = "DictionaryPaymentModes";
235$tablib[DICT_ECOTAXE] = "DictionaryEcotaxe";
236$tablib[DICT_PAPER_FORMAT] = "DictionaryPaperFormat";
237$tablib[DICT_PROSPECTLEVEL] = "DictionaryProspectLevel";
238$tablib[DICT_TYPE_FEES] = "DictionaryFees";
239$tablib[DICT_SHIPMENT_MODE] = "DictionarySendingMethods";
240$tablib[DICT_EFFECTIF] = "DictionaryStaff";
241$tablib[DICT_INPUT_METHOD] = "DictionaryOrderMethods";
242$tablib[DICT_AVAILABILITY] = "DictionaryAvailability";
243$tablib[DICT_INPUT_REASON] = "DictionarySource";
244$tablib[DICT_REVENUESTAMP] = "DictionaryRevenueStamp";
245$tablib[DICT_TYPE_RESOURCE] = "DictionaryResourceType";
246$tablib[DICT_TYPE_CONTAINER] = "DictionaryTypeOfContainer";
247//$tablib[DICT_UNITS]= "DictionaryUnits";
248$tablib[DICT_STCOMM] = "DictionaryProspectStatus";
249$tablib[DICT_HOLIDAY_TYPES] = "DictionaryHolidayTypes";
250$tablib[DICT_LEAD_STATUS] = "DictionaryOpportunityStatus";
251$tablib[DICT_FORMAT_CARDS] = "DictionaryFormatCards";
252$tablib[DICT_INVOICE_SUBTYPE] = "DictionaryInvoiceSubtype";
253$tablib[DICT_HRM_PUBLIC_HOLIDAY] = "DictionaryPublicHolidays";
254$tablib[DICT_HRM_DEPARTMENT] = "DictionaryDepartment";
255$tablib[DICT_HRM_FUNCTION] = "DictionaryFunction";
256$tablib[DICT_EXP_TAX_CAT] = "DictionaryExpenseTaxCat";
257$tablib[DICT_EXP_TAX_RANGE] = "DictionaryExpenseTaxRange";
258$tablib[DICT_UNITS] = "DictionaryMeasuringUnits";
259$tablib[DICT_SOCIALNETWORKS] = "DictionarySocialNetworks";
260$tablib[DICT_PROSPECTCONTACTLEVEL] = "DictionaryProspectContactLevel";
261$tablib[DICT_STCOMMCONTACT] = "DictionaryProspectContactStatus";
262$tablib[DICT_TRANSPORT_MODE] = "DictionaryTransportMode";
263$tablib[DICT_PRODUCT_NATURE] = "DictionaryProductNature";
264$tablib[DICT_PRODUCTBATCH_QCSTATUS] = "DictionaryBatchStatus";
265$tablib[DICT_ASSET_DISPOSAL_TYPE] = "DictionaryAssetDisposalType";
266
267// Requests to extract data
268$tabsql = array();
269$tabsql[DICT_FORME_JURIDIQUE] = "SELECT f.rowid as rowid, f.code, f.libelle, c.code as country_code, c.label as country, f.active FROM ".MAIN_DB_PREFIX."c_forme_juridique as f, ".MAIN_DB_PREFIX."c_country as c WHERE f.fk_pays=c.rowid";
270$tabsql[DICT_DEPARTEMENTS] = "SELECT d.rowid as rowid, d.code_departement as code, d.nom as libelle, d.fk_region as region_id, r.nom as region, c.code as country_code, c.label as country, d.active FROM ".MAIN_DB_PREFIX."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_country as c WHERE d.fk_region=r.code_region and r.fk_pays=c.rowid and r.active=1 and c.active=1";
271$tabsql[DICT_REGIONS] = "SELECT r.rowid as rowid, r.code_region as code, r.nom as libelle, r.fk_pays as country_id, c.code as country_code, c.label as country, r.active FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_country as c WHERE r.fk_pays=c.rowid and c.active=1";
272$tabsql[DICT_COUNTRY] = "SELECT c.rowid as rowid, c.code, c.label, c.phone_code, c.trunk_prefix, c.active, c.favorite, c.eec, c.sepa FROM ".MAIN_DB_PREFIX."c_country AS c";
273$tabsql[DICT_CIVILITY] = "SELECT c.rowid as rowid, c.code as code, c.label, c.active FROM ".MAIN_DB_PREFIX."c_civility AS c";
274$tabsql[DICT_ACTIONCOMM] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.type, a.active, a.module, a.color, a.position FROM ".MAIN_DB_PREFIX."c_actioncomm AS a";
275$tabsql[DICT_CHARGESOCIALES] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.accountancy_code as accountancy_code, c.code as country_code, c.label as country, a.fk_pays as country_id, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_pays = c.rowid and c.active = 1";
276$tabsql[DICT_TYPENT] = "SELECT t.id as rowid, t.code as code, t.libelle, t.fk_country as country_id, c.code as country_code, c.label as country, t.position, t.module, t.active FROM ".MAIN_DB_PREFIX."c_typent as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_country=c.rowid";
277$tabsql[DICT_CURRENCIES] = "SELECT c.code_iso as code, c.label, c.unicode, c.active FROM ".MAIN_DB_PREFIX."c_currencies AS c";
278$tabsql[DICT_TVA] = "SELECT t.rowid, t.entity, t.code, t.type_vat, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, t.einvoice_vatex, c.label as country, c.code as country_code, t.fk_pays as country_id, t.fk_department_buyer as department_buyer_id, db.nom as department_buyer, t.recuperableonly, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy, t.use_default FROM ".MAIN_DB_PREFIX."c_tva as t INNER JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_pays = c.rowid LEFT JOIN ".MAIN_DB_PREFIX."c_departements as db ON t.fk_department_buyer = db.rowid WHERE t.entity IN (".getEntity($tabname[DICT_TVA]).")";
279$tabsql[DICT_TYPE_CONTACT] = "SELECT t.rowid as rowid, t.element, t.source, t.code, t.libelle, t.position, t.active FROM ".MAIN_DB_PREFIX."c_type_contact AS t";
280$tabsql[DICT_PAYMENT_TERM] = "SELECT c.rowid as rowid, c.code, c.libelle, c.libelle_facture, c.deposit_percent, c.nbjour, c.type_cdr, c.decalage, c.active, c.sortorder, c.entity FROM ".MAIN_DB_PREFIX."c_payment_term AS c WHERE c.entity IN (".getEntity($tabname[DICT_PAYMENT_TERM]).")";
281$tabsql[DICT_PAIEMENT] = "SELECT c.id as rowid, c.code, c.libelle, c.type, c.accountancy_code, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_paiement AS c WHERE c.entity IN (".getEntity($tabname[DICT_PAIEMENT]).")";
282$tabsql[DICT_ECOTAXE] = "SELECT e.rowid as rowid, e.code as code, e.label, e.price, e.organization, e.fk_pays as country_id, c.code as country_code, c.label as country, e.active FROM ".MAIN_DB_PREFIX."c_ecotaxe AS e, ".MAIN_DB_PREFIX."c_country as c WHERE e.fk_pays=c.rowid and c.active=1";
283$tabsql[DICT_PAPER_FORMAT] = "SELECT t.rowid as rowid, t.code, t.label as libelle, t.width, t.height, t.unit, t.active FROM ".MAIN_DB_PREFIX."c_paper_format as t";
284$tabsql[DICT_PROSPECTLEVEL] = "SELECT t.code, t.label as libelle, t.sortorder, t.active FROM ".MAIN_DB_PREFIX."c_prospectlevel as t";
285$tabsql[DICT_TYPE_FEES] = "SELECT t.id as rowid, t.code, t.label, t.accountancy_code, t.active FROM ".MAIN_DB_PREFIX."c_type_fees as t";
286$tabsql[DICT_SHIPMENT_MODE] = "SELECT t.rowid as rowid, t.code, t.libelle, t.tracking, t.active FROM ".MAIN_DB_PREFIX."c_shipment_mode as t";
287$tabsql[DICT_EFFECTIF] = "SELECT t.id as rowid, t.code, t.libelle, t.active FROM ".MAIN_DB_PREFIX."c_effectif as t";
288$tabsql[DICT_INPUT_METHOD] = "SELECT t.rowid as rowid, t.code, t.libelle, t.active FROM ".MAIN_DB_PREFIX."c_input_method as t";
289$tabsql[DICT_AVAILABILITY] = "SELECT c.rowid as rowid, c.code, c.label, c.type_duration, c.qty, c.active, c.position FROM ".MAIN_DB_PREFIX."c_availability AS c";
290$tabsql[DICT_INPUT_REASON] = "SELECT t.rowid as rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_input_reason as t";
291$tabsql[DICT_REVENUESTAMP] = "SELECT t.rowid as rowid, t.taux, t.revenuestamp_type, c.label as country, c.code as country_code, t.fk_pays as country_id, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy FROM ".MAIN_DB_PREFIX."c_revenuestamp as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_pays=c.rowid";
292$tabsql[DICT_TYPE_RESOURCE] = "SELECT t.rowid as rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_type_resource as t";
293$tabsql[DICT_TYPE_CONTAINER] = "SELECT t.rowid as rowid, t.code, t.label, t.active, t.module FROM ".MAIN_DB_PREFIX."c_type_container as t WHERE t.entity IN (".getEntity($tabname[DICT_TYPE_CONTAINER]).")";
294//$tabsql[DICT_UNITS]= "SELECT t.rowid as rowid, t.code, t.label, t.short_label, t.active FROM ".MAIN_DB_PREFIX."c_units as t";
295$tabsql[DICT_STCOMM] = "SELECT t.id as rowid, t.code, t.libelle, t.picto, t.active FROM ".MAIN_DB_PREFIX."c_stcomm as t";
296$tabsql[DICT_HOLIDAY_TYPES] = "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.newbymonth, h.fk_country as country_id, c.code as country_code, c.label as country, h.block_if_negative, h.sortorder, h.active FROM ".MAIN_DB_PREFIX."c_holiday_types as h LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON h.fk_country=c.rowid WHERE h.entity IN (".getEntity($tabname[DICT_HOLIDAY_TYPES]).")";
297$tabsql[DICT_LEAD_STATUS] = "SELECT t.rowid as rowid, t.code, t.label, percent, t.position, t.active FROM ".MAIN_DB_PREFIX."c_lead_status as t";
298$tabsql[DICT_FORMAT_CARDS] = "SELECT t.rowid, t.code, t.name, t.paper_size, t.orientation, t.metric, t.leftmargin, t.topmargin, t.nx, t.ny, t.spacex, t.spacey, t.width, t.height, t.font_size, t.custom_x, t.custom_y, t.active FROM ".MAIN_DB_PREFIX."c_format_cards as t";
299$tabsql[DICT_INVOICE_SUBTYPE] = "SELECT t.rowid, t.code, t.label, c.label as country, c.code as country_code, t.fk_country as country_id, t.active FROM ".MAIN_DB_PREFIX."c_invoice_subtype as t, ".MAIN_DB_PREFIX."c_country as c WHERE t.fk_country = c.rowid";
300$tabsql[DICT_HRM_PUBLIC_HOLIDAY] = "SELECT a.id as rowid, a.entity, a.code, a.fk_country as country_id, c.code as country_code, c.label as country, a.dayrule, a.day, a.month, a.year, a.active FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday as a LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON a.fk_country=c.rowid AND c.active=1 WHERE a.entity IN (".getEntity($tabname[DICT_HRM_PUBLIC_HOLIDAY]).")";
301$tabsql[DICT_HRM_DEPARTMENT] = "SELECT t.rowid, t.pos, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_hrm_department as t";
302$tabsql[DICT_HRM_FUNCTION] = "SELECT t.rowid, t.pos, t.code, t.label, t.c_level, t.active FROM ".MAIN_DB_PREFIX."c_hrm_function as t";
303$tabsql[DICT_EXP_TAX_CAT] = "SELECT c.rowid, c.label, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_cat as c";
304$tabsql[DICT_EXP_TAX_RANGE] = "SELECT r.rowid, r.fk_c_exp_tax_cat, r.range_ik, r.active, r.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_range r";
305$tabsql[DICT_UNITS] = "SELECT r.rowid, r.code, r.sortorder, r.label, r.short_label, r.unit_type, r.scale, r.active FROM ".MAIN_DB_PREFIX."c_units r";
306$tabsql[DICT_SOCIALNETWORKS] = "SELECT s.rowid, s.entity, s.code, s.label, s.url, s.icon, s.active FROM ".MAIN_DB_PREFIX."c_socialnetworks as s WHERE s.entity IN (".getEntity($tabname[DICT_SOCIALNETWORKS]).")";
307$tabsql[DICT_PROSPECTCONTACTLEVEL] = "SELECT t.code, t.label as libelle, t.sortorder, t.active FROM ".MAIN_DB_PREFIX."c_prospectcontactlevel as t";
308$tabsql[DICT_STCOMMCONTACT] = "SELECT t.id as rowid, t.code, t.libelle, t.picto, t.active FROM ".MAIN_DB_PREFIX."c_stcommcontact as t";
309$tabsql[DICT_TRANSPORT_MODE] = "SELECT t.rowid as rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_transport_mode as t";
310$tabsql[DICT_PRODUCT_NATURE] = "SELECT t.rowid as rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_product_nature as t";
311$tabsql[DICT_PRODUCTBATCH_QCSTATUS] = "SELECT t.rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_productbatch_qcstatus as t";
312$tabsql[DICT_ASSET_DISPOSAL_TYPE] = "SELECT t.rowid, t.code, t.label, t.active FROM ".MAIN_DB_PREFIX."c_asset_disposal_type as t";
313
314// Criteria to sort dictionaries
315$tabsqlsort = array();
316$tabsqlsort[DICT_FORME_JURIDIQUE] = "country ASC, code ASC";
317$tabsqlsort[DICT_DEPARTEMENTS] = "country ASC, code ASC";
318$tabsqlsort[DICT_REGIONS] = "country ASC, code ASC";
319$tabsqlsort[DICT_COUNTRY] = "code ASC";
320$tabsqlsort[DICT_CIVILITY] = "label ASC";
321$tabsqlsort[DICT_ACTIONCOMM] = "a.type ASC, a.module ASC, a.position ASC, a.code ASC";
322$tabsqlsort[DICT_CHARGESOCIALES] = "c.label ASC, a.code ASC, a.libelle ASC";
323$tabsqlsort[DICT_TYPENT] = "country DESC,".(getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? ' t.position ASC,' : '')." libelle ASC";
324$tabsqlsort[DICT_CURRENCIES] = "label ASC";
325$tabsqlsort[DICT_TVA] = "country ASC, department_buyer ASC, code ASC, taux ASC, recuperableonly ASC, localtax1 ASC, localtax2 ASC";
326$tabsqlsort[DICT_TYPE_CONTACT] = "t.element ASC, t.source ASC, t.position ASC, t.code ASC";
327$tabsqlsort[DICT_PAYMENT_TERM] = "sortorder ASC, code ASC";
328$tabsqlsort[DICT_PAIEMENT] = "code ASC";
329$tabsqlsort[DICT_ECOTAXE] = "country ASC, e.organization ASC, code ASC";
330$tabsqlsort[DICT_PAPER_FORMAT] = "rowid ASC";
331$tabsqlsort[DICT_PROSPECTLEVEL] = "sortorder ASC";
332$tabsqlsort[DICT_TYPE_FEES] = "code ASC";
333$tabsqlsort[DICT_SHIPMENT_MODE] = "code ASC, libelle ASC";
334$tabsqlsort[DICT_EFFECTIF] = "id ASC";
335$tabsqlsort[DICT_INPUT_METHOD] = "code ASC, libelle ASC";
336$tabsqlsort[DICT_AVAILABILITY] = "position ASC, type_duration ASC, qty ASC";
337$tabsqlsort[DICT_INPUT_REASON] = "code ASC, label ASC";
338$tabsqlsort[DICT_REVENUESTAMP] = "country ASC, taux ASC";
339$tabsqlsort[DICT_TYPE_RESOURCE] = "code ASC, label ASC";
340$tabsqlsort[DICT_TYPE_CONTAINER] = "t.module ASC, t.code ASC, t.label ASC";
341//$tabsqlsort[DICT_UNITS]="code ASC";
342$tabsqlsort[DICT_STCOMM] = "code ASC";
343$tabsqlsort[DICT_HOLIDAY_TYPES] = "sortorder ASC, country ASC, code ASC";
344$tabsqlsort[DICT_LEAD_STATUS] = "position ASC";
345$tabsqlsort[DICT_FORMAT_CARDS] = "code ASC";
346$tabsqlsort[DICT_INVOICE_SUBTYPE] = "country ASC, code ASC";
347$tabsqlsort[DICT_HRM_PUBLIC_HOLIDAY] = "country, year ASC, month ASC, day ASC";
348$tabsqlsort[DICT_HRM_DEPARTMENT] = "code ASC";
349$tabsqlsort[DICT_HRM_FUNCTION] = "code ASC";
350$tabsqlsort[DICT_EXP_TAX_CAT] = "c.label ASC";
351$tabsqlsort[DICT_EXP_TAX_RANGE] = "r.fk_c_exp_tax_cat ASC, r.range_ik ASC";
352$tabsqlsort[DICT_UNITS] = "sortorder ASC";
353$tabsqlsort[DICT_SOCIALNETWORKS] = "rowid, code ASC";
354$tabsqlsort[DICT_PROSPECTCONTACTLEVEL] = "sortorder ASC";
355$tabsqlsort[DICT_STCOMMCONTACT] = "code ASC";
356$tabsqlsort[DICT_TRANSPORT_MODE] = "code ASC";
357$tabsqlsort[DICT_PRODUCT_NATURE] = "code ASC";
358$tabsqlsort[DICT_PRODUCTBATCH_QCSTATUS] = "code ASC";
359$tabsqlsort[DICT_ASSET_DISPOSAL_TYPE] = "code ASC";
360
361// Field names in select result for dictionary display
362$tabfield = array();
363$tabfield[DICT_FORME_JURIDIQUE] = "code,libelle,country";
364$tabfield[DICT_DEPARTEMENTS] = "code,libelle,region_id,region,country"; // "code,libelle,region,country_code-country"
365$tabfield[DICT_REGIONS] = "code,libelle,country_id,country";
366$tabfield[DICT_COUNTRY] = "code,label,phone_code,trunk_prefix";
367$tabfield[DICT_CIVILITY] = "code,label";
368$tabfield[DICT_ACTIONCOMM] = "code,libelle,type,color,position";
369$tabfield[DICT_CHARGESOCIALES] = "code,libelle,country,accountancy_code";
370$tabfield[DICT_TYPENT] = "code,libelle,module,country_id,country".(getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? ',position' : '');
371$tabfield[DICT_CURRENCIES] = "code,label,unicode";
372$tabfield[DICT_TVA] = "country_id,country,department_buyer_id,department_buyer,code,type_vat,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,einvoice_vatex,accountancy_code_sell,accountancy_code_buy,use_default,note";
373$tabfield[DICT_TYPE_CONTACT] = "element,source,code,libelle,position";
374$tabfield[DICT_PAYMENT_TERM] = "code,libelle,libelle_facture,deposit_percent,nbjour,type_cdr,decalage,sortorder";
375$tabfield[DICT_PAIEMENT] = "code,libelle,type,accountancy_code";
376$tabfield[DICT_ECOTAXE] = "code,label,price,organization,country";
377$tabfield[DICT_PAPER_FORMAT] = "code,libelle,width,height,unit";
378$tabfield[DICT_PROSPECTLEVEL] = "code,libelle,sortorder";
379$tabfield[DICT_TYPE_FEES] = "code,label,accountancy_code";
380$tabfield[DICT_SHIPMENT_MODE] = "code,libelle,tracking";
381$tabfield[DICT_EFFECTIF] = "code,libelle";
382$tabfield[DICT_INPUT_METHOD] = "code,libelle";
383$tabfield[DICT_AVAILABILITY] = "code,label,qty,type_duration,position";
384$tabfield[DICT_INPUT_REASON] = "code,label";
385$tabfield[DICT_REVENUESTAMP] = "country_id,country,taux,revenuestamp_type,accountancy_code_sell,accountancy_code_buy,note";
386$tabfield[DICT_TYPE_RESOURCE] = "code,label";
387$tabfield[DICT_TYPE_CONTAINER] = "code,label";
388//$tabfield[DICT_UNITS]= "code,label,short_label";
389$tabfield[DICT_STCOMM] = "code,libelle,picto";
390$tabfield[DICT_HOLIDAY_TYPES] = "code,label,affect,delay,newbymonth,country_id,country,block_if_negative,sortorder";
391$tabfield[DICT_LEAD_STATUS] = "code,label,percent,position";
392$tabfield[DICT_FORMAT_CARDS] = "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
393$tabfield[DICT_INVOICE_SUBTYPE] = "country_id,country,code,label";
394$tabfield[DICT_HRM_PUBLIC_HOLIDAY] = "code,dayrule,year,month,day,country_id,country";
395$tabfield[DICT_HRM_DEPARTMENT] = "code,label";
396$tabfield[DICT_HRM_FUNCTION] = "code,label";
397$tabfield[DICT_EXP_TAX_CAT] = "label";
398$tabfield[DICT_EXP_TAX_RANGE] = "range_ik,fk_c_exp_tax_cat";
399$tabfield[DICT_UNITS] = "code,label,short_label,unit_type,scale,sortorder";
400$tabfield[DICT_SOCIALNETWORKS] = "code,label,url,icon";
401$tabfield[DICT_PROSPECTCONTACTLEVEL] = "code,libelle,sortorder";
402$tabfield[DICT_STCOMMCONTACT] = "code,libelle,picto";
403$tabfield[DICT_TRANSPORT_MODE] = "code,label";
404$tabfield[DICT_PRODUCT_NATURE] = "code,label";
405$tabfield[DICT_PRODUCTBATCH_QCSTATUS] = "code,label";
406$tabfield[DICT_ASSET_DISPOSAL_TYPE] = "code,label";
407
408// Edit field names for editing a record
409$tabfieldvalue = array();
410$tabfieldvalue[DICT_FORME_JURIDIQUE] = "code,libelle,country";
411$tabfieldvalue[DICT_DEPARTEMENTS] = "code,libelle,region"; // "code,libelle,region"
412$tabfieldvalue[DICT_REGIONS] = "code,libelle,country";
413$tabfieldvalue[DICT_COUNTRY] = "code,label,phone_code,trunk_prefix";
414$tabfieldvalue[DICT_CIVILITY] = "code,label";
415$tabfieldvalue[DICT_ACTIONCOMM] = "code,libelle,type,color,position";
416$tabfieldvalue[DICT_CHARGESOCIALES] = "code,libelle,country,accountancy_code";
417$tabfieldvalue[DICT_TYPENT] = "code,libelle,country".(getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? ',position' : '');
418$tabfieldvalue[DICT_CURRENCIES] = "code,label,unicode";
419$tabfieldvalue[DICT_TVA] = "country,department_buyer_id,code,type_vat,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,einvoice_vatex,accountancy_code_sell,accountancy_code_buy,use_default,note";
420$tabfieldvalue[DICT_TYPE_CONTACT] = "element,source,code,libelle,position";
421$tabfieldvalue[DICT_PAYMENT_TERM] = "code,libelle,libelle_facture,deposit_percent,nbjour,type_cdr,decalage,sortorder";
422$tabfieldvalue[DICT_PAIEMENT] = "code,libelle,type,accountancy_code";
423$tabfieldvalue[DICT_ECOTAXE] = "code,label,price,organization,country";
424$tabfieldvalue[DICT_PAPER_FORMAT] = "code,libelle,width,height,unit";
425$tabfieldvalue[DICT_PROSPECTLEVEL] = "code,libelle,sortorder";
426$tabfieldvalue[DICT_TYPE_FEES] = "code,label,accountancy_code";
427$tabfieldvalue[DICT_SHIPMENT_MODE] = "code,libelle,tracking";
428$tabfieldvalue[DICT_EFFECTIF] = "code,libelle";
429$tabfieldvalue[DICT_INPUT_METHOD] = "code,libelle";
430$tabfieldvalue[DICT_AVAILABILITY] = "code,label,qty,type_duration,position";
431$tabfieldvalue[DICT_INPUT_REASON] = "code,label";
432$tabfieldvalue[DICT_REVENUESTAMP] = "country,taux,revenuestamp_type,accountancy_code_sell,accountancy_code_buy,note";
433$tabfieldvalue[DICT_TYPE_RESOURCE] = "code,label";
434$tabfieldvalue[DICT_TYPE_CONTAINER] = "code,label";
435//$tabfieldvalue[DICT_UNITS]= "code,label,short_label";
436$tabfieldvalue[DICT_STCOMM] = "code,libelle,picto";
437$tabfieldvalue[DICT_HOLIDAY_TYPES] = "code,label,affect,delay,newbymonth,country,block_if_negative,sortorder";
438$tabfieldvalue[DICT_LEAD_STATUS] = "code,label,percent,position";
439$tabfieldvalue[DICT_FORMAT_CARDS] = "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
440$tabfieldvalue[DICT_INVOICE_SUBTYPE] = "country,code,label";
441$tabfieldvalue[DICT_HRM_PUBLIC_HOLIDAY] = "code,dayrule,day,month,year,country";
442$tabfieldvalue[DICT_HRM_DEPARTMENT] = "code,label";
443$tabfieldvalue[DICT_HRM_FUNCTION] = "code,label";
444$tabfieldvalue[DICT_EXP_TAX_CAT] = "label";
445$tabfieldvalue[DICT_EXP_TAX_RANGE] = "range_ik,fk_c_exp_tax_cat";
446$tabfieldvalue[DICT_UNITS] = "code,label,short_label,unit_type,scale,sortorder";
447$tabfieldvalue[DICT_SOCIALNETWORKS] = "code,label,url,icon";
448$tabfieldvalue[DICT_PROSPECTCONTACTLEVEL] = "code,libelle,sortorder";
449$tabfieldvalue[DICT_STCOMMCONTACT] = "code,libelle,picto";
450$tabfieldvalue[DICT_TRANSPORT_MODE] = "code,label";
451$tabfieldvalue[DICT_PRODUCT_NATURE] = "code,label";
452$tabfieldvalue[DICT_PRODUCTBATCH_QCSTATUS] = "code,label";
453$tabfieldvalue[DICT_ASSET_DISPOSAL_TYPE] = "code,label";
454
455// Field names in the table for inserting a record (add field "entity" only here when dictionary is ready to personalized by entity)
456$tabfieldinsert = array();
457$tabfieldinsert[DICT_FORME_JURIDIQUE] = "code,libelle,fk_pays";
458$tabfieldinsert[DICT_DEPARTEMENTS] = "code_departement,nom,fk_region";
459$tabfieldinsert[DICT_REGIONS] = "code_region,nom,fk_pays";
460$tabfieldinsert[DICT_COUNTRY] = "code,label,phone_code,trunk_prefix";
461$tabfieldinsert[DICT_CIVILITY] = "code,label";
462$tabfieldinsert[DICT_ACTIONCOMM] = "code,libelle,type,color,position";
463$tabfieldinsert[DICT_CHARGESOCIALES] = "code,libelle,fk_pays,accountancy_code";
464$tabfieldinsert[DICT_TYPENT] = "code,libelle,fk_country".(getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? ',position' : '');
465$tabfieldinsert[DICT_CURRENCIES] = "code_iso,label,unicode";
466$tabfieldinsert[DICT_TVA] = "fk_pays,fk_department_buyer,code,type_vat,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,einvoice_vatex,accountancy_code_sell,accountancy_code_buy,use_default,note,entity";
467$tabfieldinsert[DICT_TYPE_CONTACT] = "element,source,code,libelle,position";
468$tabfieldinsert[DICT_PAYMENT_TERM] = "code,libelle,libelle_facture,deposit_percent,nbjour,type_cdr,decalage,sortorder,entity";
469$tabfieldinsert[DICT_PAIEMENT] = "code,libelle,type,accountancy_code,entity";
470$tabfieldinsert[DICT_ECOTAXE] = "code,label,price,organization,fk_pays";
471$tabfieldinsert[DICT_PAPER_FORMAT] = "code,label,width,height,unit";
472$tabfieldinsert[DICT_PROSPECTLEVEL] = "code,label,sortorder";
473$tabfieldinsert[DICT_TYPE_FEES] = "code,label,accountancy_code";
474$tabfieldinsert[DICT_SHIPMENT_MODE] = "code,libelle,tracking";
475$tabfieldinsert[DICT_EFFECTIF] = "code,libelle";
476$tabfieldinsert[DICT_INPUT_METHOD] = "code,libelle";
477$tabfieldinsert[DICT_AVAILABILITY] = "code,label,qty,type_duration,position";
478$tabfieldinsert[DICT_INPUT_REASON] = "code,label";
479$tabfieldinsert[DICT_REVENUESTAMP] = "fk_pays,taux,revenuestamp_type,accountancy_code_sell,accountancy_code_buy,note";
480$tabfieldinsert[DICT_TYPE_RESOURCE] = "code,label";
481$tabfieldinsert[DICT_TYPE_CONTAINER] = "code,label,entity";
482//$tabfieldinsert[DICT_UNITS]= "code,label,short_label";
483$tabfieldinsert[DICT_STCOMM] = "code,libelle,picto";
484$tabfieldinsert[DICT_HOLIDAY_TYPES] = "code,label,affect,delay,newbymonth,fk_country,block_if_negative,sortorder,entity";
485$tabfieldinsert[DICT_LEAD_STATUS] = "code,label,percent,position";
486$tabfieldinsert[DICT_FORMAT_CARDS] = "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y";
487$tabfieldinsert[DICT_INVOICE_SUBTYPE] = "fk_country,code,label";
488$tabfieldinsert[DICT_HRM_PUBLIC_HOLIDAY] = "code,dayrule,day,month,year,fk_country,entity";
489$tabfieldinsert[DICT_HRM_DEPARTMENT] = "code,label";
490$tabfieldinsert[DICT_HRM_FUNCTION] = "code,label";
491$tabfieldinsert[DICT_EXP_TAX_CAT] = "label";
492$tabfieldinsert[DICT_EXP_TAX_RANGE] = "range_ik,fk_c_exp_tax_cat";
493$tabfieldinsert[DICT_UNITS] = "code,label,short_label,unit_type,scale,sortorder";
494$tabfieldinsert[DICT_SOCIALNETWORKS] = "code,label,url,icon,entity";
495$tabfieldinsert[DICT_PROSPECTCONTACTLEVEL] = "code,label,sortorder";
496$tabfieldinsert[DICT_STCOMMCONTACT] = "code,libelle,picto";
497$tabfieldinsert[DICT_TRANSPORT_MODE] = "code,label";
498$tabfieldinsert[DICT_PRODUCT_NATURE] = "code,label";
499$tabfieldinsert[DICT_PRODUCTBATCH_QCSTATUS] = "code,label";
500$tabfieldinsert[DICT_ASSET_DISPOSAL_TYPE] = "code,label";
501
502// Rowid name of field depending if field is autoincrement on or off..
503// Use "" if id field is "rowid" and has autoincrement on
504// Use "nameoffield" if id field is not "rowid" or has not autoincrement on
505$tabrowid = array();
506$tabrowid[DICT_FORME_JURIDIQUE] = "";
507$tabrowid[DICT_DEPARTEMENTS] = "";
508$tabrowid[DICT_REGIONS] = "";
509$tabrowid[DICT_COUNTRY] = "rowid";
510$tabrowid[DICT_CIVILITY] = "rowid";
511$tabrowid[DICT_ACTIONCOMM] = "id";
512$tabrowid[DICT_CHARGESOCIALES] = "id";
513$tabrowid[DICT_TYPENT] = "id";
514$tabrowid[DICT_CURRENCIES] = "code_iso";
515$tabrowid[DICT_TVA] = "";
516$tabrowid[DICT_TYPE_CONTACT] = "rowid";
517$tabrowid[DICT_PAYMENT_TERM] = "";
518$tabrowid[DICT_PAIEMENT] = "id";
519$tabrowid[DICT_ECOTAXE] = "";
520$tabrowid[DICT_PAPER_FORMAT] = "";
521$tabrowid[DICT_PROSPECTLEVEL] = "code";
522$tabrowid[DICT_TYPE_FEES] = "id";
523$tabrowid[DICT_SHIPMENT_MODE] = "rowid";
524$tabrowid[DICT_EFFECTIF] = "id";
525$tabrowid[DICT_INPUT_METHOD] = "";
526$tabrowid[DICT_AVAILABILITY] = "rowid";
527$tabrowid[DICT_INPUT_REASON] = "rowid";
528$tabrowid[DICT_REVENUESTAMP] = "";
529$tabrowid[DICT_TYPE_RESOURCE] = "";
530$tabrowid[DICT_TYPE_CONTAINER] = "";
531//$tabrowid[DICT_UNITS]= "";
532$tabrowid[DICT_STCOMM] = "id";
533$tabrowid[DICT_HOLIDAY_TYPES] = "";
534$tabrowid[DICT_LEAD_STATUS] = "";
535$tabrowid[DICT_FORMAT_CARDS] = "";
536$tabrowid[DICT_INVOICE_SUBTYPE] = "";
537$tabrowid[DICT_HRM_PUBLIC_HOLIDAY] = "id";
538$tabrowid[DICT_HRM_DEPARTMENT] = "rowid";
539$tabrowid[DICT_HRM_FUNCTION] = "rowid";
540$tabrowid[DICT_EXP_TAX_CAT] = "";
541$tabrowid[DICT_EXP_TAX_RANGE] = "";
542$tabrowid[DICT_UNITS] = "";
543$tabrowid[DICT_SOCIALNETWORKS] = "";
544$tabrowid[DICT_PROSPECTCONTACTLEVEL] = "code";
545$tabrowid[DICT_STCOMMCONTACT] = "id";
546$tabrowid[DICT_TRANSPORT_MODE] = "";
547$tabrowid[DICT_PRODUCT_NATURE] = "rowid";
548$tabrowid[DICT_PRODUCTBATCH_QCSTATUS] = "rowid";
549$tabrowid[DICT_ASSET_DISPOSAL_TYPE] = "rowid";
550
551// Condition to show dictionary in setup page
552$tabcond = array();
553$tabcond[DICT_FORME_JURIDIQUE] = (isModEnabled("societe"));
554$tabcond[DICT_DEPARTEMENTS] = true;
555$tabcond[DICT_REGIONS] = true;
556$tabcond[DICT_COUNTRY] = true;
557$tabcond[DICT_CIVILITY] = (isModEnabled("societe") || isModEnabled('member'));
558$tabcond[DICT_ACTIONCOMM] = isModEnabled('agenda');
559$tabcond[DICT_CHARGESOCIALES] = isModEnabled('tax');
560$tabcond[DICT_TYPENT] = isModEnabled("societe");
561$tabcond[DICT_CURRENCIES] = true;
562$tabcond[DICT_TVA] = true;
563$tabcond[DICT_TYPE_CONTACT] = (isModEnabled("societe"));
564$tabcond[DICT_PAYMENT_TERM] = (isModEnabled('order') || isModEnabled("propal") || isModEnabled('invoice') || isModEnabled("supplier_invoice") || isModEnabled("supplier_order"));
565$tabcond[DICT_PAIEMENT] = (isModEnabled('order') || isModEnabled("propal") || isModEnabled('invoice') || isModEnabled("supplier_invoice") || isModEnabled("supplier_order"));
566$tabcond[DICT_ECOTAXE] = (isModEnabled("product") && (isModEnabled('ecotax') || getDolGlobalString('MAIN_SHOW_ECOTAX_DICTIONNARY')));
567$tabcond[DICT_PAPER_FORMAT] = true;
568$tabcond[DICT_PROSPECTLEVEL] = (isModEnabled("societe") && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS'));
569$tabcond[DICT_TYPE_FEES] = (isModEnabled('deplacement') || isModEnabled('expensereport'));
570$tabcond[DICT_SHIPMENT_MODE] = isModEnabled("shipping") || isModEnabled("reception");
571$tabcond[DICT_EFFECTIF] = isModEnabled("societe");
572$tabcond[DICT_INPUT_METHOD] = isModEnabled("supplier_order");
573$tabcond[DICT_AVAILABILITY] = isModEnabled("propal");
574$tabcond[DICT_INPUT_REASON] = (isModEnabled('order') || isModEnabled("propal"));
575$tabcond[DICT_REVENUESTAMP] = true;
576$tabcond[DICT_TYPE_RESOURCE] = isModEnabled('resource');
577$tabcond[DICT_TYPE_CONTAINER] = isModEnabled('website');
578//$tabcond[DICT_UNITS]= isModEnabled("product");
579$tabcond[DICT_STCOMM] = isModEnabled("societe");
580$tabcond[DICT_HOLIDAY_TYPES] = isModEnabled('holiday');
581$tabcond[DICT_LEAD_STATUS] = isModEnabled('project');
582$tabcond[DICT_FORMAT_CARDS] = (isModEnabled('label') || isModEnabled('barcode') || isModEnabled('member')); // stickers format dictionary
583$tabcond[DICT_INVOICE_SUBTYPE] = ((isModEnabled('invoice') || isModEnabled('supplier_invoice')) && $mysoc->country_code == 'GR');
584$tabcond[DICT_HRM_PUBLIC_HOLIDAY] = (isModEnabled('holiday') || isModEnabled('hrm'));
585$tabcond[DICT_HRM_DEPARTMENT] = isModEnabled('hrm');
586$tabcond[DICT_HRM_FUNCTION] = isModEnabled('hrm');
587$tabcond[DICT_EXP_TAX_CAT] = isModEnabled('expensereport') && getDolGlobalString('MAIN_USE_EXPENSE_IK');
588$tabcond[DICT_EXP_TAX_RANGE] = isModEnabled('expensereport') && getDolGlobalString('MAIN_USE_EXPENSE_IK');
589$tabcond[DICT_UNITS] = isModEnabled("product");
590$tabcond[DICT_SOCIALNETWORKS] = isModEnabled('socialnetworks');
591$tabcond[DICT_PROSPECTCONTACTLEVEL] = (isModEnabled("societe") && !getDolGlobalString('SOCIETE_DISABLE_PROSPECTS') && getDolGlobalString('THIRDPARTY_ENABLE_PROSPECTION_ON_ALTERNATIVE_ADRESSES'));
592$tabcond[DICT_STCOMMCONTACT] = (isModEnabled("societe") && getDolGlobalString('THIRDPARTY_ENABLE_PROSPECTION_ON_ALTERNATIVE_ADRESSES'));
593$tabcond[DICT_TRANSPORT_MODE] = isModEnabled('intracommreport');
594$tabcond[DICT_PRODUCT_NATURE] = isModEnabled("product");
595$tabcond[DICT_PRODUCTBATCH_QCSTATUS] = isModEnabled("product") && isModEnabled('productbatch') && getDolGlobalInt('MAIN_FEATURES_LEVEL') >= 2;
596$tabcond[DICT_ASSET_DISPOSAL_TYPE] = isModEnabled('asset');
597
598// List of help for fields (no more used, help is defined into tabcomplete)
599$tabhelp = array();
600
601
602$tooltipvatex = $langs->trans("VATExemptionCodeDesc").'<br>'.$langs->trans("VATExemptionCodeDesc2").'<br>'.$langs->trans("VATExemptionCodeDesc3");
603if (($mysoc->country_code == 'FR')) {
604 $tooltipvatex .= '<br><br>'.$langs->trans("Example").':<br>';
605 $tooltipvatex .= 'VATEX-FR-FRANCHISE, VATEX-FR-CGI261-4, VATEX-FR-J, VATEX-FR-I, VATEX-FR-D, ...';
606}
607
608// Table to store complete information (will replace all other tables). Key is table name.
609$tabcomplete = array(
610 'c_forme_juridique' => array(
611 'picto' => 'company',
612 'help' => array('code' => $langs->trans("EnterAnyCode"))
613 ),
614 'c_departements' => array(
615 'picto' => 'state',
616 'help' => array('code' => $langs->trans("EnterAnyCode"))
617 ),
618 'c_regions' => array(
619 'picto' => 'region',
620 'help' => array('code' => $langs->trans("EnterAnyCode"))
621 ),
622 'c_country' => array('picto' => 'country', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'phone_code' => 'e.g. 33', 'trunk_prefix' => 'e.g. 0')),
623 'c_civility' => array('picto' => 'contact', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
624 'c_actioncomm' => array('picto' => 'action', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'color' => $langs->trans("ColorFormat"), 'position' => $langs->trans("PositionIntoComboList"))),
625 'c_chargesociales' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
626 'c_typent' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'position' => $langs->trans("PositionIntoComboList"))),
627 'c_currencies' => array('picto' => 'multicurrency', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'unicode' => $langs->trans("UnicodeCurrency"))),
628 'c_tva' => array('picto' => 'bill', 'css' => array('einvoice_vatex' => 'tdoverflowmax100'), 'help' => array('code' => $langs->trans("EnterAnyCode"), 'taux' => $langs->trans("SellTaxRate"), 'recuperableonly' => $langs->trans("RecuperableOnly"), 'localtax1_type' => $langs->trans("LocalTaxDesc"), 'localtax2_type' => $langs->trans("LocalTaxDesc"), 'einvoice_vatex' => $tooltipvatex)),
629 'c_type_contact' => array('picto' => 'contact', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'position' => $langs->trans("PositionIntoComboList"))),
630 'c_payment_term' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'type_cdr' => $langs->trans("TypeCdr", $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset"), $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset")))),
631 'c_paiement' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
632 'c_ecotaxe' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
633 'c_paper_format' => array('picto' => 'generic', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
634 'c_prospectlevel' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
635 'c_type_fees' => array('picto' => 'trip', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
636 'c_shipment_mode' => array('picto' => 'shipment', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'tracking' => $langs->trans("UrlTrackingDesc"))),
637 'c_effectif' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
638 'c_input_method' => array('picto' => 'order', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
639 'c_input_reason' => array('picto' => 'order', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'position' => $langs->trans("PositionIntoComboList"))),
640 'c_availability' => array('picto' => 'shipment', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
641 'c_revenuestamp' => array('picto' => 'bill', 'help' => array('revenuestamp_type' => $langs->trans('FixedOrPercent'))),
642 'c_type_resource' => array('picto' => 'resource', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
643 'c_type_container' => array('picto' => 'website', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
644 'c_stcomm' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'picto' => $langs->trans("PictoHelp"))),
645 'c_holiday_types' => array('picto' => 'holiday', 'help' => array('affect' => $langs->trans("FollowedByACounter"), 'delay' => $langs->trans("MinimumNoticePeriod"), 'newbymonth' => $langs->trans("NbAddedAutomatically"))),
646 'c_lead_status' => array('picto' => 'project', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'percent' => $langs->trans("OpportunityPercent"), 'position' => $langs->trans("PositionIntoComboList"))),
647 'c_format_cards' => array('picto' => 'generic', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'name' => $langs->trans("LabelName"), 'paper_size' => $langs->trans("LabelPaperSize"))),
648 'c_hrm_public_holiday' => array('picto' => 'holiday', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'dayrule' => "Keep empty for a date defined with month and day (most common case).<br>Use a keyword like 'easter', 'eastermonday', ... for a date predefined by complex rules.", 'country' => $langs->trans("CountryIfSpecificToOneCountry"), 'year' => $langs->trans("ZeroMeansEveryYear"))),
649 'c_hrm_department' => array('picto' => 'hrm', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
650 'c_hrm_function' => array('picto' => 'hrm', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
651 'c_exp_tax_cat' => array('picto' => 'expensereport', 'help' => array()),
652 'c_exp_tax_range' => array('picto' => 'expensereport', 'help' => array('range_ik' => $langs->trans('PrevRangeToThisRange'))),
653 'c_units' => array('picto' => 'product', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'unit_type' => $langs->trans('Measuringtype_durationDesc'), 'scale' => $langs->trans('MeasuringScaleDesc'))),
654 'c_socialnetworks' => array('picto' => 'share-alt', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'url' => $langs->trans('UrlSocialNetworksDesc'), 'icon' => $langs->trans('FafaIconSocialNetworksDesc'))),
655 'c_prospectcontactlevel' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
656 'c_stcommcontact' => array('picto' => 'company', 'help' => array('code' => $langs->trans("EnterAnyCode"), 'picto' => $langs->trans("PictoHelp"))),
657 'c_transport_mode' => array('picto' => 'incoterm', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
658 'c_product_nature' => array('picto' => 'product', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
659 'c_productbatch_qcstatus' => array('picto' => 'lot', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
660 'c_asset_disposal_type' => array('picto' => 'asset', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
661 'c_invoice_subtype' => array('picto' => 'bill', 'help' => array('code' => $langs->trans("EnterAnyCode"))),
662);
663
664
665// Complete all arrays with entries found into modules
666complete_dictionary_with_modules($taborder, $tabname, $tablib, $tabsql, $tabsqlsort, $tabfield, $tabfieldvalue, $tabfieldinsert, $tabrowid, $tabcond, $tabhelp, $tabcomplete);
667
668// Complete the table $tabcomplete
669$i = 0;
670foreach ($tabcomplete as $key => $value) {
671 $i++;
672 // When a dictionary is commented
673 if (!isset($tabcond[$i])) {
674 continue;
675 }
676 $tabcomplete[$key]['id'] = $i;
677
678 // TODO Comment this lines when data is stored into the tabcomplete array
679 $tabcomplete[$key]['cond'] = $tabcond[$i];
680 $tabcomplete[$key]['rowid'] = $tabrowid[$i];
681 $tabcomplete[$key]['fieldinsert'] = $tabfieldinsert[$i];
682 $tabcomplete[$key]['fieldvalue'] = $tabfieldvalue[$i];
683 $tabcomplete[$key]['lib'] = $tablib[$i];
684 $tabcomplete[$key]['sql'] = $tabsql[$i];
685 $tabcomplete[$key]['sqlsort'] = $tabsqlsort[$i];
686 $tabcomplete[$key]['field'] = $tabfield[$i];
687 //$tabcomplete[$key]['picto'] = $tabpicto[$i]; // array picto already loaded into tabcomplete
688 //$tabcomplete[$key]['help'] = $tabhelp[$i]; // array help already loaded into tabcomplete
689}
690
691$keytable = '';
692if ($id > 0) {
693 $arrayofkeys = array_keys($tabcomplete);
694 if (array_key_exists($id - 1, $arrayofkeys)) {
695 $keytable = $arrayofkeys[$id - 1];
696 }
697}
698
699// Default sortorder
700if (empty($sortfield)) {
701 $tmp1 = explode(',', empty($tabcomplete[$keytable]['sqlsort']) ? '' : $tabcomplete[$keytable]['sqlsort']);
702 $tmp2 = explode(' ', $tmp1[0]);
703 $sortfield = preg_replace('/^.*\./', '', $tmp2[0]);
704 $sortorder = (!empty($tmp2[1]) ? $tmp2[1] : ''); // @phan-suppress-current-line SqlInjection
705 //var_dump($sortfield); //var_dump($sortorder);
706}
707
708global $elementList, $sourceList, $localtax_typeList, $type_vatList; // Used in dictFieldList() below
709
710// Define elementList and sourceList (used for dictionary type of contacts "llx_c_type_contact")
711$elementList = array();
712$sourceList = array();
713if ($id == DICT_TYPE_CONTACT) {
714 $elementList = array(
715 '' => '',
716 'agenda' => img_picto('', 'action', 'class="pictofixedwidth"').$langs->trans('Agenda'),
717 'dolresource' => img_picto('', 'resource', 'class="pictofixedwidth"').$langs->trans('Resource'),
718 'societe' => img_picto('', 'company', 'class="pictofixedwidth"').$langs->trans('ThirdParty'),
719 'product' => img_picto('', 'product', 'class="pictofixedwidth"').$langs->trans('Product'),
720 // 'proposal' => $langs->trans('Proposal'),
721 // 'order' => $langs->trans('Order'),
722 // 'invoice' => $langs->trans('Bill'),
723 // 'intervention' => $langs->trans('InterventionCard'),
724 // 'contract' => $langs->trans('Contract'),
725 'project' => img_picto('', 'project', 'class="pictofixedwidth"').$langs->trans('Project'),
726 'project_task' => img_picto('', 'projecttask', 'class="pictofixedwidth"').$langs->trans('Task'),
727 'propal' => img_picto('', 'propal', 'class="pictofixedwidth"').$langs->trans('Proposal'),
728 'commande' => img_picto('', 'order', 'class="pictofixedwidth"').$langs->trans('Order'),
729 'shipping' => img_picto('', 'dolly', 'class="pictofixedwidth"') . $langs->trans('Shipment'),
730 'facture' => img_picto('', 'bill', 'class="pictofixedwidth"').$langs->trans('Bill'),
731 'fichinter' => img_picto('', 'intervention', 'class="pictofixedwidth"').$langs->trans('InterventionCard'),
732 'contrat' => img_picto('', 'contract', 'class="pictofixedwidth"').$langs->trans('Contract'),
733 'ticket' => img_picto('', 'ticket', 'class="pictofixedwidth"').$langs->trans('Ticket'),
734 'supplier_proposal' => img_picto('', 'supplier_proposal', 'class="pictofixedwidth"').$langs->trans('SupplierProposal'),
735 'order_supplier' => img_picto('', 'supplier_order', 'class="pictofixedwidth"').$langs->trans('SupplierOrder'),
736 'invoice_supplier' => img_picto('', 'supplier_invoice', 'class="pictofixedwidth"').$langs->trans('SupplierBill'),
737 'conferenceorbooth' => img_picto('', 'eventorganization', 'class="pictofixedwidth"').$langs->trans('ConferenceOrBooth'),
738 );
739
740 complete_elementList_with_modules($elementList);
741
742 //asort($elementList);
743 $sourceList = array(
744 'internal' => $langs->trans('Internal'),
745 'external' => $langs->trans('External')
746 );
747}
748
749// Define type_vatList (used for dictionary "llx_c_tva")
750$type_vatList = array(
751 "0" => $langs->trans("Sell").'+'.$langs->trans("Buy"),
752 "1" => $langs->trans("Sell"),
753 "2" => $langs->trans("Buy")
754);
755
756// Define localtax_typeList (used for dictionary "llx_c_tva")
757$localtax_typeList = array(
758 "0" => $langs->trans("No"),
759 "1" => $langs->trans("Yes").' ('.$langs->trans("Type")." 1)", //$langs->trans("%ageOnAllWithoutVAT"),
760 "2" => $langs->trans("Yes").' ('.$langs->trans("Type")." 2)", //$langs->trans("%ageOnAllBeforeVAT"),
761 "3" => $langs->trans("Yes").' ('.$langs->trans("Type")." 3)", //$langs->trans("%ageOnProductsWithoutVAT"),
762 "4" => $langs->trans("Yes").' ('.$langs->trans("Type")." 4)", //$langs->trans("%ageOnProductsBeforeVAT"),
763 "5" => $langs->trans("Yes").' ('.$langs->trans("Type")." 5)", //$langs->trans("%ageOnServiceWithoutVAT"),
764 "6" => $langs->trans("Yes").' ('.$langs->trans("Type")." 6)" //$langs->trans("%ageOnServiceBeforeVAT"),
765);
766
767
768
769/*
770 * Actions
771 */
772
773$object = new stdClass();
774$parameters = array(
775 'id' => $id,
776 'rowid' => $rowid,
777 'code' => $code,
778 'confirm' => $confirm,
779 'entity' => $entity,
780 'taborder' => $taborder,
781 'tabname' => $tabname,
782 'tablib' => $tablib,
783 'tabsql' => $tabsql,
784 'tabsqlsort' => $tabsqlsort,
785 'tabfield' => $tabfield,
786 'tabfieldvalue' => $tabfieldvalue,
787 'tabfieldinsert' => $tabfieldinsert,
788 'tabrowid' => $tabrowid,
789 'tabcond' => $tabcond,
790 'tabhelp' => $tabhelp,
791 'tabcomplete' => $tabcomplete
792);
793$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
794if ($reshook < 0) {
795 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
796}
797
798if (GETPOST('button_removefilter', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter_x', 'alpha')) {
799 $search_country_id = '';
800 $search_code = '';
801 $search_active = '';
802}
803
804if (empty($reshook)) {
805 // Actions add or modify an entry into a dictionary
806 if (GETPOST('actionadd') || GETPOST('actionmodify')) {
807 $listfield = explode(',', str_replace(' ', '', $tabfield[$id]));
808 $listfieldinsert = explode(',', $tabfieldinsert[$id]);
809 $listfieldmodify = explode(',', $tabfieldinsert[$id]);
810 $listfieldvalue = explode(',', $tabfieldvalue[$id]);
811
812 // Check that all mandatory fields are filled
813 $ok = 1;
814 foreach ($listfield as $f => $value) {
815 // Discard check of mandatory fields for country for some tables
816 if ($value == 'country_id' && in_array($tablib[$id], array('DictionaryPublicHolidays', 'DictionaryVAT', 'DictionaryInvoiceSubtype', 'DictionaryRegion', 'DictionaryCompanyType', 'DictionaryHolidayTypes', 'DictionaryRevenueStamp', 'DictionaryAccountancysystem', 'DictionaryAccountancyCategory'))) {
817 continue; // For some pages, country is not mandatory
818 }
819 if ($value == 'country' && in_array($tablib[$id], array('DictionaryPublicHolidays', 'DictionaryCanton', 'DictionaryCompanyType', 'DictionaryHolidayTypes', 'DictionaryRevenueStamp'))) {
820 continue; // For some pages, country is not mandatory
821 }
822 // Discard check of mandatory fields for department buyer id for some tables (only for add action)
823 if (GETPOST('actionadd') && $value == 'department_buyer_id' && $tablib[$id] == 'DictionaryVAT') {
824 continue; // For some pages, department buyer id is not mandatory
825 }
826 // Discard check of mandatory fields for department buyer for some tables
827 if ($value == 'department_buyer' && $tablib[$id] == 'DictionaryVAT') {
828 continue; // For some pages, department buyer is not mandatory
829 }
830 // Discard check of mandatory fields for other fields
831 $notmandatoryarray = array('localtax1', 'localtax2', 'color', 'formula', 'dayrule', 'einvoice_vatex');
832 foreach ($notmandatoryarray as $notmandatory) {
833 if (!GETPOST($notmandatory)) {
834 continue 2;
835 }
836 }
837 if ($value == 'sortorder') {
838 continue; // For a column name 'sortorder', we use the field name 'position'
839 }
840 if ((!GETPOSTISSET($value) || GETPOST($value) == '')
841 && (
842 !in_array($value, array('decalage', 'module', 'accountancy_code', 'accountancy_code_sell', 'accountancy_code_buy', 'tracking', 'picto', 'deposit_percent')) // Fields that are not mandatory
843 && ($id != DICT_TVA || ($value != 'code' && $value != 'note')) // Field code and note is not mandatory for dictionary table 10
844 )
845 ) {
846 $ok = 0;
847 $fieldnamekey = $value;
848 // We take translate key of field
849 if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label')) {
850 $fieldnamekey = 'Label';
851 }
852 if ($fieldnamekey == 'libelle_facture') {
853 $fieldnamekey = 'LabelOnDocuments';
854 }
855 if ($fieldnamekey == 'deposit_percent') {
856 $fieldnamekey = 'DepositPercent';
857 }
858 if ($fieldnamekey == 'nbjour') {
859 $fieldnamekey = 'NbOfDays';
860 }
861 if ($fieldnamekey == 'decalage') {
862 $fieldnamekey = 'Offset';
863 }
864 if ($fieldnamekey == 'module') {
865 $fieldnamekey = 'Module';
866 }
867 if ($fieldnamekey == 'code') {
868 $fieldnamekey = 'Code';
869 }
870 if ($fieldnamekey == 'note') {
871 $fieldnamekey = 'Note';
872 }
873 if ($fieldnamekey == 'taux') {
874 $fieldnamekey = 'Rate';
875 }
876 if ($fieldnamekey == 'type') {
877 $fieldnamekey = 'Type';
878 }
879 if ($fieldnamekey == 'position') {
880 $fieldnamekey = 'Position';
881 }
882 if ($fieldnamekey == 'unicode') {
883 $fieldnamekey = 'Unicode';
884 }
885 if ($fieldnamekey == 'deductible') {
886 $fieldnamekey = 'Deductible';
887 }
888 if ($fieldnamekey == 'sortorder') {
889 $fieldnamekey = 'SortOrder';
890 }
891 if ($fieldnamekey == 'category_type') {
892 $fieldnamekey = 'Calculated';
893 }
894 if ($fieldnamekey == 'revenuestamp_type') {
895 $fieldnamekey = 'TypeOfRevenueStamp';
896 }
897 if ($fieldnamekey == 'use_default') {
898 $fieldnamekey = 'UseByDefault';
899 }
900
901 setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
902 }
903 }
904 // Other special checks
905 if (GETPOST('actionadd') && $tabname[$id] == "c_actioncomm" && GETPOSTISSET("type") && in_array(GETPOST("type"), array('system', 'systemauto'))) {
906 $ok = 0;
907 setEventMessages($langs->transnoentities('ErrorReservedTypeSystemSystemAuto'), null, 'errors');
908 }
909 if (GETPOSTISSET("code")) {
910 if (GETPOST("code") == '0') {
911 $ok = 0;
912 setEventMessages($langs->transnoentities('ErrorCodeCantContainZero'), null, 'errors');
913 }
914 }
915 if (GETPOSTISSET("country") && (GETPOST("country") == '0') && ($id != DICT_DEPARTEMENTS)) {
916 if (in_array($tablib[$id], array('DictionaryCompanyType', 'DictionaryHolidayTypes'))) { // Field country is no mandatory for such dictionaries
917 $_POST["country"] = '';
918 } else {
919 $ok = 0;
920 setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities("Country")), null, 'errors');
921 }
922 }
923 if (($id == DICT_REGIONS || $id == DICT_PRODUCT_NATURE) && !is_numeric(GETPOST("code")) && GETPOST('actionadd')) {
924 $ok = 0;
925 setEventMessages($langs->transnoentities("ErrorFieldMustBeANumeric", $langs->transnoentities("Code")), null, 'errors');
926 }
927 if ($id == DICT_COUNTRY && strlen(GETPOST("code")) != 2) { // 2 char on code for country code
928 $ok = 0;
929 setEventMessages($langs->transnoentities("ErrorCountryCodeMustBe2Char", $langs->transnoentities("Code")), null, 'errors');
930 }
931 if ($id == DICT_PAIEMENT && strlen(GETPOST("code")) >= 6) { // 6 char max on code for payment mode codes
932 $ok = 0;
933 setEventMessages($langs->transnoentities("ErrorFieldMustHaveLessThanXChar", $langs->transnoentities("Code"), '6'), null, 'errors');
934 }
935
936 // Clean some parameters
937 if ((GETPOST("localtax1_type") || (GETPOST('localtax1_type') == '0')) && !GETPOST("localtax1")) {
938 $_POST["localtax1"] = '0'; // If empty, we force to 0
939 }
940 if ((GETPOST("localtax2_type") || (GETPOST('localtax2_type') == '0')) && !GETPOST("localtax2")) {
941 $_POST["localtax2"] = '0'; // If empty, we force to 0
942 }
943 if (GETPOST('department_buyer_id') <= 0) {
944 $_POST['department_buyer_id'] = ''; // If empty, we force to null
945 }
946 if (GETPOST("accountancy_code") <= 0) {
947 $_POST["accountancy_code"] = ''; // If empty, we force to null
948 }
949 if (GETPOST("accountancy_code_sell") <= 0) {
950 $_POST["accountancy_code_sell"] = ''; // If empty, we force to null
951 }
952 if (GETPOST("accountancy_code_buy") <= 0) {
953 $_POST["accountancy_code_buy"] = ''; // If empty, we force to null
954 }
955 if ($id == DICT_TVA && GETPOSTISSET("code")) { // Spaces are not allowed into code for tax dictionary
956 $_POST["code"] = preg_replace('/[^a-zA-Z0-9_\-\+]/', '', GETPOST("code"));
957 }
958
959 $tablename = $tabname[$id];
960 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
961
962 // If check ok and action add, add the line
963 if ($ok && GETPOST('actionadd')) {
964 $newid = 0;
965 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
966 // Get free id for insert
967 $sql = "SELECT MAX(".$tabrowid[$id].") as newid FROM ".MAIN_DB_PREFIX.$db->sanitize($tablename);
968 $result = $db->query($sql);
969 if ($result) {
970 $obj = $db->fetch_object($result);
971 $newid = ((int) $obj->newid) + 1;
972 } else {
974 }
975 }
976
977 // Add new entry
978 $sql = "INSERT INTO ".MAIN_DB_PREFIX.$db->sanitize($tablename)." (";
979 // List of fields
980 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
981 $sql .= $tabrowid[$id].",";
982 }
983 $sql .= $tabfieldinsert[$id];
984 $sql .= ",active)";
985 $sql .= " VALUES(";
986
987 // List of values
988 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
989 $sql .= ((int) $newid).",";
990 }
991 $i = 0;
992 foreach ($listfieldinsert as $f => $value) {
993 $keycode = (isset($listfieldvalue[$i]) ? $listfieldvalue[$i] : '');
994 if (empty($keycode)) {
995 $keycode = $value;
996 }
997
998 if ($value == 'price' || preg_match('/^amount/i', $value)) {
999 $_POST[$keycode] = price2num(GETPOST($keycode), 'MU');
1000 } elseif ($value == 'taux' || $value == 'localtax1') {
1001 $_POST[$keycode] = price2num(GETPOST($keycode), 8); // Note that localtax2 can be a list of rates separated by coma like X:Y:Z
1002 } elseif ($value == 'entity') {
1003 $_POST[$keycode] = (int) getEntity($tablename, 0);
1004 }
1005
1006 if ($i) {
1007 $sql .= ",";
1008 }
1009
1010 if ($keycode == 'sortorder') { // For column name 'sortorder', we use the field name 'position'
1011 $sql .= GETPOSTINT('position');
1012 } elseif (GETPOST($keycode) == '' && !($keycode == 'code' && $id == DICT_TVA)) {
1013 $sql .= "null"; // For vat, we want/accept code = ''
1014 } elseif ($keycode == 'content') {
1015 $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
1016 } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) {
1017 $sql .= GETPOSTINT($keycode);
1018 } else {
1019 $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'";
1020 }
1021
1022 $i++;
1023 }
1024 $sql .= ",1)";
1025
1026 dol_syslog("actionadd", LOG_DEBUG);
1027 $resql = $db->query($sql);
1028 if ($resql) { // Add is ok
1029 setEventMessages($langs->transnoentities("RecordCreatedSuccessfully"), null, 'mesgs');
1030
1031 // PostgreSQL: when we forced the rowid we must bump the matching <table>_<rowid_col>_seq
1032 // so the next auto-increment insert does not collide with our chosen value (#36510).
1033 if ($db->type == 'pgsql' && $tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
1034 $db->query("SELECT setval(pg_get_serial_sequence('".$db->escape(MAIN_DB_PREFIX.$db->sanitize($tablename))."', '".$db->escape($tabrowid[$id])."'), GREATEST((SELECT MAX(".$db->sanitize($tabrowid[$id]).") FROM ".MAIN_DB_PREFIX.$db->sanitize($tablename)."), 1))");
1035 }
1036
1037 // Clean $_POST array, we keep only id of dictionary
1038 if ($id == DICT_TVA && GETPOSTINT('country') > 0) {
1039 $search_country_id = GETPOSTINT('country');
1040 }
1041 $_POST = array('id' => $id);
1042 } else {
1043 if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
1044 setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors');
1045 } else {
1047 }
1048 }
1049 }
1050
1051 // If verif ok and action modify, modify the line
1052 if ($ok && GETPOST('actionmodify')) {
1053 if ($tabrowid[$id]) {
1054 $rowidcol = $tabrowid[$id];
1055 } else {
1056 $rowidcol = "rowid";
1057 }
1058
1059 // Modify entry
1060 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET ";
1061 // Update fields value
1062 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldmodify)) {
1063 $sql .= $tabrowid[$id]."=";
1064 $sql .= "'".$db->escape($rowid)."', ";
1065 }
1066 $i = 0;
1067 foreach ($listfieldmodify as $field) {
1068 $keycode = empty($listfieldvalue[$i]) ? '' : $listfieldvalue[$i];
1069 if (empty($keycode)) {
1070 $keycode = $field;
1071 }
1072
1073 if ($field == 'price' || preg_match('/^amount/i', $field)) {
1074 $_POST[$keycode] = price2num(GETPOST($keycode), 'MU');
1075 } elseif ($field == 'taux' || $field == 'localtax1') {
1076 $_POST[$keycode] = price2num(GETPOST($keycode), 8); // Note that localtax2 can be a list of rates separated by coma like X:Y:Z
1077 } elseif ($field == 'entity') {
1078 $_POST[$keycode] = (int) getEntity($tablename, 0);
1079 }
1080
1081 if ($i) {
1082 $sql .= ",";
1083 }
1084 $sql .= $field."=";
1085 if ($keycode == 'sortorder') { // For column name 'sortorder', we use the field name 'position'
1086 $sql .= GETPOSTINT('position');
1087 } elseif (GETPOST($keycode) == '' && !($keycode == 'code' && $id == DICT_TVA)) {
1088 $sql .= "null"; // For vat, we want/accept code = ''
1089 } elseif ($keycode == 'content') {
1090 $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
1091 } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) {
1092 $sql .= GETPOSTINT($keycode);
1093 } else {
1094 $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'";
1095 }
1096
1097 $i++;
1098 }
1099 if (in_array($rowidcol, array('code', 'code_iso'))) {
1100 $sql .= " WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'";
1101 } else {
1102 $sql .= " WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid);
1103 }
1104 if (in_array('entity', $listfieldmodify)) {
1105 $sql .= " AND entity = ".((int) getEntity($tablename, 0));
1106 }
1107
1108 dol_syslog("actionmodify", LOG_DEBUG);
1109 //print $sql;
1110 $resql = $db->query($sql);
1111 if (!$resql) {
1112 setEventMessages($db->error(), null, 'errors');
1113 }
1114 }
1115
1116 if (!$ok && GETPOST('actionadd')) {
1117 $action = 'create';
1118 }
1119 if (!$ok && GETPOST('actionmodify')) {
1120 $action = 'edit';
1121 }
1122 }
1123
1124 if ($action == 'confirm_delete' && $confirm == 'yes') { // delete
1125 if ($tabrowid[$id]) {
1126 $rowidcol = $tabrowid[$id];
1127 } else {
1128 $rowidcol = "rowid";
1129 }
1130
1131 $tablename = $tabname[$id];
1132 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1133
1134 $sql = "DELETE FROM ".MAIN_DB_PREFIX.$db->sanitize($tablename)." WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1135
1136 dol_syslog("delete", LOG_DEBUG);
1137 $result = $db->query($sql);
1138 if (!$result) {
1139 if ($db->errno() == 'DB_ERROR_CHILD_EXISTS') {
1140 setEventMessages($langs->transnoentities("ErrorRecordIsUsedByChild"), null, 'errors');
1141 } else {
1143 }
1144 }
1145 }
1146
1147 // activate
1148 if ($action == $acts[0]) {
1149 if ($tabrowid[$id]) {
1150 $rowidcol = $tabrowid[$id];
1151 } else {
1152 $rowidcol = "rowid";
1153 }
1154
1155 $tablename = $tabname[$id];
1156 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1157
1158 if ($rowid) {
1159 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET active = 1 WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1160 } elseif ($code) {
1161 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET active = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1162 } else {
1163 $sql = null;
1164 }
1165
1166 if ($sql !== null) {
1167 $result = $db->query($sql);
1168 if (!$result) {
1170 }
1171 } else {
1172 dol_print_error(null, "No DB entry or no code");
1173 }
1174 }
1175
1176 // disable
1177 if ($action == $acts[1]) {
1178 if ($tabrowid[$id]) {
1179 $rowidcol = $tabrowid[$id];
1180 } else {
1181 $rowidcol = "rowid";
1182 }
1183
1184 $tablename = $tabname[$id];
1185 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1186
1187 if ($rowid) {
1188 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET active = 0 WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1189 } elseif ($code) {
1190 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET active = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1191 } else {
1192 $sql = null;
1193 }
1194
1195 if ($sql !== null) {
1196 $result = $db->query($sql);
1197 if (!$result) {
1199 }
1200 } else {
1201 dol_print_error(null, "No DB entry or no code");
1202 }
1203 }
1204
1205 // favorite
1206 if ($action == 'activate_favorite') {
1207 if ($tabrowid[$id]) {
1208 $rowidcol = $tabrowid[$id];
1209 } else {
1210 $rowidcol = "rowid";
1211 }
1212
1213 $tablename = $tabname[$id];
1214 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1215
1216 if ($rowid) {
1217 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET favorite = 1 WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1218 } elseif ($code) {
1219 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET favorite = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1220 } else {
1221 $sql = null;
1222 }
1223
1224 if ($sql !== null) {
1225 $result = $db->query($sql);
1226 if (!$result) {
1228 }
1229 } else {
1230 dol_print_error(null, "No DB entry or no code");
1231 }
1232 }
1233
1234 // disable favorite
1235 if ($action == 'disable_favorite') {
1236 if ($tabrowid[$id]) {
1237 $rowidcol = $tabrowid[$id];
1238 } else {
1239 $rowidcol = "rowid";
1240 }
1241
1242 $tablename = $tabname[$id];
1243 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1244
1245 if ($rowid) {
1246 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET favorite = 0 WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1247 } elseif ($code) {
1248 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET favorite = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1249 } else {
1250 $sql = null;
1251 }
1252
1253 if ($sql !== null) {
1254 $result = $db->query($sql);
1255 if (!$result) {
1257 }
1258 } else {
1259 dol_print_error(null, "No DB entry or no code");
1260 }
1261 }
1262
1263 // Is in EEC - Activate
1264 if ($action == 'activate_eec') {
1265 if ($tabrowid[$id]) {
1266 $rowidcol = $tabrowid[$id];
1267 } else {
1268 $rowidcol = "rowid";
1269 }
1270
1271 $tablename = $tabname[$id];
1272 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1273
1274 if ($rowid) {
1275 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET eec = 1 WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1276 } elseif ($code) {
1277 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET eec = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1278 } else {
1279 $sql = null;
1280 }
1281
1282 if ($sql !== null) {
1283 $result = $db->query($sql);
1284 if (!$result) {
1286 }
1287 } else {
1288 dol_print_error(null, "No DB entry or no code");
1289 }
1290 }
1291
1292 // Is in EEC - Disable
1293 if ($action == 'disable_eec') {
1294 if ($tabrowid[$id]) {
1295 $rowidcol = $tabrowid[$id];
1296 } else {
1297 $rowidcol = "rowid";
1298 }
1299
1300 $tablename = $tabname[$id];
1301 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1302
1303 if ($rowid) {
1304 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET eec = 0 WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1305 } elseif ($code) {
1306 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET eec = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1307 } else {
1308 $sql = null;
1309 }
1310
1311 if ($sql !== null) {
1312 $result = $db->query($sql);
1313 if (!$result) {
1315 }
1316 } else {
1317 dol_print_error(null, "No DB entry or no code");
1318 }
1319 }
1320
1321 // Is in Sepa - Activate
1322 if ($action == 'activate_sepa') {
1323 if ($tabrowid[$id]) {
1324 $rowidcol = $tabrowid[$id];
1325 } else {
1326 $rowidcol = "rowid";
1327 }
1328
1329 $tablename = $tabname[$id];
1330 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1331
1332 if ($rowid) {
1333 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET sepa = 1 WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1334 } elseif ($code) {
1335 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET sepa = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1336 } else {
1337 $sql = null;
1338 }
1339
1340 if ($sql !== null) {
1341 $result = $db->query($sql);
1342 if (!$result) {
1344 }
1345 } else {
1346 dol_print_error(null, "No DB entry or no code");
1347 }
1348 }
1349
1350 // Is in Sepa - Disable
1351 if ($action == 'disable_sepa') {
1352 if ($tabrowid[$id]) {
1353 $rowidcol = $tabrowid[$id];
1354 } else {
1355 $rowidcol = "rowid";
1356 }
1357
1358 $tablename = $tabname[$id];
1359 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1360
1361 if ($rowid) {
1362 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET sepa = 0 WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1363 } elseif ($code) {
1364 $sql = "UPDATE ".MAIN_DB_PREFIX.$db->sanitize($tablename)." SET sepa = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1365 } else {
1366 $sql = null;
1367 }
1368
1369 if ($sql !== null) {
1370 $result = $db->query($sql);
1371 if (!$result) {
1373 }
1374 } else {
1375 dol_print_error(null, "No DB entry or no code");
1376 }
1377 }
1378}
1379
1380
1381/*
1382 * View
1383 */
1384global $form, $formother; // Used in dictFieldList() below
1385
1386$form = new Form($db);
1387$formother = new FormOther($db);
1388
1389$title = $langs->trans("DictionarySetup");
1390
1391llxHeader('', $title, '', '', 0, 0, '', '', '', 'mod-admin page-dict');
1392
1393if (GETPOSTINT('id') == DICT_SOCIALNETWORKS && $from == 'socialnetworksetup') {
1394 $head = socialnetwork_prepare_head();
1395 print dol_get_fiche_head($head, 'dict', $langs->trans('MenuDict'), -1, 'user');
1396}
1397
1398
1399$linkback = '';
1400if ($id && empty($from)) {
1401 $title .= ' - '.$langs->trans($tablib[$id]);
1402 $linkback = '<a href="'.$_SERVER['PHP_SELF'].'">'.img_picto($langs->trans("BackToDictionaryList"), 'back', 'class="pictofixedwidth"').'<span class="hideonsmartphone">'.$langs->trans("BackToDictionaryList").'</span></a>';
1403}
1404$titlepicto = 'title_setup';
1405if ($id == DICT_TVA && GETPOST('from') == 'accountancy') {
1406 $title = $langs->trans("MenuVatAccounts");
1407 $titlepicto = 'accountancy';
1408}
1409if ($id == DICT_CHARGESOCIALES && GETPOST('from') == 'accountancy') {
1410 $title = $langs->trans("MenuTaxAccounts");
1411 $titlepicto = 'accountancy';
1412}
1413
1414$param = '&id='.urlencode((string) ($id));
1415if ($search_country_id || GETPOSTISSET('page') || GETPOST('button_removefilter', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter_x', 'alpha')) {
1416 $param .= '&search_country_id='.urlencode((string) ($search_country_id ? $search_country_id : -1));
1417}
1418if ($search_code != '') {
1419 $param .= '&search_code='.urlencode($search_code);
1420}
1421if ($search_active != '') {
1422 $param .= '&search_active='.urlencode($search_active);
1423}
1424if ($entity != '') {
1425 $param .= '&entity='.(int) $entity;
1426}
1427if ($from) {
1428 $param .= '&from='.urlencode($from);
1429}
1430$paramwithsearch = $param;
1431if ($sortorder) {
1432 $paramwithsearch .= '&sortorder='.urlencode($sortorder);
1433}
1434if ($sortfield) {
1435 $paramwithsearch .= '&sortfield='.urlencode($sortfield);
1436}
1437if ($from) {
1438 $paramwithsearch .= '&from='.urlencode($from);
1439}
1440
1441
1442// Confirmation of the deletion of the line
1443if ($action == 'delete') {
1444 print $form->formconfirm($_SERVER["PHP_SELF"].'?'.($page ? 'page='.$page.'&' : '').'rowid='.urlencode($rowid).'&code='.urlencode($code).$paramwithsearch, $langs->trans('DeleteLine'), $langs->trans('ConfirmDeleteLine'), 'confirm_delete', '', 0, 1);
1445}
1446
1447// Show a dictionary
1448if ($id > 0) {
1449 // Complete search values request with sort criteria
1450 $sqlfields = $tabsql[$id];
1451
1452 $tablecode = 't.code';
1453 $tableprefix = '';
1454 $tableprefixarray = array(
1455 DICT_FORME_JURIDIQUE => 'f.code',
1456 DICT_DEPARTEMENTS => 'd.code_departement',
1457 DICT_REGIONS => 'r.code_region',
1458 DICT_COUNTRY => 'c.code',
1459 DICT_CIVILITY => 'c.code',
1460 DICT_ACTIONCOMM => 'a.code',
1461 DICT_CHARGESOCIALES => 'a.code',
1462 DICT_TYPENT => 't.code',
1463 DICT_CURRENCIES => 'c.code_iso',
1464 DICT_ECOTAXE => 'e.code',
1465 DICT_HOLIDAY_TYPES => 'h.code',
1466 DICT_HRM_PUBLIC_HOLIDAY => 'a.code',
1467 DICT_UNITS => 'r.code',
1468 DICT_SOCIALNETWORKS => 's.code',
1469 45 => 'f.code',
1470 46 => 'f.code',
1471 47 => 'f.code',
1472 48 => 'f.code',
1473 );
1474 if (!empty($tableprefixarray[$id])) {
1475 $tablecode = $tableprefixarray[$id];
1476 $tableprefix = preg_replace('/\..*$/', '.', $tablecode);
1477 }
1478 $reg = array();
1479 if (empty($tableprefix) && preg_match('/SELECT ([a-z]\.)rowid/i', $sqlfields, $reg)) {
1480 $tableprefix = $reg[1];
1481 }
1482
1483 $sql = $sqlfields;
1484 if (!preg_match('/ WHERE /', $sql)) {
1485 $sql .= " WHERE 1 = 1";
1486 }
1487 if ($search_country_id > 0) {
1488 if ($id == DICT_HRM_PUBLIC_HOLIDAY || $id == DICT_HOLIDAY_TYPES) {
1489 $sql .= " AND (c.rowid IS NULL OR c.rowid = 0 OR c.rowid = ".((int) $search_country_id).")";
1490 } else {
1491 $sql .= " AND c.rowid = ".((int) $search_country_id);
1492 }
1493 }
1494 if ($search_code != '') {
1495 $sql .= natural_search($tablecode, $search_code);
1496 }
1497 if ($search_active == 'yes') {
1498 $sql .= " AND ".$db->sanitize($tableprefix)."active = 1";
1499 } elseif ($search_active == 'no') {
1500 $sql .= " AND ".$db->sanitize($tableprefix)."active = 0";
1501 }
1502
1503 // Count total nb of records
1504 $nbtotalofrecords = '';
1505 if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
1506 /* The fast and low memory method to get and count full list converts the sql into a sql count */
1507 $sqlforcount = preg_replace('/^.*\sFROM\s/', 'SELECT COUNT(*) as nbtotalofrecords FROM ', $sql);
1508 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
1509 $resql = $db->query($sqlforcount);
1510 if ($resql) {
1511 $objforcount = $db->fetch_object($resql);
1512 $nbtotalofrecords = $objforcount->nbtotalofrecords;
1513 } else {
1515 }
1516
1517 if (($page * $listlimit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
1518 $page = 0;
1519 $offset = 0;
1520 }
1521 $db->free($resql);
1522 }
1523
1524 if ($sortfield) {
1525 // If sort order is "country", we use country_code instead
1526 if ($sortfield == 'country') {
1527 $sortfield = 'country_code';
1528 }
1529 $sql .= $db->order($sortfield, $sortorder);
1530 $sql .= ", ";
1531 // Clear the required sort criteria for the tabsqlsort to be able to force it with selected value
1532 $tabsqlsort[$id] = preg_replace('/([a-z]+\.)?'.$sortfield.' '.$sortorder.',/i', '', $tabsqlsort[$id]);
1533 $tabsqlsort[$id] = preg_replace('/([a-z]+\.)?'.$sortfield.',/i', '', $tabsqlsort[$id]);
1534 } else {
1535 $sql .= " ORDER BY ";
1536 }
1537 $sql .= $tabsqlsort[$id];
1538
1539 $sql .= $db->plimit($listlimit + 1, $offset);
1540
1541 //print $sql;
1542
1543 if (empty($tabfield[$id])) {
1544 dol_print_error($db, 'The table with id '.$id.' has no array tabfield defined');
1545 exit;
1546 }
1547 $fieldlist = explode(',', $tabfield[$id]);
1548
1549 print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST" spellcheck="false">';
1550 print '<input type="hidden" name="token" value="'.newToken().'">';
1551 print '<input type="hidden" name="from" value="'.dol_escape_htmltag($from).'">';
1552
1553 // Special warning for VAT dictionary
1554 if ($id == DICT_TVA && !getDolGlobalString('FACTURE_TVAOPTION')) {
1555 print info_admin($langs->trans("VATIsUsedIsOff", $langs->transnoentities("Setup"), $langs->transnoentities("CompanyFoundation")));
1556 print "<br>\n";
1557 }
1558
1559 // List of available record in database
1560 dol_syslog("htdocs/admin/dict", LOG_DEBUG);
1561
1562 $resql = $db->query($sql);
1563 if ($resql) {
1564 $num = $db->num_rows($resql);
1565 $i = 0;
1566
1567 $massactionbutton = $linkback;
1568
1569 $newcardbutton = '';
1570 /*$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'));
1571 $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'));
1572 $newcardbutton .= dolGetButtonTitleSeparator();
1573 */
1574 $newcardbutton .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/admin/dict.php?action=create'.$param.'&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permissiontoadd);
1575
1576 print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'tools', 0, $newcardbutton, '', $listlimit, 'listlimit', 0, 1);
1577
1578
1579 if ($action == 'create') {
1580 // Form to add a new line
1581 if ($tabname[$id]) {
1582 $withentity = null;
1583
1584 $fieldlist = explode(',', $tabfield[$id]);
1585
1586 print '<div class="div-table-responsive-no-min">';
1587 print '<table class="noborder centpercent">';
1588
1589 // Line for title
1590 print '<!-- line title to add new entry -->';
1591 $tdsoffields = '<tr class="liste_titre">';
1592 foreach ($fieldlist as $field => $value) {
1593 if ($value == 'entity') {
1594 $withentity = (int) getEntity($tabname[$id], 0);
1595 continue;
1596 }
1597
1598 // Define field friendly name from its technical name
1599 $valuetoshow = ucfirst($value); // Par default
1600 $valuetoshow = $langs->trans($valuetoshow); // try to translate
1601 $class = '';
1602
1603 if ($value == 'pos') {
1604 $valuetoshow = $langs->trans("Position");
1605 $class = 'right';
1606 }
1607 if ($value == 'source') {
1608 $valuetoshow = $langs->trans("Contact");
1609 }
1610 if ($value == 'price') {
1611 $valuetoshow = $langs->trans("PriceUHT");
1612 }
1613 if ($value == 'taux') {
1614 if ($tabname[$id] != "c_revenuestamp") {
1615 $valuetoshow = $langs->trans("Rate");
1616 } else {
1617 $valuetoshow = $langs->trans("Amount");
1618 }
1619 $class = 'center';
1620 }
1621 if ($value == 'localtax1_type') {
1622 $valuetoshow = $langs->trans("UseLocalTax")." 2";
1623 $class = "center";
1624 $sortable = 0;
1625 }
1626 if ($value == 'localtax1') {
1627 $valuetoshow = $langs->trans("RateOfTaxN", '2');
1628 $class = "center minwidth75";
1629 }
1630 if ($value == 'localtax2_type') {
1631 $valuetoshow = $langs->trans("UseLocalTax")." 3";
1632 $class = "center";
1633 $sortable = 0;
1634 }
1635 if ($value == 'localtax2') {
1636 $valuetoshow = $langs->trans("RateOfTaxN", '3');
1637 $class = "center minwidth75";
1638 }
1639 if ($value == 'type_vat') {
1640 $valuetoshow = $langs->trans("VATType");
1641 }
1642 if ($value == 'organization') {
1643 $valuetoshow = $langs->trans("Organization");
1644 }
1645 if ($value == 'lang') {
1646 $valuetoshow = $langs->trans("Language");
1647 }
1648 if ($value == 'type') {
1649 if ($tabname[$id] == "c_paiement") {
1650 $valuetoshow = $form->textwithtooltip($langs->trans("Type"), $langs->trans("TypePaymentDesc"), 2, 1, img_help(1, ''));
1651 } else {
1652 $valuetoshow = $langs->trans("Type");
1653 }
1654 }
1655 if ($value == 'code') {
1656 $valuetoshow = $langs->trans("Code");
1657 $class = 'maxwidth100';
1658 }
1659 if ($value == 'libelle' || $value == 'label') {
1660 $valuetoshow = $form->textwithtooltip($langs->trans("Label"), $langs->trans("LabelUsedByDefault"), 2, 1, img_help(1, ''));
1661 }
1662 if ($value == 'libelle_facture') {
1663 $valuetoshow = $form->textwithtooltip($langs->trans("LabelOnDocuments"), $langs->trans("LabelUsedByDefault"), 2, 1, img_help(1, ''));
1664 }
1665 if ($value == 'deposit_percent') {
1666 $valuetoshow = $langs->trans('DepositPercent');
1667 $class = 'right';
1668 }
1669 if ($value == 'country') {
1670 if (in_array('region_id', $fieldlist)) {
1671 //print '<td>&nbsp;</td>';
1672 continue;
1673 } // For region page, we do not show the country input
1674 $valuetoshow = $langs->trans("Country");
1675 }
1676 if ($value == 'department_buyer') {
1677 $valuetoshow = '';
1678 }
1679 if ($value == 'recuperableonly') {
1680 $valuetoshow = $langs->trans("NPR");
1681 $class = "center";
1682 }
1683 if ($value == 'einvoice_vatex') {
1684 $valuetoshow = $langs->trans("VATExemptionCode");
1685 $class = "center";
1686 }
1687 if ($value == 'nbjour') {
1688 $valuetoshow = $langs->trans("NbOfDays");
1689 $class = 'right';
1690 }
1691 if ($value == 'type_cdr') {
1692 $valuetoshow = $langs->trans("AtEndOfMonth");
1693 $class = "center";
1694 }
1695 if ($value == 'decalage') {
1696 $valuetoshow = $langs->trans("Offset");
1697 $class = 'right';
1698 }
1699 if ($value == 'width' || $value == 'nx') {
1700 $valuetoshow = $langs->trans("Width");
1701 }
1702 if ($value == 'height' || $value == 'ny') {
1703 $valuetoshow = $langs->trans("Height");
1704 }
1705 if ($value == 'unit' || $value == 'metric') {
1706 $valuetoshow = $langs->trans("MeasuringUnit");
1707 }
1708 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
1709 $valuetoshow = '';
1710 }
1711 if ($value == 'accountancy_code') {
1712 $valuetoshow = $langs->trans("AccountancyCode");
1713 }
1714 if ($value == 'accountancy_code_sell') {
1715 $valuetoshow = $langs->trans("AccountancyCodeSell");
1716 }
1717 if ($value == 'accountancy_code_buy') {
1718 $valuetoshow = $langs->trans("AccountancyCodeBuy");
1719 }
1720 if ($value == 'pcg_version' || $value == 'fk_pcg_version') {
1721 $valuetoshow = $langs->trans("Pcg_version");
1722 }
1723 if ($value == 'account_parent') {
1724 $valuetoshow = $langs->trans("Accountparent");
1725 }
1726 if ($value == 'pcg_type') {
1727 $valuetoshow = $langs->trans("Pcg_type");
1728 }
1729 if ($value == 'pcg_subtype') {
1730 $valuetoshow = $langs->trans("Pcg_subtype");
1731 }
1732 if ($value == 'sortorder') {
1733 $valuetoshow = $langs->trans("SortOrder");
1734 $class = 'center';
1735 }
1736 if ($value == 'short_label') {
1737 $valuetoshow = $langs->trans("ShortLabel");
1738 }
1739 if ($value == 'fk_parent') {
1740 $valuetoshow = $langs->trans("ParentID");
1741 $class = 'center';
1742 }
1743 if ($value == 'range_account') {
1744 $valuetoshow = $langs->trans("Range");
1745 }
1746 if ($value == 'sens') {
1747 $valuetoshow = $langs->trans("Sens");
1748 }
1749 if ($value == 'category_type') {
1750 $valuetoshow = $langs->trans("Calculated");
1751 }
1752 if ($value == 'formula') {
1753 $valuetoshow = $langs->trans("Formula");
1754 }
1755 if ($value == 'paper_size') {
1756 $valuetoshow = $langs->trans("PaperSize");
1757 }
1758 if ($value == 'orientation') {
1759 $valuetoshow = $langs->trans("Orientation");
1760 }
1761 if ($value == 'leftmargin') {
1762 $valuetoshow = $langs->trans("LeftMargin");
1763 }
1764 if ($value == 'topmargin') {
1765 $valuetoshow = $langs->trans("TopMargin");
1766 }
1767 if ($value == 'spacex') {
1768 $valuetoshow = $langs->trans("SpaceX");
1769 }
1770 if ($value == 'spacey') {
1771 $valuetoshow = $langs->trans("SpaceY");
1772 }
1773 if ($value == 'font_size') {
1774 $valuetoshow = $langs->trans("FontSize");
1775 }
1776 if ($value == 'custom_x') {
1777 $valuetoshow = $langs->trans("CustomX");
1778 }
1779 if ($value == 'custom_y') {
1780 $valuetoshow = $langs->trans("CustomY");
1781 }
1782 if ($value == 'percent') {
1783 $valuetoshow = $langs->trans("Percentage");
1784 }
1785 if ($value == 'affect') {
1786 $valuetoshow = $langs->trans("WithCounter");
1787 }
1788 if ($value == 'delay') {
1789 $valuetoshow = $langs->trans("NoticePeriod");
1790 }
1791 if ($value == 'newbymonth') {
1792 $valuetoshow = $langs->trans("NewByMonth");
1793 }
1794 if ($value == 'fk_tva') {
1795 $valuetoshow = $langs->trans("VAT");
1796 }
1797 if ($value == 'range_ik') {
1798 $valuetoshow = $langs->trans("RangeIk");
1799 }
1800 if ($value == 'fk_c_exp_tax_cat') {
1801 $valuetoshow = $langs->trans("CarCategory");
1802 }
1803 if ($value == 'revenuestamp_type') {
1804 $valuetoshow = $langs->trans('TypeOfRevenueStamp');
1805 }
1806 if ($value == 'use_default') {
1807 $valuetoshow = $langs->trans('Default');
1808 $class = 'center';
1809 }
1810 if ($value == 'unit_type') {
1811 $valuetoshow = $langs->trans('TypeOfUnit');
1812 }
1813 if ($value == 'public' && $tablib[$id] == 'TicketDictCategory') {
1814 $valuetoshow = $langs->trans('TicketGroupIsPublic');
1815 $class = 'center';
1816 }
1817 if ($value == 'block_if_negative') {
1818 $valuetoshow = $langs->trans('BlockHolidayIfNegative');
1819 }
1820 if ($value == 'type_duration') {
1821 $valuetoshow = $langs->trans('Unit');
1822 }
1823
1824 if ($id == DICT_DEPARTEMENTS) { // Special case for state page
1825 if ($value == 'region_id') {
1826 $valuetoshow = '&nbsp;';
1827 $showfield = 1;
1828 }
1829 if ($value == 'region') {
1830 $valuetoshow = $langs->trans("Country").'/'.$langs->trans("Region");
1831 $showfield = 1;
1832 }
1833 }
1834
1835 if ($valuetoshow != '') {
1836 $tooltiphelp = (isset($tabcomplete[$tabname[$id]]['help'][$value]) ? $tabcomplete[$tabname[$id]]['help'][$value] : '');
1837
1838 $tdsoffields .= '<th'.($class ? ' class="'.$class.'"' : '').'>';
1839 if ($tooltiphelp && preg_match('/^http(s*):/i', $tooltiphelp)) {
1840 $tdsoffields .= '<a href="'.$tooltiphelp.'" target="_blank">'.$valuetoshow.' '.img_help(1, $valuetoshow).'</a>';
1841 } elseif ($tooltiphelp) {
1842 $tdsoffields .= $form->textwithpicto($valuetoshow, $tooltiphelp);
1843 } else {
1844 $tdsoffields .= $valuetoshow;
1845 }
1846 $tdsoffields .= '</th>';
1847 }
1848 }
1849
1850 if ($id == DICT_COUNTRY) {
1851 $tdsoffields .= '<th></th>';
1852 $tdsoffields .= '<th></th>';
1853 }
1854 $tdsoffields .= '<th>';
1855 $tdsoffields .= '<input type="hidden" name="id" value="'.$id.'">';
1856 if (!is_null($withentity)) {
1857 $tdsoffields .= '<input type="hidden" name="entity" value="'.$withentity.'">';
1858 }
1859 $tdsoffields .= '</th>';
1860 $tdsoffields .= '<th style="min-width: 26px;"></th>';
1861 $tdsoffields .= '<th style="min-width: 26px;"></th>';
1862 $tdsoffields .= '</tr>';
1863
1864 print $tdsoffields;
1865
1866
1867 // Line to enter new values
1868 print '<!-- line input to add new entry -->';
1869 print '<tr class="oddeven nodrag nodrop nohover">';
1870
1871 $obj = new stdClass();
1872 // If data was already input, we define them in obj to populate input fields.
1873 if (GETPOST('actionadd')) {
1874 foreach ($fieldlist as $key => $val) {
1875 if (GETPOST($val) != '') {
1876 $obj->$val = GETPOST($val);
1877 }
1878 }
1879 }
1880
1881 $tmpaction = 'create';
1882 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
1883 $reshook = $hookmanager->executeHooks('createDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
1884 $error = $hookmanager->error;
1885 $errors = $hookmanager->errors;
1886
1887 if ($id == DICT_REGIONS) {
1888 unset($fieldlist[2]); // Remove field ??? if dictionary Regions
1889 }
1890
1891 if (empty($reshook)) {
1892 dictFieldList($fieldlist, $obj, $tabname[$id], 'add');
1893 }
1894
1895 if ($id == DICT_COUNTRY) {
1896 print '<td></td>';
1897 print '<td></td>';
1898 print '<td></td>';
1899 }
1900 print '<td colspan="3" class="center">';
1901 if ($action != 'edit') {
1902 print '<input type="submit" class="button button-add small" name="actionadd" value="'.$langs->trans("Add").'">';
1903 } else {
1904 print '<input type="submit" class="button button-add small disabled" name="actionadd" value="'.$langs->trans("Add").'">';
1905 }
1906 print '</td>';
1907
1908 print "</tr>";
1909
1910 print '</table>';
1911 print '</div>';
1912 }
1913
1914 print '</form>';
1915
1916 print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST" spellcheck="false">';
1917 print '<input type="hidden" name="token" value="'.newToken().'">';
1918 print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from', 'alpha')).'">';
1919 }
1920
1921
1922 $filterfound = 0;
1923 foreach ($fieldlist as $field => $value) {
1924 if ($value == 'entity') {
1925 continue;
1926 }
1927
1928 $showfield = 1; // By default
1929 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
1930 $showfield = 0;
1931 }
1932
1933 if ($showfield) {
1934 if ($value == 'country') {
1935 $filterfound++;
1936 } elseif ($value == 'code') {
1937 $filterfound++;
1938 }
1939 }
1940 }
1941
1942 print '<div class="div-table-responsive">';
1943 print '<table class="noborder centpercent noborder">';
1944
1945 $colspan = 0;
1946
1947 // Title line with search input fields
1948 print '<!-- line title to search record -->'."\n";
1949 print '<tr class="liste_titre_filter">';
1950
1951 // Action button
1952 if ($conf->main_checkbox_left_column) {
1953 print '<td class="liste_titre center">';
1954 if ($filterfound) {
1955 $searchpicto = $form->showFilterAndCheckAddButtons(0);
1956 print $searchpicto;
1957 }
1958 print '</td>';
1959 $colspan++;
1960 }
1961
1962 foreach ($fieldlist as $field => $value) {
1963 if ($value == 'entity') {
1964 continue;
1965 }
1966
1967 $showfield = 1; // By default
1968 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
1969 $showfield = 0;
1970 }
1971
1972 if ($showfield) {
1973 if ($value == 'country') {
1974 print '<td class="liste_titre">';
1975 print $form->select_country($search_country_id, 'search_country_id', '', 28, 'minwidth100 maxwidth150 maxwidthonsmartphone', '', '&nbsp;');
1976 print '</td>';
1977 $colspan++;
1978 } elseif ($value == 'code') {
1979 print '<td class="liste_titre">';
1980 print '<input type="text" class="maxwidth100" name="search_code" value="'.dol_escape_htmltag($search_code).'">';
1981 print '</td>';
1982 $colspan++;
1983 } elseif ($value == 'type_vat') {
1984 print '<td class="liste_titre">';
1985 print $form->selectarray('search_'.$value, $type_vatList, (empty($obj->{$value}) ? '' : $obj->{$value}), 1);
1986 print '</td>';
1987 $colspan++;
1988 } else {
1989 print '<td class="liste_titre">';
1990 print '</td>';
1991 $colspan++;
1992 }
1993 }
1994 }
1995 if ($id == DICT_COUNTRY) {
1996 print '<td></td>';
1997 $colspan++;
1998 print '<td></td>';
1999 $colspan++;
2000 print '<td></td>';
2001 $colspan++;
2002 }
2003
2004 // Active
2005 print '<td class="liste_titre center parentonrightofpage">';
2006 print $form->selectyesno('search_active', $search_active, 0, false, 1, 1, 'maxwidth100 onrightofpage', 'Activated', 'Disabled');
2007 print '</td>';
2008 $colspan++;
2009
2010 // Action button
2011 if (!$conf->main_checkbox_left_column) {
2012 print '<td class="liste_titre center">';
2013 if ($filterfound) {
2014 $searchpicto = $form->showFilterAndCheckAddButtons(0);
2015 print $searchpicto;
2016 }
2017 print '</td>';
2018 $colspan++;
2019 }
2020
2021 print '</tr>';
2022
2023
2024 // Title of lines
2025 print '<!-- line title of record -->'."\n";
2026 print '<tr class="liste_titre">';
2027
2028 // Action button
2029 if ($conf->main_checkbox_left_column) {
2030 print getTitleFieldOfList('');
2031 }
2032
2033 foreach ($fieldlist as $field => $value) {
2034 if ($value == 'entity') {
2035 continue;
2036 }
2037
2038 if (in_array($value, array('label', 'libelle', 'libelle_facture')) && empty($tabcomplete[$tabname[$id]]['help'][$value])) {
2039 if (!isset($tabcomplete[$tabname[$id]]['help']) || !is_array($tabcomplete[$tabname[$id]]['help'])) { // protection when $tabcomplete[$tabname[$id]]['help'] is a an empty string, we must force it into an array
2040 $tabcomplete[$tabname[$id]]['help'] = array();
2041 }
2042 $tabcomplete[$tabname[$id]]['help'][$value] = $langs->trans('LabelUsedByDefault');
2043 }
2044
2045 // Determines the name of the field in relation to the possible names
2046 // in data dictionaries
2047 $showfield = 1; // By default
2048 $cssprefix = '';
2049 $sortable = 1;
2050 $valuetoshow = ucfirst($value); // By default
2051 $valuetoshow = $langs->trans($valuetoshow); // try to translate
2052
2053 // Special cases
2054 if ($value == 'source') {
2055 $valuetoshow = $langs->trans("Contact");
2056 }
2057 if ($value == 'price') {
2058 $valuetoshow = $langs->trans("PriceUHT");
2059 }
2060 if ($value == 'taux') {
2061 if ($tabname[$id] != "c_revenuestamp") {
2062 $valuetoshow = $langs->trans("Rate");
2063 } else {
2064 $valuetoshow = $langs->trans("Amount");
2065 }
2066 $cssprefix = 'center ';
2067 }
2068
2069 if ($value == 'type_vat') {
2070 $valuetoshow = $langs->trans("VATType");
2071 $cssprefix = "center minwidth75 ";
2072 $sortable = 0;
2073 }
2074 if ($value == 'localtax1_type') {
2075 $valuetoshow = $langs->trans("UseLocalTax")." 2";
2076 $cssprefix = "center minwidth75 ";
2077 $sortable = 0;
2078 }
2079 if ($value == 'localtax1') {
2080 $valuetoshow = $langs->trans("RateOfTaxN", '2');
2081 $cssprefix = "center minwidth75 ";
2082 $sortable = 0;
2083 }
2084 if ($value == 'localtax2_type') {
2085 $valuetoshow = $langs->trans("UseLocalTax")." 3";
2086 $cssprefix = "center minwidth75 ";
2087 $sortable = 0;
2088 }
2089 if ($value == 'localtax2') {
2090 $valuetoshow = $langs->trans("RateOfTaxN", '3');
2091 $cssprefix = "center minwidth75 ";
2092 $sortable = 0;
2093 }
2094 if ($value == 'organization') {
2095 $valuetoshow = $langs->trans("Organization");
2096 }
2097 if ($value == 'lang') {
2098 $valuetoshow = $langs->trans("Language");
2099 }
2100 if ($value == 'type') {
2101 $valuetoshow = $langs->trans("Type");
2102 }
2103 if ($value == 'code') {
2104 $valuetoshow = $langs->trans("Code");
2105 }
2106 if (in_array($value, array('pos', 'position'))) {
2107 $valuetoshow = $langs->trans("Position");
2108 $cssprefix = 'right ';
2109 }
2110 if ($value == 'libelle' || $value == 'label') {
2111 $valuetoshow = $langs->trans("Label");
2112 }
2113 if ($value == 'libelle_facture') {
2114 $valuetoshow = $langs->trans("LabelOnDocuments");
2115 }
2116 if ($value == 'deposit_percent') {
2117 $valuetoshow = $langs->trans('DepositPercent');
2118 $cssprefix = 'right ';
2119 }
2120 if ($value == 'country') {
2121 $valuetoshow = $langs->trans("Country");
2122 }
2123 if ($value == 'phone_code') {
2124 $valuetoshow = $langs->trans("PhoneCode");
2125 }
2126 if ($value == 'trunk_prefix') {
2127 $valuetoshow = $langs->trans("TrunkPrefix");
2128 }
2129 if ($value == 'department_buyer') {
2130 $valuetoshow = $langs->trans('DepartmentBuyer');
2131 }
2132 if ($value == 'recuperableonly') {
2133 $valuetoshow = $langs->trans("NPR");
2134 $cssprefix = "center ";
2135 }
2136 if ($value == 'einvoice_vatex') {
2137 $valuetoshow = $langs->trans("VATExemptionCode");
2138 $cssprefix = "center";
2139 }
2140 if ($value == 'nbjour') {
2141 $valuetoshow = $langs->trans("NbOfDays");
2142 $cssprefix = 'right ';
2143 }
2144 if ($value == 'type_cdr') {
2145 $valuetoshow = $langs->trans("AtEndOfMonth");
2146 $cssprefix = "center ";
2147 }
2148 if ($value == 'decalage') {
2149 $valuetoshow = $langs->trans("Offset");
2150 $cssprefix = 'right ';
2151 }
2152 if ($value == 'width' || $value == 'nx') {
2153 $valuetoshow = $langs->trans("Width");
2154 }
2155 if ($value == 'height' || $value == 'ny') {
2156 $valuetoshow = $langs->trans("Height");
2157 }
2158 if ($value == 'unit' || $value == 'metric') {
2159 $valuetoshow = $langs->trans("MeasuringUnit");
2160 }
2161 if ($value == 'accountancy_code') {
2162 $valuetoshow = $langs->trans("AccountancyCode");
2163 }
2164 if ($value == 'accountancy_code_sell') {
2165 $valuetoshow = $langs->trans("AccountancyCodeSell");
2166 $sortable = 0;
2167 }
2168 if ($value == 'accountancy_code_buy') {
2169 $valuetoshow = $langs->trans("AccountancyCodeBuy");
2170 $sortable = 0;
2171 }
2172 if ($value == 'fk_pcg_version') {
2173 $valuetoshow = $langs->trans("Pcg_version");
2174 }
2175 if ($value == 'account_parent') {
2176 $valuetoshow = $langs->trans("Accountsparent");
2177 }
2178 if ($value == 'pcg_type') {
2179 $valuetoshow = $langs->trans("Pcg_type");
2180 }
2181 if ($value == 'pcg_subtype') {
2182 $valuetoshow = $langs->trans("Pcg_subtype");
2183 }
2184 if ($value == 'sortorder') {
2185 $valuetoshow = $langs->trans("SortOrder");
2186 $cssprefix = 'center ';
2187 }
2188 if ($value == 'short_label') {
2189 $valuetoshow = $langs->trans("ShortLabel");
2190 }
2191 if ($value == 'fk_parent') {
2192 $valuetoshow = $langs->trans("ParentID");
2193 $cssprefix = 'center ';
2194 }
2195 if ($value == 'range_account') {
2196 $valuetoshow = $langs->trans("Range");
2197 }
2198 if ($value == 'sens') {
2199 $valuetoshow = $langs->trans("Sens");
2200 }
2201 if ($value == 'category_type') {
2202 $valuetoshow = $langs->trans("Calculated");
2203 }
2204 if ($value == 'formula') {
2205 $valuetoshow = $langs->trans("Formula");
2206 }
2207 if ($value == 'paper_size') {
2208 $valuetoshow = $langs->trans("PaperSize");
2209 }
2210 if ($value == 'orientation') {
2211 $valuetoshow = $langs->trans("Orientation");
2212 }
2213 if ($value == 'leftmargin') {
2214 $valuetoshow = $langs->trans("LeftMargin");
2215 }
2216 if ($value == 'topmargin') {
2217 $valuetoshow = $langs->trans("TopMargin");
2218 }
2219 if ($value == 'spacex') {
2220 $valuetoshow = $langs->trans("SpaceX");
2221 }
2222 if ($value == 'spacey') {
2223 $valuetoshow = $langs->trans("SpaceY");
2224 }
2225 if ($value == 'font_size') {
2226 $valuetoshow = $langs->trans("FontSize");
2227 }
2228 if ($value == 'custom_x') {
2229 $valuetoshow = $langs->trans("CustomX");
2230 }
2231 if ($value == 'custom_y') {
2232 $valuetoshow = $langs->trans("CustomY");
2233 }
2234 if ($value == 'percent') {
2235 $valuetoshow = $langs->trans("Percentage");
2236 }
2237 if ($value == 'affect') {
2238 $valuetoshow = $langs->trans("WithCounter");
2239 }
2240 if ($value == 'delay') {
2241 $valuetoshow = $langs->trans("NoticePeriod");
2242 }
2243 if ($value == 'newbymonth') {
2244 $valuetoshow = $langs->trans("NewByMonth");
2245 }
2246 if ($value == 'fk_tva') {
2247 $valuetoshow = $langs->trans("VAT");
2248 }
2249 if ($value == 'range_ik') {
2250 $valuetoshow = $langs->trans("RangeIk");
2251 }
2252 if ($value == 'fk_c_exp_tax_cat') {
2253 $valuetoshow = $langs->trans("CarCategory");
2254 }
2255 if ($value == 'revenuestamp_type') {
2256 $valuetoshow = $langs->trans('TypeOfRevenueStamp');
2257 }
2258 if ($value == 'use_default') {
2259 $valuetoshow = $langs->trans('Default');
2260 $cssprefix = 'center ';
2261 }
2262 if ($value == 'unit_type') {
2263 $valuetoshow = $langs->trans('TypeOfUnit');
2264 }
2265 if ($value == 'public' && $tablib[$id] == 'TicketDictCategory') {
2266 $valuetoshow = $langs->trans('TicketGroupIsPublic');
2267 $cssprefix = 'center ';
2268 }
2269 if ($value == 'block_if_negative') {
2270 $valuetoshow = $langs->trans('BlockHolidayIfNegative');
2271 }
2272 if ($value == 'type_duration') {
2273 $valuetoshow = $langs->trans('Unit');
2274 }
2275
2276 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
2277 $showfield = 0;
2278 }
2279
2280 // Show field title
2281 if ($showfield) {
2282 $tooltiphelp = (isset($tabcomplete[$tabname[$id]]['help'][$value]) ? $tabcomplete[$tabname[$id]]['help'][$value] : '');
2283
2284 if ($tooltiphelp && preg_match('/^http(s*):/i', $tooltiphelp)) {
2285 $newvaluetoshow = '<a href="'.$tooltiphelp.'" target="_blank">'.$valuetoshow.' '.img_help(1, $valuetoshow).'</a>';
2286 } elseif ($tooltiphelp) {
2287 $newvaluetoshow = $form->textwithpicto($valuetoshow, $tooltiphelp);
2288 } else {
2289 $newvaluetoshow = $valuetoshow;
2290 }
2291
2292 print getTitleFieldOfList($newvaluetoshow, 0, $_SERVER["PHP_SELF"], ($sortable ? $value : ''), ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, $cssprefix);
2293 }
2294 }
2295 // Favorite, EEC & Sepa - Only activated on country dictionary
2296 if ($id == DICT_COUNTRY) {
2297 print getTitleFieldOfList($langs->trans("InEEC"), 0, $_SERVER["PHP_SELF"], "eec", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ', 0, $langs->trans("CountryIsInEEC"));
2298 print getTitleFieldOfList($langs->trans("InSepa"), 0, $_SERVER["PHP_SELF"], "sepa", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ', 0, $langs->trans("CountryIsInSepa"));
2299 print getTitleFieldOfList($langs->trans("Favorite"), 0, $_SERVER["PHP_SELF"], "favorite", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ');
2300 }
2301
2302 // Status
2303 print getTitleFieldOfList($langs->trans("Status"), 0, $_SERVER["PHP_SELF"], "active", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ');
2304
2305 // Action button
2306 if (!$conf->main_checkbox_left_column) {
2307 print getTitleFieldOfList('');
2308 }
2309 print '</tr>';
2310
2311
2312 // Lines with values
2313 if ($num) {
2314 print '<!-- lines of dict -->'."\n";
2315 while ($i < $num) {
2316 $obj = $db->fetch_object($resql);
2317
2318 $withentity = null;
2319
2320 // We discard empty lines
2321 if ($id == DICT_COUNTRY) {
2322 if ($obj->code == '') {
2323 $i++;
2324 continue;
2325 }
2326 }
2327
2328 // Can an entry be erased, disabled or modified ? (true by default)
2329 $iserasable = 1;
2330 $canbedisabled = 1;
2331 $canbemodified = 1;
2332 if (isset($obj->code) && !in_array($id, array(DICT_TVA, DICT_PRODUCT_NATURE))) {
2333 if (($obj->code == '0' || $obj->code == '' || preg_match('/unknown/i', $obj->code))) {
2334 $iserasable = 0;
2335 $canbedisabled = 0;
2336 } elseif ($obj->code == 'RECEP') {
2337 $iserasable = 0;
2338 $canbedisabled = 0;
2339 } elseif ($obj->code == 'EF0') {
2340 $iserasable = 0;
2341 $canbedisabled = 0;
2342 }
2343 }
2344 if ($id == DICT_TYPE_CONTAINER && $obj->module == 'system') {
2345 $iserasable = 0;
2346 $canbedisabled = 0;
2347 if (in_array($obj->code, array('banner'))) {
2348 $canbedisabled = 1;
2349 }
2350 }
2351 if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) {
2352 $iserasable = 0;
2353 }
2354 if (in_array(empty($obj->code) ? '' : $obj->code, array('AC_OTH', 'AC_OTH_AUTO')) || in_array(empty($obj->type) ? '' : $obj->type, array('systemauto'))) {
2355 $canbedisabled = 0;
2356 $canbedisabled = 0;
2357 }
2358 $canbemodified = $iserasable;
2359
2360 if (!empty($obj->code) && $obj->code == 'RECEP') {
2361 $canbemodified = 1;
2362 }
2363 if ($tabname[$id] == "c_actioncomm") {
2364 $canbemodified = 1;
2365 }
2366
2367 if ($tabname[$id] == "c_product_nature" && in_array($obj->code, array(0, 1))) {
2368 $canbedisabled = 0;
2369 $canbemodified = 0;
2370 $iserasable = 0;
2371 }
2372 // Build Url. The table is id=, the id of line is rowid=
2373 $rowidcol = empty($tabrowid[$id]) ? 'rowid' : $tabrowid[$id];
2374 // If rowidcol not defined
2375 if (empty($rowidcol) || in_array($id, array(DICT_ACTIONCOMM, DICT_CHARGESOCIALES, DICT_TYPENT, DICT_PAIEMENT, DICT_TYPE_FEES, DICT_EFFECTIF, DICT_STCOMM, DICT_HRM_PUBLIC_HOLIDAY))) {
2376 $rowidcol = 'rowid';
2377 }
2378 $url = $_SERVER["PHP_SELF"].'?'.($page ? 'page='.$page.'&' : '').'sortfield='.urlencode($sortfield).'&sortorder='.urlencode($sortorder);
2379 $url .= '&rowid='.(isset($obj->$rowidcol) ? ((int) $obj->$rowidcol) : (!empty($obj->code) ? urlencode($obj->code) : ''));
2380 $url .= '&code='.(!empty($obj->code) ? urlencode($obj->code) : '');
2381 if (!empty($param)) {
2382 $url .= '&'.$param;
2383 }
2384 // If dictionary is different for each entity
2385 if (!is_null($withentity)) {
2386 $url .= '&entity='.((int) $withentity);
2387 }
2388 $url .= '&';
2389
2390
2391 //print_r($obj);
2392 print '<tr class="oddeven" id="rowid-'.(empty($obj->rowid) ? '' : $obj->rowid).'">';
2393
2394 // Action button
2395 if ($conf->main_checkbox_left_column) {
2396 print '<td class="center maxwidthsearch nowraponall">';
2397 // Modify link
2398 if ($canbemodified) {
2399 print '<a class="reposition editfielda marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=edit&token='.newToken().'">'.img_edit().'</a>';
2400 }
2401 // Delete link
2402 if ($iserasable) {
2403 if ($user->admin) {
2404 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=delete&token='.newToken().'">'.img_delete().'</a>';
2405 }
2406 }
2407 print '</td>';
2408 }
2409
2410 // Use isset() rather than !empty() so a dictionary row with rowid = 0
2411 // (for example ST_NEVER in llx_c_stcomm) is treated as a real rowid and
2412 // not fallen back to the code, which would make it un-editable (#38781).
2413 if ($action == 'edit' && ($rowid == (isset($obj->rowid) ? $obj->rowid : $obj->code))) {
2414 $tmpaction = 'edit';
2415 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
2416 $reshook = $hookmanager->executeHooks('editDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
2417 $error = $hookmanager->error;
2418 $errors = $hookmanager->errors;
2419
2420 // Show fields
2421 if (empty($reshook)) {
2422 $withentity = dictFieldList($fieldlist, $obj, $tabname[$id], 'edit');
2423 }
2424
2425 print '<td colspan="3" class="center">';
2426 print '<div name="'.(isset($obj->rowid) ? $obj->rowid : $obj->code).'"></div>';
2427 print '<input type="hidden" name="page" value="'.((int) $page).'">';
2428 print '<input type="hidden" name="rowid" value="'.dol_escape_htmltag($rowid).'">';
2429 if (!is_null($withentity)) {
2430 print '<input type="hidden" name="entity" value="'.$withentity.'">';
2431 }
2432 print '<input type="submit" class="button button-edit smallpaddingimp" name="actionmodify" value="'.$langs->trans("Modify").'">';
2433 print '<input type="submit" class="button button-cancel smallpaddingimp" name="actioncancel" value="'.$langs->trans("Cancel").'">';
2434 print '</td>';
2435 } else {
2436 $tmpaction = 'view';
2437 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
2438 $reshook = $hookmanager->executeHooks('viewDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
2439
2440 $error = $hookmanager->error;
2441 $errors = $hookmanager->errors;
2442
2443 $langs->loadLangs(array("bills", "agenda", "propal"));
2444
2445 if (empty($reshook)) {
2446 $withentity = null;
2447 $TDurationTypes = $form->getDurationTypes($langs);
2448
2449 foreach ($fieldlist as $field => $value) {
2450 $class = (isset($tabcomplete[$tabname[$id]]['css'][$value]) ? $tabcomplete[$tabname[$id]]['css'][$value] : '');
2451 $showfield = 1;
2452 $valuetoshow = (isset($obj->$value) && $obj->$value !== null && $obj->$value !== '') ? $obj->$value : '';
2453 $titletoshow = '';
2454
2455 if ($value == 'entity') {
2456 $withentity = $valuetoshow;
2457 continue;
2458 }
2459
2460 // Management of several special cases and exceptions
2461 if ($value == 'code' && $id == DICT_PRODUCT_NATURE) {
2462 $valuetoshow = (int) $valuetoshow;
2463 } elseif ($value == 'element') {
2464 $valuetoshow = isset($elementList[$valuetoshow]) ? $elementList[$valuetoshow] : $valuetoshow;
2465 } elseif ($value == 'source') {
2466 $valuetoshow = isset($sourceList[$valuetoshow]) ? $sourceList[$valuetoshow] : $valuetoshow;
2467 } elseif ($valuetoshow == 'all') {
2468 $valuetoshow = $langs->trans('All');
2469 } elseif ($value == 'country') {
2470 if (empty($obj->country_code)) {
2471 $valuetoshow = '-';
2472 } else {
2473 $key = $langs->trans("Country".strtoupper($obj->country_code));
2474 $valuetoshow = ($key != "Country".strtoupper($obj->country_code) ? $obj->country_code." - ".$key : $obj->country);
2475 }
2476 } elseif ($value == 'recuperableonly' || $value == 'deductible' || $value == 'category_type') {
2477 $valuetoshow = yn($valuetoshow ? 1 : 0);
2478 $class = "center";
2479 } elseif ($value == 'type_cdr') {
2480 if (empty($valuetoshow)) {
2481 $valuetoshow = $langs->trans('None');
2482 } elseif ($valuetoshow == 1) {
2483 $valuetoshow = $langs->trans('AtEndOfMonth');
2484 } elseif ($valuetoshow == 2) {
2485 $valuetoshow = $langs->trans('CurrentNext');
2486 }
2487 $class = "center tdoverflowmax125";
2488 } elseif ($value == 'price' || preg_match('/^amount/i', $value)) {
2489 $valuetoshow = price($valuetoshow);
2490 }
2491 if (in_array($value, array('private', 'joinfile', 'use_default'))) {
2492 if (!empty($valuetoshow)) {
2493 $valuetoshow = img_picto('', 'tick');
2494 } else {
2495 $valuetoshow = '';
2496 }
2497 } elseif ($value == 'libelle_facture') {
2498 $key = $langs->trans("PaymentCondition".strtoupper($obj->code));
2499 $valuetoshow = ($obj->code && $key != "PaymentCondition".strtoupper($obj->code) ? $key : $obj->$value);
2500 $valuetoshow = nl2br($valuetoshow);
2501 $titletoshow = $valuetoshow;
2502 $class = 'small tdoverflowmax200';
2503 } elseif ($value == 'label' && $tabname[$id] == 'c_country') {
2504 $key = $langs->trans("Country".strtoupper($obj->code));
2505 $valuetoshow = ($obj->code && $key != "Country".strtoupper($obj->code) ? $key : $obj->$value);
2506 } elseif ($value == 'label' && $tabname[$id] == 'c_availability') {
2507 $key = $langs->trans("AvailabilityType".strtoupper($obj->code));
2508 $valuetoshow = ($obj->code && $key != "AvailabilityType".strtoupper($obj->code) ? $key : $obj->$value);
2509 } elseif ($value == 'libelle' && $tabname[$id] == 'c_actioncomm') {
2510 $key = $langs->trans("Action".strtoupper($obj->code));
2511 $valuetoshow = ($obj->code && $key != "Action".strtoupper($obj->code) ? $key : $obj->$value);
2512 } elseif (!empty($obj->code_iso) && $value == 'label' && $tabname[$id] == 'c_currencies') {
2513 $key = $langs->trans("Currency".strtoupper($obj->code_iso));
2514 $valuetoshow = (/* $obj->code_iso && */ $key != "Currency".strtoupper($obj->code_iso) ? $key : $obj->$value);
2515 } elseif ($value == 'libelle' && $tabname[$id] == 'c_typent') {
2516 $key = $langs->trans(strtoupper($obj->code));
2517 $valuetoshow = ($key != strtoupper($obj->code) ? $key : $obj->$value);
2518 } elseif ($value == 'libelle' && $tabname[$id] == 'c_prospectlevel') {
2519 $key = $langs->trans(strtoupper($obj->code));
2520 $valuetoshow = ($key != strtoupper($obj->code) ? $key : $obj->$value);
2521 } elseif ($value == 'label' && $tabname[$id] == 'c_civility') {
2522 $key = $langs->trans("Civility".strtoupper($obj->code));
2523 $valuetoshow = ($obj->code && $key != "Civility".strtoupper($obj->code) ? $key : $obj->$value);
2524 } elseif ($value == 'libelle' && $tabname[$id] == 'c_type_contact') {
2525 $key = $langs->trans("TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code));
2526 $valuetoshow = ($obj->code && $key != "TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code) ? $key : $obj->$value);
2527 } elseif ($value == 'libelle' && $tabname[$id] == 'c_payment_term') {
2528 $key = $langs->trans("PaymentConditionShort".strtoupper($obj->code));
2529 $valuetoshow = ($obj->code && $key != "PaymentConditionShort".strtoupper($obj->code) ? $key : $obj->$value);
2530 $titletoshow = $key;
2531 $class = "tdoverflowmax150";
2532 } elseif ($value == 'libelle' && $tabname[$id] == 'c_paiement') {
2533 $key = $langs->trans("PaymentType".strtoupper($obj->code));
2534 $valuetoshow = $obj->$value;
2535 if ($obj->code && array_key_exists("PaymentType".strtoupper($obj->code), $langs->tab_translate)) {
2536 $htmltext = $form->textwithpicto($langs->trans("TranslationFound").': '.$key, $langs->trans("TheTranslationIsSearchedFromKey", "PaymentType".strtoupper($obj->code)));
2537 } else {
2538 $htmltext = $form->textwithpicto($langs->trans("TranslationFound").': '.$langs->trans("No"), $langs->trans("TheTranslationIsSearchedFromKey", "PaymentType".strtoupper($obj->code)));
2539 }
2540 //$valuetoshow = $form->textwithpicto($valuetoshow, $htmltext);
2541 $valuetoshow .= '<br><span class="opacitymedium small">'.$htmltext.'</span>';
2542 } elseif ($value == 'type' && $tabname[$id] == 'c_paiement') {
2543 $payment_type_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth'));
2544 $valuetoshow = $payment_type_list[$valuetoshow];
2545 } elseif ($value == 'label' && $tabname[$id] == 'c_input_reason') {
2546 $key = $langs->trans("DemandReasonType".strtoupper($obj->code));
2547 $valuetoshow = ($obj->code && $key != "DemandReasonType".strtoupper($obj->code) ? $key : $obj->$value);
2548 } elseif ($value == 'libelle' && $tabname[$id] == 'c_input_method') {
2549 $langs->load("orders");
2550 $key = $langs->trans($obj->code);
2551 $valuetoshow = ($obj->code && $key != $obj->code) ? $key : $obj->$value;
2552 } elseif ($value == 'libelle' && $tabname[$id] == 'c_shipment_mode') {
2553 $langs->load("sendings");
2554 $key = $langs->trans("SendingMethod".strtoupper($obj->code));
2555 $valuetoshow = ($obj->code && $key != "SendingMethod".strtoupper($obj->code) ? $key : $obj->$value);
2556 } elseif ($value == 'libelle' && $tabname[$id] == 'c_paper_format') {
2557 $key = $langs->trans('PaperFormat'.strtoupper($obj->code));
2558 $valuetoshow = ($obj->code && $key != 'PaperFormat'.strtoupper($obj->code) ? $key : $obj->$value);
2559 } elseif ($value == 'label' && $tabname[$id] == 'c_type_fees') {
2560 $langs->load('trips');
2561 $key = $langs->trans(strtoupper($obj->code));
2562 $valuetoshow = ($obj->code && $key != strtoupper($obj->code) ? $key : $obj->$value);
2563 } elseif ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
2564 $showfield = 0;
2565 } elseif ($value == 'unicode') {
2566 $valuetoshow = $langs->getCurrencySymbol($obj->code, 1);
2567 } elseif ($value == 'label' && $tabname[GETPOSTINT("id")] == 'c_units') {
2568 $langs->load("products");
2569 $valuetoshow = $langs->trans($obj->$value);
2570 } elseif ($value == 'short_label' && $tabname[GETPOSTINT("id")] == 'c_units') {
2571 $langs->load("products");
2572 $valuetoshow = $langs->trans($obj->$value);
2573 } elseif (($value == 'unit') && ($tabname[$id] == 'c_paper_format')) {
2574 $key = $langs->trans('SizeUnit'.strtolower($obj->unit));
2575 $valuetoshow = ($obj->code && $key != 'SizeUnit'.strtolower($obj->unit) ? $key : $obj->$value);
2576 } elseif ($value == 'localtax1' || $value == 'localtax2') {
2577 $class = "center";
2578 } elseif ($value == 'type_vat') {
2579 $valuetoshow = $type_vatList[(int) $valuetoshow];
2580 $class = "center";
2581 } elseif ($value == 'localtax1_type') {
2582 if ($obj->localtax1 != 0) {
2583 $valuetoshow = $localtax_typeList[$valuetoshow];
2584 } else {
2585 $valuetoshow = '';
2586 }
2587 $class = "center";
2588 } elseif ($value == 'localtax2_type') {
2589 if ($obj->localtax2 != 0) {
2590 $valuetoshow = $localtax_typeList[$valuetoshow];
2591 } else {
2592 $valuetoshow = '';
2593 }
2594 $class = "center";
2595 } elseif ($value == 'taux') {
2596 $valuetoshow = price($valuetoshow, 0, $langs, 0, 0);
2597 $class = "center";
2598 } elseif (in_array($value, array('recuperableonly'))) {
2599 $class = "center";
2600 } elseif ($value == 'accountancy_code' || $value == 'accountancy_code_sell' || $value == 'accountancy_code_buy') {
2601 if (isModEnabled('accounting')) {
2602 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
2603 $tmpaccountingaccount = new AccountingAccount($db);
2604 $tmpaccountingaccount->fetch(0, $valuetoshow, 1);
2605 $titletoshow = $langs->transnoentitiesnoconv("Pcgtype").': '.$tmpaccountingaccount->pcg_type;
2606 }
2607 $valuetoshow = length_accountg($valuetoshow);
2608 } elseif ($value == 'fk_tva') {
2609 if (empty($form->cache_vatrates)) {
2610 $form->load_tva('cache_fk_tva', '', $mysoc, new Societe($db), 0, 0, '', false, -1);
2611 }
2612 foreach ($form->cache_vatrates as $key => $Tab) {
2613 if ($form->cache_vatrates[$key]['rowid'] == $valuetoshow) {
2614 $valuetoshow = $form->cache_vatrates[$key]['label'];
2615 break;
2616 }
2617 }
2618 } elseif ($value == 'fk_c_exp_tax_cat') {
2619 $tmpid = $valuetoshow;
2620 $valuetoshow = getDictionaryValue('c_exp_tax_cat', 'label', $tmpid);
2621 $valuetoshow = $langs->trans($valuetoshow ? $valuetoshow : $tmpid);
2622 } elseif ($tabname[$id] == 'c_exp_tax_cat') {
2623 $valuetoshow = $langs->trans($valuetoshow);
2624 } elseif ($value == 'libelle' && ($tabname[$id] == 'c_stcomm' || $tabname[$id] == 'c_stcommcontact')) {
2625 $key = 'StatusProspect'.$obj->rowid;
2626 $trans = $langs->trans($key);
2627 $valuetoshow = ($trans != $key ? $trans : $obj->{$value});
2628 } elseif ($value == 'label' && $tabname[$id] == 'c_units') {
2629 $langs->load('other');
2630 $key = $langs->trans($obj->label);
2631 $valuetoshow = ($obj->label && $key != strtoupper($obj->label) ? $key : $obj->{$value});
2632 } elseif ($value == 'label' && $tabname[$id] == 'c_product_nature') {
2633 $langs->load("products");
2634 $valuetoshow = $langs->trans($obj->{$value});
2635 } elseif ($fieldlist[$field] == 'label' && $tabname[$id] == 'c_productbatch_qcstatus') {
2636 $langs->load("productbatch");
2637 $valuetoshow = $langs->trans($obj->{$value});
2638 } elseif ($value == 'block_if_negative') {
2639 $valuetoshow = yn($obj->{$value});
2640 } elseif ($value == 'icon') {
2641 $valuetoshow = $obj->{$value}." ".img_picto("", preg_replace('/^fa-/', '', $obj->{$value}));
2642 } elseif ($value == 'type_duration') {
2643 if (!empty($obj->{$value}) && array_key_exists($obj->{$value}, $TDurationTypes)) {
2644 $valuetoshow = $TDurationTypes[$obj->{$value}];
2645 }
2646 } elseif (in_array($value, array('leftmargin', 'topmargin', 'spacex', 'spacey', 'width', 'height', 'custom_x', 'custom_y'))) {
2647 $valuetoshow = price2num($valuetoshow);
2648 } elseif ($value == 'type' && $id == DICT_ACTIONCOMM && !empty($obj->module)) {
2649 $titletoshow = $langs->trans("Module").' '.$obj->module;
2650 } elseif ($value == 'color') {
2651 $valuetoshow = $formother->showColor($obj->{$value}, '');
2652 }
2653
2654
2655 // Now we define the CSS
2656 $class .= ($class ? ' ' : '').'tddict';
2657 if ($value == 'name') {
2658 $class .= ' tdoverflowmax200';
2659 }
2660 if ($value == 'note' && $id == DICT_TVA) {
2661 $class .= ' tdoverflowmax200';
2662 }
2663 if (in_array($value, array($value == 'tracking'))) {
2664 $class .= ' tdoverflowauto';
2665 }
2666 if (in_array($value, array('nbjour', 'decalage', 'pos', 'position', 'deposit_percent'))) {
2667 $class .= ' right';
2668 }
2669 if (in_array($value, array('icon', 'type_vat', 'localtax1_type', 'localtax2_type'))) {
2670 $class .= ' nowraponall';
2671 }
2672 if (in_array($value, array('use_default', 'fk_parent', 'sortorder', 'public'))) {
2673 $class .= ' center';
2674 }
2675 if (in_array($value, array('localtax1_type', 'localtax2_type', 'note', 'note_public', 'note_private'))) {
2676 $class .= ' small';
2677 }
2678
2679 // Add val as tooltip if there is a tdoverflow on the cell
2680 if (empty($titletoshow) && preg_match('/tdoverflow/', $class)) {
2681 $titletoshow = $valuetoshow;
2682 }
2683
2684 // Show value for field
2685 if ($showfield) {
2686 print '<!-- field value '. $value .' --><td class="'.$class.'"'.($titletoshow ? ' title="'.dolPrintHTMLForAttribute($titletoshow).'"' : '').'>'.$valuetoshow.'</td>';
2687 }
2688 }
2689
2690 // Favorite, EEC & Sepa
2691 // Only for country dictionary
2692 if ($id == DICT_COUNTRY) {
2693 print '<td class="nowraponall center">';
2694 // Is in EEC
2695 if ($iserasable) {
2696 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->eec].'_eec&token='.newToken().'">'.$actl[$obj->eec].'</a>';
2697 } else {
2698 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2699 }
2700 print '</td>';
2701 print '<td class="nowraponall center">';
2702 // Is in Sepa
2703 if ($iserasable) {
2704 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->sepa].'_sepa&token='.newToken().'">'.$actl[$obj->sepa].'</a>';
2705 } else {
2706 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2707 }
2708 print '</td>';
2709 print '<td class="nowraponall center">';
2710 // Favorite
2711 if ($iserasable) {
2712 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->favorite].'_favorite&token='.newToken().'">'.$actl[$obj->favorite].'</a>';
2713 } else {
2714 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2715 }
2716 print '</td>';
2717 }
2718 }
2719
2720 // Active
2721 print '<td class="nowraponall center">';
2722 if ($canbedisabled) {
2723 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->active].'&token='.newToken().'">'.$actl[$obj->active].'</a>';
2724 } else {
2725 if (in_array($obj->code, array('AC_OTH', 'AC_OTH_AUTO'))) {
2726 print $langs->trans("AlwaysActive");
2727 } elseif (isset($obj->type) && in_array($obj->type, array('systemauto')) && empty($obj->active)) {
2728 print $langs->trans("Deprecated");
2729 } elseif (isset($obj->type) && in_array($obj->type, array('system')) && !empty($obj->active) && $obj->code != 'AC_OTH') {
2730 print $langs->trans("UsedOnlyWithTypeOption");
2731 } else {
2732 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2733 }
2734 }
2735 print "</td>";
2736
2737 // Action button
2738 if (!$conf->main_checkbox_left_column) {
2739 print '<td class="center maxwidthsearch nowraponall">';
2740 // Modify link
2741 if ($canbemodified) {
2742 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright editfielda" href="'.$url.'action=edit&token='.newToken().'">'.img_edit().'</a>';
2743 }
2744 // Delete link
2745 if ($iserasable) {
2746 if ($user->admin) {
2747 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=delete&token='.newToken().'">'.img_delete().'</a>';
2748 }
2749 }
2750 print '</td>';
2751 }
2752
2753 print "</tr>\n";
2754 }
2755 $i++;
2756 }
2757 } else {
2758 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
2759 }
2760
2761 print '</table>';
2762 print '</div>';
2763 } else {
2765 }
2766
2767 print '</form>';
2768} else {
2769 /*
2770 * Show list of dictionary to show
2771 */
2772 print load_fiche_titre($title, $linkback, $titlepicto);
2773
2774 print '<span class="opacitymedium">'.$langs->trans("DictionaryDesc");
2775 print " ".$langs->trans("OnlyActiveElementsAreShown")."<br>\n";
2776 print '</span><br>';
2777 print "<br>\n";
2778
2779 $lastlineisempty = false;
2780
2781 print '<div class="div-table-responsive-no-min">';
2782 print '<table class="noborder centpercent">';
2783 print '<tr class="liste_titre">';
2784 print '<td>'.$langs->trans("Dictionary").'</td>';
2785 print '<td></td>';
2786 print '<td class="hideonsmartphone"></td>';
2787 print '</tr>';
2788
2789 $showemptyline = '';
2790 foreach ($taborder as $i) {
2791 if (isset($tabname[$i]) && empty($tabcond[$i])) {
2792 continue;
2793 }
2794
2795 if ($i) {
2796 if ($showemptyline) {
2797 print '<tr class="oddeven"><td></td><td></td><td class="hideonsmartphone"></td></tr>';
2798 $showemptyline = 0;
2799 }
2800
2801
2802 $value = $tabname[$i];
2803 print '<tr class="oddeven"><td class="minwidth200">';
2804 if (!empty($tabcond[$i])) {
2805 $tabnamenoprefix = preg_replace('/'.MAIN_DB_PREFIX.'/', '', $tabname[$i]);
2806 print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$i;
2807 if ($i == DICT_CHARGESOCIALES) {
2808 print '&search_country_id='.$mysoc->country_id;
2809 }
2810 print '">';
2811 if (!empty($tabcomplete[$tabnamenoprefix]['picto'])) {
2812 print img_picto('', $tabcomplete[$tabnamenoprefix]['picto'], 'class="pictofixedwidth paddingrightonly"');
2813 }
2814 print $langs->trans($tablib[$i]);
2815 print '</a>';
2816 } else {
2817 print $langs->trans($tablib[$i]);
2818 }
2819 print '</td>';
2820 print '<td>';
2821 print '<a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?id='.$i.'">';
2822 print img_picto('Edit', 'edit', '');
2823 print '</a>';
2824 print '</td>';
2825 print '<td class="right hideonsmartphone">';
2826 print $form->textwithpicto('', $langs->trans("Table").': '.MAIN_DB_PREFIX.$tabname[$i]);
2827 print '</td>';
2828 print '</tr>';
2829 $lastlineisempty = false;
2830 } else {
2831 if (!$lastlineisempty) {
2832 $showemptyline = 1;
2833 $lastlineisempty = true;
2834 }
2835 }
2836 }
2837 print '</table>';
2838 print '</div>';
2839}
2840
2841print '<br>';
2842if (GETPOST('id') && GETPOST('id') == DICT_SOCIALNETWORKS) {
2843 print dol_get_fiche_end();
2844}
2845// End of page
2846llxFooter();
2847$db->close();
2848
2849
2859function dictFieldList($fieldlist, $obj = null, $tabname = '', $context = '')
2860{
2861 global $langs, $db, $mysoc;
2862 global $form, $formother;
2863 global $region_id;
2864 global $elementList, $sourceList, $localtax_typeList, $type_vatList;
2865
2866 $formadmin = new FormAdmin($db);
2867 $formcompany = new FormCompany($db);
2868 $formaccounting = new FormAccounting($db);
2869
2870 $withentity = '';
2871
2872 foreach ($fieldlist as $field => $value) {
2873 if ($value == 'entity' && isset($obj->$value)) {
2874 $withentity = $obj->$value;
2875 continue;
2876 }
2877
2878 if (in_array($value, array('code', 'libelle', 'type')) && $tabname == "c_actioncomm" && isset($obj->$value) && in_array($obj->type, array('system', 'systemauto'))) {
2879 // Special case for c_actioncomm (field that should not be modified)
2880 $hidden = (!empty($obj->{$value}) ? $obj->{$value} : '');
2881 print '<td>';
2882 print '<input type="hidden" name="'. $value .'" value="'.$hidden.'">';
2883 print $langs->trans($hidden);
2884 print '</td>';
2885 } elseif ($value == 'country') {
2886 if (in_array('region_id', $fieldlist)) {
2887 print '<td>';
2888 print '</td>';
2889 continue;
2890 } // For state page, we do not show the country input (we link to region, not country)
2891 print '<td>';
2892
2893 $selected = (!empty($obj->country_code) ? $obj->country_code : (!empty($obj->country) ? $obj->country : ''));
2894 if (!GETPOSTISSET('code')) {
2895 $selected = GETPOST('countryidforinsert');
2896 }
2897 print $form->select_country($selected, $value, '', 28, 'minwidth100 maxwidth150 maxwidthonsmartphone');
2898 print '</td>';
2899 } elseif ($value == 'country_id') {
2900 if (!in_array('country', $fieldlist)) { // If there is already a field country, we don't show country_id (avoid duplicate)
2901 $country_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2902 print '<td class="tdoverflowmax100">';
2903 print '<input type="hidden" name="'. $value .'" value="'.$country_id.'">';
2904 print '</td>';
2905 }
2906 } elseif ($value == 'region') {
2907 print '<td>';
2908 $formcompany->select_region($region_id, 'region');
2909 print '</td>';
2910 } elseif ($value == 'region_id') {
2911 $region_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2912 print '<td>';
2913 print '<input type="hidden" name="'. $value .'" value="'.$region_id.'">';
2914 print '</td>';
2915 } elseif ($value == 'department_buyer') {
2916 if ($context == 'edit') {
2917 print '<td class="nowraponall">';
2918 // show department buyer list
2919 $country_code = (!empty($obj->country_code) ? $obj->country_code : '');
2920 $department_buyer_id = (!empty($obj->department_buyer_id) ? (int) $obj->department_buyer_id : 0);
2921 if ($country_code != '') {
2922 print $formcompany->select_state($department_buyer_id, $country_code, 'department_buyer_id', 'minwidth100 maxwidth150 maxwidthonsmartphone');
2923 }
2924 print '</td>';
2925 }
2926 } elseif ($value == 'department_buyer_id') {
2927 if (!in_array('department_buyer', $fieldlist)) { // If there is already a field department buyer, we don't show department buyer id (avoid duplicate)
2928 $department_buyer_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2929 print '<td class="tdoverflowmax100">';
2930 print '<input type="hidden" name="'.$value.'" value="'.$department_buyer_id.'">';
2931 print '</td>';
2932 }
2933 } elseif ($value == 'lang') {
2934 print '<td>';
2935 print $formadmin->select_language(getDolGlobalString('MAIN_LANG_DEFAULT'), 'lang');
2936 print '</td>';
2937 } elseif (in_array($value, array('element', 'source'))) { // Example: the type and source of the element (for contact types)
2938 $tmparray = array();
2939 if ($value == 'element') {
2940 $tmparray = $elementList;
2941 } else {
2942 $tmparray = $sourceList;
2943 }
2944 print '<td>';
2945 print $form->selectarray($value, $tmparray, (!empty($obj->{$value}) ? $obj->{$value} : ''), 0, 0, 0, '', 0, 0, 0, '', 'maxwidth250');
2946 print '</td>';
2947 } elseif (in_array($value, array('public', 'use_default'))) {
2948 // Fields 0/1 with a combo select Yes/No
2949 print '<td class="center">';
2950 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2951 print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1);
2952 print '</td>';
2953 } elseif ($value == 'private') {
2954 // Fields 'no'/'yes' with a combo select Yes/No
2955 print '<td>';
2956 print $form->selectyesno("private", (!empty($obj->{$value}) ? $obj->{$value} : ''));
2957 print '</td>';
2958 } elseif ($value == 'type' && $tabname == "c_actioncomm") {
2959 $type = (!empty($obj->type) ? $obj->type : 'user'); // Check if type is different of 'user' (external module)
2960 print '<td>';
2961 print $type.'<input type="hidden" name="type" value="'.$type.'">';
2962 print '</td>';
2963 } elseif ($value == 'type' && $tabname == 'c_paiement') {
2964 print '<td>';
2965 $select_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth'));
2966 print $form->selectarray($value, $select_list, (!empty($obj->{$value}) ? $obj->{$value} : '2'));
2967 print '</td>';
2968 } elseif ($value == 'recuperableonly' || $value == 'type_cdr' || $value == 'deductible' || $value == 'category_type') {
2969 if ($value == 'type_cdr') {
2970 print '<td class="center">';
2971 } else {
2972 print '<td>';
2973 }
2974 if ($value == 'type_cdr') {
2975 print $form->selectarray($value, array(0 => $langs->trans('None'), 1 => $langs->trans('AtEndOfMonth'), 2 => $langs->trans('CurrentNext')), (!empty($obj->{$value}) ? $obj->{$value} : ''));
2976 } else {
2977 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2978 print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1);
2979 }
2980 print '</td>';
2981 } elseif (in_array($value, array('nbjour', 'decalage', 'taux', 'localtax1', 'localtax2'))) {
2982 $class = "right";
2983 if (in_array($value, array('taux', 'localtax1', 'localtax2'))) {
2984 $class = "center"; // Fields aligned on right
2985 }
2986 print '<td class="'.$class.'">';
2987 print '<input type="text" class="flat" value="'.(isset($obj->{$value}) ? $obj->{$value} : '').'" size="3" name="'. $value .'">';
2988 print '</td>';
2989 } elseif (in_array($value, array('libelle_facture'))) {
2990 print '<td>';
2991 $transfound = 0;
2992 $transkey = '';
2993 // Special case for labels
2994 if ($tabname == 'c_payment_term') {
2995 $langs->load("bills");
2996 if (isset($obj->code) && !empty($obj->code)) {
2997 $transkey = "PaymentCondition" . strtoupper($obj->code);
2998 if ($langs->trans($transkey) != $transkey) {
2999 $transfound = 1;
3000 print $form->textwithpicto($langs->trans($transkey), $langs->trans("GoIntoTranslationMenuToChangeThis"));
3001 }
3002 }
3003 }
3004 if (!$transfound) {
3005 print '<textarea cols="30" rows="'.ROWS_2.'" class="flat" name="'. $value .'">'.(empty($obj->{$value}) ? '' : $obj->{$value}).'</textarea>';
3006 } else {
3007 print '<input type="hidden" name="'. $value .'" value="'.$transkey.'">';
3008 }
3009 print '</td>';
3010 } elseif ($value == 'price' || preg_match('/^amount/i', (string) $value)) {
3011 print '<td><input type="text" class="flat minwidth75" value="'.price((!empty($obj->{$value}) ? $obj->{$value} : '')).'" name="'. $value .'"></td>';
3012 } elseif ($value == 'code' && isset($obj->{$value})) {
3013 print '<td>';
3014 if ($tabname == 'c_paiement' && in_array($obj->{$value}, array('LIQ', 'CB', 'CHQ', 'VIR'))) {
3015 // Case of code that should not be modified
3016 print '<input type="hidden" class="flat minwidth75 maxwidth100" value="'.(empty($obj->{$value}) ? '' : $obj->{$value}).'" name="'. $value .'">';
3017 print $obj->{$value};
3018 } else {
3019 print '<input type="text" class="flat minwidth75 maxwidth100" value="'.(empty($obj->{$value}) ? '' : $obj->{$value}).'" name="'. $value .'">';
3020 }
3021 print '</td>';
3022 } elseif ($value == 'unit') {
3023 print '<td>';
3024 $units = array(
3025 'mm' => $langs->trans('SizeUnitmm'),
3026 'cm' => $langs->trans('SizeUnitcm'),
3027 'point' => $langs->trans('SizeUnitpoint'),
3028 'inch' => $langs->trans('SizeUnitinch')
3029 );
3030 print $form->selectarray('unit', $units, (empty($obj->{$value}) ? '' : $obj->{$value}), 0, 0, 0);
3031 print '</td>';
3032 } elseif ($value == 'type_vat') {
3033 // VAT type 0: all, 1: sell, 2: purchase
3034 print '<td class="center">';
3035 print $form->selectarray($value, $type_vatList, (empty($obj->{$value}) ? '0' : $obj->{$value}));
3036 print '</td>';
3037 } elseif ($value == 'localtax1_type' || $value == 'localtax2_type') {
3038 // Le type de taxe locale
3039 print '<td class="center">';
3040 print $form->selectarray($value, $localtax_typeList, (empty($obj->{$value}) ? '' : $obj->{$value}));
3041 print '</td>';
3042 } elseif ($value == 'accountancy_code' || $value == 'accountancy_code_sell' || $value == 'accountancy_code_buy') {
3043 print '<td>';
3044 if (isModEnabled('accounting')) {
3045 $fieldname = $value;
3046 $accountancy_account = (empty($obj->$fieldname) ? 0 : $obj->$fieldname);
3047 print $formaccounting->select_account($accountancy_account, '.'. $value, 1, array(), 1, 1, 'maxwidth125 maxwidthonsmartphone');
3048 } else {
3049 $fieldname = $value;
3050 print '<input type="text" class="flat minwidth100" value="'.(isset($obj->$fieldname) ? $obj->$fieldname : '').'" name="'. $value .'">';
3051 }
3052 print '</td>';
3053 } elseif ($value == 'fk_tva') {
3054 print '<td>';
3055 print $form->load_tva('fk_tva', $obj->taux, $mysoc, new Societe($db), 0, 0, '', false, -1);
3056 print '</td>';
3057 } elseif ($value == 'fk_c_exp_tax_cat') {
3058 print '<td>';
3059 print $form->selectExpenseCategories($obj->fk_c_exp_tax_cat);
3060 print '</td>';
3061 } elseif ($value == 'fk_range') {
3062 print '<td>';
3063 print $form->selectExpenseRanges($obj->fk_range);
3064 print '</td>';
3065 } elseif ($value == 'block_if_negative') {
3066 print '<td>';
3067 print $form->selectyesno("block_if_negative", (empty($obj->block_if_negative) ? '' : $obj->block_if_negative), 1);
3068 print '</td>';
3069 } elseif ($value == 'type_duration') {
3070 print '<td>';
3071 print $form->selectTypeDuration('', (empty($obj->type_duration) ? '' : $obj->type_duration), ['s', 'i', 'h']);
3072 print '</td>';
3073 } elseif ($value == 'color') {
3074 print '<td>';
3075 print $formother->selectColor((empty($obj->{$value}) ? '' : $obj->{$value}), 'color');
3076 print '</td>';
3077 } else {
3078 $fieldValue = isset($obj->{$value}) ? $obj->{$value} : '';
3079 $classtd = '';
3080 $class = '';
3081
3082 if ($value == 'sortorder') {
3083 $fieldlist[$field] = 'position';
3084 }
3085
3086 if ($fieldlist[$field] == 'code') {
3087 $class = 'maxwidth100';
3088 }
3089 if (in_array($fieldlist[$field], array('deposit_percent'))) {
3090 $classtd = 'right';
3091 $class = 'maxwidth50 right';
3092 }
3093 if (in_array($fieldlist[$field], array('pos', 'position'))) {
3094 $classtd = 'right';
3095 $class = 'maxwidth50 right';
3096 }
3097 if (in_array($fieldlist[$field], array('dayrule', 'day', 'month', 'year', 'use_default', 'affect', 'delay', 'public', 'sortorder', 'sens', 'category_type', 'fk_parent'))) {
3098 $class = 'maxwidth50 center';
3099 }
3100 if (in_array($fieldlist[$field], array('use_default', 'public', 'fk_parent'))) {
3101 $classtd = 'center';
3102 }
3103 if (in_array($fieldlist[$field], array('libelle', 'label', 'tracking'))) {
3104 $class = 'quatrevingtpercent';
3105 }
3106 // Fields that must be suggested as '0' instead of ''
3107 if ($fieldlist[$field] == 'fk_parent') {
3108 if (empty($fieldValue)) {
3109 $fieldValue = '0';
3110 }
3111 }
3112
3113 // Labels Length
3114 $maxlength = '';
3115 if (in_array($fieldlist[$field], array('libelle', 'label'))) {
3116 switch ($tabname) {
3117 case 'c_ecotaxe':
3118 case 'c_email_senderprofile':
3119 case 'c_forme_juridique':
3120 case 'c_holiday_types':
3121 case 'c_payment_term':
3122 case 'c_transport_mode':
3123 $maxlength = ' maxlength="255"';
3124 break;
3125 case 'c_email_templates':
3126 $maxlength = ' maxlength="180"';
3127 break;
3128 case 'c_socialnetworks':
3129 $maxlength = ' maxlength="150"';
3130 break;
3131 default:
3132 $maxlength = ' maxlength="128"';
3133 }
3134 }
3135
3136 print '<td class="'.$classtd.'">';
3137 $transfound = 0;
3138 $transkey = '';
3139 if (in_array($fieldlist[$field], array('label', 'libelle'))) { // For label
3140 // Special case for labels
3141 if ($tabname == 'c_civility' && !empty($obj->code)) {
3142 $transkey = "Civility".strtoupper($obj->code);
3143 }
3144 if ($tabname == 'c_payment_term' && !empty($obj->code)) {
3145 $langs->load("bills");
3146 $transkey = "PaymentConditionShort".strtoupper($obj->code);
3147 }
3148 if ($transkey && $langs->trans($transkey) != $transkey) {
3149 $transfound = 1;
3150 print $form->textwithpicto($langs->trans($transkey), $langs->trans("GoIntoTranslationMenuToChangeThis"));
3151 }
3152 }
3153 if (!$transfound) {
3154 print '<input type="text" class="flat'.($class ? ' '.$class : '').'"'.($maxlength ? ' '.$maxlength : '').' value="'.dol_escape_htmltag($fieldValue).'" name="'.$fieldlist[$field].'">';
3155 } else {
3156 print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$transkey.'">';
3157 }
3158 print '</td>';
3159 }
3160 }
3161
3162 return $withentity;
3163}
$id
Support class for third parties, contacts, members, users or resources.
Definition account.php:47
if(! $sortfield) if(! $sortorder) $object
Definition account.php:100
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:73
Class to manage accounting accounts.
Class to manage generation of HTML components for accounting management.
Class to generate html code for admin pages.
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 to help generate other html components Only common components are here.
Class to manage third parties objects (customers, suppliers, prospects...)
global $mysoc
dictFieldList($fieldlist, $obj=null, $tabname='', $context='')
Show fields in insert/edit mode.
Definition dict.php:2859
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_help($usehelpcursor=1, $usealttitle=1)
Show help logo with cursor "?".
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
natural_search($fields, $value, $mode=0, $nofirstand=0, $sqltoadd='')
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
yn($yesno, $format=1, $color=0)
Return yes or no in current language.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
getDictionaryValue($tablename, $field, $id, $checkentity=false, $rowidfield='rowid')
Return the value of a filed into a dictionary for the record $id.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
Show information in HTML for admin users or standard users.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
$context
@method int call_trigger(string $triggerName, ?User $user)
Definition logout.php:42
if(preg_match('/(crypted|dolcrypt):/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
'integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]',...
Definition repair.php:130
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.