Fixed sql query (duplicated rows in result).
[fa-stable.git] / sales / inquiry / customer_inquiry.php
1 <?php
2
3 $page_security = 1;
4 $path_to_root="../..";
5 include($path_to_root . "/includes/db_pager.inc");
6 include_once($path_to_root . "/includes/session.inc");
7
8 include_once($path_to_root . "/sales/includes/sales_ui.inc");
9 include_once($path_to_root . "/sales/includes/sales_db.inc");
10 include_once($path_to_root . "/reporting/includes/reporting.inc");
11
12 $js = "";
13 if ($use_popup_windows)
14         $js .= get_js_open_window(900, 500);
15 if ($use_date_picker)
16         $js .= get_js_date_picker();
17 page(_("Customer Transactions"), false, false, "", $js);
18
19
20 if (isset($_GET['customer_id']))
21 {
22         $_POST['customer_id'] = $_GET['customer_id'];
23 }
24
25 //------------------------------------------------------------------------------------------------
26
27 start_form();
28
29 if (!isset($_POST['customer_id']))
30         $_POST['customer_id'] = get_global_customer();
31
32 start_table("class='tablestyle_noborder'");
33 start_row();
34
35 customer_list_cells(_("Select a customer: "), 'customer_id', null, true);
36
37 date_cells(_("From:"), 'TransAfterDate', '', null, -30);
38 date_cells(_("To:"), 'TransToDate', '', null, 1);
39
40 if (!isset($_POST['filterType']))
41         $_POST['filterType'] = 0;
42
43 cust_allocations_list_cells(null, 'filterType', $_POST['filterType'], true);
44
45 submit_cells('RefreshInquiry', _("Search"),'',_('Refresh Inquiry'), true);
46 end_row();
47 end_table();
48
49 end_form();
50
51 set_global_customer($_POST['customer_id']);
52
53 //------------------------------------------------------------------------------------------------
54
55 function display_customer_summary($customer_record)
56 {
57         global $table_style;
58
59         $past1 = get_company_pref('past_due_days');
60         $past2 = 2 * $past1;
61     if ($customer_record["dissallow_invoices"] != 0)
62     {
63         echo "<center><font color=red size=4><b>" . _("CUSTOMER ACCOUNT IS ON HOLD") . "</font></b></center>";
64     }
65
66         $nowdue = "1-" . $past1 . " " . _('Days');
67         $pastdue1 = $past1 + 1 . "-" . $past2 . " " . _('Days');
68         $pastdue2 = _('Over') . " " . $past2 . " " . _('Days');
69
70     start_table("width=80% $table_style");
71     $th = array(_("Currency"), _("Terms"), _("Current"), $nowdue,
72         $pastdue1, $pastdue2, _("Total Balance"));
73     table_header($th);
74
75         start_row();
76     label_cell($customer_record["curr_code"]);
77     label_cell($customer_record["terms"]);
78         amount_cell($customer_record["Balance"] - $customer_record["Due"]);
79         amount_cell($customer_record["Due"] - $customer_record["Overdue1"]);
80         amount_cell($customer_record["Overdue1"] - $customer_record["Overdue2"]);
81         amount_cell($customer_record["Overdue2"]);
82         amount_cell($customer_record["Balance"]);
83         end_row();
84
85         end_table();;
86 }
87 //------------------------------------------------------------------------------------------------
88
89 div_start('totals_tbl');
90 if ($_POST['customer_id'] != "" && $_POST['customer_id'] != reserved_words::get_all())
91 {
92         $customer_record = get_customer_details($_POST['customer_id'], $_POST['TransToDate']);
93     display_customer_summary($customer_record);
94     echo "<br>";
95 }
96 div_end();
97
98
99 //------------------------------------------------------------------------------------------------
100 function systype_name($dummy, $type)
101 {
102         return systypes::name($type);
103 }
104
105 function order_view($row)
106 {
107         return $row['order_']>0 ?
108                 get_customer_trans_view_str(systypes::sales_order(), $row['order_'])
109                 : "";
110 }
111
112 function trans_view($trans)
113 {
114         return get_trans_view_str($trans["type"], $trans["trans_no"]);
115 }
116
117 function due_date($row)
118 {
119         return ($row["type"]==20 || $row["type"]==21)
120                 ? $row["due_date"] : '';
121 }
122
123 function gl_view($row)
124 {
125         return get_gl_view_str($row["type"], $row["trans_no"]);
126 }
127
128 function fmt_debit($row)
129 {
130         $value =
131             $row['type']==11 || $row['type']==12 || $row['type']==2 ?
132                 -$row["TotalAmount"] : $row["TotalAmount"];
133         return $value>=0 ? price_format($value) : '';
134
135 }
136
137 function fmt_credit($row)
138 {
139         $value =
140             !($row['type']==11 || $row['type']==12 || $row['type']==2) ?
141                 -$row["TotalAmount"] : $row["TotalAmount"];
142         return $value>0 ? price_format($value) : '';
143 }
144
145 function credit_link($row)
146 {
147         return $row['type'] == 10 ?
148                 pager_link(_("Credit This"),
149                         "/sales/customer_credit_invoice.php?InvoiceNumber=".
150                         $row['trans_no'])
151                         : '';
152 }
153
154 function edit_link($row)
155 {
156         $str = '';
157
158         switch($row['type']) {
159         case 10:
160                 $str = "/sales/customer_invoice.php?ModifyInvoice=".$row['trans_no'];
161                 break;
162         case 11:
163                 if ($row['order_']==0) // free-hand credit note
164                     $str = "/sales/credit_note_entry.php?ModifyCredit=".$row['trans_no'];
165                 else    // credit invoice
166                     $str = "/sales/customer_credit_invoice.php?ModifyCredit=".$row['trans_no'];
167                 break;
168          case 13:
169                 $str = "/sales/customer_delivery.php?ModifyDelivery=".$row['trans_no'];
170                 break;
171         }
172         return pager_link(_('Edit'), $str);
173 }
174
175 function prt_link($row)
176 {
177         if ($row['type'] != 12) // customer payment printout not defined yet.
178                 return print_document_link($row['trans_no'], _("Print"), true, $row['type']);
179 }
180
181 function check_overdue($row)
182 {
183         return $row['OverDue'] == 1
184                 && (abs($row["TotalAmount"]) - $row["Allocated"] != 0);
185 }
186 //------------------------------------------------------------------------------------------------
187     $date_after = date2sql($_POST['TransAfterDate']);
188     $date_to = date2sql($_POST['TransToDate']);
189
190   $sql = "SELECT 
191                 trans.type, 
192                 trans.trans_no, 
193                 trans.order_, 
194                 trans.reference,
195                 trans.tran_date, 
196                 trans.due_date, 
197                 debtor.name, 
198                 branch.br_name,
199                 debtor.curr_code,
200                 (trans.ov_amount + trans.ov_gst + trans.ov_freight 
201                         + trans.ov_freight_tax + trans.ov_discount)     AS TotalAmount, 
202                 trans.alloc AS Allocated,
203                 ((trans.type = 10)
204                         AND trans.due_date < '" . date2sql(Today()) . "') AS OverDue
205                 FROM "
206                         .TB_PREF."debtor_trans as trans, "
207                         .TB_PREF."debtors_master as debtor, "
208                         .TB_PREF."cust_branch as branch
209                 WHERE debtor.debtor_no = trans.debtor_no
210                         AND trans.tran_date >= '$date_after'
211                         AND trans.tran_date <= '$date_to'
212                         AND trans.branch_code = branch.branch_code";
213
214         if ($_POST['customer_id'] != reserved_words::get_all())
215                 $sql .= " AND trans.debtor_no = '" . $_POST['customer_id'] . "'";
216
217         if ($_POST['filterType'] != reserved_words::get_all())
218         {
219                 if ($_POST['filterType'] == '1')
220                 {
221                         $sql .= " AND (trans.type = 10 OR trans.type = 1) ";
222                 }
223                 elseif ($_POST['filterType'] == '2')
224                 {
225                         $sql .= " AND (trans.type = 10) ";
226                 }
227                 elseif ($_POST['filterType'] == '3')
228                 {
229                         $sql .= " AND (trans.type = " . systypes::cust_payment() 
230                                         ." OR trans.type = 2) ";
231                 }
232                 elseif ($_POST['filterType'] == '4')
233                 {
234                         $sql .= " AND trans.type = 11 ";
235                 }
236                 elseif ($_POST['filterType'] == '5')
237                 {
238                         $sql .= " AND trans.type = 13 ";
239                 }
240
241         if ($_POST['filterType'] == '2')
242         {
243                 $today =  date2sql(Today());
244                 $sql .= " AND trans.due_date < '$today'
245                                 AND (trans.ov_amount + trans.ov_gst + trans.ov_freight_tax + 
246                                 trans.ov_freight + trans.ov_discount - trans.alloc > 0) ";
247         }
248         }
249
250 //------------------------------------------------------------------------------------------------
251
252 $cols = array(
253         _("Type") => array('fun'=>'systype_name', 'ord'=>''),
254         _("#") => array('fun'=>'trans_view', 'ord'=>''),
255         _("Order") => array('fun'=>'order_view'), 
256         _("Reference"), 
257         _("Date") => array('type'=>'date', 'ord'=>'desc'),
258         _("Due Date") => array('type=>date', 'fun'=>'due_date'),
259         _("Customer") => array('ord'=>''), 
260         _("Branch") => array('ord'=>''), 
261         _("Currency") => array('align'=>'center'),
262         _("Debit") => array('align'=>'right', 'fun'=>'fmt_debit'), 
263         _("Credit") => array('align'=>'right','insert'=>true, 'fun'=>'fmt_credit'), 
264                 array('insert'=>true, 'fun'=>'gl_view'),
265                 array('insert'=>true, 'fun'=>'credit_link'),
266                 array('insert'=>true, 'fun'=>'edit_link'),
267                 array('insert'=>true, 'fun'=>'prt_link')
268         );
269
270 if ($_POST['customer_id'] != reserved_words::get_all()) {
271         $cols[_("Customer")] = 'skip';
272         $cols[_("Currency")] = 'skip';
273 }
274
275
276 $table =& new_db_pager('trans_tbl', $sql, $cols);
277 $table->set_marker('check_overdue', _("Marked items are overdue."));
278
279
280 if(get_post('RefreshInquiry'))
281 {
282         $table->set_sql($sql);
283         $table->set_columns($cols);
284         $Ajax->activate('trans_tbl');
285         $Ajax->activate('totals_tbl');
286 }
287
288         start_form();
289         display_db_pager($table);
290         end_form();
291 end_page();
292
293
294 ?>