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