+function get_max_reconciled($date, $bank_account)
+{
+ $date = date2sql($date);
+ // temporary fix to enable fix of invalid entries made in 2.2RC
+ if ($date == 0) $date = '0000-00-00';
+
+ $sql = "SELECT MAX(reconciled) as last_date,
+ SUM(IF(reconciled<='$date', amount, 0)) as end_balance,
+ SUM(IF(reconciled<'$date', amount, 0)) as beg_balance,
+ SUM(amount) as total
+ FROM ".TB_PREF."bank_trans trans
+ WHERE bank_act=".db_escape($bank_account);
+ // ." AND trans.reconciled IS NOT NULL";
+
+ return db_query($sql,"Cannot retrieve reconciliation data");
+
+}
+
+//---------------------------------------------------------------------------------------------
+
+function get_ending_reconciled($bank_account, $bank_date)
+{
+ $sql = "SELECT ending_reconcile_balance
+ FROM ".TB_PREF."bank_accounts WHERE id=".db_escape($bank_account)
+ . " AND last_reconciled_date=".db_escape($bank_date);
+ $result = db_query($sql,"Cannot retrieve last reconciliation");
+ return db_fetch($result);
+}
+
+//---------------------------------------------------------------------------------------------
+
+function get_sql_for_bank_account_reconcile($bank_account, $date)
+{
+ $sql = "SELECT type, trans_no, ref, trans_date,
+ amount, person_id, person_type_id, reconciled, id
+ FROM ".TB_PREF."bank_trans
+ WHERE ".TB_PREF."bank_trans.bank_act = ".db_escape($bank_account) . "
+ AND (reconciled IS NULL OR reconciled='". date2sql($date) ."')
+ ORDER BY trans_date,".TB_PREF."bank_trans.id";
+// or ORDER BY reconciled desc, trans_date,".TB_PREF."bank_trans.id";
+ return $sql;
+}
+
+//---------------------------------------------------------------------------------------------
+
+function update_reconciled_values($reconcile_id, $reconcile_value, $reconcile_date, $end_balance, $bank_account)
+{
+ $sql = "UPDATE ".TB_PREF."bank_trans SET reconciled=$reconcile_value"
+ ." WHERE id=".db_escape($reconcile_id);
+
+ db_query($sql, "Can't change reconciliation status");
+ // save last reconcilation status (date, end balance)
+ $sql2 = "UPDATE ".TB_PREF."bank_accounts SET last_reconciled_date='"
+ .date2sql($reconcile_date)."',
+ ending_reconcile_balance=$end_balance
+ WHERE id=".db_escape($bank_account);
+
+ db_query($sql2,"Error updating reconciliation information");
+}
+//---------------------------------------------------------------------------------------------
+
+function get_default_bank_account($curr=null)
+{
+ /* default bank account is selected as first found account from:
+ . default account in $curr if any
+ . first defined account in $curr if any
+ . default account in home currency
+ . first defined account in home currency
+ */
+ $home_curr = get_company_pref('curr_default');
+ if (!isset($curr))
+ $curr = $home_curr;
+
+ $sql = "SELECT b.*, b.bank_curr_code='$home_curr' as fall_back FROM "
+ .TB_PREF."bank_accounts b"
+ ." WHERE b.bank_curr_code=".db_escape($curr)
+ ." OR b.bank_curr_code='$home_curr'
+ ORDER BY fall_back, dflt_curr_act desc";
+
+ $result = db_query($sql, "could not retreive default bank account");
+
+ return db_fetch($result);
+}
+
+function get_default_customer_bank_account($cust_id)
+{
+ $sql = "SELECT curr_code FROM ".TB_PREF."debtors_master WHERE debtor_no=".db_escape($cust_id);
+ $result = db_query($sql, "could not retreive default customer currency code");
+ $row = db_fetch_row($result);
+ $ba = get_default_bank_account($row[0]);
+ return $ba['id'];
+}
+
+function get_default_supplier_bank_account($supplier_id)
+{
+ $sql = "SELECT curr_code FROM ".TB_PREF."suppliers WHERE supplier_id=".db_escape($supplier_id);
+ $result = db_query($sql, "could not retreive default supplier currency code");
+ $row = db_fetch_row($result);
+ $ba = get_default_bank_account($row[0]);
+ return $ba['id'];
+}
+//---------------------------------------------------------------------------------------------
+//
+// This function returns current allowed bank payment limit, or null if limit is not set.
+// As of FA 2.3 check is done only on cash account, for which limit is bank amount as of the date selected.
+//
+function get_bank_account_limit($account, $date, $user=null)
+{
+// $user = current_user();
+
+ $bankacc = get_bank_account($account);
+ if ($bankacc['account_type'] != BT_CASH)
+ return null;
+ return max(0, get_balance_before_for_bank_account($account, add_days($date,1))); // in case of manco made before the check was implemented
+}
+
+function identify_bank_account($account_number)
+{
+ $number = db_escape($account_number);
+ $sql = "(SELECT id AS id, ".BO_COMPANY." AS type FROM ".TB_PREF."bank_accounts WHERE REPLACE(bank_account_number,' ', '')=$number)";
+ $sql .= " UNION (SELECT supplier_id AS id, ".BO_SUPPLIER." AS type FROM ".TB_PREF."suppliers WHERE REPLACE(bank_account,' ', '')=$number)";
+ $sql .= " UNION (SELECT branch_code AS id, ".BO_CUSTBRANCH." AS type FROM ".TB_PREF."cust_branch WHERE REPLACE(bank_account,' ', '')=$number)";
+
+ $result = db_query($sql, 'bank account identification failed');
+
+ if (db_num_rows($result))
+ return db_fetch($result);
+ else
+ return null;
+}
+
+//----------------------------------------------------------------------------------
+
+function get_bank_account_currency($id)
+{
+ $sql= "SELECT bank_curr_code FROM ".TB_PREF."bank_accounts WHERE id=".db_escape($id);
+ $result = db_query($sql, "retreive bank account currency");
+
+ $myrow = db_fetch_row($result);
+ return $myrow[0];
+}
+