diff --git a/htdocs/compta/resultat/result.php b/htdocs/compta/resultat/result.php
index bd9f25bb0b8..59984ee444c 100644
--- a/htdocs/compta/resultat/result.php
+++ b/htdocs/compta/resultat/result.php
@@ -288,262 +288,251 @@ elseif ($modecompta=="BOOKKEEPING")
$j=1;
$sommes = array();
$totPerAccount = array();
-
- foreach ($cats as $cat) // Loop on each group
- {
- if (!empty($cat['category_type'])) // category calculed
+ if (!is_array($cats) && $cats<0) {
+ setEventMessages(null,$AccCat->errors,'errors');
+ } elseif (is_array($cats) && count($cats)>0) {
+ foreach ($cats as $cat) // Loop on each group
{
- // When we enter here, $sommes was filled by group of accounts
+ if (!empty($cat['category_type'])) // category calculed
+ {
+ // When we enter here, $sommes was filled by group of accounts
- $formula = $cat['formula'];
+ $formula = $cat['formula'];
- print '
';
+ $sommes[$code]['M'][$k] += $r;
+ }
+ }
+
+ print "\n";
+
+ //var_dump($sommes);
+ } else // normal category
{
- // We make 1 loop for each account because we may want detail per account.
- // @TODO Optimize to ask a 'group by' account and a filter with account in (..., ...) in request
+ $code = $cat['code']; // Category code we process
- // Each month
- $resultN = 0;
- foreach($months as $k => $v)
+ $totCat = array();
+ $totCat['NP'] = 0;
+ $totCat['N'] = 0;
+ $totCat['M'] = array();
+ foreach ($months as $k => $v) {
+ $totCat['M'][$k] = 0;
+ }
+
+ // Set $cpts with array of accounts in the category/group
+ $cpts = $AccCat->getCptsCat($cat['rowid']);
+
+ $arrayofaccountforfilter = array();
+ foreach ($cpts as $i => $cpt) // Loop on each account.
{
- $monthtoprocess = $k+1; // ($k+1) is month 1, 2, ..., 12
- $yeartoprocess = $start_year;
- if (($k+1) < $start_month) $yeartoprocess++;
+ $arrayofaccountforfilter[] = $cpt['account_number'];
+ }
+
+ // N-1
+ if (!empty($arrayofaccountforfilter)) {
+ $return = $AccCat->getSumDebitCredit($arrayofaccountforfilter, $date_start_previous, $date_end_previous, $cat['dc'] ? $cat['dc'] : 0);
- //var_dump($monthtoprocess.'_'.$yeartoprocess);
- $return = $AccCat->getSumDebitCredit($cpt['account_number'], $date_start, $date_end, $cat['dc']?$cat['dc']:0, 'nofilter', $monthtoprocess, $yeartoprocess);
if ($return < 0) {
setEventMessages(null, $AccCat->errors, 'errors');
- $resultM=0;
+ $resultNP = 0;
} else {
- $resultM=$AccCat->sdc;
- }
- $totCat['M'][$k] += $resultM;
- $sommes[$code]['M'][$k] += $resultM;
- $totPerAccount[$cpt['account_number']]['M'][$k] = $resultM;
+ foreach ($cpts as $i => $cpt) // Loop on each account.
+ {
+ $resultNP = empty($AccCat->sdcperaccount[$cpt['account_number']]) ? 0 : $AccCat->sdcperaccount[$cpt['account_number']];
- $resultN += $resultM;
+ $totCat['NP'] += $resultNP;
+ $sommes[$code]['NP'] += $resultNP;
+ $totPerAccount[$cpt['account_number']]['NP'] = $resultNP;
+ }
+ }
}
- $totCat['N'] += $resultN;
- $sommes[$code]['N'] += $resultN;
- $totPerAccount[$cpt['account_number']]['N'] = $resultN;
- }
-
-
- // Now output columns for row $code ('VTE', 'MAR', ...)
-
- print "
";
-
- // Column group
- print '
';
- print $cat['code'];
- print '
';
-
- // Label of group
- print '
';
- print $cat['label'];
- if (count($cpts) > 0) // Show example of 5 first accounting accounts
- {
- $i=0;
- foreach($cpts as $cpt)
+ // Set value into column N and month M ($totCat)
+ // This make 12 calls for each accountancy account (12 monthes M)
+ foreach ($cpts as $i => $cpt) // Loop on each account.
{
- if ($i > 5)
- {
- print '...)';
- break;
+ // We make 1 loop for each account because we may want detail per account.
+ // @TODO Optimize to ask a 'group by' account and a filter with account in (..., ...) in request
+
+ // Each month
+ $resultN = 0;
+ foreach ($months as $k => $v) {
+ $monthtoprocess = $k + 1; // ($k+1) is month 1, 2, ..., 12
+ $yeartoprocess = $start_year;
+ if (($k + 1) < $start_month)
+ $yeartoprocess++;
+
+ //var_dump($monthtoprocess.'_'.$yeartoprocess);
+ $return = $AccCat->getSumDebitCredit($cpt['account_number'], $date_start, $date_end, $cat['dc'] ? $cat['dc'] : 0, 'nofilter', $monthtoprocess, $yeartoprocess);
+ if ($return < 0) {
+ setEventMessages(null, $AccCat->errors, 'errors');
+ $resultM = 0;
+ } else {
+ $resultM = $AccCat->sdc;
+ }
+ $totCat['M'][$k] += $resultM;
+ $sommes[$code]['M'][$k] += $resultM;
+ $totPerAccount[$cpt['account_number']]['M'][$k] = $resultM;
+
+ $resultN += $resultM;
}
- if ($i > 0) print ', ';
- else print ' (';
- print $cpt['account_number'];
- $i++;
+
+ $totCat['N'] += $resultN;
+ $sommes[$code]['N'] += $resultN;
+ $totPerAccount[$cpt['account_number']]['N'] = $resultN;
}
- if ($i <= 5) print ')';
- }
- else
- {
- print ' - '.$langs->trans("GroupIsEmptyCheckSetup").'';
- }
- print '
';
- print '
' . price($totCat['NP']) . '
';
- print '
' . price($totCat['N']) . '
';
- // Each month
- foreach($totCat['M'] as $k => $v){
- if (($k+1) >= $date_startmonth) print '
' . price($v) . '
';
- }
- foreach($totCat['M'] as $k => $v){
- if (($k+1) < $date_startmonth) print '
' . price($v) . '
';
- }
+ // Now output columns for row $code ('VTE', 'MAR', ...)
- print "
\n";
+ print "
";
- // Loop on detail of all accounts to output the detail
- if ($showaccountdetail != 'no')
- {
- foreach($cpts as $i => $cpt)
+ // Column group
+ print '
';
+ print $cat['code'];
+ print '
';
+
+ // Label of group
+ print '
';
+ print $cat['label'];
+ if (count($cpts) > 0) // Show example of 5 first accounting accounts
{
- $resultNP=$totPerAccount[$cpt['account_number']]['NP'];
- $resultN=$totPerAccount[$cpt['account_number']]['N'];
-
- if ($showaccountdetail == 'all' || $resultN > 0)
- {
- print '
';
-
- // Make one call for each month
- foreach($months as $k => $v)
- {
- if (($k+1) >= $date_startmonth)
- {
- $resultM=$totPerAccount[$cpt['account_number']]['M'][$k];
- print '