Minor bugfixes.
[fa-stable.git] / sales / includes / db / customers_db.inc
1 <?php
2
3 function get_customer_details($customer_id, $to=null)
4 {
5
6         if ($to == null)
7                 $todate = date("Y-m-d");
8         else
9                 $todate = date2sql($to);
10         $past1 = get_company_pref('past_due_days');
11         $past2 = 2 * $past1;
12         // removed - debtor_trans.alloc from all summations
13
14     $value = "IF(".TB_PREF."debtor_trans.type=11 OR ".TB_PREF."debtor_trans.type=12 OR ".TB_PREF."debtor_trans.type=2,
15         -1, 1) *".
16       "(".TB_PREF."debtor_trans.ov_amount + ".TB_PREF."debtor_trans.ov_gst + "
17                 .TB_PREF."debtor_trans.ov_freight + ".TB_PREF."debtor_trans.ov_freight_tax + "
18                 .TB_PREF."debtor_trans.ov_discount)";
19
20     $sql = "SELECT ".TB_PREF."debtors_master.name, ".TB_PREF."debtors_master.curr_code, ".TB_PREF."payment_terms.terms,
21                 ".TB_PREF."debtors_master.credit_limit, ".TB_PREF."credit_status.dissallow_invoices, ".TB_PREF."credit_status.reason_description,
22
23                 Sum(".$value.") AS Balance,
24
25                 Sum(IF (".TB_PREF."payment_terms.days_before_due > 0,
26                         CASE WHEN (TO_DAYS('$todate') - TO_DAYS(".TB_PREF."debtor_trans.tran_date)) >= ".TB_PREF."payment_terms.days_before_due
27                         THEN
28                             $value
29                         ELSE 0
30                         END,
31
32                         CASE WHEN TO_DAYS('$todate') - TO_DAYS(DATE_ADD(DATE_ADD(".TB_PREF."debtor_trans.tran_date,
33                                 INTERVAL 1 MONTH), INTERVAL (".TB_PREF."payment_terms.day_in_following_month -
34                                 DAYOFMONTH(".TB_PREF."debtor_trans.tran_date)) DAY)) >= 0
35                         THEN
36                             $value
37                         ELSE 0
38                         END
39
40                 )) AS Due,
41
42                 Sum(IF (".TB_PREF."payment_terms.days_before_due > 0,
43                         CASE WHEN TO_DAYS('$todate') - TO_DAYS(".TB_PREF."debtor_trans.tran_date) > ".TB_PREF."payment_terms.days_before_due
44                                 AND TO_DAYS('$todate') - TO_DAYS(".TB_PREF."debtor_trans.tran_date) >= (".TB_PREF."payment_terms.days_before_due + $past1)
45                         THEN
46                                 $value
47                         ELSE
48                                 0
49                         END,
50
51                         CASE WHEN (TO_DAYS('$todate') - TO_DAYS(DATE_ADD(DATE_ADD(".TB_PREF."debtor_trans.tran_date,
52                                 INTERVAL 1  MONTH), INTERVAL (".TB_PREF."payment_terms.day_in_following_month -
53                                 DAYOFMONTH(".TB_PREF."debtor_trans.tran_date)) DAY)) >= $past1)
54                         THEN
55                                 $value
56                         ELSE
57                                 0
58                         END
59
60                 )) AS Overdue1,
61
62                 Sum(IF (".TB_PREF."payment_terms.days_before_due > 0,
63                         CASE WHEN TO_DAYS('$todate') - TO_DAYS(".TB_PREF."debtor_trans.tran_date) > ".TB_PREF."payment_terms.days_before_due
64                                 AND TO_DAYS('$todate') - TO_DAYS(".TB_PREF."debtor_trans.tran_date) >= (".TB_PREF."payment_terms.days_before_due + $past2)
65                         THEN
66                             $value
67                         ELSE
68                                 0
69                         END,
70
71                         CASE WHEN (TO_DAYS('$todate') - TO_DAYS(DATE_ADD(DATE_ADD(".TB_PREF."debtor_trans.tran_date,
72                                 INTERVAL 1  MONTH), INTERVAL (".TB_PREF."payment_terms.day_in_following_month -
73                                 DAYOFMONTH(".TB_PREF."debtor_trans.tran_date)) DAY)) >= $past2)
74                         THEN
75                                 $value
76                         ELSE
77                                 0
78                         END
79
80                 )) AS Overdue2
81
82                 FROM ".TB_PREF."debtors_master,
83                          ".TB_PREF."payment_terms,
84                          ".TB_PREF."credit_status,
85                          ".TB_PREF."debtor_trans
86
87                 WHERE
88                          ".TB_PREF."debtors_master.payment_terms = ".TB_PREF."payment_terms.terms_indicator
89                          AND ".TB_PREF."debtors_master.credit_status = ".TB_PREF."credit_status.id
90                          AND ".TB_PREF."debtors_master.debtor_no = $customer_id
91                          AND ".TB_PREF."debtor_trans.tran_date <= '$todate'
92                          AND ".TB_PREF."debtor_trans.type <> 13
93                          AND ".TB_PREF."debtors_master.debtor_no = ".TB_PREF."debtor_trans.debtor_no
94
95                 GROUP BY
96                           ".TB_PREF."debtors_master.name,
97                           ".TB_PREF."payment_terms.terms,
98                           ".TB_PREF."payment_terms.days_before_due,
99                           ".TB_PREF."payment_terms.day_in_following_month,
100                           ".TB_PREF."debtors_master.credit_limit,
101                           ".TB_PREF."credit_status.dissallow_invoices,
102                           ".TB_PREF."credit_status.reason_description";
103
104     $result = db_query($sql,"The customer details could not be retrieved");
105
106     if (db_num_rows($result) == 0)
107     {
108
109         /*Because there is no balance - so just retrieve the header information about the customer - the choice is do one query to get the balance and transactions for those customers who have a balance and two queries for those who don't have a balance OR always do two queries - I opted for the former */
110
111         $nil_balance = true;
112
113         $sql = "SELECT ".TB_PREF."debtors_master.name, ".TB_PREF."debtors_master.curr_code, ".TB_PREF."debtors_master.debtor_no,  ".TB_PREF."payment_terms.terms,
114                 ".TB_PREF."debtors_master.credit_limit, ".TB_PREF."credit_status.dissallow_invoices, ".TB_PREF."credit_status.reason_description
115                 FROM ".TB_PREF."debtors_master,
116                      ".TB_PREF."payment_terms,
117                      ".TB_PREF."credit_status
118
119                 WHERE
120                      ".TB_PREF."debtors_master.payment_terms = ".TB_PREF."payment_terms.terms_indicator
121                      AND ".TB_PREF."debtors_master.credit_status = ".TB_PREF."credit_status.id
122                      AND ".TB_PREF."debtors_master.debtor_no = '$customer_id'";
123
124         $result = db_query($sql,"The customer details could not be retrieved");
125
126     }
127     else
128     {
129         $nil_balance = false;
130     }
131
132     $customer_record = db_fetch($result);
133
134     if ($nil_balance == true)
135     {
136         $customer_record["Balance"] = 0;
137         $customer_record["Due"] = 0;
138         $customer_record["Overdue1"] = 0;
139         $customer_record["Overdue2"] = 0;
140     }
141
142     return $customer_record;
143
144 }
145
146 function get_customer_name($customer_id)
147 {
148         $sql = "SELECT name FROM ".TB_PREF."debtors_master WHERE debtor_no=$customer_id";
149
150         $result = db_query($sql, "could not get customer");
151
152         $row = db_fetch_row($result);
153
154         return $row[0];
155 }
156
157 function get_area_name($id)
158 {
159         $sql = "SELECT description FROM ".TB_PREF."areas WHERE area_code=$id";
160
161         $result = db_query($sql, "could not get sales type");
162
163         $row = db_fetch_row($result);
164         return $row[0];
165 }
166
167 function get_salesman_name($id)
168 {
169         $sql = "SELECT salesman_name FROM ".TB_PREF."salesman WHERE salesman_code=$id";
170
171         $result = db_query($sql, "could not get sales type");
172
173         $row = db_fetch_row($result);
174         return $row[0];
175 }
176
177
178
179
180 ?>