Undefined 'no_zeroes' in rep115 line 235. Fixed.
[fa-stable.git] / gl / includes / db / gl_db_accounts.inc
1 <?php
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 function add_gl_account($account_code, $account_name, $account_type, $account_code2)
13 {
14         begin_transaction(__FUNCTION__, func_get_args());
15
16         $sql = "INSERT INTO ".TB_PREF."chart_master (account_code, account_code2, account_name, account_type)
17                 VALUES (".db_escape($account_code).", ".db_escape($account_code2).", "
18                         .db_escape($account_name).", ".db_escape($account_type).")";
19
20         $result = db_query($sql);
21         commit_transaction();
22         return $result;
23 }
24
25 function update_gl_account($account_code, $account_name, $account_type, $account_code2)
26 {
27         begin_transaction(__FUNCTION__, func_get_args());
28
29     $sql = "UPDATE ".TB_PREF."chart_master SET account_name=".db_escape($account_name)
30     .",account_type=".db_escape($account_type).", account_code2=".db_escape($account_code2)
31                 ." WHERE account_code = ".db_escape($account_code);
32
33         $result = db_query($sql);
34
35         commit_transaction();
36         return $result;
37 }
38
39 function delete_gl_account($code)
40 {
41         begin_transaction(__FUNCTION__, func_get_args());
42
43         $sql = "DELETE FROM ".TB_PREF."chart_master WHERE account_code=".db_escape($code);
44         db_query($sql, "could not delete gl account");
45
46         commit_transaction();
47 }
48
49 function get_gl_accounts($from=null, $to=null, $type=null)
50 {
51         $sql = "SELECT coa.*, act_type.name AS AccountTypeName
52                 FROM "
53                         .TB_PREF."chart_master coa,"
54                         .TB_PREF."chart_types act_type
55                 WHERE coa.account_type=act_type.id";
56         if ($from != null)
57                 $sql .= " AND coa.account_code >= ".db_escape($from);
58         if ($to != null)
59                 $sql .= " AND coa.account_code <= ".db_escape($to);
60         if ($type != null)
61                 $sql .= " AND account_type=".db_escape($type);
62         $sql .= " ORDER BY account_code";
63
64         return db_query($sql, "could not get gl accounts");
65 }
66
67 function get_gl_account($code)
68 {
69         $sql = "SELECT * FROM ".TB_PREF."chart_master WHERE account_code=".db_escape($code);
70
71         $result = db_query($sql, "could not get gl account");
72         return db_fetch($result);
73 }
74
75 function is_account_balancesheet($code)
76 {
77         $sql = "SELECT act_class.ctype
78                 FROM "
79                         .TB_PREF."chart_class act_class, "
80                         .TB_PREF."chart_types act_type, "
81                         .TB_PREF."chart_master coa
82                 WHERE coa.account_type=act_type.id
83                         AND     act_type.class_id=act_class.cid
84                         AND coa.account_code=".db_escape($code);
85
86         $result = db_query($sql,"could not retreive the account class for $code");
87         $row = db_fetch_row($result);
88         return $row[0] > 0 && $row[0] < CL_INCOME;
89 }
90
91 function get_gl_account_name($code)
92 {
93         $sql = "SELECT account_name from ".TB_PREF."chart_master WHERE account_code=".db_escape($code);
94
95         $result = db_query($sql,"could not retreive the account name for $code");
96
97         if (db_num_rows($result) == 1)
98         {
99                 $row = db_fetch_row($result);
100                 return $row[0];
101         }
102
103         display_db_error("could not retreive the account name for $code", $sql, true);
104 }
105
106 function gl_account_in_company_defaults($acc)
107 {
108         $sql= "SELECT COUNT(*) 
109         FROM ".TB_PREF."sys_prefs
110         WHERE (name='debtors_act' 
111                 OR name='pyt_discount_act'
112                 OR name='creditors_act' 
113                 OR name='bank_charge_act' 
114                 OR name='exchange_diff_act'
115                 OR name='profit_loss_year_act'
116                 OR name='retained_earnings_act'
117                 OR name='freight_act'
118                 OR name='deferred_income_act'
119                 OR name='default_sales_act' 
120                 OR name='default_sales_discount_act'
121                 OR name='default_prompt_payment_act'
122                 OR name='default_inventory_act'
123                 OR name='default_cogs_act'
124                 OR name='default_adj_act'
125                 OR name='default_inv_sales_act'
126                 OR name='default_wip_act') AND value=".db_escape($acc);
127         $result = db_query($sql,"Couldn't test for default company GL codes");
128
129         $myrow = db_fetch_row($result);
130         return ($myrow[0] > 0); 
131 }
132
133 function gl_account_in_stock_category($acc)
134 {
135         $acc = db_escape($acc);
136
137         $sql= "SELECT COUNT(*) 
138                 FROM ".TB_PREF."stock_category
139                 WHERE dflt_inventory_act=$acc 
140                         OR dflt_cogs_act=$acc
141                         OR dflt_adjustment_act=$acc 
142                         OR dflt_sales_act=$acc";
143         $result = db_query($sql,"Couldn't test for existing stock category GL codes");
144
145         $myrow = db_fetch_row($result);
146         return ($myrow[0] > 0); 
147 }
148
149 function gl_account_in_stock_master($acc)
150 {
151         $acc = db_escape($acc);
152
153         $sql= "SELECT COUNT(*)
154                 FROM ".TB_PREF."stock_master
155                 WHERE inventory_account=$acc 
156                         OR cogs_account=$acc
157                         OR adjustment_account=$acc 
158                         OR sales_account=$acc";
159         $result = db_query($sql,"Couldn't test for existing stock GL codes");
160
161         $myrow = db_fetch_row($result);
162         return ($myrow[0] > 0); 
163 }
164
165 function gl_account_in_tax_types($acc)
166 {
167         $acc = db_escape($acc);
168
169         $sql= "SELECT COUNT(*)
170                 FROM ".TB_PREF."tax_types
171                 WHERE sales_gl_code=$acc 
172                         OR purchasing_gl_code=$acc";
173         $result = db_query($sql,"Couldn't test for existing tax GL codes");
174
175         $myrow = db_fetch_row($result);
176         return ($myrow[0] > 0); 
177 }
178
179 function gl_account_in_cust_branch($acc)
180 {
181         $acc = db_escape($acc);
182
183         $sql= "SELECT COUNT(*)
184                 FROM ".TB_PREF."cust_branch
185                 WHERE sales_account=$acc 
186                         OR sales_discount_account=$acc
187                         OR receivables_account=$acc
188                         OR payment_discount_account=$acc";
189         $result = db_query($sql,"Couldn't test for existing cust branch GL codes");
190
191         $myrow = db_fetch_row($result);
192         return ($myrow[0] > 0); 
193 }
194
195 function gl_account_in_suppliers($acc)
196 {
197         $acc = db_escape($acc);
198
199         $sql= "SELECT COUNT(*)
200                 FROM ".TB_PREF."suppliers
201                 WHERE purchase_account=$acc
202                         OR payment_discount_account=$acc
203                         OR payable_account=$acc";
204         $result = db_query($sql,"Couldn't test for existing suppliers GL codes");
205
206         $myrow = db_fetch_row($result);
207         return ($myrow[0] > 0); 
208 }
209
210 function gl_account_in_quick_entry_lines($acc)
211 {
212         $acc = db_escape($acc);
213
214         $sql=
215         "SELECT COUNT(*)
216                 FROM ".TB_PREF."quick_entry_lines
217                 WHERE dest_id=$acc AND UPPER(LEFT(action, 1)) <> 'T'";
218         $result = db_query($sql,"Couldn't test for existing Quick Entry Line GL codes");
219
220         $myrow = db_fetch_row($result);
221         return ($myrow[0] > 0); 
222 }
223 //
224 //      Returns n>0 when account is AR, n<0 when account is AP
225 //  (priority for AR accounts)
226 //
227 function is_subledger_account($account)
228 {
229         $sql = "SELECT 1 
230                 FROM ".TB_PREF."cust_branch
231                 WHERE receivables_account=".db_escape($account)
232         ." UNION
233                 SELECT -1 
234                 FROM ".TB_PREF."suppliers 
235                 WHERE payable_account=".db_escape($account);
236
237         $result = db_query($sql,"Couldn't test AR/AP account");
238         $myrow = db_fetch_row($result);
239         return $myrow[0];
240 }
241
242 function get_subaccount_data($code_id, $person_id)
243 {
244         $sql = "SELECT debtor_ref as name, branch_code as id 
245                 FROM ".TB_PREF."cust_branch branch 
246                         LEFT JOIN ".TB_PREF."debtors_master d ON branch.debtor_no = d.debtor_no
247                 WHERE branch.receivables_account=".db_escape($code_id)
248                         ." AND d.debtor_no=".db_escape($person_id)
249                 ." UNION SELECT supp_ref as name, '' as id 
250                         FROM ".TB_PREF."suppliers supp
251                         WHERE supplier_id=".db_escape($person_id)." 
252                                 AND payable_account=".db_escape($code_id);
253         $result = db_query($sql, 'cannot retrieve counterparty name');
254
255         return  db_fetch($result);
256 }
257
258 function get_subaccount_name($code_id, $person_id)
259 {
260         $sql = "SELECT debtor_ref as ref
261                 FROM ".TB_PREF."cust_branch branch
262                         LEFT JOIN ".TB_PREF."debtors_master d ON branch.debtor_no = d.debtor_no
263                 WHERE branch.receivables_account=".db_escape($code_id)
264                         ." AND d.debtor_no=".db_escape($person_id)
265                 ." UNION SELECT supp_ref as ref
266                         FROM ".TB_PREF."suppliers supp
267                         WHERE payable_account=".db_escape($code_id)." 
268                                 AND supplier_id=".db_escape($person_id);
269         $result = db_query($sql, 'cannot retrieve counterparty name');
270         $row = db_fetch($result);
271
272         return  $row ? $row['ref'] : '';
273 }
274
275 function gl_account_in_bank_accounts($acc)
276 {
277         $sql= "SELECT COUNT(*) FROM ".TB_PREF."bank_accounts WHERE 
278                 account_code=".db_escape($acc);
279         $result = db_query($sql,"Couldn't test bank account GL codes");
280
281         $myrow = db_fetch_row($result);
282         return ($myrow[0] > 0); 
283 }
284
285 //----------------------------------------------------------------------------------
286 //      Check if given account is used by any bank_account. 
287 //      Returns id of first bank_account using account_code, null otherwise.
288 //
289 //      Keep in mind that direct posting to bank account is depreciated
290 //      because we have no way to select right bank account if 
291 //      there is more than one using given gl account.
292 //
293 function is_bank_account($account_code)
294 {
295         $sql= "SELECT id FROM ".TB_PREF."bank_accounts WHERE account_code=".db_escape($account_code);
296         $result = db_query($sql, "checking account is bank account");
297         if (db_num_rows($result) > 0) {
298                 $acct = db_fetch($result);
299                 return $acct['id'];
300         } else
301                 return false;
302 }
303
304 function get_chart_accounts_search($like, $skip=false)
305 {
306         global $SysPrefs;
307
308         if (isset($SysPrefs->max_rows_in_search))
309                 $limit = $SysPrefs->max_rows_in_search;
310         else
311                 $limit = 10;
312
313         if ($skip)
314                 $sql = "SELECT chart.account_code, chart.account_name, type.name, chart.inactive, type.id
315                         FROM (".TB_PREF."chart_master chart,".TB_PREF."chart_types type) "
316                         ."LEFT JOIN ".TB_PREF."bank_accounts acc "
317                         ."ON chart.account_code=acc.account_code
318                                 WHERE acc.account_code  IS NULL
319                         AND chart.account_type=type.id ";
320         else            
321                 $sql = "SELECT chart.account_code, chart.account_name, type.name, chart.inactive, type.id
322                         FROM ".TB_PREF."chart_master chart,".TB_PREF."chart_types type WHERE chart.account_type=type.id ";
323         $sql .= "AND (
324                 chart.account_name LIKE " . db_escape("%" . $like. "%") . " OR
325                 chart.account_code LIKE " . db_escape("%" . $like. "%") . "
326                 ) 
327                 ORDER BY chart.account_code LIMIT 0,".(int)($limit); // We only display 10 items.
328         return db_query($sql, "Failed in retreiving GL account list.");
329 }