Nb of sql requests divided by 2 from report per personalized categories

This commit is contained in:
Laurent Destailleur 2017-09-05 02:12:37 +02:00
parent 8de51ede18
commit 987303a6ca

View File

@ -39,16 +39,16 @@ $cat_id = GETPOST('account_category');
$selectcpt = GETPOST('cpt_bk'); $selectcpt = GETPOST('cpt_bk');
$id = GETPOST('id', 'int'); $id = GETPOST('id', 'int');
$rowid = GETPOST('rowid', 'int'); $rowid = GETPOST('rowid', 'int');
$cancel = GETPOST('cancel'); $cancel = GETPOST('cancel','alpha');
$simple_report = GETPOST('simple_report'); $showaccountdetail = GETPOST('showaccountdetail','aZ09');
$date_startmonth=GETPOST('date_startmonth'); $date_startmonth=GETPOST('date_startmonth','int');
$date_startday=GETPOST('date_startday'); $date_startday=GETPOST('date_startday','int');
$date_startyear=GETPOST('date_startyear'); $date_startyear=GETPOST('date_startyear','int');
$date_endmonth=GETPOST('date_endmonth'); $date_endmonth=GETPOST('date_endmonth','int');
$date_endday=GETPOST('date_endday'); $date_endday=GETPOST('date_endday','int');
$date_endyear=GETPOST('date_endyear'); $date_endyear=GETPOST('date_endyear','int');
$nbofyear=1; $nbofyear=1;
@ -181,10 +181,11 @@ else if ($modecompta=="BOOKKEEPING")
//$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')'; //$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
$nomlink = ''; $nomlink = '';
$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1); $period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
$period.=' &nbsp; &nbsp; '.$langs->trans("DetailByAccount").' '. $form->selectyesno('simple_report',$simple_report,0); $period.=' &nbsp; &nbsp; '.$langs->trans("DetailByAccount").' '. $form->selectyesno('showaccountdetail',$showaccountdetail,0);
$periodlink = $textprevyear . " " . $langs->trans("Year") . " " . $start_year . " " . $textnextyear ; $periodlink = $textprevyear . " " . $langs->trans("Year") . " " . $start_year . " " . $textnextyear ;
$exportlink = ''; $exportlink = '';
$description=$langs->trans("RulesResultBookkeepingPersonalized", $langs->transnoentitiesnoconv("Accountancy").' / '.$langs->transnoentitiesnoconv("Setup").' / '.$langs->trans("AccountingCategory")); $description=$langs->trans("RulesResultBookkeepingPersonalized").
$description.=' ('.$langs->trans("SeePageForSetup", DOL_URL_ROOT.'/accountancy/admin/categories_list.php?search_country_id='.$mysoc->country_id.'&mainmenu=accountancy&leftmenu=accountancy_admin', $langs->transnoentitiesnoconv("Accountancy").' / '.$langs->transnoentitiesnoconv("Setup").' / '.$langs->trans("AccountingCategory")).')';
//if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.= $langs->trans("DepositsAreNotIncluded"); //if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.= $langs->trans("DepositsAreNotIncluded");
//else $description.= $langs->trans("DepositsAreIncluded"); //else $description.= $langs->trans("DepositsAreIncluded");
$builddate = time(); $builddate = time();
@ -224,7 +225,7 @@ print '<th class="liste_titre"></th>';
print '<th class="liste_titre" align="right">'.$langs->trans("PreviousYear").'</th>'; print '<th class="liste_titre" align="right">'.$langs->trans("PreviousYear").'</th>';
print '<th class="liste_titre" align="right">'.$langs->trans("SelectedPeriod").'</th>'; print '<th class="liste_titre" align="right">'.$langs->trans("SelectedPeriod").'</th>';
foreach($months as $k => $v){ foreach($months as $k => $v){
print '<th class="liste_titre" align="right">'.$langs->trans($v).'</th>'; print '<th class="liste_titre width50" align="right" >'.$langs->trans($v).'</th>';
} }
print '</tr>'; print '</tr>';
@ -240,9 +241,6 @@ else if ($modecompta=="RECETTES-DEPENSES")
} }
else if ($modecompta=="BOOKKEEPING") else if ($modecompta=="BOOKKEEPING")
{ {
// TODO
//if (! empty($date_start) && ! empty($date_end))
// $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'";
//All categories //All categories
$cats = $AccCat->getCats(); $cats = $AccCat->getCats();
@ -250,14 +248,19 @@ else if ($modecompta=="BOOKKEEPING")
$j=1; $j=1;
$sommes = array(); $sommes = array();
$totPerAccount = array();
foreach ($cats as $cat) // Loop on each group foreach ($cats as $cat) // Loop on each group
{ {
if (!empty($cat['category_type'])) // category calculed 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 "<tr>"; print "<tr>";
// Year NP
//print '<td colspan="2"><font color="blue">' . $cat['label'] . '</font></td>'; //print '<td colspan="2"><font color="blue">' . $cat['label'] . '</font></td>';
print '<td colspan="2">' . $cat['label'] . '</td>'; print '<td colspan="2">' . $cat['label'] . '</td>';
@ -271,11 +274,15 @@ else if ($modecompta=="BOOKKEEPING")
$result = strtr($formula, $vars); $result = strtr($formula, $vars);
//var_dump($result);
$r = $AccCat->calculate($result); //$r = $AccCat->calculate($result);
$r = dol_eval($result, 1);
//var_dump($r);
print '<td align="right"><font color="blue">' . price($r) . '</font></td>'; print '<td align="right"><font color="blue">' . price($r) . '</font></td>';
$code = $cat['code']; // code categorie de calcule
// Year N
$code = $cat['code']; // code of categorie ('VTE', 'MAR', ...)
$sommes[$code]['NP'] += $r; $sommes[$code]['NP'] += $r;
// Current fiscal year (N) // Current fiscal year (N)
@ -287,18 +294,23 @@ else if ($modecompta=="BOOKKEEPING")
$result = strtr($formula, $vars); $result = strtr($formula, $vars);
$r = $AccCat->calculate($result); //$r = $AccCat->calculate($result);
$r = dol_eval($result, 1);
print '<td align="right"><font color="blue">' . price($r) . '</font></td>'; print '<td align="right"><font color="blue">' . price($r) . '</font></td>';
$sommes[$code]['N'] += $r; $sommes[$code]['N'] += $r;
// Detail by month // Detail by month
foreach($months as $k => $v){ foreach($months as $k => $v)
{
foreach($sommes as $code => $det){ foreach($sommes as $code => $det){
$vars[$code] = $det['M'][$k]; $vars[$code] = $det['M'][$k];
} }
$result = strtr($formula, $vars); $result = strtr($formula, $vars);
$r = $AccCat->calculate($result);
//$r = $AccCat->calculate($result);
$r = dol_eval($result, 1);
print '<td align="right"><font color="blue">' . price($r) . '</font></td>'; print '<td align="right"><font color="blue">' . price($r) . '</font></td>';
$sommes[$code]['M'][$k] += $r; $sommes[$code]['M'][$k] += $r;
} }
@ -306,7 +318,7 @@ else if ($modecompta=="BOOKKEEPING")
print "</tr>\n"; print "</tr>\n";
//var_dump($sommes);
} }
else // normal category else // normal category
{ {
@ -352,7 +364,8 @@ else if ($modecompta=="BOOKKEEPING")
$code = $cat['code']; $code = $cat['code'];
// Column N Previous and N // Set value into column NPrevious, N and each month M ($totCat)
// This make 14 calls for each detail of account (NP, N and month m)
foreach($cpts as $i => $cpt) foreach($cpts as $i => $cpt)
{ {
// N-1 // N-1
@ -376,6 +389,10 @@ else if ($modecompta=="BOOKKEEPING")
$totCat['NP'] += $resultNP; $totCat['NP'] += $resultNP;
$totCat['N'] += $resultN; $totCat['N'] += $resultN;
$sommes[$code]['NP'] += $resultNP;
$sommes[$code]['N'] += $resultN;
$totPerAccount[$cpt['account_number']]['NP'] = $resultNP;
$totPerAccount[$cpt['account_number']]['N'] = $resultN;
foreach($months as $k => $v) foreach($months as $k => $v)
{ {
@ -387,9 +404,12 @@ else if ($modecompta=="BOOKKEEPING")
$resultM=$AccCat->sdc; $resultM=$AccCat->sdc;
} }
$totCat['M'][$k] += $resultM; $totCat['M'][$k] += $resultM;
$sommes[$code]['M'][$k] += $resultM;
$totPerAccount[$cpt['account_number']]['M'][$k] = $resultM;
} }
} }
// Now output columns for row $code ('VTE', 'MAR', ...)
print '<td align="right">' . price($totCat['NP']) . '</td>'; print '<td align="right">' . price($totCat['NP']) . '</td>';
print '<td align="right">' . price($totCat['N']) . '</td>'; print '<td align="right">' . price($totCat['N']) . '</td>';
@ -398,55 +418,28 @@ else if ($modecompta=="BOOKKEEPING")
} }
print "</tr>\n"; print "</tr>\n";
// // Loop on detail of all accounts
foreach($cpts as $i => $cpt) // This make 14 calls for each detail of account (NP, N and month m)
if ($showaccountdetail == 'yes')
{ {
// N-1 foreach($cpts as $i => $cpt)
$return = $AccCat->getResult($cpt['account_number'], 0, $date_start_previous, $date_end_previous, $cpt['dc']); {
$resultNP=$totPerAccount[$cpt['account_number']]['NP'];
$resultN=$totPerAccount[$cpt['account_number']]['N'];
if ($return < 0) {
setEventMessages(null, $AccCat->errors, 'errors');
$resultNP=0;
} else {
$resultNP=$AccCat->sdc;
}
//N
$return = $AccCat->getResult($cpt['account_number'], 0, $date_start, $date_end, $cpt['dc']);
if ($return < 0) {
setEventMessages(null, $AccCat->errors, 'errors');
$resultN=0;
} else {
$resultN=$AccCat->sdc;
}
$sommes[$code]['NP'] += $resultNP;
$sommes[$code]['N'] += $resultN;
if ($simple_report == 'yes') {
print '<tr>'; print '<tr>';
print '<td> &nbsp; &nbsp; ' . length_accountg($cpt['account_number']) . '</td>'; print '<td> &nbsp; &nbsp; ' . length_accountg($cpt['account_number']) . '</td>';
print '<td>' . $cpt['name_cpt'] . '</td>'; print '<td>' . $cpt['name_cpt'] . '</td>';
print '<td align="right">' . price($resultNP) . '</td>'; print '<td align="right">' . price($resultNP) . '</td>';
print '<td align="right">' . price($resultN) . '</td>'; print '<td align="right">' . price($resultN) . '</td>';
}
foreach($months as $k => $v) // Make one call for each month
{ foreach($months as $k => $v)
$return = $AccCat->getResult($cpt['account_number'], $k+1, $date_start, $date_end, $cpt['dc']); {
if ($return < 0) { $resultM=$totPerAccount[$cpt['account_number']]['M'][$k];
setEventMessages(null, $AccCat->errors, 'errors');
$resultM=0;
} else {
$resultM=$AccCat->sdc;
}
$sommes[$code]['M'][$k] += $resultM;
if ($simple_report == 'yes') {
print '<td align="right">' . price($resultM) . '</td>'; print '<td align="right">' . price($resultM) . '</td>';
} }
}
if ($simple_report == 'yes') {
print "</tr>\n"; print "</tr>\n";
} }
} }