NEW #24031 add option MAIN_GRANDTOTAL_LIST_SHOW to always show grand total to lists (#27247)

* Fix #24031 add - if option seleced - grand total to lists

* Fix #24031 add - if option seleced - grand total to lists

* Fix #24031 add - if option seleced - grand total to lists

* Fix #24031 add - if option selected - grand total to lists

* Update ihm.php

---------

Co-authored-by: Laurent Destailleur <eldy@destailleur.fr>
This commit is contained in:
Vincent Maury 2024-02-12 05:34:45 +01:00 committed by GitHub
parent 200fd95074
commit e89f93024f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 93 additions and 27 deletions

View File

@ -437,7 +437,7 @@ if ($mode == 'other') {
print '<tr class="oddeven"><td>' . $langs->trans("DefaultMaxSizeShortList") . '</td><td><input class="flat" name="main_size_shortliste_limit" size="4" value="' . getDolGlobalString('MAIN_SIZE_SHORTLIST_LIMIT') . '"></td>';
print '</tr>';
// Max size of lists
// Display checkboxes and fields menu left / right
print '<tr class="oddeven"><td>' . $langs->trans("MAIN_CHECKBOX_LEFT_COLUMN") . '</td><td>';
print ajax_constantonoff("MAIN_CHECKBOX_LEFT_COLUMN", array(), $conf->entity, 0, 0, 1, 0, 0, 0, '', 'other');
print '</td>';

View File

@ -9,37 +9,13 @@ if (!empty($totalarray['totalizable']) && is_array($totalarray['totalizable']))
}
// Show total line
if (isset($totalarray['pos'])) {
print '<tfoot>';
print '<tr class="liste_total">';
$i = 0;
while ($i < $totalarray['nbfield']) {
$i++;
if (!empty($totalarray['pos'][$i])) {
// if $totalarray['type'] not present we consider it as number
if (empty($totalarray['type'][$i])) {
$totalarray['type'][$i] = 'real';
}
switch ($totalarray['type'][$i]) {
case 'duration':
print '<td class="right">';
print (!empty($totalarray['val'][$totalarray['pos'][$i]]) ? convertSecondToTime($totalarray['val'][$totalarray['pos'][$i]], 'allhourmin') : 0);
print '</td>';
break;
case 'string': // This type is no more used. type is now varchar(x)
print '<td class="left">';
print (!empty($totalarray['val'][$totalarray['pos'][$i]]) ? $totalarray['val'][$totalarray['pos'][$i]] : '');
print '</td>';
break;
case 'stock':
print '<td class="right">';
print price2num(!empty($totalarray['val'][$totalarray['pos'][$i]]) ? $totalarray['val'][$totalarray['pos'][$i]] : 0, 'MS');
print '</td>';
break;
default:
print '<td class="right">';
print price(!empty($totalarray['val'][$totalarray['pos'][$i]]) ? $totalarray['val'][$totalarray['pos'][$i]] : 0);
print '</td>';
break;
}
printTotalValCell($totalarray['type'][$i], $totalarray['val'][$totalarray['pos'][$i]]);
} else {
if ($i == 1) {
if (is_null($limit) || $num < $limit) {
@ -59,4 +35,88 @@ if (isset($totalarray['pos'])) {
}
}
print '</tr>';
// Add grand total if necessary ie only if different of page total already printed above
if (getDolGlobalString('MAIN_GRANDTOTAL_LIST_SHOW') && (!(is_null($limit) || $num < $limit))) {
if (isset($totalarray['pos']) && is_array($totalarray['pos']) && count($totalarray['pos']) > 0) {
$sumsarray = false;
$tbsumfields = [];
foreach ($totalarray['pos'] as $field) {
$fieldforsum = preg_replace('/[^a-z0-9]/', '', $field);
$tbsumfields[] = "sum($field) as $fieldforsum";
}
if (isset($sqlfields)) { // In project, commande list, this var is defined
$sqlforgrandtotal = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT '. implode(",", $tbsumfields), $sql);
} else {
$sqlforgrandtotal = preg_replace('/^SELECT[a-zA-Z0-9\._\s\(\),=<>\:\-\']+\sFROM/', 'SELECT '. implode(",", $tbsumfields). ' FROM ', $sql);
}
$sqlforgrandtotal = preg_replace('/GROUP BY .*$/', '', $sqlforgrandtotal). '';
$resql = $db->query($sqlforgrandtotal);
if ($resql) {
$sumsarray = $db->fetch_array($resql);
} else {
//dol_print_error($db); // as we're not sure it's ok for ALL lists, we don't print sq errors, they'll be in logs
}
if (is_array($sumsarray) && count($sumsarray) >0) {
print '<tr class="liste_grandtotal">';
$i = 0;
while ($i < $totalarray['nbfield']) {
$i++;
if (!empty($totalarray['pos'][$i])) {
printTotalValCell($totalarray['type'][$i], $sumsarray[$totalarray['pos'][$i]]);
} else {
if ($i == 1) {
print '<td>';
if (is_object($form)) {
print $form->textwithpicto($langs->trans("GrandTotal"), $langs->transnoentitiesnoconv("TotalforAllPages"));
} else {
print $langs->trans("GrandTotal");
}
print '</td>';
} else {
print '<td></td>';
}
}
}
print '</tr>';
}
}
}
print '</tfoot>';
}
/** print a total cell value according to its type
*
* @param string $type of field (duration, string..)
* @param string $val the value to display
*
* @return void (direct print)
*/
function printTotalValCell($type, $val)
{
// if $totalarray['type'] not present we consider it as number
if (empty($type)) {
$type = 'real';
}
switch ($type) {
case 'duration':
print '<td class="right">';
print (!empty($val) ? convertSecondToTime($val, 'allhourmin') : 0);
print '</td>';
break;
case 'string': // This type is no more used. type is now varchar(x)
print '<td class="left">';
print (!empty($val) ? $val : '');
print '</td>';
break;
case 'stock':
print '<td class="right">';
print price2num(!empty($val) ? $val : 0, 'MS');
print '</td>';
break;
default:
print '<td class="right">';
print price(!empty($val) ? $val : 0);
print '</td>';
break;
}
}

View File

@ -1197,6 +1197,7 @@ Skin=Skin theme
DefaultSkin=Default skin theme
MaxSizeList=Max length for list
DefaultMaxSizeList=Default max length for lists
DisplayGrandTotalInList=Display grand total (for all pages) in lists footer
DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
MessageOfDay=Message of the day
MessageLogin=Login page message

View File

@ -420,6 +420,8 @@ TotalTTCShort=Total (inc. tax)
TotalHT=Total (excl. tax)
TotalHTforthispage=Total (excl. tax) for this page
Totalforthispage=Total for this page
GrandTotal=Grand total
TotalforAllPages=Total for all pages
TotalTTC=Total (inc. tax)
TotalTTCToYourCredit=Total (inc. tax) to your credit
TotalVAT=Total tax

View File

@ -1202,6 +1202,7 @@ Skin=Thème visuel
DefaultSkin=Thème visuel par défaut
MaxSizeList=Longueur maximale des listes
DefaultMaxSizeList=Longueur maximale par défaut des listes
DisplayGrandTotalInList=Affiche le total général (de toutes les pages) en bas des listes
DefaultMaxSizeShortList=Longueur maximale par défaut des listes courtes (e.g. dans la fiche client)
MessageOfDay=Message du jour
MessageLogin=Message page de connexion

View File

@ -420,6 +420,8 @@ TotalTTCShort=Total TTC
TotalHT=Total HT
TotalHTforthispage=Montant (HT) pour la page
Totalforthispage=Total pour cette page
GrandTotal=Total général
TotalforAllPages=Total général de toutes les pages
TotalTTC=Total TTC
TotalTTCToYourCredit=Total TTC à votre crédit
TotalVAT=Total TVA