dolibarr 21.0.0-alpha
card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2003 Brian Fraval <brian@fraval.org>
4 * Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
5 * Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com>
6 * Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
7 * Copyright (C) 2008 Patrick Raguin <patrick.raguin@auguria.net>
8 * Copyright (C) 2010-2020 Juanjo Menent <jmenent@2byte.es>
9 * Copyright (C) 2011-2024 Alexandre Spangaro <alexandre@inovea-conseil.com>
10 * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
11 * Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
12 * Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
13 * Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
14 * Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es.com>
15 * Copyright (C) 2018-2024 Frédéric France <frederic.france@free.fr>
16 * Copyright (C) 2022-2023 George Gkantinas <info@geowv.eu>
17 * Copyright (C) 2023 Nick Fragoulis
18 * Copyright (C) 2023 Alexandre Janniaux <alexandre.janniaux@gmail.com>
19 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
20 *
21 * This program is free software; you can redistribute it and/or modify
22 * it under the terms of the GNU General Public License as published by
23 * the Free Software Foundation; either version 3 of the License, or
24 * (at your option) any later version.
25 *
26 * This program is distributed in the hope that it will be useful,
27 * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 * GNU General Public License for more details.
30 *
31 * You should have received a copy of the GNU General Public License
32 * along with this program. If not, see <https://www.gnu.org/licenses/>.
33 */
34
42// Load Dolibarr environment
43require '../main.inc.php';
44require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
45require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
46require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
47require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
48require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.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/extrafields.class.php';
52require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
53require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
54if (isModEnabled('member')) {
55 require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
56}
57if (isModEnabled('accounting')) {
58 require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
59}
60if (isModEnabled('accounting')) {
61 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
62}
63if (isModEnabled('accounting')) {
64 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
65}
66if (isModEnabled('eventorganization')) {
67 require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorboothattendee.class.php';
68}
69
70$u = '';
71$p = '';
72$myafm = '';
73
74if ($mysoc->country_code == 'GR') {
75 $u = getDolGlobalString('AADE_WEBSERVICE_USER');
76 $p = getDolGlobalString('AADE_WEBSERVICE_KEY');
77 $myafm = preg_replace('/\D/', '', getDolGlobalString('MAIN_INFO_TVAINTRA'));
78}
79
80
81// Load translation files required by the page
82
83$langs->loadLangs(array("companies", "commercial", "bills", "banks", "users"));
84
85if (isModEnabled('member')) {
86 $langs->load("members");
87}
88if (isModEnabled('category')) {
89 $langs->load("categories");
90}
91if (isModEnabled('incoterm')) {
92 $langs->load("incoterm");
93}
94if (isModEnabled('notification')) {
95 $langs->load("mails");
96}
97if (isModEnabled('accounting')) {
98 $langs->load("products");
99}
100
101$error = 0;
102$errors = array();
103
104
105// Get parameters
106$action = (GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view');
107$cancel = GETPOST('cancel', 'alpha');
108$backtopage = GETPOST('backtopage', 'alpha');
109$backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
110$backtopagejsfields = GETPOST('backtopagejsfields', 'alpha');
111$confirm = GETPOST('confirm', 'alpha');
112
113$dol_openinpopup = '';
114if (!empty($backtopagejsfields)) {
115 $tmpbacktopagejsfields = explode(':', $backtopagejsfields);
116 $dol_openinpopup = preg_replace('/[^a-z0-9_]/i', '', $tmpbacktopagejsfields[0]);
117}
118
119$socid = GETPOSTINT('socid') ? GETPOSTINT('socid') : GETPOSTINT('id');
120if ($user->socid) {
121 if (in_array($action, ['add', 'create', 'merge', 'confirm_merge', 'delete', 'confirm_delete'])) {
123 }
124
125 $socid = $user->socid;
126}
127if (empty($socid) && $action == 'view') {
128 $action = 'create';
129}
130
131$id = $socid;
132
133$object = new Societe($db);
134$extrafields = new ExtraFields($db);
135
136// fetch optionals attributes and labels
137$extrafields->fetch_name_optionals_label($object->table_element);
138
139$socialnetworks = getArrayOfSocialNetworks();
140
141// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
142$hookmanager->initHooks(array('thirdpartycard', 'globalcard'));
143
144if ($socid > 0) {
145 $object->fetch($socid);
146}
147
148if (!($object->id > 0) && $action == 'view') {
150}
151
152// Get object canvas (By default, this is not defined, so standard usage of dolibarr)
153$canvas = $object->canvas ? $object->canvas : GETPOST("canvas");
154$objcanvas = null;
155if (!empty($canvas)) {
156 require_once DOL_DOCUMENT_ROOT.'/core/class/canvas.class.php';
157 $objcanvas = new Canvas($db, $action);
158 $objcanvas->getCanvas('thirdparty', 'card', $canvas);
159}
160
161// Permissions
162$permissiontoread = $user->hasRight('societe', 'lire');
163$permissiontoadd = $user->hasRight('societe', 'creer'); // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
164$permissiontodelete = $user->hasRight('societe', 'supprimer') || ($permissiontoadd && isset($object->status) && $object->status == 0);
165$permissionnote = $user->hasRight('societe', 'creer'); // Used by the include of actions_setnotes.inc.php
166$permissiondellink = $user->hasRight('societe', 'creer'); // Used by the include of actions_dellink.inc.php
167$upload_dir = $conf->societe->multidir_output[isset($object->entity) ? $object->entity : 1];
168
169// Security check
170$result = restrictedArea($user, 'societe', $socid, '&societe', '', 'fk_soc', 'rowid', 0);
171
172
173
174/*
175 * Actions
176 */
177
178$parameters = array('id' => $socid, 'objcanvas' => $objcanvas);
179$current_logo = '';
180$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
181if ($reshook < 0) {
182 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
183}
184
185if (empty($reshook)) {
186 $backurlforlist = DOL_URL_ROOT.'/societe/list.php';
187
188 if (empty($backtopage) || ($cancel && empty($id))) {
189 if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
190 if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
191 $backtopage = $backurlforlist;
192 } else {
193 $backtopage = DOL_URL_ROOT.'/societe/card.php?id='.((!empty($id) && $id > 0) ? $id : '__ID__');
194 }
195 }
196 }
197
198 if ($cancel) {
199 if (!empty($backtopageforcancel)) {
200 header("Location: ".$backtopageforcancel);
201 exit;
202 } elseif (!empty($backtopage)) {
203 header("Location: ".$backtopage);
204 exit;
205 }
206 $action = '';
207 }
208
209 if ($action == 'confirm_merge' && $confirm == 'yes' && $permissiontoadd) {
210 $soc_origin_id = GETPOSTINT('soc_origin');
211 $soc_origin = new Societe($db); // The thirdparty that we will delete
212
213 if ($soc_origin_id <= 0) {
214 $langs->load('errors');
215 setEventMessages($langs->trans('ErrorThirdPartyIdIsMandatory', $langs->transnoentitiesnoconv('MergeOriginThirdparty')), null, 'errors');
216 } else {
217 if (!$error && $soc_origin->fetch($soc_origin_id) < 1) {
218 setEventMessages($langs->trans('ErrorRecordNotFound'), null, 'errors');
219 $error++;
220 }
221 if (!$error) {
222 $result = $object->mergeCompany($soc_origin_id);
223 if ($result < 0) {
224 $error++;
225 setEventMessages($object->error, $object->errors, 'errors');
226 } else {
227 setEventMessages($langs->trans('ThirdpartiesMergeSuccess'), null, 'mesgs');
228 }
229 }
230 }
231 }
232
233 if (GETPOST('getcustomercode')) {
234 // We defined value code_client
235 $_POST["customer_code"] = "Acompleter";
236 }
237
238 if (GETPOST('getsuppliercode')) {
239 // We defined value code_fournisseur
240 $_POST["supplier_code"] = "Acompleter";
241 }
242
243 if ($action == 'set_localtax1' && $permissiontoadd) {
244 //get selected from combobox
245 $value = GETPOST('lt1');
246 $object->fetch($socid);
247 $res = $object->setValueFrom('localtax1_value', $value, '', null, 'text', '', $user, 'COMPANY_MODIFY');
248 }
249 if ($action == 'set_localtax2' && $permissiontoadd) {
250 //get selected from combobox
251 $value = GETPOST('lt2');
252 $object->fetch($socid);
253 $res = $object->setValueFrom('localtax2_value', $value, '', null, 'text', '', $user, 'COMPANY_MODIFY');
254 }
255
256 if ($action == 'update_extras' && $permissiontoadd) {
257 $object->fetch($socid);
258
259 $object->oldcopy = dol_clone($object, 2);
260
261 // Fill array 'array_options' with data from update form
262 $extrafields->fetch_name_optionals_label($object->table_element);
263
264 $ret = $extrafields->setOptionalsFromPost(null, $object, GETPOST('attribute', 'restricthtml'));
265 if ($ret < 0) {
266 $error++;
267 }
268
269 if (!$error) {
270 $result = $object->insertExtraFields('COMPANY_MODIFY');
271 if ($result < 0) {
272 setEventMessages($object->error, $object->errors, 'errors');
273 $error++;
274 }
275 }
276
277 if ($error) {
278 $action = 'edit_extras';
279 }
280 }
281
282 // Add new or update third party
283 if ((!GETPOST('getcustomercode') && !GETPOST('getsuppliercode')) && ($action == 'add' || $action == 'update') && $permissiontoadd) {
284 require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
285
286 if (!GETPOST('name')) {
287 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ThirdPartyName")), null, 'errors');
288 $error++;
289 }
290 if (GETPOSTINT('customer') && GETPOSTINT('customer') < 0) {
291 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Customer")), null, 'errors');
292 $error++;
293 }
294 if (GETPOSTINT('prospect') && GETPOSTINT('prospect') < 0) {
295 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Prospect")), null, 'errors');
296 $error++;
297 }
298 if (GETPOSTISSET('supplier') && GETPOSTINT('supplier') < 0) {
299 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Supplier")), null, 'errors');
300 $error++;
301 }
302
303 if (isModEnabled('mailing') && getDolGlobalInt('MAILING_CONTACT_DEFAULT_BULK_STATUS') == 2 && GETPOSTINT('contact_no_email') == -1 && !empty(GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL))) {
304 $error++;
305 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("No_Email")), null, 'errors');
306 }
307
308 if (isModEnabled('mailing') && GETPOSTINT("private") == 1 && getDolGlobalInt('MAILING_CONTACT_DEFAULT_BULK_STATUS') == 2 && GETPOSTINT('contact_no_email') == -1 && !empty(GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL))) {
309 $error++;
310 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("No_Email")), null, 'errors');
311 }
312
313 if (!$error) {
314 if ($action == 'update') { // Test on permission not required here
315 $ret = $object->fetch($socid);
316 $object->oldcopy = clone $object;
317 } else {
318 $object->canvas = $canvas;
319 }
320
321 if (GETPOSTINT("private") == 1) { // Ask to create a contact
322 $object->particulier = GETPOSTINT("private");
323
324 $object->name = dolGetFirstLastname(GETPOST('firstname', 'alphanohtml'), GETPOST('name', 'alphanohtml'));
325 $object->civility_id = GETPOST('civility_id', 'alphanohtml'); // Note: civility id is a code, not an int
326 // Add non official properties
327 $object->name_bis = GETPOST('name', 'alphanohtml');
328 $object->firstname = GETPOST('firstname', 'alphanohtml');
329 } else {
330 $object->name = GETPOST('name', 'alphanohtml');
331 }
332 $object->entity = ((GETPOSTISSET('entity') && GETPOST('entity') != '') ? GETPOSTINT('entity') : $conf->entity);
333 $object->name_alias = GETPOST('name_alias', 'alphanohtml');
334 $object->parent = GETPOSTISSET('parent_company_id') ? GETPOSTINT('parent_company_id') : $object->parent;
335 $object->address = GETPOST('address', 'alphanohtml');
336 $object->zip = GETPOST('zipcode', 'alphanohtml');
337 $object->town = GETPOST('town', 'alphanohtml');
338 $object->country_id = GETPOSTINT('country_id');
339 $object->state_id = GETPOSTINT('state_id');
340
341 $object->socialnetworks = array();
342 if (isModEnabled('socialnetworks')) {
343 foreach ($socialnetworks as $key => $value) {
344 if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml') != '') {
345 $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml');
346 }
347 }
348 }
349
350 $object->phone = GETPOST('phone', 'alpha');
351 $object->phone_mobile = (string) GETPOST("phone_mobile", 'alpha');
352 $object->fax = GETPOST('fax', 'alpha');
353 $object->email = trim(GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL));
354 $object->no_email = GETPOSTINT("no_email");
355 $object->url = trim(GETPOST('url', 'custom', 0, FILTER_SANITIZE_URL));
356 $object->idprof1 = trim(GETPOST('idprof1', 'alphanohtml'));
357 $object->idprof2 = trim(GETPOST('idprof2', 'alphanohtml'));
358 $object->idprof3 = trim(GETPOST('idprof3', 'alphanohtml'));
359 $object->idprof4 = trim(GETPOST('idprof4', 'alphanohtml'));
360 $object->idprof5 = trim(GETPOST('idprof5', 'alphanohtml'));
361 $object->idprof6 = trim(GETPOST('idprof6', 'alphanohtml'));
362 $object->prefix_comm = GETPOST('prefix_comm', 'alphanohtml');
363 $object->code_client = GETPOSTISSET('customer_code') ? GETPOST('customer_code', 'alpha') : GETPOST('code_client', 'alpha');
364 $object->code_fournisseur = GETPOSTISSET('supplier_code') ? GETPOST('supplier_code', 'alpha') : GETPOST('code_fournisseur', 'alpha');
365 $object->capital = GETPOST('capital', 'alphanohtml');
366 $object->barcode = GETPOST('barcode', 'alphanohtml');
367
368 $object->tva_intra = GETPOST('tva_intra', 'alphanohtml');
369 $object->tva_assuj = GETPOST('assujtva_value', 'alpha');
370 $object->vat_reverse_charge = GETPOST('vat_reverse_charge') == 'on' ? 1 : 0;
371 $object->status = GETPOST('status', 'alpha');
372
373 // Local Taxes
374 $object->localtax1_assuj = GETPOST('localtax1assuj_value', 'alpha');
375 $object->localtax2_assuj = GETPOST('localtax2assuj_value', 'alpha');
376
377 $object->localtax1_value = GETPOST('lt1', 'alpha');
378 $object->localtax2_value = GETPOST('lt2', 'alpha');
379
380 $object->forme_juridique_code = GETPOSTINT('forme_juridique_code');
381 $object->effectif_id = GETPOSTINT('effectif_id');
382 $object->typent_id = GETPOSTINT('typent_id');
383
384 $object->typent_code = dol_getIdFromCode($db, $object->typent_id, 'c_typent', 'id', 'code'); // Force typent_code too so check in verify() will be done on new type
385
386 // Calculate the type of the thirdparty
387 $customer = (GETPOSTINT('customer') > 0 ? 1 : 0);
388 $prospect = (GETPOSTINT('prospect') > 0 ? 2 : 0);
389 $prospectcustomer = $customer + $prospect;
390
391 $object->client = $prospectcustomer;
392 $object->fournisseur = (GETPOSTINT('supplier') > 0 ? 1 : 0);
393
394 if ($action == 'add') {
395 // for prospect, customer or supplier
396 if ($object->client > 0 || $object->fournisseur > 0) {
397 $form = new Form($db);
398 $form->load_cache_types_paiements();
399
400 $paymentTermId = GETPOSTINT('cond_reglement_id');
401 $paymentTypeId = GETPOSTINT('mode_reglement_id');
402 if ($object->client > 0) {
403 $object->cond_reglement_id = $paymentTermId;
404
405 $filterPaymentTypeIdArr = array(0, 2, 3); // allow payment type for customer (filter is "CRDT" in "Form::select_types_paiements()" method)
406 if (!empty($form->cache_types_paiements[$paymentTypeId]) && isset($form->cache_types_paiements[$paymentTypeId]['type']) && in_array($form->cache_types_paiements[$paymentTypeId]['type'], $filterPaymentTypeIdArr)) {
407 $object->mode_reglement_id = $paymentTypeId;
408 }
409 }
410
411 if ($object->fournisseur > 0) {
412 $object->cond_reglement_supplier_id = $paymentTermId;
413
414 $filterPaymentTypeIdArr = array(1, 2, 3); // allow payment type for supplier (filter is "DBIT" in "Form::select_types_paiements()" method)
415 if (!empty($form->cache_types_paiements[$paymentTypeId]) && isset($form->cache_types_paiements[$paymentTypeId]['type']) && in_array($form->cache_types_paiements[$paymentTypeId]['type'], $filterPaymentTypeIdArr)) {
416 $object->mode_reglement_supplier_id = $paymentTypeId;
417 }
418 }
419 }
420 }
421
422 $object->commercial_id = GETPOSTINT('commercial_id');
423 $object->default_lang = GETPOST('default_lang');
424
425 // Webservices url/key
426 $object->webservices_url = GETPOST('webservices_url', 'custom', 0, FILTER_SANITIZE_URL);
427 $object->webservices_key = GETPOST('webservices_key', 'san_alpha');
428
429 if (GETPOSTISSET('accountancy_code_sell')) {
430 $accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha');
431
432 if (empty($accountancy_code_sell) || $accountancy_code_sell == '-1') {
433 $object->accountancy_code_sell = '';
434 } else {
435 $object->accountancy_code_sell = $accountancy_code_sell;
436 }
437 }
438 if (GETPOSTISSET('accountancy_code_buy')) {
439 $accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha');
440
441 if (empty($accountancy_code_buy) || $accountancy_code_buy == '-1') {
442 $object->accountancy_code_buy = '';
443 } else {
444 $object->accountancy_code_buy = $accountancy_code_buy;
445 }
446 }
447
448 // Incoterms
449 if (isModEnabled('incoterm')) {
450 $object->fk_incoterms = GETPOSTINT('incoterm_id');
451 $object->location_incoterms = GETPOST('location_incoterms', 'alpha');
452 }
453
454 // Multicurrency
455 if (isModEnabled("multicurrency")) {
456 $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha');
457 }
458
459 // Fill array 'array_options' with data from add form
460 $ret = $extrafields->setOptionalsFromPost(null, $object);
461 if ($ret < 0) {
462 $error++;
463 }
464
465 // Fill array 'array_languages' with data from add form
466 $ret = $object->setValuesForExtraLanguages();
467 if ($ret < 0) {
468 $error++;
469 }
470 //var_dump($object->array_languages);exit;
471
472 if (!empty($_FILES['photo']['name'])) {
473 $current_logo = $object->logo;
474 $object->logo = dol_sanitizeFileName($_FILES['photo']['name']);
475 }
476 if (GETPOST('deletephoto')) {
477 $current_logo = $object->logo;
478 $object->logo = '';
479 }
480
481
482 // Check parameters
483 if (!GETPOST('cancel', 'alpha')) {
484 if (!empty($object->email) && !isValidEmail($object->email)) {
485 $langs->load("errors");
486 $error++;
487 setEventMessages($langs->trans("ErrorBadEMail", $object->email), null, 'errors');
488 }
489 if (!empty($object->url) && !isValidUrl($object->url)) {
490 $langs->load("errors");
491 setEventMessages($langs->trans("ErrorBadUrl", $object->url), null, 'errors');
492 }
493 if (!empty($object->webservices_url)) {
494 //Check if has transport, without any the soap client will give error
495 if (strpos($object->webservices_url, "http") === false) {
496 $object->webservices_url = "http://".$object->webservices_url;
497 }
498 if (!isValidUrl($object->webservices_url)) {
499 $langs->load("errors");
500 $error++;
501 $errors[] = $langs->trans("ErrorBadUrl", $object->webservices_url);
502 }
503 }
504
505 // We set country_id, country_code and country for the selected country
506 $object->country_id = GETPOSTINT('country_id') != '' ? GETPOSTINT('country_id') : $mysoc->country_id;
507 if ($object->country_id) {
508 $tmparray = getCountry($object->country_id, 'all');
509 $object->country_code = $tmparray['code'];
510 $object->country = $tmparray['label'];
511 }
512 }
513 }
514
515 if (!$error) {
516 if ($action == 'add' && $permissiontoadd) {
517 $error = 0;
518
519 $db->begin();
520
521 if (empty($object->client)) {
522 $object->code_client = '';
523 }
524 if (empty($object->fournisseur)) {
525 $object->code_fournisseur = '';
526 }
527
528 $result = $object->create($user);
529
530 if ($result >= 0 && isModEnabled('mailing') && !empty($object->email) && $object->no_email == 1) {
531 // Add mass emailing flag into table mailing_unsubscribe
532 $resultnoemail = $object->setNoEmail($object->no_email);
533 if ($resultnoemail < 0) {
534 $error++;
535 $errors = array_merge($errors, ($object->error ? array($object->error) : $object->errors));
536 $action = 'create';
537 }
538 }
539
540 if ($result >= 0) {
541 if ($object->particulier) {
542 dol_syslog("We ask to create a contact/address too", LOG_DEBUG);
543 $contcats = GETPOST('contcats', 'array');
544 $no_email = GETPOSTINT('contact_no_email');
545 $result = $object->create_individual($user, $no_email, $contcats);
546 if ($result < 0) {
547 setEventMessages($object->error, $object->errors, 'errors');
548 $error++;
549 }
550 }
551
552 // Links with users
553 $salesreps = GETPOST('commercial', 'array');
554 $result = $object->setSalesRep($salesreps, true);
555 if ($result < 0) {
556 $error++;
557 setEventMessages($object->error, $object->errors, 'errors');
558 }
559
560 // Customer categories association
561 $custcats = GETPOST('custcats', 'array');
562 $result = $object->setCategories($custcats, 'customer');
563 if ($result < 0) {
564 $error++;
565 setEventMessages($object->error, $object->errors, 'errors');
566 }
567
568 // Supplier categories association
569 $suppcats = GETPOST('suppcats', 'array');
570 $result = $object->setCategories($suppcats, 'supplier');
571 if ($result < 0) {
572 $error++;
573 setEventMessages($object->error, $object->errors, 'errors');
574 }
575
576 // Logo/Photo save
577 $dir = $conf->societe->multidir_output[$conf->entity]."/".$object->id."/logos/";
578 $file_OK = is_uploaded_file($_FILES['photo']['tmp_name']);
579 if ($file_OK) {
580 if (image_format_supported($_FILES['photo']['name'])) {
581 dol_mkdir($dir);
582
583 if (@is_dir($dir)) {
584 $newfile = $dir.'/'.dol_sanitizeFileName($_FILES['photo']['name']);
585 $result = dol_move_uploaded_file($_FILES['photo']['tmp_name'], $newfile, 1);
586
587 if (!($result > 0)) {
588 $errors[] = "ErrorFailedToSaveFile";
589 } else {
590 // Create thumbs
591 $object->addThumbs($newfile);
592 }
593 }
594 }
595 } else {
596 switch ($_FILES['photo']['error']) {
597 case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini
598 case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
599 $errors[] = "ErrorFileSizeTooLarge";
600 break;
601 case 3: //uploaded file was only partially uploaded
602 $errors[] = "ErrorFilePartiallyUploaded";
603 break;
604 }
605 }
606 } else {
607 if ($result == -3 && in_array('ErrorCustomerCodeAlreadyUsed', $object->errors)) {
608 $duplicate_code_error = true;
609 $object->code_client = '';
610 }
611
612 if ($result == -3 && in_array('ErrorSupplierCodeAlreadyUsed', $object->errors)) {
613 $duplicate_code_error = true;
614 $object->code_fournisseur = '';
615 }
616
617 if ($db->lasterrno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { // TODO Sometime errors on duplicate on profid and not on code, so we must manage this case
618 $duplicate_code_error = true;
619 }
620
621 setEventMessages($object->error, $object->errors, 'errors');
622 $error++;
623 }
624
625 if ($result >= 0 && !$error) {
626 $db->commit();
627
628 if ($backtopagejsfields) {
629 llxHeader('', '', '');
630
631 $retstring = '<script>';
632 $retstring .= 'jQuery(document).ready(function() {
633 console.log(\'We execute action to create. We save id and go back - '.$dol_openinpopup.'\');
634 console.log(\'id = '.$object->id.'\');
635 $(\'#varforreturndialogid'.$dol_openinpopup.'\', window.parent.document).text(\''.$object->id.'\');
636 $(\'#varforreturndialoglabel'.$dol_openinpopup.'\', window.parent.document).text(\''.$object->name.'\');
637 window.parent.jQuery(\'#idfordialog'.$dol_openinpopup.'\').dialog(\'close\');
638 });';
639 $retstring .= '</script>';
640 print $retstring;
641
642 llxFooter();
643 exit;
644 }
645
646 if (!empty($backtopage)) {
647 $backtopage = preg_replace('/--IDFORBACKTOPAGE--/', (string) $object->id, $backtopage); // New method to autoselect project after a New on another form object creation
648 if (preg_match('/\?/', $backtopage)) {
649 $backtopage .= '&socid='.$object->id; // Old method
650 }
651 header("Location: ".$backtopage);
652 exit;
653 } else {
654 $url = $_SERVER["PHP_SELF"]."?socid=".$object->id; // Old method
655 if (($object->client == 1 || $object->client == 3) && !getDolGlobalString('SOCIETE_DISABLE_CUSTOMERS')) {
656 $url = DOL_URL_ROOT."/comm/card.php?socid=".$object->id;
657 } elseif ($object->fournisseur == 1) {
658 $url = DOL_URL_ROOT."/fourn/card.php?socid=".$object->id;
659 }
660
661 header("Location: ".$url);
662 exit;
663 }
664 } else {
665 $db->rollback();
666 $action = 'create';
667 }
668 }
669
670 if ($action == 'update' && $permissiontoadd) {
671 $error = 0;
672
673 if (GETPOST('cancel', 'alpha')) {
674 if (!empty($backtopage)) {
675 header("Location: ".$backtopage);
676 exit;
677 } else {
678 header("Location: ".$_SERVER["PHP_SELF"]."?socid=".$socid);
679 exit;
680 }
681 }
682
683 // To not set code if third party is not concerned. But if it had values, we keep them.
684 if (empty($object->client) && empty($object->oldcopy->code_client)) {
685 $object->code_client = '';
686 }
687 if (empty($object->fournisseur) && empty($object->oldcopy->code_fournisseur)) {
688 $object->code_fournisseur = '';
689 }
690 //var_dump($object);exit;
691
692 $result = $object->update($socid, $user, 1, $object->oldcopy->codeclient_modifiable(), $object->oldcopy->codefournisseur_modifiable(), 'update', 0);
693
694 if ($result > 0) {
695 // Update mass emailing flag into table mailing_unsubscribe
696 if (GETPOSTISSET('no_email') && $object->email) {
697 $no_email = GETPOSTINT('no_email');
698 $result = $object->setNoEmail($no_email);
699 if ($result < 0) {
700 setEventMessages($object->error, $object->errors, 'errors');
701 $action = 'edit';
702 }
703 }
704
705 $action = 'view';
706 } else {
707 setEventMessages($object->error, $object->errors, 'errors');
708 $action = 'edit';
709 }
710
711 if ($result <= 0) {
712 setEventMessages($object->error, $object->errors, 'errors');
713 $error++;
714 }
715
716 // Links with users
717 $salesreps = GETPOST('commercial', 'array');
718 $result = $object->setSalesRep($salesreps);
719 if ($result < 0) {
720 $error++;
721 setEventMessages($object->error, $object->errors, 'errors');
722 }
723
724 // Prevent thirdparty's emptying if a user hasn't rights $user->rights->categorie->lire (in such a case, post of 'custcats' is not defined)
725 if (!$error && $user->hasRight('categorie', 'lire')) {
726 // Customer categories association
727 $categories = GETPOST('custcats', 'array');
728 $result = $object->setCategories($categories, 'customer');
729 if ($result < 0) {
730 $error++;
731 setEventMessages($object->error, $object->errors, 'errors');
732 }
733
734 // Supplier categories association
735 $categories = GETPOST('suppcats', 'array');
736 $result = $object->setCategories($categories, 'supplier');
737 if ($result < 0) {
738 $error++;
739 setEventMessages($object->error, $object->errors, 'errors');
740 }
741 }
742
743 // Logo/Photo save
744 $dir = $conf->societe->multidir_output[$object->entity]."/".$object->id."/logos";
745 $file_OK = is_uploaded_file($_FILES['photo']['tmp_name']);
746 if (GETPOST('deletephoto') && $object->logo) {
747 $fileimg = $dir.'/'.$object->logo;
748 $dirthumbs = $dir.'/thumbs';
749 dol_delete_file($fileimg);
750 dol_delete_dir_recursive($dirthumbs);
751 }
752 if ($file_OK) {
753 if (image_format_supported($_FILES['photo']['name']) > 0) {
754 if ($current_logo != $object->logo) {
755 $fileimg = $dir.'/'.$current_logo;
756 $dirthumbs = $dir.'/thumbs';
757 dol_delete_file($fileimg);
758 dol_delete_dir_recursive($dirthumbs);
759 }
760
761 dol_mkdir($dir);
762
763 if (@is_dir($dir)) {
764 $newfile = $dir.'/'.dol_sanitizeFileName($_FILES['photo']['name']);
765 $result = dol_move_uploaded_file($_FILES['photo']['tmp_name'], $newfile, 1);
766
767 if (!($result > 0)) {
768 $errors[] = "ErrorFailedToSaveFile";
769 } else {
770 // Create thumbs
771 $object->addThumbs($newfile);
772
773 // Index file in database
774 if (getDolGlobalString('THIRDPARTY_LOGO_ALLOW_EXTERNAL_DOWNLOAD')) {
775 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
776 // the dir dirname($newfile) is directory of logo, so we should have only one file at once into index, so we delete indexes for the dir
777 deleteFilesIntoDatabaseIndex(dirname($newfile), '', '');
778 // now we index the uploaded logo file
779 addFileIntoDatabaseIndex(dirname($newfile), basename($newfile), '', 'uploaded', 1);
780 }
781 }
782 }
783 } else {
784 $errors[] = "ErrorBadImageFormat";
785 }
786 } else {
787 switch ($_FILES['photo']['error']) {
788 case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini
789 case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form
790 $errors[] = "ErrorFileSizeTooLarge";
791 break;
792 case 3: //uploaded file was only partially uploaded
793 $errors[] = "ErrorFilePartiallyUploaded";
794 break;
795 }
796 }
797 // Company logo management
798
799
800 // Update linked member
801 if (!$error && isset($object->fk_soc) && $object->fk_soc > 0) {
802 $sql = "UPDATE ".MAIN_DB_PREFIX."adherent";
803 $sql .= " SET fk_soc = NULL WHERE fk_soc = ".((int) $socid);
804 if (!$object->db->query($sql)) {
805 $error++;
806 $object->error .= $object->db->lasterror();
807 setEventMessages($object->error, $object->errors, 'errors');
808 }
809 }
810
811 if (!$error && !count($errors)) {
812 if (!empty($backtopage)) {
813 header("Location: ".$backtopage);
814 exit;
815 } else {
816 header("Location: ".$_SERVER["PHP_SELF"]."?socid=".$socid);
817 exit;
818 }
819 } else {
820 $object->id = $socid;
821 $action = "edit";
822 }
823 }
824 } else {
825 $action = ($action == 'add' ? 'create' : 'edit');
826 }
827 }
828
829 // Delete third party
830 if ($action == 'confirm_delete' && $confirm == 'yes' && $user->hasRight('societe', 'supprimer')) {
831 $object->fetch($socid);
832 $object->oldcopy = clone $object;
833 $result = $object->delete($socid, $user);
834
835 if ($result > 0) {
836 header("Location: ".DOL_URL_ROOT."/societe/list.php?restore_lastsearch_values=1&delsoc=".urlencode($object->name));
837 exit;
838 } else {
839 $langs->load("errors");
840 setEventMessages($object->error, $object->errors, 'errors');
841 $error++;
842 $action = '';
843 }
844 }
845
846 // Set third-party type
847 if ($action == 'set_thirdpartytype' && $permissiontoadd) {
848 $object->fetch($socid);
849 $result = $object->setThirdpartyType(GETPOSTINT('typent_id'));
850 }
851
852 // Set incoterm
853 if ($action == 'set_incoterms' && $permissiontoadd && isModEnabled('incoterm')) {
854 $object->fetch($socid);
855 $result = $object->setIncoterms(GETPOSTINT('incoterm_id'), GETPOSTINT('location_incoterms'));
856 }
857
858 // Set parent company
859 if ($action == 'set_thirdparty' && $permissiontoadd) {
860 $object->fetch($socid);
861 $result = $object->setParent(GETPOSTINT('parent_id'));
862 }
863
864 // Set sales representatives
865 if ($action == 'set_salesrepresentatives' && $permissiontoadd) {
866 $object->fetch($socid);
867 $result = $object->setSalesRep(GETPOST('commercial', 'array'));
868 }
869
870 // warehouse
871 if ($action == 'setwarehouse' && $permissiontoadd) {
872 $result = $object->setWarehouse(GETPOSTINT('fk_warehouse'));
873 }
874
875 if ($action == 'confirm_clone' && $confirm != 'yes') {
876 $action = '';
877 }
878 //clone company essential info
879 if ($action == 'confirm_clone' && $confirm == 'yes' && $user->hasRight('societe', 'creer')) {
880 if ($object->id > 0) {
881 $error = 0;
882
883 $clone = dol_clone($object, 1);
884
885 if (!empty(GETPOST('clone_name'))) {
886 $clone->id = 0;
887 $clone->name = GETPOST('clone_name', 'alphanohtml');
888 $clone->status = 1;
889 $clone->fournisseur = 0;
890 $clone->client = 0;
891
892 $db->begin();
893
894 $clone->context['createfromclone'] = 'createfromclone';
895 $id = $clone->create($user);
896 if ($id > 0) {
897 $clone->id = $id;
898 } else {
899 setEventMessages($clone->error, $clone->errors, 'errors');
900 $error++;
901 }
902
903 unset($clone->context['createfromclone']);
904
905 if ($error) {
906 $db->rollback();
907 } else {
908 $db->commit();
909 $db->close();
910 header("Location: " . $_SERVER["PHP_SELF"] . "?id=" . $id);
911 exit;
912 }
913 } else {
914 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NewRefForClone")), null, 'errors');
915 }
916 } else {
917 dol_print_error($db, $object->error, $object->errors);
918 }
919 $action = 'clone';
920 }
921
922 $id = $socid;
923 $object->fetch($socid);
924
925 // Selection of new fields
926 if (getDolGlobalString('MAIN_DUPLICATE_CONTACTS_TAB_ON_MAIN_CARD') && (!getDolGlobalString('SOCIETE_DISABLE_CONTACTS') || getDolGlobalString('SOCIETE_ADDRESSES_MANAGEMENT'))) {
927 include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
928 }
929
930 // Actions to send emails
931 $triggersendname = 'COMPANY_SENTBYMAIL';
932 $paramname = 'socid';
933 $mode = 'emailfromthirdparty';
934 $trackid = 'thi'.$object->id;
935 include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
936
937 // Actions to build doc
938 $id = $socid;
939 $upload_dir = !empty($conf->societe->multidir_output[$object->entity]) ? $conf->societe->multidir_output[$object->entity] : $conf->societe->dir_output;
940 $permissiontoadd = $user->hasRight('societe', 'creer');
941 include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
942}
943
944
945/*
946 * View
947 */
948
949$form = new Form($db);
950$formfile = new FormFile($db);
951$formadmin = new FormAdmin($db);
952$formcompany = new FormCompany($db);
953if (isModEnabled('accounting')) {
954 $formaccounting = new FormAccounting($db);
955}
956
957if ($socid > 0 && empty($object->id)) {
958 $result = $object->fetch($socid);
959 if ($result <= 0) {
960 dol_print_error(null, $object->error);
961 exit(-1);
962 }
963}
964
965$title = $langs->trans("ThirdParty");
966if ($action == 'create') {
967 $title = $langs->trans("NewThirdParty");
968}
969if (getDolGlobalString('MAIN_HTML_TITLE') && preg_match('/thirdpartynameonly/', getDolGlobalString('MAIN_HTML_TITLE')) && $object->name) {
970 $title = $object->name." - ".$langs->trans('Card');
971}
972$help_url = 'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas|DE:Modul_Geschäftspartner';
973
974llxHeader('', $title, $help_url);
975
976$countrynotdefined = $langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')';
977
978$canvasdisplayaction = $action;
979if (in_array($canvasdisplayaction, array('merge', 'confirm_merge'))) {
980 $canvasdisplayaction = 'view';
981}
982
983if (is_object($objcanvas) && $objcanvas->displayCanvasExists($canvasdisplayaction)) {
984 // -----------------------------------------
985 // When used with CANVAS
986 // -----------------------------------------
987 $objcanvas->assign_values($canvasdisplayaction, $object->id, $object->ref); // Set value for templates
988 $objcanvas->display_canvas($canvasdisplayaction); // Show template
989} else {
990 // -----------------------------------------
991 // When used in standard mode
992 // -----------------------------------------
993 if ($action == 'create') {
994 /*
995 * Creation
996 */
997 $private = GETPOSTINT("private");
998 if (getDolGlobalString('THIRDPARTY_DEFAULT_CREATE_CONTACT') && !GETPOSTISSET('private')) {
999 $private = 1;
1000 }
1001 if (empty($private)) {
1002 $private = 0;
1003 }
1004
1005 // Load object modCodeTiers
1006 $module = getDolGlobalString('SOCIETE_CODECLIENT_ADDON', 'mod_codeclient_leopard');
1007 if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php') {
1008 $module = substr($module, 0, dol_strlen($module) - 4);
1009 }
1010 $dirsociete = array_merge(array('/core/modules/societe/'), $conf->modules_parts['societe']);
1011 foreach ($dirsociete as $dirroot) {
1012 $res = dol_include_once($dirroot.$module.'.php');
1013 if ($res) {
1014 break;
1015 }
1016 }
1017 $modCodeClient = new $module($db);
1018 '@phan-var-force ModeleThirdPartyCode $modCodeClient';
1019 // Load object modCodeFournisseur
1020 $module = getDolGlobalString('SOCIETE_CODECLIENT_ADDON', 'mod_codeclient_leopard');
1021 if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php') {
1022 $module = substr($module, 0, dol_strlen($module) - 4);
1023 }
1024 $dirsociete = array_merge(array('/core/modules/societe/'), $conf->modules_parts['societe']);
1025 foreach ($dirsociete as $dirroot) {
1026 $res = dol_include_once($dirroot.$module.'.php');
1027 if ($res) {
1028 break;
1029 }
1030 }
1031 $modCodeFournisseur = new $module($db);
1032 '@phan-var-force ModeleThirdPartyCode $modCodeFournisseur';
1033
1034 // Define if customer/prospect or supplier status is set or not
1035 if (GETPOST("type", 'aZ') != 'f') {
1036 $object->client = -1;
1037 if (getDolGlobalString('THIRDPARTY_CUSTOMERPROSPECT_BY_DEFAULT')) {
1038 $object->client = 3;
1039 }
1040 }
1041 // Prospect / Customer
1042 if (GETPOST("type", 'aZ') == 'c') {
1043 if (getDolGlobalString('THIRDPARTY_CUSTOMERTYPE_BY_DEFAULT')) {
1044 $object->client = getDolGlobalString('THIRDPARTY_CUSTOMERTYPE_BY_DEFAULT');
1045 } else {
1046 $object->client = 3;
1047 }
1048 }
1049 if (GETPOST("type", 'aZ') == 'p') {
1050 $object->client = 2;
1051 }
1052
1053 if (getDolGlobalString('SOCIETE_DISABLE_PROSPECTSCUSTOMERS') && $object->client == 3) {
1054 $object->client = 1;
1055 }
1056
1057 if ((isModEnabled("supplier_order") || isModEnabled("supplier_invoice")) && (GETPOST("type") == 'f' || (GETPOST("type") == '' && getDolGlobalString('THIRDPARTY_SUPPLIER_BY_DEFAULT')))) {
1058 $object->fournisseur = 1;
1059 }
1060
1061 $object->name = GETPOST('name', 'alphanohtml');
1062 $object->name_alias = GETPOST('name_alias', 'alphanohtml');
1063 $object->firstname = GETPOST('firstname', 'alphanohtml');
1064 $object->particulier = $private;
1065 $object->prefix_comm = GETPOST('prefix_comm', 'alphanohtml');
1066 $object->client = GETPOSTINT('client') ? GETPOSTINT('client') : $object->client;
1067
1068 if (empty($duplicate_code_error)) {
1069 $object->code_client = GETPOST('customer_code', 'alpha');
1070 $object->fournisseur = GETPOST('fournisseur') ? GETPOSTINT('fournisseur') : $object->fournisseur;
1071 $object->code_fournisseur = GETPOST('supplier_code', 'alpha');
1072 } else {
1073 setEventMessages($langs->trans('NewCustomerSupplierCodeProposed'), null, 'warnings');
1074 }
1075
1076 $object->address = GETPOST('address', 'alphanohtml');
1077 $object->zip = GETPOST('zipcode', 'alphanohtml');
1078 $object->town = GETPOST('town', 'alphanohtml');
1079 $object->state_id = GETPOSTINT('state_id');
1080
1081 $object->socialnetworks = array();
1082 if (isModEnabled('socialnetworks')) {
1083 foreach ($socialnetworks as $key => $value) {
1084 if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml') != '') {
1085 $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml');
1086 }
1087 }
1088 }
1089
1090 $object->phone = GETPOST('phone', 'alpha');
1091 $object->phone_mobile = (string) GETPOST("phone_mobile", 'alpha');
1092 $object->fax = GETPOST('fax', 'alpha');
1093 $object->email = GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL);
1094 $object->url = GETPOST('url', 'custom', 0, FILTER_SANITIZE_URL);
1095 $object->capital = GETPOST('capital', 'alphanohtml');
1096 $paymentTermId = GETPOSTINT('cond_reglement_id'); // can be set by default values on create page and not already in get or post variables
1097 if (empty($paymentTermId) && !GETPOSTISSET('cond_reglement_id')) {
1098 $paymentTermId = getDolGlobalString('MAIN_DEFAULT_PAYMENT_TERM_ID');
1099 }
1100 $object->cond_reglement_id = $paymentTermId;
1101 $paymentTypeId = GETPOSTINT('mode_reglement_id'); // can be set by default values on create page and not already in get or post variables
1102 if (empty($paymentTypeId) && !GETPOSTISSET('mode_reglement_id')) {
1103 $paymentTypeId = getDolGlobalString('MAIN_DEFAULT_PAYMENT_TYPE_ID');
1104 }
1105 $object->mode_reglement_id = $paymentTypeId;
1106 $object->barcode = GETPOST('barcode', 'alphanohtml');
1107 $object->idprof1 = GETPOST('idprof1', 'alphanohtml');
1108 $object->idprof2 = GETPOST('idprof2', 'alphanohtml');
1109 $object->idprof3 = GETPOST('idprof3', 'alphanohtml');
1110 $object->idprof4 = GETPOST('idprof4', 'alphanohtml');
1111 $object->idprof5 = GETPOST('idprof5', 'alphanohtml');
1112 $object->idprof6 = GETPOST('idprof6', 'alphanohtml');
1113 $object->typent_id = GETPOSTINT('typent_id');
1114 $object->effectif_id = GETPOSTINT('effectif_id');
1115 $object->civility_id = GETPOST('civility_id', 'alpha');
1116
1117 $object->tva_assuj = GETPOSTINT('assujtva_value');
1118 $object->vat_reverse_charge = GETPOST('vat_reverse_charge') == 'on' ? 1 : 0;
1119 $object->status = GETPOSTINT('status');
1120
1121 //Local Taxes
1122 $object->localtax1_assuj = GETPOSTINT('localtax1assuj_value');
1123 $object->localtax2_assuj = GETPOSTINT('localtax2assuj_value');
1124
1125 $object->localtax1_value = GETPOSTINT('lt1');
1126 $object->localtax2_value = GETPOSTINT('lt2');
1127
1128 $object->tva_intra = GETPOST('tva_intra', 'alphanohtml');
1129
1130 $object->commercial_id = GETPOSTINT('commercial_id');
1131 $object->default_lang = GETPOST('default_lang');
1132
1133 if (GETPOSTISSET('accountancy_code_sell')) {
1134 $accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha');
1135
1136 if (empty($accountancy_code_sell) || $accountancy_code_sell == '-1') {
1137 $object->accountancy_code_sell = '';
1138 } else {
1139 $object->accountancy_code_sell = $accountancy_code_sell;
1140 }
1141 }
1142 if (GETPOSTISSET('accountancy_code_buy')) {
1143 $accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha');
1144
1145 if (empty($accountancy_code_buy) || $accountancy_code_buy == '-1') {
1146 $object->accountancy_code_buy = '';
1147 } else {
1148 $object->accountancy_code_buy = $accountancy_code_buy;
1149 }
1150 }
1151
1152 $object->logo = (isset($_FILES['photo']) ? dol_sanitizeFileName($_FILES['photo']['name']) : '');
1153
1154 // Company logo management
1155 $dir = $conf->societe->multidir_output[$conf->entity]."/".$object->id."/logos";
1156 $file_OK = (isset($_FILES['photo']) ? is_uploaded_file($_FILES['photo']['tmp_name']) : false);
1157 if ($file_OK) {
1158 if (image_format_supported($_FILES['photo']['name'])) {
1159 dol_mkdir($dir);
1160
1161 if (@is_dir($dir)) {
1162 $newfile = $dir.'/'.dol_sanitizeFileName($_FILES['photo']['name']);
1163 $result = dol_move_uploaded_file($_FILES['photo']['tmp_name'], $newfile, 1);
1164
1165 if (!($result > 0)) {
1166 $errors[] = "ErrorFailedToSaveFile";
1167 } else {
1168 // Create thumbs
1169 $object->addThumbs($newfile);
1170 }
1171 }
1172 }
1173 }
1174
1175 // We set country_id, country_code and country for the selected country
1176 $object->country_id = GETPOST('country_id') ? GETPOST('country_id') : $mysoc->country_id;
1177 if ($object->country_id) {
1178 $tmparray = getCountry($object->country_id, 'all');
1179 $object->country_code = $tmparray['code'];
1180 $object->country = $tmparray['label'];
1181 }
1182 $object->forme_juridique_code = GETPOSTINT('forme_juridique_code');
1183
1184 // We set multicurrency_code if enabled
1185 if (isModEnabled("multicurrency")) {
1186 $object->multicurrency_code = GETPOST('multicurrency_code') ? GETPOST('multicurrency_code') : $conf->currency;
1187 }
1188 /* Show create form */
1189
1190 $linkback = "";
1191 print load_fiche_titre($langs->trans("NewThirdParty"), $linkback, 'building');
1192
1193 if (!empty($conf->use_javascript_ajax)) {
1194 if (getDolGlobalString('THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION')) {
1195 print "\n".'<script type="text/javascript">';
1196 print '$(document).ready(function () {
1197 id_te_private=8;
1198 id_ef15=1;
1199 is_private=' . $private.';
1200 if (is_private) {
1201 $(".individualline").show();
1202 } else {
1203 $(".individualline").hide();
1204 }
1205 $("#radiocompany").click(function() {
1206 $(".individualline").hide();
1207 $("#typent_id").val(0);
1208 $("#typent_id").change();
1209 $("#effectif_id").val(0);
1210 $("#effectif_id").change();
1211 $("#TypeName").html(document.formsoc.ThirdPartyName.value);
1212 document.formsoc.private.value=0;
1213 });
1214 $("#radioprivate").click(function() {
1215 $(".individualline").show();
1216 $("#typent_id").val(id_te_private);
1217 $("#typent_id").change();
1218 $("#effectif_id").val(id_ef15);
1219 $("#effectif_id").change();
1220 /* Force to recompute the width of a select2 field when it was hidden and then shown programmatically */
1221 if ($("#civility_id").data("select2")) {
1222 $("#civility_id").select2({width: "resolve"});
1223 }
1224 $("#TypeName").html(document.formsoc.LastName.value);
1225 document.formsoc.private.value=1;
1226 });';
1227
1228 if (getDolGlobalInt('MAILING_CONTACT_DEFAULT_BULK_STATUS') == 2) {
1229 print '
1230 function init_check_no_email(input) {
1231 if (input.val()!="") {
1232 $(".noemail").addClass("fieldrequired");
1233 } else {
1234 $(".noemail").removeClass("fieldrequired");
1235 }
1236 }
1237 $("#email").keyup(function() {
1238 init_check_no_email($(this));
1239 });
1240 init_check_no_email($("#email"));';
1241 }
1242 print '});';
1243 print '</script>'."\n";
1244
1245 print '<div id="selectthirdpartytype">';
1246 print '<div class="hideonsmartphone float">';
1247 print $langs->trans("ThirdPartyType").': &nbsp; &nbsp; ';
1248 print '</div>';
1249 print '<label for="radiocompany" class="radiocompany">';
1250 print '<input type="radio" id="radiocompany" class="flat" name="private" value="0"'.($private ? '' : ' checked').'>';
1251 print '&nbsp;';
1252 print $langs->trans("CreateThirdPartyOnly");
1253 print '</label>';
1254 print ' &nbsp; &nbsp; ';
1255 print '<label for="radioprivate" class="radioprivate">';
1256 $text = '<input type="radio" id="radioprivate" class="flat" name="private" value="1"'.($private ? ' checked' : '').'>';
1257 $text .= '&nbsp;';
1258 $text .= $langs->trans("CreateThirdPartyAndContact");
1259 $htmltext = $langs->trans("ToCreateContactWithSameName");
1260 print $form->textwithpicto($text, $htmltext, 1, 'help', '', 0, 3);
1261 print '</label>';
1262 print '</div>';
1263 print "<br>\n";
1264 }
1265
1266 print '<script type="text/javascript">';
1267 print '$(document).ready(function () {
1268 var canHaveCustomerCategoryIfNotCustomerProspectSupplier = ' . (!getDolGlobalString('THIRDPARTY_CAN_HAVE_CUSTOMER_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT') ? '0' : '1') . ';
1269
1270 init_customer_categ();
1271 $("#customerprospect").change(function() {
1272 init_customer_categ();
1273 });
1274 function init_customer_categ() {
1275 console.log("is customer or prospect = "+jQuery("#customerprospect").val());
1276 if (jQuery("#customerprospect").val() == 0 && !canHaveCustomerCategoryIfNotCustomerProspectSupplier) {
1277 jQuery(".visibleifcustomer").hide();
1278 } else {
1279 jQuery(".visibleifcustomer").show();
1280 }
1281 }
1282
1283 init_supplier_categ();
1284 $("#fournisseur").change(function() {
1285 init_supplier_categ();
1286 });
1287 function init_supplier_categ() {
1288 console.log("is supplier = "+jQuery("#fournisseur").val());
1289 if (jQuery("#fournisseur").val() == 0) {
1290 jQuery(".visibleifsupplier").hide();
1291 } else {
1292 jQuery(".visibleifsupplier").show();
1293 }
1294 }
1295
1296 $("#selectcountry_id").change(function() {
1297 document.formsoc.action.value="create";
1298 document.formsoc.submit();
1299 });
1300 });';
1301 print '</script>'."\n";
1302 }
1303
1304 dol_htmloutput_mesg(is_numeric($error) ? '' : $error, $errors, 'error');
1305
1306 print '<form enctype="multipart/form-data" action="'.$_SERVER["PHP_SELF"].'" method="post" name="formsoc" autocomplete="off">'; // Chrome ignor autocomplete
1307
1308 print '<input type="hidden" name="action" value="add">';
1309 print '<input type="hidden" name="token" value="'.newToken().'">';
1310 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
1311 print '<input type="hidden" name="backtopagejsfields" value="'.$backtopagejsfields.'">';
1312 print '<input type="hidden" name="dol_openinpopup" value="'.$dol_openinpopup.'">';
1313 print '<input type="hidden" name="private" value='.$object->particulier.'>';
1314 print '<input type="hidden" name="type" value='.GETPOST("type", 'alpha').'>';
1315 print '<input type="hidden" name="LastName" value="'.$langs->trans('ThirdPartyName').' / '.$langs->trans('LastName').'">';
1316 print '<input type="hidden" name="ThirdPartyName" value="'.$langs->trans('ThirdPartyName').'">';
1317 if ($modCodeClient->code_auto || $modCodeFournisseur->code_auto) {
1318 print '<input type="hidden" name="code_auto" value="1">';
1319 }
1320
1321 print dol_get_fiche_head(array(), 'card', '', 0, '');
1322
1323 // Call Hook tabContentCreateThirdparty
1324 $parameters = array();
1325 // Note that $action and $object may be modified by hook
1326 $reshook = $hookmanager->executeHooks('tabContentCreateThirdparty', $parameters, $object, $action);
1327 if (empty($reshook)) {
1328 print '<table class="border centpercent">';
1329
1330 // Name, firstname
1331 print '<tr class="tr-field-thirdparty-name"><td class="titlefieldcreate">';
1332 if ($object->particulier || $private) {
1333 print '<span id="TypeName" class="fieldrequired">'.$langs->trans('ThirdPartyName').' / '.$langs->trans('LastName', 'name').'</span>';
1334 } else {
1335 print '<span id="TypeName" class="fieldrequired">'.$form->editfieldkey('ThirdPartyName', 'name', '', $object, 0).'</span>';
1336 }
1337 print '</td><td'.(!getDolGlobalString('SOCIETE_USEPREFIX') ? ' colspan="3"' : '').'>';
1338
1339 print '<input type="text" class="minwidth300" maxlength="128" name="name" id="name" value="'.dol_escape_htmltag($object->name).'" autofocus="autofocus">';
1340 print $form->widgetForTranslation("name", $object, $permissiontoadd, 'string', 'alphanohtml', 'minwidth300'); // For some countries that need the company name in 2 languages
1341 // This implementation of the feature to search already existing company has been disabled. It must be implemented by keeping the "input text" and we must call the search ajax societe/ajax/ajaxcompanies.php
1342 // on a keydown of the input. We should show data about a duplicate found if we found less than 5 answers into a div under the input.
1343 /*
1344 print '<select class="name" name="name" id="name" style="min-width:500px"></select>';
1345 print "\n".'<script type="text/javascript">';
1346 print '$(document).ready(function () {
1347 $("#name").select2({
1348 ajax: {
1349 url: "' . DOL_URL_ROOT . '/core/ajax/ajaxcompanies.php",
1350 dataType: "json",
1351 delay: 250,
1352 data: function (params) {
1353 return {
1354 newcompany: params.term // search term
1355 }
1356 },
1357 processResults: function (data, params) {
1358 return {
1359 results: data
1360 }
1361 },
1362 cache: true
1363 },
1364
1365 placeholder: "' . $langs->trans('Name of the new third party. In the meantime we check if it already exists...') . '",
1366 allowClear: true,
1367 minimumInputLength: 3,
1368 language: select2arrayoflanguage,
1369 containerCssClass: ":all:",
1370 selectionCssClass: ":all:",
1371 tags: true,
1372 templateResult: formatCustomer,
1373 templateSelection: formatCustomerSelection
1374 });
1375
1376 function formatCustomer (Customer) {
1377 if(Customer.label === undefined) {
1378 return Customer.text;
1379 }
1380
1381 if(Customer.logo !== null ) {
1382 logo = \'<img src="\';
1383 logo += \'' . DOL_URL_ROOT . '/viewimage.php?modulepart=societe&amp;entity=1&amp;file=\' + Customer.key + "%2Flogos%2Fthumbs%2F" + Customer.logo.replace(".", "_mini.") + "&amp;cache=0";
1384 logo += \'" /></div>\';
1385 } else {
1386 logo = \'<div class="floatleft inline-block valigntop photowithmargin" style="padding:0 10px"><div class="photosociete photoref" alt="No photo"><span class="fas fa-building" style="color: #6c6aa8;"></span></div></div>\';
1387 }
1388
1389 var $container = $("<div class=\'select2-result-repository clearfix\'>" +
1390 "<div class=\'select2-result-repository__avatar floatleft inline-block valigntop\'>" + logo +
1391 "<div class=\'select2-result-repository__meta floatleft inline-block valigntop\'>" +
1392 "<div class=\'select2-result-repository__title\'></div>" +
1393 "<div class=\'select2-result-repository__name_alias\'></div>" +
1394 "<div class=\'select2-result-repository__code_client\'></div>" +
1395 "<div class=\'select2-result-repository__code_fournisseur\'></div>" +
1396 "<div class=\'select2-result-repository__companies_info\'>" +
1397 "<div class=\'select2-result-repository__email\'><i class=\'fa fa-at\'></i> </div>" +
1398 "<div class=\'select2-result-repository__address\'><i class=\'fa fa-flag\'></i> </div>" +
1399 "<div class=\'select2-result-repository__zip\'><i class=\'fa fa-circle-o\'></i> </div>" +
1400 "<div class=\'select2-result-repository__country\'><i class=\'fa fa-globe-americas\'></i> </div>" +
1401 "<div class=\'select2-result-repository__departement\'><i class=\'fa fa-circle-o\'></i> </div>" +
1402 "<div class=\'select2-result-repository__town\'><i class=\'fa fa-circle-o\'></i> </div>" +
1403 "<div class=\'select2-result-repository__siren\'><i class=\'fa fa-circle-o\'></i> </div>" +
1404 "<div class=\'select2-result-repository__datec\'><i class=\'fa fa-calendar\'></i> </div>" +
1405 "</div>" +
1406 "</div>" +
1407 "</div>"
1408 );
1409
1410 $container.find(".select2-result-repository__title").text(Customer.label);
1411 $container.find(".select2-result-repository__name_alias").text(Customer.name_alias ? Customer.name_alias : "");
1412 $container.find(".select2-result-repository__code_client").text(Customer.code_client ? Customer.code_client : "");
1413 $container.find(".select2-result-repository__code_fournisseur").text((Customer.code_fournisseur!==null) ? Customer.code_fournisseur : "");
1414 $container.find(".select2-result-repository__email").append("' . $langs->trans('EMail') . ': " + (Customer.email !== null ? Customer.email : ""));
1415 $container.find(".select2-result-repository__address").append("' . $langs->trans('Address') . ': " + (Customer.address !== null ? Customer.address : ""));
1416 $container.find(".select2-result-repository__country").append("' . $langs->trans('Country') . ': " + (Customer.country !== null ? Customer.country : ""));
1417 $container.find(".select2-result-repository__departement").append("' . $langs->trans('Region-State') . ': " + (Customer.departement !== null ? Customer.departement : ""));
1418 $container.find(".select2-result-repository__zip").append("' . $langs->trans('Zip') . ': " + (Customer.zip !== null ? Customer.zip : ""));
1419 $container.find(".select2-result-repository__town").append("' . $langs->trans('Town') . ': " + (Customer.town !== null ? Customer.town : ""));
1420 $container.find(".select2-result-repository__siren").append("' . $langs->trans('Siren') . ': " + (Customer.siren !== null ? Customer.siren : ""));
1421 $container.find(".select2-result-repository__datec").append("' . $langs->trans('Created') . ': " + (Customer.datec !== null ? Customer.datec : ""));
1422
1423 return $container;
1424 }
1425
1426 function formatCustomerSelection (selection) {
1427 return selection.label || selection.text;
1428 }
1429 });
1430 </script>
1431 ';
1432 */
1433 print '</td>';
1434 if (getDolGlobalString('SOCIETE_USEPREFIX')) { // Old not used prefix field
1435 print '<td>'.$langs->trans('Prefix').'</td><td><input type="text" size="5" maxlength="5" name="prefix_comm" value="'.dol_escape_htmltag($object->prefix_comm).'"></td>';
1436 }
1437 print '</tr>';
1438
1439 // If javascript on, we show option individual
1440 if ($conf->use_javascript_ajax) {
1441 if (getDolGlobalString('THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION')) {
1442 // Firstname
1443 print '<tr class="individualline"><td>'.$form->editfieldkey('FirstName', 'firstname', '', $object, 0).'</td>';
1444 print '<td colspan="3"><input type="text" class="minwidth300" maxlength="128" name="firstname" id="firstname" value="'.dol_escape_htmltag($object->firstname).'"></td>';
1445 print '</tr>';
1446
1447 // Title
1448 print '<tr class="individualline"><td>'.$form->editfieldkey('UserTitle', 'civility_id', '', $object, 0).'</td><td colspan="3" class="maxwidthonsmartphone">';
1449 print $formcompany->select_civility($object->civility_id, 'civility_id', 'maxwidth100').'</td>';
1450 print '</tr>';
1451 }
1452 }
1453
1454 // Alias names (commercial, trademark or alias names)
1455 print '<tr id="name_alias"><td><label for="name_alias_input">'.$langs->trans('AliasNames').'</label></td>';
1456 print '<td colspan="3"><input type="text" class="minwidth300" name="name_alias" id="name_alias_input" value="'.dol_escape_htmltag($object->name_alias).'"></td></tr>';
1457
1458 // Prospect/Customer/Supplier
1459 $selected = $object->client;
1460 $selectedcustomer = 0;
1461 $selectedprospect = 0;
1462 switch ($selected) {
1463 case 1:
1464 $selectedcustomer = 1;
1465 break;
1466 case 2:
1467 $selectedprospect = 1;
1468 break;
1469 case 3:
1470 $selectedprospect = 1;
1471 $selectedcustomer = 1;
1472 break;
1473 default:
1474 break;
1475 }
1476
1477 $selectedprospect = (GETPOSTISSET('prospect') ? GETPOSTINT('prospect') : $selectedprospect);
1478 $selectedcustomer = (GETPOSTISSET('customer') ? GETPOSTINT('customer') : $selectedcustomer);
1479 print '<tr class="marginbottomlarge height50">';
1480 if ($conf->browser->layout != 'phone') {
1481 print '<td class="titlefieldcreate">'.$form->editfieldkey('', 'customerprospect', '', $object, 0, 'string', '', 0).'</td>';
1482 }
1483 print '<td class="maxwidthonsmartphone"'.($conf->browser->layout != 'phone' ? 'colspan="3"' : 'colspan="2"').'>';
1484
1485 if (!getDolGlobalString('SOCIETE_DISABLE_PROSPECTS')) {
1486 print '<span id="spannature1" class="spannature prospect-back paddinglarge marginrightonly"><label for="prospectinput" class="valignmiddle">'.$langs->trans("Prospect").'<input id="prospectinput" class="flat checkforselect marginleftonly valignmiddle" type="checkbox" name="prospect" value="2"'.($selectedprospect ? ' checked="checked"' : '').'></label></span>';
1487 }
1488
1489 if (!getDolGlobalString('SOCIETE_DISABLE_CUSTOMERS')) {
1490 print '<span id="spannature2" class="spannature customer-back paddinglarge marginrightonly"><label for="customerinput" class="valignmiddle">'.$langs->trans("Customer").'<input id="customerinput" class="flat checkforselect marginleftonly valignmiddle" type="checkbox" name="customer" value="1"'.($selectedcustomer ? ' checked="checked"' : '').'></label></span>';
1491 }
1492
1493 if ((isModEnabled("fournisseur") && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled("supplier_order") && $user->hasRight('supplier_order', 'lire')) || (isModEnabled("supplier_invoice") && $user->hasRight('supplier_invoice', 'lire'))
1494 || (isModEnabled('supplier_proposal') && $user->hasRight('supplier_proposal', 'lire'))) {
1495 // Supplier
1496 $selected = (GETPOSTISSET('supplier') ? GETPOSTINT('supplier') : $object->fournisseur);
1497 print '<span id="spannature3" class="spannature vendor-back paddinglarge marginrightonly"><label for="supplierinput" class="valignmiddle">'.$langs->trans("Vendor").'<input id="supplierinput" class="flat checkforselect marginleftonly valignmiddle" type="checkbox" name="supplier" value="1"'.($selected ? ' checked="checked"' : '').'></label></span>';
1498 }
1499 // Add js to manage the background of nature
1500 if ($conf->use_javascript_ajax) {
1501 print '<script>
1502 function refreshNatureCss() {
1503 jQuery(".spannature").each(function( index ) {
1504 id = $(this).attr("id").split("spannature")[1];
1505 console.log(jQuery("#spannature"+(id)+" .checkforselect").is(":checked"));
1506 if (jQuery("#spannature"+(id)+" .checkforselect").is(":checked")) {
1507 if (id == 1) {
1508 jQuery("#spannature"+(id)).addClass("prospect-back").removeClass("nonature-back");
1509 }
1510 if (id == 2) {
1511 jQuery("#spannature"+(id)).addClass("customer-back").removeClass("nonature-back");
1512 }
1513 if (id == 3) {
1514 jQuery("#spannature"+(id)).addClass("vendor-back").removeClass("nonature-back");
1515 }
1516 } else {
1517 jQuery("#spannature"+(id)).removeClass("prospect-back").removeClass("customer-back").removeClass("vendor-back").addClass("nonature-back");
1518 }
1519 });
1520 }
1521
1522 function manageprospectcustomer(element) {
1523 console.log("We uncheck unwanted values on a nature");
1524 id = $(element).attr("id").split("spannature")[1];
1525 if ( id == 1){
1526 $("#spannature2 .checkforselect").prop("checked", false);
1527 }
1528 if ( id == 2){
1529 $("#spannature1 .checkforselect").prop("checked", false);
1530 }
1531 }
1532
1533 jQuery(".spannature").click(function(){
1534 console.log("We click on a nature");
1535 '.(getDolGlobalString('SOCIETE_DISABLE_PROSPECTSCUSTOMERS') ? 'manageprospectcustomer($(this));' : '').'
1536 refreshNatureCss();
1537 });
1538 refreshNatureCss();
1539 </script>';
1540 }
1541 print '</td>';
1542 print '</tr>';
1543
1544 print '<tr><td>'.$form->editfieldkey('CustomerCode', 'customer_code', '', $object, 0).'</td><td>';
1545 print '<table class="nobordernopadding"><tr><td>';
1546 $tmpcode = $object->code_client;
1547 if (empty($tmpcode) && !empty($modCodeClient->code_auto)) {
1548 $tmpcode = $modCodeClient->getNextValue($object, 0);
1549 }
1550 print '<input type="text" name="customer_code" id="customer_code" class="maxwidthonsmartphone" value="'.dol_escape_htmltag($tmpcode).'" maxlength="24">';
1551 print '</td><td>';
1552 $s = $modCodeClient->getToolTip($langs, $object, 0);
1553 print $form->textwithpicto('', $s, 1);
1554 print '</td></tr></table>';
1555 print '</td>';
1556
1557 if ($conf->browser->layout == 'phone') {
1558 print '</tr><tr>';
1559 }
1560
1561 print '<td>'.$form->editfieldkey('SupplierCode', 'supplier_code', '', $object, 0).'</td><td>';
1562
1563 if ((isModEnabled("fournisseur") && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled("supplier_order") && $user->hasRight('supplier_order', 'lire')) || (isModEnabled("supplier_invoice") && $user->hasRight('supplier_invoice', 'lire'))) {
1564 print '<table class="nobordernopadding"><tr><td>';
1565 $tmpcode = $object->code_fournisseur;
1566 if (empty($tmpcode) && !empty($modCodeFournisseur->code_auto)) {
1567 $tmpcode = $modCodeFournisseur->getNextValue($object, 1);
1568 }
1569 print '<input type="text" name="supplier_code" id="supplier_code" class="maxwidthonsmartphone" value="'.dol_escape_htmltag($tmpcode).'" maxlength="24">';
1570 print '</td><td>';
1571 $s = $modCodeFournisseur->getToolTip($langs, $object, 1);
1572 print $form->textwithpicto('', $s, 1);
1573 print '</td></tr></table>';
1574 }
1575 print '</td></tr>';
1576
1577 // Status
1578 print '<tr><td>'.$form->editfieldkey('Status', 'status', '', $object, 0).'</td><td colspan="3">';
1579 print $form->selectarray('status', array('1' => $langs->trans('InActivity'), '0' => $langs->trans('ActivityCeased')), 1, 0, 0, 0, '', 0, 0, 0, '', 'minwidth100', 1);
1580 print '</td></tr>';
1581
1582 // Barcode
1583 if (isModEnabled('barcode')) {
1584 print '<tr><td>'.$form->editfieldkey('Gencod', 'barcode', '', $object, 0).'</td>';
1585 print '<td colspan="3">';
1586 print img_picto('', 'barcode', 'class="pictofixedwidth"');
1587 print '<input type="text" class="minwidth200 maxwidth300 widthcentpercentminusx" name="barcode" id="barcode" value="'.dol_escape_htmltag($object->barcode).'">';
1588 print '</td></tr>';
1589 }
1590
1591 $colspan = ($conf->browser->layout == 'phone' ? 2 : 4);
1592 print '<tr><td'.($colspan ? ' colspan="'.$colspan.'"' : '').'>&nbsp;</td></tr>';
1593
1594 // Address
1595 print '<tr><td class="tdtop">';
1596 print $form->editfieldkey('Address', 'address', '', $object, 0);
1597 print '</td>';
1598 print '<td colspan="3">';
1599 print '<textarea name="address" id="address" class="quatrevingtpercent" rows="'.ROWS_2.'" wrap="soft">';
1600 print dol_escape_htmltag($object->address, 0, 1);
1601 print '</textarea>';
1602 print $form->widgetForTranslation("address", $object, $permissiontoadd, 'textarea', 'alphanohtml', 'quatrevingtpercent');
1603 print '</td></tr>';
1604
1605 // Zip / Town
1606 print '<tr><td>'.$form->editfieldkey('Zip', 'zipcode', '', $object, 0).'</td><td>';
1607 print $formcompany->select_ziptown($object->zip, 'zipcode', array('town', 'selectcountry_id', 'state_id'), 0, 0, '', 'maxwidth100');
1608 print '</td>';
1609 if ($conf->browser->layout == 'phone') {
1610 print '</tr><tr>';
1611 }
1612 print '<td class="tdtop">'.$form->editfieldkey('Town', 'town', '', $object, 0).'</td><td>';
1613 print $formcompany->select_ziptown($object->town, 'town', array('zipcode', 'selectcountry_id', 'state_id'), 0, 0, '', 'maxwidth150 quatrevingtpercent');
1614 print $form->widgetForTranslation("town", $object, $permissiontoadd, 'string', 'alphanohtml', 'maxwidth100 quatrevingtpercent');
1615 print '</td></tr>';
1616
1617 // Country
1618 print '<tr><td>'.$form->editfieldkey('Country', 'selectcountry_id', '', $object, 0).'</td><td colspan="3" class="maxwidthonsmartphone">';
1619 print img_picto('', 'country', 'class="pictofixedwidth"');
1620 print $form->select_country((GETPOSTISSET('country_id') ? GETPOST('country_id') : $object->country_id), 'country_id', '', 0, 'minwidth200 maxwidth300 widthcentpercentminusx');
1621 if ($user->admin) {
1622 print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1623 }
1624 print '</td></tr>';
1625
1626 // State
1627 if (!getDolGlobalString('SOCIETE_DISABLE_STATE')) {
1628 if ((getDolGlobalInt('MAIN_SHOW_REGION_IN_STATE_SELECT') == 1 || getDolGlobalInt('MAIN_SHOW_REGION_IN_STATE_SELECT') == 2)) {
1629 print '<tr><td>'.$form->editfieldkey('Region-State', 'state_id', '', $object, 0).'</td><td colspan="3" class="maxwidthonsmartphone">';
1630 } else {
1631 print '<tr><td>'.$form->editfieldkey('State', 'state_id', '', $object, 0).'</td><td colspan="3" class="maxwidthonsmartphone">';
1632 }
1633
1634 if ($object->country_id) {
1635 print img_picto('', 'state', 'class="pictofixedwidth"');
1636 print $formcompany->select_state($object->state_id, $object->country_code, 'state_id', 'minwidth200 maxwidth300 widthcentpercentminusx');
1637 } else {
1638 print $countrynotdefined;
1639 }
1640 print '</td></tr>';
1641 }
1642
1643 // Phone / Fax
1644 print '<tr><td>'.$form->editfieldkey('Phone', 'phone', '', $object, 0).'</td>';
1645 print '<td'.($conf->browser->layout == 'phone' ? ' colspan="3"' : '').'>'.img_picto('', 'object_phoning', 'class="pictofixedwidth"').' <input type="text" name="phone" id="phone" class="maxwidth200 widthcentpercentminusx" value="'.(GETPOSTISSET('phone') ? GETPOST('phone', 'alpha') : $object->phone).'"></td>';
1646
1647 if ($conf->browser->layout == 'phone') {
1648 print '</tr><tr>';
1649 }
1650
1651 // Phone mobile
1652 print '<td>'.$form->editfieldkey('PhoneMobile', 'phone_mobile', '', $object, 0).'</td>';
1653 print '<td'.($conf->browser->layout == 'phone' ? ' colspan="3"' : '').'>'.img_picto('', 'object_phoning_mobile', 'class="pictofixedwidth"').' <input type="text" name="phone_mobile" id="phone_mobile" class="maxwidth200 widthcentpercentminusx" value="'.(GETPOSTISSET('phone_mobile') ? GETPOST('phone_mobile', 'alpha') : $object->phone_mobile).'"></td></tr>';
1654
1655 // Fax
1656 print '<tr>';
1657 print '<td>'.$form->editfieldkey('Fax', 'fax', '', $object, 0).'</td>';
1658 print '<td'.($conf->browser->layout == 'phone' ? ' colspan="3"' : '').'>'.img_picto('', 'object_phoning_fax', 'class="pictofixedwidth"').' <input type="text" name="fax" id="fax" class="maxwidth200 widthcentpercentminusx" value="'.(GETPOSTISSET('fax') ? GETPOST('fax', 'alpha') : $object->fax).'"></td></tr>';
1659
1660 // URL
1661 print '<tr><td>'.$form->editfieldkey('Web', 'url', '', $object, 0).'</td>';
1662 print '<td colspan="3">'.img_picto('', 'globe', 'class="pictofixedwidth"').' <input type="text" class="maxwidth500 widthcentpercentminusx" name="url" id="url" value="'.$object->url.'"></td></tr>';
1663
1664 // Email
1665 print '<tr><td>'.$form->editfieldkey('EMail', 'email', '', $object, 0, 'string', '', getDolGlobalString('SOCIETE_EMAIL_MANDATORY')).'</td>';
1666 print '<td'.(($conf->browser->layout == 'phone') || !isModEnabled('mailing') ? ' colspan="3"' : '').'>'.img_picto('', 'object_email', 'class="pictofixedwidth"').' <input type="text" class="maxwidth200 widthcentpercentminusx" name="email" id="email" value="'.$object->email.'"></td>';
1667
1668 // Unsubscribe
1669 if (isModEnabled('mailing')) {
1670 if ($conf->browser->layout == 'phone') {
1671 print '</tr><tr>';
1672 }
1673 if ($conf->use_javascript_ajax && getDolGlobalInt('MAILING_CONTACT_DEFAULT_BULK_STATUS') == 2) {
1674 print "\n".'<script type="text/javascript">'."\n";
1675 print '$(document).ready(function () {
1676 $("#email").keyup(function() {
1677 console.log("We change email content");
1678 if ($(this).val()!="") {
1679 $(".noemail").addClass("fieldrequired");
1680 } else {
1681 $(".noemail").removeClass("fieldrequired");
1682 }
1683 });
1684 })'."\n";
1685 print '</script>'."\n";
1686 }
1687 if (!GETPOSTISSET("no_email") && !empty($object->email)) {
1688 $result = $object->getNoEmail();
1689 if ($result < 0) {
1690 setEventMessages($object->error, $object->errors, 'errors');
1691 }
1692 }
1693 print '<td class="noemail"><label for="no_email">'.$langs->trans("No_Email").'</label></td>';
1694 print '<td>';
1695 print $form->selectyesno('no_email', (GETPOSTISSET("no_email") ? GETPOSTINT("no_email") : getDolGlobalInt('MAILING_CONTACT_DEFAULT_BULK_STATUS')), 1, false, (getDolGlobalInt('MAILING_CONTACT_DEFAULT_BULK_STATUS') == 2));
1696 print '</td>';
1697 }
1698 print '</tr>';
1699
1700 // Refuse emailing of all contacts
1701 if (isModEnabled('mailing') && getDolGlobalString('THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION')) {
1702 print '<tr>';
1703 if ($conf->browser->layout != 'phone') {
1704 print '<td></td>';
1705 print '<td></td>';
1706 }
1707 print '<td class="individualline noemail">'.$form->editfieldkey($langs->trans('No_Email') .' ('.$langs->trans('Contact').')', 'contact_no_email', '', $object, 0).'</td>';
1708 print '<td class="individualline" '.(($conf->browser->layout == 'phone') || !isModEnabled('mailing') ? ' colspan="3"' : '').'>'.$form->selectyesno('contact_no_email', (GETPOSTISSET("contact_no_email") ? GETPOST("contact_no_email", 'alpha') : (empty($object->no_email) ? 0 : 1)), 1, false, 1).'</td>';
1709 print '</tr>';
1710 }
1711
1712 // Social networks
1713 if (isModEnabled('socialnetworks')) {
1714 $colspan = ($conf->browser->layout == 'phone' ? 2 : 4);
1715
1716 $object->showSocialNetwork($socialnetworks, $colspan);
1717
1718 print '<tr><td'.($colspan ? ' colspan="'.$colspan.'"' : '').'><hr></td></tr>';
1719 }
1720
1721 // Prof ids
1722 $i = 1;
1723 $j = 0;
1724 $NBCOLS = ($conf->browser->layout == 'phone' ? 1 : 2);
1725 $NBPROFIDMIN = getDolGlobalInt('THIRDPARTY_MIN_NB_PROF_ID', 2);
1726 $NBPROFIDMAX = getDolGlobalInt('THIRDPARTY_MAX_NB_PROF_ID', 6);
1727 while ($i <= $NBPROFIDMAX) {
1728 $idprof = $langs->transcountry('ProfId'.$i, $object->country_code);
1729 if ($idprof != '-' && ($i <= $NBPROFIDMIN || !empty($langs->tab_translate['ProfId'.$i.$object->country_code]))) {
1730 $key = 'idprof'.$i;
1731
1732 if (($j % $NBCOLS) == 0) {
1733 print '<tr>';
1734 }
1735
1736 $idprof_mandatory = 'SOCIETE_IDPROF'.($i).'_MANDATORY';
1737 print '<td>'.$form->editfieldkey($idprof, $key, '', $object, 0, 'string', '', (empty($conf->global->$idprof_mandatory) ? 0 : 1)).'</td><td>';
1738
1739 print $formcompany->get_input_id_prof($i, $key, $object->$key, $object->country_code);
1740 print '</td>';
1741 if (($j % $NBCOLS) == ($NBCOLS - 1)) {
1742 print '</tr>';
1743 }
1744 $j++;
1745 }
1746 $i++;
1747 }
1748 if ($NBCOLS > 1 && ($j % 2 == 1)) {
1749 print '<td colspan="2"></td></tr>';
1750 }
1751
1752 // Vat is used
1753 print '<tr><td><label for="assujtva_value">'.$form->editfieldkey('VATIsUsed', 'assujtva_value', '', $object, 0).'</label></td>';
1754 print '<td>';
1755 print '<input id="assujtva_value" name="assujtva_value" type="checkbox" ' . (GETPOSTISSET('assujtva_value') ? (GETPOST('assujtva', 'alpha') != '' ? ' checked="checked"' : '') : 'checked="checked"') . ' value="1">'; // Assujeti par default en creation
1756 print '</td>';
1757 if ($conf->browser->layout == 'phone') {
1758 print '</tr><tr>';
1759 }
1760 print '<td class="nowrap">'.$form->editfieldkey('VATIntra', 'intra_vat', '', $object, 0).'</td>';
1761 print '<td class="nowrap">';
1762 $s = '<input type="text" class="flat maxwidthonsmartphone" name="tva_intra" id="intra_vat" maxlength="20" value="'.$object->tva_intra.'">';
1763
1764 if (!getDolGlobalString('MAIN_DISABLEVATCHECK') && isInEEC($object)) {
1765 $s .= ' ';
1766
1767 if (!empty($conf->use_javascript_ajax)) {
1768 $widthpopup = 600;
1769 if (!empty($conf->dol_use_jmobile)) {
1770 $widthpopup = 350;
1771 }
1772 $heightpopup = 400;
1773 print "\n";
1774 print '<script type="text/javascript">';
1775 print "function CheckVAT(a) {\n";
1776 if ($mysoc->country_code == 'GR' && $object->country_code == 'GR' && !empty($u)) {
1777 print "GRVAT(a,'{$u}','{$p}','{$myafm}');\n";
1778 } else {
1779 print "newpopup('".DOL_URL_ROOT."/societe/checkvat/checkVatPopup.php?vatNumber='+a, '".dol_escape_js($langs->trans("VATIntraCheckableOnEUSite"))."', ".$widthpopup.", ".$heightpopup.");\n";
1780 }
1781 print "}\n";
1782 print '</script>';
1783 print "\n";
1784 $s .= '<a href="#" class="hideonsmartphone" onclick="CheckVAT(document.formsoc.tva_intra.value);">'.$langs->trans("VATIntraCheck").'</a>';
1785 $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1);
1786 } else {
1787 $s .= '<a href="'.$langs->transcountry("VATIntraCheckURL", $object->country_id).'" target="_blank" rel="noopener noreferrer">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').'</a>';
1788 }
1789 }
1790 print $s;
1791 print '</td>';
1792 print '</tr>';
1793
1794 // VAT reverse charge by default
1795 if (getDolGlobalString('ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE')) {
1796 print '<tr><td><label for="vat_reverse_charge">' . $form->editfieldkey('VATReverseChargeByDefault', 'vat_reverse_charge', '', $object, 0) . '</label></td><td colspan="3">';
1797 print '<input type="checkbox" name="vat_reverse_charge" id="vat_reverse_charge" '.($object->vat_reverse_charge == '1' ? ' checked' : '').'>';
1798 print '</td></tr>';
1799 }
1800
1801 // Local Taxes
1802 //TODO: Place into a function to control showing by country or study better option
1803 if ($mysoc->localtax1_assuj == "1" && $mysoc->localtax2_assuj == "1") {
1804 print '<tr><td>'.$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code).'</td><td>';
1805 print '<input id="localtax1assuj_value" name="localtax1assuj_value" type="checkbox" ' . (isset($conf->global->THIRDPARTY_DEFAULT_USELOCALTAX1) ? 'checked="checked"' : '') . ' value="1">';
1806 print '</td>';
1807 if ($conf->browser->layout == 'phone') {
1808 print '</tr><tr>';
1809 }
1810 print '<td>'.$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code).'</td><td>';
1811 print '<input id="localtax2assuj_value" name="localtax2assuj_value" type="checkbox" ' . (isset($conf->global->THIRDPARTY_DEFAULT_USELOCALTAX2) ? 'checked="checked"' : '') . ' value="1">';
1812 print '</td></tr>';
1813 } elseif ($mysoc->localtax1_assuj == "1") {
1814 print '<tr><td>'.$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code).'</td><td colspan="3">';
1815 print '<input id="localtax1assuj_value" name="localtax1assuj_value" type="checkbox" ' . (isset($conf->global->THIRDPARTY_DEFAULT_USELOCALTAX1) ? 'checked="checked"' : '') . ' value="1">';
1816 print '</td></tr>';
1817 } elseif ($mysoc->localtax2_assuj == "1") {
1818 print '<tr><td>'.$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code).'</td><td colspan="3">';
1819 print '<input id="localtax2assuj_value" name="localtax2assuj_value" type="checkbox" ' . (isset($conf->global->THIRDPARTY_DEFAULT_USELOCALTAX2) ? 'checked="checked"' : '') . ' value="1">';
1820 print '</td></tr>';
1821 }
1822
1823 // Type - Workforce/Staff
1824 print '<tr><td>'.$form->editfieldkey('ThirdPartyType', 'typent_id', '', $object, 0).'</td><td class="maxwidthonsmartphone"'.(($conf->browser->layout == 'phone' || getDolGlobalString('SOCIETE_DISABLE_WORKFORCE')) ? ' colspan="3"' : '').'>'."\n";
1825 $sortparam = (!getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? 'ASC' : $conf->global->SOCIETE_SORT_ON_TYPEENT); // NONE means we keep sort of original array, so we sort on position. ASC, means next function will sort on label.
1826 print $form->selectarray("typent_id", $formcompany->typent_array(0), $object->typent_id, 1, 0, 0, '', 0, 0, 0, $sortparam, '', 1);
1827 if ($user->admin) {
1828 print ' '.info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1829 }
1830 if (!getDolGlobalString('SOCIETE_DISABLE_WORKFORCE')) {
1831 print '</td>';
1832 if ($conf->browser->layout == 'phone') {
1833 print '</tr><tr>';
1834 }
1835 print '<td>'.$form->editfieldkey('Workforce', 'effectif_id', '', $object, 0).'</td><td class="maxwidthonsmartphone"'.($conf->browser->layout == 'phone' ? ' colspan="3"' : '').'>';
1836 print $form->selectarray("effectif_id", $formcompany->effectif_array(0), $object->effectif_id, 0, 0, 0, '', 0, 0, 0, '', '', 1);
1837 if ($user->admin) {
1838 print ' '.info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1839 }
1840 } else {
1841 print '<input type="hidden" name="effectif_id" id="effectif_id" value="'.$object->effectif_id.'">';
1842 }
1843 print '</td></tr>';
1844
1845 // Legal Form
1846 print '<tr><td>'.$form->editfieldkey('JuridicalStatus', 'forme_juridique_code', '', $object, 0).'</td>';
1847 print '<td colspan="3" class="maxwidthonsmartphone">';
1848 if ($object->country_id) {
1849 print $formcompany->select_juridicalstatus($object->forme_juridique_code, $object->country_code, '', 'forme_juridique_code');
1850 } else {
1851 print $countrynotdefined;
1852 }
1853 print '</td></tr>';
1854
1855 // Capital
1856 print '<tr><td>'.$form->editfieldkey('Capital', 'capital', '', $object, 0).'</td>';
1857 print '<td colspan="3"><input type="text" name="capital" id="capital" class="maxwidth100" value="'.$object->capital.'"> ';
1858 if (isModEnabled("multicurrency")) {
1859 print '<span class="hideonsmartphone">'.$langs->trans("Currency".$object->multicurrency_code).'</span></td></tr>';
1860 } else {
1861 print '<span class="hideonsmartphone">'.$langs->trans("Currency".$conf->currency).'</span></td></tr>';
1862 }
1863 if (getDolGlobalInt('MAIN_MULTILANGS')) {
1864 print '<tr><td>'.$form->editfieldkey('DefaultLang', 'default_lang', '', $object, 0).'</td><td colspan="3" class="maxwidthonsmartphone">'."\n";
1865 print img_picto('', 'language', 'class="pictofixedwidth"').$formadmin->select_language(GETPOST('default_lang', 'alpha') ? GETPOST('default_lang', 'alpha') : ($object->default_lang ? $object->default_lang : ''), 'default_lang', 0, array(), 1, 0, 0, 'maxwidth200onsmartphone');
1866 print '</td>';
1867 print '</tr>';
1868 }
1869
1870 // Payment terms of the settlement
1871 print '<tr>';
1872 print '<td>'.$form->editfieldkey('PaymentConditions', 'cond_reglement_id', '', $object, 0).'</td>';
1873 print '<td colspan="3" class="maxwidthonsmartphone">';
1874 print $form->getSelectConditionsPaiements($object->cond_reglement_id, 'cond_reglement_id', 1, 1, 1, '', $object->deposit_percent);
1875 print '</td></tr>';
1876
1877 // Payment mode
1878 print '<tr>';
1879 print '<td>'.$form->editfieldkey('PaymentMode', 'mode_reglement_id', '', $object, 0).'</td>';
1880 print '<td colspan="3" class="maxwidthonsmartphone">';
1881 print $form->select_types_paiements($object->mode_reglement_id, 'mode_reglement_id', '', 0, 1, 1, 0, 1);
1882 print '</td></tr>';
1883
1884 // Incoterms
1885 if (isModEnabled('incoterm')) {
1886 print '<tr>';
1887 print '<td>'.$form->editfieldkey('IncotermLabel', 'incoterm_id', '', $object, 0).'</td>';
1888 print '<td colspan="3" class="maxwidthonsmartphone">';
1889 print $form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms : ''), (!empty($object->location_incoterms) ? $object->location_incoterms : ''));
1890 print '</td></tr>';
1891 }
1892
1893 // Categories
1894 if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) {
1895 $langs->load('categories');
1896
1897 // Customer
1898 print '<tr class="visibleifcustomer"><td class="toptd">'.$form->editfieldkey('CustomersProspectsCategoriesShort', 'custcats', '', $object, 0).'</td><td colspan="3">';
1899 $cate_arbo = $form->select_all_categories(Categorie::TYPE_CUSTOMER, '', 'parent', 64, 0, 3);
1900 print img_picto('', 'category', 'class="pictofixedwidth"').$form->multiselectarray('custcats', $cate_arbo, GETPOST('custcats', 'array'), 0, 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0);
1901 print "</td></tr>";
1902
1903 if (getDolGlobalString('THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION')) {
1904 print '<tr class="individualline"><td class="toptd">'.$form->editfieldkey('ContactCategoriesShort', 'contcats', '', $object, 0).'</td><td colspan="3">';
1905 $cate_arbo = $form->select_all_categories(Categorie::TYPE_CONTACT, '', 'parent', 64, 0, 3);
1906 print img_picto('', 'category', 'class="pictofixedwidth"').$form->multiselectarray('contcats', $cate_arbo, GETPOST('contcats', 'array'), 0, 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0);
1907 print "</td></tr>";
1908 }
1909
1910 // Supplier
1911 if (isModEnabled("supplier_proposal") || isModEnabled("supplier_order") || isModEnabled("supplier_invoice")) {
1912 print '<tr class="visibleifsupplier"><td class="toptd">'.$form->editfieldkey('SuppliersCategoriesShort', 'suppcats', '', $object, 0).'</td><td colspan="3">';
1913 $cate_arbo = $form->select_all_categories(Categorie::TYPE_SUPPLIER, '', 'parent', 64, 0, 3);
1914 print img_picto('', 'category', 'class="pictofixedwidth"').$form->multiselectarray('suppcats', $cate_arbo, GETPOST('suppcats', 'array'), 0, 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0);
1915 print "</td></tr>";
1916 }
1917 }
1918
1919 // Multicurrency
1920 if (isModEnabled("multicurrency")) {
1921 print '<tr>';
1922 print '<td>'.$form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0).'</td>';
1923 print '<td colspan="3" class="maxwidthonsmartphone">';
1924 print img_picto('', 'currency', 'class="pictofixedwidth"');
1925 print $form->selectMultiCurrency((GETPOSTISSET('multicurrency_code') ? GETPOST('multicurrency_code') : ($object->multicurrency_code ? $object->multicurrency_code : $conf->currency)), 'multicurrency_code', 1, '', false, 'maxwidth150 widthcentpercentminusx');
1926 print '</td></tr>';
1927 }
1928
1929 // Other attributes
1930 $parameters = array('socid' => $socid, 'colspan' => ' colspan="3"', 'colspanvalue' => '3');
1931 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';
1932
1933 // Parent company
1934 if (!getDolGlobalString('SOCIETE_DISABLE_PARENTCOMPANY')) {
1935 print '<tr>';
1936 print '<td>'.$langs->trans('ParentCompany').'</td>';
1937 print '<td colspan="3" class="maxwidthonsmartphone">';
1938 print img_picto('', 'company', 'class="paddingrightonly"');
1939 print $form->select_company(GETPOST('parent_company_id'), 'parent_company_id', '', 'SelectThirdParty', 0, 0, array(), 0, 'minwidth300 maxwidth500 widthcentpercentminusxx');
1940 print '</td></tr>';
1941 }
1942
1943 // Assign a sale representative
1944 print '<tr>';
1945 print '<td>'.$form->editfieldkey('AllocateCommercial', 'commercial_id', '', $object, 0).'</td>';
1946 print '<td colspan="3" class="maxwidthonsmartphone">';
1947 // TODO Use select_doluser in multiselect mode
1948 $userlist = $form->select_dolusers($selected, '', 0, null, 0, '', '', '0', 0, 0, 'AND u.statut = 1', 0, '', '', 0, 2);
1949 // Note: If user has no right to "see all thirdparties", we force selection of sale representative to him, so after creation he can see the record.
1950 $selected = (GETPOSTISARRAY('commercial') ? GETPOST('commercial', 'array:int') : (GETPOSTINT('commercial') > 0 ? array(GETPOSTINT('commercial')) : array($user->id)));
1951 print img_picto('', 'user').$form->multiselectarray('commercial', $userlist, $selected, 0, 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0);
1952 print '</td></tr>';
1953
1954 // Add logo
1955 print '<tr class="hideonsmartphone">';
1956 print '<td>'.$form->editfieldkey('Logo', 'photoinput', '', $object, 0).'</td>';
1957 print '<td colspan="3">';
1958 print '<input class="flat" type="file" name="photo" id="photoinput" />';
1959 print '</td>';
1960 print '</tr>';
1961
1962 print '</table>'."\n";
1963
1964 // Accountancy codes
1965 if (getDolGlobalString('ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY')) {
1966 print '<table class="border centpercent">';
1967
1968 if (isModEnabled('accounting')) {
1969 // Accountancy_code_sell
1970 print '<tr><td class="titlefieldcreate">'.$langs->trans("ProductAccountancySellCode").'</td>';
1971 print '<td>';
1972 $accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha');
1973 print $formaccounting->select_account($accountancy_code_sell, 'accountancy_code_sell', 1, array(), 1, 1, '');
1974 print '</td></tr>';
1975
1976 // Accountancy_code_buy
1977 print '<tr><td class="titlefieldcreate">'.$langs->trans("ProductAccountancyBuyCode").'</td>';
1978 print '<td>';
1979 $accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha');
1980 print $formaccounting->select_account($accountancy_code_buy, 'accountancy_code_buy', 1, array(), 1, 1, '');
1981 print '</td></tr>';
1982 } else { // For external software
1983 // Accountancy_code_sell
1984 print '<tr><td class="titlefieldcreate">'.$langs->trans("ProductAccountancySellCode").'</td>';
1985 print '<td class="maxwidthonsmartphone"><input class="minwidth100" name="accountancy_code_sell" value="'.$object->accountancy_code_sell.'">';
1986 print '</td></tr>';
1987
1988 // Accountancy_code_buy
1989 print '<tr><td class="titlefieldcreate">'.$langs->trans("ProductAccountancyBuyCode").'</td>';
1990 print '<td class="maxwidthonsmartphone"><input class="minwidth100" name="accountancy_code_buy" value="'.$object->accountancy_code_buy.'">';
1991 print '</td></tr>';
1992 }
1993
1994 print '</table>';
1995 }
1996 }
1997
1998 print dol_get_fiche_end();
1999
2000 print $form->buttonsSaveCancel('AddThirdParty', 'Cancel', array(), 0, '', $dol_openinpopup);
2001
2002 print '</form>'."\n";
2003 } elseif ($action == 'edit') {
2004 //print load_fiche_titre($langs->trans("EditCompany"));
2005
2006 if ($socid) {
2007 $res = $object->fetch_optionals();
2008 //if ($res < 0) { dol_print_error($db); exit; }
2009
2011
2012 // Load object modCodeTiers
2013 $module = getDolGlobalString('SOCIETE_CODECLIENT_ADDON', 'mod_codeclient_leopard');
2014 if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php') {
2015 $module = substr($module, 0, dol_strlen($module) - 4);
2016 }
2017 $dirsociete = array_merge(array('/core/modules/societe/'), $conf->modules_parts['societe']);
2018 foreach ($dirsociete as $dirroot) {
2019 $res = dol_include_once($dirroot.$module.'.php');
2020 if ($res) {
2021 break;
2022 }
2023 }
2024 $modCodeClient = new $module($db);
2025 '@phan-var-force ModeleThirdPartyCode $modCodeClient';
2026 // We check if the prefix tag is used
2027 if ($modCodeClient->code_auto) {
2028 $prefixCustomerIsUsed = $modCodeClient->verif_prefixIsUsed();
2029 } else {
2030 $prefixCustomerIsUsed = false;
2031 }
2032 $module = getDolGlobalString('SOCIETE_CODECLIENT_ADDON');
2033 if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php') {
2034 $module = substr($module, 0, dol_strlen($module) - 4);
2035 }
2036 $dirsociete = array_merge(array('/core/modules/societe/'), $conf->modules_parts['societe']);
2037 foreach ($dirsociete as $dirroot) {
2038 $res = dol_include_once($dirroot.$module.'.php');
2039 if ($res) {
2040 break;
2041 }
2042 }
2043 $modCodeFournisseur = new $module($db);
2044 '@phan-var-force ModeleThirdPartyCode $modCodeFournisseur';
2045 // We check if the prefix tag is used
2046 if ($modCodeFournisseur->code_auto) {
2047 $prefixSupplierIsUsed = $modCodeFournisseur->verif_prefixIsUsed();
2048 } else {
2049 $prefixSupplierIsUsed = false;
2050 }
2051
2052 $object->oldcopy = clone $object;
2053
2054 if (GETPOSTISSET('name')) {
2055 // We overwrite with values if posted
2056 $object->name = GETPOST('name', 'alphanohtml');
2057 $object->name_alias = GETPOST('name_alias', 'alphanohtml');
2058 $object->prefix_comm = GETPOST('prefix_comm', 'alphanohtml');
2059 $object->client = GETPOSTINT('client');
2060 $object->code_client = GETPOST('customer_code', 'alpha');
2061 $object->fournisseur = GETPOSTINT('fournisseur');
2062 $object->code_fournisseur = GETPOST('supplier_code', 'alpha');
2063 $object->address = GETPOST('address', 'alphanohtml');
2064 $object->zip = GETPOST('zipcode', 'alphanohtml');
2065 $object->town = GETPOST('town', 'alphanohtml');
2066 $object->country_id = GETPOST('country_id') ? GETPOSTINT('country_id') : $mysoc->country_id;
2067 $object->state_id = GETPOSTINT('state_id');
2068 $object->parent = GETPOSTINT('parent_company_id');
2069
2070 $object->socialnetworks = array();
2071 if (isModEnabled('socialnetworks')) {
2072 foreach ($socialnetworks as $key => $value) {
2073 if (GETPOSTISSET($key) && GETPOST($key, 'alphanohtml') != '') {
2074 $object->socialnetworks[$key] = GETPOST($key, 'alphanohtml');
2075 }
2076 }
2077 }
2078
2079 $object->phone = GETPOST('phone', 'alpha');
2080 $object->phone_mobile = (string) GETPOST('phone_mobile', 'alpha');
2081 $object->fax = GETPOST('fax', 'alpha');
2082 $object->email = GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL);
2083 $object->no_email = GETPOSTINT("no_email");
2084 $object->url = GETPOST('url', 'custom', 0, FILTER_SANITIZE_URL);
2085 $object->capital = GETPOST('capital', 'alphanohtml');
2086 $object->idprof1 = GETPOST('idprof1', 'alphanohtml');
2087 $object->idprof2 = GETPOST('idprof2', 'alphanohtml');
2088 $object->idprof3 = GETPOST('idprof3', 'alphanohtml');
2089 $object->idprof4 = GETPOST('idprof4', 'alphanohtml');
2090 $object->idprof5 = GETPOST('idprof5', 'alphanohtml');
2091 $object->idprof6 = GETPOST('idprof6', 'alphanohtml');
2092 $object->typent_id = GETPOSTINT('typent_id');
2093 $object->effectif_id = GETPOSTINT('effectif_id');
2094 $object->barcode = GETPOST('barcode', 'alphanohtml');
2095 $object->forme_juridique_code = GETPOSTINT('forme_juridique_code');
2096 $object->default_lang = GETPOST('default_lang', 'alpha');
2097
2098 $object->tva_assuj = GETPOSTINT('assujtva_value');
2099 $object->vat_reverse_charge = GETPOST('vat_reverse_charge') == 'on' ? 1 : 0;
2100 $object->tva_intra = GETPOST('tva_intra', 'alphanohtml');
2101 $object->status = GETPOSTINT('status');
2102
2103 // Webservices url/key
2104 $object->webservices_url = GETPOST('webservices_url', 'custom', 0, FILTER_SANITIZE_URL);
2105 $object->webservices_key = GETPOST('webservices_key', 'san_alpha');
2106
2107 if (GETPOSTISSET('accountancy_code_sell')) {
2108 $accountancy_code_sell = GETPOST('accountancy_code_sell', 'alpha');
2109
2110 if (empty($accountancy_code_sell) || $accountancy_code_sell == '-1') {
2111 $object->accountancy_code_sell = '';
2112 } else {
2113 $object->accountancy_code_sell = $accountancy_code_sell;
2114 }
2115 }
2116 if (GETPOSTISSET('accountancy_code_buy')) {
2117 $accountancy_code_buy = GETPOST('accountancy_code_buy', 'alpha');
2118
2119 if (empty($accountancy_code_buy) || $accountancy_code_buy == '-1') {
2120 $object->accountancy_code_buy = '';
2121 } else {
2122 $object->accountancy_code_buy = $accountancy_code_buy;
2123 }
2124 }
2125
2126 //Incoterms
2127 if (isModEnabled('incoterm')) {
2128 $object->fk_incoterms = GETPOSTINT('incoterm_id');
2129 $object->location_incoterms = GETPOST('lcoation_incoterms', 'alpha');
2130 }
2131
2132 //Local Taxes
2133 $object->localtax1_assuj = GETPOST('localtax1assuj_value');
2134 $object->localtax2_assuj = GETPOST('localtax2assuj_value');
2135
2136 $object->localtax1_value = GETPOST('lt1');
2137 $object->localtax2_value = GETPOST('lt2');
2138
2139 // We set country_id, and country_code label of the chosen country
2140 if ($object->country_id > 0) {
2141 $tmparray = getCountry($object->country_id, 'all');
2142 $object->country_code = $tmparray['code'];
2143 $object->country = $tmparray['label'];
2144 }
2145
2146 // We set multicurrency_code if enabled
2147 if (isModEnabled("multicurrency")) {
2148 $object->multicurrency_code = GETPOST('multicurrency_code') ? GETPOST('multicurrency_code') : $object->multicurrency_code;
2149 }
2150 }
2151
2152 if ($object->localtax1_assuj == 0) {
2153 $sub = 0;
2154 } else {
2155 $sub = 1;
2156 }
2157 if ($object->localtax2_assuj == 0) {
2158 $sub2 = 0;
2159 } else {
2160 $sub2 = 1;
2161 }
2162
2163 if (!empty($conf->use_javascript_ajax)) {
2164 print "\n".'<script type="text/javascript">';
2165 print '$(document).ready(function () {
2166 var val='.$sub.';
2167 var val2='.$sub2.';
2168 if("#localtax1assuj_value".value==undefined){
2169 if(val==1){
2170 $(".cblt1").show();
2171 }else{
2172 $(".cblt1").hide();
2173 }
2174 }
2175 if("#localtax2assuj_value".value==undefined){
2176 if(val2==1){
2177 $(".cblt2").show();
2178 }else{
2179 $(".cblt2").hide();
2180 }
2181 }
2182 $("#localtax1assuj_value").change(function() {
2183 var value=document.getElementById("localtax1assuj_value").value;
2184 if(value==1){
2185 $(".cblt1").show();
2186 }else{
2187 $(".cblt1").hide();
2188 }
2189 });
2190 $("#localtax2assuj_value").change(function() {
2191 var value=document.getElementById("localtax2assuj_value").value;
2192 if(value==1){
2193 $(".cblt2").show();
2194 }else{
2195 $(".cblt2").hide();
2196 }
2197 });
2198
2199 var canHaveCustomerCategoryIfNotCustomerProspect = ' . (getDolGlobalInt('THIRDPARTY_CAN_HAVE_CUSTOMER_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT') ? '1' : '0') . ';
2200
2201 init_customer_categ();
2202 $("#customerprospect").change(function() {
2203 init_customer_categ();
2204 });
2205 function init_customer_categ() {
2206 console.log("is customer or prospect = "+jQuery("#customerprospect").val());
2207 if (jQuery("#customerprospect").val() == 0 && !canHaveCustomerCategoryIfNotCustomerProspect)
2208 {
2209 jQuery(".visibleifcustomer").hide();
2210 }
2211 else
2212 {
2213 jQuery(".visibleifcustomer").show();
2214 }
2215 }
2216
2217 init_supplier_categ();
2218 $("#fournisseur").change(function() {
2219 init_supplier_categ();
2220 });
2221 function init_supplier_categ() {
2222 console.log("is supplier = "+jQuery("#fournisseur").val());
2223 if (jQuery("#fournisseur").val() == 0)
2224 {
2225 jQuery(".visibleifsupplier").hide();
2226 }
2227 else
2228 {
2229 jQuery(".visibleifsupplier").show();
2230 }
2231 }
2232
2233 $("#selectcountry_id").change(function() {
2234 document.formsoc.action.value="edit";
2235 document.formsoc.submit();
2236 });
2237
2238 })';
2239 print '</script>'."\n";
2240 }
2241
2242 print '<form enctype="multipart/form-data" action="'.$_SERVER["PHP_SELF"].'?socid='.$object->id.'" method="post" name="formsoc">';
2243 print '<input type="hidden" name="action" value="update">';
2244 print '<input type="hidden" name="token" value="'.newToken().'">';
2245 print '<input type="hidden" name="socid" value="'.$object->id.'">';
2246 print '<input type="hidden" name="entity" value="'.$object->entity.'">';
2247 if ($modCodeClient->code_auto || $modCodeFournisseur->code_auto) {
2248 print '<input type="hidden" name="code_auto" value="1">';
2249 }
2250
2251
2252 print dol_get_fiche_head($head, 'card', $langs->trans("ThirdParty"), 0, 'company');
2253
2254 print '<div class="fichecenter2">';
2255 // Call Hook tabContentEditThirdparty
2256 $parameters = array();
2257 // Note that $action and $object may be modified by hook
2258 $reshook = $hookmanager->executeHooks('tabContentEditThirdparty', $parameters, $object, $action);
2259 if (empty($reshook)) {
2260 print '<table class="border centpercent">';
2261
2262 // Ref/ID
2263 if (getDolGlobalString('MAIN_SHOW_TECHNICAL_ID')) {
2264 print '<tr><td class="titlefieldcreate">'.$langs->trans("ID").'</td><td colspan="3">';
2265 print $object->ref;
2266 print '</td></tr>';
2267 }
2268
2269 // Name
2270 print '<tr><td class="titlefieldcreate">'.$form->editfieldkey('ThirdPartyName', 'name', '', $object, 0, 'string', '', 1).'</td>';
2271 print '<td colspan="3"><input type="text" class="minwidth300" maxlength="128" name="name" id="name" value="'.dol_escape_htmltag($object->name).'" autofocus="autofocus">';
2272 print $form->widgetForTranslation("name", $object, $permissiontoadd, 'string', 'alphanohtml', 'minwidth300');
2273 print '</td></tr>';
2274
2275 // Alias names (commercial, trademark or alias names)
2276 print '<tr id="name_alias"><td><label for="name_alias_input">'.$langs->trans('AliasNames').'</label></td>';
2277 print '<td colspan="3"><input type="text" class="minwidth300" name="name_alias" id="name_alias_input" value="'.dol_escape_htmltag($object->name_alias).'"></td></tr>';
2278
2279 // Prefix
2280 if (getDolGlobalString('SOCIETE_USEPREFIX')) { // Old not used prefix field
2281 print '<tr><td>'.$form->editfieldkey('Prefix', 'prefix', '', $object, 0).'</td><td colspan="3">';
2282 // It does not change the prefix mode using the auto numbering prefix
2283 if (($prefixCustomerIsUsed || $prefixSupplierIsUsed) && $object->prefix_comm) {
2284 print '<input type="hidden" name="prefix_comm" value="'.dol_escape_htmltag($object->prefix_comm).'">';
2285 print $object->prefix_comm;
2286 } else {
2287 print '<input type="text" size="5" maxlength="5" name="prefix_comm" id="prefix" value="'.dol_escape_htmltag($object->prefix_comm).'">';
2288 }
2289 print '</td>';
2290 }
2291
2292 // Prospect/Customer/Supplier
2293 $selected = $object->client;
2294 $selectedcustomer = 0;
2295 $selectedprospect = 0;
2296 switch ($selected) {
2297 case 1:
2298 $selectedcustomer = 1;
2299 break;
2300 case 2:
2301 $selectedprospect = 1;
2302 break;
2303 case 3:
2304 $selectedprospect = 1;
2305 $selectedcustomer = 1;
2306 break;
2307 default:
2308 break;
2309 }
2310
2311 // Nature of thirdparty
2312 $selectedprospect = (GETPOSTISSET('prospect') ? GETPOSTINT('prospect') : $selectedprospect);
2313 $selectedcustomer = (GETPOSTISSET('customer') ? GETPOSTINT('customer') : $selectedcustomer);
2314 print '<tr class="marginbottomlarge height50"><td class="titlefieldcreate">'.$form->editfieldkey('', 'customerprospect', '', $object, 0, 'string', '', 0).'</td>';
2315 print '<td class="maxwidthonsmartphone" colspan="3">';
2316
2317 if (!getDolGlobalString('SOCIETE_DISABLE_PROSPECTS')) {
2318 print '<span id="spannature1" class="spannature prospect-back paddinglarge marginrightonly"><label for="prospectinput" class="valignmiddle">'.$langs->trans("Prospect").'<input id="prospectinput" class="flat checkforselect marginleftonly valignmiddle" type="checkbox" name="prospect" value="2"'.($selectedprospect ? ' checked="checked"' : '').'></label></span>';
2319 }
2320
2321 if (!getDolGlobalString('SOCIETE_DISABLE_CUSTOMERS')) {
2322 print '<span id="spannature2" class="spannature customer-back paddinglarge marginrightonly"><label for="customerinput" class="valignmiddle">'.$langs->trans("Customer").'<input id="customerinput" class="flat checkforselect marginleftonly valignmiddle" type="checkbox" name="customer" value="1"'.($selectedcustomer ? ' checked="checked"' : '').'></label></span>';
2323 }
2324 if ((isModEnabled("fournisseur") && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled("supplier_order") && $user->hasRight('supplier_order', 'lire')) || (isModEnabled("supplier_invoice") && $user->hasRight('supplier_invoice', 'lire'))
2325 || (isModEnabled('supplier_proposal') && $user->hasRight('supplier_proposal', 'lire'))) {
2326 // Supplier
2327 $selected = (GETPOSTISSET('supplier') ? GETPOSTINT('supplier') : $object->fournisseur);
2328 print '<span id="spannature3" class="spannature vendor-back paddinglarge marginrightonly"><label for="supplierinput" class="valignmiddle">'.$langs->trans("Vendor").'<input id="supplierinput" class="flat checkforselect marginleftonly valignmiddle" type="checkbox" name="supplier" value="1"'.($selected ? ' checked="checked"' : '').'></label></span>';
2329 }
2330
2331 // Add js to manage the background of nature
2332 if ($conf->use_javascript_ajax) {
2333 print '<script>
2334 function refreshNatureCss() {
2335 jQuery(".spannature").each(function( index ) {
2336 id = $(this).attr("id").split("spannature")[1];
2337 console.log(jQuery("#spannature"+(id)+" .checkforselect").is(":checked"));
2338 if (jQuery("#spannature"+(id)+" .checkforselect").is(":checked")) {
2339 if (id == 1) {
2340 jQuery("#spannature"+(id)).addClass("prospect-back").removeClass("nonature-back");
2341 }
2342 if (id == 2) {
2343 jQuery("#spannature"+(id)).addClass("customer-back").removeClass("nonature-back");
2344 }
2345 if (id == 3) {
2346 jQuery("#spannature"+(id)).addClass("vendor-back").removeClass("nonature-back");
2347 }
2348 } else {
2349 jQuery("#spannature"+(id)).removeClass("prospect-back").removeClass("customer-back").removeClass("vendor-back").addClass("nonature-back");
2350 }
2351 })
2352 }
2353
2354 function manageprospectcustomer(element) {
2355 console.log("We uncheck unwanted values on a nature");
2356 id = $(element).attr("id").split("spannature")[1];
2357 if ( id == 1){
2358 $("#spannature2 .checkforselect").prop("checked", false);
2359 }
2360 if ( id == 2){
2361 $("#spannature1 .checkforselect").prop("checked", false);
2362 }
2363 }
2364
2365 jQuery(".spannature").click(function(){
2366 console.log("We click on a nature");
2367 '.(getDolGlobalString('SOCIETE_DISABLE_PROSPECTSCUSTOMERS') ? 'manageprospectcustomer($(this));' : '').'
2368 refreshNatureCss();
2369 });
2370 refreshNatureCss();
2371 </script>';
2372 }
2373 print '</td>';
2374 print '</tr>';
2375 print '<tr><td>'.$form->editfieldkey('CustomerCode', 'customer_code', '', $object, 0).'</td><td>';
2376 print '<table class="nobordernopadding"><tr><td>';
2377 $tmpcode = $object->code_client;
2378 if (empty($tmpcode) && !empty($modCodeClient->code_auto)) {
2379 $tmpcode = $modCodeClient->getNextValue($object, 0);
2380 }
2381 print '<input type="text" name="customer_code" id="customer_code" class="maxwidthonsmartphone" value="'.dol_escape_htmltag($tmpcode).'" maxlength="24">';
2382 print '</td><td>';
2383 $s = $modCodeClient->getToolTip($langs, $object, 0);
2384 print $form->textwithpicto('', $s, 1);
2385 print '</td></tr></table>';
2386
2387 print '<td>'.$form->editfieldkey('SupplierCode', 'supplier_code', '', $object, 0).'</td><td>';
2388
2389 if ((isModEnabled("fournisseur") && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled("supplier_order") && $user->hasRight('supplier_order', 'lire')) || (isModEnabled("supplier_invoice") && $user->hasRight('supplier_invoice', 'lire'))) {
2390 print '<table class="nobordernopadding"><tr><td>';
2391 $tmpcode = $object->code_fournisseur;
2392 if (empty($tmpcode) && !empty($modCodeFournisseur->code_auto)) {
2393 $tmpcode = $modCodeFournisseur->getNextValue($object, 1);
2394 }
2395 print '<input type="text" name="supplier_code" id="supplier_code" class="maxwidthonsmartphone" value="'.dol_escape_htmltag($tmpcode).'" maxlength="24">';
2396 print '</td><td>';
2397 $s = $modCodeFournisseur->getToolTip($langs, $object, 1);
2398 print $form->textwithpicto('', $s, 1);
2399 print '</td></tr></table>';
2400 }
2401 print '</td></tr>';
2402
2403
2404 // Barcode
2405 if (isModEnabled('barcode')) {
2406 print '<tr><td class="tdtop">'.$form->editfieldkey('Gencod', 'barcode', '', $object, 0).'</td>';
2407 print '<td colspan="3">';
2408 print img_picto('', 'barcode', 'class="pictofixedwidth"');
2409 print '<input type="text" name="barcode" id="barcode" value="'.dol_escape_htmltag($object->barcode).'">';
2410 print '</td></tr>';
2411 }
2412
2413 // Status
2414 print '<tr><td>'.$form->editfieldkey('Status', 'status', '', $object, 0).'</td><td colspan="3">';
2415 print $form->selectarray('status', array('0' => $langs->trans('ActivityCeased'), '1' => $langs->trans('InActivity')), $object->status, 0, 0, 0, '', 0, 0, 0, '', 'minwidth100', 1);
2416 print '</td></tr>';
2417
2418 $colspan = ($conf->browser->layout == 'phone' ? 2 : 4);
2419 print '<tr><td'.($colspan ? ' colspan="'.$colspan.'"' : '').'>&nbsp;</td></tr>';
2420
2421 // Address
2422 print '<tr><td class="tdtop">'.$form->editfieldkey('Address', 'address', '', $object, 0).'</td>';
2423 print '<td colspan="3"><textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
2424 print dol_escape_htmltag($object->address, 0, 1);
2425 print '</textarea>';
2426 print $form->widgetForTranslation("address", $object, $permissiontoadd, 'textarea', 'alphanohtml', 'quatrevingtpercent');
2427 print '</td></tr>';
2428
2429 // Zip / Town
2430 print '<tr><td>'.$form->editfieldkey('Zip', 'zipcode', '', $object, 0).'</td><td'.($conf->browser->layout == 'phone' ? ' colspan="3"' : '').'>';
2431 print $formcompany->select_ziptown($object->zip, 'zipcode', array('town', 'selectcountry_id', 'state_id'), 0, 0, '', 'maxwidth100');
2432 print '</td>';
2433 if ($conf->browser->layout == 'phone') {
2434 print '</tr><tr>';
2435 }
2436 print '<td>'.$form->editfieldkey('Town', 'town', '', $object, 0).'</td><td'.($conf->browser->layout == 'phone' ? ' colspan="3"' : '').'>';
2437 print $formcompany->select_ziptown($object->town, 'town', array('zipcode', 'selectcountry_id', 'state_id'));
2438 print $form->widgetForTranslation("town", $object, $permissiontoadd, 'string', 'alphanohtml', 'maxwidth100 quatrevingtpercent');
2439 print '</td></tr>';
2440
2441 // Country
2442 print '<tr><td>'.$form->editfieldkey('Country', 'selectcounty_id', '', $object, 0).'</td><td colspan="3">';
2443 print img_picto('', 'globe-americas', 'class="pictofixedwidth"');
2444 print $form->select_country((GETPOSTISSET('country_id') ? GETPOST('country_id') : $object->country_id), 'country_id', '', 0, 'minwidth300 maxwidth500 widthcentpercentminusx');
2445 if ($user->admin) {
2446 print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
2447 }
2448 print '</td></tr>';
2449
2450 // State
2451 if (!getDolGlobalString('SOCIETE_DISABLE_STATE')) {
2452 if ((getDolGlobalInt('MAIN_SHOW_REGION_IN_STATE_SELECT') == 1 || getDolGlobalInt('MAIN_SHOW_REGION_IN_STATE_SELECT') == 2)) {
2453 print '<tr><td>'.$form->editfieldkey('Region-State', 'state_id', '', $object, 0).'</td><td colspan="3">';
2454 } else {
2455 print '<tr><td>'.$form->editfieldkey('State', 'state_id', '', $object, 0).'</td><td colspan="3">';
2456 }
2457
2458 print img_picto('', 'state', 'class="pictofixedwidth"');
2459 print $formcompany->select_state($object->state_id, $object->country_code);
2460 print '</td></tr>';
2461 }
2462
2463 // Phone / Fax
2464 print '<tr><td>'.$form->editfieldkey('Phone', 'phone', GETPOST('phone', 'alpha'), $object, 0).'</td>';
2465 print '<td'.($conf->browser->layout == 'phone' ? ' colspan="3"' : '').'>'.img_picto('', 'object_phoning', 'class="pictofixedwidth"').' <input type="text" name="phone" id="phone" class="maxwidth200 widthcentpercentminusx" value="'.(GETPOSTISSET('phone') ? GETPOST('phone', 'alpha') : $object->phone).'"></td>';
2466 if ($conf->browser->layout == 'phone') {
2467 print '</tr><tr>';
2468 }
2469 print '<td>'.$form->editfieldkey('PhoneMobile', 'phone_mobile', GETPOST('phone_mobile', 'alpha'), $object, 0).'</td>';
2470 print '<td'.($conf->browser->layout == 'phone' ? ' colspan="3"' : '').'>'.img_picto('', 'object_phoning_mobile', 'class="pictofixedwidth"').' <input type="text" name="phone_mobile" id="phone_mobile" class="maxwidth200 widthcentpercentminusx" value="'.(GETPOSTISSET('phone_mobile') ? GETPOST('phone_mobile', 'alpha') : $object->phone_mobile).'"></td></tr>';
2471
2472 print '<td>'.$form->editfieldkey('Fax', 'fax', GETPOST('fax', 'alpha'), $object, 0).'</td>';
2473 print '<td'.($conf->browser->layout == 'phone' ? ' colspan="3"' : '').'>'.img_picto('', 'object_phoning_fax', 'class="pictofixedwidth"').' <input type="text" name="fax" id="fax" class="maxwidth200 widthcentpercentminusx" value="'.(GETPOSTISSET('fax') ? GETPOST('fax', 'alpha') : $object->fax).'"></td>';
2474 print '</tr>';
2475
2476 // Web
2477 print '<tr><td>'.$form->editfieldkey('Web', 'url', GETPOST('url', 'alpha'), $object, 0).'</td>';
2478 print '<td colspan="3">'.img_picto('', 'globe', 'class="pictofixedwidth"').' <input type="text" name="url" id="url" class="maxwidth200onsmartphone maxwidth300 widthcentpercentminusx " value="'.(GETPOSTISSET('url') ? GETPOST('url', 'alpha') : $object->url).'"></td></tr>';
2479
2480 // EMail
2481 print '<tr><td>'.$form->editfieldkey('EMail', 'email', GETPOST('email', 'alpha'), $object, 0, 'string', '', (getDolGlobalString('SOCIETE_EMAIL_MANDATORY'))).'</td>';
2482 print '<td'.(($conf->browser->layout == 'phone') || !isModEnabled('mailing') ? ' colspan="3"' : '').'>';
2483 print img_picto('', 'object_email', 'class="pictofixedwidth"');
2484 print '<input type="text" name="email" id="email" class="maxwidth500 widthcentpercentminusx" value="'.(GETPOSTISSET('email') ? GETPOST('email', 'alpha') : $object->email).'">';
2485 print '</td>';
2486
2487 // Unsubscribe
2488 if (isModEnabled('mailing')) {
2489 if ($conf->browser->layout == 'phone') {
2490 print '</tr><tr>';
2491 }
2492 if ($conf->use_javascript_ajax && getDolGlobalInt('MAILING_CONTACT_DEFAULT_BULK_STATUS') == 2) {
2493 print "\n".'<script type="text/javascript">'."\n";
2494
2495 print '
2496 jQuery(document).ready(function () {
2497 function init_check_no_email(input) {
2498 if (input.val()!="") {
2499 $(".noemail").addClass("fieldrequired");
2500 } else {
2501 $(".noemail").removeClass("fieldrequired");
2502 }
2503 }
2504 $("#email").keyup(function() {
2505 init_check_no_email($(this));
2506 });
2507 init_check_no_email($("#email"));
2508 })'."\n";
2509 print '</script>'."\n";
2510 }
2511 if (!GETPOSTISSET("no_email") && !empty($object->email)) {
2512 $result = $object->getNoEmail();
2513 if ($result < 0) {
2514 setEventMessages($object->error, $object->errors, 'errors');
2515 }
2516 }
2517 print '<td class="noemail"><label for="no_email">'.$langs->trans("No_Email").'</label></td>';
2518 print '<td>';
2519 $useempty = (getDolGlobalInt('MAILING_CONTACT_DEFAULT_BULK_STATUS') == 2);
2520 print $form->selectyesno('no_email', (GETPOSTISSET("no_email") ? GETPOSTINT("no_email") : $object->no_email), 1, false, $useempty);
2521 print '</td>';
2522 }
2523 print '</tr>';
2524
2525 // Social network
2526 if (isModEnabled('socialnetworks')) {
2527 $colspan = ($conf->browser->layout == 'phone' ? 2 : 4);
2528
2529 $object->showSocialNetwork($socialnetworks, $colspan);
2530
2531 print '<tr><td'.($colspan ? ' colspan="'.$colspan.'"' : '').'><hr></td></tr>';
2532 }
2533
2534 // Prof ids
2535 $i = 1;
2536 $j = 0;
2537 $NBCOLS = ($conf->browser->layout == 'phone' ? 1 : 2);
2538 $NBPROFIDMIN = getDolGlobalInt('THIRDPARTY_MIN_NB_PROF_ID', 2);
2539 $NBPROFIDMAX = getDolGlobalInt('THIRDPARTY_MAX_NB_PROF_ID', 6);
2540 while ($i <= $NBPROFIDMAX) {
2541 $idprof = $langs->transcountry('ProfId'.$i, $object->country_code);
2542 if ($idprof != '-' && ($i <= $NBPROFIDMIN || !empty($langs->tab_translate['ProfId'.$i.$object->country_code]))) {
2543 $key = 'idprof'.$i;
2544
2545 if (($j % $NBCOLS) == 0) {
2546 print '<tr>';
2547 }
2548
2549 $idprof_mandatory = 'SOCIETE_IDPROF'.($i).'_MANDATORY';
2550 print '<td>'.$form->editfieldkey($idprof, $key, '', $object, 0, 'string', '', !(empty($conf->global->$idprof_mandatory) || !$object->isACompany())).'</td><td>';
2551 print $formcompany->get_input_id_prof($i, $key, $object->$key, $object->country_code);
2552 print '</td>';
2553 if (($j % $NBCOLS) == ($NBCOLS - 1)) {
2554 print '</tr>';
2555 }
2556 $j++;
2557 }
2558 $i++;
2559 }
2560 if ($NBCOLS > 0 && $j % 2 == 1) {
2561 print '<td colspan="2"></td></tr>';
2562 }
2563
2564 // VAT is used
2565 print '<tr><td>'.$form->editfieldkey('VATIsUsed', 'assujtva_value', '', $object, 0).'</td><td colspan="3">';
2566 print '<input id="assujtva_value" name="assujtva_value" type="checkbox" ' . ($object->tva_assuj ? 'checked="checked"' : '') . ' value="1">';
2567 print '</td></tr>';
2568
2569 // Local Taxes
2570 //TODO: Place into a function to control showing by country or study better option
2571 if ($mysoc->localtax1_assuj == "1" && $mysoc->localtax2_assuj == "1") {
2572 print '<tr><td>'.$form->editfieldkey($langs->transcountry("LocalTax1IsUsed", $mysoc->country_code), 'localtax1assuj_value', '', $object, 0).'</td><td>';
2573 print '<input id="localtax1assuj_value" name="localtax1assuj_value" type="checkbox" ' . ($object->localtax1_assuj ? 'checked="checked"' : '') . ' value="1">';
2574 if (!isOnlyOneLocalTax(1)) {
2575 print '<span class="cblt1"> '.$langs->transcountry("Type", $mysoc->country_code).': ';
2576 $formcompany->select_localtax(1, $object->localtax1_value, "lt1");
2577 print '</span>';
2578 }
2579 print '</td>';
2580 print '</tr><tr>';
2581 print '<td>'.$form->editfieldkey($langs->transcountry("LocalTax2IsUsed", $mysoc->country_code), 'localtax2assuj_value', '', $object, 0).'</td><td>';
2582 print '<input id="localtax2assuj_value" name="localtax2assuj_value" type="checkbox" ' . ($object->localtax2_assuj ? 'checked="checked"' : '') . ' value="1"></td></tr>';
2583 if (!isOnlyOneLocalTax(2)) {
2584 print '<span class="cblt2"> '.$langs->transcountry("Type", $mysoc->country_code).': ';
2585 $formcompany->select_localtax(2, $object->localtax2_value, "lt2");
2586 print '</span>';
2587 }
2588 print '</td></tr>';
2589 } elseif ($mysoc->localtax1_assuj == "1" && $mysoc->localtax2_assuj != "1") {
2590 print '<tr><td>'.$form->editfieldkey($langs->transcountry("LocalTax1IsUsed", $mysoc->country_code), 'localtax1assuj_value', '', $object, 0).'</td><td colspan="3">';
2591 print '<input id="localtax1assuj_value" name="localtax1assuj_value" type="checkbox" ' . ($object->localtax1_assuj ? 'checked="checked"' : '') . ' value="1">';
2592 if (!isOnlyOneLocalTax(1)) {
2593 print '<span class="cblt1"> '.$langs->transcountry("Type", $mysoc->country_code).': ';
2594 $formcompany->select_localtax(1, $object->localtax1_value, "lt1");
2595 print '</span>';
2596 }
2597 print '</td></tr>';
2598 } elseif ($mysoc->localtax2_assuj == "1" && $mysoc->localtax1_assuj != "1") {
2599 print '<tr><td>'.$form->editfieldkey($langs->transcountry("LocalTax2IsUsed", $mysoc->country_code), 'localtax2assuj_value', '', $object, 0).'</td><td colspan="3">';
2600 print '<input id="localtax2assuj_value" name="localtax2assuj_value" type="checkbox" ' . ($object->localtax2_assuj ? 'checked="checked"' : '') . ' value="1">';
2601 if (!isOnlyOneLocalTax(2)) {
2602 print '<span class="cblt2"> '.$langs->transcountry("Type", $mysoc->country_code).': ';
2603 $formcompany->select_localtax(2, $object->localtax2_value, "lt2");
2604 print '</span>';
2605 }
2606 print '</td></tr>';
2607 }
2608
2609 // VAT reverse charge by default
2610 if (getDolGlobalString('ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE')) {
2611 print '<tr><td>' . $form->editfieldkey('VATReverseChargeByDefault', 'vat_reverse_charge', '', $object, 0) . '</td><td colspan="3">';
2612 print '<input type="checkbox" name="vat_reverse_charge" '.($object->vat_reverse_charge == '1' ? ' checked' : '').'>';
2613 print '</td></tr>';
2614 }
2615
2616 // VAT Code
2617 print '<tr><td>'.$form->editfieldkey('VATIntra', 'intra_vat', '', $object, 0).'</td>';
2618 print '<td colspan="3">';
2619 $s = '<input type="text" class="flat maxwidthonsmartphone" name="tva_intra" id="intra_vat" maxlength="20" value="'.$object->tva_intra.'">';
2620
2621 if (!getDolGlobalString('MAIN_DISABLEVATCHECK') && isInEEC($object)) {
2622 $s .= ' &nbsp; ';
2623
2624 if ($conf->use_javascript_ajax) {
2625 $widthpopup = 600;
2626 if (!empty($conf->dol_use_jmobile)) {
2627 $widthpopup = 350;
2628 }
2629 $heightpopup = 400;
2630 print "\n";
2631 print '<script type="text/javascript">';
2632 print "function CheckVAT(a) {\n";
2633 if ($mysoc->country_code == 'GR' && $object->country_code == 'GR' && !empty($u)) {
2634 print "GRVAT(a,'{$u}','{$p}','{$myafm}');\n";
2635 } else {
2636 print "newpopup('".DOL_URL_ROOT."/societe/checkvat/checkVatPopup.php?vatNumber='+a, '".dol_escape_js($langs->trans("VATIntraCheckableOnEUSite"))."', ".$widthpopup.", ".$heightpopup.");\n";
2637 }
2638 print "}\n";
2639 print '</script>';
2640 print "\n";
2641 $s .= '<a href="#" class="hideonsmartphone" onclick="CheckVAT(document.formsoc.tva_intra.value);">'.$langs->trans("VATIntraCheck").'</a>';
2642 $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1);
2643 } else {
2644 $s .= '<a href="'.$langs->transcountry("VATIntraCheckURL", $object->country_id).'" class="hideonsmartphone" target="_blank" rel="noopener noreferrer">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').'</a>';
2645 }
2646 }
2647 print $s;
2648 print '</td>';
2649 print '</tr>';
2650
2651 // Type - Workforce/Staff
2652 print '<tr><td>'.$form->editfieldkey('ThirdPartyType', 'typent_id', '', $object, 0).'</td><td class="maxwidthonsmartphone"'.(($conf->browser->layout == 'phone' || getDolGlobalString('SOCIETE_DISABLE_WORKFORCE')) ? ' colspan="3"' : '').'>';
2653 print $form->selectarray("typent_id", $formcompany->typent_array(0), $object->typent_id, 1, 0, 0, '', 0, 0, 0, (!getDolGlobalString('SOCIETE_SORT_ON_TYPEENT') ? 'ASC' : $conf->global->SOCIETE_SORT_ON_TYPEENT), '', 1);
2654 if ($user->admin) {
2655 print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
2656 }
2657 if (!getDolGlobalString('SOCIETE_DISABLE_WORKFORCE')) {
2658 print '</td>';
2659 if ($conf->browser->layout == 'phone') {
2660 print '</tr><tr>';
2661 }
2662 print '<td>'.$form->editfieldkey('Workforce', 'effectif_id', '', $object, 0).'</td><td class="maxwidthonsmartphone">';
2663 print $form->selectarray("effectif_id", $formcompany->effectif_array(0), $object->effectif_id, 0, 0, 0, '', 0, 0, 0, '', '', 1);
2664 if ($user->admin) {
2665 print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
2666 }
2667 } else {
2668 print '<input type="hidden" name="effectif_id" id="effectif_id" value="'.$object->effectif_id.'">';
2669 }
2670 print '</td></tr>';
2671
2672 // Juridical type
2673 print '<tr><td>'.$form->editfieldkey('JuridicalStatus', 'forme_juridique_code', '', $object, 0).'</td><td class="maxwidthonsmartphone" colspan="3">';
2674 print $formcompany->select_juridicalstatus($object->forme_juridique_code, $object->country_code, '', 'forme_juridique_code');
2675 print '</td></tr>';
2676
2677 // Capital
2678 print '<tr><td>'.$form->editfieldkey('Capital', 'capital', '', $object, 0).'</td>';
2679 print '<td colspan="3"><input type="text" name="capital" id="capital" size="10" value="';
2680 print $object->capital != '' ? dol_escape_htmltag(price($object->capital)) : '';
2681 if (isModEnabled("multicurrency")) {
2682 print '"> <span class="hideonsmartphone">'.$langs->trans("Currency".$object->multicurrency_code).'</span></td></tr>';
2683 } else {
2684 print '"> <span class="hideonsmartphone">'.$langs->trans("Currency".$conf->currency).'</span></td></tr>';
2685 }
2686
2687 // Default language
2688 if (getDolGlobalInt('MAIN_MULTILANGS')) {
2689 print '<tr><td>'.$form->editfieldkey('DefaultLang', 'default_lang', '', $object, 0).'</td><td colspan="3">'."\n";
2690 print img_picto('', 'language', 'class="pictofixedwidth"').$formadmin->select_language($object->default_lang, 'default_lang', 0, array(), '1', 0, 0, 'maxwidth300 widthcentpercentminusx');
2691 print '</td>';
2692 print '</tr>';
2693 }
2694
2695 // Incoterms
2696 if (isModEnabled('incoterm')) {
2697 print '<tr>';
2698 print '<td>'.$form->editfieldkey('IncotermLabel', 'incoterm_id', '', $object, 0).'</td>';
2699 print '<td colspan="3" class="maxwidthonsmartphone">';
2700 print $form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms : ''), (!empty($object->location_incoterms) ? $object->location_incoterms : ''));
2701 print '</td></tr>';
2702 }
2703
2704 // Categories
2705 if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) {
2706 // Customer
2707 print '<tr class="visibleifcustomer"><td>'.$form->editfieldkey('CustomersCategoriesShort', 'custcats', '', $object, 0).'</td>';
2708 print '<td colspan="3">';
2709 $cate_arbo = $form->select_all_categories(Categorie::TYPE_CUSTOMER, '', '', 64, 0, 3);
2710 $c = new Categorie($db);
2711 $cats = $c->containing($object->id, Categorie::TYPE_CUSTOMER);
2712 $arrayselected = array();
2713 foreach ($cats as $cat) {
2714 $arrayselected[] = $cat->id;
2715 }
2716 print img_picto('', 'category', 'class="pictofixedwidth"').$form->multiselectarray('custcats', $cate_arbo, $arrayselected, 0, 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0);
2717 print "</td></tr>";
2718
2719 // Supplier
2720 if ((isModEnabled("fournisseur") && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled("supplier_order") && $user->hasRight('supplier_order', 'lire')) || (isModEnabled("supplier_invoice") && $user->hasRight('supplier_invoice', 'lire'))) {
2721 print '<tr class="visibleifsupplier"><td>'.$form->editfieldkey('SuppliersCategoriesShort', 'suppcats', '', $object, 0).'</td>';
2722 print '<td colspan="3">';
2723 $cate_arbo = $form->select_all_categories(Categorie::TYPE_SUPPLIER, '', '', 64, 0, 3);
2724 $c = new Categorie($db);
2725 $cats = $c->containing($object->id, Categorie::TYPE_SUPPLIER);
2726 $arrayselected = array();
2727 foreach ($cats as $cat) {
2728 $arrayselected[] = $cat->id;
2729 }
2730 print img_picto('', 'category', 'class="pictofixedwidth"').$form->multiselectarray('suppcats', $cate_arbo, $arrayselected, 0, 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0);
2731 print "</td></tr>";
2732 }
2733 }
2734
2735 // Multicurrency
2736 if (isModEnabled("multicurrency")) {
2737 print '<tr>';
2738 print '<td>'.$form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0).'</td>';
2739 print '<td colspan="3" class="maxwidthonsmartphone">';
2740 print img_picto('', 'currency', 'class="pictofixedwidth"');
2741 print $form->selectMultiCurrency((GETPOSTISSET('multicurrency_code') ? GETPOST('multicurrency_code') : ($object->multicurrency_code ? $object->multicurrency_code : $conf->currency)), 'multicurrency_code', 1, '', false, 'maxwidth150 widthcentpercentminusx');
2742 print '</td></tr>';
2743 }
2744
2745 // Other attributes
2746 $parameters = array('socid' => $socid, 'colspan' => ' colspan="3"', 'colspanvalue' => '3');
2747 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';
2748
2749 // Parent company
2750 if (!getDolGlobalString('SOCIETE_DISABLE_PARENTCOMPANY')) {
2751 print '<tr>';
2752 print '<td>'.$langs->trans('ParentCompany').'</td>';
2753 print '<td colspan="3" class="maxwidthonsmartphone">';
2754 print img_picto('', 'company', 'class="pictofixedwidth"');
2755 print $form->select_company(GETPOST('parent_company_id') ? GETPOST('parent_company_id') : $object->parent, 'parent_company_id', '', 'SelectThirdParty', 0, 0, array(), 0, 'minwidth300 maxwidth500 widthcentpercentminusxx');
2756 print '</td></tr>';
2757 }
2758
2759 // Logo
2760 print '<tr class="hideonsmartphone">';
2761 print '<td>'.$form->editfieldkey('Logo', 'photoinput', '', $object, 0).'</td>';
2762 print '<td colspan="3">';
2763 if ($object->logo) {
2764 print $form->showphoto('societe', $object, 100, 0, 0, 'inline-block');
2765 }
2766 $caneditfield = 1;
2767 if ($caneditfield) {
2768 if ($object->logo) {
2769 print "<br>\n";
2770 }
2771 print '<table class="nobordernopadding">';
2772 if ($object->logo) {
2773 print '<tr><td><input type="checkbox" class="flat photodelete" name="deletephoto" id="photodelete"> <label for="photodelete">'.$langs->trans("Delete").'</photo><br></td></tr>';
2774 }
2775 //print '<tr><td>'.$langs->trans("PhotoFile").'</td></tr>';
2776 print '<tr><td>';
2777 $maxfilesizearray = getMaxFileSizeArray();
2778 $maxmin = $maxfilesizearray['maxmin'];
2779 if ($maxmin > 0) {
2780 print '<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).'">'; // MAX_FILE_SIZE must precede the field type=file
2781 }
2782 print '<input type="file" class="flat" name="photo" id="photoinput">';
2783 print '</td></tr>';
2784 print '</table>';
2785 }
2786 print '</td>';
2787 print '</tr>';
2788
2789 // Assign sale representative
2790 print '<tr>';
2791 print '<td>'.$form->editfieldkey('AllocateCommercial', 'commercial_id', '', $object, 0).'</td>';
2792 print '<td colspan="3" class="maxwidthonsmartphone">';
2793 $userlist = $form->select_dolusers('', '', 0, null, 0, '', '', 0, 0, 0, 'AND u.statut = 1', 0, '', '', 0, 1);
2794 $arrayselected = GETPOST('commercial', 'array');
2795 if (empty($arrayselected)) {
2796 $arrayselected = $object->getSalesRepresentatives($user, 1);
2797 }
2798 print img_picto('', 'user', 'class="pictofixedwidth"').$form->multiselectarray('commercial', $userlist, $arrayselected, 0, 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0, '', '', '', 1);
2799 print '</td></tr>';
2800
2801 print '</table>';
2802
2803 if (getDolGlobalString('ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY')) {
2804 print '<br>';
2805 print '<table class="border centpercent">';
2806
2807 if (isModEnabled('accounting')) {
2808 // Accountancy_code_sell
2809 print '<tr><td>'.$langs->trans("ProductAccountancySellCode").'</td>';
2810 print '<td>';
2811 print $formaccounting->select_account($object->accountancy_code_sell, 'accountancy_code_sell', 1, array(), 1, 1);
2812 print '</td></tr>';
2813
2814 // Accountancy_code_buy
2815 print '<tr><td>'.$langs->trans("ProductAccountancyBuyCode").'</td>';
2816 print '<td>';
2817 print $formaccounting->select_account($object->accountancy_code_buy, 'accountancy_code_buy', 1, array(), 1, 1);
2818 print '</td></tr>';
2819 } else { // For external software
2820 // Accountancy_code_sell
2821 print '<tr><td>'.$langs->trans("ProductAccountancySellCode").'</td>';
2822 print '<td><input name="accountancy_code_sell" class="maxwidth200" value="'.$object->accountancy_code_sell.'">';
2823 print '</td></tr>';
2824
2825 // Accountancy_code_buy
2826 print '<tr><td>'.$langs->trans("ProductAccountancyBuyCode").'</td>';
2827 print '<td><input name="accountancy_code_buy" class="maxwidth200" value="'.$object->accountancy_code_buy.'">';
2828 print '</td></tr>';
2829 }
2830 print '</table>';
2831 }
2832 }
2833
2834 print '</div>';
2835
2836 print dol_get_fiche_end();
2837
2838 print $form->buttonsSaveCancel();
2839
2840 print '</form>';
2841 }
2842 } else {
2843 // View
2844 if (!empty($object->id)) {
2845 $res = $object->fetch_optionals();
2846 }
2847 //if ($res < 0) { dol_print_error($db); exit; }
2848
2849
2851
2852 print dol_get_fiche_head($head, 'card', $langs->trans("ThirdParty"), -1, 'company', 0, '', '', 0, '', 1);
2853
2854 $formconfirm = '';
2855
2856 // Confirm delete third party
2857 if ($action == 'delete' || ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile))) {
2858 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?socid=".$object->id, $langs->trans("DeleteACompany"), $langs->trans("ConfirmDeleteCompany"), "confirm_delete", '', 0, "action-delete");
2859 }
2860
2861 if ($action == 'merge') {
2862 $formquestion = array(
2863 array(
2864 'name' => 'soc_origin',
2865 'label' => $langs->trans('MergeOriginThirdparty'),
2866 'type' => 'other',
2867 'value' => $form->select_company('', 'soc_origin', '', 'SelectThirdParty', 0, 0, array(), 0, 'minwidth200', '', '', 1, array(), false, array($object->id))
2868 )
2869 );
2870
2871 $formconfirm .= $form->formconfirm($_SERVER["PHP_SELF"]."?socid=".$object->id, $langs->trans("MergeThirdparties"), $langs->trans("ConfirmMergeThirdparties"), "confirm_merge", $formquestion, 'no', 1, 250);
2872 }
2873
2874 // Clone confirmation
2875 if (($action == 'clone' && (empty($conf->use_javascript_ajax) || !empty($conf->dol_use_jmobile))) // Output when action = clone if jmobile or no js
2876 || (!empty($conf->use_javascript_ajax) && empty($conf->dol_use_jmobile))) { // Always output when not jmobile nor js
2877 // Define confirmation messages
2878 $formquestionclone = array(
2879 'text' => $langs->trans("ConfirmClone"),
2880 0 => array('type' => 'text', 'name' => 'clone_name', 'label' => $langs->trans("NewSocNameForClone"), 'value' => empty($tmpcode) ? $langs->trans("CopyOf").' '.$object->nom : $tmpcode, 'morecss' => 'width250'),
2881 );
2882 $formconfirm .= $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneThirdparties', $object->name), 'confirm_clone', $formquestionclone, 'yes', 'action-clone', 350, 600);
2883 }
2884
2885 // Call Hook formConfirm
2886 $parameters = array('formConfirm' => $formconfirm);
2887 $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
2888 if (empty($reshook)) {
2889 $formconfirm .= $hookmanager->resPrint;
2890 } elseif ($reshook > 0) {
2891 $formconfirm = $hookmanager->resPrint;
2892 }
2893
2894 // Print form confirm
2895 print $formconfirm;
2896
2897 dol_htmloutput_mesg(is_numeric($error) ? '' : $error, $errors, 'error');
2898
2899 $linkback = '<a href="'.DOL_URL_ROOT.'/societe/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
2900
2901 dol_banner_tab($object, 'socid', $linkback, ($user->socid ? 0 : 1), 'rowid', 'nom');
2902
2903 // Call Hook tabContentViewThirdparty
2904 $parameters = array();
2905 // Note that $action and $object may be modified by hook
2906 $reshook = $hookmanager->executeHooks('tabContentViewThirdparty', $parameters, $object, $action);
2907 if (empty($reshook)) {
2908 print '<div class="fichecenter">';
2909 print '<div class="fichehalfleft">';
2910
2911 print '<div class="underbanner clearboth"></div>';
2912 print '<table class="border tableforfield centpercent">';
2913
2914 // Type Prospect/Customer/Supplier
2915 print '<tr><td class="titlefieldmiddle">'.$langs->trans('NatureOfThirdParty').'</td><td>';
2916 print $object->getTypeUrl(1);
2917 print '</td></tr>';
2918
2919 // Prefix
2920 if (getDolGlobalString('SOCIETE_USEPREFIX')) { // Old not used prefix field
2921 print '<tr><td>'.$langs->trans('Prefix').'</td><td>'.dol_escape_htmltag($object->prefix_comm).'</td>';
2922 print '</tr>';
2923 }
2924
2925 // Customer code
2926 if ($object->client) {
2927 print '<tr><td>';
2928 print $langs->trans('CustomerCode');
2929 print '</td>';
2930 print '<td>';
2932 $tmpcheck = $object->check_codeclient();
2933 if ($tmpcheck != 0 && $tmpcheck != -5) {
2934 print ' <span class="error">('.$langs->trans("WrongCustomerCode").')</span>';
2935 }
2936 print '</td>';
2937 print '</tr>';
2938 }
2939
2940 // Supplier code
2941 if (((isModEnabled("fournisseur") && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled("supplier_order") && $user->hasRight('supplier_order', 'lire')) || (isModEnabled("supplier_invoice") && $user->hasRight('supplier_invoice', 'lire'))) && $object->fournisseur) {
2942 print '<tr><td>';
2943 print $langs->trans('SupplierCode').'</td><td>';
2945 $tmpcheck = $object->check_codefournisseur();
2946 if ($tmpcheck != 0 && $tmpcheck != -5) {
2947 print ' <span class="error">('.$langs->trans("WrongSupplierCode").')</span>';
2948 }
2949 print '</td>';
2950 print '</tr>';
2951 }
2952
2953 // Barcode
2954 if (isModEnabled('barcode')) {
2955 print '<tr><td>';
2956 print $langs->trans('Gencod').'</td><td>'.showValueWithClipboardCPButton(dol_escape_htmltag($object->barcode));
2957 print '</td>';
2958 print '</tr>';
2959 }
2960
2961 // Prof ids
2962 $i = 1;
2963 $j = 0;
2964 $NBPROFIDMIN = getDolGlobalInt('THIRDPARTY_MIN_NB_PROF_ID', 2);
2965 $NBPROFIDMAX = getDolGlobalInt('THIRDPARTY_MAX_NB_PROF_ID', 6);
2966 while ($i <= $NBPROFIDMAX) {
2967 $idprof = $langs->transcountry('ProfId'.$i, $object->country_code);
2968 if (!empty($conf->dol_optimize_smallscreen)) {
2969 $idprof = $langs->transcountry('ProfId'.$i.'Short', $object->country_code);
2970 }
2971 if ($idprof != '-' && ($i <= $NBPROFIDMIN || !empty($langs->tab_translate['ProfId'.$i.$object->country_code]))) {
2972 print '<tr>';
2973 print '<td>'.$idprof.'</td><td>';
2974 $key = 'idprof'.$i;
2975 print dol_print_profids($object->$key, 'ProfId'.$i, $object->country_code, 1);
2976 if ($object->$key) {
2977 if ($object->id_prof_check($i, $object) > 0) {
2978 if (!empty($object->id_prof_url($i, $object))) {
2979 print ' &nbsp; '.$object->id_prof_url($i, $object);
2980 }
2981 } else {
2982 print ' <span class="error">('.$langs->trans("ErrorWrongValue").')</span>';
2983 }
2984 }
2985 print '</td>';
2986 print '</tr>';
2987 $j++;
2988 }
2989 $i++;
2990 }
2991
2992
2993 // This fields are used to know VAT to include in an invoice when the thirdparty is making a sale, so when it is a supplier.
2994 // We don't need them into customer profile.
2995 // Except for spain and localtax where localtax depends on buyer and not seller
2996
2997 if ($object->fournisseur) {
2998 // VAT is used
2999 print '<tr><td>';
3000 print $form->textwithpicto($langs->trans('VATIsUsed'), $langs->trans('VATIsUsedWhenSelling'));
3001 print '</td><td>';
3002 print yn($object->tva_assuj);
3003 print '</td>';
3004 print '</tr>';
3005
3006 if (getDolGlobalString('ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE')) {
3007 // VAT reverse charge by default
3008 print '<tr><td>';
3009 print $form->textwithpicto($langs->trans('VATReverseChargeByDefault'), $langs->trans('VATReverseChargeByDefaultDesc'));
3010 print '</td><td>';
3011 print '<input type="checkbox" name="vat_reverse_charge" ' . ($object->vat_reverse_charge == '1' ? ' checked' : '') . ' disabled>';
3012 print '</td>';
3013 print '</tr>';
3014 }
3015 }
3016
3017 // Local Taxes
3018 if ($object->fournisseur || $mysoc->country_code == 'ES') {
3019 if ($mysoc->localtax1_assuj == "1" && $mysoc->localtax2_assuj == "1") {
3020 print '<tr><td>'.$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code).'</td><td>';
3021 print yn($object->localtax1_assuj);
3022 print '</td></tr><tr><td>'.$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code).'</td><td>';
3023 print yn($object->localtax2_assuj);
3024 print '</td></tr>';
3025
3026 if ($object->localtax1_assuj == "1" && (!isOnlyOneLocalTax(1))) {
3027 print '<form method="post" action="'.$_SERVER['PHP_SELF'].'?socid='.$object->id.'">';
3028 print '<input type="hidden" name="action" value="set_localtax1">';
3029 print '<input type="hidden" name="token" value="'.newToken().'">';
3030 print '<tr><td>'.$langs->transcountry("Localtax1", $mysoc->country_code).' <a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editRE&token='.newToken().'&socid='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).'</td>';
3031 if ($action == 'editRE') {
3032 print '<td class="left">';
3033 $formcompany->select_localtax(1, $object->localtax1_value, "lt1");
3034 print '<input type="submit" class="button button-edit" value="'.$langs->trans("Modify").'"></td>';
3035 } else {
3036 print '<td>'.$object->localtax1_value.'</td>';
3037 }
3038 print '</tr></form>';
3039 }
3040 if ($object->localtax2_assuj == "1" && (!isOnlyOneLocalTax(2))) {
3041 print '<form method="post" action="'.$_SERVER['PHP_SELF'].'?socid='.$object->id.'">';
3042 print '<input type="hidden" name="action" value="set_localtax2">';
3043 print '<input type="hidden" name="token" value="'.newToken().'">';
3044 print '<tr><td>'.$langs->transcountry("Localtax2", $mysoc->country_code).'<a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editIRPF&token='.newToken().'&socid='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).'</td>';
3045 if ($action == 'editIRPF') {
3046 print '<td class="left">';
3047 $formcompany->select_localtax(2, $object->localtax2_value, "lt2");
3048 print '<input type="submit" class="button button-edit" value="'.$langs->trans("Modify").'"></td>';
3049 } else {
3050 print '<td>'.$object->localtax2_value.'</td>';
3051 }
3052 print '</tr></form>';
3053 }
3054 } elseif ($mysoc->localtax1_assuj == "1" && $mysoc->localtax2_assuj != "1") {
3055 print '<tr><td>'.$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code).'</td><td>';
3056 print yn($object->localtax1_assuj);
3057 print '</td></tr>';
3058 if ($object->localtax1_assuj == "1" && (!isOnlyOneLocalTax(1))) {
3059 print '<form method="post" action="'.$_SERVER['PHP_SELF'].'?socid='.$object->id.'">';
3060 print '<input type="hidden" name="action" value="set_localtax1">';
3061 print '<input type="hidden" name="token" value="'.newToken().'">';
3062 print '<tr><td> '.$langs->transcountry("Localtax1", $mysoc->country_code).'<a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editRE&token='.newToken().'&socid='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).'</td>';
3063 if ($action == 'editRE') {
3064 print '<td class="left">';
3065 $formcompany->select_localtax(1, $object->localtax1_value, "lt1");
3066 print '<input type="submit" class="button button-edit" value="'.$langs->trans("Modify").'"></td>';
3067 } else {
3068 print '<td>'.$object->localtax1_value.'</td>';
3069 }
3070 print '</tr></form>';
3071 }
3072 } elseif ($mysoc->localtax2_assuj == "1" && $mysoc->localtax1_assuj != "1") {
3073 print '<tr><td>'.$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code).'</td><td>';
3074 print yn($object->localtax2_assuj);
3075 print '</td></tr>';
3076 if ($object->localtax2_assuj == "1" && (!isOnlyOneLocalTax(2))) {
3077 print '<form method="post" action="'.$_SERVER['PHP_SELF'].'?socid='.$object->id.'">';
3078 print '<input type="hidden" name="action" value="set_localtax2">';
3079 print '<input type="hidden" name="token" value="'.newToken().'">';
3080 print '<tr><td> '.$langs->transcountry("Localtax2", $mysoc->country_code).' <a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editIRPF&token='.newToken().'&socid='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).'</td>';
3081 if ($action == 'editIRPF') {
3082 print '<td class="left">';
3083 $formcompany->select_localtax(2, $object->localtax2_value, "lt2");
3084 print '<input type="submit" class="button button-edit" value="'.$langs->trans("Modify").'"></td>';
3085 } else {
3086 print '<td>'.$object->localtax2_value.'</td>';
3087 }
3088 print '</tr></form>';
3089 }
3090 }
3091 }
3092
3093 // Sale tax code (VAT code)
3094 print '<tr>';
3095 print '<td class="nowrap">'.$langs->trans('VATIntra').'</td><td>';
3096 if ($object->tva_intra) {
3097 $s = '';
3098 $s .= dol_print_profids($object->tva_intra, 'VAT', $object->country_code, 1);
3099 $s .= '<input type="hidden" id="tva_intra" name="tva_intra" maxlength="20" value="'.$object->tva_intra.'">';
3100
3101 if (!getDolGlobalString('MAIN_DISABLEVATCHECK') && isInEEC($object)) {
3102 $s .= ' &nbsp; ';
3103
3104 if ($conf->use_javascript_ajax) {
3105 $widthpopup = 600;
3106 if (!empty($conf->dol_use_jmobile)) {
3107 $widthpopup = 350;
3108 }
3109 $heightpopup = 400;
3110 print "\n";
3111 print '<script type="text/javascript">';
3112 print "function CheckVAT(a) {\n";
3113 if ($mysoc->country_code == 'GR' && $object->country_code == 'GR' && !empty($u)) {
3114 print "GRVAT(a,'{$u}','{$p}','{$myafm}');\n";
3115 } else {
3116 print "newpopup('".DOL_URL_ROOT."/societe/checkvat/checkVatPopup.php?vatNumber='+a, '".dol_escape_js($langs->trans("VATIntraCheckableOnEUSite"))."', ".$widthpopup.", ".$heightpopup.");\n";
3117 }
3118 print "}\n";
3119 print '</script>';
3120 print "\n";
3121 $s .= '<a href="#" class="hideonsmartphone" onclick="CheckVAT(jQuery(\'#tva_intra\').val());">'.$langs->trans("VATIntraCheck").'</a>';
3122 $s = $form->textwithpicto($s, $langs->trans("VATIntraCheckDesc", $langs->transnoentitiesnoconv("VATIntraCheck")), 1);
3123 } else {
3124 $s .= '<a href="'.$langs->transcountry("VATIntraCheckURL", $object->country_id).'" class="hideonsmartphone" target="_blank" rel="noopener noreferrer">'.img_picto($langs->trans("VATIntraCheckableOnEUSite"), 'help').'</a>';
3125 }
3126 }
3127 print $s;
3128 } else {
3129 print '&nbsp;';
3130 }
3131 print '</td></tr>';
3132
3133 // Warehouse
3134 if (isModEnabled('stock') && getDolGlobalString('SOCIETE_ASK_FOR_WAREHOUSE')) {
3135 $langs->load('stocks');
3136 require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
3137 $formproduct = new FormProduct($db);
3138 print '<tr class="nowrap">';
3139 print '<td>';
3140 print $form->editfieldkey("Warehouse", 'warehouse', '', $object, $user->hasRight('societe', 'creer'));
3141 print '</td><td>';
3142 if ($action == 'editwarehouse') {
3143 $formproduct->formSelectWarehouses($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_warehouse, 'fk_warehouse', 1);
3144 } else {
3145 if ($object->fk_warehouse > 0) {
3146 print img_picto('', 'stock', 'class="paddingrightonly"');
3147 }
3148 $formproduct->formSelectWarehouses($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_warehouse, 'none');
3149 }
3150 print '</td>';
3151 print '</tr>';
3152 }
3153
3154 print '</table>';
3155 print '</div>';
3156
3157 print '<div class="fichehalfright">';
3158
3159 print '<div class="underbanner clearboth"></div>';
3160 print '<table class="border tableforfield centpercent">';
3161
3162 // Tags / categories
3163 if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) {
3164 // Customer
3165 if ($object->prospect || $object->client || getDolGlobalString('THIRDPARTY_CAN_HAVE_CUSTOMER_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT')) {
3166 print '<tr><td class="titlefieldmiddle">'.$langs->trans("CustomersCategoriesShort").'</td>';
3167 print '<td>';
3168 print $form->showCategories($object->id, Categorie::TYPE_CUSTOMER, 1);
3169 print "</td></tr>";
3170 }
3171
3172 // Supplier
3173 if (((isModEnabled("fournisseur") && $user->hasRight('fournisseur', 'lire') && !getDolGlobalString('MAIN_USE_NEW_SUPPLIERMOD')) || (isModEnabled("supplier_order") && $user->hasRight('supplier_order', 'lire')) || (isModEnabled("supplier_invoice") && $user->hasRight('supplier_invoice', 'lire'))) && $object->fournisseur) {
3174 print '<tr><td class="titlefieldmiddle">'.$langs->trans("SuppliersCategoriesShort").'</td>';
3175 print '<td>';
3176 print $form->showCategories($object->id, Categorie::TYPE_SUPPLIER, 1);
3177 print "</td></tr>";
3178 }
3179 }
3180
3181
3182 // Third-Party Type
3183 print '<tr><td class="titlefieldmiddle">';
3184 print '<table class="nobordernopadding" width="100%"><tr><td>'.$langs->trans('ThirdPartyType').'</td>';
3185 if ($action != 'editthirdpartytype' && $user->hasRight('societe', 'creer')) {
3186 print '<td class="right"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editthirdpartytype&token='.newToken().'&socid='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).'</a></td>';
3187 }
3188 print '</tr></table>';
3189 print '</td><td>';
3190 $html_name = ($action == 'editthirdpartytype') ? 'typent_id' : 'none';
3191 $formcompany->formThirdpartyType($_SERVER['PHP_SELF'].'?socid='.$object->id, $object->typent_id, $html_name, '');
3192 print '</td></tr>';
3193
3194 // Workforce/Staff
3195 if (!getDolGlobalString('SOCIETE_DISABLE_WORKFORCE')) {
3196 print '<tr><td>'.$langs->trans("Workforce").'</td><td>'.$object->effectif.'</td></tr>';
3197 }
3198
3199 // Legal
3200 print '<tr><td>'.$langs->trans('JuridicalStatus').'</td><td>'.dolPrintHTML($object->forme_juridique).'</td></tr>';
3201
3202 // Capital
3203 print '<tr><td>'.$langs->trans('Capital').'</td><td>';
3204 if ($object->capital) {
3205 if (isModEnabled("multicurrency") && !empty($object->multicurrency_code)) {
3206 print price($object->capital, 0, $langs, 0, -1, -1, $object->multicurrency_code);
3207 } else {
3208 print price($object->capital, 0, $langs, 0, -1, -1, $conf->currency);
3209 }
3210 } else {
3211 print '&nbsp;';
3212 }
3213 print '</td></tr>';
3214
3215 // Unsubscribe opt-out
3216 if (isModEnabled('mailing')) {
3217 $result = $object->getNoEmail();
3218 if ($result < 0) {
3219 setEventMessages($object->error, $object->errors, 'errors');
3220 }
3221 print '<tr><td>'.$langs->trans("No_Email").'</td><td>';
3222 if ($object->email) {
3223 print yn($object->no_email);
3224 } else {
3225 $langs->load("mails");
3226 print '<span class="opacitymedium">'.$langs->trans("EMailNotDefined").'</span>';
3227 }
3228
3229 $langs->load("mails");
3230 print ' &nbsp; <span class="badge badge-secondary" title="'.dol_escape_htmltag($langs->trans("NbOfEMailingsSend")).'">'.$object->getNbOfEMailings().'</span>';
3231
3232 print '</td></tr>';
3233 }
3234
3235 // Default language
3236 if (getDolGlobalInt('MAIN_MULTILANGS')) {
3237 require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
3238 print '<tr><td>'.$langs->trans("DefaultLang").'</td><td>';
3239 //$s=picto_from_langcode($object->default_lang);
3240 //print ($s?$s.' ':'');
3241 $langs->load("languages");
3242 $labellang = ($object->default_lang ? $langs->trans('Language_'.$object->default_lang) : '');
3243 print picto_from_langcode($object->default_lang, 'class="paddingrightonly saturatemedium opacitylow"');
3244 print $labellang;
3245 print '</td></tr>';
3246 }
3247
3248 // Incoterms
3249 if (isModEnabled('incoterm')) {
3250 print '<tr><td>';
3251 print '<table width="100%" class="nobordernopadding"><tr><td>'.$langs->trans('IncotermLabel').'</td>';
3252 if ($action != 'editincoterm' && $user->hasRight('societe', 'creer')) {
3253 print '<td class="right"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?socid='.$object->id.'&action=editincoterm&token='.newToken().'">'.img_edit('', 1).'</a></td>';
3254 }
3255 print '</tr></table>';
3256 print '</td><td colspan="3">';
3257 if ($action != 'editincoterm') {
3258 print $form->textwithpicto($object->display_incoterms(), $object->label_incoterms, 1);
3259 } else {
3260 print $form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms : ''), (!empty($object->location_incoterms) ? $object->location_incoterms : ''), $_SERVER['PHP_SELF'].'?socid='.$object->id);
3261 }
3262 print '</td></tr>';
3263 }
3264
3265 // Multicurrency
3266 if (isModEnabled("multicurrency")) {
3267 print '<tr>';
3268 print '<td>'.$form->editfieldkey('Currency', 'multicurrency_code', '', $object, 0).'</td>';
3269 print '<td>';
3270 print !empty($object->multicurrency_code) ? currency_name($object->multicurrency_code, 1) : '';
3271 print '</td></tr>';
3272 }
3273
3274 if (getDolGlobalString('ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY')) {
3275 // Accountancy sell code
3276 print '<tr><td class="nowrap">';
3277 print $langs->trans("ProductAccountancySellCode");
3278 print '</td><td colspan="2">';
3279 if (isModEnabled('accounting')) {
3280 if (!empty($object->accountancy_code_sell)) {
3281 $accountingaccount = new AccountingAccount($db);
3282 $accountingaccount->fetch(0, $object->accountancy_code_sell, 1);
3283
3284 print $accountingaccount->getNomUrl(0, 1, 1, '', 1);
3285 }
3286 } else {
3287 print $object->accountancy_code_sell;
3288 }
3289 print '</td></tr>';
3290
3291 // Accountancy buy code
3292 print '<tr><td class="nowrap">';
3293 print $langs->trans("ProductAccountancyBuyCode");
3294 print '</td><td colspan="2">';
3295 if (isModEnabled('accounting')) {
3296 if (!empty($object->accountancy_code_buy)) {
3297 $accountingaccount2 = new AccountingAccount($db);
3298 $accountingaccount2->fetch(0, $object->accountancy_code_buy, 1);
3299
3300 print $accountingaccount2->getNomUrl(0, 1, 1, '', 1);
3301 }
3302 } else {
3303 print $object->accountancy_code_buy;
3304 }
3305 print '</td></tr>';
3306 }
3307
3308 // Other attributes
3309 $parameters = array('socid' => $socid, 'colspan' => ' colspan="3"', 'colspanvalue' => '3');
3310 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
3311
3312 // Parent company
3313 if (!getDolGlobalString('SOCIETE_DISABLE_PARENTCOMPANY')) {
3314 print '<tr><td>';
3315 print '<table class="nobordernopadding" width="100%"><tr><td>'.$langs->trans('ParentCompany').'</td>';
3316 if ($action != 'editparentcompany' && $user->hasRight('societe', 'creer')) {
3317 print '<td class="right"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editparentcompany&token='.newToken().'&socid='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('Edit'), 1).'</a></td>';
3318 }
3319 print '</tr></table>';
3320 print '</td><td>';
3321 $html_name = ($action == 'editparentcompany') ? 'parent_id' : 'none';
3322 $form->form_thirdparty($_SERVER['PHP_SELF'].'?socid='.$object->id, $object->parent, $html_name, '', 1, 0, 0, array(), 0, array($object->id));
3323 print '</td></tr>';
3324 }
3325
3326 // Sales representative
3327 include DOL_DOCUMENT_ROOT.'/societe/tpl/linesalesrepresentative.tpl.php';
3328
3329 // Module Adherent
3330 if (isModEnabled('member')) {
3331 $langs->load("members");
3332 print '<tr><td>'.$langs->trans("LinkedToDolibarrMember").'</td>';
3333 print '<td>';
3334 $adh = new Adherent($db);
3335 $result = $adh->fetch(0, '', $object->id);
3336 if ($result > 0) {
3337 $adh->ref = $adh->getFullName($langs);
3338 print $adh->getNomUrl(-1);
3339 } else {
3340 print '<span class="opacitymedium">'.$langs->trans("ThirdpartyNotLinkedToMember").'</span>';
3341 }
3342 print "</td></tr>\n";
3343 }
3344
3345 // Link user (you must create a contact to get a user)
3346 /*
3347 print '<tr><td>'.$langs->trans("DolibarrLogin").'</td><td colspan="3">';
3348 if ($object->user_id) {
3349 $dolibarr_user = new User($db);
3350 $result = $dolibarr_user->fetch($object->user_id);
3351 print $dolibarr_user->getLoginUrl(-1);
3352 } else {
3353 //print '<span class="opacitymedium">'.$langs->trans("NoDolibarrAccess").'</span>';
3354 if (!$object->user_id && $user->hasRight('user', 'user', 'creer')) {
3355 print '<a class="aaa" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=create_user&token='.newToken().'">'.img_picto($langs->trans("CreateDolibarrLogin"), 'add').' '.$langs->trans("CreateDolibarrLogin").'</a>';
3356 }
3357 }
3358 print '</td></tr>';
3359 */
3360
3361 print '</table>';
3362 print '</div>';
3363
3364 print '</div>';
3365 print '<div class="clearboth"></div>';
3366 }
3367
3368 print dol_get_fiche_end();
3369
3370
3371 /*
3372 * Actions
3373 */
3374 if ($action != 'presend') {
3375 print '<div class="tabsAction">'."\n";
3376
3377 $parameters = array();
3378 $reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
3379 if (empty($reshook)) {
3380 $at_least_one_email_contact = false;
3381 $TContact = $object->contact_array_objects();
3382 foreach ($TContact as &$contact) {
3383 if (!empty($contact->email)) {
3384 $at_least_one_email_contact = true;
3385 break;
3386 }
3387 }
3388
3389 if (empty($user->socid)) {
3390 $langs->load("mails");
3391 $title = '';
3392 if (empty($object->email) && !$at_least_one_email_contact) {
3393 $title = $langs->trans('NoEMail');
3394 }
3395 print dolGetButtonAction($title, $langs->trans('SendMail'), 'default', $_SERVER['PHP_SELF'].'?socid='.$object->id.'&action=presend&mode=init#formmailbeforetitle', 'btn-send-mail', !empty($object->email) || $at_least_one_email_contact);
3396 }
3397
3398 print dolGetButtonAction('', $langs->trans('Modify'), 'default', $_SERVER["PHP_SELF"].'?socid='.$object->id.'&action=edit&token='.newToken(), '', $permissiontoadd);
3399
3400 if (!empty($conf->use_javascript_ajax) && empty($conf->dol_use_jmobile)) {
3401 $cloneSocietetUrl = '';
3402 $cloneButtonId = 'action-clone';
3403 } else {
3404 $cloneSocietetUrl = '';
3405 $cloneButtonId = '';
3406 }
3407 print dolGetButtonAction($langs->trans('ToClone'), '', 'default', $cloneSocietetUrl, $cloneButtonId, $user->hasRight('societe', 'creer'));
3408
3409 if (isModEnabled('member')) {
3410 $adh = new Adherent($db);
3411 $result = $adh->fetch(0, '', $object->id);
3412 if ($result == 0 && ($object->client == 1 || $object->client == 3) && getDolGlobalString('MEMBER_CAN_CONVERT_CUSTOMERS_TO_MEMBERS')) {
3413 print '<a class="butAction" href="'.DOL_URL_ROOT.'/adherents/card.php?&action=create&socid='.$object->id.'" title="'.dol_escape_htmltag($langs->trans("NewMember")).'">'.$langs->trans("NewMember").'</a>'."\n";
3414 }
3415 }
3416
3417 print dolGetButtonAction($langs->trans('MergeThirdparties'), $langs->trans('Merge'), 'danger', $_SERVER["PHP_SELF"].'?socid='.$object->id.'&action=merge&token='.newToken(), '', $permissiontodelete);
3418
3419 $deleteUrl = $_SERVER["PHP_SELF"].'?socid='.$object->id.'&action=delete&token='.newToken();
3420 $buttonId = 'action-delete-no-ajax';
3421 if ($conf->use_javascript_ajax && empty($conf->dol_use_jmobile)) { // We can't use preloaded confirm form with jmobile
3422 $deleteUrl = '';
3423 $buttonId = 'action-delete';
3424 }
3425 print dolGetButtonAction('', $langs->trans('Delete'), 'delete', $deleteUrl, $buttonId, $permissiontodelete);
3426 }
3427
3428 print '</div>'."\n";
3429 }
3430
3431 //Select mail models is same action as presend
3432 if (GETPOST('modelselected')) {
3433 $action = 'presend';
3434 }
3435
3436 if ($action != 'presend') {
3437 print '<div class="fichecenter"><div class="fichehalfleft">';
3438
3439 if (!getDolGlobalString('SOCIETE_DISABLE_BUILDDOC')) {
3440 print '<a name="builddoc"></a>'; // ancre
3441
3442 /*
3443 * Generated documents
3444 */
3445 $filedir = $conf->societe->multidir_output[$object->entity].'/'.$object->id;
3446 $urlsource = $_SERVER["PHP_SELF"]."?socid=".$object->id;
3447 $genallowed = $user->hasRight('societe', 'lire');
3448 $delallowed = $user->hasRight('societe', 'creer');
3449
3450 print $formfile->showdocuments('company', $object->id, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 0, 0, 0, 28, 0, 'entity='.$object->entity, 0, '', $object->default_lang);
3451 }
3452
3453 // Subsidiaries list
3454 if (!getDolGlobalString('SOCIETE_DISABLE_PARENTCOMPANY') && !getDolGlobalString('SOCIETE_DISABLE_SHOW_SUBSIDIARIES')) {
3455 print '<br>';
3456 $result = show_subsidiaries($conf, $langs, $db, $object);
3457 }
3458
3459 print '</div><div class="fichehalfright">';
3460
3461 $MAXEVENT = 10;
3462
3463 $morehtmlcenter = '<div class="nowraponall">';
3464 $morehtmlcenter .= dolGetButtonTitle($langs->trans('FullConversation'), '', 'fa fa-comments imgforviewmode', DOL_URL_ROOT.'/societe/messaging.php?socid='.$object->id);
3465 $morehtmlcenter .= dolGetButtonTitle($langs->trans('FullList'), '', 'fa fa-bars imgforviewmode', DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id);
3466 $morehtmlcenter .= '</div>';
3467
3468 // List of actions on element
3469 include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
3470 $formactions = new FormActions($db);
3471 $somethingshown = $formactions->showactions($object, '', $socid, 1, '', $MAXEVENT, '', $morehtmlcenter); // Show all action for thirdparty
3472
3473 print '</div></div>';
3474
3475 if (getDolGlobalString('MAIN_DUPLICATE_CONTACTS_TAB_ON_MAIN_CARD')) {
3476 // Contacts list
3477 if (!getDolGlobalString('SOCIETE_DISABLE_CONTACTS')) {
3478 $result = show_contacts($conf, $langs, $db, $object, $_SERVER["PHP_SELF"].'?socid='.$object->id);
3479 }
3480 }
3481 }
3482
3483 // Presend form
3484 $modelmail = 'thirdparty';
3485 $defaulttopic = 'Information';
3486 $diroutput = $conf->societe->multidir_output[$object->entity];
3487 $trackid = 'thi'.$object->id;
3488
3489 include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
3490 }
3491}
3492
3493
3494// End of page
3495llxFooter();
3496$db->close();
3497
3498?>
3499
3500<script>
3501// Function to retrieve VAT details from the Greek Ministry of Finance GSIS SOAP web service
3502function GRVAT(a, u, p, myafm) {
3503 var afm = a.replace(/\D/g, ""); // Remove non-digit characters from 'a'
3504
3505 $.ajax({
3506 type: "GET",
3507 url: '<?php echo DOL_URL_ROOT ?>/societe/checkvat/checkVatGr.php',
3508 data: { afm }, // Set request parameters
3509 success: function(data) {
3510 var obj = data; // Parse response data as JSON
3511
3512 // Update form fields based on retrieved data
3513 if (obj.RgWsPublicBasicRt_out.afm === null) {
3514 alert(obj.pErrorRec_out.errorDescr); // Display error message if AFM is null
3515 } else {
3516 $("#name").val(obj.RgWsPublicBasicRt_out.onomasia); // Set 'name' field value
3517 $("#address").val(obj.RgWsPublicBasicRt_out.postalAddress + " " + obj.RgWsPublicBasicRt_out.postalAddressNo); // Set 'address' field value
3518 $("#zipcode").val(obj.RgWsPublicBasicRt_out.postalZipCode); // Set 'zipcode' field value
3519 $("#town").val(obj.RgWsPublicBasicRt_out.postalAreaDescription); // Set 'town' field value
3520 $("#idprof2").val(obj.RgWsPublicBasicRt_out.doyDescr); // Set 'idprof2' field value
3521 $("#name_alias_input").val(obj.RgWsPublicBasicRt_out.commerTitle); // Set 'name_alias' field value
3522
3523 if (obj.arrayOfRgWsPublicFirmActRt_out.RgWsPublicFirmActRtUser) {
3524 var firmActUser = obj.arrayOfRgWsPublicFirmActRt_out.RgWsPublicFirmActRtUser;
3525
3526 if (Array.isArray(firmActUser)) {
3527 var primaryFirmAct = firmActUser.find(item => item.firmActKindDescr === "ΚΥΡΙΑ"); // Find primary client activity
3528 if (primaryFirmAct) {
3529 $("#idprof1").val(primaryFirmAct.firmActDescr); // Set 'idprof1' field value
3530 }
3531 } else {
3532 $("#idprof1").val(firmActUser.firmActDescr); // Set 'idprof1' field value
3533 }
3534 }
3535 }
3536 }
3537 });
3538}
3539
3540</script>
$id
Definition account.php:39
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
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:70
Class to manage accounting accounts.
Class to manage members of a foundation.
Class to manage canvas.
Class to manage categories.
Class to manage standard extra fields.
Class to manage generation of HTML components for accounting management.
Class to manage building of HTML components.
Class to generate html code for admin pages.
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 with static methods for building HTML components related to products Only components common to ...
Class to manage third parties objects (customers, suppliers, prospects...)
show_contacts($conf, $langs, $db, $object, $backtopage='', $showuserlogin=0)
Show html area for list of contacts.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
currency_name($code_iso, $withcode=0, $outputlangs=null)
Return label of currency or code+label.
show_subsidiaries($conf, $langs, $db, $object)
Show html area for list of subsidiaries.
societe_prepare_head(Societe $object)
Return array of tabs to used on pages for third parties cards.
isInEEC($object)
Return if a country of an object is inside the EEC (European Economic Community)
llxFooter()
Footer empty.
Definition document.php:107
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as p label as s rowid as s nom as s email
Sender: Who sends the email ("Sender" has sent emails on behalf of "From").
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
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, $varfiles='addedfile', $upload_dir='')
Check validity of a file upload from an GUI page, and move it to its final destination.
addFileIntoDatabaseIndex($dir, $file, $fullpathorig='', $mode='uploaded', $setsharekey=0, $object=null)
Add a file into database index.
deleteFilesIntoDatabaseIndex($dir, $file, $mode='uploaded')
Delete files into database index using search criteria.
isValidUrl($url, $http=0, $pass=0, $port=0, $path=0, $query=0, $anchor=0)
Url string validation <http[s]> :// [user[:pass]@] hostname [port] [/path] [?getquery] [anchor].
recordNotFound($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Displays an error page when a record is not found.
isOnlyOneLocalTax($local)
Return true if LocalTax (1 or 2) is unique.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
picto_from_langcode($codelang, $moreatt='', $notitlealt=0)
Return img flag of country for a language code or country code.
showValueWithClipboardCPButton($valuetocopy, $showonlyonhover=1, $texttoshow='')
Create a button to copy $valuetocopy in the clipboard (for copy and paste feature).
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dolPrintHTML($s, $allowiframe=0)
Return a string (that can be on several lines) ready to be output on a HTML page.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
GETPOSTISARRAY($paramname, $method=0)
Return true if the parameter $paramname is submit from a POST OR GET as an array.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_escape_js($stringtoescape, $mode=0, $noescapebackslashn=0)
Returns text escaped for inclusion into javascript code.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dolGetFirstLastname($firstname, $lastname, $nameorder=-1)
Return firstname and lastname in correct order.
getArrayOfSocialNetworks()
Get array of social network dictionary.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_profids($profID, $profIDtype, $countrycode='', $addcpButton=1)
Format professional IDs according to their country.
dol_htmloutput_mesg($mesgstring='', $mesgarray=array(), $style='ok', $keepembedded=0)
Print formatted messages to output (Used to show messages on html output).
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
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_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
image_format_supported($file, $acceptsvg=0)
Return if a filename is file name of a supported image format.
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition repair.php:137
getMaxFileSizeArray()
Return the max allowed for file upload.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.