2 /**********************************************************************
3 Copyright (C) FrontAccounting, LLC.
4 Released under the terms of the GNU General Public License, GPL,
5 as published by the Free Software Foundation, either version 3
6 of the License, or (at your option) any later version.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
11 ***********************************************************************/
12 //---------------------------------------------------------------------------------------------
13 function clear_dflt_curr_account($curr_code) {
14 $sql = "UPDATE ".TB_PREF."bank_accounts SET dflt_curr_act=0 WHERE bank_curr_code="
15 .db_escape($curr_code);
16 db_query($sql, "could not update default currency account");
19 function add_bank_account($account_code, $account_type, $bank_account_name,
20 $bank_name, $bank_account_number, $bank_address, $bank_curr_code,
23 if($dflt_curr_act) // only one default account for any currency
24 clear_dflt_curr_account($bank_curr_code);
26 $sql = "INSERT INTO ".TB_PREF."bank_accounts (account_code, account_type,
27 bank_account_name, bank_name, bank_account_number, bank_address,
28 bank_curr_code, dflt_curr_act)
29 VALUES (".db_escape($account_code).", ".db_escape($account_type).", "
30 .db_escape($bank_account_name).", ".db_escape($bank_name).", "
31 .db_escape($bank_account_number).",".db_escape($bank_address).
32 ", ".db_escape($bank_curr_code).", ".db_escape($dflt_curr_act).")";
34 db_query($sql, "could not add a bank account for $account_code");
37 //---------------------------------------------------------------------------------------------
39 function update_bank_account($id, $account_code, $account_type, $bank_account_name,
40 $bank_name, $bank_account_number, $bank_address, $bank_curr_code, $dflt_curr_act)
42 if($dflt_curr_act) // only one default account for any currency
43 clear_dflt_curr_account($bank_curr_code);
45 $sql = "UPDATE ".TB_PREF."bank_accounts SET account_type = ".db_escape($account_type).",
46 account_code=".db_escape($account_code).",
47 bank_account_name=".db_escape($bank_account_name).", bank_name=".db_escape($bank_name).",
48 bank_account_number=".db_escape($bank_account_number).", bank_curr_code=".db_escape($bank_curr_code).",
49 bank_address=".db_escape($bank_address).",
50 dflt_curr_act=".db_escape($dflt_curr_act)
51 ." WHERE id = ".db_escape($id);
53 db_query($sql, "could not update bank account for $account_code");
56 //---------------------------------------------------------------------------------------------
58 function delete_bank_account($id)
60 $sql = "DELETE FROM ".TB_PREF."bank_accounts WHERE id=".db_escape($id);
62 db_query($sql,"could not delete bank account for $id");
66 //---------------------------------------------------------------------------------------------
68 function get_bank_account($id)
70 $sql = "SELECT * FROM ".TB_PREF."bank_accounts WHERE id=".db_escape($id);
72 $result = db_query($sql, "could not retreive bank account for $id");
74 return db_fetch($result);
77 //---------------------------------------------------------------------------------------------
79 function get_bank_accounts($show_inactive)
81 $sql = "SELECT account.*, gl_account.account_name
82 FROM ".TB_PREF."bank_accounts account, ".TB_PREF."chart_master gl_account
83 WHERE account.account_code = gl_account.account_code";
84 if (!$show_inactive) $sql .= " AND !account.inactive";
85 $sql .= " ORDER BY account_code, bank_curr_code";
87 return db_query($sql,"could not get bank accounts");
90 //---------------------------------------------------------------------------------------------
92 function get_bank_gl_account($id)
94 $sql = "SELECT account_code FROM ".TB_PREF."bank_accounts WHERE id=".db_escape($id);
96 $result = db_query($sql, "could not retreive bank account for $id");
98 $bank_account = db_fetch($result);
100 return $bank_account['account_code'];
103 //---------------------------------------------------------------------------------------------
105 function add_quick_entry($description, $type, $base_amount, $base_desc, $bal_type)
107 $sql = "INSERT INTO ".TB_PREF."quick_entries (description, type, base_amount, base_desc, bal_type)
108 VALUES (".db_escape($description).", ".db_escape($type).", "
109 .db_escape($base_amount).", ".db_escape($base_desc).", ".db_escape($bal_type).")";
111 db_query($sql, "could not insert quick entry for $description");
114 //---------------------------------------------------------------------------------------------
116 function update_quick_entry($selected_id, $description, $type, $base_amount, $base_desc, $bal_type)
118 $sql = "UPDATE ".TB_PREF."quick_entries SET description = ".db_escape($description).",
119 type=".db_escape($type).", base_amount=".db_escape($base_amount)
120 .", base_desc=".db_escape($base_desc).", bal_type=".db_escape($bal_type)."
121 WHERE id = ".db_escape($selected_id);
123 db_query($sql, "could not update quick entry for $selected_id");
126 //---------------------------------------------------------------------------------------------
128 function delete_quick_entry($selected_id)
130 $sql = "DELETE FROM ".TB_PREF."quick_entries WHERE id=".db_escape($selected_id);
132 db_query($sql,"could not delete quick entry $selected_id");
135 //---------------------------------------------------------------------------------------------
137 function add_quick_entry_line($qid, $action, $dest_id, $amount, $dim, $dim2)
139 $sql = "INSERT INTO ".TB_PREF."quick_entry_lines
140 (qid, action, dest_id, amount, dimension_id, dimension2_id)
142 (".db_escape($qid).", ".db_escape($action).",".db_escape($dest_id).",
143 ".db_escape($amount).", ".db_escape($dim).", ".db_escape($dim2).")";
145 db_query($sql, "could not insert quick entry line for $qid");
148 //---------------------------------------------------------------------------------------------
150 function update_quick_entry_line($selected_id, $qid, $action, $dest_id, $amount, $dim, $dim2)
152 $sql = "UPDATE ".TB_PREF."quick_entry_lines SET qid = ".db_escape($qid)
153 .", action=".db_escape($action).",
154 dest_id=".db_escape($dest_id).", amount=".db_escape($amount)
155 .", dimension_id=".db_escape($dim).", dimension2_id=".db_escape($dim2)."
156 WHERE id = ".db_escape($selected_id);
158 db_query($sql, "could not update quick entry line for $selected_id");
161 //---------------------------------------------------------------------------------------------
163 function delete_quick_entry_line($selected_id)
165 $sql = "DELETE FROM ".TB_PREF."quick_entry_lines WHERE id=".db_escape($selected_id);
167 db_query($sql,"could not delete quick entry line $selected_id");
169 //---------------------------------------------------------------------------------------------
172 function has_quick_entries($type=null)
174 $sql = "SELECT id FROM ".TB_PREF."quick_entries";
176 $sql .= " WHERE type=".db_escape($type);
178 $result = db_query($sql, "could not retreive quick entries");
179 return db_num_rows($result) > 0;
182 function get_quick_entries($type = null)
184 $sql = "SELECT * FROM ".TB_PREF."quick_entries";
186 $sql .= " WHERE type=".db_escape($type);
187 $sql .= " ORDER BY description";
189 return db_query($sql, "could not retreive quick entries");
192 function get_quick_entry($selected_id)
194 $sql = "SELECT * FROM ".TB_PREF."quick_entries WHERE id=".db_escape($selected_id);
196 $result = db_query($sql, "could not retreive quick entry $selected_id");
198 return db_fetch($result);
201 function get_quick_entry_lines($qid)
203 $sql = "SELECT ".TB_PREF."quick_entry_lines.*, ".TB_PREF."chart_master.account_name,
204 ".TB_PREF."tax_types.name as tax_name
205 FROM ".TB_PREF."quick_entry_lines
206 LEFT JOIN ".TB_PREF."chart_master ON
207 ".TB_PREF."quick_entry_lines.dest_id = ".TB_PREF."chart_master.account_code
208 LEFT JOIN ".TB_PREF."tax_types ON
209 ".TB_PREF."quick_entry_lines.dest_id = ".TB_PREF."tax_types.id
211 qid=".db_escape($qid)." ORDER by id";
213 return db_query($sql, "could not retreive quick entries");
216 function has_quick_entry_lines($qid)
218 $sql = "SELECT id FROM ".TB_PREF."quick_entry_lines WHERE qid=".db_escape($qid);
220 $result = db_query($sql, "could not retreive quick entries");
221 return db_num_rows($result) > 0;
224 //---------------------------------------------------------------------------------------------
226 function get_quick_entry_line($selected_id)
228 $sql = "SELECT * FROM ".TB_PREF."quick_entry_lines WHERE id=".db_escape($selected_id);
230 $result = db_query($sql, "could not retreive quick entry for $selected_id");
232 return db_fetch($result);
235 //---------------------------------------------------------------------------------------------
237 function get_max_reconciled($date, $bank_account)
239 $date = date2sql($date);
240 // temporary fix to enable fix of invalid entries made in 2.2RC
241 if ($date == 0) $date = '0000-00-00';
243 $sql = "SELECT MAX(reconciled) as last_date,
244 SUM(IF(reconciled<='$date', amount, 0)) as end_balance,
245 SUM(IF(reconciled<'$date', amount, 0)) as beg_balance,
247 FROM ".TB_PREF."bank_trans trans
248 WHERE bank_act=".db_escape($bank_account);
249 // ." AND trans.reconciled IS NOT NULL";
251 return db_query($sql,"Cannot retrieve reconciliation data");
255 //---------------------------------------------------------------------------------------------
257 function get_ending_reconciled($bank_account, $bank_date)
259 $sql = "SELECT ending_reconcile_balance
260 FROM ".TB_PREF."bank_accounts WHERE id=".db_escape($bank_account)
261 . " AND last_reconciled_date=".db_escape($bank_date);
262 $result = db_query($sql,"Cannot retrieve last reconciliation");
263 return db_fetch($result);
266 //---------------------------------------------------------------------------------------------
268 function get_sql_for_bank_account_reconcile($bank_account, $date)
270 $sql = "SELECT type, trans_no, ref, trans_date,
271 amount, person_id, person_type_id, reconciled, id
272 FROM ".TB_PREF."bank_trans
273 WHERE ".TB_PREF."bank_trans.bank_act = ".db_escape($bank_account) . "
274 AND (reconciled IS NULL OR reconciled='". date2sql($date) ."')
275 ORDER BY trans_date,".TB_PREF."bank_trans.id";
276 // or ORDER BY reconciled desc, trans_date,".TB_PREF."bank_trans.id";
280 //---------------------------------------------------------------------------------------------
282 function update_reconciled_values($reconcile_id, $reconcile_value, $reconcile_date, $end_balance, $bank_account)
284 $sql = "UPDATE ".TB_PREF."bank_trans SET reconciled=$reconcile_value"
285 ." WHERE id=".db_escape($reconcile_id);
287 db_query($sql, "Can't change reconciliation status");
288 // save last reconcilation status (date, end balance)
289 $sql2 = "UPDATE ".TB_PREF."bank_accounts SET last_reconciled_date='"
290 .date2sql($reconcile_date)."',
291 ending_reconcile_balance=$end_balance
292 WHERE id=".db_escape($bank_account);
294 db_query($sql2,"Error updating reconciliation information");
296 //---------------------------------------------------------------------------------------------
298 function get_default_bank_account($curr)
300 /* default bank account is selected as first found account from:
301 . default account in $curr if any
302 . first defined account in $curr if any
303 . default account in home currency
304 . first defined account in home currency
306 $home_curr = get_company_pref('curr_default');
308 $sql = "SELECT b.*, b.bank_curr_code='$home_curr' as fall_back FROM "
309 .TB_PREF."bank_accounts b"
310 ." WHERE b.bank_curr_code=".db_escape($curr)
311 ." OR b.bank_curr_code='$home_curr'
312 ORDER BY fall_back, dflt_curr_act desc";
314 $result = db_query($sql, "could not retreive default bank account");
316 return db_fetch($result);
318 //---------------------------------------------------------------------------------------------
320 // This function returns current allowed bank payment limit, or null if limit is not set.
321 // As of FA 2.3 check is done only on cash account, for which limit is bank amount as of the date selected.
323 function get_bank_account_limit($account, $date, $user=null)
325 // $user = current_user();
327 $bankacc = get_bank_account($account);
328 if ($bankacc['account_type'] != BT_CASH)
330 return max(0, get_balance_before_for_bank_account($account, add_days($date,1))); // in case of manco made before the check was implemented