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 ''; + print ''; - // Year NP - print ''; - print $cat['code']; - print ''; - print $cat['label']; - print ''; + // Year NP + print ''; + print $cat['code']; + print ''; + print $cat['label']; + print ''; - $vars = array(); + $vars = array(); - // Previous Fiscal year (N-1) - foreach($sommes as $code => $det){ - $vars[$code] = $det['NP']; - } - - - $result = strtr($formula, $vars); - - //var_dump($result); - //$r = $AccCat->calculate($result); - $r = dol_eval($result, 1); - //var_dump($r); - - print '' . price($r) . ''; - - // Year N - $code = $cat['code']; // code of categorie ('VTE', 'MAR', ...) - $sommes[$code]['NP'] += $r; - - // Current fiscal year (N) - if (is_array($sommes) && ! empty($sommes)){ - foreach($sommes as $code => $det){ - $vars[$code] = $det['N']; + // Previous Fiscal year (N-1) + foreach ($sommes as $code => $det) { + $vars[$code] = $det['NP']; } - } - $result = strtr($formula, $vars); - //$r = $AccCat->calculate($result); - $r = dol_eval($result, 1); + $result = strtr($formula, $vars); - print '' . price($r) . ''; - $sommes[$code]['N'] += $r; + //var_dump($result); + //$r = $AccCat->calculate($result); + $r = dol_eval($result, 1); + //var_dump($r); - // Detail by month - foreach($months as $k => $v) - { - if (($k+1) >= $date_startmonth) - { - foreach($sommes as $code => $det){ - $vars[$code] = $det['M'][$k]; - } - $result = strtr($formula, $vars); + print '' . price($r) . ''; - //$r = $AccCat->calculate($result); - $r = dol_eval($result, 1); + // Year N + $code = $cat['code']; // code of categorie ('VTE', 'MAR', ...) + $sommes[$code]['NP'] += $r; - print '' . price($r) . ''; - $sommes[$code]['M'][$k] += $r; - } - } - foreach($months as $k => $v) - { - if (($k+1) < $date_startmonth) - { - foreach($sommes as $code => $det){ - $vars[$code] = $det['M'][$k]; - } - $result = strtr($formula, $vars); - - //$r = $AccCat->calculate($result); - $r = dol_eval($result, 1); - - print '' . price($r) . ''; - $sommes[$code]['M'][$k] += $r; - } - } - - print "\n"; - - //var_dump($sommes); - } - else // normal category - { - $code = $cat['code']; // Category code we process - - $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. - { - $arrayofaccountforfilter[]=$cpt['account_number']; - } - - // N-1 - if (! empty($arrayofaccountforfilter)) - { - $return = $AccCat->getSumDebitCredit($arrayofaccountforfilter, $date_start_previous, $date_end_previous, $cat['dc']?$cat['dc']:0); - - if ($return < 0) { - setEventMessages(null, $AccCat->errors, 'errors'); - $resultNP=0; - } else { - foreach($cpts as $i => $cpt) // Loop on each account. - { - $resultNP = empty($AccCat->sdcperaccount[$cpt['account_number']])?0:$AccCat->sdcperaccount[$cpt['account_number']]; - - $totCat['NP'] += $resultNP; - $sommes[$code]['NP'] += $resultNP; - $totPerAccount[$cpt['account_number']]['NP'] = $resultNP; + // Current fiscal year (N) + if (is_array($sommes) && !empty($sommes)) { + foreach ($sommes as $code => $det) { + $vars[$code] = $det['N']; } } - } - // 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. + $result = strtr($formula, $vars); + + //$r = $AccCat->calculate($result); + $r = dol_eval($result, 1); + + print '' . price($r) . ''; + $sommes[$code]['N'] += $r; + + // Detail by month + foreach ($months as $k => $v) { + if (($k + 1) >= $date_startmonth) { + foreach ($sommes as $code => $det) { + $vars[$code] = $det['M'][$k]; + } + $result = strtr($formula, $vars); + + //$r = $AccCat->calculate($result); + $r = dol_eval($result, 1); + + print '' . price($r) . ''; + $sommes[$code]['M'][$k] += $r; + } + } + foreach ($months as $k => $v) { + if (($k + 1) < $date_startmonth) { + foreach ($sommes as $code => $det) { + $vars[$code] = $det['M'][$k]; + } + $result = strtr($formula, $vars); + + //$r = $AccCat->calculate($result); + $r = dol_eval($result, 1); + + print '' . price($r) . ''; + $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 ''; - print ''; - print ''; - print '     ' . length_accountg($cpt['account_number']); - print ' - '; - print $cpt['account_label']; - print ''; - print '' . price($resultNP) . ''; - print '' . price($resultN) . ''; - - // Make one call for each month - foreach($months as $k => $v) - { - if (($k+1) >= $date_startmonth) - { - $resultM=$totPerAccount[$cpt['account_number']]['M'][$k]; - print '' . price($resultM) . ''; - } + $i = 0; + foreach ($cpts as $cpt) { + if ($i > 5) { + print '...)'; + break; } - foreach($months as $k => $v) - { - if (($k+1) < $date_startmonth) - { - $resultM=$totPerAccount[$cpt['account_number']]['M'][$k]; - print '' . price($resultM) . ''; + if ($i > 0) + print ', '; + else print ' ('; + print $cpt['account_number']; + $i++; + } + 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) . ''; + } + + print "\n"; + + // Loop on detail of all accounts to output the detail + if ($showaccountdetail != 'no') { + foreach ($cpts as $i => $cpt) { + $resultNP = $totPerAccount[$cpt['account_number']]['NP']; + $resultN = $totPerAccount[$cpt['account_number']]['N']; + + if ($showaccountdetail == 'all' || $resultN > 0) { + print ''; + print ''; + print ''; + print '     ' . length_accountg($cpt['account_number']); + print ' - '; + print $cpt['account_label']; + print ''; + print '' . price($resultNP) . ''; + print '' . price($resultN) . ''; + + // Make one call for each month + foreach ($months as $k => $v) { + if (($k + 1) >= $date_startmonth) { + $resultM = $totPerAccount[$cpt['account_number']]['M'][$k]; + print '' . price($resultM) . ''; + } } + foreach ($months as $k => $v) { + if (($k + 1) < $date_startmonth) { + $resultM = $totPerAccount[$cpt['account_number']]['M'][$k]; + print '' . price($resultM) . ''; + } + } + print "\n"; } - print "\n"; } } }