Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
3762d98
Add expedition to massaction order to invoice
Jan 4, 2024
75f1b62
Merge branch '3.22' of https://github.com/ATM-Consulting/dolibarr_mod…
Jan 4, 2024
6fccf4f
Merge branch '3.22_new_exp_in_massaction' into main
Jan 4, 2024
bec9600
Merge branch 'main' of https://github.com/ATM-Consulting/dolibarr_mod…
Jul 2, 2024
e11d575
Merge branch 'main' of https://github.com/ATM-Consulting/dolibarr_mod…
Aug 27, 2024
161a6e1
Merge branch 'main' of https://github.com/ATM-Consulting/dolibarr_mod…
Sep 4, 2024
7339715
NEW : mass action option for expeditions
Sep 4, 2024
30dcb28
remove cp fail
Sep 4, 2024
9961ab5
Update langs
Sep 4, 2024
97bc203
changelog
Sep 4, 2024
ffcf0ad
fix font awesome
Sep 4, 2024
028270f
ll
Sep 16, 2024
aaad0af
Merge branch 'fix_v20_compatibility_nc_col' of github.com:THERSANE/do…
Sep 16, 2024
1714f3c
remove duplicate setup
Sep 16, 2024
0828bab
Fix
Sep 16, 2024
1914602
NEW : Use v20 dropdown for action buttons & fix buttons orders
Oct 1, 2024
71a6afc
changelog
Oct 1, 2024
32f96d6
Changement suite à modifications de eldy
Oct 4, 2024
6b7f64c
Update langs/es_ES/subtotal.lang
thersane-john Nov 27, 2024
d3276df
Update langs/en_US/subtotal.lang
thersane-john Nov 27, 2024
ab0733a
Update langs/es_ES/subtotal.lang
thersane-john Nov 27, 2024
34a923e
Update langs/fr_FR/subtotal.lang
thersane-john Nov 27, 2024
5839ff9
Update langs/es_ES/subtotal.lang
thersane-john Nov 27, 2024
3016006
Update langs/fr_FR/subtotal.lang
thersane-john Nov 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ All notable changes to this project will be documented in this file.

# [Unreleased]


- NEW : Use v20 dropdown for action buttons & fix buttons orders - *01/10/2024* - 3.27.0
Use SUBTOTAL_FORCE_EXPLODE_ACTION_BTN hidden conf to disable behavior
- FIX : Compat V20 : Document col missing for title for NC - *16/09/2024* - 3.26.1
- NEW : Add more order to invoice massaction option - *04/09/2024* - 3.26.0
Allow adding list of shipping ref to title block

# Release 3.25 - 24/07/2024

Expand Down
85 changes: 67 additions & 18 deletions class/actions_subtotal.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -333,25 +333,47 @@ function printNewFormat(&$object, &$conf, &$langs, $idvar)
'conf' => array(
'SUBTOTAL_USE_NEW_FORMAT' => getDolGlobalInt('SUBTOTAL_USE_NEW_FORMAT'),
'MAIN_VIEW_LINE_NUMBER' => getDolGlobalInt('MAIN_VIEW_LINE_NUMBER'),
'token' => ((float) DOL_VERSION < 11.0) ? $_SESSION['newtoken'] : newToken()
'token' => ((float) DOL_VERSION < 11.0) ? $_SESSION['newtoken'] : newToken(),
'groupBtn' => intval(DOL_VERSION) < 20.0 || getDolGlobalInt('SUBTOTAL_FORCE_EXPLODE_ACTION_BTN') ? 0 : 1
),
'langs' => array(
'Level' => $langs->trans('Level'),
'Position' => $langs->transnoentities('Position')
'Position' => $langs->transnoentities('Position'),
'AddTitle' => $langs->trans('AddTitle'),
'AddSubTotal' => $langs->trans('AddSubTotal'),
'AddFreeText' => $langs->trans('AddFreeText'),
)
);


$jsData['buttons'] = dolGetButtonAction('', $langs->trans('SubtotalsAndTitlesActionBtnLabel'), 'default', [
['attr' => [ 'rel' => 'add_title_line'], 'id' => 'add_title_line', 'urlraw' =>'#', 'label' => $langs->trans('AddTitle'), 'perm' => 1],
['attr' => [ 'rel' => 'add_total_line'], 'id' => 'add_total_line', 'urlraw' =>'#', 'label' => $langs->trans('AddSubTotal'), 'perm' => 1],
['attr' => [ 'rel' => 'add_free_text'], 'id' => 'add_free_text', 'urlraw' =>'#', 'label' => $langs->trans('AddFreeText'), 'perm' => 1],
], 'subtotal-actions-buttons-dropdown');

if(empty($jsData['conf']['groupBtn'])) {
$jsData['buttons'] = '<div class="inline-block divButAction"><a id="add_title_line" rel="add_title_line" href="javascript:;" class="butAction">'.$langs->trans('AddTitle').'</a></div>';
$jsData['buttons'].= '<div class="inline-block divButAction"><a id="add_total_line" rel="add_total_line" href="javascript:;" class="butAction">'.$langs->trans('AddSubTotal').'</a></div>';
$jsData['buttons'].= '<div class="inline-block divButAction"><a id="add_free_text" rel="add_free_text" href="javascript:;" class="butAction">'.$langs->trans('AddFreeText').'</a></div>';
}




?>
<!-- SubTotal action printNewFormat -->
<script type="text/javascript">
$(document).ready(function() {
let jsSubTotalData = <?php print json_encode($jsData); ?>;

$('div.fiche div.tabsAction').append('<br />');
if(jsSubTotalData.conf.groupBtn == 0){
$('div.fiche div.tabsAction').append('<br />');
$('div.fiche div.tabsAction').append(jsSubTotalData.buttons);
}else{
$(jsSubTotalData.buttons).insertBefore($("div.fiche div.tabsAction > .butAction").first());
}

$('div.fiche div.tabsAction').append('<div class="inline-block divButAction"><a id="add_title_line" rel="add_title_line" href="javascript:;" class="butAction"><?php echo $langs->trans('AddTitle' )?></a></div>');
$('div.fiche div.tabsAction').append('<div class="inline-block divButAction"><a id="add_total_line" rel="add_total_line" href="javascript:;" class="butAction"><?php echo $langs->trans('AddSubTotal')?></a></div>');
$('div.fiche div.tabsAction').append('<div class="inline-block divButAction"><a id="add_free_text" rel="add_free_text" href="javascript:;" class="butAction"><?php echo $langs->trans('AddFreeText')?></a></div>');


function updateAllMessageForms(){
Expand Down Expand Up @@ -474,8 +496,9 @@ function promptSubTotal(action, titleDialog, label, url_to, url_ajax, params, us
});
}

$('a[rel=add_title_line]').click(function()
$('a[rel=add_title_line]').click(function(e)
{
e.preventDefault();
promptSubTotal('addTitle'
, "<?php echo $langs->trans('YourTitleLabel') ?>"
, "<?php echo $langs->trans('title'); ?>"
Expand All @@ -485,8 +508,9 @@ function promptSubTotal(action, titleDialog, label, url_to, url_ajax, params, us
);
});

$('a[rel=add_total_line]').click(function()
$('a[rel=add_total_line]').click(function(e)
{
e.preventDefault();
promptSubTotal('addSubtotal'
, '<?php echo $langs->trans('YourSubtotalLabel') ?>'
, '<?php echo $langs->trans('subtotal'); ?>'
Expand All @@ -497,8 +521,9 @@ function promptSubTotal(action, titleDialog, label, url_to, url_ajax, params, us
);
});

$('a[rel=add_free_text]').click(function()
$('a[rel=add_free_text]').click(function(e)
{
e.preventDefault();
promptSubTotal('addFreeTxt'
, "<?php echo $langs->transnoentitiesnoconv('YourTextLabel') ?>"
, "<?php echo $langs->trans('subtotalAddLineDescription'); ?>"
Expand Down Expand Up @@ -3785,12 +3810,17 @@ function addMoreActionsButtons($parameters, &$object, &$action, $hookmanager) {

if ((typeof id != 'undefined' && id.indexOf('row-') == 0) || $(item).hasClass('liste_titre'))
{
$(item).children('td:last-child').before('<td class="subtotal_nc"></td>');
let tableNCColSelector = 'td';
if($(item).hasClass('liste_titre') && $(item).children('th:last-child').length > 0 && $(item).children('td:last-child').length == 0){
tableNCColSelector = 'th'; // In Dolibarr V20.0 title use th instead of td
}

$(item).children(`${tableNCColSelector}:last-child`).before(`<${tableNCColSelector} class="subtotal_nc"></${tableNCColSelector}>`);

if ($(item).attr('rel') != 'subtotal' && typeof $(item).attr('id') != 'undefined')
{
var idSplit = $(item).attr('id').split('-');
$(item).children('td.subtotal_nc').append($('<input type="checkbox" id="subtotal_nc-'+idSplit[1]+'" class="subtotal_nc_chkbx" data-lineid="'+idSplit[1]+'" value="1" '+(typeof subtotal_TSubNc[idSplit[1]] != 'undefined' && subtotal_TSubNc[idSplit[1]] == 1 ? 'checked="checked"' : '')+' />'));
$(item).children(`${tableNCColSelector}.subtotal_nc`).append($('<input type="checkbox" id="subtotal_nc-'+idSplit[1]+'" class="subtotal_nc_chkbx" data-lineid="'+idSplit[1]+'" value="1" '+(typeof subtotal_TSubNc[idSplit[1]] != 'undefined' && subtotal_TSubNc[idSplit[1]] == 1 ? 'checked="checked"' : '')+' />'));
}
}
else
Expand Down Expand Up @@ -4155,7 +4185,7 @@ public function defineColumnField($parameters, &$pdfDoc, &$action, $hookmanager)
$parameters['object']->context['subtotalPdfModelInfo']->page_largeur = $pdfDoc->page_largeur;
$parameters['object']->context['subtotalPdfModelInfo']->page_hauteur = $pdfDoc->page_hauteur;
$parameters['object']->context['subtotalPdfModelInfo']->format = $pdfDoc->format;
if (property_exists($pdfDoc, 'context') && is_object($pdfDoc->context['subtotalPdfModelInfo'])) {
if (property_exists($pdfDoc, 'context') && array_key_exists('subtotalPdfModelInfo', $pdfDoc->context) && is_object($pdfDoc->context['subtotalPdfModelInfo'])) {
$parameters['object']->context['subtotalPdfModelInfo']->defaultTitlesFieldsStyle = $pdfDoc->context['subtotalPdfModelInfo']->defaultTitlesFieldsStyle;
$parameters['object']->context['subtotalPdfModelInfo']->defaultContentsFieldsStyle = $pdfDoc->context['subtotalPdfModelInfo']->defaultContentsFieldsStyle;
}
Expand All @@ -4168,20 +4198,39 @@ public function defineColumnField($parameters, &$pdfDoc, &$action, $hookmanager)
*/
private function _billOrdersAddCheckBoxForTitleBlocks()
{
global $delayedhtmlcontent, $langs;
global $delayedhtmlcontent, $langs, $conf;

ob_start();
$jsConf = array(
'langs'=> array(
'AddTitleBlocFromOrdersToInvoice' => $langs->trans('subtotal_add_title_bloc_from_orderstoinvoice'),
'AddShippingListToTile' => $langs->trans('AddShippingListToTile'),
'SubtotalOptions' => $langs->trans('SubtotalOptions'),
'UseHiddenConfToAutoCheck' => $langs->trans('UseHiddenConfToAutoCheck'),
),
'isModShippingEnable' => !empty($conf->expedition->enabled),
'SUBTOTAL_DEFAULT_CHECK_SHIPPING_LIST_FOR_TITLE_DESC' => getDolGlobalInt('SUBTOTAL_DEFAULT_CHECK_SHIPPING_LIST_FOR_TITLE_DESC')
);
?>
<script type="text/javascript">
$(function() {
var tr = $("<tr><td><?php echo $langs->trans('subtotal_add_title_bloc_from_orderstoinvoice'); ?></td><td><input type='checkbox' value='1' name='subtotal_add_title_bloc_from_orderstoinvoice' checked='checked' /></td></tr>");
var $noteTextArea = $("textarea[name=note]");
let jsConf = <?php print json_encode($jsConf); ?>;

let tr = '<tr><td>'+jsConf.langs.SubtotalOptions+'</td><td>';
tr+= '<label><input type="checkbox" value="1" name="subtotal_add_title_bloc_from_orderstoinvoice" checked="checked" /> '+jsConf.langs.AddTitleBlocFromOrdersToInvoice+'</label>';
if(jsConf.isModShippingEnable){
tr+= '<br/><label><input type="checkbox" value="1" name="subtotal_add_shipping_list_to_title_desc" /> '+jsConf.langs.AddShippingListToTile+' <i class="fa fa-question-circle" title="'+jsConf.langs.UseHiddenConfToAutoCheck+' SUBTOTAL_DEFAULT_CHECK_SHIPPING_LIST_FOR_TITLE_DESC"></label>';
}
tr+= '<td></tr>';
Comment on lines +4219 to +4224
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pour la lisibilité (je sais pas si ça vaut vraiment le coup, mais je trouve ça plus simple à comprendre).
J'ai pas testé encore, mais en principe, ça ne doit rien changer.

Suggested change
let tr = '<tr><td>'+jsConf.langs.SubtotalOptions+'</td><td>';
tr+= '<label><input type="checkbox" value="1" name="subtotal_add_title_bloc_from_orderstoinvoice" checked="checked" /> '+jsConf.langs.AddTitleBlocFromOrdersToInvoice+'</label>';
if(jsConf.isModShippingEnable){
tr+= '<br/><label><input type="checkbox" value="1" name="subtotal_add_shipping_list_to_title_desc" /> '+jsConf.langs.AddShippingListToTile+' <i class="fa fa-question-circle" title="'+jsConf.langs.UseHiddenConfToAutoCheck+' SUBTOTAL_DEFAULT_CHECK_SHIPPING_LIST_FOR_TITLE_DESC"></label>';
}
tr+= '<td></tr>';
const checkboxWithLabel = (name, label, checked = false) => `<label><input type="checkbox" value="1" name="${name}" ${checked ? 'checked="checked"' : ''} />${label}</label>`;
const buildInfoHelp = (helpText, faClass='fa-question-circle') => `<i class="fa ${faClass}" title="${helpText}"></i>`;
let optCheckboxes = checkboxWithLabel('subtotal_add_title_bloc_from_orderstoinvoice', jsConf.langs.AddTitleBlocFromOrdersToInvoice, true);
if (jsConf.isModShippingEnable) {
optCheckboxes += checkboxWithLabel(
'subtotal_add_shipping_list_to_title_desc',
buildInfoHelp(jsConf.langs.UseHiddenConfToAutoCheck + ' SUBTOTAL_DEFAULT_CHECK_SHIPPING_LIST_FOR_TITLE_DESC')
);
}
const tr = `<tr><td>${jsConf.langs.SubtotalOptions}</td><td>${optCheckboxes}</td></tr>`;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Franchement je ne sais pas non plus, au début j'avais fait un peu comme toi mais après j'ai changé pour remettre un truc plus "à l'ancienne" car je me suis dit que ce serait plus compréhensible, mais je me suis peut-être fait des idées...
Du coup je ne sais pas. Mais vu que c'est toi maintenant le mainteneur du module, je dirais que c'est toi qui choisis ;-)

Copy link
Contributor

@atm-florianm atm-florianm Nov 27, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tu sais quoi ? Je vais merger tel quel et quand j'aurai du temps pour faire des tests et de la refacto, je reprendrai ça… au moins je prends aucun risque.


let $noteTextArea = $("textarea[name=note]");
if ($noteTextArea.length === 1) {
$noteTextArea.closest('tr').after(tr);
$noteTextArea.closest($('tr')).after(tr);
return;
}
var $inpCreateBills = $("#validate_invoices");
let $inpCreateBills = $("#validate_invoices");
if ($inpCreateBills.length === 1) {
$inpCreateBills.closest('tr').after(tr);
$inpCreateBills.closest($('tr')).after(tr);
}
});
</script>
Expand Down
9 changes: 5 additions & 4 deletions class/subtotal.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,11 @@ static function showQtyForObjectLine($line, $show_by_default = false) {
* @param string $label
* @param int $qty
* @param int $rang
* @param string $desc
* @return int
*
*/
static function addSubTotalLine(&$object, $label, $qty, $rang=-1) {
static function addSubTotalLine(&$object, $label, $qty, $rang=-1, $desc = '') {

$res = 0;

Expand All @@ -124,7 +125,6 @@ static function addSubTotalLine(&$object, $label, $qty, $rang=-1) {

}
else {
$desc = '';

$TNotElements = array ('invoice_supplier', 'order_supplier');
if ((float) DOL_VERSION < 6 || $qty==50 && !in_array($object->element, $TNotElements)) {
Expand Down Expand Up @@ -269,16 +269,17 @@ public static function addSubtotalMissing(&$object, $level_new_title)
}
}

public static function addTitle(&$object, $label, $level, $rang=-1)
public static function addTitle(&$object, $label, $level, $rang=-1, $desc = '')
/**
* @param CommonObject $object
* @param string $label
* @param int $level
* @param int $rang
* @param string $desc
* @return int
*/
{
return self::addSubTotalLine($object, $label, $level, $rang);
return self::addSubTotalLine($object, $label, $level, $rang, $desc);
}

public static function addTotal(&$object, $label, $level, $rang=-1)
Expand Down
2 changes: 1 addition & 1 deletion core/modules/modSubtotal.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public function __construct($db)
// Possible values for version are: 'development', 'experimental' or version


$this->version = '3.25.2';
$this->version = '3.27.0';


// Url to the file with your last numberversion of this module
Expand Down
95 changes: 94 additions & 1 deletion core/triggers/interface_90_modSubtotal_subtotaltrigger.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -340,10 +340,16 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf
}

$label = str_replace(array('__REFORDER__', '__REFCUSTOMER__'), array($commande->ref, $commande->ref_client), $label);
$desc = '';

if(GETPOST('subtotal_add_shipping_list_to_title_desc', 'int')){
$desc = $this->getShippingList($commande->id);
}


if(!empty($current_fk_commande)) {
$subtotal_skip = true;
TSubtotal::addTitle($facture, $label, 1, $rang);
TSubtotal::addTitle($facture, $label, 1, $rang, $desc);
$rang++;
}
}
Expand Down Expand Up @@ -1010,4 +1016,91 @@ public function runTrigger($action, $object, User $user, Translate $langs, Conf

return 0;
}




/**
* List BL ref
* @param int $orderId
* @return string
*/
private function getShippingList($orderId)
{
$refBlList = array();
$refExpList = array();

if(!function_exists('isModEnabled')){
return '';
}

if (!isModEnabled('expedition')) {
return '';
}

// LIST SHIPPING LINKED TO ORDER
$sqlShip = "SELECT fk_target FROM `".MAIN_DB_PREFIX."element_element` WHERE `targettype` = 'shipping' AND sourcetype = 'commande' AND fk_source=".intval($orderId)." ORDER BY `fk_source` ASC";

$resultShip = $this->db->query($sqlShip);
if ($resultShip)
{
while ($shipping = $this->db->fetch_object($resultShip) )
{

if (isModEnabled('delivery')) {

// SELECT LIVRAISON LINKED TO SHIPPING
$sqlBl = "SELECT liv.ref
FROM `".MAIN_DB_PREFIX."element_element` el
JOIN `".MAIN_DB_PREFIX."livraison` liv ON ( el.fk_target = liv.rowid )
WHERE el.`targettype` = 'delivery'
AND el.sourcetype = 'shipping'
AND el.fk_source=".$shipping->fk_target."
AND liv.fk_statut = 1
ORDER BY el.`fk_target` ASC";

$resultDelivery = $this->db->query($sqlBl);
if ($resultDelivery)
{
while ($delivery = $this->db->fetch_object($resultDelivery) )
{
$refBlList[] = $delivery->ref;
}
}

}


// SELECT SHIPPING REF
$sqlExp = "SELECT exp.ref
FROM `" . MAIN_DB_PREFIX . "expedition` exp
WHERE exp.`rowid` =" . $shipping->fk_target;

$resultExp = $this->db->query($sqlExp);
if ($resultExp) {
$exp = $this->db->fetch_object($resultExp);
$refExpList[] = $exp->ref;
}

}
}

global $langs;
$langs->load('subtotal@subtotal');
$refList = array_merge($refBlList,$refExpList);
$output = '';


if(!empty($refExpList)){
$objectLabel = count($refExpList)>1?$langs->trans('LinkedShippings'):$langs->trans('LinkedShipping');
$output.= (!empty($output)?'<br>':'').'<strong>'.$objectLabel.' :</strong> '.implode(', ', $refList) ;
}

if(!empty($refBlList)){
$objectLabel = count($refBlList)>1?$langs->trans('LinkedDeliveries'):$langs->trans('LinkedDelivery');
$output.= (!empty($output)?'<br>':'').'<strong>'.$objectLabel.' :</strong> '.implode(', ', $refList) ;
}

return $output;
}
}
10 changes: 10 additions & 0 deletions langs/en_US/subtotal.lang
Original file line number Diff line number Diff line change
Expand Up @@ -135,3 +135,13 @@ SUBTOTAL_DISABLE_SUMMARY = Disable document "quick summary menu" (appears in lef
Subtotal_HideAll=Hide all lines
Subtotal_ShowAll=Show all lines
DISPLAY_MARGIN_ON_SUBTOTALS=Displays margin on subtotals lines

LinkedShippings = Linked shipping orders
LinkedShipping = Linked shipping order
LinkedDeliveries = Linked delivery notes
LinkedDelivery = Linked delivery note
SubtotalOptions = Subtotal options
AddShippingListToTile = Add the reference list of related delivery or shipping notes to the title block description.
UseHiddenConfToAutoCheck = To pre-set the default, you can activate the settings

SubtotalsAndTitlesActionBtnLabel = Title & Sub total
8 changes: 8 additions & 0 deletions langs/es_ES/subtotal.lang
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,11 @@ SubtotalExperimentalZone = Configuraciones experimentales u obsoletas
SUBTOTAL_HIDE_OPTIONS_TITLE=Ocultar opciones de título
SUBTOTAL_HIDE_OPTIONS_BREAK_PAGE_BEFORE=Ocultar la opción de salto de página
SUBTOTAL_HIDE_OPTIONS_BUILD_DOC=Ocultar las opciones de generación de documentos

LinkedShippings = Órdenes de envío vinculadas
LinkedShipping = Orden de envío vinculada
LinkedDeliveries = Albaranes vinculados
LinkedDelivery = Albarán vinculado
SubtotalOptions = Parámetros Subtotal
AddShippingListToTile = Añada la lista de referencia de los albaranes o notas de entrega relacionados a la descripción del bloque de título.
UseHiddenConfToAutoCheck = Para que la casilla se marque por defecto, puede activar el siguiente ajuste en "Ótras configuraciones"
8 changes: 8 additions & 0 deletions langs/fr_FR/subtotal.lang
Original file line number Diff line number Diff line change
Expand Up @@ -143,4 +143,12 @@ DISPLAY_MARGIN_ON_SUBTOTALS=Afficher les marges sur les lignes de sous-totaux
HideSubtitleOnFold = Cacher les lignes de titre et sous total enfant
KeepSubtitleDisplayOnFold = Afficher les lignes de titre et sous total enfant
SUBTOTAL_BLOC_FOLD_MODE = Comportement à adopter lorsque l'on cache un bloc de titre
LinkedShippings = Bons d'expéditions liés
LinkedShipping = Bon d'expédition lié
LinkedDeliveries = Bons de livraison liés
LinkedDelivery = Bon de livraison lié
SubtotalOptions = Options sous-total
AddShippingListToTile = Ajouter à la description du bloc titre la liste des références des bons d'expédition ou de livraison liés
UseHiddenConfToAutoCheck = Pour précocher par défaut vous pouvez activer la configuration divers
ErrorClassXNotExists = ERREUR : la classe php %s n'est pas chargée
SubtotalsAndTitlesActionBtnLabel = Titre & Sous total