FIX calculation of balance in conciliation page on desc sorting.

This commit is contained in:
Laurent Destailleur 2021-11-11 13:49:21 +01:00
parent fd3fd9d945
commit 28aa17e4fd
2 changed files with 13 additions and 8 deletions

View File

@ -175,7 +175,6 @@ $object->fields = dol_sort_array($object->fields, 'position');
$arrayfields = dol_sort_array($arrayfields, 'position'); $arrayfields = dol_sort_array($arrayfields, 'position');
/* /*
* Actions * Actions
*/ */
@ -266,13 +265,15 @@ if ((GETPOST('confirm_savestatement', 'alpha') || GETPOST('confirm_reconcile', '
if (!$error) { if (!$error) {
$param = 'action=reconcile&contextpage=banktransactionlist&id='.$id.'&search_account='.$id; $param = 'action=reconcile&contextpage=banktransactionlist&id='.$id.'&search_account='.$id;
$param .= '&search_conciliated='.urlencode($search_conciliated);
if ($page) { if ($page) {
$param .= '&page='.urlencode($page); $param .= '&page='.urlencode($page);
} }
if ($offset) { if ($offset) {
$param .= '&offset='.urlencode($offset); $param .= '&offset='.urlencode($offset);
} }
if ($search_conciliated != '' && $search_conciliated != '-1') {
$param .= '&search_conciliated='.urlencode($search_conciliated);
}
if ($search_thirdparty_user) { if ($search_thirdparty_user) {
$param .= '&search_thirdparty='.urlencode($search_thirdparty_user); $param .= '&search_thirdparty='.urlencode($search_thirdparty_user);
} }
@ -415,7 +416,6 @@ $banklinestatic = new AccountLine($db);
$now = dol_now(); $now = dol_now();
// Must be before button action // Must be before button action
$param = ''; $param = '';
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) { if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
@ -748,7 +748,7 @@ if ($resql) {
// Confirmation delete // Confirmation delete
if ($action == 'delete') { if ($action == 'delete') {
$text = $langs->trans('ConfirmDeleteTransaction'); $text = $langs->trans('ConfirmDeleteTransaction');
print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id.'&rowid='.GETPOST("rowid"), $langs->trans('DeleteTransaction'), $text, 'confirm_delete', null, '', 1); print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id.'&rowid='.GETPOST("rowid", 'int'), $langs->trans('DeleteTransaction'), $text, 'confirm_delete', null, '', 1);
} }
// Lines of title fields // Lines of title fields
@ -1189,7 +1189,7 @@ if ($resql) {
$objforbalance = $db->fetch_object($resqlforbalance); $objforbalance = $db->fetch_object($resqlforbalance);
if ($objforbalance) { if ($objforbalance) {
// If sort is desc,desc,desc then total of previous date + amount is the balancebefore of the previous line before the line to show // If sort is desc,desc,desc then total of previous date + amount is the balancebefore of the previous line before the line to show
if ($sortfield == 'b.datev,b.dateo,b.rowid' && $sortorder == 'desc,desc,desc') { if ($sortfield == 'b.datev,b.dateo,b.rowid' && ($sortorder == 'desc' || $sortorder == 'desc,desc' || $sortorder == 'desc,desc,desc')) {
$balancebefore = $objforbalance->previoustotal + ($sign * $objp->amount); $balancebefore = $objforbalance->previoustotal + ($sign * $objp->amount);
} else { } else {
// If sort is asc,asc,asc then total of previous date is balance of line before the next line to show // If sort is asc,asc,asc then total of previous date is balance of line before the next line to show
@ -1274,8 +1274,7 @@ if ($resql) {
} }
} }
if ($sortfield == 'b.datev,b.dateo,b.rowid' && ($sortorder == 'desc' || $sortorder == 'desc,desc' || $sortorder == 'desc,desc,desc')) {
if ($sortfield == 'b.datev,b.dateo,b.rowid' && $sortorder == 'desc,desc,desc') {
$balance = price2num($balancebefore, 'MT'); // balance = balancebefore of previous line (sort is desc) $balance = price2num($balancebefore, 'MT'); // balance = balancebefore of previous line (sort is desc)
$balancebefore = price2num($balancebefore - ($sign * $objp->amount), 'MT'); $balancebefore = price2num($balancebefore - ($sign * $objp->amount), 'MT');
} else { } else {

View File

@ -5329,13 +5329,16 @@ function price2num($amount, $rounding = '', $option = 0)
if ($thousand != ',' && $thousand != '.') { if ($thousand != ',' && $thousand != '.') {
$amount = str_replace(',', '.', $amount); // To accept 2 notations for french users $amount = str_replace(',', '.', $amount); // To accept 2 notations for french users
} }
$amount = str_replace(' ', '', $amount); // To avoid spaces $amount = str_replace(' ', '', $amount); // To avoid spaces
$amount = str_replace($thousand, '', $amount); // Replace of thousand before replace of dec to avoid pb if thousand is . $amount = str_replace($thousand, '', $amount); // Replace of thousand before replace of dec to avoid pb if thousand is .
$amount = str_replace($dec, '.', $amount); $amount = str_replace($dec, '.', $amount);
$amount = preg_replace('/[^0-9\-\.]/', '', $amount); // Clean non numeric chars (so it clean some UTF8 spaces for example.
} }
//print ' XX'.$amount.' '.$rounding; //print ' XX'.$amount.' '.$rounding;
// Now, make a rounding if required // Now, $amount is a real PHP float number. We make a rounding if required.
if ($rounding) { if ($rounding) {
$nbofdectoround = ''; $nbofdectoround = '';
if ($rounding == 'MU') { if ($rounding == 'MU') {
@ -5375,9 +5378,12 @@ function price2num($amount, $rounding = '', $option = 0)
if ($thousand != ',' && $thousand != '.') { if ($thousand != ',' && $thousand != '.') {
$amount = str_replace(',', '.', $amount); // To accept 2 notations for french users $amount = str_replace(',', '.', $amount); // To accept 2 notations for french users
} }
$amount = str_replace(' ', '', $amount); // To avoid spaces $amount = str_replace(' ', '', $amount); // To avoid spaces
$amount = str_replace($thousand, '', $amount); // Replace of thousand before replace of dec to avoid pb if thousand is . $amount = str_replace($thousand, '', $amount); // Replace of thousand before replace of dec to avoid pb if thousand is .
$amount = str_replace($dec, '.', $amount); $amount = str_replace($dec, '.', $amount);
$amount = preg_replace('/[^0-9\-\.]/', '', $amount); // Clean non numeric chars (so it clean some UTF8 spaces for example.
} }
return $amount; return $amount;