dolibarr 22.0.5
dict.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
5 * Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
6 * Copyright (C) 2010-2022 Juanjo Menent <jmenent@2byte.es>
7 * Copyright (C) 2011-2021 Philippe Grand <philippe.grand@atoo-net.com>
8 * Copyright (C) 2011 Remy Younes <ryounes@gmail.com>
9 * Copyright (C) 2012-2015 Marcos García <marcosgdf@gmail.com>
10 * Copyright (C) 2012 Christophe Battarel <christophe.battarel@ltairis.fr>
11 * Copyright (C) 2011-2025 Alexandre Spangaro <alexandre@inovea-conseil.com>
12 * Copyright (C) 2015 Ferran Marcet <fmarcet@2byte.es>
13 * Copyright (C) 2016 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
14 * Copyright (C) 2019-2025 Frédéric France <frederic.france@free.fr>
15 * Copyright (C) 2020-2022 Open-Dsi <support@open-dsi.fr>
16 * Copyright (C) 2024 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, c.sepa FROM ".MAIN_DB_PREFIX."c_country AS c";
273$tabsql[DICT_CIVILITY] = "SELECT c.rowid as rowid, c.code as code, c.label, c.active FROM ".MAIN_DB_PREFIX."c_civility AS c";
274$tabsql[DICT_ACTIONCOMM] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.type, a.active, a.module, a.color, a.position FROM ".MAIN_DB_PREFIX."c_actioncomm AS a";
275$tabsql[DICT_CHARGESOCIALES] = "SELECT a.id as rowid, a.code as code, a.libelle AS libelle, a.accountancy_code as accountancy_code, c.code as country_code, c.label as country, a.fk_pays as country_id, a.active FROM ".MAIN_DB_PREFIX."c_chargesociales AS a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_pays = c.rowid and c.active = 1";
276$tabsql[DICT_TYPENT] = "SELECT t.id as rowid, t.code as code, t.libelle, t.fk_country as country_id, c.code as country_code, c.label as country, t.position, t.module, t.active FROM ".MAIN_DB_PREFIX."c_typent as t LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_country=c.rowid";
277$tabsql[DICT_CURRENCIES] = "SELECT c.code_iso as code, c.label, c.unicode, c.active FROM ".MAIN_DB_PREFIX."c_currencies AS c";
278$tabsql[DICT_TVA] = "SELECT t.rowid, t.entity, t.code, t.type_vat, t.taux, t.localtax1_type, t.localtax1, t.localtax2_type, t.localtax2, c.label as country, c.code as country_code, t.fk_pays as country_id, t.fk_department_buyer as department_buyer_id, db.nom as department_buyer, t.recuperableonly, t.note, t.active, t.accountancy_code_sell, t.accountancy_code_buy, t.use_default FROM ".MAIN_DB_PREFIX."c_tva as t INNER JOIN ".MAIN_DB_PREFIX."c_country as c ON t.fk_pays = c.rowid LEFT JOIN ".MAIN_DB_PREFIX."c_departements as db ON t.fk_department_buyer = db.rowid WHERE t.entity IN (".getEntity($tabname[DICT_TVA]).")";
279$tabsql[DICT_TYPE_CONTACT] = "SELECT t.rowid as rowid, t.element, t.source, t.code, t.libelle, t.position, t.active FROM ".MAIN_DB_PREFIX."c_type_contact AS t";
280$tabsql[DICT_PAYMENT_TERM] = "SELECT c.rowid as rowid, c.code, c.libelle, c.libelle_facture, c.deposit_percent, c.nbjour, c.type_cdr, c.decalage, c.active, c.sortorder, c.entity FROM ".MAIN_DB_PREFIX."c_payment_term AS c WHERE c.entity IN (".getEntity($tabname[DICT_PAYMENT_TERM]).")";
281$tabsql[DICT_PAIEMENT] = "SELECT c.id as rowid, c.code, c.libelle, c.type, c.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,module,country_id,country".(getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? ',position' : '');
371$tabfield[DICT_CURRENCIES] = "code,label,unicode";
372$tabfield[DICT_TVA] = "country_id,country,department_buyer_id,department_buyer,code,type_vat,taux,localtax1_type,localtax1,localtax2_type,localtax2,recuperableonly,accountancy_code_sell,accountancy_code_buy,use_default,note";
373$tabfield[DICT_TYPE_CONTACT] = "element,source,code,libelle,position";
374$tabfield[DICT_PAYMENT_TERM] = "code,libelle,libelle_facture,deposit_percent,nbjour,type_cdr,decalage,sortorder";
375$tabfield[DICT_PAIEMENT] = "code,libelle,type";
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,use_default,note";
420$tabfieldvalue[DICT_TYPE_CONTACT] = "element,source,code,libelle,position";
421$tabfieldvalue[DICT_PAYMENT_TERM] = "code,libelle,libelle_facture,deposit_percent,nbjour,type_cdr,decalage,sortorder";
422$tabfieldvalue[DICT_PAIEMENT] = "code,libelle,type";
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,use_default,note,entity";
467$tabfieldinsert[DICT_TYPE_CONTACT] = "element,source,code,libelle,position";
468$tabfieldinsert[DICT_PAYMENT_TERM] = "code,libelle,libelle_facture,deposit_percent,nbjour,type_cdr,decalage,sortorder,entity";
469$tabfieldinsert[DICT_PAIEMENT] = "code,libelle,type,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 'shipping' => img_picto('', 'dolly', 'class="pictofixedwidth"') . $langs->trans('Shipment'),
720 'facture' => img_picto('', 'bill', 'class="pictofixedwidth"').$langs->trans('Bill'),
721 'fichinter' => img_picto('', 'intervention', 'class="pictofixedwidth"').$langs->trans('InterventionCard'),
722 'contrat' => img_picto('', 'contract', 'class="pictofixedwidth"').$langs->trans('Contract'),
723 'ticket' => img_picto('', 'ticket', 'class="pictofixedwidth"').$langs->trans('Ticket'),
724 'supplier_proposal' => img_picto('', 'supplier_proposal', 'class="pictofixedwidth"').$langs->trans('SupplierProposal'),
725 'order_supplier' => img_picto('', 'supplier_order', 'class="pictofixedwidth"').$langs->trans('SupplierOrder'),
726 'invoice_supplier' => img_picto('', 'supplier_invoice', 'class="pictofixedwidth"').$langs->trans('SupplierBill'),
727 'conferenceorbooth' => img_picto('', 'eventorganization', 'class="pictofixedwidth"').$langs->trans('ConferenceOrBooth'),
728 );
729
731
732 //asort($elementList);
733 $sourceList = array(
734 'internal' => $langs->trans('Internal'),
735 'external' => $langs->trans('External')
736 );
737}
738
739// Define type_vatList (used for dictionary "llx_c_tva")
740$type_vatList = array(
741 "0" => $langs->trans("Sell").'+'.$langs->trans("Buy"),
742 "1" => $langs->trans("Sell"),
743 "2" => $langs->trans("Buy")
744);
745
746// Define localtax_typeList (used for dictionary "llx_c_tva")
747$localtax_typeList = array(
748 "0" => $langs->trans("No"),
749 "1" => $langs->trans("Yes").' ('.$langs->trans("Type")." 1)", //$langs->trans("%ageOnAllWithoutVAT"),
750 "2" => $langs->trans("Yes").' ('.$langs->trans("Type")." 2)", //$langs->trans("%ageOnAllBeforeVAT"),
751 "3" => $langs->trans("Yes").' ('.$langs->trans("Type")." 3)", //$langs->trans("%ageOnProductsWithoutVAT"),
752 "4" => $langs->trans("Yes").' ('.$langs->trans("Type")." 4)", //$langs->trans("%ageOnProductsBeforeVAT"),
753 "5" => $langs->trans("Yes").' ('.$langs->trans("Type")." 5)", //$langs->trans("%ageOnServiceWithoutVAT"),
754 "6" => $langs->trans("Yes").' ('.$langs->trans("Type")." 6)" //$langs->trans("%ageOnServiceBeforeVAT"),
755);
756
757
758
759/*
760 * Actions
761 */
762
763$object = new stdClass();
764$parameters = array(
765 'id' => $id,
766 'rowid' => $rowid,
767 'code' => $code,
768 'confirm' => $confirm,
769 'entity' => $entity,
770 'taborder' => $taborder,
771 'tabname' => $tabname,
772 'tablib' => $tablib,
773 'tabsql' => $tabsql,
774 'tabsqlsort' => $tabsqlsort,
775 'tabfield' => $tabfield,
776 'tabfieldvalue' => $tabfieldvalue,
777 'tabfieldinsert' => $tabfieldinsert,
778 'tabrowid' => $tabrowid,
779 'tabcond' => $tabcond,
780 'tabhelp' => $tabhelp,
781 'tabcomplete' => $tabcomplete
782);
783$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
784if ($reshook < 0) {
785 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
786}
787
788if (GETPOST('button_removefilter', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter_x', 'alpha')) {
789 $search_country_id = '';
790 $search_code = '';
791 $search_active = '';
792}
793
794if (empty($reshook)) {
795 // Actions add or modify an entry into a dictionary
796 if (GETPOST('actionadd') || GETPOST('actionmodify')) {
797 $listfield = explode(',', str_replace(' ', '', $tabfield[$id]));
798 $listfieldinsert = explode(',', $tabfieldinsert[$id]);
799 $listfieldmodify = explode(',', $tabfieldinsert[$id]);
800 $listfieldvalue = explode(',', $tabfieldvalue[$id]);
801
802 // Check that all mandatory fields are filled
803 $ok = 1;
804 foreach ($listfield as $f => $value) {
805 // Discard check of mandatory fields for country for some tables
806 if ($value == 'country_id' && in_array($tablib[$id], array('DictionaryPublicHolidays', 'DictionaryVAT', 'DictionaryInvoiceSubtype', 'DictionaryRegion', 'DictionaryCompanyType', 'DictionaryHolidayTypes', 'DictionaryRevenueStamp', 'DictionaryAccountancysystem', 'DictionaryAccountancyCategory'))) {
807 continue; // For some pages, country is not mandatory
808 }
809 if ($value == 'country' && in_array($tablib[$id], array('DictionaryPublicHolidays', 'DictionaryCanton', 'DictionaryCompanyType', 'DictionaryHolidayTypes', 'DictionaryRevenueStamp'))) {
810 continue; // For some pages, country is not mandatory
811 }
812 // Discard check of mandatory fields for department buyer id for some tables (only for add action)
813 if (GETPOST('actionadd') && $value == 'department_buyer_id' && $tablib[$id] == 'DictionaryVAT') {
814 continue; // For some pages, department buyer id is not mandatory
815 }
816 // Discard check of mandatory fields for department buyer for some tables
817 if ($value == 'department_buyer' && $tablib[$id] == 'DictionaryVAT') {
818 continue; // For some pages, department buyer is not mandatory
819 }
820 // Discard check of mandatory fields for other fields
821 if ($value == 'localtax1' && !GETPOST('localtax1_type')) {
822 continue;
823 }
824 if ($value == 'localtax2' && !GETPOST('localtax2_type')) {
825 continue;
826 }
827 if ($value == 'color' && !GETPOST('color')) {
828 continue;
829 }
830 if ($value == 'formula' && !GETPOST('formula')) {
831 continue;
832 }
833 if ($value == 'dayrule' && !GETPOST('dayrule')) {
834 continue;
835 }
836 if ($value == 'sortorder') {
837 continue; // For a column name 'sortorder', we use the field name 'position'
838 }
839 if ((!GETPOSTISSET($value) || GETPOST($value) == '')
840 && (
841 !in_array($value, array('decalage', 'module', 'accountancy_code', 'accountancy_code_sell', 'accountancy_code_buy', 'tracking', 'picto', 'deposit_percent')) // Fields that are not mandatory
842 && ($id != DICT_TVA || ($value != 'code' && $value != 'note')) // Field code and note is not mandatory for dictionary table 10
843 )
844 ) {
845 $ok = 0;
846 $fieldnamekey = $value;
847 // We take translate key of field
848 if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label')) {
849 $fieldnamekey = 'Label';
850 }
851 if ($fieldnamekey == 'libelle_facture') {
852 $fieldnamekey = 'LabelOnDocuments';
853 }
854 if ($fieldnamekey == 'deposit_percent') {
855 $fieldnamekey = 'DepositPercent';
856 }
857 if ($fieldnamekey == 'nbjour') {
858 $fieldnamekey = 'NbOfDays';
859 }
860 if ($fieldnamekey == 'decalage') {
861 $fieldnamekey = 'Offset';
862 }
863 if ($fieldnamekey == 'module') {
864 $fieldnamekey = 'Module';
865 }
866 if ($fieldnamekey == 'code') {
867 $fieldnamekey = 'Code';
868 }
869 if ($fieldnamekey == 'note') {
870 $fieldnamekey = 'Note';
871 }
872 if ($fieldnamekey == 'taux') {
873 $fieldnamekey = 'Rate';
874 }
875 if ($fieldnamekey == 'type') {
876 $fieldnamekey = 'Type';
877 }
878 if ($fieldnamekey == 'position') {
879 $fieldnamekey = 'Position';
880 }
881 if ($fieldnamekey == 'unicode') {
882 $fieldnamekey = 'Unicode';
883 }
884 if ($fieldnamekey == 'deductible') {
885 $fieldnamekey = 'Deductible';
886 }
887 if ($fieldnamekey == 'sortorder') {
888 $fieldnamekey = 'SortOrder';
889 }
890 if ($fieldnamekey == 'category_type') {
891 $fieldnamekey = 'Calculated';
892 }
893 if ($fieldnamekey == 'revenuestamp_type') {
894 $fieldnamekey = 'TypeOfRevenueStamp';
895 }
896 if ($fieldnamekey == 'use_default') {
897 $fieldnamekey = 'UseByDefault';
898 }
899
900 setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
901 }
902 }
903 // Other special checks
904 if (GETPOST('actionadd') && $tabname[$id] == "c_actioncomm" && GETPOSTISSET("type") && in_array(GETPOST("type"), array('system', 'systemauto'))) {
905 $ok = 0;
906 setEventMessages($langs->transnoentities('ErrorReservedTypeSystemSystemAuto'), null, 'errors');
907 }
908 if (GETPOSTISSET("code")) {
909 if (GETPOST("code") == '0') {
910 $ok = 0;
911 setEventMessages($langs->transnoentities('ErrorCodeCantContainZero'), null, 'errors');
912 }
913 }
914 if (GETPOSTISSET("country") && (GETPOST("country") == '0') && ($id != DICT_DEPARTEMENTS)) {
915 if (in_array($tablib[$id], array('DictionaryCompanyType', 'DictionaryHolidayTypes'))) { // Field country is no mandatory for such dictionaries
916 $_POST["country"] = '';
917 } else {
918 $ok = 0;
919 setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities("Country")), null, 'errors');
920 }
921 }
922 if (($id == DICT_REGIONS || $id == DICT_PRODUCT_NATURE) && !is_numeric(GETPOST("code")) && GETPOST('actionadd')) {
923 $ok = 0;
924 setEventMessages($langs->transnoentities("ErrorFieldMustBeANumeric", $langs->transnoentities("Code")), null, 'errors');
925 }
926 if ($id == DICT_COUNTRY && strlen(GETPOST("code")) != 2) { // 2 char on code for country code
927 $ok = 0;
928 setEventMessages($langs->transnoentities("ErrorCountryCodeMustBe2Char", $langs->transnoentities("Code")), null, 'errors');
929 }
930 if ($id == DICT_PAIEMENT && strlen(GETPOST("code")) >= 6) { // 6 char max on code for payment mode codes
931 $ok = 0;
932 setEventMessages($langs->transnoentities("ErrorFieldMustHaveLessThanXChar", $langs->transnoentities("Code"), '6'), null, 'errors');
933 }
934
935 // Clean some parameters
936 if ((GETPOST("localtax1_type") || (GETPOST('localtax1_type') == '0')) && !GETPOST("localtax1")) {
937 $_POST["localtax1"] = '0'; // If empty, we force to 0
938 }
939 if ((GETPOST("localtax2_type") || (GETPOST('localtax2_type') == '0')) && !GETPOST("localtax2")) {
940 $_POST["localtax2"] = '0'; // If empty, we force to 0
941 }
942 if (GETPOST('department_buyer_id') <= 0) {
943 $_POST['department_buyer_id'] = ''; // If empty, we force to null
944 }
945 if (GETPOST("accountancy_code") <= 0) {
946 $_POST["accountancy_code"] = ''; // If empty, we force to null
947 }
948 if (GETPOST("accountancy_code_sell") <= 0) {
949 $_POST["accountancy_code_sell"] = ''; // If empty, we force to null
950 }
951 if (GETPOST("accountancy_code_buy") <= 0) {
952 $_POST["accountancy_code_buy"] = ''; // If empty, we force to null
953 }
954 if ($id == DICT_TVA && GETPOSTISSET("code")) { // Spaces are not allowed into code for tax dictionary
955 $_POST["code"] = preg_replace('/[^a-zA-Z0-9_\-\+]/', '', GETPOST("code"));
956 }
957
958 $tablename = $tabname[$id];
959 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
960
961 // If check ok and action add, add the line
962 if ($ok && GETPOST('actionadd')) {
963 $newid = 0;
964 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
965 // Get free id for insert
966 $sql = "SELECT MAX(".$tabrowid[$id].") as newid FROM ".MAIN_DB_PREFIX.$tablename;
967 $result = $db->query($sql);
968 if ($result) {
969 $obj = $db->fetch_object($result);
970 $newid = ((int) $obj->newid) + 1;
971 } else {
972 dol_print_error($db);
973 }
974 }
975
976 // Add new entry
977 $sql = "INSERT INTO ".MAIN_DB_PREFIX.$tablename." (";
978 // List of fields
979 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
980 $sql .= $tabrowid[$id].",";
981 }
982 $sql .= $tabfieldinsert[$id];
983 $sql .= ",active)";
984 $sql .= " VALUES(";
985
986 // List of values
987 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldinsert)) {
988 $sql .= $newid.",";
989 }
990 $i = 0;
991 foreach ($listfieldinsert as $f => $value) {
992 $keycode = (isset($listfieldvalue[$i]) ? $listfieldvalue[$i] : '');
993 if (empty($keycode)) {
994 $keycode = $value;
995 }
996
997 if ($value == 'price' || preg_match('/^amount/i', $value)) {
998 $_POST[$keycode] = price2num(GETPOST($keycode), 'MU');
999 } elseif ($value == 'taux' || $value == 'localtax1') {
1000 $_POST[$keycode] = price2num(GETPOST($keycode), 8); // Note that localtax2 can be a list of rates separated by coma like X:Y:Z
1001 } elseif ($value == 'entity') {
1002 $_POST[$keycode] = getEntity($tablename);
1003 }
1004
1005 if ($i) {
1006 $sql .= ",";
1007 }
1008
1009 if ($keycode == 'sortorder') { // For column name 'sortorder', we use the field name 'position'
1010 $sql .= GETPOSTINT('position');
1011 } elseif (GETPOST($keycode) == '' && !($keycode == 'code' && $id == DICT_TVA)) {
1012 $sql .= "null"; // For vat, we want/accept code = ''
1013 } elseif ($keycode == 'content') {
1014 $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
1015 } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) {
1016 $sql .= GETPOSTINT($keycode);
1017 } else {
1018 $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'";
1019 }
1020
1021 $i++;
1022 }
1023 $sql .= ",1)";
1024
1025 dol_syslog("actionadd", LOG_DEBUG);
1026 $resql = $db->query($sql);
1027 if ($resql) { // Add is ok
1028 setEventMessages($langs->transnoentities("RecordCreatedSuccessfully"), null, 'mesgs');
1029
1030 // Clean $_POST array, we keep only id of dictionary
1031 if ($id == DICT_TVA && GETPOSTINT('country') > 0) {
1032 $search_country_id = GETPOSTINT('country');
1033 }
1034 $_POST = array('id' => $id);
1035 } else {
1036 if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
1037 setEventMessages($langs->transnoentities("ErrorRecordAlreadyExists"), null, 'errors');
1038 } else {
1039 dol_print_error($db);
1040 }
1041 }
1042 }
1043
1044 // If verif ok and action modify, modify the line
1045 if ($ok && GETPOST('actionmodify')) {
1046 if ($tabrowid[$id]) {
1047 $rowidcol = $tabrowid[$id];
1048 } else {
1049 $rowidcol = "rowid";
1050 }
1051
1052 // Modify entry
1053 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET ";
1054 // Modifie valeur des champs
1055 if ($tabrowid[$id] && !in_array($tabrowid[$id], $listfieldmodify)) {
1056 $sql .= $tabrowid[$id]."=";
1057 $sql .= "'".$db->escape($rowid)."', ";
1058 }
1059 $i = 0;
1060 foreach ($listfieldmodify as $field) {
1061 $keycode = empty($listfieldvalue[$i]) ? '' : $listfieldvalue[$i];
1062 if (empty($keycode)) {
1063 $keycode = $field;
1064 }
1065
1066 if ($field == 'price' || preg_match('/^amount/i', $field)) {
1067 $_POST[$keycode] = price2num(GETPOST($keycode), 'MU');
1068 } elseif ($field == 'taux' || $field == 'localtax1') {
1069 $_POST[$keycode] = price2num(GETPOST($keycode), 8); // Note that localtax2 can be a list of rates separated by coma like X:Y:Z
1070 } elseif ($field == 'entity') {
1071 $_POST[$keycode] = getEntity($tablename);
1072 }
1073
1074 if ($i) {
1075 $sql .= ",";
1076 }
1077 $sql .= $field."=";
1078 if ($keycode == 'sortorder') { // For column name 'sortorder', we use the field name 'position'
1079 $sql .= GETPOSTINT('position');
1080 } elseif (GETPOST($keycode) == '' && !($keycode == 'code' && $id == DICT_TVA)) {
1081 $sql .= "null"; // For vat, we want/accept code = ''
1082 } elseif ($keycode == 'content') {
1083 $sql .= "'".$db->escape(GETPOST($keycode, 'restricthtml'))."'";
1084 } elseif (in_array($keycode, array('joinfile', 'private', 'pos', 'position', 'scale', 'use_default'))) {
1085 $sql .= GETPOSTINT($keycode);
1086 } else {
1087 $sql .= "'".$db->escape(GETPOST($keycode, 'alphanohtml'))."'";
1088 }
1089
1090 $i++;
1091 }
1092 if (in_array($rowidcol, array('code', 'code_iso'))) {
1093 $sql .= " WHERE ".$db->sanitize($rowidcol)." = '".$db->escape($rowid)."'";
1094 } else {
1095 $sql .= " WHERE ".$db->sanitize($rowidcol)." = ".((int) $rowid);
1096 }
1097 if (in_array('entity', $listfieldmodify)) {
1098 $sql .= " AND entity = ".((int) getEntity($tablename, 0));
1099 }
1100
1101 dol_syslog("actionmodify", LOG_DEBUG);
1102 //print $sql;
1103 $resql = $db->query($sql);
1104 if (!$resql) {
1105 setEventMessages($db->error(), null, 'errors');
1106 }
1107 }
1108
1109 if (!$ok && GETPOST('actionadd')) {
1110 $action = 'create';
1111 }
1112 if (!$ok && GETPOST('actionmodify')) {
1113 $action = 'edit';
1114 }
1115 }
1116
1117 if ($action == 'confirm_delete' && $confirm == 'yes') { // delete
1118 if ($tabrowid[$id]) {
1119 $rowidcol = $tabrowid[$id];
1120 } else {
1121 $rowidcol = "rowid";
1122 }
1123
1124 $tablename = $tabname[$id];
1125 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1126
1127 $sql = "DELETE FROM ".MAIN_DB_PREFIX.$tablename." WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1128
1129 dol_syslog("delete", LOG_DEBUG);
1130 $result = $db->query($sql);
1131 if (!$result) {
1132 if ($db->errno() == 'DB_ERROR_CHILD_EXISTS') {
1133 setEventMessages($langs->transnoentities("ErrorRecordIsUsedByChild"), null, 'errors');
1134 } else {
1135 dol_print_error($db);
1136 }
1137 }
1138 }
1139
1140 // activate
1141 if ($action == $acts[0]) {
1142 if ($tabrowid[$id]) {
1143 $rowidcol = $tabrowid[$id];
1144 } else {
1145 $rowidcol = "rowid";
1146 }
1147
1148 $tablename = $tabname[$id];
1149 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1150
1151 if ($rowid) {
1152 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET active = 1 WHERE ".$db->escape($rowidcol)." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1153 } elseif ($code) {
1154 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET active = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1155 } else {
1156 $sql = null;
1157 }
1158
1159 if ($sql !== null) {
1160 $result = $db->query($sql);
1161 if (!$result) {
1162 dol_print_error($db);
1163 }
1164 } else {
1165 dol_print_error(null, "No DB entry or no code");
1166 }
1167 }
1168
1169 // disable
1170 if ($action == $acts[1]) {
1171 if ($tabrowid[$id]) {
1172 $rowidcol = $tabrowid[$id];
1173 } else {
1174 $rowidcol = "rowid";
1175 }
1176
1177 $tablename = $tabname[$id];
1178 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1179
1180 if ($rowid) {
1181 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET active = 0 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1182 } elseif ($code) {
1183 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET active = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1184 } else {
1185 $sql = null;
1186 }
1187
1188 if ($sql !== null) {
1189 $result = $db->query($sql);
1190 if (!$result) {
1191 dol_print_error($db);
1192 }
1193 } else {
1194 dol_print_error(null, "No DB entry or no code");
1195 }
1196 }
1197
1198 // favorite
1199 if ($action == 'activate_favorite') {
1200 if ($tabrowid[$id]) {
1201 $rowidcol = $tabrowid[$id];
1202 } else {
1203 $rowidcol = "rowid";
1204 }
1205
1206 $tablename = $tabname[$id];
1207 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1208
1209 if ($rowid) {
1210 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET favorite = 1 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1211 } elseif ($code) {
1212 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET favorite = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1213 } else {
1214 $sql = null;
1215 }
1216
1217 if ($sql !== null) {
1218 $result = $db->query($sql);
1219 if (!$result) {
1220 dol_print_error($db);
1221 }
1222 } else {
1223 dol_print_error(null, "No DB entry or no code");
1224 }
1225 }
1226
1227 // disable favorite
1228 if ($action == 'disable_favorite') {
1229 if ($tabrowid[$id]) {
1230 $rowidcol = $tabrowid[$id];
1231 } else {
1232 $rowidcol = "rowid";
1233 }
1234
1235 $tablename = $tabname[$id];
1236 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1237
1238 if ($rowid) {
1239 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET favorite = 0 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1240 } elseif ($code) {
1241 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET favorite = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1242 } else {
1243 $sql = null;
1244 }
1245
1246 if ($sql !== null) {
1247 $result = $db->query($sql);
1248 if (!$result) {
1249 dol_print_error($db);
1250 }
1251 } else {
1252 dol_print_error(null, "No DB entry or no code");
1253 }
1254 }
1255
1256 // Is in EEC - Activate
1257 if ($action == 'activate_eec') {
1258 if ($tabrowid[$id]) {
1259 $rowidcol = $tabrowid[$id];
1260 } else {
1261 $rowidcol = "rowid";
1262 }
1263
1264 $tablename = $tabname[$id];
1265 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1266
1267 if ($rowid) {
1268 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET eec = 1 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1269 } elseif ($code) {
1270 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET eec = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1271 } else {
1272 $sql = null;
1273 }
1274
1275 if ($sql !== null) {
1276 $result = $db->query($sql);
1277 if (!$result) {
1278 dol_print_error($db);
1279 }
1280 } else {
1281 dol_print_error(null, "No DB entry or no code");
1282 }
1283 }
1284
1285 // Is in EEC - Disable
1286 if ($action == 'disable_eec') {
1287 if ($tabrowid[$id]) {
1288 $rowidcol = $tabrowid[$id];
1289 } else {
1290 $rowidcol = "rowid";
1291 }
1292
1293 $tablename = $tabname[$id];
1294 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1295
1296 if ($rowid) {
1297 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET eec = 0 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1298 } elseif ($code) {
1299 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET eec = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1300 } else {
1301 $sql = null;
1302 }
1303
1304 if ($sql !== null) {
1305 $result = $db->query($sql);
1306 if (!$result) {
1307 dol_print_error($db);
1308 }
1309 } else {
1310 dol_print_error(null, "No DB entry or no code");
1311 }
1312 }
1313
1314 // Is in Sepa - Activate
1315 if ($action == 'activate_sepa') {
1316 if ($tabrowid[$id]) {
1317 $rowidcol = $tabrowid[$id];
1318 } else {
1319 $rowidcol = "rowid";
1320 }
1321
1322 $tablename = $tabname[$id];
1323 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1324
1325 if ($rowid) {
1326 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET sepa = 1 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1327 } elseif ($code) {
1328 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET sepa = 1 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1329 } else {
1330 $sql = null;
1331 }
1332
1333 if ($sql !== null) {
1334 $result = $db->query($sql);
1335 if (!$result) {
1336 dol_print_error($db);
1337 }
1338 } else {
1339 dol_print_error(null, "No DB entry or no code");
1340 }
1341 }
1342
1343 // Is in Sepa - Disable
1344 if ($action == 'disable_sepa') {
1345 if ($tabrowid[$id]) {
1346 $rowidcol = $tabrowid[$id];
1347 } else {
1348 $rowidcol = "rowid";
1349 }
1350
1351 $tablename = $tabname[$id];
1352 $tablename = preg_replace('/^'.preg_quote(MAIN_DB_PREFIX, '/').'/', '', $tablename);
1353
1354 if ($rowid) {
1355 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET sepa = 0 WHERE ".$rowidcol." = '".$db->escape($rowid)."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1356 } elseif ($code) {
1357 $sql = "UPDATE ".MAIN_DB_PREFIX.$tablename." SET sepa = 0 WHERE code = '".$db->escape(dol_escape_htmltag($code))."'".($entity != '' ? " AND entity = ".(int) $entity : '');
1358 } else {
1359 $sql = null;
1360 }
1361
1362 if ($sql !== null) {
1363 $result = $db->query($sql);
1364 if (!$result) {
1365 dol_print_error($db);
1366 }
1367 } else {
1368 dol_print_error(null, "No DB entry or no code");
1369 }
1370 }
1371}
1372
1373
1374/*
1375 * View
1376 */
1377
1378$form = new Form($db);
1379
1380$title = $langs->trans("DictionarySetup");
1381
1382llxHeader('', $title, '', '', 0, 0, '', '', '', 'mod-admin page-dict');
1383
1384if (GETPOSTINT('id') == DICT_SOCIALNETWORKS && $from == 'socialnetworksetup') {
1385 $head = socialnetwork_prepare_head();
1386 print dol_get_fiche_head($head, 'dict', $langs->trans('MenuDict'), -1, 'user');
1387}
1388
1389
1390$linkback = '';
1391if ($id && empty($from)) {
1392 $title .= ' - '.$langs->trans($tablib[$id]);
1393 $linkback = '<a href="'.$_SERVER['PHP_SELF'].'">'.img_picto($langs->trans("BackToDictionaryList"), 'back', 'class="pictofixedwidth"').'<span class="hideonsmartphone">'.$langs->trans("BackToDictionaryList").'</span></a>';
1394}
1395$titlepicto = 'title_setup';
1396if ($id == DICT_TVA && GETPOST('from') == 'accountancy') {
1397 $title = $langs->trans("MenuVatAccounts");
1398 $titlepicto = 'accountancy';
1399}
1400if ($id == DICT_CHARGESOCIALES && GETPOST('from') == 'accountancy') {
1401 $title = $langs->trans("MenuTaxAccounts");
1402 $titlepicto = 'accountancy';
1403}
1404
1405$param = '&id='.urlencode((string) ($id));
1406if ($search_country_id || GETPOSTISSET('page') || GETPOST('button_removefilter', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter_x', 'alpha')) {
1407 $param .= '&search_country_id='.urlencode((string) ($search_country_id ? $search_country_id : -1));
1408}
1409if ($search_code != '') {
1410 $param .= '&search_code='.urlencode($search_code);
1411}
1412if ($search_active != '') {
1413 $param .= '&search_active='.urlencode($search_active);
1414}
1415if ($entity != '') {
1416 $param .= '&entity='.(int) $entity;
1417}
1418if ($from) {
1419 $param .= '&from='.urlencode($from);
1420}
1421$paramwithsearch = $param;
1422if ($sortorder) {
1423 $paramwithsearch .= '&sortorder='.urlencode($sortorder);
1424}
1425if ($sortfield) {
1426 $paramwithsearch .= '&sortfield='.urlencode($sortfield);
1427}
1428if ($from) {
1429 $paramwithsearch .= '&from='.urlencode($from);
1430}
1431
1432
1433// Confirmation of the deletion of the line
1434if ($action == 'delete') {
1435 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);
1436}
1437
1438// Show a dictionary
1439if ($id > 0) {
1440 // Complete search values request with sort criteria
1441 $sqlfields = $tabsql[$id];
1442
1443 $tablecode = 't.code';
1444 $tableprefix = '';
1445 $tableprefixarray = array(
1446 DICT_FORME_JURIDIQUE => 'f.code',
1447 DICT_DEPARTEMENTS => 'd.code_departement',
1448 DICT_REGIONS => 'r.code_region',
1449 DICT_COUNTRY => 'c.code',
1450 DICT_CIVILITY => 'c.code',
1451 DICT_ACTIONCOMM => 'a.code',
1452 DICT_CHARGESOCIALES => 'a.code',
1453 DICT_TYPENT => 't.code',
1454 DICT_CURRENCIES => 'c.code_iso',
1455 DICT_ECOTAXE => 'e.code',
1456 DICT_HOLIDAY_TYPES => 'h.code',
1457 DICT_HRM_PUBLIC_HOLIDAY => 'a.code',
1458 DICT_UNITS => 'r.code',
1459 DICT_SOCIALNETWORKS => 's.code',
1460 45 => 'f.code',
1461 46 => 'f.code',
1462 47 => 'f.code',
1463 48 => 'f.code',
1464 );
1465 if (!empty($tableprefixarray[$id])) {
1466 $tablecode = $tableprefixarray[$id];
1467 $tableprefix = preg_replace('/\..*$/', '.', $tablecode);
1468 }
1469 $reg = array();
1470 if (empty($tableprefix) && preg_match('/SELECT ([a-z]\.)rowid/i', $sqlfields, $reg)) {
1471 $tableprefix = $reg[1];
1472 }
1473
1474 $sql = $sqlfields;
1475 if (!preg_match('/ WHERE /', $sql)) {
1476 $sql .= " WHERE 1 = 1";
1477 }
1478 if ($search_country_id > 0) {
1479 $sql .= " AND c.rowid = ".((int) $search_country_id);
1480 }
1481 if ($search_code != '') {
1482 $sql .= natural_search($tablecode, $search_code);
1483 }
1484 if ($search_active == 'yes') {
1485 $sql .= " AND ".$db->sanitize($tableprefix)."active = 1";
1486 } elseif ($search_active == 'no') {
1487 $sql .= " AND ".$db->sanitize($tableprefix)."active = 0";
1488 }
1489
1490 // Count total nb of records
1491 $nbtotalofrecords = '';
1492 if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
1493 /* The fast and low memory method to get and count full list converts the sql into a sql count */
1494 $sqlforcount = preg_replace('/^.*\sFROM\s/', 'SELECT COUNT(*) as nbtotalofrecords FROM ', $sql);
1495 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
1496 $resql = $db->query($sqlforcount);
1497 if ($resql) {
1498 $objforcount = $db->fetch_object($resql);
1499 $nbtotalofrecords = $objforcount->nbtotalofrecords;
1500 } else {
1501 dol_print_error($db);
1502 }
1503
1504 if (($page * $listlimit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
1505 $page = 0;
1506 $offset = 0;
1507 }
1508 $db->free($resql);
1509 }
1510
1511 if ($sortfield) {
1512 // If sort order is "country", we use country_code instead
1513 if ($sortfield == 'country') {
1514 $sortfield = 'country_code';
1515 }
1516 $sql .= $db->order($sortfield, $sortorder);
1517 $sql .= ", ";
1518 // Clear the required sort criteria for the tabsqlsort to be able to force it with selected value
1519 $tabsqlsort[$id] = preg_replace('/([a-z]+\.)?'.$sortfield.' '.$sortorder.',/i', '', $tabsqlsort[$id]);
1520 $tabsqlsort[$id] = preg_replace('/([a-z]+\.)?'.$sortfield.',/i', '', $tabsqlsort[$id]);
1521 } else {
1522 $sql .= " ORDER BY ";
1523 }
1524 $sql .= $tabsqlsort[$id];
1525
1526 $sql .= $db->plimit($listlimit + 1, $offset);
1527
1528 $resql = $db->query($sql);
1529 if (!$resql) {
1530 dol_print_error($db);
1531 exit;
1532 }
1533 $num = $db->num_rows($resql);
1534
1535 //print $sql;
1536
1537 if (empty($tabfield[$id])) {
1538 dol_print_error($db, 'The table with id '.$id.' has no array tabfield defined');
1539 exit;
1540 }
1541 $fieldlist = explode(',', $tabfield[$id]);
1542
1543 print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
1544 print '<input type="hidden" name="token" value="'.newToken().'">';
1545 print '<input type="hidden" name="from" value="'.dol_escape_htmltag($from).'">';
1546
1547 // Special warning for VAT dictionary
1548 if ($id == DICT_TVA && !getDolGlobalString('FACTURE_TVAOPTION')) {
1549 print info_admin($langs->trans("VATIsUsedIsOff", $langs->transnoentities("Setup"), $langs->transnoentities("CompanyFoundation")));
1550 print "<br>\n";
1551 }
1552
1553 // List of available record in database
1554 dol_syslog("htdocs/admin/dict", LOG_DEBUG);
1555
1556 $resql = $db->query($sql);
1557 if ($resql) {
1558 $num = $db->num_rows($resql);
1559 $i = 0;
1560
1561 $massactionbutton = $linkback;
1562
1563 $newcardbutton = '';
1564 /*$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'));
1565 $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'));
1566 $newcardbutton .= dolGetButtonTitleSeparator();
1567 */
1568 $newcardbutton .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/admin/dict.php?action=create'.$param.'&backtopage='.urlencode($_SERVER['PHP_SELF']), '', $permissiontoadd);
1569
1570 print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'tools', 0, $newcardbutton, '', $listlimit, 1, 0, 1);
1571
1572
1573 if ($action == 'create') {
1574 // Form to add a new line
1575 if ($tabname[$id]) {
1576 $withentity = null;
1577
1578 $fieldlist = explode(',', $tabfield[$id]);
1579
1580 print '<div class="div-table-responsive-no-min">';
1581 print '<table class="noborder centpercent">';
1582
1583 // Line for title
1584 print '<!-- line title to add new entry -->';
1585 $tdsoffields = '<tr class="liste_titre">';
1586 foreach ($fieldlist as $field => $value) {
1587 if ($value == 'entity') {
1588 $withentity = getEntity($tabname[$id]);
1589 continue;
1590 }
1591
1592 // Define field friendly name from its technical name
1593 $valuetoshow = ucfirst($value); // Par default
1594 $valuetoshow = $langs->trans($valuetoshow); // try to translate
1595 $class = '';
1596
1597 if ($value == 'pos') {
1598 $valuetoshow = $langs->trans("Position");
1599 $class = 'right';
1600 }
1601 if ($value == 'source') {
1602 $valuetoshow = $langs->trans("Contact");
1603 }
1604 if ($value == 'price') {
1605 $valuetoshow = $langs->trans("PriceUHT");
1606 }
1607 if ($value == 'taux') {
1608 if ($tabname[$id] != "c_revenuestamp") {
1609 $valuetoshow = $langs->trans("Rate");
1610 } else {
1611 $valuetoshow = $langs->trans("Amount");
1612 }
1613 $class = 'center';
1614 }
1615 if ($value == 'localtax1_type') {
1616 $valuetoshow = $langs->trans("UseLocalTax")." 2";
1617 $class = "center";
1618 $sortable = 0;
1619 }
1620 if ($value == 'localtax1') {
1621 $valuetoshow = $langs->trans("RateOfTaxN", '2');
1622 $class = "center minwidth75";
1623 }
1624 if ($value == 'localtax2_type') {
1625 $valuetoshow = $langs->trans("UseLocalTax")." 3";
1626 $class = "center";
1627 $sortable = 0;
1628 }
1629 if ($value == 'localtax2') {
1630 $valuetoshow = $langs->trans("RateOfTaxN", '3');
1631 $class = "center minwidth75";
1632 }
1633 if ($value == 'type_vat') {
1634 $valuetoshow = $langs->trans("VATType");
1635 }
1636 if ($value == 'organization') {
1637 $valuetoshow = $langs->trans("Organization");
1638 }
1639 if ($value == 'lang') {
1640 $valuetoshow = $langs->trans("Language");
1641 }
1642 if ($value == 'type') {
1643 if ($tabname[$id] == "c_paiement") {
1644 $valuetoshow = $form->textwithtooltip($langs->trans("Type"), $langs->trans("TypePaymentDesc"), 2, 1, img_help(1, ''));
1645 } else {
1646 $valuetoshow = $langs->trans("Type");
1647 }
1648 }
1649 if ($value == 'code') {
1650 $valuetoshow = $langs->trans("Code");
1651 $class = 'maxwidth100';
1652 }
1653 if ($value == 'libelle' || $value == 'label') {
1654 $valuetoshow = $form->textwithtooltip($langs->trans("Label"), $langs->trans("LabelUsedByDefault"), 2, 1, img_help(1, ''));
1655 }
1656 if ($value == 'libelle_facture') {
1657 $valuetoshow = $form->textwithtooltip($langs->trans("LabelOnDocuments"), $langs->trans("LabelUsedByDefault"), 2, 1, img_help(1, ''));
1658 }
1659 if ($value == 'deposit_percent') {
1660 $valuetoshow = $langs->trans('DepositPercent');
1661 $class = 'right';
1662 }
1663 if ($value == 'country') {
1664 if (in_array('region_id', $fieldlist)) {
1665 //print '<td>&nbsp;</td>';
1666 continue;
1667 } // For region page, we do not show the country input
1668 $valuetoshow = $langs->trans("Country");
1669 }
1670 if ($value == 'department_buyer') {
1671 $valuetoshow = '';
1672 }
1673 if ($value == 'recuperableonly') {
1674 $valuetoshow = $langs->trans("NPR");
1675 $class = "center";
1676 }
1677 if ($value == 'nbjour') {
1678 $valuetoshow = $langs->trans("NbOfDays");
1679 $class = 'right';
1680 }
1681 if ($value == 'type_cdr') {
1682 $valuetoshow = $langs->trans("AtEndOfMonth");
1683 $class = "center";
1684 }
1685 if ($value == 'decalage') {
1686 $valuetoshow = $langs->trans("Offset");
1687 $class = 'right';
1688 }
1689 if ($value == 'width' || $value == 'nx') {
1690 $valuetoshow = $langs->trans("Width");
1691 }
1692 if ($value == 'height' || $value == 'ny') {
1693 $valuetoshow = $langs->trans("Height");
1694 }
1695 if ($value == 'unit' || $value == 'metric') {
1696 $valuetoshow = $langs->trans("MeasuringUnit");
1697 }
1698 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
1699 $valuetoshow = '';
1700 }
1701 if ($value == 'accountancy_code') {
1702 $valuetoshow = $langs->trans("AccountancyCode");
1703 }
1704 if ($value == 'accountancy_code_sell') {
1705 $valuetoshow = $langs->trans("AccountancyCodeSell");
1706 }
1707 if ($value == 'accountancy_code_buy') {
1708 $valuetoshow = $langs->trans("AccountancyCodeBuy");
1709 }
1710 if ($value == 'pcg_version' || $value == 'fk_pcg_version') {
1711 $valuetoshow = $langs->trans("Pcg_version");
1712 }
1713 if ($value == 'account_parent') {
1714 $valuetoshow = $langs->trans("Accountparent");
1715 }
1716 if ($value == 'pcg_type') {
1717 $valuetoshow = $langs->trans("Pcg_type");
1718 }
1719 if ($value == 'pcg_subtype') {
1720 $valuetoshow = $langs->trans("Pcg_subtype");
1721 }
1722 if ($value == 'sortorder') {
1723 $valuetoshow = $langs->trans("SortOrder");
1724 $class = 'center';
1725 }
1726 if ($value == 'short_label') {
1727 $valuetoshow = $langs->trans("ShortLabel");
1728 }
1729 if ($value == 'fk_parent') {
1730 $valuetoshow = $langs->trans("ParentID");
1731 $class = 'center';
1732 }
1733 if ($value == 'range_account') {
1734 $valuetoshow = $langs->trans("Range");
1735 }
1736 if ($value == 'sens') {
1737 $valuetoshow = $langs->trans("Sens");
1738 }
1739 if ($value == 'category_type') {
1740 $valuetoshow = $langs->trans("Calculated");
1741 }
1742 if ($value == 'formula') {
1743 $valuetoshow = $langs->trans("Formula");
1744 }
1745 if ($value == 'paper_size') {
1746 $valuetoshow = $langs->trans("PaperSize");
1747 }
1748 if ($value == 'orientation') {
1749 $valuetoshow = $langs->trans("Orientation");
1750 }
1751 if ($value == 'leftmargin') {
1752 $valuetoshow = $langs->trans("LeftMargin");
1753 }
1754 if ($value == 'topmargin') {
1755 $valuetoshow = $langs->trans("TopMargin");
1756 }
1757 if ($value == 'spacex') {
1758 $valuetoshow = $langs->trans("SpaceX");
1759 }
1760 if ($value == 'spacey') {
1761 $valuetoshow = $langs->trans("SpaceY");
1762 }
1763 if ($value == 'font_size') {
1764 $valuetoshow = $langs->trans("FontSize");
1765 }
1766 if ($value == 'custom_x') {
1767 $valuetoshow = $langs->trans("CustomX");
1768 }
1769 if ($value == 'custom_y') {
1770 $valuetoshow = $langs->trans("CustomY");
1771 }
1772 if ($value == 'percent') {
1773 $valuetoshow = $langs->trans("Percentage");
1774 }
1775 if ($value == 'affect') {
1776 $valuetoshow = $langs->trans("WithCounter");
1777 }
1778 if ($value == 'delay') {
1779 $valuetoshow = $langs->trans("NoticePeriod");
1780 }
1781 if ($value == 'newbymonth') {
1782 $valuetoshow = $langs->trans("NewByMonth");
1783 }
1784 if ($value == 'fk_tva') {
1785 $valuetoshow = $langs->trans("VAT");
1786 }
1787 if ($value == 'range_ik') {
1788 $valuetoshow = $langs->trans("RangeIk");
1789 }
1790 if ($value == 'fk_c_exp_tax_cat') {
1791 $valuetoshow = $langs->trans("CarCategory");
1792 }
1793 if ($value == 'revenuestamp_type') {
1794 $valuetoshow = $langs->trans('TypeOfRevenueStamp');
1795 }
1796 if ($value == 'use_default') {
1797 $valuetoshow = $langs->trans('Default');
1798 $class = 'center';
1799 }
1800 if ($value == 'unit_type') {
1801 $valuetoshow = $langs->trans('TypeOfUnit');
1802 }
1803 if ($value == 'public' && $tablib[$id] == 'TicketDictCategory') {
1804 $valuetoshow = $langs->trans('TicketGroupIsPublic');
1805 $class = 'center';
1806 }
1807 if ($value == 'block_if_negative') {
1808 $valuetoshow = $langs->trans('BlockHolidayIfNegative');
1809 }
1810 if ($value == 'type_duration') {
1811 $valuetoshow = $langs->trans('Unit');
1812 }
1813
1814 if ($id == DICT_DEPARTEMENTS) { // Special case for state page
1815 if ($value == 'region_id') {
1816 $valuetoshow = '&nbsp;';
1817 $showfield = 1;
1818 }
1819 if ($value == 'region') {
1820 $valuetoshow = $langs->trans("Country").'/'.$langs->trans("Region");
1821 $showfield = 1;
1822 }
1823 }
1824
1825 if ($valuetoshow != '') {
1826 $tooltiphelp = (isset($tabcomplete[$tabname[$id]]['help'][$value]) ? $tabcomplete[$tabname[$id]]['help'][$value] : '');
1827
1828 $tdsoffields .= '<th'.($class ? ' class="'.$class.'"' : '').'>';
1829 if ($tooltiphelp && preg_match('/^http(s*):/i', $tooltiphelp)) {
1830 $tdsoffields .= '<a href="'.$tooltiphelp.'" target="_blank">'.$valuetoshow.' '.img_help(1, $valuetoshow).'</a>';
1831 } elseif ($tooltiphelp) {
1832 $tdsoffields .= $form->textwithpicto($valuetoshow, $tooltiphelp);
1833 } else {
1834 $tdsoffields .= $valuetoshow;
1835 }
1836 $tdsoffields .= '</th>';
1837 }
1838 }
1839
1840 if ($id == DICT_COUNTRY) {
1841 $tdsoffields .= '<th></th>';
1842 $tdsoffields .= '<th></th>';
1843 }
1844 $tdsoffields .= '<th>';
1845 $tdsoffields .= '<input type="hidden" name="id" value="'.$id.'">';
1846 if (!is_null($withentity)) {
1847 $tdsoffields .= '<input type="hidden" name="entity" value="'.$withentity.'">';
1848 }
1849 $tdsoffields .= '</th>';
1850 $tdsoffields .= '<th style="min-width: 26px;"></th>';
1851 $tdsoffields .= '<th style="min-width: 26px;"></th>';
1852 $tdsoffields .= '</tr>';
1853
1854 print $tdsoffields;
1855
1856
1857 // Line to enter new values
1858 print '<!-- line input to add new entry -->';
1859 print '<tr class="oddeven nodrag nodrop nohover">';
1860
1861 $obj = new stdClass();
1862 // If data was already input, we define them in obj to populate input fields.
1863 if (GETPOST('actionadd')) {
1864 foreach ($fieldlist as $key => $val) {
1865 if (GETPOST($val) != '') {
1866 $obj->$val = GETPOST($val);
1867 }
1868 }
1869 }
1870
1871 $tmpaction = 'create';
1872 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
1873 $reshook = $hookmanager->executeHooks('createDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
1874 $error = $hookmanager->error;
1875 $errors = $hookmanager->errors;
1876
1877 if ($id == DICT_REGIONS) {
1878 unset($fieldlist[2]); // Remove field ??? if dictionary Regions
1879 }
1880
1881 if (empty($reshook)) {
1882 dictFieldList($fieldlist, $obj, $tabname[$id], 'add');
1883 }
1884
1885 if ($id == DICT_COUNTRY) {
1886 print '<td></td>';
1887 print '<td></td>';
1888 print '<td></td>';
1889 }
1890 print '<td colspan="3" class="center">';
1891 if ($action != 'edit') {
1892 print '<input type="submit" class="button button-add small" name="actionadd" value="'.$langs->trans("Add").'">';
1893 } else {
1894 print '<input type="submit" class="button button-add small disabled" name="actionadd" value="'.$langs->trans("Add").'">';
1895 }
1896 print '</td>';
1897
1898 print "</tr>";
1899
1900 print '</table>';
1901 print '</div>';
1902 }
1903
1904 print '</form>';
1905
1906 print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
1907 print '<input type="hidden" name="token" value="'.newToken().'">';
1908 print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from', 'alpha')).'">';
1909 }
1910
1911
1912 $filterfound = 0;
1913 foreach ($fieldlist as $field => $value) {
1914 if ($value == 'entity') {
1915 continue;
1916 }
1917
1918 $showfield = 1; // By default
1919 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
1920 $showfield = 0;
1921 }
1922
1923 if ($showfield) {
1924 if ($value == 'country') {
1925 $filterfound++;
1926 } elseif ($value == 'code') {
1927 $filterfound++;
1928 }
1929 }
1930 }
1931
1932 print '<div class="div-table-responsive">';
1933 print '<table class="noborder centpercent noborder">';
1934
1935 $colspan = 0;
1936
1937 // Title line with search input fields
1938 print '<!-- line title to search record -->'."\n";
1939 print '<tr class="liste_titre_filter">';
1940
1941 // Action button
1942 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1943 print '<td class="liste_titre center">';
1944 if ($filterfound) {
1945 $searchpicto = $form->showFilterAndCheckAddButtons(0);
1946 print $searchpicto;
1947 }
1948 print '</td>';
1949 $colspan++;
1950 }
1951
1952 foreach ($fieldlist as $field => $value) {
1953 if ($value == 'entity') {
1954 continue;
1955 }
1956
1957 $showfield = 1; // By default
1958 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
1959 $showfield = 0;
1960 }
1961
1962 if ($showfield) {
1963 if ($value == 'country') {
1964 print '<td class="liste_titre">';
1965 print $form->select_country($search_country_id, 'search_country_id', '', 28, 'minwidth100 maxwidth150 maxwidthonsmartphone', '', '&nbsp;');
1966 print '</td>';
1967 $colspan++;
1968 } elseif ($value == 'code') {
1969 print '<td class="liste_titre">';
1970 print '<input type="text" class="maxwidth100" name="search_code" value="'.dol_escape_htmltag($search_code).'">';
1971 print '</td>';
1972 $colspan++;
1973 } elseif ($value == 'type_vat') {
1974 print '<td class="liste_titre">';
1975 print $form->selectarray('search_'.$value, $type_vatList, (empty($obj->{$value}) ? '' : $obj->{$value}), 1);
1976 print '</td>';
1977 $colspan++;
1978 } else {
1979 print '<td class="liste_titre">';
1980 print '</td>';
1981 $colspan++;
1982 }
1983 }
1984 }
1985 if ($id == DICT_COUNTRY) {
1986 print '<td></td>';
1987 $colspan++;
1988 print '<td></td>';
1989 $colspan++;
1990 print '<td></td>';
1991 $colspan++;
1992 }
1993
1994 // Active
1995 print '<td class="liste_titre center parentonrightofpage">';
1996 print $form->selectyesno('search_active', $search_active, 0, false, 1, 1, 'maxwidth100 onrightofpage', 'Activated', 'Disabled');
1997 print '</td>';
1998 $colspan++;
1999
2000 // Action button
2001 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2002 print '<td class="liste_titre center">';
2003 if ($filterfound) {
2004 $searchpicto = $form->showFilterAndCheckAddButtons(0);
2005 print $searchpicto;
2006 }
2007 print '</td>';
2008 $colspan++;
2009 }
2010
2011 print '</tr>';
2012
2013
2014 // Title of lines
2015 print '<!-- line title of record -->'."\n";
2016 print '<tr class="liste_titre">';
2017
2018 // Action button
2019 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2020 print getTitleFieldOfList('');
2021 }
2022
2023 foreach ($fieldlist as $field => $value) {
2024 if ($value == 'entity') {
2025 continue;
2026 }
2027
2028 if (in_array($value, array('label', 'libelle', 'libelle_facture')) && empty($tabcomplete[$tabname[$id]]['help'][$value])) {
2029 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
2030 $tabcomplete[$tabname[$id]]['help'] = array();
2031 }
2032 $tabcomplete[$tabname[$id]]['help'][$value] = $langs->trans('LabelUsedByDefault');
2033 }
2034
2035 // Determines the name of the field in relation to the possible names
2036 // in data dictionaries
2037 $showfield = 1; // By default
2038 $cssprefix = '';
2039 $sortable = 1;
2040 $valuetoshow = ucfirst($value); // By default
2041 $valuetoshow = $langs->trans($valuetoshow); // try to translate
2042
2043 // Special cases
2044 if ($value == 'source') {
2045 $valuetoshow = $langs->trans("Contact");
2046 }
2047 if ($value == 'price') {
2048 $valuetoshow = $langs->trans("PriceUHT");
2049 }
2050 if ($value == 'taux') {
2051 if ($tabname[$id] != "c_revenuestamp") {
2052 $valuetoshow = $langs->trans("Rate");
2053 } else {
2054 $valuetoshow = $langs->trans("Amount");
2055 }
2056 $cssprefix = 'center ';
2057 }
2058
2059 if ($value == 'type_vat') {
2060 $valuetoshow = $langs->trans("VATType");
2061 $cssprefix = "center minwidth75 ";
2062 $sortable = 0;
2063 }
2064 if ($value == 'localtax1_type') {
2065 $valuetoshow = $langs->trans("UseLocalTax")." 2";
2066 $cssprefix = "center minwidth75 ";
2067 $sortable = 0;
2068 }
2069 if ($value == 'localtax1') {
2070 $valuetoshow = $langs->trans("RateOfTaxN", '2');
2071 $cssprefix = "center minwidth75 ";
2072 $sortable = 0;
2073 }
2074 if ($value == 'localtax2_type') {
2075 $valuetoshow = $langs->trans("UseLocalTax")." 3";
2076 $cssprefix = "center minwidth75 ";
2077 $sortable = 0;
2078 }
2079 if ($value == 'localtax2') {
2080 $valuetoshow = $langs->trans("RateOfTaxN", '3');
2081 $cssprefix = "center minwidth75 ";
2082 $sortable = 0;
2083 }
2084 if ($value == 'organization') {
2085 $valuetoshow = $langs->trans("Organization");
2086 }
2087 if ($value == 'lang') {
2088 $valuetoshow = $langs->trans("Language");
2089 }
2090 if ($value == 'type') {
2091 $valuetoshow = $langs->trans("Type");
2092 }
2093 if ($value == 'code') {
2094 $valuetoshow = $langs->trans("Code");
2095 }
2096 if (in_array($value, array('pos', 'position'))) {
2097 $valuetoshow = $langs->trans("Position");
2098 $cssprefix = 'right ';
2099 }
2100 if ($value == 'libelle' || $value == 'label') {
2101 $valuetoshow = $langs->trans("Label");
2102 }
2103 if ($value == 'libelle_facture') {
2104 $valuetoshow = $langs->trans("LabelOnDocuments");
2105 }
2106 if ($value == 'deposit_percent') {
2107 $valuetoshow = $langs->trans('DepositPercent');
2108 $cssprefix = 'right ';
2109 }
2110 if ($value == 'country') {
2111 $valuetoshow = $langs->trans("Country");
2112 }
2113 if ($value == 'department_buyer') {
2114 $valuetoshow = $langs->trans('DepartmentBuyer');
2115 }
2116 if ($value == 'recuperableonly') {
2117 $valuetoshow = $langs->trans("NPR");
2118 $cssprefix = "center ";
2119 }
2120 if ($value == 'nbjour') {
2121 $valuetoshow = $langs->trans("NbOfDays");
2122 $cssprefix = 'right ';
2123 }
2124 if ($value == 'type_cdr') {
2125 $valuetoshow = $langs->trans("AtEndOfMonth");
2126 $cssprefix = "center ";
2127 }
2128 if ($value == 'decalage') {
2129 $valuetoshow = $langs->trans("Offset");
2130 $cssprefix = 'right ';
2131 }
2132 if ($value == 'width' || $value == 'nx') {
2133 $valuetoshow = $langs->trans("Width");
2134 }
2135 if ($value == 'height' || $value == 'ny') {
2136 $valuetoshow = $langs->trans("Height");
2137 }
2138 if ($value == 'unit' || $value == 'metric') {
2139 $valuetoshow = $langs->trans("MeasuringUnit");
2140 }
2141 if ($value == 'accountancy_code') {
2142 $valuetoshow = $langs->trans("AccountancyCode");
2143 }
2144 if ($value == 'accountancy_code_sell') {
2145 $valuetoshow = $langs->trans("AccountancyCodeSell");
2146 $sortable = 0;
2147 }
2148 if ($value == 'accountancy_code_buy') {
2149 $valuetoshow = $langs->trans("AccountancyCodeBuy");
2150 $sortable = 0;
2151 }
2152 if ($value == 'fk_pcg_version') {
2153 $valuetoshow = $langs->trans("Pcg_version");
2154 }
2155 if ($value == 'account_parent') {
2156 $valuetoshow = $langs->trans("Accountsparent");
2157 }
2158 if ($value == 'pcg_type') {
2159 $valuetoshow = $langs->trans("Pcg_type");
2160 }
2161 if ($value == 'pcg_subtype') {
2162 $valuetoshow = $langs->trans("Pcg_subtype");
2163 }
2164 if ($value == 'sortorder') {
2165 $valuetoshow = $langs->trans("SortOrder");
2166 $cssprefix = 'center ';
2167 }
2168 if ($value == 'short_label') {
2169 $valuetoshow = $langs->trans("ShortLabel");
2170 }
2171 if ($value == 'fk_parent') {
2172 $valuetoshow = $langs->trans("ParentID");
2173 $cssprefix = 'center ';
2174 }
2175 if ($value == 'range_account') {
2176 $valuetoshow = $langs->trans("Range");
2177 }
2178 if ($value == 'sens') {
2179 $valuetoshow = $langs->trans("Sens");
2180 }
2181 if ($value == 'category_type') {
2182 $valuetoshow = $langs->trans("Calculated");
2183 }
2184 if ($value == 'formula') {
2185 $valuetoshow = $langs->trans("Formula");
2186 }
2187 if ($value == 'paper_size') {
2188 $valuetoshow = $langs->trans("PaperSize");
2189 }
2190 if ($value == 'orientation') {
2191 $valuetoshow = $langs->trans("Orientation");
2192 }
2193 if ($value == 'leftmargin') {
2194 $valuetoshow = $langs->trans("LeftMargin");
2195 }
2196 if ($value == 'topmargin') {
2197 $valuetoshow = $langs->trans("TopMargin");
2198 }
2199 if ($value == 'spacex') {
2200 $valuetoshow = $langs->trans("SpaceX");
2201 }
2202 if ($value == 'spacey') {
2203 $valuetoshow = $langs->trans("SpaceY");
2204 }
2205 if ($value == 'font_size') {
2206 $valuetoshow = $langs->trans("FontSize");
2207 }
2208 if ($value == 'custom_x') {
2209 $valuetoshow = $langs->trans("CustomX");
2210 }
2211 if ($value == 'custom_y') {
2212 $valuetoshow = $langs->trans("CustomY");
2213 }
2214 if ($value == 'percent') {
2215 $valuetoshow = $langs->trans("Percentage");
2216 }
2217 if ($value == 'affect') {
2218 $valuetoshow = $langs->trans("WithCounter");
2219 }
2220 if ($value == 'delay') {
2221 $valuetoshow = $langs->trans("NoticePeriod");
2222 }
2223 if ($value == 'newbymonth') {
2224 $valuetoshow = $langs->trans("NewByMonth");
2225 }
2226 if ($value == 'fk_tva') {
2227 $valuetoshow = $langs->trans("VAT");
2228 }
2229 if ($value == 'range_ik') {
2230 $valuetoshow = $langs->trans("RangeIk");
2231 }
2232 if ($value == 'fk_c_exp_tax_cat') {
2233 $valuetoshow = $langs->trans("CarCategory");
2234 }
2235 if ($value == 'revenuestamp_type') {
2236 $valuetoshow = $langs->trans('TypeOfRevenueStamp');
2237 }
2238 if ($value == 'use_default') {
2239 $valuetoshow = $langs->trans('Default');
2240 $cssprefix = 'center ';
2241 }
2242 if ($value == 'unit_type') {
2243 $valuetoshow = $langs->trans('TypeOfUnit');
2244 }
2245 if ($value == 'public' && $tablib[$id] == 'TicketDictCategory') {
2246 $valuetoshow = $langs->trans('TicketGroupIsPublic');
2247 $cssprefix = 'center ';
2248 }
2249 if ($value == 'block_if_negative') {
2250 $valuetoshow = $langs->trans('BlockHolidayIfNegative');
2251 }
2252 if ($value == 'type_duration') {
2253 $valuetoshow = $langs->trans('Unit');
2254 }
2255
2256 if ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
2257 $showfield = 0;
2258 }
2259
2260 // Show field title
2261 if ($showfield) {
2262 $tooltiphelp = (isset($tabcomplete[$tabname[$id]]['help'][$value]) ? $tabcomplete[$tabname[$id]]['help'][$value] : '');
2263
2264 if ($tooltiphelp && preg_match('/^http(s*):/i', $tooltiphelp)) {
2265 $newvaluetoshow = '<a href="'.$tooltiphelp.'" target="_blank">'.$valuetoshow.' '.img_help(1, $valuetoshow).'</a>';
2266 } elseif ($tooltiphelp) {
2267 $newvaluetoshow = $form->textwithpicto($valuetoshow, $tooltiphelp);
2268 } else {
2269 $newvaluetoshow = $valuetoshow;
2270 }
2271
2272 print getTitleFieldOfList($newvaluetoshow, 0, $_SERVER["PHP_SELF"], ($sortable ? $value : ''), ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, $cssprefix);
2273 }
2274 }
2275 // Favorite, EEC & Sepa - Only activated on country dictionary
2276 if ($id == DICT_COUNTRY) {
2277 print getTitleFieldOfList($langs->trans("InEEC"), 0, $_SERVER["PHP_SELF"], "eec", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ', 0, $langs->trans("CountryIsInEEC"));
2278 print getTitleFieldOfList($langs->trans("InSepa"), 0, $_SERVER["PHP_SELF"], "sepa", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ', 0, $langs->trans("CountryIsInSepa"));
2279 print getTitleFieldOfList($langs->trans("Favorite"), 0, $_SERVER["PHP_SELF"], "favorite", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ');
2280 }
2281
2282 // Status
2283 print getTitleFieldOfList($langs->trans("Status"), 0, $_SERVER["PHP_SELF"], "active", ($page ? 'page='.$page.'&' : ''), $param, '', $sortfield, $sortorder, 'center ');
2284
2285 // Action button
2286 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2287 print getTitleFieldOfList('');
2288 }
2289 print '</tr>';
2290
2291
2292 // Lines with values
2293 if ($num) {
2294 print '<!-- lines of dict -->'."\n";
2295 while ($i < $num) {
2296 $obj = $db->fetch_object($resql);
2297
2298 $withentity = null;
2299
2300 // We discard empty lines
2301 if ($id == DICT_COUNTRY) {
2302 if ($obj->code == '') {
2303 $i++;
2304 continue;
2305 }
2306 }
2307
2308 // Can an entry be erased, disabled or modified ? (true by default)
2309 $iserasable = 1;
2310 $canbedisabled = 1;
2311 $canbemodified = 1;
2312 if (isset($obj->code) && $id != DICT_TVA && $id != DICT_PRODUCT_NATURE) {
2313 if (($obj->code == '0' || $obj->code == '' || preg_match('/unknown/i', $obj->code))) {
2314 $iserasable = 0;
2315 $canbedisabled = 0;
2316 } elseif ($obj->code == 'RECEP') {
2317 $iserasable = 0;
2318 $canbedisabled = 0;
2319 } elseif ($obj->code == 'EF0') {
2320 $iserasable = 0;
2321 $canbedisabled = 0;
2322 }
2323 }
2324 if ($id == DICT_TYPE_CONTAINER && $obj->module == 'system') {
2325 $iserasable = 0;
2326 $canbedisabled = 0;
2327 if (in_array($obj->code, array('banner'))) {
2328 $canbedisabled = 1;
2329 }
2330 }
2331 if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) {
2332 $iserasable = 0;
2333 }
2334 if (in_array(empty($obj->code) ? '' : $obj->code, array('AC_OTH', 'AC_OTH_AUTO')) || in_array(empty($obj->type) ? '' : $obj->type, array('systemauto'))) {
2335 $canbedisabled = 0;
2336 $canbedisabled = 0;
2337 }
2338 $canbemodified = $iserasable;
2339
2340 if (!empty($obj->code) && $obj->code == 'RECEP') {
2341 $canbemodified = 1;
2342 }
2343 if ($tabname[$id] == "c_actioncomm") {
2344 $canbemodified = 1;
2345 }
2346
2347 if ($tabname[$id] == "c_product_nature" && in_array($obj->code, array(0, 1))) {
2348 $canbedisabled = 0;
2349 $canbemodified = 0;
2350 $iserasable = 0;
2351 }
2352 // Build Url. The table is id=, the id of line is rowid=
2353 $rowidcol = empty($tabrowid[$id]) ? 'rowid' : $tabrowid[$id];
2354 // If rowidcol not defined
2355 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))) {
2356 $rowidcol = 'rowid';
2357 }
2358 $url = $_SERVER["PHP_SELF"].'?'.($page ? 'page='.$page.'&' : '').'sortfield='.urlencode($sortfield).'&sortorder='.urlencode($sortorder);
2359 $url .= '&rowid='.(isset($obj->$rowidcol) ? ((int) $obj->$rowidcol) : (!empty($obj->code) ? urlencode($obj->code) : ''));
2360 $url .= '&code='.(!empty($obj->code) ? urlencode($obj->code) : '');
2361 if (!empty($param)) {
2362 $url .= '&'.$param;
2363 }
2364 // If dictionary is different for each entity
2365 if (!is_null($withentity)) {
2366 $url .= '&entity='.((int) $withentity);
2367 }
2368 $url .= '&';
2369
2370
2371 //print_r($obj);
2372 print '<tr class="oddeven" id="rowid-'.(empty($obj->rowid) ? '' : $obj->rowid).'">';
2373
2374 // Action button
2375 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2376 print '<td class="center maxwidthsearch nowraponall">';
2377 // Modify link
2378 if ($canbemodified) {
2379 print '<a class="reposition editfielda marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=edit&token='.newToken().'">'.img_edit().'</a>';
2380 }
2381 // Delete link
2382 if ($iserasable) {
2383 if ($user->admin) {
2384 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=delete&token='.newToken().'">'.img_delete().'</a>';
2385 }
2386 }
2387 print '</td>';
2388 }
2389
2390 if ($action == 'edit' && ($rowid == (!empty($obj->rowid) ? $obj->rowid : $obj->code))) {
2391 $tmpaction = 'edit';
2392 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
2393 $reshook = $hookmanager->executeHooks('editDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
2394 $error = $hookmanager->error;
2395 $errors = $hookmanager->errors;
2396
2397 // Show fields
2398 if (empty($reshook)) {
2399 $withentity = dictFieldList($fieldlist, $obj, $tabname[$id], 'edit');
2400 }
2401
2402 print '<td colspan="3" class="center">';
2403 print '<div name="'.(!empty($obj->rowid) ? $obj->rowid : $obj->code).'"></div>';
2404 print '<input type="hidden" name="page" value="'.dol_escape_htmltag((string) $page).'">';
2405 print '<input type="hidden" name="rowid" value="'.dol_escape_htmltag($rowid).'">';
2406 if (!is_null($withentity)) {
2407 print '<input type="hidden" name="entity" value="'.$withentity.'">';
2408 }
2409 print '<input type="submit" class="button button-edit smallpaddingimp" name="actionmodify" value="'.$langs->trans("Modify").'">';
2410 print '<input type="submit" class="button button-cancel smallpaddingimp" name="actioncancel" value="'.$langs->trans("Cancel").'">';
2411 print '</td>';
2412 } else {
2413 $tmpaction = 'view';
2414 $parameters = array('fieldlist' => $fieldlist, 'tabname' => $tabname[$id]);
2415 $reshook = $hookmanager->executeHooks('viewDictionaryFieldlist', $parameters, $obj, $tmpaction); // Note that $action and $object may have been modified by some hooks
2416
2417 $error = $hookmanager->error;
2418 $errors = $hookmanager->errors;
2419
2420 $langs->loadLangs(array("bills", "agenda", "propal"));
2421
2422 if (empty($reshook)) {
2423 $withentity = null;
2424
2425 foreach ($fieldlist as $field => $value) {
2426 //var_dump($fieldlist);
2427 $class = '';
2428 $showfield = 1;
2429 $valuetoshow = empty($obj->$value) ? '' : $obj->$value;
2430 $titletoshow = '';
2431
2432 if ($value == 'entity') {
2433 $withentity = $valuetoshow;
2434 continue;
2435 }
2436
2437 // Management of several special cases and exceptions
2438 if ($value == 'code' && $id == DICT_PRODUCT_NATURE) {
2439 $valuetoshow = (int) $valuetoshow;
2440 } elseif ($value == 'element') {
2441 $valuetoshow = isset($elementList[$valuetoshow]) ? $elementList[$valuetoshow] : $valuetoshow;
2442 } elseif ($value == 'source') {
2443 $valuetoshow = isset($sourceList[$valuetoshow]) ? $sourceList[$valuetoshow] : $valuetoshow;
2444 } elseif ($valuetoshow == 'all') {
2445 $valuetoshow = $langs->trans('All');
2446 } elseif ($value == 'country') {
2447 if (empty($obj->country_code)) {
2448 $valuetoshow = '-';
2449 } else {
2450 $key = $langs->trans("Country".strtoupper($obj->country_code));
2451 $valuetoshow = ($key != "Country".strtoupper($obj->country_code) ? $obj->country_code." - ".$key : $obj->country);
2452 }
2453 } elseif ($value == 'recuperableonly' || $value == 'deductible' || $value == 'category_type') {
2454 $valuetoshow = yn($valuetoshow ? 1 : 0);
2455 $class = "center";
2456 } elseif ($value == 'type_cdr') {
2457 if (empty($valuetoshow)) {
2458 $valuetoshow = $langs->trans('None');
2459 } elseif ($valuetoshow == 1) {
2460 $valuetoshow = $langs->trans('AtEndOfMonth');
2461 } elseif ($valuetoshow == 2) {
2462 $valuetoshow = $langs->trans('CurrentNext');
2463 }
2464 $class = "center tdoverflowmax125";
2465 } elseif ($value == 'price' || preg_match('/^amount/i', $value)) {
2466 $valuetoshow = price($valuetoshow);
2467 }
2468 if (in_array($value, array('private', 'joinfile', 'use_default'))) {
2469 if ($valuetoshow) {
2470 $valuetoshow = yn($valuetoshow);
2471 }
2472 } elseif ($value == 'libelle_facture') {
2473 $key = $langs->trans("PaymentCondition".strtoupper($obj->code));
2474 $valuetoshow = ($obj->code && $key != "PaymentCondition".strtoupper($obj->code) ? $key : $obj->$value);
2475 $valuetoshow = nl2br($valuetoshow);
2476 $titletoshow = $valuetoshow;
2477 $class = 'small tdoverflowmax200';
2478 } elseif ($value == 'label' && $tabname[$id] == 'c_country') {
2479 $key = $langs->trans("Country".strtoupper($obj->code));
2480 $valuetoshow = ($obj->code && $key != "Country".strtoupper($obj->code) ? $key : $obj->$value);
2481 } elseif ($value == 'label' && $tabname[$id] == 'c_availability') {
2482 $key = $langs->trans("AvailabilityType".strtoupper($obj->code));
2483 $valuetoshow = ($obj->code && $key != "AvailabilityType".strtoupper($obj->code) ? $key : $obj->$value);
2484 } elseif ($value == 'libelle' && $tabname[$id] == 'c_actioncomm') {
2485 $key = $langs->trans("Action".strtoupper($obj->code));
2486 $valuetoshow = ($obj->code && $key != "Action".strtoupper($obj->code) ? $key : $obj->$value);
2487 } elseif (!empty($obj->code_iso) && $value == 'label' && $tabname[$id] == 'c_currencies') {
2488 $key = $langs->trans("Currency".strtoupper($obj->code_iso));
2489 $valuetoshow = (/* $obj->code_iso && */ $key != "Currency".strtoupper($obj->code_iso) ? $key : $obj->$value);
2490 } elseif ($value == 'libelle' && $tabname[$id] == 'c_typent') {
2491 $key = $langs->trans(strtoupper($obj->code));
2492 $valuetoshow = ($key != strtoupper($obj->code) ? $key : $obj->$value);
2493 } elseif ($value == 'libelle' && $tabname[$id] == 'c_prospectlevel') {
2494 $key = $langs->trans(strtoupper($obj->code));
2495 $valuetoshow = ($key != strtoupper($obj->code) ? $key : $obj->$value);
2496 } elseif ($value == 'label' && $tabname[$id] == 'c_civility') {
2497 $key = $langs->trans("Civility".strtoupper($obj->code));
2498 $valuetoshow = ($obj->code && $key != "Civility".strtoupper($obj->code) ? $key : $obj->$value);
2499 } elseif ($value == 'libelle' && $tabname[$id] == 'c_type_contact') {
2500 $key = $langs->trans("TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code));
2501 $valuetoshow = ($obj->code && $key != "TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code) ? $key : $obj->$value);
2502 } elseif ($value == 'libelle' && $tabname[$id] == 'c_payment_term') {
2503 $key = $langs->trans("PaymentConditionShort".strtoupper($obj->code));
2504 $valuetoshow = ($obj->code && $key != "PaymentConditionShort".strtoupper($obj->code) ? $key : $obj->$value);
2505 $titletoshow = $key;
2506 $class = "tdoverflowmax150";
2507 } elseif ($value == 'libelle' && $tabname[$id] == 'c_paiement') {
2508 $key = $langs->trans("PaymentType".strtoupper($obj->code));
2509 $valuetoshow = $obj->$value;
2510 if ($obj->code && array_key_exists("PaymentType".strtoupper($obj->code), $langs->tab_translate)) {
2511 $htmltext = $form->textwithpicto($langs->trans("TranslationFound").': '.$key, $langs->trans("TheTranslationIsSearchedFromKey", "PaymentType".strtoupper($obj->code)));
2512 } else {
2513 $htmltext = $form->textwithpicto($langs->trans("TranslationFound").': '.$langs->trans("No"), $langs->trans("TheTranslationIsSearchedFromKey", "PaymentType".strtoupper($obj->code)));
2514 }
2515 //$valuetoshow = $form->textwithpicto($valuetoshow, $htmltext);
2516 $valuetoshow .= '<br><span class="opacitymedium small">'.$htmltext.'</span>';
2517 } elseif ($value == 'type' && $tabname[$id] == 'c_paiement') {
2518 $payment_type_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth'));
2519 $valuetoshow = $payment_type_list[$valuetoshow];
2520 } elseif ($value == 'label' && $tabname[$id] == 'c_input_reason') {
2521 $key = $langs->trans("DemandReasonType".strtoupper($obj->code));
2522 $valuetoshow = ($obj->code && $key != "DemandReasonType".strtoupper($obj->code) ? $key : $obj->$value);
2523 } elseif ($value == 'libelle' && $tabname[$id] == 'c_input_method') {
2524 $langs->load("orders");
2525 $key = $langs->trans($obj->code);
2526 $valuetoshow = ($obj->code && $key != $obj->code) ? $key : $obj->$value;
2527 } elseif ($value == 'libelle' && $tabname[$id] == 'c_shipment_mode') {
2528 $langs->load("sendings");
2529 $key = $langs->trans("SendingMethod".strtoupper($obj->code));
2530 $valuetoshow = ($obj->code && $key != "SendingMethod".strtoupper($obj->code) ? $key : $obj->$value);
2531 } elseif ($value == 'libelle' && $tabname[$id] == 'c_paper_format') {
2532 $key = $langs->trans('PaperFormat'.strtoupper($obj->code));
2533 $valuetoshow = ($obj->code && $key != 'PaperFormat'.strtoupper($obj->code) ? $key : $obj->$value);
2534 } elseif ($value == 'label' && $tabname[$id] == 'c_type_fees') {
2535 $langs->load('trips');
2536 $key = $langs->trans(strtoupper($obj->code));
2537 $valuetoshow = ($obj->code && $key != strtoupper($obj->code) ? $key : $obj->$value);
2538 } elseif ($value == 'region_id' || $value == 'country_id' || $value == 'department_buyer_id') {
2539 $showfield = 0;
2540 } elseif ($value == 'unicode') {
2541 $valuetoshow = $langs->getCurrencySymbol($obj->code, 1);
2542 } elseif ($value == 'label' && $tabname[GETPOSTINT("id")] == 'c_units') {
2543 $langs->load("products");
2544 $valuetoshow = $langs->trans($obj->$value);
2545 } elseif ($value == 'short_label' && $tabname[GETPOSTINT("id")] == 'c_units') {
2546 $langs->load("products");
2547 $valuetoshow = $langs->trans($obj->$value);
2548 } elseif (($value == 'unit') && ($tabname[$id] == 'c_paper_format')) {
2549 $key = $langs->trans('SizeUnit'.strtolower($obj->unit));
2550 $valuetoshow = ($obj->code && $key != 'SizeUnit'.strtolower($obj->unit) ? $key : $obj->$value);
2551 } elseif ($value == 'localtax1' || $value == 'localtax2') {
2552 $class = "center";
2553 } elseif ($value == 'type_vat') {
2554 $valuetoshow = $type_vatList[(int) $valuetoshow];
2555 $class = "center";
2556 } elseif ($value == 'localtax1_type') {
2557 if ($obj->localtax1 != 0) {
2558 $valuetoshow = $localtax_typeList[$valuetoshow];
2559 } else {
2560 $valuetoshow = '';
2561 }
2562 $class = "center";
2563 } elseif ($value == 'localtax2_type') {
2564 if ($obj->localtax2 != 0) {
2565 $valuetoshow = $localtax_typeList[$valuetoshow];
2566 } else {
2567 $valuetoshow = '';
2568 }
2569 $class = "center";
2570 } elseif ($value == 'taux') {
2571 $valuetoshow = price($valuetoshow, 0, $langs, 0, 0);
2572 $class = "center";
2573 } elseif (in_array($value, array('recuperableonly'))) {
2574 $class = "center";
2575 } elseif ($value == 'accountancy_code' || $value == 'accountancy_code_sell' || $value == 'accountancy_code_buy') {
2576 if (isModEnabled('accounting')) {
2577 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
2578 $tmpaccountingaccount = new AccountingAccount($db);
2579 $tmpaccountingaccount->fetch(0, $valuetoshow, 1);
2580 $titletoshow = $langs->transnoentitiesnoconv("Pcgtype").': '.$tmpaccountingaccount->pcg_type;
2581 }
2582 $valuetoshow = length_accountg($valuetoshow);
2583 } elseif ($value == 'fk_tva') {
2584 if (empty($form->cache_vatrates)) {
2585 $form->load_tva('cache_fk_tva', '', $mysoc, new Societe($db), 0, 0, '', false, -1);
2586 }
2587 foreach ($form->cache_vatrates as $key => $Tab) {
2588 if ($form->cache_vatrates[$key]['rowid'] == $valuetoshow) {
2589 $valuetoshow = $form->cache_vatrates[$key]['label'];
2590 break;
2591 }
2592 }
2593 } elseif ($value == 'fk_c_exp_tax_cat') {
2594 $tmpid = $valuetoshow;
2595 $valuetoshow = getDictionaryValue('c_exp_tax_cat', 'label', $tmpid);
2596 $valuetoshow = $langs->trans($valuetoshow ? $valuetoshow : $tmpid);
2597 } elseif ($tabname[$id] == 'c_exp_tax_cat') {
2598 $valuetoshow = $langs->trans($valuetoshow);
2599 } elseif ($value == 'label' && $tabname[$id] == 'c_units') {
2600 $langs->load('other');
2601 $key = $langs->trans($obj->label);
2602 $valuetoshow = ($obj->label && $key != strtoupper($obj->label) ? $key : $obj->{$value});
2603 } elseif ($value == 'label' && $tabname[$id] == 'c_product_nature') {
2604 $langs->load("products");
2605 $valuetoshow = $langs->trans($obj->{$value});
2606 } elseif ($fieldlist[$field] == 'label' && $tabname[$id] == 'c_productbatch_qcstatus') {
2607 $langs->load("productbatch");
2608 $valuetoshow = $langs->trans($obj->{$value});
2609 } elseif ($value == 'block_if_negative') {
2610 $valuetoshow = yn($obj->{$value});
2611 } elseif ($value == 'icon') {
2612 $valuetoshow = $obj->{$value}." ".img_picto("", preg_replace('/^fa-/', '', $obj->{$value}));
2613 } elseif ($value == 'type_duration') {
2614 $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'));
2615 if (!empty($obj->{$value}) && array_key_exists($obj->{$value}, $TDurationTypes)) {
2616 $valuetoshow = $TDurationTypes[$obj->{$value}];
2617 }
2618 }
2619
2620 $class .= ($class ? ' ' : '').'tddict';
2621 if ($value == 'name') {
2622 $class .= ' tdoverflowmax200';
2623 }
2624 if ($value == 'note' && $id == DICT_TVA) {
2625 $class .= ' tdoverflowmax200';
2626 }
2627 if ($value == 'tracking') {
2628 $class .= ' tdoverflowauto';
2629 }
2630 if (in_array($value, array('nbjour', 'decalage', 'pos', 'position', 'deposit_percent'))) {
2631 $class .= ' right';
2632 }
2633 if (in_array($value, array('icon', 'type_vat', 'localtax1_type', 'localtax2_type'))) {
2634 $class .= ' nowraponall';
2635 }
2636 if (in_array($value, array('use_default', 'fk_parent', 'sortorder'))) {
2637 $class .= ' center';
2638 }
2639 if ($value == 'public') {
2640 $class .= ' center';
2641 }
2642 if (in_array($value, array('localtax1_type', 'localtax2_type', 'note', 'note_public', 'note_private'))) {
2643 $class .= ' small';
2644 }
2645 // Show value for field
2646 if ($showfield) {
2647 print '<!-- field value '. $value .' --><td class="'.$class.'"'.($titletoshow ? ' title="'.dolPrintHTMLForAttribute($titletoshow).'"' : '').'>'.$valuetoshow.'</td>';
2648 }
2649 }
2650
2651 // Favorite, EEC & Sepa
2652 // Only for country dictionary
2653 if ($id == DICT_COUNTRY) {
2654 print '<td class="nowraponall center">';
2655 // Is in EEC
2656 if ($iserasable) {
2657 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->eec].'_eec&token='.newToken().'">'.$actl[$obj->eec].'</a>';
2658 } else {
2659 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2660 }
2661 print '</td>';
2662 print '<td class="nowraponall center">';
2663 // Is in Sepa
2664 if ($iserasable) {
2665 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->sepa].'_sepa&token='.newToken().'">'.$actl[$obj->sepa].'</a>';
2666 } else {
2667 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2668 }
2669 print '</td>';
2670 print '<td class="nowraponall center">';
2671 // Favorite
2672 if ($iserasable) {
2673 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->favorite].'_favorite&token='.newToken().'">'.$actl[$obj->favorite].'</a>';
2674 } else {
2675 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2676 }
2677 print '</td>';
2678 }
2679 }
2680
2681 // Active
2682 print '<td class="nowraponall center">';
2683 if ($canbedisabled) {
2684 print '<a class="reposition" href="'.$url.'action='.$acts[$obj->active].'&token='.newToken().'">'.$actl[$obj->active].'</a>';
2685 } else {
2686 if (in_array($obj->code, array('AC_OTH', 'AC_OTH_AUTO'))) {
2687 print $langs->trans("AlwaysActive");
2688 } elseif (isset($obj->type) && in_array($obj->type, array('systemauto')) && empty($obj->active)) {
2689 print $langs->trans("Deprecated");
2690 } elseif (isset($obj->type) && in_array($obj->type, array('system')) && !empty($obj->active) && $obj->code != 'AC_OTH') {
2691 print $langs->trans("UsedOnlyWithTypeOption");
2692 } else {
2693 print '<span class="opacitymedium">'.$langs->trans("AlwaysActive").'</span>';
2694 }
2695 }
2696 print "</td>";
2697
2698 // Action button
2699 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
2700 print '<td class="center maxwidthsearch nowraponall">';
2701 // Modify link
2702 if ($canbemodified) {
2703 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright editfielda" href="'.$url.'action=edit&token='.newToken().'">'.img_edit().'</a>';
2704 }
2705 // Delete link
2706 if ($iserasable) {
2707 if ($user->admin) {
2708 print '<a class="reposition marginleftonly paddingleft marginrightonly paddingright" href="'.$url.'action=delete&token='.newToken().'">'.img_delete().'</a>';
2709 }
2710 }
2711 print '</td>';
2712 }
2713
2714 print "</tr>\n";
2715 }
2716 $i++;
2717 }
2718 } else {
2719 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
2720 }
2721
2722 print '</table>';
2723 print '</div>';
2724 } else {
2725 dol_print_error($db);
2726 }
2727
2728 print '</form>';
2729} else {
2730 /*
2731 * Show list of dictionary to show
2732 */
2733 print load_fiche_titre($title, $linkback, $titlepicto);
2734
2735 print '<span class="opacitymedium">'.$langs->trans("DictionaryDesc");
2736 print " ".$langs->trans("OnlyActiveElementsAreShown")."<br>\n";
2737 print '</span><br>';
2738 print "<br>\n";
2739
2740 $lastlineisempty = false;
2741
2742 print '<div class="div-table-responsive-no-min">';
2743 print '<table class="noborder centpercent">';
2744 print '<tr class="liste_titre">';
2745 print '<td>'.$langs->trans("Dictionary").'</td>';
2746 print '<td></td>';
2747 print '<td class="hideonsmartphone"></td>';
2748 print '</tr>';
2749
2750 $showemptyline = '';
2751 foreach ($taborder as $i) {
2752 if (isset($tabname[$i]) && empty($tabcond[$i])) {
2753 continue;
2754 }
2755
2756 if ($i) {
2757 if ($showemptyline) {
2758 print '<tr class="oddeven"><td></td><td></td><td class="hideonsmartphone"></td></tr>';
2759 $showemptyline = 0;
2760 }
2761
2762
2763 $value = $tabname[$i];
2764 print '<tr class="oddeven"><td class="minwidth200">';
2765 if (!empty($tabcond[$i])) {
2766 $tabnamenoprefix = preg_replace('/'.MAIN_DB_PREFIX.'/', '', $tabname[$i]);
2767 print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$i;
2768 if ($i == DICT_CHARGESOCIALES) {
2769 print '&search_country_id='.$mysoc->country_id;
2770 }
2771 print '">';
2772 if (!empty($tabcomplete[$tabnamenoprefix]['picto'])) {
2773 print img_picto('', $tabcomplete[$tabnamenoprefix]['picto'], 'class="pictofixedwidth paddingrightonly"');
2774 }
2775 print $langs->trans($tablib[$i]);
2776 print '</a>';
2777 } else {
2778 print $langs->trans($tablib[$i]);
2779 }
2780 print '</td>';
2781 print '<td>';
2782 print '<a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?id='.$i.'">';
2783 print img_picto('Edit', 'edit', '');
2784 print '</a>';
2785 print '</td>';
2786 print '<td class="right hideonsmartphone">';
2787 print $form->textwithpicto('', $langs->trans("Table").': '.MAIN_DB_PREFIX.$tabname[$i]);
2788 print '</td>';
2789 print '</tr>';
2790 $lastlineisempty = false;
2791 } else {
2792 if (!$lastlineisempty) {
2793 $showemptyline = 1;
2794 $lastlineisempty = true;
2795 }
2796 }
2797 }
2798 print '</table>';
2799 print '</div>';
2800}
2801
2802print '<br>';
2803if (GETPOST('id') && GETPOST('id') == DICT_SOCIALNETWORKS) {
2804 print dol_get_fiche_end();
2805}
2806// End of page
2807llxFooter();
2808$db->close();
2809
2810
2820function dictFieldList($fieldlist, $obj = null, $tabname = '', $context = '')
2821{
2822 global $langs, $db, $mysoc;
2823 global $form;
2824 global $region_id;
2825 global $elementList, $sourceList, $localtax_typeList, $type_vatList;
2826
2827 $formadmin = new FormAdmin($db);
2828 $formcompany = new FormCompany($db);
2829 $formaccounting = new FormAccounting($db);
2830
2831 $withentity = '';
2832
2833 foreach ($fieldlist as $field => $value) {
2834 if ($value == 'entity' && isset($obj->$value)) {
2835 $withentity = $obj->$value;
2836 continue;
2837 }
2838
2839 if (in_array($value, array('code', 'libelle', 'type')) && $tabname == "c_actioncomm" && isset($obj->$value) && in_array($obj->type, array('system', 'systemauto'))) {
2840 // Special case for c_actioncomm (field that should not be modified)
2841 $hidden = (!empty($obj->{$value}) ? $obj->{$value} : '');
2842 print '<td>';
2843 print '<input type="hidden" name="'. $value .'" value="'.$hidden.'">';
2844 print $langs->trans($hidden);
2845 print '</td>';
2846 } elseif ($value == 'country') {
2847 if (in_array('region_id', $fieldlist)) {
2848 print '<td>';
2849 print '</td>';
2850 continue;
2851 } // For state page, we do not show the country input (we link to region, not country)
2852 print '<td>';
2853
2854 $selected = (!empty($obj->country_code) ? $obj->country_code : (!empty($obj->country) ? $obj->country : ''));
2855 if (!GETPOSTISSET('code')) {
2856 $selected = GETPOST('countryidforinsert');
2857 }
2858 print $form->select_country($selected, $value, '', 28, 'minwidth100 maxwidth150 maxwidthonsmartphone');
2859 print '</td>';
2860 } elseif ($value == 'country_id') {
2861 if (!in_array('country', $fieldlist)) { // If there is already a field country, we don't show country_id (avoid duplicate)
2862 $country_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2863 print '<td class="tdoverflowmax100">';
2864 print '<input type="hidden" name="'. $value .'" value="'.$country_id.'">';
2865 print '</td>';
2866 }
2867 } elseif ($value == 'region') {
2868 print '<td>';
2869 $formcompany->select_region($region_id, 'region');
2870 print '</td>';
2871 } elseif ($value == 'region_id') {
2872 $region_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2873 print '<td>';
2874 print '<input type="hidden" name="'. $value .'" value="'.$region_id.'">';
2875 print '</td>';
2876 } elseif ($value == 'department_buyer') {
2877 if ($context == 'edit') {
2878 print '<td class="nowraponall">';
2879 // show department buyer list
2880 $country_code = (!empty($obj->country_code) ? $obj->country_code : '');
2881 $department_buyer_id = (!empty($obj->department_buyer_id) ? (int) $obj->department_buyer_id : 0);
2882 if ($country_code != '') {
2883 print $formcompany->select_state($department_buyer_id, $country_code, 'department_buyer_id', 'minwidth100 maxwidth150 maxwidthonsmartphone');
2884 }
2885 print '</td>';
2886 }
2887 } elseif ($value == 'department_buyer_id') {
2888 if (!in_array('department_buyer', $fieldlist)) { // If there is already a field department buyer, we don't show department buyer id (avoid duplicate)
2889 $department_buyer_id = (!empty($obj->{$value}) ? $obj->{$value} : 0);
2890 print '<td class="tdoverflowmax100">';
2891 print '<input type="hidden" name="'.$value.'" value="'.$department_buyer_id.'">';
2892 print '</td>';
2893 }
2894 } elseif ($value == 'lang') {
2895 print '<td>';
2896 print $formadmin->select_language(getDolGlobalString('MAIN_LANG_DEFAULT'), 'lang');
2897 print '</td>';
2898 } elseif (in_array($value, array('element', 'source'))) { // Example: the type and source of the element (for contact types)
2899 $tmparray = array();
2900 if ($value == 'element') {
2901 $tmparray = $elementList;
2902 } else {
2903 $tmparray = $sourceList;
2904 }
2905 print '<td>';
2906 print $form->selectarray($value, $tmparray, (!empty($obj->{$value}) ? $obj->{$value} : ''), 0, 0, 0, '', 0, 0, 0, '', 'maxwidth250');
2907 print '</td>';
2908 } elseif (in_array($value, array('public', 'use_default'))) {
2909 // Fields 0/1 with a combo select Yes/No
2910 print '<td class="center">';
2911 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2912 print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1);
2913 print '</td>';
2914 } elseif ($value == 'private') {
2915 // Fields 'no'/'yes' with a combo select Yes/No
2916 print '<td>';
2917 print $form->selectyesno("private", (!empty($obj->{$value}) ? $obj->{$value} : ''));
2918 print '</td>';
2919 } elseif ($value == 'type' && $tabname == "c_actioncomm") {
2920 $type = (!empty($obj->type) ? $obj->type : 'user'); // Check if type is different of 'user' (external module)
2921 print '<td>';
2922 print $type.'<input type="hidden" name="type" value="'.$type.'">';
2923 print '</td>';
2924 } elseif ($value == 'type' && $tabname == 'c_paiement') {
2925 print '<td>';
2926 $select_list = array(0 => $langs->trans('PaymentTypeCustomer'), 1 => $langs->trans('PaymentTypeSupplier'), 2 => $langs->trans('PaymentTypeBoth'));
2927 print $form->selectarray($value, $select_list, (!empty($obj->{$value}) ? $obj->{$value} : '2'));
2928 print '</td>';
2929 } elseif ($value == 'recuperableonly' || $value == 'type_cdr' || $value == 'deductible' || $value == 'category_type') {
2930 if ($value == 'type_cdr') {
2931 print '<td class="center">';
2932 } else {
2933 print '<td>';
2934 }
2935 if ($value == 'type_cdr') {
2936 print $form->selectarray($value, array(0 => $langs->trans('None'), 1 => $langs->trans('AtEndOfMonth'), 2 => $langs->trans('CurrentNext')), (!empty($obj->{$value}) ? $obj->{$value} : ''));
2937 } else {
2938 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
2939 print $form->selectyesno($value, (!empty($obj->{$value}) ? $obj->{$value} : ''), 1);
2940 }
2941 print '</td>';
2942 } elseif (in_array($value, array('nbjour', 'decalage', 'taux', 'localtax1', 'localtax2'))) {
2943 $class = "right";
2944 if (in_array($value, array('taux', 'localtax1', 'localtax2'))) {
2945 $class = "center"; // Fields aligned on right
2946 }
2947 print '<td class="'.$class.'">';
2948 print '<input type="text" class="flat" value="'.(isset($obj->{$value}) ? $obj->{$value} : '').'" size="3" name="'. $value .'">';
2949 print '</td>';
2950 } elseif (in_array($value, array('libelle_facture'))) {
2951 print '<td>';
2952 $transfound = 0;
2953 $transkey = '';
2954 // Special case for labels
2955 if ($tabname == 'c_payment_term') {
2956 $langs->load("bills");
2957 if (isset($obj->code) && !empty($obj->code)) {
2958 $transkey = "PaymentCondition" . strtoupper($obj->code);
2959 if ($langs->trans($transkey) != $transkey) {
2960 $transfound = 1;
2961 print $form->textwithpicto($langs->trans($transkey), $langs->trans("GoIntoTranslationMenuToChangeThis"));
2962 }
2963 }
2964 }
2965 if (!$transfound) {
2966 print '<textarea cols="30" rows="'.ROWS_2.'" class="flat" name="'. $value .'">'.(empty($obj->{$value}) ? '' : $obj->{$value}).'</textarea>';
2967 } else {
2968 print '<input type="hidden" name="'. $value .'" value="'.$transkey.'">';
2969 }
2970 print '</td>';
2971 } elseif ($value == 'price' || preg_match('/^amount/i', (string) $value)) {
2972 print '<td><input type="text" class="flat minwidth75" value="'.price((!empty($obj->{$value}) ? $obj->{$value} : '')).'" name="'. $value .'"></td>';
2973 } elseif ($value == 'code' && isset($obj->{$value})) {
2974 print '<td>';
2975 if ($tabname == 'c_paiement' && in_array($obj->{$value}, array('LIQ', 'CB', 'CHQ', 'VIR'))) {
2976 // Case of code that should not be modified
2977 print '<input type="hidden" class="flat minwidth75 maxwidth100" value="'.(empty($obj->{$value}) ? '' : $obj->{$value}).'" name="'. $value .'">';
2978 print $obj->{$value};
2979 } else {
2980 print '<input type="text" class="flat minwidth75 maxwidth100" value="'.(empty($obj->{$value}) ? '' : $obj->{$value}).'" name="'. $value .'">';
2981 }
2982 print '</td>';
2983 } elseif ($value == 'unit') {
2984 print '<td>';
2985 $units = array(
2986 'mm' => $langs->trans('SizeUnitmm'),
2987 'cm' => $langs->trans('SizeUnitcm'),
2988 'point' => $langs->trans('SizeUnitpoint'),
2989 'inch' => $langs->trans('SizeUnitinch')
2990 );
2991 print $form->selectarray('unit', $units, (empty($obj->{$value}) ? '' : $obj->{$value}), 0, 0, 0);
2992 print '</td>';
2993 } elseif ($value == 'type_vat') {
2994 // VAT type 0: all, 1: sell, 2: purchase
2995 print '<td class="center">';
2996 print $form->selectarray($value, $type_vatList, (empty($obj->{$value}) ? '0' : $obj->{$value}));
2997 print '</td>';
2998 } elseif ($value == 'localtax1_type' || $value == 'localtax2_type') {
2999 // Le type de taxe locale
3000 print '<td class="center">';
3001 print $form->selectarray($value, $localtax_typeList, (empty($obj->{$value}) ? '' : $obj->{$value}));
3002 print '</td>';
3003 } elseif ($value == 'accountancy_code' || $value == 'accountancy_code_sell' || $value == 'accountancy_code_buy') {
3004 print '<td>';
3005 if (isModEnabled('accounting')) {
3006 $fieldname = $value;
3007 $accountancy_account = (empty($obj->$fieldname) ? 0 : $obj->$fieldname);
3008 print $formaccounting->select_account($accountancy_account, '.'. $value, 1, array(), 1, 1, 'maxwidth125 maxwidthonsmartphone');
3009 } else {
3010 $fieldname = $value;
3011 print '<input type="text" class="flat minwidth100" value="'.(isset($obj->$fieldname) ? $obj->$fieldname : '').'" name="'. $value .'">';
3012 }
3013 print '</td>';
3014 } elseif ($value == 'fk_tva') {
3015 print '<td>';
3016 print $form->load_tva('fk_tva', $obj->taux, $mysoc, new Societe($db), 0, 0, '', false, -1);
3017 print '</td>';
3018 } elseif ($value == 'fk_c_exp_tax_cat') {
3019 print '<td>';
3020 print $form->selectExpenseCategories($obj->fk_c_exp_tax_cat);
3021 print '</td>';
3022 } elseif ($value == 'fk_range') {
3023 print '<td>';
3024 print $form->selectExpenseRanges($obj->fk_range);
3025 print '</td>';
3026 } elseif ($value == 'block_if_negative') {
3027 print '<td>';
3028 print $form->selectyesno("block_if_negative", (empty($obj->block_if_negative) ? '' : $obj->block_if_negative), 1);
3029 print '</td>';
3030 } elseif ($value == 'type_duration') {
3031 print '<td>';
3032 print $form->selectTypeDuration('', (empty($obj->type_duration) ? '' : $obj->type_duration), array('i','h'));
3033 print '</td>';
3034 } else {
3035 $fieldValue = isset($obj->{$value}) ? $obj->{$value} : '';
3036 $classtd = '';
3037 $class = '';
3038
3039 if ($value == 'sortorder') {
3040 $fieldlist[$field] = 'position';
3041 }
3042
3043 if ($fieldlist[$field] == 'code') {
3044 $class = 'maxwidth100';
3045 }
3046 if (in_array($fieldlist[$field], array('deposit_percent'))) {
3047 $classtd = 'right';
3048 $class = 'maxwidth50 right';
3049 }
3050 if (in_array($fieldlist[$field], array('pos', 'position'))) {
3051 $classtd = 'right';
3052 $class = 'maxwidth50 right';
3053 }
3054 if (in_array($fieldlist[$field], array('dayrule', 'day', 'month', 'year', 'use_default', 'affect', 'delay', 'public', 'sortorder', 'sens', 'category_type', 'fk_parent'))) {
3055 $class = 'maxwidth50 center';
3056 }
3057 if (in_array($fieldlist[$field], array('use_default', 'public', 'fk_parent'))) {
3058 $classtd = 'center';
3059 }
3060 if (in_array($fieldlist[$field], array('libelle', 'label', 'tracking'))) {
3061 $class = 'quatrevingtpercent';
3062 }
3063 // Fields that must be suggested as '0' instead of ''
3064 if ($fieldlist[$field] == 'fk_parent') {
3065 if (empty($fieldValue)) {
3066 $fieldValue = '0';
3067 }
3068 }
3069
3070 // Labels Length
3071 $maxlength = '';
3072 if (in_array($fieldlist[$field], array('libelle', 'label'))) {
3073 switch ($tabname) {
3074 case 'c_ecotaxe':
3075 case 'c_email_senderprofile':
3076 case 'c_forme_juridique':
3077 case 'c_holiday_types':
3078 case 'c_payment_term':
3079 case 'c_transport_mode':
3080 $maxlength = ' maxlength="255"';
3081 break;
3082 case 'c_email_templates':
3083 $maxlength = ' maxlength="180"';
3084 break;
3085 case 'c_socialnetworks':
3086 $maxlength = ' maxlength="150"';
3087 break;
3088 default:
3089 $maxlength = ' maxlength="128"';
3090 }
3091 }
3092
3093 print '<td class="'.$classtd.'">';
3094 $transfound = 0;
3095 $transkey = '';
3096 if (in_array($fieldlist[$field], array('label', 'libelle'))) { // For label
3097 // Special case for labels
3098 if ($tabname == 'c_civility' && !empty($obj->code)) {
3099 $transkey = "Civility".strtoupper($obj->code);
3100 }
3101 if ($tabname == 'c_payment_term' && !empty($obj->code)) {
3102 $langs->load("bills");
3103 $transkey = "PaymentConditionShort".strtoupper($obj->code);
3104 }
3105 if ($transkey && $langs->trans($transkey) != $transkey) {
3106 $transfound = 1;
3107 print $form->textwithpicto($langs->trans($transkey), $langs->trans("GoIntoTranslationMenuToChangeThis"));
3108 }
3109 }
3110 if (!$transfound) {
3111 print '<input type="text" class="flat'.($class ? ' '.$class : '').'"'.($maxlength ? ' '.$maxlength : '').' value="'.dol_escape_htmltag($fieldValue).'" name="'.$fieldlist[$field].'">';
3112 } else {
3113 print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$transkey.'">';
3114 }
3115 print '</td>';
3116 }
3117 }
3118
3119 return $withentity;
3120}
$id
Support class for third parties, contacts, members, users or resources.
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:67
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:91
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:73
Class to manage accounting accounts.
Class to manage generation of HTML components for accounting management.
Class to generate html code for admin pages.
Class to build HTML component for third parties management Only common components are here.
Class to manage generation of HTML components Only common components must be here.
Class to manage third parties objects (customers, suppliers, prospects...)
dictFieldList($fieldlist, $obj=null, $tabname='', $context='')
Show fields in insert/edit mode.
Definition dict.php:2820
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, $morecssdiv='')
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
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|dolcrypt):/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition repair.php:158
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.