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 ***********************************************************************/
13 //--------------------------------------------------------------------------------------
15 function get_sql_for_view_transactions($filtertype, $from, $to, &$trans_ref)
17 $db_info = get_systype_db_info($filtertype);
22 $table_name = $db_info[0];
23 $type_name = $db_info[1];
24 $trans_no_name = $db_info[2];
25 $trans_ref = $db_info[3];
26 $trans_date = $db_info[4];
28 $sql = "SELECT t.$trans_no_name as trans_no";
31 $sql .= " ,t.$trans_ref as ref ";
33 $sql .= ", r.reference as ref";
34 $sql .= ",t.$trans_date as trans_date";
36 $sql .= ", t.$type_name as type";
37 $sql .= " FROM $table_name t LEFT JOIN ".TB_PREF."voided v ON"
38 ." t.$trans_no_name=v.id AND v.type=$filtertype";
40 $sql .= " LEFT JOIN ".TB_PREF."refs r ON t.$trans_no_name=r.id AND r.type=$filtertype";
42 $sql .= " WHERE ISNULL(v.`memo_`)";
43 if ($from != null && $to != null)
45 $sql .= " AND t.$trans_no_name >= ".db_escape($from). "
46 AND t.$trans_no_name <= ".db_escape($to);
47 if ($type_name != null)
48 $sql .= " AND t.`$type_name` = ".db_escape($filtertype);
50 elseif ($type_name != null)
51 $sql .= " AND t.`$type_name` = ".db_escape($filtertype);
53 // the ugly hack below is necessary to exclude old gl_trans records lasting after edition,
54 // otherwise old data transaction can be retrieved instead of current one.
55 if ($table_name==TB_PREF.'gl_trans')
56 $sql .= " AND t.`amount` <> 0";
58 $sql .= " GROUP BY ".($type_name ? "t.$type_name," : '')." t.$trans_no_name";
59 $sql .= " ORDER BY t.$trans_no_name DESC";
63 function transaction_exists($trans_type, $trans_no)
65 return db_num_rows(db_query(get_sql_for_view_transactions($trans_type, $trans_no, $trans_no, $dummy)));
69 // Returns counterparty (supplier/customer) name for selected transaction.
71 function get_counterparty_name($trans_type, $trans_no, $full=true)
77 $sql = "SELECT order.customer_id as person_id, debtor.name as name
78 FROM ".TB_PREF."sales_orders order, ".TB_PREF."debtors_master debtor
79 WHERE order_no=".db_escape($trans_no)." AND trans_type=".db_escape($trans_type)
80 ." AND order.debtor_no=debtor.debtor_no";
83 case ST_SALESINVOICE :
86 case ST_CUSTDELIVERY :
87 $sql = "SELECT trans.debtor_no as person_id, debtor.name as name
88 FROM ".TB_PREF."debtor_trans trans, ".TB_PREF."debtors_master debtor
89 WHERE trans_no=".db_escape($trans_no)." AND type=".db_escape($trans_type)
90 ." AND trans.debtor_no=debtor.debtor_no";
94 $sql = "SELECT order.supplier_id as person_id, supp.supp_name as name
95 FROM ".TB_PREF."purch_orders order, ".TB_PREF."suppliers supp
96 WHERE order_no=".db_escape($trans_no)
97 ." AND order.supplier_id=supp.supplier_id";
100 case ST_SUPPINVOICE :
103 $sql = "SELECT trans.supplier_id as person_id, supp.supp_name as name
104 FROM ".TB_PREF."supp_trans trans, ".TB_PREF."suppliers supp
105 WHERE trans_no=".db_escape($trans_no)." AND type=".db_escape($trans_type)
106 ." AND trans.supplier_id=supp.supplier_id";
109 case ST_SUPPRECEIVE :
110 $sql = "SELECT trans.supplier_id as person_id, supp.supp_name as name
111 FROM ".TB_PREF."grn_batch trans, ".TB_PREF."suppliers supp
112 WHERE id=".db_escape($trans_no)
113 ." AND trans.supplier_id=supp.supplier_id";
116 case ST_BANKPAYMENT :
117 case ST_BANKDEPOSIT :
118 $sql = "SELECT trans.debtor_no as person_id, debtor.name as name
119 FROM ".TB_PREF."debtor_trans trans, ".TB_PREF."debtors_master debtor
120 WHERE trans_no=".db_escape($trans_no)." AND type=".db_escape($trans_type)
121 ." AND trans.debtor_no=debtor.debtor_no
123 SELECT trans.supplier_id as person_id, supp.supp_name as name
124 FROM ".TB_PREF."supp_trans trans, ".TB_PREF."suppliers supp
125 WHERE trans_no=".db_escape($trans_no)." AND type=".db_escape($trans_type)
126 ." AND trans.supplier_id=supp.supplier_id";
129 case ST_JOURNAL: // FIXME - this one can have multiply counterparties of various types depending on person_type_id
132 /* // internal operations
134 case ST_INVADJUST : // GRN/DN returns ?
135 case ST_BANKTRANSFER :
136 case ST_LOCTRANSFER :
138 case ST_MANURECEIVE :
144 $result = db_query($sql, 'cannot retrieve counterparty name');
145 if (db_num_rows($result))
147 $row = db_fetch($result);
148 return sprintf("[%05s] %s", $row['person_id'], $row['name']);
155 //-----------------------------------------------------------------------------------------
156 // Returns next transaction number.
157 // Used only for transactions stored in tables without autoincremented key.
160 function get_next_trans_no ($trans_type){
162 $st = get_systype_db_info($trans_type);
164 if (!($st && $st[0] && $st[2])) {
165 // this is in fact internal error condition.
166 display_error('Internal error: invalid type passed to get_next_trans_no()');
169 $sql1 = "SELECT MAX(`$st[2]`) as last_no FROM $st[0]";
171 $sql1 .= " WHERE `$st[1]`=".db_escape($trans_type);
173 // check also in voided transactions (some transactions like location transfer are removed completely)
174 $sql2 = "SELECT MAX(`id`) as last_no FROM ".TB_PREF."voided WHERE `type`=".db_escape($trans_type);
176 $sql = "SELECT max(last_no) last_no FROM ($sql1 UNION $sql2) a";
177 $result = db_query($sql,"The next transaction number for $trans_type could not be retrieved");
178 $myrow = db_fetch_row($result);
180 return $myrow[0] + 1;
183 //-----------------------------------------------------------------------------
185 function get_systype_db_info($type)
189 case ST_JOURNAL : return array("".TB_PREF."gl_trans", "type", "type_no", null, "tran_date");
190 case ST_BANKPAYMENT : return array("".TB_PREF."bank_trans", "type", "trans_no", "ref", "trans_date");
191 case ST_BANKDEPOSIT : return array("".TB_PREF."bank_trans", "type", "trans_no", "ref", "trans_date");
192 case 3 : return null;
193 case ST_BANKTRANSFER : return array("".TB_PREF."bank_trans", "type", "trans_no", "ref", "trans_date");
194 case ST_SALESINVOICE : return array("".TB_PREF."debtor_trans", "type", "trans_no", "reference", "tran_date");
195 case ST_CUSTCREDIT : return array("".TB_PREF."debtor_trans", "type", "trans_no", "reference", "tran_date");
196 case ST_CUSTPAYMENT : return array("".TB_PREF."debtor_trans", "type", "trans_no", "reference", "tran_date");
197 case ST_CUSTDELIVERY : return array("".TB_PREF."debtor_trans", "type", "trans_no", "reference", "tran_date");
198 case ST_LOCTRANSFER : return array("".TB_PREF."stock_moves", "type", "trans_no", "reference", "tran_date");
199 case ST_INVADJUST : return array("".TB_PREF."stock_moves", "type", "trans_no", "reference", "tran_date");
200 case ST_PURCHORDER : return array("".TB_PREF."purch_orders", null, "order_no", "reference", "ord_date");
201 case ST_SUPPINVOICE : return array("".TB_PREF."supp_trans", "type", "trans_no", "reference", "tran_date");
202 case ST_SUPPCREDIT : return array("".TB_PREF."supp_trans", "type", "trans_no", "reference", "tran_date");
203 case ST_SUPPAYMENT : return array("".TB_PREF."supp_trans", "type", "trans_no", "reference", "tran_date");
204 case ST_SUPPRECEIVE : return array("".TB_PREF."grn_batch", null, "id", "reference", "delivery_date");
205 case ST_WORKORDER : return array("".TB_PREF."workorders", null, "id", "wo_ref", "released_date");
206 case ST_MANUISSUE : return array("".TB_PREF."wo_issues", null, "issue_no", "reference", "issue_date");
207 case ST_MANURECEIVE : return array("".TB_PREF."wo_manufacture", null, "id", "reference", "date_");
208 case ST_SALESORDER : return array("".TB_PREF."sales_orders", "trans_type", "order_no", "reference", "ord_date");
209 case 31 : return array("".TB_PREF."service_orders", null, "order_no", "cust_ref", "date");
210 case ST_SALESQUOTE : return array("".TB_PREF."sales_orders", "trans_type", "order_no", "reference", "ord_date");
211 case ST_DIMENSION : return array("".TB_PREF."dimensions", null, "id", "reference", "date_");
212 case ST_COSTUPDATE : return array("".TB_PREF."gl_trans", "type", "type_no", null, "tran_date");
215 display_db_error("invalid type ($type) sent to get_systype_db_info", "", true);
218 function get_systypes()
220 $sql = "SELECT * FROM ".TB_PREF."sys_types";
221 $result = db_query($sql, "could not query systypes table");