+/**
+* Check account history to find transaction which would exceed authorized overdraft for given account.
+* 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=null, $user=null, $balance_offset = 0)
+{
+ if ($delta_amount >= 0 && isset($date))
+ return null; // amount increase is always safe
+
+ $balance = $date ? get_bank_account_limit($bank_account, $date, $user) : 0;
+
+ if (!isset($balance) && isset($date))
+ return null; // unlimited account
+
+ $balance += $balance_offset;
+ if (floatcmp($balance, -$delta_amount) < 0)
+ return array('amount' => $balance + $delta_amount, 'trans_date'=> date2sql($date));
+
+ $balance += $delta_amount;
+
+ $sql = "SELECT SUM(amount+charge) as amount, trans_date, trans_no, type
+ FROM ".TB_PREF."bank_trans
+ WHERE bank_act=".db_escape($bank_account);
+ if ($date)
+ {
+ $date = date2sql($date);
+ $sql .= " AND trans_date > '$date'";
+ }
+ $sql .= " GROUP BY trans_date ORDER BY trans_date ASC";