From: Janusz Dobrowolski Date: Sat, 29 Oct 2011 20:37:09 +0000 (+0200) Subject: Fixed bank transaction dition problem (bank transaction balance check should be perfo... X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=commitdiff_plain;h=06d5e25be1505f9987d91f450c865023438387f9;p=textcart.git Fixed bank transaction dition problem (bank transaction balance check should be performed on daily basis) --- diff --git a/gl/includes/db/gl_db_bank_trans.inc b/gl/includes/db/gl_db_bank_trans.inc index f11a569..59dbaa2 100644 --- a/gl/includes/db/gl_db_bank_trans.inc +++ b/gl/includes/db/gl_db_bank_trans.inc @@ -155,7 +155,7 @@ function void_bank_trans($type, $type_no, $nested=false) /** * Check account history to find transaction which would exceed authorized overdraft for given account. -* Returns null or transaction in conflict. +* Returns null or transaction in conflict. Running balance is checked on daily basis only, to enable ID change after edition. * $delta_amount - tested change in bank balance at $date. **/ function check_bank_account_history($delta_amount, $bank_account, $date, $user=null) @@ -171,7 +171,8 @@ function check_bank_account_history($delta_amount, $bank_account, $date, $user=n $date = date2sql($date); $balance+= $delta_amount; - $sql = "SELECT * FROM ".TB_PREF."bank_trans WHERE bank_act=".db_escape($bank_account)." AND trans_date > '$date' ORDER BY trans_date ASC, id ASC"; + $sql = "SELECT sum(amount) as amount FROM ".TB_PREF."bank_trans WHERE bank_act=".db_escape($bank_account) + ." AND trans_date >= '$date' GROUP BY trans_date ORDER BY trans_date ASC"; $history = db_query($sql, "cannot retrieve cash account history"); diff --git a/gl/includes/db/gl_db_banking.inc b/gl/includes/db/gl_db_banking.inc index 6f08087..4a88583 100644 --- a/gl/includes/db/gl_db_banking.inc +++ b/gl/includes/db/gl_db_banking.inc @@ -308,7 +308,7 @@ function write_bank_transaction($trans_type, $trans_no, $from_account, $items, $ hook_db_prewrite($args, $trans_type); $aid = 0; if ($trans_no) { - void_transaction($trans_type, $trans_no, Today(), _("Document reentered.")); + $old_trans = $trans_no; $Refs->restore_last($trans_type, $trans_no); $aid = has_attachment($trans_type, $trans_no); } @@ -422,6 +422,11 @@ function write_bank_transaction($trans_type, $trans_no, $from_account, $items, $ $Refs->save($trans_type, $trans_no, $ref); add_audit_trail($trans_type, $trans_no, $date_); + // old transaction can be voided only after new transaction is entered, + // otherwise the operation could fail for cash accounts due to temporary negative balance + if (@$old_trans) + void_transaction($trans_type, $old_trans, Today(), _("Document reentered.")); + $args->trans_no = $trans_no; hook_db_postwrite($args, $trans_type); if ($use_transaction)