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