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