dolibarr 25.0.0-alpha
company.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2019 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2010-2014 Juanjo Menent <jmenent@2byte.es>
6 * Copyright (C) 2011-2017 Philippe Grand <philippe.grand@atoo-net.com>
7 * Copyright (C) 2015-2025 Alexandre Spangaro <alexandre@inovea-conseil.com>
8 * Copyright (C) 2017 Rui Strecht <rui.strecht@aliartalentos.com>
9 * Copyright (C) 2023 Nick Fragoulis
10 * Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
11 * Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <https://www.gnu.org/licenses/>.
25 */
26
33// Load Dolibarr environment
34require '../main.inc.php';
43require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
44require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
45require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
46require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
47require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
48require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
49require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
50require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
51require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
52
53$action = GETPOST('action', 'aZ09');
54$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'admincompany'; // To manage different context of search
55$page_y = GETPOSTINT('page_y');
56
57// Load translation files required by the page
58$langs->loadLangs(array('admin', 'companies', 'bills'));
59
60if (!$user->admin) {
62}
63
64$error = 0;
65
66$tmparraysize = getDefaultImageSizes();
67$maxwidthsmall = $tmparraysize['maxwidthsmall'];
68$maxheightsmall = $tmparraysize['maxheightsmall'];
69$maxwidthmini = $tmparraysize['maxwidthmini'];
70$maxheightmini = $tmparraysize['maxheightmini'];
71$quality = $tmparraysize['quality'];
72
73// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
74$hookmanager->initHooks(array('admincompany', 'globaladmin'));
75
76$object = new Societe($db);
77
78if (!getDolGlobalString('MAIN_INFO_SOCIETE_NOM') || !getDolGlobalString('MAIN_INFO_SOCIETE_COUNTRY') || getDolGlobalString('MAIN_INFO_SOCIETE_SETUP_TODO_WARNING')) {
79 $setupcompanynotcomplete = 1;
80} else {
81 $setupcompanynotcomplete = 0;
82}
83
84
85/*
86 * Actions
87 */
88
89$parameters = array();
90$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
91if ($reshook < 0) {
92 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
93}
94
95if (($action == 'update' && !GETPOST("cancel", 'alpha'))
96|| ($action == 'updateedit')) {
97 $db->begin();
98
99 $tmparray = getCountry(GETPOSTINT('country_id'), 'all', $db, $langs, 0);
100 if (!empty($tmparray['id'])) {
101 // Check we can change country
102 include_once DOL_DOCUMENT_ROOT.'/blockedlog/lib/blockedlog.lib.php';
103 if ($mysoc->country_code == 'FR' && $tmparray['code'] != $mysoc->country_code && isALNERunningVersion()) {
104 $langs->load("blockedlog");
105 setEventMessages($langs->trans("BlockedLogCountryChangeNotAllowedFR"), null, 'errors');
106 $error++;
107 } else {
108 if ($tmparray['code'] == 'FR' && $tmparray['id'] != $mysoc->country_id) {
109 // For FR, default value of option to show profid SIREN is on by default
110 $res = dolibarr_set_const($db, "MAIN_PROFID1_IN_ADDRESS", 1, 'chaine', 0, '', $conf->entity);
111 }
112
113 $mysoc->country_id = $tmparray['id'];
114 $mysoc->country_code = $tmparray['code'];
115 $mysoc->country_label = $tmparray['label'];
116
117 $s = $mysoc->country_id.':'.$mysoc->country_code.':'.$mysoc->country_label;
118 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_COUNTRY", $s, 'chaine', 0, '', $conf->entity);
119
120 activateModulesRequiredByCountry($mysoc->country_code);
121 }
122 }
123
124 $tmparray = getState(GETPOSTINT('state_id'), 'all', $db, 0, $langs, 0);
125 if (!empty($tmparray['id'])) {
126 $mysoc->state_id = $tmparray['id'];
127 $mysoc->state_code = $tmparray['code'];
128 $mysoc->state_label = $tmparray['label'];
129
130 $s = $mysoc->state_id.':'.$mysoc->state_code.':'.$mysoc->state_label;
131 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_STATE", $s, 'chaine', 0, '', $conf->entity);
132 } else {
133 dolibarr_del_const($db, "MAIN_INFO_SOCIETE_STATE", $conf->entity);
134 }
135
136 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", GETPOST("name", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
137 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ADDRESS", GETPOST("MAIN_INFO_SOCIETE_ADDRESS", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
138 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TOWN", GETPOST("MAIN_INFO_SOCIETE_TOWN", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
139 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ZIP", GETPOST("MAIN_INFO_SOCIETE_ZIP", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
140 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_REGION", GETPOST("region_code", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
141 dolibarr_set_const($db, "MAIN_MONNAIE", GETPOST("currency", 'aZ09'), 'chaine', 0, '', $conf->entity);
142 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TEL", GETPOST("phone", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
143 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_MOBILE", GETPOST("phone_mobile", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
144 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_FAX", GETPOST("fax", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
145 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_MAIL", GETPOST("mail", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
146 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_WEB", GETPOST("web", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
147 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOTE", GETPOST("note", 'restricthtml'), 'chaine', 0, '', $conf->entity);
148 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_GENCOD", GETPOST("barcode", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
149
150 $dirforimage = $conf->mycompany->dir_output.'/logos/';
151
152 $arrayofimages = array('logo', 'logo_squarred');
153 //var_dump($_FILES); exit;
154 foreach ($arrayofimages as $varforimage) {
155 if ($_FILES[$varforimage]["name"] && !image_format_supported($_FILES[$varforimage]["name"], 0)) { // Logo can be used on a lot of different places. Recommend using jpg and png for better compatibility.
156 $langs->load("errors");
157 $mesg = $langs->trans("ErrorBadImageFormat");
158 if (!function_exists("imagecreate")) {
159 $mesg .= ' - '.$langs->trans("ErrorPHPDoesNotSupport", "GD");
160 } else {
161 $supportedextensions = getListOfPossibleImageExt();
162 $supportedextensions = preg_replace('/\\\./', '', $supportedextensions); // Remove '\.'
163 $mesg .= ' - '.$langs->trans("ErrorSupportedFormatAre", implode(', ', explode('|', $supportedextensions)));
164 }
165 setEventMessages($mesg, null, 'errors');
166 break;
167 }
168
169 // Remove to check file size to large
170 /*if ($_FILES[$varforimage]["tmp_name"]) {*/
171 $reg = array();
172 if (preg_match('/([^\\/:]+)$/i', $_FILES[$varforimage]["name"], $reg)) {
173 $original_file = $reg[1];
174
175 $isimage = image_format_supported($original_file);
176 if ($isimage >= 0) {
177 dol_syslog("Move file ".$_FILES[$varforimage]["tmp_name"]." to ".$dirforimage.$original_file);
178 if (!is_dir($dirforimage)) {
179 dol_mkdir($dirforimage);
180 }
181 $result = dol_move_uploaded_file($_FILES[$varforimage]["tmp_name"], $dirforimage.$original_file, 1, 0, $_FILES[$varforimage]['error']);
182
183 if (is_numeric($result) && $result > 0) {
184 $constant = "MAIN_INFO_SOCIETE_LOGO";
185 if ($varforimage == 'logo_squarred') {
186 $constant = "MAIN_INFO_SOCIETE_LOGO_SQUARRED";
187 }
188
189 dolibarr_set_const($db, $constant, $original_file, 'chaine', 0, '', $conf->entity);
190
191 // Create thumbs of logo (Note that PDF use original file and not thumbs)
192 if ($isimage > 0) {
193 // Create thumbs
194 //$object->addThumbs($newfile); // We can't use addThumbs here yet because we need name of generated thumbs to add them into constants. TODO Check if need such constants. We should be able to retrieve value with get...
195
196
197 // Create small thumb, Used on logon for example
198 $imgThumbSmall = vignette($dirforimage.$original_file, $maxwidthsmall, $maxheightsmall, '_small', $quality);
199 if (image_format_supported($imgThumbSmall) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbSmall, $reg)) {
200 $imgThumbSmall = $reg[1]; // Save only basename
201 dolibarr_set_const($db, $constant."_SMALL", $imgThumbSmall, 'chaine', 0, '', $conf->entity);
202 } else {
203 dol_syslog($imgThumbSmall);
204 }
205
206 // Create mini thumb, Used on menu or for setup page for example
207 $imgThumbMini = vignette($dirforimage.$original_file, $maxwidthmini, $maxheightmini, '_mini', $quality);
208 if (image_format_supported($imgThumbMini) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbMini, $reg)) {
209 $imgThumbMini = $reg[1]; // Save only basename
210 dolibarr_set_const($db, $constant."_MINI", $imgThumbMini, 'chaine', 0, '', $conf->entity);
211 } else {
212 dol_syslog($imgThumbMini);
213 }
214 } else {
215 dol_syslog("ErrorImageFormatNotSupported", LOG_WARNING);
216 }
217 } elseif (!is_numeric($result)) { // $result is a translation key
218 $error++;
219 $langs->load("errors");
220 setEventMessages($langs->trans($result), null, 'errors');
221 } else {
222 $error++;
223 setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors');
224 }
225 } else {
226 $error++;
227 $langs->load("errors");
228 setEventMessages($langs->trans("ErrorBadImageFormat"), null, 'errors');
229 }
230 }
231 /*}*/
232 }
233
234 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_MANAGERS", GETPOST("MAIN_INFO_SOCIETE_MANAGERS", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
235 dolibarr_set_const($db, "MAIN_INFO_GDPR", GETPOST("MAIN_INFO_GDPR", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
236 dolibarr_set_const($db, "MAIN_INFO_CAPITAL", GETPOST("capital", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
237 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_FORME_JURIDIQUE", GETPOST("forme_juridique_code", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
238 dolibarr_set_const($db, "MAIN_INFO_SIREN", GETPOST("siren", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
239 dolibarr_set_const($db, "MAIN_INFO_SIRET", GETPOST("siret", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
240 dolibarr_set_const($db, "MAIN_INFO_APE", GETPOST("ape", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
241 dolibarr_set_const($db, "MAIN_INFO_RCS", GETPOST("rcs", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
242 dolibarr_set_const($db, "MAIN_INFO_PROFID5", GETPOST("MAIN_INFO_PROFID5", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
243 dolibarr_set_const($db, "MAIN_INFO_PROFID6", GETPOST("MAIN_INFO_PROFID6", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
244 dolibarr_set_const($db, "MAIN_INFO_PROFID7", GETPOST("MAIN_INFO_PROFID7", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
245 dolibarr_set_const($db, "MAIN_INFO_PROFID8", GETPOST("MAIN_INFO_PROFID8", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
246 dolibarr_set_const($db, "MAIN_INFO_PROFID9", GETPOST("MAIN_INFO_PROFID9", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
247 dolibarr_set_const($db, "MAIN_INFO_PROFID10", GETPOST("MAIN_INFO_PROFID10", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
248
249 dolibarr_set_const($db, "MAIN_INFO_TVAINTRA", GETPOST("tva", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
250 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_OBJECT", GETPOST("socialobject", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
251
252 dolibarr_set_const($db, "SOCIETE_FISCAL_MONTH_START", GETPOSTINT("SOCIETE_FISCAL_MONTH_START"), 'chaine', 0, '', $conf->entity);
253
254 // Sale tax options
255 $usevat = GETPOST("optiontva", 'aZ09');
256 $uselocaltax1 = GETPOST("optionlocaltax1", 'aZ09');
257 $uselocaltax2 = GETPOST("optionlocaltax2", 'aZ09');
258 if ($uselocaltax1 == 'localtax1on' && !$usevat) {
259 setEventMessages($langs->trans("IfYouUseASecondTaxYouMustSetYouUseTheMainTax"), null, 'errors');
260 $error++;
261 }
262 if ($uselocaltax2 == 'localtax2on' && !$usevat) {
263 setEventMessages($langs->trans("IfYouUseAThirdTaxYouMustSetYouUseTheMainTax"), null, 'errors');
264 $error++;
265 }
266
267 dolibarr_set_const($db, "FACTURE_TVAOPTION", $usevat, 'chaine', 0, '', $conf->entity);
268
269 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_VAT_EXEMPTION_CODE", GETPOST('MAIN_INFO_SOCIETE_VAT_EXEMPTION_CODE'), 'chaine', 0, '', $conf->entity);
270
271 dolibarr_set_const($db, "FACTURE_LOCAL_TAX1_OPTION", $uselocaltax1, 'chaine', 0, '', $conf->entity);
272 dolibarr_set_const($db, "FACTURE_LOCAL_TAX2_OPTION", $uselocaltax2, 'chaine', 0, '', $conf->entity);
273
274 if (GETPOST("optionlocaltax1") == "localtax1on") {
275 if (!GETPOSTISSET('lt1')) {
276 dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX1", 0, 'chaine', 0, '', $conf->entity);
277 } else {
278 dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX1", GETPOST('lt1', 'aZ09'), 'chaine', 0, '', $conf->entity);
279 }
280 dolibarr_set_const($db, "MAIN_INFO_LOCALTAX_CALC1", GETPOST("clt1", 'aZ09'), 'chaine', 0, '', $conf->entity);
281 }
282 if (GETPOST("optionlocaltax2") == "localtax2on") {
283 if (!GETPOSTISSET('lt2')) {
284 dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX2", 0, 'chaine', 0, '', $conf->entity);
285 } else {
286 dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX2", GETPOST('lt2', 'aZ09'), 'chaine', 0, '', $conf->entity);
287 }
288 dolibarr_set_const($db, "MAIN_INFO_LOCALTAX_CALC2", GETPOST("clt2", 'aZ09'), 'chaine', 0, '', $conf->entity);
289 }
290
291 // Credentials for AADE webservices, applicable only for Greece
292 if ($mysoc->country_code == 'GR') {
293 dolibarr_set_const($db, "MYDATA_AADE_USER", GETPOST("MYDATA_AADE_USER", 'alpha'), 'chaine', 0, '', $conf->entity);
294 dolibarr_set_const($db, "MYDATA_AADE_KEY", GETPOST("MYDATA_AADE_KEY", 'alpha'), 'chaine', 0, '', $conf->entity);
295 dolibarr_set_const($db, "AADE_WEBSERVICE_USER", GETPOST("AADE_WEBSERVICE_USER", 'alpha'), 'chaine', 0, '', $conf->entity);
296 dolibarr_set_const($db, "AADE_WEBSERVICE_KEY", GETPOST("AADE_WEBSERVICE_KEY", 'alpha'), 'chaine', 0, '', $conf->entity);
297 }
298
299 // Remove constant MAIN_INFO_SOCIETE_SETUP_TODO_WARNING
300 dolibarr_del_const($db, "MAIN_INFO_SOCIETE_SETUP_TODO_WARNING", $conf->entity);
301
302 if (!$error) {
303 if (GETPOST('save')) { // To avoid to show message when we juste switch the country that resubmit the form.
304 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
305 }
306 $db->commit();
307 } else {
308 $db->rollback();
309 }
310
311 if ($action != 'updateedit' && !$error) {
312 header("Location: ".$_SERVER["PHP_SELF"].($page_y ? '?page_y='.$page_y : ''));
313 exit;
314 }
315}
316
317if ($action == 'addthumb' || $action == 'addthumbsquarred') { // Regenerate thumbs
318 if (file_exists($conf->mycompany->dir_output.'/logos/'.GETPOST("file"))) {
319 $isimage = image_format_supported(GETPOST("file"));
320
321 // Create thumbs of logo
322 if ($isimage > 0) {
323 $constant = "MAIN_INFO_SOCIETE_LOGO";
324 if ($action == 'addthumbsquarred') {
325 $constant = "MAIN_INFO_SOCIETE_LOGO_SQUARRED";
326 }
327
328 $reg = array();
329
330 // Create thumbs
331 //$object->addThumbs($newfile); // We can't use addThumbs here yet because we need name of generated thumbs to add them into constants. TODO Check if need such constants. We should be able to retrieve value with get...
332
333 // Create small thumb. Used on logon for example
334 $imgThumbSmall = vignette($conf->mycompany->dir_output.'/logos/'.GETPOST("file"), $maxwidthsmall, $maxheightsmall, '_small', $quality);
335 if (image_format_supported($imgThumbSmall) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbSmall, $reg)) {
336 $imgThumbSmall = $reg[1]; // Save only basename
337 dolibarr_set_const($db, $constant."_SMALL", $imgThumbSmall, 'chaine', 0, '', $conf->entity);
338 } else {
339 dol_syslog($imgThumbSmall);
340 }
341
342 // Create mini thumbs. Used on menu or for setup page for example
343 $imgThumbMini = vignette($conf->mycompany->dir_output.'/logos/'.GETPOST("file"), $maxwidthmini, $maxheightmini, '_mini', $quality);
344 if (image_format_supported($imgThumbSmall) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbMini, $reg)) {
345 $imgThumbMini = $reg[1]; // Save only basename
346 dolibarr_set_const($db, $constant."_MINI", $imgThumbMini, 'chaine', 0, '', $conf->entity);
347 } else {
348 dol_syslog($imgThumbMini);
349 }
350
351 header("Location: ".$_SERVER["PHP_SELF"]);
352 exit;
353 } else {
354 $error++;
355 $langs->load("errors");
356 setEventMessages($langs->trans("ErrorBadImageFormat"), null, 'errors');
357 dol_syslog($langs->transnoentities("ErrorBadImageFormat"), LOG_INFO);
358 }
359 } else {
360 $error++;
361 $langs->load("errors");
362 setEventMessages($langs->trans("ErrorFileDoesNotExists", GETPOST("file")), null, 'errors');
363 dol_syslog($langs->transnoentities("ErrorFileDoesNotExists", GETPOST("file")), LOG_WARNING);
364 }
365}
366
367
368if ($action == 'removelogo' || $action == 'removelogo_squarred') {
369 $constant = "MAIN_INFO_SOCIETE_LOGO";
370 if ($action == 'removelogo_squarred') {
371 $constant = "MAIN_INFO_SOCIETE_LOGO_SQUARRED";
372 }
373
374 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
375
376 $logofilename = $mysoc->logo;
377 $logofilenamebis = $mysoc->logo_squarred;
378 if ($action == 'removelogo_squarred') {
379 $logofilename = $mysoc->logo_squarred;
380 $logofilenamebis = $mysoc->logo;
381 }
382
383 $logofile = $conf->mycompany->dir_output.'/logos/'.$logofilename;
384 if ($logofilename != '' && $logofilename != $logofilenamebis) {
385 dol_delete_file($logofile);
386 }
387 dolibarr_del_const($db, $constant, $conf->entity);
388 if ($action == 'removelogo_squarred') {
389 $mysoc->logo_squarred = '';
390 } else {
391 $mysoc->logo = '';
392 }
393
394 $logofilename = $mysoc->logo_small;
395 $logofilenamebis = $mysoc->logo_squarred_small;
396 if ($action == 'removelogo_squarred') {
397 $logofilename = $mysoc->logo_squarred_small;
398 $logofilenamebis = $mysoc->logo_small;
399 }
400
401 $logosmallfile = $conf->mycompany->dir_output.'/logos/thumbs/'.$logofilename;
402 if ($logofilename != '' && $logofilename != $logofilenamebis) {
403 dol_delete_file($logosmallfile);
404 }
405 dolibarr_del_const($db, $constant."_SMALL", $conf->entity);
406 if ($action == 'removelogo_squarred') {
407 $mysoc->logo_squarred_small = '';
408 } else {
409 $mysoc->logo_small = '';
410 }
411
412 $logofilename = $mysoc->logo_mini;
413 $logofilenamebis = $mysoc->logo_squarred_mini;
414 if ($action == 'removelogo_squarred') {
415 $logofilename = $mysoc->logo_squarred_mini;
416 $logofilenamebis = $mysoc->logo_mini;
417 }
418
419 $logominifile = $conf->mycompany->dir_output.'/logos/thumbs/'.$logofilename;
420 if ($logofilename != '' && $logofilename != $logofilenamebis) {
421 dol_delete_file($logominifile);
422 }
423 dolibarr_del_const($db, $constant."_MINI", $conf->entity);
424 if ($action == 'removelogo_squarred') {
425 $mysoc->logo_squarred_mini = '';
426 } else {
427 $mysoc->logo_mini = '';
428 }
429}
430
431
432/*
433 * View
434 */
435
436$wikihelp = 'EN:First_setup|FR:Premiers_paramétrages|ES:Primeras_configuraciones';
437llxHeader('', $langs->trans("Setup"), $wikihelp, '', 0, 0, '', '', '', 'mod-admin page-company');
438
439$form = new Form($db);
440$formother = new FormOther($db);
441$formcompany = new FormCompany($db);
442$formfile = new FormFile($db);
443
444$countrynotdefined = '<span class="error">'.$langs->trans("ErrorSetACountryFirst").' <a href="" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;">('.$langs->trans("SeeAbove").')</a></span>';
445
446print load_fiche_titre($langs->trans("CompanyFoundation"), '', 'title_setup');
447
449
450print dol_get_fiche_head($head, 'company', '', -1, '');
451
452print '<div class="'.($setupcompanynotcomplete ? 'warning' : 'info').'">'.$langs->trans("CompanyFundationDesc", $langs->transnoentities("Save"))."</div>\n";
453print "<br>\n";
454
455
456// Edit parameters
457
458if (!empty($conf->use_javascript_ajax)) {
459 print "\n".'<script type="text/javascript">';
460 print '$(document).ready(function () {
461 $("#selectcountry_id").change(function() {
462 console.log("selectcountry_id change");
463 document.form_index.action.value="updateedit";
464 document.form_index.submit();
465 });
466
467 // Show/hide VAT exemption code field based on VAT option
468 $("input[name=\"optiontva\"]").change(function() {
469 if ($(this).val() == "0") {
470 $("#vat_exemption_code_div").show();
471 } else {
472 $("#vat_exemption_code_div").hide();
473 }
474 });
475 });';
476 print '</script>'."\n";
477}
478
479print '<form enctype="multipart/form-data" method="POST" action="'.$_SERVER["PHP_SELF"].'" name="form_index" spellcheck="false">';
480print '<input type="hidden" name="token" value="'.newToken().'">';
481print '<input type="hidden" name="action" value="update">';
482print '<input type="hidden" name="page_y" value="">';
483
484print '<table class="noborder centpercent editmode">';
485print '<tr class="liste_titre"><th class="wordbreak" colspan="2">'.$langs->trans("CompanyInfo").'</th></tr>'."\n";
486
487// Company name
488print '<tr class="oddeven"><td class="fieldrequired titlefieldcreate wordbreak"><label for="name">'.$langs->trans("CompanyName").'</label></td><td>';
489print '<input name="name" id="name" maxlength="'.$mysoc->fields['nom']['length'].'" class="minwidth250" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('name') ? GETPOST('name', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_NOM'))).'"'.(getDolGlobalString('MAIN_INFO_SOCIETE_NOM') ? '' : ' autofocus="autofocus"').'></td></tr>'."\n";
490
491// Main currency
492print '<tr class="oddeven"><td class="fieldrequired"><label for="currency">'.$langs->trans("CompanyCurrency").'</label></td><td>';
493print img_picto('', 'multicurrency', 'class="pictofixedwidth"');
494print $form->selectCurrency(getDolCurrency(), "currency", 2);
495print '</td></tr>'."\n";
496
497// Country
498print '<tr class="oddeven"><td class="fieldrequired"><label for="selectcountry_id">'.$langs->trans("Country").'</label></td><td>';
499print img_picto('', 'globe-americas', 'class="pictofixedwidth"');
500print $form->select_country((string) $mysoc->country_id, 'country_id', '', 0);
501print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
502print '</td></tr>'."\n";
503
504// Address
505print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_ADDRESS">'.$langs->trans("CompanyAddress").'</label></td><td>';
506print '<textarea name="MAIN_INFO_SOCIETE_ADDRESS" id="MAIN_INFO_SOCIETE_ADDRESS" class="quatrevingtpercent" rows="'.ROWS_3.'">'.(GETPOSTISSET('MAIN_INFO_SOCIETE_ADDRESS') ? GETPOST('MAIN_INFO_SOCIETE_ADDRESS', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_ADDRESS')).'</textarea></td></tr>'."\n";
507
508// Zip
509print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_ZIP">'.$langs->trans("CompanyZip").'</label></td><td>';
510print '<input class="width100" name="MAIN_INFO_SOCIETE_ZIP" id="MAIN_INFO_SOCIETE_ZIP" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('MAIN_INFO_SOCIETE_ZIP') ? GETPOST('MAIN_INFO_SOCIETE_ZIP', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_ZIP'))).'"></td></tr>'."\n";
511
512print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_TOWN">'.$langs->trans("CompanyTown").'</label></td><td>';
513print '<input name="MAIN_INFO_SOCIETE_TOWN" class="minwidth200" id="MAIN_INFO_SOCIETE_TOWN" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('MAIN_INFO_SOCIETE_TOWN') ? GETPOST('MAIN_INFO_SOCIETE_TOWN', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_TOWN'))).'"></td></tr>'."\n";
514
515// State
516print '<tr class="oddeven"><td class="wordbreak"><label for="state_id">'.$langs->trans("State").'</label></td><td>';
517$state_id = 0;
518if (getDolGlobalString('MAIN_INFO_SOCIETE_STATE')) {
519 $tmp = explode(':', getDolGlobalString('MAIN_INFO_SOCIETE_STATE'));
520 $state_id = $tmp[0];
521}
522print img_picto('', 'state', 'class="pictofixedwidth"');
523print $formcompany->select_state($state_id, $mysoc->country_code, 'state_id', 'maxwidth200onsmartphone minwidth300');
524print '</td></tr>'."\n";
525
526// Phone
527print '<tr class="oddeven"><td><label for="phone">'.$langs->trans("Phone").'</label></td><td>';
528print $form->showPhoneInput(getDolGlobalString('MAIN_INFO_SOCIETE_TEL'), 'phone', $mysoc->country_id, 'object_phoning', 'maxwidth150 widthcentpercentminusx');
529print '</td></tr>';
530print '</td></tr>'."\n";
531
532// Phone mobile
533print '<tr class="oddeven"><td><label for="phone">'.$langs->trans("PhoneMobile").'</label></td><td>';
534print $form->showPhoneInput(getDolGlobalString('MAIN_INFO_SOCIETE_MOBILE'), 'phone_mobile', $mysoc->country_id, 'object_phoning_mobile', 'maxwidth150 widthcentpercentminusx');
535print '</td></tr>';
536print '</td></tr>'."\n";
537
538// Fax
539print '<tr class="oddeven"><td><label for="fax">'.$langs->trans("Fax").'</label></td><td>';
540print $form->showPhoneInput(getDolGlobalString('MAIN_INFO_SOCIETE_FAX'), 'fax', $mysoc->country_id, 'object_phoning_fax', 'maxwidth150 widthcentpercentminusx');
541print '</td></tr>';
542print '</td></tr>'."\n";
543
544// Email
545print '<tr class="oddeven"><td><label for="email">'.$langs->trans("EMail").'</label></td><td>';
546print img_picto('', 'object_email', '', 0, 0, 0, '', 'pictofixedwidth');
547print '<input class="minwidth300 maxwidth500 widthcentpercentminusx" name="mail" id="email" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('mail') ? GETPOST('mail', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_MAIL'))).'"></td></tr>';
548print '</td></tr>'."\n";
549
550// Web
551print '<tr class="oddeven"><td><label for="web">'.$langs->trans("Web").'</label></td><td>';
552print img_picto('', 'globe', '', 0, 0, 0, '', 'pictofixedwidth');
553print '<input class="maxwidth300 widthcentpercentminusx" name="web" id="web" value="'.dol_escape_htmltag((GETPOSTISSET('web') ? GETPOST('web', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_WEB'))).'"></td></tr>';
554print '</td></tr>'."\n";
555
556// Barcode
557if (isModEnabled('barcode')) {
558 print '<tr class="oddeven"><td>';
559 print '<label for="barcode">'.$langs->trans("Gencod").'</label></td><td>';
560 print '<span class="fa fa-barcode pictofixedwidth"></span>';
561 print '<input name="barcode" id="barcode" class="minwidth150 widthcentpercentminusx maxwidth300" value="'.dolPrintHTMLForAttribute(GETPOSTISSET('barcode') ? GETPOST('barcode', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_GENCOD')).'"></td></tr>';
562 print '</td></tr>';
563}
564
565// Tooltip for both Logo and LogSquarred
566$maxfilesizearray = getMaxFileSizeArray();
567$maxmin = $maxfilesizearray['maxmin'];
568$tooltiplogo = $langs->trans('AvailableFormats').' : png, jpg, jpeg';
569$tooltiplogo .= ($maxmin > 0) ? '<br>'.$langs->trans('MaxSize').' : '.$maxmin.' '.$langs->trans('Kb') : '';
570
571// Logo
572print '<tr class="oddeven"><td><label for="logo">'.$form->textwithpicto($langs->trans("Logo"), $tooltiplogo).'</label></td><td>';
573
574$modulepart = 'mycompany';
575$dirformainimage = $conf->mycompany->dir_output;
576$subdirformainimage = 'logos/';
577$fileformainimage = $mysoc->logo;
578
579print $formfile->showImageToEdit('logo', $modulepart, $dirformainimage, $subdirformainimage, $fileformainimage);
580
581print '</td></tr>';
582
583// Logo (squarred)
584print '<tr class="oddeven"><td><label for="logo_squarred">'.$form->textwithpicto($langs->trans("LogoSquarred"), $tooltiplogo).'</label></td><td>';
585
586$modulepart = 'mycompany';
587$dirformainimage = $conf->mycompany->dir_output;
588$subdirformainimage = 'logos/';
589$fileformainimage = $mysoc->logo_squarred;
590
591print $formfile->showImageToEdit('logo_squarred', $modulepart, $dirformainimage, $subdirformainimage, $fileformainimage);
592
593print '</td></tr>';
594
595// Note
596print '<tr class="oddeven"><td class="tdtop"><label for="note">'.$langs->trans("Note").'</label></td><td>';
597print '<textarea class="flat quatrevingtpercent" name="note" id="note" rows="'.ROWS_5.'">'.(GETPOSTISSET('note') ? GETPOST('note', 'restricthtml') : getDolGlobalString('MAIN_INFO_SOCIETE_NOTE')).'</textarea></td></tr>';
598print '</td></tr>';
599
600print '</table>';
601
602print $form->buttonsSaveCancel("Save", '', array(), false, 'reposition');
603
604print '<br><br>';
605
606
607// IDs of the company (country-specific)
608print '<div class="div-table-responsive-no-min">';
609print '<table class="noborder centpercent editmode">';
610print '<tr class="liste_titre"><td class="wordbreak" colspan="2">'.$langs->trans("CompanyIds").'</td></tr>';
611
612$langs->load("companies");
613
614// Managing Director(s)
615print '<tr class="oddeven"><td class="titlefieldcreate smallheight"><label for="director">'.$langs->trans("ManagingDirectors").'</label></td><td>';
616print '<input name="MAIN_INFO_SOCIETE_MANAGERS" id="directors" class="minwidth300" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('MAIN_INFO_SOCIETE_MANAGERS') ? GETPOST('MAIN_INFO_SOCIETE_MANAGERS', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_MANAGERS'))).'"></td></tr>';
617
618// GDPR contact
619print '<tr class="oddeven"><td class="smallheight">';
620print $form->textwithpicto($langs->trans("GDPRContact"), $langs->trans("GDPRContactDesc"));
621print '</td><td>';
622print '<input name="MAIN_INFO_GDPR" id="infodirector" class="minwidth300" value="'.dolPrintHTMLForAttribute((GETPOSTISSET("MAIN_INFO_GDPR") ? GETPOST("MAIN_INFO_GDPR", 'alphanohtml') : getDolGlobalString('MAIN_INFO_GDPR'))).'"></td></tr>';
623
624// Capital
625print '<tr class="oddeven"><td><label for="capital">'.$langs->trans("Capital").'</label></td><td>';
626print '<input name="capital" id="capital" class="maxwidth100" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('capital') ? GETPOST('capital', 'alphanohtml') : getDolGlobalString('MAIN_INFO_CAPITAL'))).'"></td></tr>';
627
628// Object of the company
629print '<tr class="oddeven"><td><label for="socialobject">'.$langs->trans("CompanyObject").'</label></td><td>';
630print '<textarea class="flat quatrevingtpercent" name="socialobject" id="socialobject" rows="'.ROWS_3.'">'.getDolGlobalString('MAIN_INFO_SOCIETE_OBJECT').'</textarea></td></tr>';
631print '</td></tr>';
632
633// Tax ID Intra-community VAT number
634print '<tr class="oddeven"><td><label for="intra_vat">'.$langs->trans("VATIntra").'</label></td><td>';
635print '<input name="tva" id="intra_vat" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_TVAINTRA')).'">';
636print '</td></tr>';
637
638// Juridical Status
639print '<tr class="oddeven"><td><label for="forme_juridique_code">'.$langs->trans("JuridicalStatus").'</label></td><td>';
640if ($mysoc->country_code) {
641 print $formcompany->select_juridicalstatus(getDolGlobalInt('MAIN_INFO_SOCIETE_FORME_JURIDIQUE'), $mysoc->country_code, '', 'forme_juridique_code');
642} else {
643 print $countrynotdefined;
644}
645print '</td></tr>';
646
647// ProfId1
648if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') {
649 print '<tr class="oddeven"><td><label for="profid1">'.$langs->transcountry("ProfId1", $mysoc->country_code).'</label></td><td>';
650 if (!empty($mysoc->country_code)) {
651 print '<input name="siren" id="profid1" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_SIREN')).'">';
652 } else {
653 print $countrynotdefined;
654 }
655 print '</td></tr>';
656}
657
658// ProfId2
659if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') {
660 print '<tr class="oddeven"><td><label for="profid2">'.$langs->transcountry("ProfId2", $mysoc->country_code).'</label></td><td>';
661 if (!empty($mysoc->country_code)) {
662 print '<input name="siret" id="profid2" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_SIRET')).'">';
663 } else {
664 print $countrynotdefined;
665 }
666 print '</td></tr>';
667}
668
669// ProfId3
670if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') {
671 print '<tr class="oddeven"><td><label for="profid3">'.$langs->transcountry("ProfId3", $mysoc->country_code).'</label></td><td>';
672 if (!empty($mysoc->country_code)) {
673 print '<input name="ape" id="profid3" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_APE')).'">';
674 } else {
675 print $countrynotdefined;
676 }
677 print '</td></tr>';
678}
679
680// ProfId4
681if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') {
682 print '<tr class="oddeven"><td><label for="profid4">'.$langs->transcountry("ProfId4", $mysoc->country_code).'</label></td><td>';
683 if (!empty($mysoc->country_code)) {
684 print '<input name="rcs" id="profid4" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_RCS')).'">';
685 } else {
686 print $countrynotdefined;
687 }
688 print '</td></tr>';
689}
690
691// ProfId5
692if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') {
693 print '<tr class="oddeven"><td><label for="profid5">'.$langs->transcountry("ProfId5", $mysoc->country_code).'</label></td><td>';
694 if (!empty($mysoc->country_code)) {
695 print '<input name="MAIN_INFO_PROFID5" id="profid5" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID5')).'">';
696 } else {
697 print $countrynotdefined;
698 }
699 print '</td></tr>';
700}
701
702// ProfId6
703if ($langs->transcountry("ProfId6", $mysoc->country_code) != '-') {
704 print '<tr class="oddeven"><td><label for="profid6">'.$langs->transcountry("ProfId6", $mysoc->country_code).'</label></td><td>';
705 if (!empty($mysoc->country_code)) {
706 print '<input name="MAIN_INFO_PROFID6" id="profid6" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID6')).'">';
707 } else {
708 print $countrynotdefined;
709 }
710 print '</td></tr>';
711}
712
713// ProfId7
714if ($langs->transcountry("ProfId7", $mysoc->country_code) != '-') {
715 print '<tr class="oddeven"><td><label for="profid7">'.$langs->transcountry("ProfId7", $mysoc->country_code).'</label></td><td>';
716 if (!empty($mysoc->country_code)) {
717 print '<input name="MAIN_INFO_PROFID7" id="profid7" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID7')).'">';
718 } else {
719 print $countrynotdefined;
720 }
721 print '</td></tr>';
722}
723
724// ProfId8
725if ($langs->transcountry("ProfId8", $mysoc->country_code) != '-') {
726 print '<tr class="oddeven"><td><label for="profid8">'.$langs->transcountry("ProfId8", $mysoc->country_code).'</label></td><td>';
727 if (!empty($mysoc->country_code)) {
728 print '<input name="MAIN_INFO_PROFID8" id="profid8" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID8')).'">';
729 } else {
730 print $countrynotdefined;
731 }
732 print '</td></tr>';
733}
734
735// ProfId9
736if ($langs->transcountry("ProfId9", $mysoc->country_code) != '-') {
737 print '<tr class="oddeven"><td><label for="profid9">'.$langs->transcountry("ProfId9", $mysoc->country_code).'</label></td><td>';
738 if (!empty($mysoc->country_code)) {
739 print '<input name="MAIN_INFO_PROFID9" id="profid9" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID9')).'">';
740 } else {
741 print $countrynotdefined;
742 }
743 print '</td></tr>';
744}
745
746// ProfId10
747if ($langs->transcountry("ProfId10", $mysoc->country_code) != '-') {
748 print '<tr class="oddeven"><td><label for="profid10">'.$langs->transcountry("ProfId10", $mysoc->country_code).'</label></td><td>';
749 if (!empty($mysoc->country_code)) {
750 print '<input name="MAIN_INFO_PROFID10" id="profid10" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID10')).'">';
751 } else {
752 print $countrynotdefined;
753 }
754 print '</td></tr>';
755}
756
757print '</table>';
758print '</div>';
759
760
761// Fiscal year start
762print '<br>';
763print '<table class="noborder centpercent editmode">';
764print '<tr class="liste_titre">';
765print '<td class="titlefieldcreate">'.$langs->trans("FiscalYearInformation").'</td><td></td>';
766print "</tr>\n";
767
768print '<tr class="oddeven"><td><label for="SOCIETE_FISCAL_MONTH_START">'.$langs->trans("FiscalMonthStart").'</label></td><td>';
769print $formother->select_month(getDolGlobalString('SOCIETE_FISCAL_MONTH_START'), 'SOCIETE_FISCAL_MONTH_START', 0, 1, 'maxwidth100').'</td></tr>';
770
771print "</table>";
772
773print $form->buttonsSaveCancel("Save", '', array(), false, 'reposition');
774
775print '<br>';
776
777
778// Sales taxes (VAT, IRPF, ...)
779print load_fiche_titre($langs->trans("TypeOfSaleTaxes"), '', 'object_payment');
780
781print '<table class="noborder centpercent editmode">';
782print '<tr class="liste_titre">';
783print '<td class="titlefieldcreate">'.$langs->trans("VATManagement").'</td><td></td>';
784print '<td class="right">&nbsp;</td>';
785print "</tr>\n";
786
787// Main tax
788print '<tr class="oddeven"><td><label><input type="radio" name="optiontva" id="use_vat" value="1"'.(!getDolGlobalString('FACTURE_TVAOPTION') ? "" : " checked")."> ".$langs->trans("VATIsUsed")."</label></td>";
789print '<td colspan="2">';
790$tooltiphelp = $langs->trans("VATIsUsedDesc");
791if ($mysoc->country_code == 'FR') {
792 $tooltiphelp .= '<br><br><i>'.$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i>";
793}
794print '<label for="use_vat">'.$form->textwithpicto($langs->trans("VATIsUsedStandard"), $tooltiphelp)."</label>";
795print "</td></tr>\n";
796
797
798print '<tr class="oddeven"><td width="140"><label><input type="radio" name="optiontva" id="no_vat" value="0"'.(!getDolGlobalString('FACTURE_TVAOPTION') ? " checked" : "")."> ".$langs->trans("VATIsNotUsed")."</label></td>";
799print '<td colspan="2">';
800$tooltiphelp = '';
801if ($mysoc->country_code == 'FR') {
802 $tooltiphelp = "<i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i>\n";
803}
804print '<label for="no_vat">'.$form->textwithpicto($langs->trans("VATIsNotUsedDesc"), $tooltiphelp)."</label>";
805
806print '<div class="shownifvatnotused" id="vat_exemption_code_div"'.(getDolGlobalString('FACTURE_TVAOPTION') ? ' style="display: none;"' : '').'>';
807$placeholder = (($mysoc->country_code == 'FR') ? 'VATEX-FR-FRANCHISE' : '');
808$tooltiptext = $langs->trans("VATExemptionCodeDesc").'<br>'.$langs->trans("VATExemptionCodeDesc2").'<br>'.$langs->trans("VATExemptionCodeDesc3");
809if (($mysoc->country_code == 'FR')) {
810 $tooltiptext .= '<br><br>'.$langs->trans("Example").':<br>';
811 $tooltiptext .= 'VATEX-FR-FRANCHISE, VATEX-FR-CGI261-4, VATEX-FR-J, VATEX-FR-I, VATEX-FR-D, ...';
812}
813print $form->textwithpicto($langs->trans("VATExemptionCode"), $tooltiptext, 1, 'help', 'valignmiddle', 0, 3, 'exemptioncode').' <input type="text" name="MAIN_INFO_SOCIETE_VAT_EXEMPTION_CODE" placeholder="'.$placeholder.'" value="'.getDolGlobalString('MAIN_INFO_SOCIETE_VAT_EXEMPTION_CODE').'">';
814print '</div>';
815
816print "</td></tr>\n";
817
818print "</table>";
819
820// Second tax
821print '<br>';
822print '<table class="noborder centpercent editmode">';
823print '<tr class="liste_titre">';
824print '<td class="titlefieldcreate">'.$form->textwithpicto($langs->transcountry("LocalTax1Management", $mysoc->country_code), $langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code)).'</td><td></td>';
825print '<td class="right">&nbsp;</td>';
826print "</tr>\n";
827
828if ($mysoc->useLocalTax(1)) {
829 // Note: When option is not set, it must not appears as set on on, because there is no default value for this option
830 print '<tr class="oddeven"><td><input type="radio" name="optionlocaltax1" id="lt1" value="localtax1on"'.((getDolGlobalString('FACTURE_LOCAL_TAX1_OPTION') == '1' || getDolGlobalString('FACTURE_LOCAL_TAX1_OPTION') == "localtax1on") ? " checked" : "").'> <label for="lt1">'.$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code)."</label></td>";
831 print '<td colspan="2">';
832 print '<div class="nobordernopadding">';
833 $tooltiphelp = $langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code);
834 $tooltiphelp = ($tooltiphelp != "LocalTax1IsUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code)."</i>\n" : "");
835 print $form->textwithpicto($langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code), $tooltiphelp);
836 if (!isOnlyOneLocalTax(1)) {
837 print '<br><label for="lt1">'.$langs->trans("LTRate").'</label>: ';
838 $formcompany->select_localtax(1, getDolGlobalFloat('MAIN_INFO_VALUE_LOCALTAX1'), "lt1");
839 }
840
841 $options = array($langs->trans("CalcLocaltax1").' '.$langs->trans("CalcLocaltax1Desc"), $langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc"), $langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc"));
842
843 print '<br><label for="clt1">'.$langs->trans("CalcLocaltax").'</label>: ';
844 print $form->selectarray("clt1", $options, getDolGlobalString('MAIN_INFO_LOCALTAX_CALC1'));
845 print "</div>";
846 print "</td></tr>\n";
847
848 print '<tr class="oddeven"><td><input type="radio" name="optionlocaltax1" id="nolt1" value="localtax1off"'.((!getDolGlobalString('FACTURE_LOCAL_TAX1_OPTION') || getDolGlobalString('FACTURE_LOCAL_TAX1_OPTION') == "localtax1off") ? " checked" : "").'> <label for="nolt1">'.$langs->transcountry("LocalTax1IsNotUsed", $mysoc->country_code)."</label></td>";
849 print '<td colspan="2">';
850 $tooltiphelp = $langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code);
851 $tooltiphelp = ($tooltiphelp != "LocalTax1IsNotUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code)."</i>\n" : "");
852 print $form->textwithpicto($langs->transcountry("LocalTax1IsNotUsedDesc", $mysoc->country_code), $tooltiphelp);
853 print "</td></tr>\n";
854} else {
855 if (empty($mysoc->country_code)) {
856 print '<tr class="oddeven nohover"><td class="" colspan="3">'.$countrynotdefined.'</td></tr>';
857 } else {
858 print '<tr class="oddeven nohover"><td class="" colspan="3"><span class="opacitymedium">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax1Management")).'</span></td></tr>';
859 }
860}
861
862print "</table>";
863
864// Third tax system
865print '<br>';
866print '<table class="noborder centpercent editmode">';
867print '<tr class="liste_titre">';
868print '<td class="titlefieldcreate">'.$form->textwithpicto($langs->transcountry("LocalTax2Management", $mysoc->country_code), $langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)).'</td><td></td>';
869print '<td class="right">&nbsp;</td>';
870print "</tr>\n";
871
872if ($mysoc->useLocalTax(2)) {
873 // Note: When option is not set, it must not appears as set on on, because there is no default value for this option
874 print '<tr class="oddeven"><td><input type="radio" name="optionlocaltax2" id="lt2" value="localtax2on"'.((getDolGlobalString('FACTURE_LOCAL_TAX2_OPTION') == '1' || getDolGlobalString('FACTURE_LOCAL_TAX2_OPTION') == "localtax2on") ? " checked" : "").'> <label for="lt2">'.$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code)."</label></td>";
875 print '<td colspan="2">';
876 print '<div class="nobordernopadding">';
877 print '<label for="lt2">'.$langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)."</label>";
878 $tooltiphelp = $langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code);
879 $tooltiphelp = ($tooltiphelp != "LocalTax2IsUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code)."</i>\n" : "");
880 if (!isOnlyOneLocalTax(2)) {
881 print '<br><label for="lt2">'.$langs->trans("LTRate").'</label>: ';
882 $formcompany->select_localtax(2, getDolGlobalFloat('MAIN_INFO_VALUE_LOCALTAX2'), "lt2");
883 }
884
885 $options = array($langs->trans("CalcLocaltax1").' '.$langs->trans("CalcLocaltax1Desc"), $langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc"), $langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc"));
886
887 print '<br><label for="clt2">'.$langs->trans("CalcLocaltax").'</label>: ';
888 print $form->selectarray("clt2", $options, getDolGlobalString('MAIN_INFO_LOCALTAX_CALC2'));
889 print "</div>";
890 print "</td></tr>\n";
891
892 print '<tr class="oddeven"><td><input type="radio" name="optionlocaltax2" id="nolt2" value="localtax2off"'.((!getDolGlobalString('FACTURE_LOCAL_TAX2_OPTION') || getDolGlobalString('FACTURE_LOCAL_TAX2_OPTION') == "localtax2off") ? " checked" : "").'> <label for="nolt2">'.$langs->transcountry("LocalTax2IsNotUsed", $mysoc->country_code)."</label></td>";
893 print '<td colspan="2">';
894 print "<div>";
895 $tooltiphelp = $langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code);
896 $tooltiphelp = ($tooltiphelp != "LocalTax2IsNotUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code)."</i>\n" : "");
897 print "<label for=\"nolt2\">".$form->textwithpicto($langs->transcountry("LocalTax2IsNotUsedDesc", $mysoc->country_code), $tooltiphelp)."</label>";
898 print "</div>";
899 print "</td></tr>\n";
900} else {
901 if (empty($mysoc->country_code)) {
902 print '<tr class="oddeven nohover"><td class="" colspan="3">'.$countrynotdefined.'</td></tr>';
903 } else {
904 print '<tr class="oddeven nohover"><td class="" colspan="3"><span class="opacitymedium">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax2Management")).'</span></td></tr>';
905 }
906}
907
908print "</table>";
909
910
911// Tax stamp
912print '<br>';
913print '<table class="noborder centpercent editmode">';
914print '<tr class="liste_titre">';
915print '<td>'.$form->textwithpicto($langs->trans("RevenueStamp"), $langs->trans("RevenueStampDesc")).'</td><td></td>';
916print '<td class="right">&nbsp;</td>';
917print "</tr>\n";
918if ($mysoc->useRevenueStamp()) {
919 // Note: When option is not set, it must not appears as set on on, because there is no default value for this option
920 print '<tr class="oddeven"><td>';
921 print $langs->trans("UseRevenueStamp");
922 print "</td>";
923 print '<td colspan="2">';
924 print $langs->trans("UseRevenueStampExample", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryRevenueStamp"));
925 print "</td></tr>\n";
926} else {
927 if (empty($mysoc->country_code)) {
928 print '<tr class="oddeven nohover"><td class="" colspan="3">'.$countrynotdefined.'</td></tr>';
929 } else {
930 print '<tr class="oddeven nohover"><td class="" colspan="3"><span class="opacitymedium">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryRevenueStamp"), $langs->transnoentitiesnoconv("RevenueStamp")).'</span></td></tr>';
931 }
932}
933
934print "</table>";
935
936// AADE webservices credentials, applicable only for Greece
937if ($mysoc->country_code == 'GR') {
938 print load_fiche_titre($langs->trans("AADEWebserviceCredentials"), '', '');
939 print '<table class="noborder centpercent editmode">';
940 print '<tr class="liste_titre">';
941 print '<td>'.$langs->trans("AccountParameter").'</td>';
942 print '<td></td>';
943 print '<td></td>';
944 print "</tr>\n";
945
946 print '<tr class="oddeven"><td>';
947 print '<span class="titlefield fieldrequired">'.$langs->trans("MYDATA_AADE_USER").'</span></td><td>';
948 print '<input class="minwidth300" type="text" name="MYDATA_AADE_USER" value="'.getDolGlobalString('MYDATA_AADE_USER').'"';
949 print '</td><td></td></tr>';
950
951 print '<tr class="oddeven"><td>';
952 print '<span class="titlefield fieldrequired">'.$langs->trans("MYDATA_AADE_KEY").'</span></td><td>';
953 print '<input class="minwidth300" type="password" name="MYDATA_AADE_KEY" value="'.getDolGlobalString('MYDATA_AADE_KEY').'"';
954 print '</td><td></td></tr>';
955
956 print '<tr class="oddeven"><td>';
957 print '<span class="titlefield fieldrequired">'.$langs->trans("AADE_WEBSERVICE_USER").'</span></td><td>';
958 print '<input class="minwidth300" type="text" name="AADE_WEBSERVICE_USER" value="'.getDolGlobalString('AADE_WEBSERVICE_USER').'"';
959 print '</td><td></td></tr>';
960
961 print '<tr class="oddeven"><td>';
962 print '<span class="titlefield fieldrequired">'.$langs->trans("AADE_WEBSERVICE_KEY").'</span></td><td>';
963 print '<input class="minwidth300" type="password" name="AADE_WEBSERVICE_KEY" value="'.getDolGlobalString('AADE_WEBSERVICE_KEY').'"';
964 print '</td><td></td></tr>';
965
966 print '<br>';
967
968 print "</table>";
969}
970
971print $form->buttonsSaveCancel("Save", '', array(), false, 'reposition');
972
973print '</form>';
974
975
976// End of page
977llxFooter();
978$db->close();
if(! $sortfield) if(! $sortorder) $object
Definition account.php:100
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
dolibarr_del_const($db, $name, $entity=1)
Delete a constant.
company_admin_prepare_head()
Return array head with list of tabs to view object information.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:73
isALNERunningVersion($blockedlogusagealreadychecked=0, $blockedlogmoduleonalreadychecked=0)
Return if the application is executed with the LNE requirements on.
Class to build HTML component for third parties management Only common components are here.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to help generate other html components Only common components are here.
Class to manage third parties objects (customers, suppliers, prospects...)
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
getState($id, $withcode='0', $dbtouse=null, $withregion=0, $outputlangs=null, $entconv=1)
Return state translated from an id.
global $mysoc
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disablevirusscan=0, $uploaderrorcode=0, $nohook=0, $keyforsourcefile='addedfile', $upload_dir='', $mode=0)
Check validity of a file upload from an GUI page, and move it to its final destination.
getDolGlobalFloat($key, $default=0)
Return a Dolibarr global constant float value.
isOnlyOneLocalTax($local)
Return true if LocalTax (1 or 2) is unique.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
getDolCurrency()
Return the main currency ('EUR', 'USD', ...)
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
Definition html.lib.php:540
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
Show information in HTML for admin users or standard users.
vignette($file, $maxWidth=160, $maxHeight=120, $extName='_small', $quality=50, $outdir='thumbs', $targetformat=0)
Create a thumbnail from an image file (Supported extensions are gif, jpg, png and bmp).
getListOfPossibleImageExt($acceptsvg=0)
Return if a filename is file name of a supported image format.
if(!defined( 'IMAGETYPE_WEBP')) getDefaultImageSizes()
Return default values for image sizes.
image_format_supported($file, $acceptsvg=0)
Return if a filename is file name of a supported image format.
getMaxFileSizeArray()
Return the max allowed for file upload.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.