+/**
+* Check account history to find transaction which would exceed authorized overdraft for given account.
+* Returns null or transaction in conflict.
+* $delta_amount - tested change in bank balance at $date.
+**/
+function check_bank_account_history($delta_amount, $bank_account, $date, $user=null)
+{
+ if ($delta_amount >= 0)
+ return null; // amount increese is always safe
+
+ $balance = get_bank_account_limit($bank_account, $date, $user);
+
+ if (!isset($balance))
+ return null; // unlimited account
+
+ $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";
+
+ $history = db_query($sql, "cannot retrieve cash account history");
+
+ while ($trans = db_fetch($history)) {
+ $balance += $trans['amount'];
+ if ($balance < 0)
+ return $trans;
+ }
+
+ return null;
+}
+
+/**
+* Check bank transfer, deposit or customer deposit before voiding.
+**/
+function check_void_bank_trans($type, $type_no)
+{
+ $moves = get_bank_trans($type, $type_no);
+ while ($trans = db_fetch($moves)) {
+ if ($trans['amount'] > 0) { // skip transfer input part
+ return check_bank_account_history(-$trans['amount'], $trans['bank_act'], sql2date($trans['trans_date'])) == null;
+ }
+ }
+ return true;
+}
+
+?>