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-2025 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 (preg_match('/^ErrorFileIsInfectedWithAVirus/', $result)) {
218 $error++;
219 $langs->load("errors");
220 $tmparray = explode(':', $result);
221 setEventMessages($langs->trans('ErrorFileIsInfectedWithAVirus', $tmparray[1]), null, 'errors');
222 } elseif (preg_match('/^ErrorFileSizeTooLarge/', $result)) {
223 $error++;
224 setEventMessages($langs->trans("ErrorFileSizeTooLarge"), null, 'errors');
225 } else {
226 $error++;
227 setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors');
228 }
229 } else {
230 $error++;
231 $langs->load("errors");
232 setEventMessages($langs->trans("ErrorBadImageFormat"), null, 'errors');
233 }
234 }
235 /*}*/
236 }
237
238 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_MANAGERS", GETPOST("MAIN_INFO_SOCIETE_MANAGERS", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
239 dolibarr_set_const($db, "MAIN_INFO_GDPR", GETPOST("MAIN_INFO_GDPR", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
240 dolibarr_set_const($db, "MAIN_INFO_CAPITAL", GETPOST("capital", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
241 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_FORME_JURIDIQUE", GETPOST("forme_juridique_code", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
242 dolibarr_set_const($db, "MAIN_INFO_SIREN", GETPOST("siren", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
243 dolibarr_set_const($db, "MAIN_INFO_SIRET", GETPOST("siret", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
244 dolibarr_set_const($db, "MAIN_INFO_APE", GETPOST("ape", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
245 dolibarr_set_const($db, "MAIN_INFO_RCS", GETPOST("rcs", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
246 dolibarr_set_const($db, "MAIN_INFO_PROFID5", GETPOST("MAIN_INFO_PROFID5", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
247 dolibarr_set_const($db, "MAIN_INFO_PROFID6", GETPOST("MAIN_INFO_PROFID6", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
248 dolibarr_set_const($db, "MAIN_INFO_PROFID7", GETPOST("MAIN_INFO_PROFID7", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
249 dolibarr_set_const($db, "MAIN_INFO_PROFID8", GETPOST("MAIN_INFO_PROFID8", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
250 dolibarr_set_const($db, "MAIN_INFO_PROFID9", GETPOST("MAIN_INFO_PROFID9", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
251 dolibarr_set_const($db, "MAIN_INFO_PROFID10", GETPOST("MAIN_INFO_PROFID10", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
252
253 dolibarr_set_const($db, "MAIN_INFO_TVAINTRA", GETPOST("tva", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
254 dolibarr_set_const($db, "MAIN_INFO_SOCIETE_OBJECT", GETPOST("socialobject", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
255
256 dolibarr_set_const($db, "SOCIETE_FISCAL_MONTH_START", GETPOSTINT("SOCIETE_FISCAL_MONTH_START"), 'chaine', 0, '', $conf->entity);
257
258 // Sale tax options
259 $usevat = GETPOST("optiontva", 'aZ09');
260 $uselocaltax1 = GETPOST("optionlocaltax1", 'aZ09');
261 $uselocaltax2 = GETPOST("optionlocaltax2", 'aZ09');
262 if ($uselocaltax1 == 'localtax1on' && !$usevat) {
263 setEventMessages($langs->trans("IfYouUseASecondTaxYouMustSetYouUseTheMainTax"), null, 'errors');
264 $error++;
265 }
266 if ($uselocaltax2 == 'localtax2on' && !$usevat) {
267 setEventMessages($langs->trans("IfYouUseAThirdTaxYouMustSetYouUseTheMainTax"), null, 'errors');
268 $error++;
269 }
270
271 dolibarr_set_const($db, "FACTURE_TVAOPTION", $usevat, 'chaine', 0, '', $conf->entity);
272 dolibarr_set_const($db, "FACTURE_LOCAL_TAX1_OPTION", $uselocaltax1, 'chaine', 0, '', $conf->entity);
273 dolibarr_set_const($db, "FACTURE_LOCAL_TAX2_OPTION", $uselocaltax2, 'chaine', 0, '', $conf->entity);
274
275 if (GETPOST("optionlocaltax1") == "localtax1on") {
276 if (!GETPOSTISSET('lt1')) {
277 dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX1", 0, 'chaine', 0, '', $conf->entity);
278 } else {
279 dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX1", GETPOST('lt1', 'aZ09'), 'chaine', 0, '', $conf->entity);
280 }
281 dolibarr_set_const($db, "MAIN_INFO_LOCALTAX_CALC1", GETPOST("clt1", 'aZ09'), 'chaine', 0, '', $conf->entity);
282 }
283 if (GETPOST("optionlocaltax2") == "localtax2on") {
284 if (!GETPOSTISSET('lt2')) {
285 dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX2", 0, 'chaine', 0, '', $conf->entity);
286 } else {
287 dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX2", GETPOST('lt2', 'aZ09'), 'chaine', 0, '', $conf->entity);
288 }
289 dolibarr_set_const($db, "MAIN_INFO_LOCALTAX_CALC2", GETPOST("clt2", 'aZ09'), 'chaine', 0, '', $conf->entity);
290 }
291
292 // Credentials for AADE webservices, applicable only for Greece
293 if ($mysoc->country_code == 'GR') {
294 dolibarr_set_const($db, "MYDATA_AADE_USER", GETPOST("MYDATA_AADE_USER", 'alpha'), 'chaine', 0, '', $conf->entity);
295 dolibarr_set_const($db, "MYDATA_AADE_KEY", GETPOST("MYDATA_AADE_KEY", 'alpha'), 'chaine', 0, '', $conf->entity);
296 dolibarr_set_const($db, "AADE_WEBSERVICE_USER", GETPOST("AADE_WEBSERVICE_USER", 'alpha'), 'chaine', 0, '', $conf->entity);
297 dolibarr_set_const($db, "AADE_WEBSERVICE_KEY", GETPOST("AADE_WEBSERVICE_KEY", 'alpha'), 'chaine', 0, '', $conf->entity);
298 }
299
300 // Remove constant MAIN_INFO_SOCIETE_SETUP_TODO_WARNING
301 dolibarr_del_const($db, "MAIN_INFO_SOCIETE_SETUP_TODO_WARNING", $conf->entity);
302
303 if (!$error) {
304 if (GETPOST('save')) { // To avoid to show message when we juste switch the country that resubmit the form.
305 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
306 }
307 $db->commit();
308 } else {
309 $db->rollback();
310 }
311
312 if ($action != 'updateedit' && !$error) {
313 header("Location: ".$_SERVER["PHP_SELF"].($page_y ? '?page_y='.$page_y : ''));
314 exit;
315 }
316}
317
318if ($action == 'addthumb' || $action == 'addthumbsquarred') { // Regenerate thumbs
319 if (file_exists($conf->mycompany->dir_output.'/logos/'.GETPOST("file"))) {
320 $isimage = image_format_supported(GETPOST("file"));
321
322 // Create thumbs of logo
323 if ($isimage > 0) {
324 $constant = "MAIN_INFO_SOCIETE_LOGO";
325 if ($action == 'addthumbsquarred') {
326 $constant = "MAIN_INFO_SOCIETE_LOGO_SQUARRED";
327 }
328
329 $reg = array();
330
331 // Create thumbs
332 //$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...
333
334 // Create small thumb. Used on logon for example
335 $imgThumbSmall = vignette($conf->mycompany->dir_output.'/logos/'.GETPOST("file"), $maxwidthsmall, $maxheightsmall, '_small', $quality);
336 if (image_format_supported($imgThumbSmall) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbSmall, $reg)) {
337 $imgThumbSmall = $reg[1]; // Save only basename
338 dolibarr_set_const($db, $constant."_SMALL", $imgThumbSmall, 'chaine', 0, '', $conf->entity);
339 } else {
340 dol_syslog($imgThumbSmall);
341 }
342
343 // Create mini thumbs. Used on menu or for setup page for example
344 $imgThumbMini = vignette($conf->mycompany->dir_output.'/logos/'.GETPOST("file"), $maxwidthmini, $maxheightmini, '_mini', $quality);
345 if (image_format_supported($imgThumbSmall) >= 0 && preg_match('/([^\\/:]+)$/i', $imgThumbMini, $reg)) {
346 $imgThumbMini = $reg[1]; // Save only basename
347 dolibarr_set_const($db, $constant."_MINI", $imgThumbMini, 'chaine', 0, '', $conf->entity);
348 } else {
349 dol_syslog($imgThumbMini);
350 }
351
352 header("Location: ".$_SERVER["PHP_SELF"]);
353 exit;
354 } else {
355 $error++;
356 $langs->load("errors");
357 setEventMessages($langs->trans("ErrorBadImageFormat"), null, 'errors');
358 dol_syslog($langs->transnoentities("ErrorBadImageFormat"), LOG_INFO);
359 }
360 } else {
361 $error++;
362 $langs->load("errors");
363 setEventMessages($langs->trans("ErrorFileDoesNotExists", GETPOST("file")), null, 'errors');
364 dol_syslog($langs->transnoentities("ErrorFileDoesNotExists", GETPOST("file")), LOG_WARNING);
365 }
366}
367
368
369if ($action == 'removelogo' || $action == 'removelogo_squarred') {
370 $constant = "MAIN_INFO_SOCIETE_LOGO";
371 if ($action == 'removelogo_squarred') {
372 $constant = "MAIN_INFO_SOCIETE_LOGO_SQUARRED";
373 }
374
375 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
376
377 $logofilename = $mysoc->logo;
378 $logofilenamebis = $mysoc->logo_squarred;
379 if ($action == 'removelogo_squarred') {
380 $logofilename = $mysoc->logo_squarred;
381 $logofilenamebis = $mysoc->logo;
382 }
383
384 $logofile = $conf->mycompany->dir_output.'/logos/'.$logofilename;
385 if ($logofilename != '' && $logofilename != $logofilenamebis) {
386 dol_delete_file($logofile);
387 }
388 dolibarr_del_const($db, $constant, $conf->entity);
389 if ($action == 'removelogo_squarred') {
390 $mysoc->logo_squarred = '';
391 } else {
392 $mysoc->logo = '';
393 }
394
395 $logofilename = $mysoc->logo_small;
396 $logofilenamebis = $mysoc->logo_squarred_small;
397 if ($action == 'removelogo_squarred') {
398 $logofilename = $mysoc->logo_squarred_small;
399 $logofilenamebis = $mysoc->logo_small;
400 }
401
402 $logosmallfile = $conf->mycompany->dir_output.'/logos/thumbs/'.$logofilename;
403 if ($logofilename != '' && $logofilename != $logofilenamebis) {
404 dol_delete_file($logosmallfile);
405 }
406 dolibarr_del_const($db, $constant."_SMALL", $conf->entity);
407 if ($action == 'removelogo_squarred') {
408 $mysoc->logo_squarred_small = '';
409 } else {
410 $mysoc->logo_small = '';
411 }
412
413 $logofilename = $mysoc->logo_mini;
414 $logofilenamebis = $mysoc->logo_squarred_mini;
415 if ($action == 'removelogo_squarred') {
416 $logofilename = $mysoc->logo_squarred_mini;
417 $logofilenamebis = $mysoc->logo_mini;
418 }
419
420 $logominifile = $conf->mycompany->dir_output.'/logos/thumbs/'.$logofilename;
421 if ($logofilename != '' && $logofilename != $logofilenamebis) {
422 dol_delete_file($logominifile);
423 }
424 dolibarr_del_const($db, $constant."_MINI", $conf->entity);
425 if ($action == 'removelogo_squarred') {
426 $mysoc->logo_squarred_mini = '';
427 } else {
428 $mysoc->logo_mini = '';
429 }
430}
431
432
433/*
434 * View
435 */
436
437$wikihelp = 'EN:First_setup|FR:Premiers_paramétrages|ES:Primeras_configuraciones';
438llxHeader('', $langs->trans("Setup"), $wikihelp, '', 0, 0, '', '', '', 'mod-admin page-company');
439
440$form = new Form($db);
441$formother = new FormOther($db);
442$formcompany = new FormCompany($db);
443$formfile = new FormFile($db);
444
445$countrynotdefined = '<span class="error">'.$langs->trans("ErrorSetACountryFirst").' <a href="" onclick="window.scrollTo({top: 0, behavior: \'smooth\'}); return false;">('.$langs->trans("SeeAbove").')</a></span>';
446
447print load_fiche_titre($langs->trans("CompanyFoundation"), '', 'title_setup');
448
450
451print dol_get_fiche_head($head, 'company', '', -1, '');
452
453print '<div class="'.($setupcompanynotcomplete ? 'warning' : 'info').'">'.$langs->trans("CompanyFundationDesc", $langs->transnoentities("Save"))."</div>\n";
454print "<br>\n";
455
456
457// Edit parameters
458
459if (!empty($conf->use_javascript_ajax)) {
460 print "\n".'<script type="text/javascript">';
461 print '$(document).ready(function () {
462 $("#selectcountry_id").change(function() {
463 console.log("selectcountry_id change");
464 document.form_index.action.value="updateedit";
465 document.form_index.submit();
466 });
467
468 // Show/hide VAT exemption code field based on VAT option
469 $("input[name=\"optiontva\"]").change(function() {
470 if ($(this).val() == "0") {
471 $("#vat_exemption_code_div").show();
472 } else {
473 $("#vat_exemption_code_div").hide();
474 }
475 });
476 });';
477 print '</script>'."\n";
478}
479
480print '<form enctype="multipart/form-data" method="POST" action="'.$_SERVER["PHP_SELF"].'" name="form_index" spellcheck="false">';
481print '<input type="hidden" name="token" value="'.newToken().'">';
482print '<input type="hidden" name="action" value="update">';
483print '<input type="hidden" name="page_y" value="">';
484
485print '<table class="noborder centpercent editmode">';
486print '<tr class="liste_titre"><th class="wordbreak" colspan="2">'.$langs->trans("CompanyInfo").'</th></tr>'."\n";
487
488// Company name
489print '<tr class="oddeven"><td class="fieldrequired titlefieldcreate wordbreak"><label for="name">'.$langs->trans("CompanyName").'</label></td><td>';
490print '<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";
491
492// Main currency
493print '<tr class="oddeven"><td class="fieldrequired"><label for="currency">'.$langs->trans("CompanyCurrency").'</label></td><td>';
494print img_picto('', 'multicurrency', 'class="pictofixedwidth"');
495print $form->selectCurrency(getDolCurrency(), "currency", 2);
496print '</td></tr>'."\n";
497
498// Country
499print '<tr class="oddeven"><td class="fieldrequired"><label for="selectcountry_id">'.$langs->trans("Country").'</label></td><td>';
500print img_picto('', 'globe-americas', 'class="pictofixedwidth"');
501print $form->select_country((string) $mysoc->country_id, 'country_id', '', 0);
502print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
503print '</td></tr>'."\n";
504
505// Address
506print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_ADDRESS">'.$langs->trans("CompanyAddress").'</label></td><td>';
507print '<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";
508
509// Zip
510print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_ZIP">'.$langs->trans("CompanyZip").'</label></td><td>';
511print '<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";
512
513print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_TOWN">'.$langs->trans("CompanyTown").'</label></td><td>';
514print '<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";
515
516// State
517print '<tr class="oddeven"><td class="wordbreak"><label for="state_id">'.$langs->trans("State").'</label></td><td>';
518$state_id = 0;
519if (getDolGlobalString('MAIN_INFO_SOCIETE_STATE')) {
520 $tmp = explode(':', getDolGlobalString('MAIN_INFO_SOCIETE_STATE'));
521 $state_id = $tmp[0];
522}
523print img_picto('', 'state', 'class="pictofixedwidth"');
524print $formcompany->select_state($state_id, $mysoc->country_code, 'state_id', 'maxwidth200onsmartphone minwidth300');
525print '</td></tr>'."\n";
526
527// Phone
528print '<tr class="oddeven"><td><label for="phone">'.$langs->trans("Phone").'</label></td><td>';
529print img_picto('', 'object_phoning', '', 0, 0, 0, '', 'pictofixedwidth');
530print '<input class="maxwidth150 widthcentpercentminusx" name="phone" id="phone" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('phone') ? GETPOST('phone', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_TEL'))).'"></td></tr>';
531print '</td></tr>'."\n";
532
533// Phone mobile
534print '<tr class="oddeven"><td><label for="phone">'.$langs->trans("PhoneMobile").'</label></td><td>';
535print img_picto('', 'object_phoning_mobile', '', 0, 0, 0, '', 'pictofixedwidth');
536print '<input class="maxwidth150 widthcentpercentminusx" name="phone_mobile" id="phone_mobile" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('phone_mobile') ? GETPOST('phone_mobile', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_MOBILE'))).'"></td></tr>';
537print '</td></tr>'."\n";
538
539// Fax
540print '<tr class="oddeven"><td><label for="fax">'.$langs->trans("Fax").'</label></td><td>';
541print img_picto('', 'object_phoning_fax', '', 0, 0, 0, '', 'pictofixedwidth');
542print '<input class="maxwidth150" name="fax" id="fax" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('fax') ? GETPOST('fax', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_FAX'))).'"></td></tr>';
543print '</td></tr>'."\n";
544
545// Email
546print '<tr class="oddeven"><td><label for="email">'.$langs->trans("EMail").'</label></td><td>';
547print img_picto('', 'object_email', '', 0, 0, 0, '', 'pictofixedwidth');
548print '<input class="minwidth300 maxwidth500 widthcentpercentminusx" name="mail" id="email" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('mail') ? GETPOST('mail', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_MAIL'))).'"></td></tr>';
549print '</td></tr>'."\n";
550
551// Web
552print '<tr class="oddeven"><td><label for="web">'.$langs->trans("Web").'</label></td><td>';
553print img_picto('', 'globe', '', 0, 0, 0, '', 'pictofixedwidth');
554print '<input class="maxwidth300 widthcentpercentminusx" name="web" id="web" value="'.dol_escape_htmltag((GETPOSTISSET('web') ? GETPOST('web', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_WEB'))).'"></td></tr>';
555print '</td></tr>'."\n";
556
557// Barcode
558if (isModEnabled('barcode')) {
559 print '<tr class="oddeven"><td>';
560 print '<label for="barcode">'.$langs->trans("Gencod").'</label></td><td>';
561 print '<span class="fa fa-barcode pictofixedwidth"></span>';
562 print '<input name="barcode" id="barcode" class="minwidth150 widthcentpercentminusx maxwidth300" value="'.dolPrintHTMLForAttribute(GETPOSTISSET('barcode') ? GETPOST('barcode', 'alphanohtml') : getDolGlobalString('MAIN_INFO_SOCIETE_GENCOD')).'"></td></tr>';
563 print '</td></tr>';
564}
565
566// Tooltip for both Logo and LogSquarred
567$maxfilesizearray = getMaxFileSizeArray();
568$maxmin = $maxfilesizearray['maxmin'];
569$tooltiplogo = $langs->trans('AvailableFormats').' : png, jpg, jpeg';
570$tooltiplogo .= ($maxmin > 0) ? '<br>'.$langs->trans('MaxSize').' : '.$maxmin.' '.$langs->trans('Kb') : '';
571
572// Logo
573print '<tr class="oddeven"><td><label for="logo">'.$form->textwithpicto($langs->trans("Logo"), $tooltiplogo).'</label></td><td>';
574
575$modulepart = 'mycompany';
576$dirformainimage = $conf->mycompany->dir_output;
577$subdirformainimage = 'logos/';
578$fileformainimage = $mysoc->logo;
579
580print $formfile->showImageToEdit('logo', $modulepart, $dirformainimage, $subdirformainimage, $fileformainimage);
581
582print '</td></tr>';
583
584// Logo (squarred)
585print '<tr class="oddeven"><td><label for="logo_squarred">'.$form->textwithpicto($langs->trans("LogoSquarred"), $tooltiplogo).'</label></td><td>';
586
587$modulepart = 'mycompany';
588$dirformainimage = $conf->mycompany->dir_output;
589$subdirformainimage = 'logos/';
590$fileformainimage = $mysoc->logo_squarred;
591
592print $formfile->showImageToEdit('logo_squarred', $modulepart, $dirformainimage, $subdirformainimage, $fileformainimage);
593
594print '</td></tr>';
595
596// Note
597print '<tr class="oddeven"><td class="tdtop"><label for="note">'.$langs->trans("Note").'</label></td><td>';
598print '<textarea class="flat quatrevingtpercent" name="note" id="note" rows="'.ROWS_5.'">'.(GETPOSTISSET('note') ? GETPOST('note', 'restricthtml') : getDolGlobalString('MAIN_INFO_SOCIETE_NOTE')).'</textarea></td></tr>';
599print '</td></tr>';
600
601print '</table>';
602
603print $form->buttonsSaveCancel("Save", '', array(), false, 'reposition');
604
605print '<br><br>';
606
607
608// IDs of the company (country-specific)
609print '<div class="div-table-responsive-no-min">';
610print '<table class="noborder centpercent editmode">';
611print '<tr class="liste_titre"><td class="wordbreak" colspan="2">'.$langs->trans("CompanyIds").'</td></tr>';
612
613$langs->load("companies");
614
615// Managing Director(s)
616print '<tr class="oddeven"><td class="titlefieldcreate smallheight"><label for="director">'.$langs->trans("ManagingDirectors").'</label></td><td>';
617print '<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>';
618
619// GDPR contact
620print '<tr class="oddeven"><td class="smallheight">';
621print $form->textwithpicto($langs->trans("GDPRContact"), $langs->trans("GDPRContactDesc"));
622print '</td><td>';
623print '<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>';
624
625// Capital
626print '<tr class="oddeven"><td><label for="capital">'.$langs->trans("Capital").'</label></td><td>';
627print '<input name="capital" id="capital" class="maxwidth100" value="'.dolPrintHTMLForAttribute((GETPOSTISSET('capital') ? GETPOST('capital', 'alphanohtml') : getDolGlobalString('MAIN_INFO_CAPITAL'))).'"></td></tr>';
628
629// Object of the company
630print '<tr class="oddeven"><td><label for="socialobject">'.$langs->trans("CompanyObject").'</label></td><td>';
631print '<textarea class="flat quatrevingtpercent" name="socialobject" id="socialobject" rows="'.ROWS_3.'">'.getDolGlobalString('MAIN_INFO_SOCIETE_OBJECT').'</textarea></td></tr>';
632print '</td></tr>';
633
634// Tax ID Intra-community VAT number
635print '<tr class="oddeven"><td><label for="intra_vat">'.$langs->trans("VATIntra").'</label></td><td>';
636print '<input name="tva" id="intra_vat" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_TVAINTRA')).'">';
637print '</td></tr>';
638
639// Juridical Status
640print '<tr class="oddeven"><td><label for="forme_juridique_code">'.$langs->trans("JuridicalStatus").'</label></td><td>';
641if ($mysoc->country_code) {
642 print $formcompany->select_juridicalstatus(getDolGlobalInt('MAIN_INFO_SOCIETE_FORME_JURIDIQUE'), $mysoc->country_code, '', 'forme_juridique_code');
643} else {
644 print $countrynotdefined;
645}
646print '</td></tr>';
647
648// ProfId1
649if ($langs->transcountry("ProfId1", $mysoc->country_code) != '-') {
650 print '<tr class="oddeven"><td><label for="profid1">'.$langs->transcountry("ProfId1", $mysoc->country_code).'</label></td><td>';
651 if (!empty($mysoc->country_code)) {
652 print '<input name="siren" id="profid1" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_SIREN')).'">';
653 } else {
654 print $countrynotdefined;
655 }
656 print '</td></tr>';
657}
658
659// ProfId2
660if ($langs->transcountry("ProfId2", $mysoc->country_code) != '-') {
661 print '<tr class="oddeven"><td><label for="profid2">'.$langs->transcountry("ProfId2", $mysoc->country_code).'</label></td><td>';
662 if (!empty($mysoc->country_code)) {
663 print '<input name="siret" id="profid2" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_SIRET')).'">';
664 } else {
665 print $countrynotdefined;
666 }
667 print '</td></tr>';
668}
669
670// ProfId3
671if ($langs->transcountry("ProfId3", $mysoc->country_code) != '-') {
672 print '<tr class="oddeven"><td><label for="profid3">'.$langs->transcountry("ProfId3", $mysoc->country_code).'</label></td><td>';
673 if (!empty($mysoc->country_code)) {
674 print '<input name="ape" id="profid3" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_APE')).'">';
675 } else {
676 print $countrynotdefined;
677 }
678 print '</td></tr>';
679}
680
681// ProfId4
682if ($langs->transcountry("ProfId4", $mysoc->country_code) != '-') {
683 print '<tr class="oddeven"><td><label for="profid4">'.$langs->transcountry("ProfId4", $mysoc->country_code).'</label></td><td>';
684 if (!empty($mysoc->country_code)) {
685 print '<input name="rcs" id="profid4" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_RCS')).'">';
686 } else {
687 print $countrynotdefined;
688 }
689 print '</td></tr>';
690}
691
692// ProfId5
693if ($langs->transcountry("ProfId5", $mysoc->country_code) != '-') {
694 print '<tr class="oddeven"><td><label for="profid5">'.$langs->transcountry("ProfId5", $mysoc->country_code).'</label></td><td>';
695 if (!empty($mysoc->country_code)) {
696 print '<input name="MAIN_INFO_PROFID5" id="profid5" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID5')).'">';
697 } else {
698 print $countrynotdefined;
699 }
700 print '</td></tr>';
701}
702
703// ProfId6
704if ($langs->transcountry("ProfId6", $mysoc->country_code) != '-') {
705 print '<tr class="oddeven"><td><label for="profid6">'.$langs->transcountry("ProfId6", $mysoc->country_code).'</label></td><td>';
706 if (!empty($mysoc->country_code)) {
707 print '<input name="MAIN_INFO_PROFID6" id="profid6" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID6')).'">';
708 } else {
709 print $countrynotdefined;
710 }
711 print '</td></tr>';
712}
713
714// ProfId7
715if ($langs->transcountry("ProfId7", $mysoc->country_code) != '-') {
716 print '<tr class="oddeven"><td><label for="profid7">'.$langs->transcountry("ProfId7", $mysoc->country_code).'</label></td><td>';
717 if (!empty($mysoc->country_code)) {
718 print '<input name="MAIN_INFO_PROFID7" id="profid7" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID7')).'">';
719 } else {
720 print $countrynotdefined;
721 }
722 print '</td></tr>';
723}
724
725// ProfId8
726if ($langs->transcountry("ProfId8", $mysoc->country_code) != '-') {
727 print '<tr class="oddeven"><td><label for="profid8">'.$langs->transcountry("ProfId8", $mysoc->country_code).'</label></td><td>';
728 if (!empty($mysoc->country_code)) {
729 print '<input name="MAIN_INFO_PROFID8" id="profid8" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID8')).'">';
730 } else {
731 print $countrynotdefined;
732 }
733 print '</td></tr>';
734}
735
736// ProfId9
737if ($langs->transcountry("ProfId9", $mysoc->country_code) != '-') {
738 print '<tr class="oddeven"><td><label for="profid9">'.$langs->transcountry("ProfId9", $mysoc->country_code).'</label></td><td>';
739 if (!empty($mysoc->country_code)) {
740 print '<input name="MAIN_INFO_PROFID9" id="profid9" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID9')).'">';
741 } else {
742 print $countrynotdefined;
743 }
744 print '</td></tr>';
745}
746
747// ProfId10
748if ($langs->transcountry("ProfId10", $mysoc->country_code) != '-') {
749 print '<tr class="oddeven"><td><label for="profid10">'.$langs->transcountry("ProfId10", $mysoc->country_code).'</label></td><td>';
750 if (!empty($mysoc->country_code)) {
751 print '<input name="MAIN_INFO_PROFID10" id="profid10" class="minwidth200" value="'.dolPrintHTMLForAttribute(getDolGlobalString('MAIN_INFO_PROFID10')).'">';
752 } else {
753 print $countrynotdefined;
754 }
755 print '</td></tr>';
756}
757
758print '</table>';
759print '</div>';
760
761
762// Fiscal year start
763print '<br>';
764print '<table class="noborder centpercent editmode">';
765print '<tr class="liste_titre">';
766print '<td class="titlefieldcreate">'.$langs->trans("FiscalYearInformation").'</td><td></td>';
767print "</tr>\n";
768
769print '<tr class="oddeven"><td><label for="SOCIETE_FISCAL_MONTH_START">'.$langs->trans("FiscalMonthStart").'</label></td><td>';
770print $formother->select_month(getDolGlobalString('SOCIETE_FISCAL_MONTH_START'), 'SOCIETE_FISCAL_MONTH_START', 0, 1, 'maxwidth100').'</td></tr>';
771
772print "</table>";
773
774print $form->buttonsSaveCancel("Save", '', array(), false, 'reposition');
775
776print '<br>';
777
778
779// Sales taxes (VAT, IRPF, ...)
780print load_fiche_titre($langs->trans("TypeOfSaleTaxes"), '', 'object_payment');
781
782print '<table class="noborder centpercent editmode">';
783print '<tr class="liste_titre">';
784print '<td class="titlefieldcreate">'.$langs->trans("VATManagement").'</td><td></td>';
785print '<td class="right">&nbsp;</td>';
786print "</tr>\n";
787
788// Main tax
789print '<tr class="oddeven"><td><label><input type="radio" name="optiontva" id="use_vat" value="1"'.(!getDolGlobalString('FACTURE_TVAOPTION') ? "" : " checked")."> ".$langs->trans("VATIsUsed")."</label></td>";
790print '<td colspan="2">';
791$tooltiphelp = $langs->trans("VATIsUsedDesc");
792if ($mysoc->country_code == 'FR') {
793 $tooltiphelp .= '<br><br><i>'.$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i>";
794}
795print '<label for="use_vat">'.$form->textwithpicto($langs->trans("VATIsUsedStandard"), $tooltiphelp)."</label>";
796print "</td></tr>\n";
797
798
799print '<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>";
800print '<td colspan="2">';
801$tooltiphelp = '';
802if ($mysoc->country_code == 'FR') {
803 $tooltiphelp = "<i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i>\n";
804}
805print '<label for="no_vat">'.$form->textwithpicto($langs->trans("VATIsNotUsedDesc"), $tooltiphelp)."</label>";
806
807print '<div class="shownifvatnotused" id="vat_exemption_code_div"'.(getDolGlobalString('FACTURE_TVAOPTION') ? ' style="display: none;"' : '').'>';
808$placeholder = (($mysoc->country_code == 'FR') ? 'VATEX-FR-FRANCHISE' : '');
809$tooltiptext = $langs->trans("VATExemptionCodeDesc").'<br>'.$langs->trans("VATExemptionCodeDesc2").'<br>'.$langs->trans("VATExemptionCodeDesc3");
810if (($mysoc->country_code == 'FR')) {
811 $tooltiptext .= '<br><br>'.$langs->trans("Example").':<br>';
812 $tooltiptext .= 'VATEX-FR-FRANCHISE, VATEX-FR-CGI261-4, VATEX-FR-J, VATEX-FR-I, VATEX-FR-D, ...';
813}
814print $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').'">';
815print '</div>';
816
817print "</td></tr>\n";
818
819print "</table>";
820
821// Second tax
822print '<br>';
823print '<table class="noborder centpercent editmode">';
824print '<tr class="liste_titre">';
825print '<td class="titlefieldcreate">'.$form->textwithpicto($langs->transcountry("LocalTax1Management", $mysoc->country_code), $langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code)).'</td><td></td>';
826print '<td class="right">&nbsp;</td>';
827print "</tr>\n";
828
829if ($mysoc->useLocalTax(1)) {
830 // Note: When option is not set, it must not appears as set on on, because there is no default value for this option
831 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>";
832 print '<td colspan="2">';
833 print '<div class="nobordernopadding">';
834 $tooltiphelp = $langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code);
835 $tooltiphelp = ($tooltiphelp != "LocalTax1IsUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code)."</i>\n" : "");
836 print $form->textwithpicto($langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code), $tooltiphelp);
837 if (!isOnlyOneLocalTax(1)) {
838 print '<br><label for="lt1">'.$langs->trans("LTRate").'</label>: ';
839 $formcompany->select_localtax(1, getDolGlobalFloat('MAIN_INFO_VALUE_LOCALTAX1'), "lt1");
840 }
841
842 $options = array($langs->trans("CalcLocaltax1").' '.$langs->trans("CalcLocaltax1Desc"), $langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc"), $langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc"));
843
844 print '<br><label for="clt1">'.$langs->trans("CalcLocaltax").'</label>: ';
845 print $form->selectarray("clt1", $options, getDolGlobalString('MAIN_INFO_LOCALTAX_CALC1'));
846 print "</div>";
847 print "</td></tr>\n";
848
849 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>";
850 print '<td colspan="2">';
851 $tooltiphelp = $langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code);
852 $tooltiphelp = ($tooltiphelp != "LocalTax1IsNotUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code)."</i>\n" : "");
853 print $form->textwithpicto($langs->transcountry("LocalTax1IsNotUsedDesc", $mysoc->country_code), $tooltiphelp);
854 print "</td></tr>\n";
855} else {
856 if (empty($mysoc->country_code)) {
857 print '<tr class="oddeven nohover"><td class="" colspan="3">'.$countrynotdefined.'</td></tr>';
858 } else {
859 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>';
860 }
861}
862
863print "</table>";
864
865// Third tax system
866print '<br>';
867print '<table class="noborder centpercent editmode">';
868print '<tr class="liste_titre">';
869print '<td class="titlefieldcreate">'.$form->textwithpicto($langs->transcountry("LocalTax2Management", $mysoc->country_code), $langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)).'</td><td></td>';
870print '<td class="right">&nbsp;</td>';
871print "</tr>\n";
872
873if ($mysoc->useLocalTax(2)) {
874 // Note: When option is not set, it must not appears as set on on, because there is no default value for this option
875 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>";
876 print '<td colspan="2">';
877 print '<div class="nobordernopadding">';
878 print '<label for="lt2">'.$langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)."</label>";
879 $tooltiphelp = $langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code);
880 $tooltiphelp = ($tooltiphelp != "LocalTax2IsUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code)."</i>\n" : "");
881 if (!isOnlyOneLocalTax(2)) {
882 print '<br><label for="lt2">'.$langs->trans("LTRate").'</label>: ';
883 $formcompany->select_localtax(2, getDolGlobalFloat('MAIN_INFO_VALUE_LOCALTAX2'), "lt2");
884 }
885
886 $options = array($langs->trans("CalcLocaltax1").' '.$langs->trans("CalcLocaltax1Desc"), $langs->trans("CalcLocaltax2").' - '.$langs->trans("CalcLocaltax2Desc"), $langs->trans("CalcLocaltax3").' - '.$langs->trans("CalcLocaltax3Desc"));
887
888 print '<br><label for="clt2">'.$langs->trans("CalcLocaltax").'</label>: ';
889 print $form->selectarray("clt2", $options, getDolGlobalString('MAIN_INFO_LOCALTAX_CALC2'));
890 print "</div>";
891 print "</td></tr>\n";
892
893 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>";
894 print '<td colspan="2">';
895 print "<div>";
896 $tooltiphelp = $langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code);
897 $tooltiphelp = ($tooltiphelp != "LocalTax2IsNotUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code)."</i>\n" : "");
898 print "<label for=\"nolt2\">".$form->textwithpicto($langs->transcountry("LocalTax2IsNotUsedDesc", $mysoc->country_code), $tooltiphelp)."</label>";
899 print "</div>";
900 print "</td></tr>\n";
901} else {
902 if (empty($mysoc->country_code)) {
903 print '<tr class="oddeven nohover"><td class="" colspan="3">'.$countrynotdefined.'</td></tr>';
904 } else {
905 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>';
906 }
907}
908
909print "</table>";
910
911
912// Tax stamp
913print '<br>';
914print '<table class="noborder centpercent editmode">';
915print '<tr class="liste_titre">';
916print '<td>'.$form->textwithpicto($langs->trans("RevenueStamp"), $langs->trans("RevenueStampDesc")).'</td><td></td>';
917print '<td class="right">&nbsp;</td>';
918print "</tr>\n";
919if ($mysoc->useRevenueStamp()) {
920 // Note: When option is not set, it must not appears as set on on, because there is no default value for this option
921 print '<tr class="oddeven"><td>';
922 print $langs->trans("UseRevenueStamp");
923 print "</td>";
924 print '<td colspan="2">';
925 print $langs->trans("UseRevenueStampExample", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryRevenueStamp"));
926 print "</td></tr>\n";
927} else {
928 if (empty($mysoc->country_code)) {
929 print '<tr class="oddeven nohover"><td class="" colspan="3">'.$countrynotdefined.'</td></tr>';
930 } else {
931 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>';
932 }
933}
934
935print "</table>";
936
937// AADE webservices credentials, applicable only for Greece
938if ($mysoc->country_code == 'GR') {
939 print load_fiche_titre($langs->trans("AADEWebserviceCredentials"), '', '');
940 print '<table class="noborder centpercent editmode">';
941 print '<tr class="liste_titre">';
942 print '<td>'.$langs->trans("AccountParameter").'</td>';
943 print '<td></td>';
944 print '<td></td>';
945 print "</tr>\n";
946
947 print '<tr class="oddeven"><td>';
948 print '<span class="titlefield fieldrequired">'.$langs->trans("MYDATA_AADE_USER").'</span></td><td>';
949 print '<input class="minwidth300" type="text" name="MYDATA_AADE_USER" value="'.getDolGlobalString('MYDATA_AADE_USER').'"';
950 print '</td><td></td></tr>';
951
952 print '<tr class="oddeven"><td>';
953 print '<span class="titlefield fieldrequired">'.$langs->trans("MYDATA_AADE_KEY").'</span></td><td>';
954 print '<input class="minwidth300" type="password" name="MYDATA_AADE_KEY" value="'.getDolGlobalString('MYDATA_AADE_KEY').'"';
955 print '</td><td></td></tr>';
956
957 print '<tr class="oddeven"><td>';
958 print '<span class="titlefield fieldrequired">'.$langs->trans("AADE_WEBSERVICE_USER").'</span></td><td>';
959 print '<input class="minwidth300" type="text" name="AADE_WEBSERVICE_USER" value="'.getDolGlobalString('AADE_WEBSERVICE_USER').'"';
960 print '</td><td></td></tr>';
961
962 print '<tr class="oddeven"><td>';
963 print '<span class="titlefield fieldrequired">'.$langs->trans("AADE_WEBSERVICE_KEY").'</span></td><td>';
964 print '<input class="minwidth300" type="password" name="AADE_WEBSERVICE_KEY" value="'.getDolGlobalString('AADE_WEBSERVICE_KEY').'"';
965 print '</td><td></td></tr>';
966
967 print '<br>';
968
969 print "</table>";
970}
971
972print $form->buttonsSaveCancel("Save", '', array(), false, 'reposition');
973
974print '</form>';
975
976
977// End of page
978llxFooter();
979$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($blockedlogtestalreadydone=0, $blockedlogmodulealreadydone=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:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
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.
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.
dolPrintHTMLForAttribute($s, $escapeonlyhtmltags=0, $allowothertags=array())
Return a string ready to be output into an HTML attribute (alt, title, data-html, ....
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.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
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.
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.
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)
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.