diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index e396cf547ef..0fe008b059e 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -230,7 +230,7 @@ class AccountancyExport ); global $hookmanager; - $code = $formatcode[$type]; + $code = $formatcode[$type] ?? ''; $parameters = array('type' => $type); $reshook = $hookmanager->executeHooks('getFormatCode', $parameters, $code); diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 6cd5d6d0b96..603424c4ba7 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -1,11 +1,11 @@ - * Copyright (C) 2015-2025 Alexandre Spangaro + * Copyright (C) 2015-2026 Alexandre Spangaro * Copyright (C) 2015-2020 Florian Henry * Copyright (C) 2018-2025 Frédéric France * Copyright (C) 2024-2025 MDW - * Copyright (C) 2024 Jose MARTINEZ - * Copyright (C) 2025 Nicolas Barrouillet + * Copyright (C) 2024 Jose MARTINEZ + * Copyright (C) 2025 Nicolas Barrouillet * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -3761,7 +3761,7 @@ class BookKeeping extends CommonObject $newBookKeeping->sens = 'D'; } - $newBookKeeping->label_operation = "Extourne " . $bookKeeping->piece_num . " - " . $bookKeeping->numero_compte . " - " . date('d/m/Y', dol_now()) . " - " . $i; + $newBookKeeping->label_operation = $langs->trans("ReturnAccount") . " " . $bookKeeping->piece_num . " - " . $bookKeeping->numero_compte . " - " . date('d/m/Y', dol_now()) . " - " . $i; $newBookKeeping->numero_compte = $bookKeeping->numero_compte; $newBookKeeping->label_compte = $bookKeeping->label_compte; @@ -3777,14 +3777,14 @@ class BookKeeping extends CommonObject } $createResult = $newBookKeeping->create($user); - if ($createResult > 0) { + if ($createResult >= 0) { $newBookKeeping->piece_num = $pieceNumNext; $newBookKeeping->fk_doc = $bookKeeping->fk_doc; $newBookKeeping->fk_docdet = $bookKeeping->fk_docdet; - $result = $newBookKeeping->update($user); + $newBookKeeping->update($user); setEventMessages($langs->trans("SuccessReturnedAccount", $bookKeeping->piece_num), null, 'mesgs'); } else { - setEventMessages($langs->trans("ErrorWhileCreating", $newBookKeeping->error), null, 'errors'); + setEventMessages($langs->trans("ErrorWhileCreating", $newBookKeeping->error), $newBookKeeping->errors, 'errors'); $error++; } } diff --git a/htdocs/accountancy/index.php b/htdocs/accountancy/index.php index 98539f05803..1207620a46d 100644 --- a/htdocs/accountancy/index.php +++ b/htdocs/accountancy/index.php @@ -132,12 +132,14 @@ if (isModEnabled('accounting')) { print load_fiche_titre($langs->trans("AccountancyArea"), empty($resultboxes['selectboxlist']) ? '' : $resultboxes['selectboxlist'], 'accountancy', 0, '', '', $showtutorial); + /* if (getDolGlobalInt('INVOICE_USE_SITUATION') == 1) { $messagewarning = $langs->trans("SorryThisModuleIsNotCompatibleWithTheExperimentalFeatureOfSituationInvoices"); $messagewarning .= ' '.$langs->trans("WarningExperimentalFeatureInvoiceSituationNeedToUpgradeToProgressiveMode", 'https://partners.dolibarr.org'); print info_admin($messagewarning); print "
"; } + */ if (!$helpisexpanded && empty($resultboxes['boxlista']) && empty($resultboxes['boxlistb'])) { print '

'.$langs->trans("ClickOnUseTutorialForHelp", $langs->transnoentities("ShowTutorial"))."
\n"; diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index f03d1099c41..3c203d5aea8 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -1183,7 +1183,7 @@ class AdherentType extends CommonObject //$return .= ''; if ($user->hasRight('adherent', 'configurer')) { - $return .= 'ref).'">'.img_edit().''; + $return .= 'ref).'">'.img_edit().''; } else { $return .= ' '; } diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 1fb6989ddcb..bf411ab481e 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -459,7 +459,9 @@ print ''; print ''; // Activate FileCache (so content of file boxes are stored into a cache file int boxes/temp for 3600 seconds) -print ''.$langs->trans("EnableFileCache").''; +print ''.$langs->trans("EnableFileCache"); +print ' ('.getDolGlobalInt('MAIN_ACTIVATE_FILECACHE_DELAY', 900)." ".$langs->trans("seconds").")"; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('MAIN_ACTIVATE_FILECACHE', array(), null, 0, 0, 0, 2, 0, 1); } else { diff --git a/htdocs/admin/tools/export.php b/htdocs/admin/tools/export.php index 1cad447d705..00b15df2671 100644 --- a/htdocs/admin/tools/export.php +++ b/htdocs/admin/tools/export.php @@ -1,10 +1,11 @@ - * Copyright (C) 2011 Juanjo Menent - * Copyright (C) 2015 Raphaël Doursenaud +/* Copyright (C) 2006-2014 Laurent Destailleur + * Copyright (C) 2011 Juanjo Menent + * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2021 Regis Houssin - * Copyright (C) 2024 Frédéric France - * Copyright (C) 2025 MDW + * Copyright (C) 2024 Frédéric France + * Copyright (C) 2025 MDW + * Copyright (C) 2025 Anthony Berton * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -151,7 +152,7 @@ if ($what == 'mysql') { } if (!$errormsg && $cmddump) { - dolibarr_set_const($db, 'SYSTEMTOOLS_MYSQLDUMP', $cmddump, 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, 'SYSTEMTOOLS_MYSQLDUMP', $cmddump, 'chaine', 0, '', 0); } if (!$errormsg) { @@ -191,7 +192,7 @@ if ($what == 'postgresql') { } */ if (!$errormsg && $cmddump) { - dolibarr_set_const($db, 'SYSTEMTOOLS_POSTGRESQLDUMP', $cmddump, 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, 'SYSTEMTOOLS_POSTGRESQLDUMP', $cmddump, 'chaine', 0, '', 0); } if (!$errormsg) { diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index 53849f66647..d839407e7d5 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -2045,7 +2045,7 @@ class Categorie extends CommonObject * Return an array with all photos inside the directory * * @param string $dir Dir to scan - * @param int $nbmax Nombre maximum de photos (0=pas de max) + * @param int $nbmax Maximum number of photos (0=no max) * @return array Table with images */ public function liste_photos($dir, $nbmax = 0) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index c32417a34a7..d180a8a923a 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -20,6 +20,7 @@ * Copyright (C) 2024-2025 MDW * Copyright (C) 2024 Alexandre Spangaro * Copyright (C) 2025 Benjamin Falière + * Copyright (C) 2025 Anthony Berton * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -161,6 +162,8 @@ if (GETPOST('attribute', 'aZ09') && isset($extrafields->attributes[$object->tabl } $price_base_type = null; +$shipping_method_id = null; +$warehouse_id = -1; // Security check if (!empty($user->socid)) { @@ -2295,7 +2298,7 @@ if ($action == 'create') { $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0)); $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0)); - $warehouse_id = (!empty($objectsrc->warehouse_id) ? $objectsrc->warehouse_id : (!empty($soc->warehouse_id) ? $soc->warehouse_id : 0)); + $warehouse_id = (!empty($objectsrc->warehouse_id) ? $objectsrc->warehouse_id : (!empty($soc->warehouse_id) ? $soc->warehouse_id : -1)); // Replicate extrafields $objectsrc->fetch_optionals(); @@ -2319,7 +2322,7 @@ if ($action == 'create') { $mode_reglement_id = empty($soc->mode_reglement_id) ? $mode_reglement_id : $soc->mode_reglement_id; $fk_account = empty($soc->fk_account) ? $fk_account : $soc->fk_account; $shipping_method_id = $soc->shipping_method_id; - $warehouse_id = $soc->fk_warehouse; + $warehouse_id = !empty($soc->fk_warehouse) ? $soc->fk_warehouse : $warehouse_id; $remise_percent = $soc->remise_percent; if (isModEnabled("multicurrency") && !empty($soc->multicurrency_code)) { @@ -2347,7 +2350,7 @@ if ($action == 'create') { if ($soc->fk_warehouse > 0) { $warehouse_id = $soc->fk_warehouse; } - if (isModEnabled('stock') && empty($warehouse_id) && getDolGlobalString('WAREHOUSE_ASK_WAREHOUSE_DURING_PROPAL')) { + if (isModEnabled('stock') && $warehouse_id < 0 && getDolGlobalString('WAREHOUSE_ASK_WAREHOUSE_DURING_PROPAL')) { if (empty($object->warehouse_id) && getDolGlobalString('MAIN_DEFAULT_WAREHOUSE')) { $warehouse_id = getDolGlobalString('MAIN_DEFAULT_WAREHOUSE'); } @@ -2390,9 +2393,11 @@ if ($action == 'create') { // Third party print ''; + print '' . $langs->trans('Customer') . ''; $shipping_method_id = 0; $warehouse_id = 0; + if ($socid > 0) { print ''; print $soc->getNomUrl(1, 'customer'); @@ -2401,7 +2406,6 @@ if ($action == 'create') { if (getDolGlobalString('SOCIETE_ASK_FOR_SHIPPING_METHOD') && !empty($soc->shipping_method_id)) { $shipping_method_id = $soc->shipping_method_id; } - //$warehouse_id = $soc->warehouse_id; } else { print ''; $filter = '((s.client:IN:1,2,3) AND (s.status:=:1))'; diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 68f9fc4f9c7..2ae65a2b814 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -1286,7 +1286,7 @@ if (isModEnabled('stock') && getDolGlobalString('WAREHOUSE_ASK_WAREHOUSE_DURING_ $formproduct = new FormProduct($db); $moreforfilter .= '
'; $tmptitle = $langs->trans('Warehouse'); - $moreforfilter .= img_picto($tmptitle, 'stock', 'class="pictofixedwidth"').$formproduct->selectWarehouses($search_warehouse, 'search_warehouse', '', 1, 0, 0, $tmptitle, 0, 0, array(), 'maxwidth250 widthcentpercentminusx'); + $moreforfilter .= img_picto($tmptitle, 'stock', 'class="pictofixedwidth"').$formproduct->selectWarehouses($search_warehouse, 'search_warehouse', '', $tmptitle, 0, 0, '', 0, 0, array(), 'maxwidth250 widthcentpercentminusx'); $moreforfilter .= '
'; } $parameters = array(); diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index 95274722834..66a5130787e 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -309,16 +309,19 @@ if ($modecompta == 'BOOKKEEPING') { if ($showaccountdetail == 'no') { $sql .= ", f.thirdparty_code as name"; } - $sql .= " FROM ".MAIN_DB_PREFIX."accounting_bookkeeping as f"; - $sql .= ", ".MAIN_DB_PREFIX."accounting_account as aa"; - $sql .= " WHERE f.numero_compte = aa.account_number"; + $sql .= " FROM ".$db->prefix()."accounting_bookkeeping as f"; + $sql .= " INNER JOIN ".$db->prefix()."accounting_account as aa"; + $sql .= " ON aa.account_number = f.numero_compte"; + $sql .= " AND aa.entity = f.entity"; // Security prevents duplicate. + $sql .= " WHERE 1=1"; $sql .= " AND ".$predefinedgroupwhere; - $sql .= " AND fk_pcg_version = '".$db->escape($charofaccountstring)."'"; + $sql .= " AND aa.fk_pcg_version = '".$db->escape($charofaccountstring)."'"; $sql .= " AND f.entity = ".$conf->entity; if (!empty($date_start) && !empty($date_end)) { - $sql .= " AND f.doc_date >= '".$db->idate($date_start)."' AND f.doc_date <= '".$db->idate($date_end)."'"; + $sql .= " AND f.doc_date >= '".$db->idate($date_start)."'"; + $sql .= " AND f.doc_date <= '".$db->idate($date_end)."'"; } - $sql .= " GROUP BY pcg_type"; + $sql .= " GROUP BY aa.pcg_type"; if ($showaccountdetail == 'no') { $sql .= ", name, socid"; // group by "accounting group" (INCOME/EXPENSE), then "customer". } diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index a5a5a0f6ac7..c14b2991abc 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -1416,8 +1416,8 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { if (getDolGlobalString('THIRDPARTY_ENABLE_PROSPECTION_ON_ALTERNATIVE_ADRESSES')) { if ($object->thirdparty->client == 2 || $object->thirdparty->client == 3) { // Level of prospect - print ''; - print '
'; + print '
'; + print ''; + print ''; print ''; @@ -1461,7 +1461,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Contact by default for if (!empty($object->socid)) { - print ''; + print ''; print ''; @@ -1474,13 +1474,13 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { $object->load_ref_elements(); if (isModEnabled("propal")) { - print ''; } if (isModEnabled('order') || isModEnabled("shipping")) { - print ''; } if (isModEnabled('invoice')) { - print ''; } @@ -1527,6 +1527,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { print dol_get_fiche_end(); + /* * Action bar */ diff --git a/htdocs/core/boxes/modules_boxes.php b/htdocs/core/boxes/modules_boxes.php index 7a81d210e88..d7d85fbe8b6 100644 --- a/htdocs/core/boxes/modules_boxes.php +++ b/htdocs/core/boxes/modules_boxes.php @@ -265,7 +265,7 @@ class ModeleBoxes // Can't be abstract as it is instantiated to build "empty" bo $MAXLENGTHBOX = 0; // When set to 0: no length limit - $cachetime = 900; // 900 : 15mn + $cachetime = getDolGlobalInt('MAIN_ACTIVATE_FILECACHE_DELAY', 900); // 900 : 15mn $cachedir = DOL_DATA_ROOT.'/users/temp/widgets'; $fileid = get_class($this).'id-'.$this->box_id.'-e'.$conf->entity.'-u'.$user->id.'-s'.$user->socid.'.cache'; $filename = '/box-'.$fileid; diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index fe33de60c8d..471429492af 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5807,6 +5807,8 @@ abstract class CommonObject $this->tpl['strike'] = 0; if ($restrictlist == 'services' && $line->product_type != Product::TYPE_SERVICE) { $this->tpl['strike'] = 1; + } elseif ($line->special_code == SUBTOTALS_SPECIAL_CODE) { + $this->tpl['strike'] = 1; } // Output template part (modules that overwrite templates must declare this into descriptor) diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 9fb06159b55..02f075ee403 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -3,6 +3,7 @@ * Copyright (C) 2016 Christophe Battarel * Copyright (C) 2019-2025 Frédéric France * Copyright (C) 2024 MDW + * Copyright (C) 2025 Benjamin Falière * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -285,5 +286,6 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $ print ''; print '
'; + htmlPrintOnlineHeader($mysoc, $langs, (getDolGlobalInt('TICKET_SHOW_COMPANY_LOGO') ? getDolGlobalString('TICKET_URL_PUBLIC_INTERFACE', dol_buildpath('/public/ticket/index.php?entity='.$conf->entity, 1)) : '0'), getDolGlobalString('TICKET_PUBLIC_INTERFACE_TOPIC', $langs->trans("TicketSystem")), 'TICKET_IMAGE_PUBLIC_INTERFACE'); } diff --git a/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php b/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php index db3782153cd..e1a7a0aaed4 100644 --- a/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php +++ b/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php @@ -151,7 +151,7 @@ class doc_generic_contract_odt extends ModelePDFContract $texte .= getDolGlobalString('CONTRACT_ADDON_PDF_ODT_PATH'); $texte .= ''; $texte .= '
'; - $texte .= ''; + $texte .= ''; $texte .= '
'; // Scan directories @@ -159,7 +159,7 @@ class doc_generic_contract_odt extends ModelePDFContract if (getDolGlobalString('CONTRACT_ADDON_PDF_ODT_PATH')) { $texte .= $langs->trans("NumberOfModelFilesFound").': '; //$texte.=$nbofiles?'':''; - $texte .= count($listoffiles); + $texte .= $nbofiles; //$texte.=$nbofiles?'':''; $texte .= ''; } diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php index 5de60015837..d902d4d9e7c 100644 --- a/htdocs/core/modules/modProduct.class.php +++ b/htdocs/core/modules/modProduct.class.php @@ -639,7 +639,8 @@ class modProduct extends DolibarrModules 'p.recuperableonly' => '^[0|1]$', ); - if (isModEnabled('stock')) {//if Stock module enabled + // Complete if Stock module enabled + if (isModEnabled('stock')) { $this->import_fields_array[$r] = array_merge($this->import_fields_array[$r], array( 'p.fk_default_warehouse' => 'DefaultWarehouse', 'p.tobatch' => 'ManageLotSerial', @@ -994,7 +995,11 @@ class modProduct extends DolibarrModules // End add extra fields $this->import_fieldshidden_array[$r] = array('extra.fk_object' => 'lastrowid-'.MAIN_DB_PREFIX.'product_price'); // aliastable.field => ('user->id' or 'lastrowid-'.tableparent) - $this->import_regex_array[$r] = array('pr.datec' => '^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$', 'pr.recuperableonly' => '^[0|1]$'); + $this->import_regex_array[$r] = array( + 'pr.datec' => '^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$', + 'pr.recuperableonly' => '^[0|1]$' + ); + $this->import_convertvalue_array[$r] = array( 'pr.fk_product' => array('rule' => 'fetchidfromref', 'classfile' => '/product/class/product.class.php', 'class' => 'Product', 'method' => 'fetch', 'element' => 'Product') ); diff --git a/htdocs/don/admin/website.php b/htdocs/don/admin/website.php index ef87706c6d2..dfcf86178ac 100644 --- a/htdocs/don/admin/website.php +++ b/htdocs/don/admin/website.php @@ -29,12 +29,6 @@ // Load Dolibarr environment require '../../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/donation.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; - /** * @var Conf $conf * @var DoliDB $db @@ -44,6 +38,11 @@ require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; * * @var string $dolibarr_main_url_root */ +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/donation.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; // Load translation files required by the page $langs->loadLangs(array("admin", "donations")); @@ -120,7 +119,7 @@ print '
'; print ''; print ''; -print dol_get_fiche_head($head, 'website', $langs->trans("Donations"), -1, 'user'); +print dol_get_fiche_head($head, 'website', $langs->trans("Donations"), -1, 'payment'); if ($conf->use_javascript_ajax) { print "\n".'
'; print $langs->trans('ProspectLevel'); print ''; if ($action != 'editlevel' && $user->hasRight('societe', 'contact', 'creer')) { @@ -1453,7 +1453,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { // Categories if (isModEnabled('category') && $user->hasRight('categorie', 'lire')) { - print '
'.$langs->trans("Categories").'
'.$langs->trans("Categories").''; print $form->showCategories($object->id, Categorie::TYPE_CONTACT, 1); print '
'.$langs->trans("ContactByDefaultFor").'
'.$langs->trans("ContactByDefaultFor").''; print $formcompany->showRoles("roles", $object, 'view', $object->roles, ''); print '
'.$langs->trans("ContactForProposals").''; + print '
'.$langs->trans("ContactForProposals").''; print $object->ref_propal ? $object->ref_propal : ''.$langs->trans("NoContactForAnyProposal").''; print '
'; + print '
'; if (isModEnabled("shipping")) { print $langs->trans("ContactForOrdersOrShipments"); } else { @@ -1496,13 +1496,13 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) { } if (isModEnabled('contract')) { - print '
'.$langs->trans("ContactForContracts").''; + print '
'.$langs->trans("ContactForContracts").''; print $object->ref_contrat ? $object->ref_contrat : ''.$langs->trans("NoContactForAnyContract").''; print '
'.$langs->trans("ContactForInvoices").''; + print '
'.$langs->trans("ContactForInvoices").''; print $object->ref_facturation ? $object->ref_facturation : ''.$langs->trans("NoContactForAnyInvoice").''; print '