Update from usntable branch.
[fa-stable.git] / sales / includes / db / custalloc_db.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 //----------------------------------------------------------------------------------------
13
14 function add_cust_allocation($amount, $trans_type_from, $trans_no_from,
15         $trans_type_to, $trans_no_to)
16 {
17         $sql = "INSERT INTO ".TB_PREF."cust_allocations (
18                 amt, date_alloc,
19                 trans_type_from, trans_no_from, trans_no_to, trans_type_to)
20                 VALUES ($amount, Now(), ".db_escape($trans_type_from).", ".db_escape($trans_no_from).", ".db_escape($trans_no_to)
21                 .", ".db_escape($trans_type_to).")";
22
23         db_query($sql, "A customer allocation could not be added to the database");
24 }
25
26 //----------------------------------------------------------------------------------------
27
28
29 function delete_cust_allocation($trans_id)
30 {
31         $sql = "DELETE FROM ".TB_PREF."cust_allocations WHERE id = ".db_escape($trans_id);
32         return db_query($sql, "The existing allocation $trans_id could not be deleted");
33 }
34
35 //----------------------------------------------------------------------------------------
36
37 function get_DebtorTrans_allocation_balance($trans_type, $trans_no)
38 {
39
40         $sql = "SELECT (ov_amount+ov_gst+ov_freight+ov_freight_tax-ov_discount-alloc) AS BalToAllocate
41                 FROM ".TB_PREF."debtor_trans WHERE trans_no=".db_escape($trans_no)." AND type=".db_escape($trans_type);
42         $result = db_query($sql,"calculate the allocation");
43         $myrow = db_fetch_row($result);
44
45         return $myrow[0];
46 }
47
48 //----------------------------------------------------------------------------------------
49
50 function update_debtor_trans_allocation($trans_type, $trans_no, $alloc)
51 {
52         $sql = "UPDATE ".TB_PREF."debtor_trans SET alloc = alloc + $alloc
53                 WHERE type=".db_escape($trans_type)." AND trans_no = ".db_escape($trans_no);
54         db_query($sql, "The debtor transaction record could not be modified for the allocation against it");
55 }
56
57 //-------------------------------------------------------------------------------------------------------------
58
59 function void_cust_allocations($type, $type_no, $date="")
60 {
61         return clear_cust_alloctions($type, $type_no, $date);
62 }
63
64 //-------------------------------------------------------------------------------------------------------------
65
66 function clear_cust_alloctions($type, $type_no, $date="")
67 {
68         // clear any allocations for this transaction
69         $sql = "SELECT * FROM ".TB_PREF."cust_allocations
70                 WHERE (trans_type_from=".db_escape($type)." AND trans_no_from=".db_escape($type_no).")
71                 OR (trans_type_to=".db_escape($type)." AND trans_no_to=".db_escape($type_no).")";
72         $result = db_query($sql, "could not void debtor transactions for type=$type and trans_no=$type_no");
73
74         while ($row = db_fetch($result))
75         {
76                 $sql = "UPDATE ".TB_PREF."debtor_trans SET alloc=alloc - " . $row['amt'] . "
77                         WHERE (type= " . $row['trans_type_from'] . " AND trans_no=" . $row['trans_no_from'] . ")
78                         OR (type=" . $row['trans_type_to'] . " AND trans_no=" . $row['trans_no_to'] . ")";
79                 db_query($sql, "could not clear allocation");
80                 // 2008-09-20 Joe Hunt
81                 if ($date != "")
82                         exchange_variation($type, $type_no, $row['trans_type_to'], $row['trans_no_to'], $date,
83                                 $row['amt'], PT_CUSTOMER, true);
84                 //////////////////////
85         }
86
87
88         // remove any allocations for this transaction
89         $sql = "DELETE FROM ".TB_PREF."cust_allocations
90                 WHERE (trans_type_from=".db_escape($type)." AND trans_no_from=".db_escape($type_no).")
91                 OR (trans_type_to=".db_escape($type)." AND trans_no_to=".db_escape($type_no).")";
92
93         db_query($sql, "could not void debtor transactions for type=$type and trans_no=$type_no");
94 }
95 //----------------------------------------------------------------------------------------
96
97 function get_alloc_trans_sql($extra_fields=null, $extra_conditions=null, $extra_tables=null)
98 {
99         $sql = "SELECT
100                 trans.type,
101                 trans.trans_no,
102                 trans.reference,
103                 trans.tran_date,
104                 debtor.name AS DebtorName, 
105                 debtor.curr_code, 
106                 ov_amount+ov_gst+ov_freight+ov_freight_tax+ov_discount AS Total,
107                 trans.alloc,
108                 trans.due_date,
109                 debtor.address,
110                 trans.version ";
111
112         if ($extra_fields)
113                 $sql .= ", $extra_fields ";
114
115         $sql .= " FROM ".TB_PREF."debtor_trans as trans, "
116                                 .TB_PREF."debtors_master as debtor";
117         if ($extra_tables)
118                 $sql .= ",$extra_tables ";
119
120         $sql .= " WHERE trans.debtor_no=debtor.debtor_no";
121
122         if ($extra_conditions)
123                 $sql .= " AND $extra_conditions ";
124         
125         return $sql;
126 }
127
128
129 //-------------------------------------------------------------------------------------------------------------
130
131 function get_allocatable_from_cust_sql($customer_id, $settled)
132 {
133         $settled_sql = "";
134         if (!$settled)
135         {
136                 $settled_sql = " AND (round(ov_amount+ov_gst+ov_freight+ov_freight_tax-ov_discount-alloc,6) > 0)";
137         }
138         $cust_sql = "";
139         if ($customer_id != null)
140                 $cust_sql = " AND trans.debtor_no = ".db_escape($customer_id);
141
142         $sql = get_alloc_trans_sql("round(ov_amount+ov_gst+ov_freight+ov_freight_tax+ov_discount-alloc,6) <= 0 AS settled",
143                 "(type=".ST_CUSTPAYMENT." OR type=".ST_CUSTCREDIT." OR type=".ST_BANKDEPOSIT.") AND (trans.ov_amount > 0) " . $settled_sql . $cust_sql);
144
145         return $sql;
146 }
147
148 //-------------------------------------------------------------------------------------------------------------
149
150 function get_allocatable_to_cust_transactions($customer_id, $trans_no=null, $type=null)
151 {
152         if ($trans_no != null and $type != null)
153         {
154                 $sql = get_alloc_trans_sql("amt", "trans.trans_no = alloc.trans_no_to
155                         AND trans.type = alloc.trans_type_to
156                         AND alloc.trans_no_from=$trans_no
157                         AND alloc.trans_type_from=$type
158                         AND trans.debtor_no=".db_escape($customer_id),
159                         "".TB_PREF."cust_allocations as alloc");
160         }
161         else
162         {
163                 $sql = get_alloc_trans_sql(null, "round(ov_amount+ov_gst+ov_freight+ov_freight_tax+ov_discount-alloc,6) > 0
164                         AND trans.type <> " . ST_CUSTPAYMENT . "
165                         AND trans.type <> " . ST_BANKDEPOSIT . "
166                         AND trans.type <> " . ST_CUSTCREDIT . "
167                         AND trans.type <> " . ST_CUSTDELIVERY . "
168                         AND trans.debtor_no=".db_escape($customer_id));
169         }
170
171         return db_query($sql." ORDER BY trans_no", "Cannot retreive alloc to transactions");
172 }
173
174
175 ?>