3 //--------------------------------------------------------------------------------
5 // Base function for adding a GL transaction
6 // $date_ is display date (non-sql)
7 // $amount is in $currency currency
8 // if $currency is not set, then defaults to no conversion
10 function add_gl_trans($type, $trans_id, $date_, $account, $dimension, $dimension2, $memo_,
11 $amount, $currency=null, $person_type_id=null, $person_id=null, $err_msg="", $rate=0)
13 global $use_audit_trail;
15 $date = date2sql($date_);
16 if ($currency != null)
19 $amount_in_home_currency = to_home_currency($amount, $currency, $date_);
21 $amount_in_home_currency = round2($amount * $rate, user_price_dec());
24 $amount_in_home_currency = round2($amount, user_price_dec());
25 if ($dimension == null || $dimension < 0)
27 if ($dimension2 == null || $dimension2 < 0)
29 if (isset($use_audit_trail) && $use_audit_trail)
31 if ($memo_ == "" || $memo_ == null)
32 $memo_ = $_SESSION["wa_current_user"]->username;
34 $memo_ = $_SESSION["wa_current_user"]->username . " - " . $memo_;
36 $sql = "INSERT INTO ".TB_PREF."gl_trans ( type, type_no, tran_date,
37 account, dimension_id, dimension2_id, memo_, amount";
39 if ($person_type_id != null)
40 $sql .= ", person_type_id, person_id";
44 $sql .= "VALUES ($type, $trans_id, '$date',
45 '$account', $dimension, $dimension2, ".db_escape($memo_).", $amount_in_home_currency";
47 if ($person_type_id != null)
48 $sql .= ", $person_type_id, ". db_escape($person_id);
53 $err_msg = "The GL transaction could not be inserted";
55 db_query($sql, $err_msg);
56 return $amount_in_home_currency;
59 //--------------------------------------------------------------------------------
61 // GL Trans for standard costing, always home currency regardless of person
62 // $date_ is display date (non-sql)
63 // $amount is in HOME currency
65 function add_gl_trans_std_cost($type, $trans_id, $date_, $account, $dimension, $dimension2,
66 $memo_, $amount, $person_type_id=null, $person_id=null, $err_msg="")
69 return add_gl_trans($type, $trans_id, $date_, $account, $dimension, $dimension2, $memo_,
70 $amount, null, $person_type_id, $person_id, $err_msg);
75 // Function for even out rounding problems
76 function add_gl_balance($type, $trans_id, $date_, $amount, $person_type_id=null, $person_id=null)
78 $amount = round2($amount, user_price_dec());
80 return add_gl_trans($type, $trans_id, $date_, get_company_pref('exchange_diff_act'), 0, 0, "",
81 $amount, null, $person_type_id, $person_id, "The balanced GL transaction could not be inserted");
86 //--------------------------------------------------------------------------------
88 function get_gl_transactions($from_date, $to_date, $trans_no=0,
89 $account=null, $dimension=0, $dimension2=0, $filter_type=null)
91 $from = date2sql($from_date);
92 $to = date2sql($to_date);
94 $sql = "SELECT ".TB_PREF."gl_trans.*, ".TB_PREF."chart_master.account_name FROM ".TB_PREF."gl_trans, ".TB_PREF."chart_master
95 WHERE ".TB_PREF."chart_master.account_code=".TB_PREF."gl_trans.account
96 AND tran_date >= '$from'
97 AND tran_date <= '$to'";
99 $sql .= " AND ".TB_PREF."gl_trans.type_no LIKE '%$trans_no'";
101 if ($account != null)
102 $sql .= " AND ".TB_PREF."gl_trans.account = '$account'";
105 $sql .= " AND ".TB_PREF."gl_trans.dimension_id = $dimension";
108 $sql .= " AND ".TB_PREF."gl_trans.dimension2_id = $dimension2";
110 if ($filter_type != null AND is_numeric($filter_type))
111 $sql .= " AND ".TB_PREF."gl_trans.type= $filter_type";
113 $sql .= " ORDER BY tran_date";
115 return db_query($sql, "The transactions for could not be retrieved");
119 //--------------------------------------------------------------------------------
121 function get_gl_trans($type, $trans_id)
123 $sql = "SELECT ".TB_PREF."gl_trans.*, ".TB_PREF."chart_master.account_name FROM ".TB_PREF."gl_trans, ".TB_PREF."chart_master
124 WHERE ".TB_PREF."chart_master.account_code=".TB_PREF."gl_trans.account
125 AND ".TB_PREF."gl_trans.type=$type AND ".TB_PREF."gl_trans.type_no=$trans_id";
127 return db_query($sql, "The gl transactions could not be retrieved");
130 //--------------------------------------------------------------------------------
132 function get_gl_balance_from_to($from_date, $to_date, $account, $dimension=0, $dimension2=0)
134 $from = date2sql($from_date);
135 $to = date2sql($to_date);
137 $sql = "SELECT SUM(amount) FROM ".TB_PREF."gl_trans
138 WHERE account='$account'";
139 if ($from_date != "")
140 $sql .= " AND tran_date > '$from'";
142 $sql .= " AND tran_date < '$to'";
144 $sql .= " AND dimension_id = $dimension";
146 $sql .= " AND dimension2_id = $dimension2";
148 $result = db_query($sql, "The starting balance for account $account could not be calculated");
150 $row = db_fetch_row($result);
154 //--------------------------------------------------------------------------------
156 function get_gl_trans_from_to($from_date, $to_date, $account, $dimension=0, $dimension2=0)
158 $from = date2sql($from_date);
159 $to = date2sql($to_date);
161 $sql = "SELECT SUM(amount) FROM ".TB_PREF."gl_trans
162 WHERE account='$account'";
163 if ($from_date != "")
164 $sql .= " AND tran_date >= '$from'";
166 $sql .= " AND tran_date <= '$to'";
168 $sql .= " AND dimension_id = $dimension";
170 $sql .= " AND dimension2_id = $dimension2";
172 $result = db_query($sql, "Transactions for account $account could not be calculated");
174 $row = db_fetch_row($result);
178 //--------------------------------------------------------------------------------
180 function get_budget_trans_from_to($from_date, $to_date, $account, $dimension=0, $dimension2=0)
183 $from = date2sql($from_date);
184 $to = date2sql($to_date);
186 $sql = "SELECT SUM(amount) FROM ".TB_PREF."budget_trans
187 WHERE account='$account' ";
188 if ($from_date != "")
189 $sql .= " AND tran_date >= '$from' ";
191 $sql .= " AND tran_date <= '$to' ";
193 $sql .= " AND dimension_id = $dimension";
195 $sql .= " AND dimension2_id = $dimension2";
196 $result = db_query($sql,"No budget accounts were returned");
198 $row = db_fetch_row($result);
202 //--------------------------------------------------------------------------------
203 // Stores GL journal/bank transaction on tax account for tax report
205 function add_gl_tax_details($gl_code, $trans_type, $trans_id, $amount)
207 $tax_type = is_tax_account($gl_code);
208 if(!$tax_type) return; // $gl_code is not tax account
210 $tax = get_tax_type($tax_type);
211 if ($gl_code == $tax['sales_gl_code'])
212 add_customer_trans_tax_detail_item($trans_type, $trans_id,
213 $tax['id'], $tax['rate'], 0, -$amount);
215 add_supp_invoice_tax_item($trans_type, $trans_id,
216 $tax['id'], $tax['rate'], 0, $amount);
220 //--------------------------------------------------------------------------------
221 function add_journal_entries($items, $date_, $ref, $reverse, $memo_=null)
225 $trans_type = systypes::journal_entry();
226 $trans_id = get_next_trans_no($trans_type);
228 foreach ($items as $journal_item)
230 // post to first found bank account using given gl acount code.
231 $is_bank_to = is_bank_account($journal_item->code_id);
233 add_gl_trans($trans_type, $trans_id, $date_, $journal_item->code_id,
234 $journal_item->dimension_id, $journal_item->dimension2_id,
235 $journal_item->reference, $journal_item->amount);
238 add_bank_trans($trans_type, $trans_id, $is_bank_to, $ref,
239 $date_, $journal_item->amount,
240 0, "", get_company_currency(),
241 "Cannot insert a destination bank transaction");
243 // store tax details if the gl account is a tax account
244 add_gl_tax_details($journal_item->code_id,
245 $trans_type, $trans_id, $journal_item->amount);
248 add_comments($trans_type, $trans_id, $date_, $memo_);
250 references::save($trans_type, $trans_id, $ref);
255 //$reversingDate = date(user_date_display(),
256 // Mktime(0,0,0,get_month($date_)+1,1,get_year($date_)));
257 $reversingDate = begin_month(add_months($date_, 1));
259 $trans_id_reverse = get_next_trans_no($trans_type);
261 foreach ($items as $journal_item)
263 $is_bank_to = is_bank_account($journal_item->code_id);
265 add_gl_trans($trans_type, $trans_id_reverse, $reversingDate,
266 $journal_item->code_id, $journal_item->dimension_id, $journal_item->dimension2_id,
267 $journal_item->reference, -$journal_item->amount);
270 add_bank_trans($trans_type, $trans_id_reverse, $is_bank_to, $ref,
271 $reversingDate, $journal_item->amount,
272 0, "", get_company_currency(),
273 "Cannot insert a destination bank transaction");
275 // store tax details if the gl account is a tax account
276 add_gl_tax_details($journal_item->code_id,
277 $trans_type, $trans_id, -$journal_item->amount);
280 add_comments($trans_type, $trans_id_reverse, $reversingDate, $memo_);
282 references::save($trans_type, $trans_id_reverse, $ref);
285 commit_transaction();
290 //--------------------------------------------------------------------------------------------------
292 function exists_gl_trans($type, $trans_id)
294 $sql = "SELECT type_no FROM ".TB_PREF."gl_trans WHERE type=$type AND type_no=$trans_id";
295 $result = db_query($sql, "Cannot retreive a gl transaction");
297 return (db_num_rows($result) > 0);
300 //--------------------------------------------------------------------------------------------------
302 function void_gl_trans($type, $trans_id, $nested=false)
307 $sql = "UPDATE ".TB_PREF."gl_trans SET amount=0 WHERE type=$type AND type_no=$trans_id";
309 db_query($sql, "could not void gl transactions for type=$type and trans_no=$trans_id");
312 commit_transaction();
315 //--------------------------------------------------------------------------------------------------