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