09b1fbe4f28af171c013cd574c5bbc028b5bdf9c
[fa-stable.git] / sales / includes / db / branches_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 function add_branch($customer_id, $br_name, $br_ref, $br_address, $salesman, $area, 
13         $tax_group_id, $sales_account, $sales_discount_account, $receivables_account, 
14         $payment_discount_account, $default_location, $br_post_address, $disable_trans, $group_no,
15         $default_ship_via, $notes, $bank_account)
16 {
17         $sql = "INSERT INTO ".TB_PREF."cust_branch (debtor_no, br_name, branch_ref, br_address,
18                 salesman, area, tax_group_id, sales_account, receivables_account, payment_discount_account, 
19                 sales_discount_account, default_location,
20                 br_post_address, disable_trans, group_no, default_ship_via, notes, bank_account)
21                 VALUES (".db_escape($customer_id). ",".db_escape($br_name) . ", "
22                         .db_escape($br_ref) . ", "
23                         .db_escape($br_address) . ", ".db_escape($salesman) . ", "
24                         .db_escape($area) . ","
25                         .db_escape($tax_group_id) . ", "
26                         .db_escape($sales_account) . ", "
27                         .db_escape($receivables_account) . ", "
28                         .db_escape($payment_discount_account) . ", "
29                         .db_escape($sales_discount_account) . ", "
30                         .db_escape($default_location) . ", "
31                         .db_escape($br_post_address) . ","
32                         .db_escape($disable_trans) . ", "
33                         .db_escape($group_no) . ", "
34                         .db_escape($default_ship_via). ", "
35                         .db_escape($notes). ", "
36                         .db_escape($bank_account, true).")";
37         db_query($sql,"The branch record could not be added");
38 }
39
40 function update_branch($customer_id, $branch_code, $br_name, $br_ref, $br_address,
41         $salesman, $area, $tax_group_id, $sales_account, $sales_discount_account, $receivables_account, 
42         $payment_discount_account, $default_location, $br_post_address, $disable_trans, $group_no,
43         $default_ship_via, $notes, $bank_account)
44 {
45         $sql = "UPDATE ".TB_PREF."cust_branch SET br_name = " . db_escape($br_name) . ",
46                 branch_ref = " . db_escape($br_ref) . ",
47                 br_address = ".db_escape($br_address). ",
48                 salesman= ".db_escape($salesman) . ",
49                 area=".db_escape($area) . ",
50                 tax_group_id=".db_escape($tax_group_id). ",
51                 sales_account=".db_escape($sales_account) . ",
52                 sales_discount_account=".db_escape($sales_discount_account) . ",
53                 receivables_account=".db_escape($receivables_account) . ",
54                 payment_discount_account=".db_escape($payment_discount_account) . ",
55                 default_location=".db_escape($default_location) . ",
56                 br_post_address =".db_escape($br_post_address) . ",
57                 disable_trans=".db_escape($disable_trans) . ",
58                 group_no=".db_escape($group_no) . ", 
59                 default_ship_via=".db_escape($default_ship_via) . ",
60                 notes=".db_escape($notes) . ",
61                 bank_account=".db_escape($bank_account, true)."
62                 WHERE branch_code =".db_escape($branch_code) . "
63                 AND debtor_no=".db_escape($customer_id);
64         db_query($sql,"The branch record could not be updated");
65 }
66
67 function delete_branch($customer_id, $branch_code)
68 {
69         delete_entity_contacts('cust_branch', $branch_code);
70
71         $sql="DELETE FROM ".TB_PREF."cust_branch WHERE branch_code=".db_escape($branch_code)." AND debtor_no=".db_escape($customer_id);
72         db_query($sql,"could not delete branch");
73 }
74
75 function branch_in_foreign_table($customer_id, $branch_code, $table)
76 {
77         $sql= "SELECT COUNT(*) FROM ".TB_PREF."$table WHERE branch_code=".db_escape($branch_code)
78                 ." AND debtor_no = ".db_escape($customer_id);
79         $result = db_query($sql,"could not query $table");
80         $myrow = db_fetch_row($result);
81         return ($myrow[0] > 0);
82 }
83
84 function get_branch($branch_id)
85 {
86         $sql = "SELECT ".TB_PREF."cust_branch.*,".TB_PREF."salesman.salesman_name 
87                 FROM ".TB_PREF."cust_branch, ".TB_PREF."salesman 
88                 WHERE ".TB_PREF."cust_branch.salesman=".TB_PREF."salesman.salesman_code 
89                 AND branch_code=".db_escape($branch_id);
90         
91         $result = db_query($sql, "Cannot retreive a customer branch");
92         
93         return db_fetch($result);
94 }
95
96 function get_cust_branch($customer_id, $branch_code)
97 {
98         $sql = "SELECT * FROM ".TB_PREF."cust_branch
99                 WHERE branch_code=".db_escape($branch_code)."
100                 AND debtor_no=".db_escape($customer_id);
101         $result = db_query($sql,"check failed");
102         return db_fetch($result);
103 }
104
105 function get_branch_accounts($branch_id)
106 {
107         $sql = "SELECT receivables_account,sales_account, sales_discount_account, payment_discount_account 
108                 FROM ".TB_PREF."cust_branch WHERE branch_code=".db_escape($branch_id);
109         
110         $result = db_query($sql, "Cannot retreive a customer branch");
111         
112         return db_fetch($result);
113 }
114
115 function get_branch_name($branch_id)
116 {
117         $sql = "SELECT br_name FROM ".TB_PREF."cust_branch 
118                 WHERE branch_code = ".db_escape($branch_id);
119
120         $result = db_query($sql,"could not retreive name for branch" . $branch_id);
121
122         $myrow = db_fetch_row($result);
123         return $myrow[0];
124 }
125
126 function get_cust_branches_from_group($group_no)
127 {
128         $sql = "SELECT branch_code, debtor_no FROM ".TB_PREF."cust_branch 
129                 WHERE group_no = ".db_escape($group_no);
130
131         return db_query($sql,"could not retreive branches for group " . $group_no);
132 }
133
134 function get_default_info_for_branch($customer_id)
135 {
136         $sql = "SELECT name, address, debtor_ref
137                 FROM ".TB_PREF."debtors_master WHERE debtor_no = ".db_escape($customer_id);
138         $result = db_query($sql,"check failed");
139         return db_fetch($result);
140 }
141
142 function get_sql_for_customer_branches()
143 {
144         $sql = "SELECT "
145                 ."b.branch_code, "
146                 ."b.branch_ref, "
147                 ."b.br_name, "
148                 ."p.name as contact_name, "
149                 ."s.salesman_name, "
150                 ."a.description, "
151                 ."p.phone, "
152                 ."p.fax, "
153                 ."p.email, "
154                 ."t.name AS tax_group_name, "
155                 ."b.inactive
156                 FROM ".TB_PREF."cust_branch b "
157                 . "LEFT JOIN ".TB_PREF."crm_contacts c
158                         ON c.entity_id=b.branch_code AND c.type='cust_branch' AND c.action='general'
159                         LEFT JOIN ".TB_PREF."crm_persons p on c.person_id=p.id,"
160                         .TB_PREF."areas a, "
161                         .TB_PREF."salesman s, "
162                         .TB_PREF."tax_groups t
163                 WHERE b.tax_group_id=t.id
164                 AND b.area=a.area_code
165                 AND b.salesman=s.salesman_code
166                 AND b.debtor_no = ".db_escape($_POST['customer_id']);
167
168         if (!get_post('show_inactive')) $sql .= " AND !b.inactive";
169         $sql .= " GROUP BY b.branch_code ORDER BY branch_ref";
170
171         return $sql;
172 }
173 /*
174         Get contacts of given type for customer branch.
175         $branch_code - branch id
176         $action - type of contact
177         $customer_id - if passed: get also customer contacts for given action
178         $default - return only single record selected with defaults order defined in $defs array,
179          otherways get all $action contacts
180 */
181 function get_branch_contacts($branch_code, $action=null, $customer_id=null, $default = true)
182 {
183         $defs = array('cust_branch.'.$action, 
184                                 'customer.'.$action,
185                                 'cust_branch.general',
186                                 'customer.general');
187
188         $sql = "SELECT p.*, r.action, r.type, CONCAT(r.type,'.',r.action) as ext_type 
189                 FROM ".TB_PREF."crm_persons p,"
190                 .TB_PREF."crm_contacts r WHERE r.person_id=p.id AND ((r.type='cust_branch' 
191                         AND r.entity_id=".db_escape($branch_code).')';
192         if($customer_id) {
193                 $sql .= " OR (r.type='customer' AND r.entity_id=".db_escape($customer_id).")";
194         }
195         $sql .= ')';
196         
197         if ($action)
198                 $sql .= ' AND (r.action='.db_escape($action).($default ? " OR r.action='general'" : '').')';
199         
200         $res = db_query($sql, "can't retrieve branch contacts");
201
202         $results = array();
203         while($contact = db_fetch($res))
204                 $results[] = $contact;
205
206         if ($results && $default) {
207                 // select first available contact in $defs order
208                 foreach($defs as $type) {
209                         if ($n = array_search_value($type, $results, 'ext_type'))
210                                 return $n;
211                 }
212                 return null;
213         }
214         return $results;
215 }
216
217 function _get_branch_contacts($branch_code, $action=null, $customer_id=null, $default = false)
218 {
219         $sql = "SELECT p.*, r.action, r.type, CONCAT(r.type,'.',r.action) as ext_type 
220                 FROM ".TB_PREF."crm_persons p,"
221                 .TB_PREF."crm_contacts r WHERE r.person_id=p.id AND r.type='cust_branch' 
222                         AND r.entity_id=".db_escape($branch_code);
223
224         if ($action)
225                 $sql .= ' AND (r.action='.db_escape($action).($default ? " OR r.action='general'":'').')';
226
227         if($customer_id) {
228                 $sql = "($sql) UNION (SELECT p.*, r.action, r.type, CONCAT(r.type,'.',r.action) as ext_type
229                 FROM ".TB_PREF."crm_persons p,"
230                 .TB_PREF."crm_contacts r WHERE r.person_id=p.id AND r.type='customer' 
231                         AND r.entity_id=".db_escape($customer_id);
232                 if ($action) 
233                         $sql .= ' AND (r.action='.db_escape($action).($default ? " OR r.action='general'":'').')';
234                 $sql .= ')';
235         }
236         
237         $res = db_query($sql, "can't retrieve branch contacts");
238         $results = array();
239         $type = '';
240         while($contact = db_fetch($res)) {
241                 if ($type && $type != $contact['type']) break; // skip cust when branch contacts found
242                 $results[] = $contact;
243                 $type = $contact['type'];
244         }
245         if ($results && $default) {
246                 // here we have general and action contacts selected
247                 if ($n = array_search_value($action, $results, 'action')) {
248                         return $n;
249                 }
250                 // only general contact found
251                 return $results[0];
252         }
253         return $results;
254 }
255
256 ?>