dolibarr 24.0.1
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.entity, 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.entity, 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 // Entity owning this row, when the dictionary is entity aware (the SELECT of
2319 // $tabsql must then include the entity column). It is used to target the right row
2320 // on write, and to tell rows of another entity apart just below.
2321 $withentity = (isset($obj->entity) ? (int) $obj->entity : null);
2322
2323 // We discard empty lines
2324 if ($id == DICT_COUNTRY) {
2325 if ($obj->code == '') {
2326 $i++;
2327 continue;
2328 }
2329 }
2330
2331 // Can an entry be erased, disabled or modified ? (true by default)
2332 $iserasable = 1;
2333 $canbedisabled = 1;
2334 $canbemodified = 1;
2335 if (isset($obj->code) && !in_array($id, array(DICT_TVA, DICT_PRODUCT_NATURE))) {
2336 if (($obj->code == '0' || $obj->code == '' || preg_match('/unknown/i', $obj->code))) {
2337 $iserasable = 0;
2338 $canbedisabled = 0;
2339 } elseif ($obj->code == 'RECEP') {
2340 $iserasable = 0;
2341 $canbedisabled = 0;
2342 } elseif ($obj->code == 'EF0') {
2343 $iserasable = 0;
2344 $canbedisabled = 0;
2345 }
2346 }
2347 if ($id == DICT_TYPE_CONTAINER && $obj->module == 'system') {
2348 $iserasable = 0;
2349 $canbedisabled = 0;
2350 if (in_array($obj->code, array('banner'))) {
2351 $canbedisabled = 1;
2352 }
2353 }
2354 if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) {
2355 $iserasable = 0;
2356 }
2357 if (in_array(empty($obj->code) ? '' : $obj->code, array('AC_OTH', 'AC_OTH_AUTO')) || in_array(empty($obj->type) ? '' : $obj->type, array('systemauto'))) {
2358 $canbedisabled = 0;
2359 $canbedisabled = 0;
2360 }
2361 $canbemodified = $iserasable;
2362
2363 if (!empty($obj->code) && $obj->code == 'RECEP') {
2364 $canbemodified = 1;
2365 }
2366 if ($tabname[$id] == "c_actioncomm") {
2367 $canbemodified = 1;
2368 }
2369
2370 if ($tabname[$id] == "c_product_nature" && in_array($obj->code, array(0, 1))) {
2371 $canbedisabled = 0;
2372 $canbemodified = 0;
2373 $iserasable = 0;
2374 }
2375
2376 // A row owned by another entity is read-only here. This happens when a dictionary
2377 // is shared with the current entity (for instance the dictionary of the master
2378 // entity that this entity only extends, with module multicompany): the row is
2379 // legitimately listed, but editing it would change it for the other entity too.
2380 // Without multicompany, getEntity() returns the current entity and every listed row
2381 // belongs to it, so this never triggers.
2382 if (!is_null($withentity) && $withentity != (int) getEntity($tabname[$id], 0)) {
2383 $iserasable = 0;
2384 $canbedisabled = 0;
2385 $canbemodified = 0;
2386 }
2387 // Build Url. The table is id=, the id of line is rowid=
2388 $rowidcol = empty($tabrowid[$id]) ? 'rowid' : $tabrowid[$id];
2389 // If rowidcol not defined
2390 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))) {
2391 $rowidcol = 'rowid';
2392 }
2393 $url = $_SERVER["PHP_SELF"].'?'.($page ? 'page='.$page.'&' : '').'sortfield='.urlencode($sortfield).'&sortorder='.urlencode($sortorder);
2394 $url .= '&rowid='.(isset($obj->$rowidcol) ? ((int) $obj->$rowidcol) : (!empty($obj->code) ? urlencode($obj->code) : ''));
2395 $url .= '&code='.(!empty($obj->code) ? urlencode($obj->code) : '');
2396 if (!empty($param)) {
2397 $url .= '&'.$param;
2398 }
2399 // If dictionary is different for each entity
2400 if (!is_null($withentity)) {
2401 $url .= '&entity='.((int) $withentity);
2402 }
2403 $url .= '&';
2404
2405
2406 //print_r($obj);
2407 print '<tr class="oddeven" id="rowid-'.(empty($obj->rowid) ? '' : $obj->rowid).'">';
2408
2409 // Action button
2410 if ($conf->main_checkbox_left_column) {
2411 print '<td class="center maxwidthsearch nowraponall">';
2412 // Modify link
2413 if ($canbemodified) {
2414 print '<a class="reposition editfielda marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=edit&token='.newToken().'">'.img_edit().'</a>';
2415 }
2416 // Delete link
2417 if ($iserasable) {
2418 if ($user->admin) {
2419 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=delete&token='.newToken().'">'.img_delete().'</a>';
2420 }
2421 }
2422 print '</td>';
2423 }
2424
2425 // Use isset() rather than !empty() so a dictionary row with rowid = 0
2426 // (for example ST_NEVER in llx_c_stcomm) is treated as a real rowid and
2427 // not fallen back to the code, which would make it un-editable (#38781).
2428 if ($action == 'edit' && ($rowid == (isset($obj->rowid) ? $obj->rowid : $obj->code))) {
2429 $tmpaction = 'edit';
2430 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
2431 $reshook = $hookmanager->executeHooks('editDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
2432 $error = $hookmanager->error;
2433 $errors = $hookmanager->errors;
2434
2435 // Show fields
2436 if (empty($reshook)) {
2437 $withentity = dictFieldList($fieldlist, $obj, $tabname[$id], 'edit');
2438 }
2439
2440 print '<td colspan="3" class="center">';
2441 print '<div name="'.(isset($obj->rowid) ? $obj->rowid : $obj->code).'"></div>';
2442 print '<input type="hidden" name="page" value="'.((int) $page).'">';
2443 print '<input type="hidden" name="rowid" value="'.dol_escape_htmltag($rowid).'">';
2444 if (!is_null($withentity)) {
2445 print '<input type="hidden" name="entity" value="'.$withentity.'">';
2446 }
2447 print '<input type="submit" class="button button-edit smallpaddingimp" name="actionmodify" value="'.$langs->trans("Modify").'">';
2448 print '<input type="submit" class="button button-cancel smallpaddingimp" name="actioncancel" value="'.$langs->trans("Cancel").'">';
2449 print '</td>';
2450 } else {
2451 $tmpaction = 'view';
2452 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
2453 $reshook = $hookmanager->executeHooks('viewDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
2454
2455 $error = $hookmanager->error;
2456 $errors = $hookmanager->errors;
2457
2458 $langs->loadLangs(array("bills", "agenda", "propal"));
2459
2460 if (empty($reshook)) {
2461 $withentity = null;
2462 $TDurationTypes = $form->getDurationTypes($langs);
2463
2464 foreach ($fieldlist as $field => $value) {
2465 $class = (isset($tabcomplete[$tabname[$id]]['css'][$value]) ? $tabcomplete[$tabname[$id]]['css'][$value] : '');
2466 $showfield = 1;
2467 $valuetoshow = (isset($obj->$value) && $obj->$value !== null && $obj->$value !== '') ? $obj->$value : '';
2468 $titletoshow = '';
2469
2470 if ($value == 'entity') {
2471 $withentity = $valuetoshow;
2472 continue;
2473 }
2474
2475 // Management of several special cases and exceptions
2476 if ($value == 'code' && $id == DICT_PRODUCT_NATURE) {
2477 $valuetoshow = (int) $valuetoshow;
2478 } elseif ($value == 'element') {
2479 $valuetoshow = isset($elementList[$valuetoshow]) ? $elementList[$valuetoshow] : $valuetoshow;
2480 } elseif ($value == 'source') {
2481 $valuetoshow = isset($sourceList[$valuetoshow]) ? $sourceList[$valuetoshow] : $valuetoshow;
2482 } elseif ($valuetoshow == 'all') {
2483 $valuetoshow = $langs->trans('All');
2484 } elseif ($value == 'country') {
2485 if (empty($obj->country_code)) {
2486 $valuetoshow = '-';
2487 } else {
2488 $key = $langs->trans("Country".strtoupper($obj->country_code));
2489 $valuetoshow = ($key != "Country".strtoupper($obj->country_code) ? $obj->country_code." - ".$key : $obj->country);
2490 }
2491 } elseif ($value == 'recuperableonly' || $value == 'deductible' || $value == 'category_type') {
2492 $valuetoshow = yn($valuetoshow ? 1 : 0);
2493 $class = "center";
2494 } elseif ($value == 'type_cdr') {
2495 if (empty($valuetoshow)) {
2496 $valuetoshow = $langs->trans('None');
2497 } elseif ($valuetoshow == 1) {
2498 $valuetoshow = $langs->trans('AtEndOfMonth');
2499 } elseif ($valuetoshow == 2) {
2500 $valuetoshow = $langs->trans('CurrentNext');
2501 }
2502 $class = "center tdoverflowmax125";
2503 } elseif ($value == 'price' || preg_match('/^amount/i', $value)) {
2504 $valuetoshow = price($valuetoshow);
2505 }
2506 if (in_array($value, array('private', 'joinfile', 'use_default'))) {
2507 if (!empty($valuetoshow)) {
2508 $valuetoshow = img_picto('', 'tick');
2509 } else {
2510 $valuetoshow = '';
2511 }
2512 } elseif ($value == 'libelle_facture') {
2513 $key = $langs->trans("PaymentCondition".strtoupper($obj->code));
2514 $valuetoshow = ($obj->code && $key != "PaymentCondition".strtoupper($obj->code) ? $key : $obj->$value);
2515 $valuetoshow = nl2br($valuetoshow);
2516 $titletoshow = $valuetoshow;
2517 $class = 'small tdoverflowmax200';
2518 } elseif ($value == 'label' && $tabname[$id] == 'c_country') {
2519 $key = $langs->trans("Country".strtoupper($obj->code));
2520 $valuetoshow = ($obj->code && $key != "Country".strtoupper($obj->code) ? $key : $obj->$value);
2521 } elseif ($value == 'label' && $tabname[$id] == 'c_availability') {
2522 $key = $langs->trans("AvailabilityType".strtoupper($obj->code));
2523 $valuetoshow = ($obj->code && $key != "AvailabilityType".strtoupper($obj->code) ? $key : $obj->$value);
2524 } elseif ($value == 'libelle' && $tabname[$id] == 'c_actioncomm') {
2525 $key = $langs->trans("Action".strtoupper($obj->code));
2526 $valuetoshow = ($obj->code && $key != "Action".strtoupper($obj->code) ? $key : $obj->$value);
2527 } elseif (!empty($obj->code_iso) && $value == 'label' && $tabname[$id] == 'c_currencies') {
2528 $key = $langs->trans("Currency".strtoupper($obj->code_iso));
2529 $valuetoshow = (/* $obj->code_iso && */ $key != "Currency".strtoupper($obj->code_iso) ? $key : $obj->$value);
2530 } elseif ($value == 'libelle' && $tabname[$id] == 'c_typent') {
2531 $key = $langs->trans(strtoupper($obj->code));
2532 $valuetoshow = ($key != strtoupper($obj->code) ? $key : $obj->$value);
2533 } elseif ($value == 'libelle' && $tabname[$id] == 'c_prospectlevel') {
2534 $key = $langs->trans(strtoupper($obj->code));
2535 $valuetoshow = ($key != strtoupper($obj->code) ? $key : $obj->$value);
2536 } elseif ($value == 'label' && $tabname[$id] == 'c_civility') {
2537 $key = $langs->trans("Civility".strtoupper($obj->code));
2538 $valuetoshow = ($obj->code && $key != "Civility".strtoupper($obj->code) ? $key : $obj->$value);
2539 } elseif ($value == 'libelle' && $tabname[$id] == 'c_type_contact') {
2540 $key = $langs->trans("TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code));
2541 $valuetoshow = ($obj->code && $key != "TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code) ? $key : $obj->$value);
2542 } elseif ($value == 'libelle' && $tabname[$id] == 'c_payment_term') {
2543 $key = $langs->trans("PaymentConditionShort".strtoupper($obj->code));
2544 $valuetoshow = ($obj->code && $key != "PaymentConditionShort".strtoupper($obj->code) ? $key : $obj->$value);
2545 $titletoshow = $key;
2546 $class = "tdoverflowmax150";
2547 } elseif ($value == 'libelle' && $tabname[$id] == 'c_paiement') {
2548 $key = $langs->trans("PaymentType".strtoupper($obj->code));
2549 $valuetoshow = $obj->$value;
2550 if ($obj->code && array_key_exists("PaymentType".strtoupper($obj->code), $langs->tab_translate)) {
2551 $htmltext = $form->textwithpicto($langs->trans("TranslationFound").': '.$key, $langs->trans("TheTranslationIsSearchedFromKey", "PaymentType".strtoupper($obj->code)));
2552 } else {
2553 $htmltext = $form->textwithpicto($langs->trans("TranslationFound").': '.$langs->trans("No"), $langs->trans("TheTranslationIsSearchedFromKey", "PaymentType".strtoupper($obj->code)));
2554 }
2555 //$valuetoshow = $form->textwithpicto($valuetoshow, $htmltext);
2556 $valuetoshow .= '<br><span class="opacitymedium small">'.$htmltext.'</span>';
2557 } elseif ($value == 'type' && $tabname[$id] == 'c_paiement') {
2558 $payment_type_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth'));
2559 $valuetoshow = $payment_type_list[$valuetoshow];
2560 } elseif ($value == 'label' && $tabname[$id] == 'c_input_reason') {
2561 $key = $langs->trans("DemandReasonType".strtoupper($obj->code));
2562 $valuetoshow = ($obj->code && $key != "DemandReasonType".strtoupper($obj->code) ? $key : $obj->$value);
2563 } elseif ($value == 'libelle' && $tabname[$id] == 'c_input_method') {
2564 $langs->load("orders");
2565 $key = $langs->trans($obj->code);
2566 $valuetoshow = ($obj->code && $key != $obj->code) ? $key : $obj->$value;
2567 } elseif ($value == 'libelle' && $tabname[$id] == 'c_shipment_mode') {
2568 $langs->load("sendings");
2569 $key = $langs->trans("SendingMethod".strtoupper($obj->code));
2570 $valuetoshow = ($obj->code && $key != "SendingMethod".strtoupper($obj->code) ? $key : $obj->$value);
2571 } elseif ($value == 'libelle' && $tabname[$id] == 'c_paper_format') {
2572 $key = $langs->trans('PaperFormat'.strtoupper($obj->code));
2573 $valuetoshow = ($obj->code && $key != 'PaperFormat'.strtoupper($obj->code) ? $key : $obj->$value);
2574 } elseif ($value == 'label' && $tabname[$id] == 'c_type_fees') {
2575 $langs->load('trips');
2576 $key = $langs->trans(strtoupper($obj->code));
2577 $valuetoshow = ($obj->code && $key != strtoupper($obj->code) ? $key : $obj->$value);
2578 } elseif ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
2579 $showfield = 0;
2580 } elseif ($value == 'unicode') {
2581 $valuetoshow = $langs->getCurrencySymbol($obj->code, 1);
2582 } elseif ($value == 'label' && $tabname[GETPOSTINT("id")] == 'c_units') {
2583 $langs->load("products");
2584 $valuetoshow = $langs->trans($obj->$value);
2585 } elseif ($value == 'short_label' && $tabname[GETPOSTINT("id")] == 'c_units') {
2586 $langs->load("products");
2587 $valuetoshow = $langs->trans($obj->$value);
2588 } elseif (($value == 'unit') && ($tabname[$id] == 'c_paper_format')) {
2589 $key = $langs->trans('SizeUnit'.strtolower($obj->unit));
2590 $valuetoshow = ($obj->code && $key != 'SizeUnit'.strtolower($obj->unit) ? $key : $obj->$value);
2591 } elseif ($value == 'localtax1' || $value == 'localtax2') {
2592 $class = "center";
2593 } elseif ($value == 'type_vat') {
2594 $valuetoshow = $type_vatList[(int) $valuetoshow];
2595 $class = "center";
2596 } elseif ($value == 'localtax1_type') {
2597 if ($obj->localtax1 != 0) {
2598 $valuetoshow = $localtax_typeList[$valuetoshow];
2599 } else {
2600 $valuetoshow = '';
2601 }
2602 $class = "center";
2603 } elseif ($value == 'localtax2_type') {
2604 if ($obj->localtax2 != 0) {
2605 $valuetoshow = $localtax_typeList[$valuetoshow];
2606 } else {
2607 $valuetoshow = '';
2608 }
2609 $class = "center";
2610 } elseif ($value == 'taux') {
2611 $valuetoshow = price($valuetoshow, 0, $langs, 0, 0);
2612 $class = "center";
2613 } elseif (in_array($value, array('recuperableonly'))) {
2614 $class = "center";
2615 } elseif ($value == 'accountancy_code' || $value == 'accountancy_code_sell' || $value == 'accountancy_code_buy') {
2616 if (isModEnabled('accounting')) {
2617 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
2618 $tmpaccountingaccount = new AccountingAccount($db);
2619 $tmpaccountingaccount->fetch(0, $valuetoshow, 1);
2620 $titletoshow = $langs->transnoentitiesnoconv("Pcgtype").': '.$tmpaccountingaccount->pcg_type;
2621 }
2622 $valuetoshow = length_accountg($valuetoshow);
2623 } elseif ($value == 'fk_tva') {
2624 if (empty($form->cache_vatrates)) {
2625 $form->load_tva('cache_fk_tva', '', $mysoc, new Societe($db), 0, 0, '', false, -1);
2626 }
2627 foreach ($form->cache_vatrates as $key => $Tab) {
2628 if ($form->cache_vatrates[$key]['rowid'] == $valuetoshow) {
2629 $valuetoshow = $form->cache_vatrates[$key]['label'];
2630 break;
2631 }
2632 }
2633 } elseif ($value == 'fk_c_exp_tax_cat') {
2634 $tmpid = $valuetoshow;
2635 $valuetoshow = getDictionaryValue('c_exp_tax_cat', 'label', $tmpid);
2636 $valuetoshow = $langs->trans($valuetoshow ? $valuetoshow : $tmpid);
2637 } elseif ($tabname[$id] == 'c_exp_tax_cat') {
2638 $valuetoshow = $langs->trans($valuetoshow);
2639 } elseif ($value == 'libelle' && ($tabname[$id] == 'c_stcomm' || $tabname[$id] == 'c_stcommcontact')) {
2640 $key = 'StatusProspect'.$obj->rowid;
2641 $trans = $langs->trans($key);
2642 $valuetoshow = ($trans != $key ? $trans : $obj->{$value});
2643 } elseif ($value == 'label' && $tabname[$id] == 'c_units') {
2644 $langs->load('other');
2645 $key = $langs->trans($obj->label);
2646 $valuetoshow = ($obj->label && $key != strtoupper($obj->label) ? $key : $obj->{$value});
2647 } elseif ($value == 'label' && $tabname[$id] == 'c_product_nature') {
2648 $langs->load("products");
2649 $valuetoshow = $langs->trans($obj->{$value});
2650 } elseif ($fieldlist[$field] == 'label' && $tabname[$id] == 'c_productbatch_qcstatus') {
2651 $langs->load("productbatch");
2652 $valuetoshow = $langs->trans($obj->{$value});
2653 } elseif ($value == 'block_if_negative') {
2654 $valuetoshow = yn($obj->{$value});
2655 } elseif ($value == 'icon') {
2656 $valuetoshow = $obj->{$value}." ".img_picto("", preg_replace('/^fa-/', '', $obj->{$value}));
2657 } elseif ($value == 'type_duration') {
2658 if (!empty($obj->{$value}) && array_key_exists($obj->{$value}, $TDurationTypes)) {
2659 $valuetoshow = $TDurationTypes[$obj->{$value}];
2660 }
2661 } elseif (in_array($value, array('leftmargin', 'topmargin', 'spacex', 'spacey', 'width', 'height', 'custom_x', 'custom_y'))) {
2662 $valuetoshow = price2num($valuetoshow);
2663 } elseif ($value == 'type' && $id == DICT_ACTIONCOMM && !empty($obj->module)) {
2664 $titletoshow = $langs->trans("Module").' '.$obj->module;
2665 } elseif ($value == 'color') {
2666 $valuetoshow = $formother->showColor($obj->{$value}, '');
2667 }
2668
2669
2670 // Now we define the CSS
2671 $class .= ($class ? ' ' : '').'tddict';
2672 if ($value == 'name') {
2673 $class .= ' tdoverflowmax200';
2674 }
2675 if ($value == 'note' && $id == DICT_TVA) {
2676 $class .= ' tdoverflowmax200';
2677 }
2678 if (in_array($value, array($value == 'tracking'))) {
2679 $class .= ' tdoverflowauto';
2680 }
2681 if (in_array($value, array('nbjour', 'decalage', 'pos', 'position', 'deposit_percent'))) {
2682 $class .= ' right';
2683 }
2684 if (in_array($value, array('icon', 'type_vat', 'localtax1_type', 'localtax2_type'))) {
2685 $class .= ' nowraponall';
2686 }
2687 if (in_array($value, array('use_default', 'fk_parent', 'sortorder', 'public'))) {
2688 $class .= ' center';
2689 }
2690 if (in_array($value, array('localtax1_type', 'localtax2_type', 'note', 'note_public', 'note_private'))) {
2691 $class .= ' small';
2692 }
2693
2694 // Add val as tooltip if there is a tdoverflow on the cell
2695 if (empty($titletoshow) && preg_match('/tdoverflow/', $class)) {
2696 $titletoshow = $valuetoshow;
2697 }
2698
2699 // Show value for field
2700 if ($showfield) {
2701 print '<!-- field value '. $value .' --><td class="'.$class.'"'.($titletoshow ? ' title="'.dolPrintHTMLForAttribute($titletoshow).'"' : '').'>'.$valuetoshow.'</td>';
2702 }
2703 }
2704
2705 // Favorite, EEC & Sepa
2706 // Only for country dictionary
2707 if ($id == DICT_COUNTRY) {
2708 print '<td class="nowraponall center">';
2709 // Is in EEC
2710 if ($iserasable) {
2711 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->eec].'_eec&token='.newToken().'">'.$actl[$obj->eec].'</a>';
2712 } else {
2713 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2714 }
2715 print '</td>';
2716 print '<td class="nowraponall center">';
2717 // Is in Sepa
2718 if ($iserasable) {
2719 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->sepa].'_sepa&token='.newToken().'">'.$actl[$obj->sepa].'</a>';
2720 } else {
2721 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2722 }
2723 print '</td>';
2724 print '<td class="nowraponall center">';
2725 // Favorite
2726 if ($iserasable) {
2727 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->favorite].'_favorite&token='.newToken().'">'.$actl[$obj->favorite].'</a>';
2728 } else {
2729 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2730 }
2731 print '</td>';
2732 }
2733 }
2734
2735 // Active
2736 print '<td class="nowraponall center">';
2737 if ($canbedisabled) {
2738 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->active].'&token='.newToken().'">'.$actl[$obj->active].'</a>';
2739 } else {
2740 if (in_array($obj->code, array('AC_OTH', 'AC_OTH_AUTO'))) {
2741 print $langs->trans("AlwaysActive");
2742 } elseif (isset($obj->type) && in_array($obj->type, array('systemauto')) && empty($obj->active)) {
2743 print $langs->trans("Deprecated");
2744 } elseif (isset($obj->type) && in_array($obj->type, array('system')) && !empty($obj->active) && $obj->code != 'AC_OTH') {
2745 print $langs->trans("UsedOnlyWithTypeOption");
2746 } else {
2747 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2748 }
2749 }
2750 print "</td>";
2751
2752 // Action button
2753 if (!$conf->main_checkbox_left_column) {
2754 print '<td class="center maxwidthsearch nowraponall">';
2755 // Modify link
2756 if ($canbemodified) {
2757 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright editfielda" href="'.$url.'action=edit&token='.newToken().'">'.img_edit().'</a>';
2758 }
2759 // Delete link
2760 if ($iserasable) {
2761 if ($user->admin) {
2762 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=delete&token='.newToken().'">'.img_delete().'</a>';
2763 }
2764 }
2765 print '</td>';
2766 }
2767
2768 print "</tr>\n";
2769 }
2770 $i++;
2771 }
2772 } else {
2773 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
2774 }
2775
2776 print '</table>';
2777 print '</div>';
2778 } else {
2780 }
2781
2782 print '</form>';
2783} else {
2784 /*
2785 * Show list of dictionary to show
2786 */
2787 print load_fiche_titre($title, $linkback, $titlepicto);
2788
2789 print '<span class="opacitymedium">'.$langs->trans("DictionaryDesc");
2790 print " ".$langs->trans("OnlyActiveElementsAreShown")."<br>\n";
2791 print '</span><br>';
2792 print "<br>\n";
2793
2794 $lastlineisempty = false;
2795
2796 print '<div class="div-table-responsive-no-min">';
2797 print '<table class="noborder centpercent">';
2798 print '<tr class="liste_titre">';
2799 print '<td>'.$langs->trans("Dictionary").'</td>';
2800 print '<td></td>';
2801 print '<td class="hideonsmartphone"></td>';
2802 print '</tr>';
2803
2804 $showemptyline = '';
2805 foreach ($taborder as $i) {
2806 if (isset($tabname[$i]) && empty($tabcond[$i])) {
2807 continue;
2808 }
2809
2810 if ($i) {
2811 if ($showemptyline) {
2812 print '<tr class="oddeven"><td></td><td></td><td class="hideonsmartphone"></td></tr>';
2813 $showemptyline = 0;
2814 }
2815
2816
2817 $value = $tabname[$i];
2818 print '<tr class="oddeven"><td class="minwidth200">';
2819 if (!empty($tabcond[$i])) {
2820 $tabnamenoprefix = preg_replace('/'.MAIN_DB_PREFIX.'/', '', $tabname[$i]);
2821 print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$i;
2822 if ($i == DICT_CHARGESOCIALES) {
2823 print '&search_country_id='.$mysoc->country_id;
2824 }
2825 print '">';
2826 if (!empty($tabcomplete[$tabnamenoprefix]['picto'])) {
2827 print img_picto('', $tabcomplete[$tabnamenoprefix]['picto'], 'class="pictofixedwidth paddingrightonly"');
2828 }
2829 print $langs->trans($tablib[$i]);
2830 print '</a>';
2831 } else {
2832 print $langs->trans($tablib[$i]);
2833 }
2834 print '</td>';
2835 print '<td>';
2836 print '<a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?id='.$i.'">';
2837 print img_picto('Edit', 'edit', '');
2838 print '</a>';
2839 print '</td>';
2840 print '<td class="right hideonsmartphone">';
2841 print $form->textwithpicto('', $langs->trans("Table").': '.MAIN_DB_PREFIX.$tabname[$i]);
2842 print '</td>';
2843 print '</tr>';
2844 $lastlineisempty = false;
2845 } else {
2846 if (!$lastlineisempty) {
2847 $showemptyline = 1;
2848 $lastlineisempty = true;
2849 }
2850 }
2851 }
2852 print '</table>';
2853 print '</div>';
2854}
2855
2856print '<br>';
2857if (GETPOST('id') && GETPOST('id') == DICT_SOCIALNETWORKS) {
2858 print dol_get_fiche_end();
2859}
2860// End of page
2861llxFooter();
2862$db->close();
2863
2864
2874function dictFieldList($fieldlist, $obj = null, $tabname = '', $context = '')
2875{
2876 global $langs, $db, $mysoc;
2877 global $form, $formother;
2878 global $region_id;
2879 global $elementList, $sourceList, $localtax_typeList, $type_vatList;
2880
2881 $formadmin = new FormAdmin($db);
2882 $formcompany = new FormCompany($db);
2883 $formaccounting = new FormAccounting($db);
2884
2885 $withentity = '';
2886
2887 foreach ($fieldlist as $field => $value) {
2888 if ($value == 'entity' && isset($obj->$value)) {
2889 $withentity = $obj->$value;
2890 continue;
2891 }
2892
2893 if (in_array($value, array('code', 'libelle', 'type')) && $tabname == "c_actioncomm" && isset($obj->$value) && in_array($obj->type, array('system', 'systemauto'))) {
2894 // Special case for c_actioncomm (field that should not be modified)
2895 $hidden = (!empty($obj->{$value}) ? $obj->{$value} : '');
2896 print '<td>';
2897 print '<input type="hidden" name="'. $value .'" value="'.$hidden.'">';
2898 print $langs->trans($hidden);
2899 print '</td>';
2900 } elseif ($value == 'country') {
2901 if (in_array('region_id', $fieldlist)) {
2902 print '<td>';
2903 print '</td>';
2904 continue;
2905 } // For state page, we do not show the country input (we link to region, not country)
2906 print '<td>';
2907
2908 $selected = (!empty($obj->country_code) ? $obj->country_code : (!empty($obj->country) ? $obj->country : ''));
2909 if (!GETPOSTISSET('code')) {
2910 $selected = GETPOST('countryidforinsert');
2911 }
2912 print $form->select_country($selected, $value, '', 28, 'minwidth100 maxwidth150 maxwidthonsmartphone');
2913 print '</td>';
2914 } elseif ($value == 'country_id') {
2915 if (!in_array('country', $fieldlist)) { // If there is already a field country, we don't show country_id (avoid duplicate)
2916 $country_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2917 print '<td class="tdoverflowmax100">';
2918 print '<input type="hidden" name="'. $value .'" value="'.$country_id.'">';
2919 print '</td>';
2920 }
2921 } elseif ($value == 'region') {
2922 print '<td>';
2923 $formcompany->select_region($region_id, 'region');
2924 print '</td>';
2925 } elseif ($value == 'region_id') {
2926 $region_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2927 print '<td>';
2928 print '<input type="hidden" name="'. $value .'" value="'.$region_id.'">';
2929 print '</td>';
2930 } elseif ($value == 'department_buyer') {
2931 if ($context == 'edit') {
2932 print '<td class="nowraponall">';
2933 // show department buyer list
2934 $country_code = (!empty($obj->country_code) ? $obj->country_code : '');
2935 $department_buyer_id = (!empty($obj->department_buyer_id) ? (int) $obj->department_buyer_id : 0);
2936 if ($country_code != '') {
2937 print $formcompany->select_state($department_buyer_id, $country_code, 'department_buyer_id', 'minwidth100 maxwidth150 maxwidthonsmartphone');
2938 }
2939 print '</td>';
2940 }
2941 } elseif ($value == 'department_buyer_id') {
2942 if (!in_array('department_buyer', $fieldlist)) { // If there is already a field department buyer, we don't show department buyer id (avoid duplicate)
2943 $department_buyer_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2944 print '<td class="tdoverflowmax100">';
2945 print '<input type="hidden" name="'.$value.'" value="'.$department_buyer_id.'">';
2946 print '</td>';
2947 }
2948 } elseif ($value == 'lang') {
2949 print '<td>';
2950 print $formadmin->select_language(getDolGlobalString('MAIN_LANG_DEFAULT'), 'lang');
2951 print '</td>';
2952 } elseif (in_array($value, array('element', 'source'))) { // Example: the type and source of the element (for contact types)
2953 $tmparray = array();
2954 if ($value == 'element') {
2955 $tmparray = $elementList;
2956 } else {
2957 $tmparray = $sourceList;
2958 }
2959 print '<td>';
2960 print $form->selectarray($value, $tmparray, (!empty($obj->{$value}) ? $obj->{$value} : ''), 0, 0, 0, '', 0, 0, 0, '', 'maxwidth250');
2961 print '</td>';
2962 } elseif (in_array($value, array('public', 'use_default'))) {
2963 // Fields 0/1 with a combo select Yes/No
2964 print '<td class="center">';
2965 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2966 print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1);
2967 print '</td>';
2968 } elseif ($value == 'private') {
2969 // Fields 'no'/'yes' with a combo select Yes/No
2970 print '<td>';
2971 print $form->selectyesno("private", (!empty($obj->{$value}) ? $obj->{$value} : ''));
2972 print '</td>';
2973 } elseif ($value == 'type' && $tabname == "c_actioncomm") {
2974 $type = (!empty($obj->type) ? $obj->type : 'user'); // Check if type is different of 'user' (external module)
2975 print '<td>';
2976 print $type.'<input type="hidden" name="type" value="'.$type.'">';
2977 print '</td>';
2978 } elseif ($value == 'type' && $tabname == 'c_paiement') {
2979 print '<td>';
2980 $select_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth'));
2981 // Use isset(), not !empty(), because 0 (Customer) is a valid value that empty() would treat as unset
2982 print $form->selectarray($value, $select_list, (isset($obj->{$value}) && $obj->{$value} !== '' ? $obj->{$value} : '2'));
2983 print '</td>';
2984 } elseif ($value == 'recuperableonly' || $value == 'type_cdr' || $value == 'deductible' || $value == 'category_type') {
2985 if ($value == 'type_cdr') {
2986 print '<td class="center">';
2987 } else {
2988 print '<td>';
2989 }
2990 if ($value == 'type_cdr') {
2991 print $form->selectarray($value, array(0 => $langs->trans('None'), 1 => $langs->trans('AtEndOfMonth'), 2 => $langs->trans('CurrentNext')), (!empty($obj->{$value}) ? $obj->{$value} : ''));
2992 } else {
2993 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2994 print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1);
2995 }
2996 print '</td>';
2997 } elseif (in_array($value, array('nbjour', 'decalage', 'taux', 'localtax1', 'localtax2'))) {
2998 $class = "right";
2999 if (in_array($value, array('taux', 'localtax1', 'localtax2'))) {
3000 $class = "center"; // Fields aligned on right
3001 }
3002 print '<td class="'.$class.'">';
3003 print '<input type="text" class="flat" value="'.(isset($obj->{$value}) ? $obj->{$value} : '').'" size="3" name="'. $value .'">';
3004 print '</td>';
3005 } elseif (in_array($value, array('libelle_facture'))) {
3006 print '<td>';
3007 $transfound = 0;
3008 $transkey = '';
3009 // Special case for labels
3010 if ($tabname == 'c_payment_term') {
3011 $langs->load("bills");
3012 if (isset($obj->code) && !empty($obj->code)) {
3013 $transkey = "PaymentCondition" . strtoupper($obj->code);
3014 if ($langs->trans($transkey) != $transkey) {
3015 $transfound = 1;
3016 print $form->textwithpicto($langs->trans($transkey), $langs->trans("GoIntoTranslationMenuToChangeThis"));
3017 }
3018 }
3019 }
3020 if (!$transfound) {
3021 print '<textarea cols="30" rows="'.ROWS_2.'" class="flat" name="'. $value .'">'.(empty($obj->{$value}) ? '' : $obj->{$value}).'</textarea>';
3022 } else {
3023 print '<input type="hidden" name="'. $value .'" value="'.$transkey.'">';
3024 }
3025 print '</td>';
3026 } elseif ($value == 'price' || preg_match('/^amount/i', (string) $value)) {
3027 print '<td><input type="text" class="flat minwidth75" value="'.price((!empty($obj->{$value}) ? $obj->{$value} : '')).'" name="'. $value .'"></td>';
3028 } elseif ($value == 'code' && isset($obj->{$value})) {
3029 print '<td>';
3030 if ($tabname == 'c_paiement' && in_array($obj->{$value}, array('LIQ', 'CB', 'CHQ', 'VIR'))) {
3031 // Case of code that should not be modified
3032 print '<input type="hidden" class="flat minwidth75 maxwidth100" value="'.(empty($obj->{$value}) ? '' : $obj->{$value}).'" name="'. $value .'">';
3033 print $obj->{$value};
3034 } else {
3035 print '<input type="text" class="flat minwidth75 maxwidth100" value="'.(empty($obj->{$value}) ? '' : $obj->{$value}).'" name="'. $value .'">';
3036 }
3037 print '</td>';
3038 } elseif ($value == 'unit') {
3039 print '<td>';
3040 $units = array(
3041 'mm' => $langs->trans('SizeUnitmm'),
3042 'cm' => $langs->trans('SizeUnitcm'),
3043 'point' => $langs->trans('SizeUnitpoint'),
3044 'inch' => $langs->trans('SizeUnitinch')
3045 );
3046 print $form->selectarray('unit', $units, (empty($obj->{$value}) ? '' : $obj->{$value}), 0, 0, 0);
3047 print '</td>';
3048 } elseif ($value == 'type_vat') {
3049 // VAT type 0: all, 1: sell, 2: purchase
3050 print '<td class="center">';
3051 print $form->selectarray($value, $type_vatList, (empty($obj->{$value}) ? '0' : $obj->{$value}));
3052 print '</td>';
3053 } elseif ($value == 'localtax1_type' || $value == 'localtax2_type') {
3054 // Le type de taxe locale
3055 print '<td class="center">';
3056 print $form->selectarray($value, $localtax_typeList, (empty($obj->{$value}) ? '' : $obj->{$value}));
3057 print '</td>';
3058 } elseif ($value == 'accountancy_code' || $value == 'accountancy_code_sell' || $value == 'accountancy_code_buy') {
3059 print '<td>';
3060 if (isModEnabled('accounting')) {
3061 $fieldname = $value;
3062 $accountancy_account = (empty($obj->$fieldname) ? 0 : $obj->$fieldname);
3063 print $formaccounting->select_account($accountancy_account, '.'. $value, 1, array(), 1, 1, 'maxwidth125 maxwidthonsmartphone');
3064 } else {
3065 $fieldname = $value;
3066 print '<input type="text" class="flat minwidth100" value="'.(isset($obj->$fieldname) ? $obj->$fieldname : '').'" name="'. $value .'">';
3067 }
3068 print '</td>';
3069 } elseif ($value == 'fk_tva') {
3070 print '<td>';
3071 print $form->load_tva('fk_tva', $obj->taux, $mysoc, new Societe($db), 0, 0, '', false, -1);
3072 print '</td>';
3073 } elseif ($value == 'fk_c_exp_tax_cat') {
3074 print '<td>';
3075 print $form->selectExpenseCategories($obj->fk_c_exp_tax_cat);
3076 print '</td>';
3077 } elseif ($value == 'fk_range') {
3078 print '<td>';
3079 print $form->selectExpenseRanges($obj->fk_range);
3080 print '</td>';
3081 } elseif ($value == 'block_if_negative') {
3082 print '<td>';
3083 print $form->selectyesno("block_if_negative", (empty($obj->block_if_negative) ? '' : $obj->block_if_negative), 1);
3084 print '</td>';
3085 } elseif ($value == 'type_duration') {
3086 print '<td>';
3087 print $form->selectTypeDuration('', (empty($obj->type_duration) ? '' : $obj->type_duration), ['s', 'i', 'h']);
3088 print '</td>';
3089 } elseif ($value == 'color') {
3090 print '<td>';
3091 print $formother->selectColor((empty($obj->{$value}) ? '' : $obj->{$value}), 'color');
3092 print '</td>';
3093 } else {
3094 $fieldValue = isset($obj->{$value}) ? $obj->{$value} : '';
3095 $classtd = '';
3096 $class = '';
3097
3098 if ($value == 'sortorder') {
3099 $fieldlist[$field] = 'position';
3100 }
3101
3102 if ($fieldlist[$field] == 'code') {
3103 $class = 'maxwidth100';
3104 }
3105 if (in_array($fieldlist[$field], array('deposit_percent'))) {
3106 $classtd = 'right';
3107 $class = 'maxwidth50 right';
3108 }
3109 if (in_array($fieldlist[$field], array('pos', 'position'))) {
3110 $classtd = 'right';
3111 $class = 'maxwidth50 right';
3112 }
3113 if (in_array($fieldlist[$field], array('dayrule', 'day', 'month', 'year', 'use_default', 'affect', 'delay', 'public', 'sortorder', 'sens', 'category_type', 'fk_parent'))) {
3114 $class = 'maxwidth50 center';
3115 }
3116 if (in_array($fieldlist[$field], array('use_default', 'public', 'fk_parent'))) {
3117 $classtd = 'center';
3118 }
3119 if (in_array($fieldlist[$field], array('libelle', 'label', 'tracking'))) {
3120 $class = 'quatrevingtpercent';
3121 }
3122 // Fields that must be suggested as '0' instead of ''
3123 if ($fieldlist[$field] == 'fk_parent') {
3124 if (empty($fieldValue)) {
3125 $fieldValue = '0';
3126 }
3127 }
3128
3129 // Labels Length
3130 $maxlength = '';
3131 if (in_array($fieldlist[$field], array('libelle', 'label'))) {
3132 switch ($tabname) {
3133 case 'c_ecotaxe':
3134 case 'c_email_senderprofile':
3135 case 'c_forme_juridique':
3136 case 'c_holiday_types':
3137 case 'c_payment_term':
3138 case 'c_transport_mode':
3139 $maxlength = ' maxlength="255"';
3140 break;
3141 case 'c_email_templates':
3142 $maxlength = ' maxlength="180"';
3143 break;
3144 case 'c_socialnetworks':
3145 $maxlength = ' maxlength="150"';
3146 break;
3147 default:
3148 $maxlength = ' maxlength="128"';
3149 }
3150 }
3151
3152 print '<td class="'.$classtd.'">';
3153 $transfound = 0;
3154 $transkey = '';
3155 if (in_array($fieldlist[$field], array('label', 'libelle'))) { // For label
3156 // Special case for labels
3157 if ($tabname == 'c_civility' && !empty($obj->code)) {
3158 $transkey = "Civility".strtoupper($obj->code);
3159 }
3160 if ($tabname == 'c_payment_term' && !empty($obj->code)) {
3161 $langs->load("bills");
3162 $transkey = "PaymentConditionShort".strtoupper($obj->code);
3163 }
3164 if ($transkey && $langs->trans($transkey) != $transkey) {
3165 $transfound = 1;
3166 print $form->textwithpicto($langs->trans($transkey), $langs->trans("GoIntoTranslationMenuToChangeThis"));
3167 }
3168 }
3169 if (!$transfound) {
3170 print '<input type="text" class="flat'.($class ? ' '.$class : '').'"'.($maxlength ? ' '.$maxlength : '').' value="'.dol_escape_htmltag($fieldValue).'" name="'.$fieldlist[$field].'">';
3171 } else {
3172 print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$transkey.'">';
3173 }
3174 print '</td>';
3175 }
3176 }
3177
3178 return $withentity;
3179}
$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:2874
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.