Implemented attachments for Bank Account, and redesign of Bank Accounts to a tabbed...
[fa-stable.git] / gl / manage / bank_accounts.php
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 $page_security = 'SA_BANKACCOUNT';
13 $path_to_root = "../..";
14 include($path_to_root . "/includes/db_pager.inc");
15 include($path_to_root . "/includes/session.inc");
16
17 page(_($help_context = "Bank Accounts"));
18
19 include($path_to_root . "/includes/ui.inc");
20 include_once($path_to_root . "/includes/ui/attachment.inc");
21
22 simple_page_mode();
23
24 if (isset($_GET['bank_id'])) 
25 {
26         $_POST['bank_id'] = $_GET['bank_id'];
27 }
28
29 $bank_id = get_post('bank_id', ''); 
30 if ($selected_id != -1)
31         $bank_id = $selected_id;
32
33 //-----------------------------------------------------------------------------------
34
35 if ($Mode=='ADD_ITEM' || $Mode=='UPDATE_ITEM') 
36 {
37
38         //initialise no input errors assumed initially before we test
39         $input_error = 0;
40
41         //first off validate inputs sensible
42         if (strlen($_POST['bank_account_name']) == 0) 
43         {
44                 $input_error = 1;
45                 display_error(_("The bank account name cannot be empty."));
46                 set_focus('bank_account_name');
47         } 
48         if ($Mode=='ADD_ITEM' && (gl_account_in_bank_accounts(get_post('account_code')) 
49                         || key_in_foreign_table(get_post('account_code'), 'gl_trans', 'account'))) {
50                 $input_error = 1;
51                 display_error(_("The GL account selected is already in use or has transactions. Select another empty GL account."));
52                 set_focus('account_code');
53         }
54         if ($input_error != 1)
55         {
56         if ($bank_id) 
57         {
58                 
59                 update_bank_account($bank_id, $_POST['account_code'],
60                                 $_POST['account_type'], $_POST['bank_account_name'], 
61                                 $_POST['bank_name'], $_POST['bank_account_number'], 
62                         $_POST['bank_address'], $_POST['BankAccountCurrency'],
63                         $_POST['dflt_curr_act'], $_POST['bank_charge_act']);
64                         $Ajax->activate('bank_id'); // in case of status change
65                         display_notification(_('Bank account has been updated'));
66         } 
67         else 
68         {
69     
70                 add_bank_account($_POST['account_code'], $_POST['account_type'], 
71                                 $_POST['bank_account_name'], $_POST['bank_name'], 
72                         $_POST['bank_account_number'], $_POST['bank_address'], 
73                                 $_POST['BankAccountCurrency'], $_POST['dflt_curr_act'], $_POST['bank_charge_act']);
74                         $bank_id = $_POST['bank_id'] = db_insert_id();
75                         display_notification(_('New bank account has been added'));
76                         $Ajax->activate('_page_body');
77                 }
78                 $Mode = 'RESET';
79         }
80
81 elseif( $Mode == 'Delete')
82 {
83         //the link to delete a selected record was clicked instead of the submit button
84
85         $cancel_delete = 0;
86         // PREVENT DELETES IF DEPENDENT RECORDS IN 'bank_trans'
87
88         if (key_in_foreign_table($bank_id, 'bank_trans', 'bank_act') || key_in_foreign_table(get_post('account_code'), 'gl_trans', 'account'))
89         {
90                 $cancel_delete = 1;
91                 display_error(_("Cannot delete this bank account because transactions have been created using this account."));
92         }
93
94         if (key_in_foreign_table($bank_id, 'sales_pos', 'pos_account'))
95         {
96                 $cancel_delete = 1;
97                 display_error(_("Cannot delete this bank account because POS definitions have been created using this account."));
98         }
99         if (!$cancel_delete) 
100         {
101                 delete_bank_account($bank_id);
102                 display_notification(_('Selected bank account has been deleted'));
103         } //end if Delete bank account
104         $Mode = 'RESET';
105
106
107 if ($Mode == 'RESET')
108 {
109         $bank_id = '';
110         $_POST['bank_name']  =  $_POST['bank_account_name']  = '';
111         $_POST['bank_account_number'] = $_POST['bank_address'] = '';
112         $_POST['bank_charge_act'] = get_company_pref('bank_charge_act');
113         $Ajax->activate('_page_body');
114 }
115 if (!isset($_POST['bank_charge_act']))
116         $_POST['bank_charge_act'] = get_company_pref('bank_charge_act');
117
118 /* Always show the list of accounts */
119
120 $result = get_bank_accounts(check_value('show_inactive'));
121
122 start_form(true);
123 start_table(TABLESTYLE, "width='80%'");
124
125 $th = array(_("Account Name"), _("Type"), _("Currency"), _("GL Account"), 
126         _("Bank"), _("Number"), _("Bank Address"), _("Dflt"), '','');
127 inactive_control_column($th);
128 table_header($th);      
129
130 $k = 0; 
131 while ($myrow = db_fetch($result)) 
132 {
133         
134         alt_table_row_color($k);
135
136     label_cell($myrow["bank_account_name"], "nowrap");
137         label_cell($bank_account_types[$myrow["account_type"]], "nowrap");
138     label_cell($myrow["bank_curr_code"], "nowrap");
139     label_cell($myrow["account_code"] . " " . $myrow["account_name"], "nowrap");
140     label_cell($myrow["bank_name"], "nowrap");
141     label_cell($myrow["bank_account_number"], "nowrap");
142     label_cell($myrow["bank_address"]);
143     if ($myrow["dflt_curr_act"])
144                 label_cell(_("Yes"));
145         else
146                 label_cell(_("No"));
147
148         inactive_control_cell($myrow["id"], $myrow["inactive"], 'bank_accounts', 'id');
149         edit_button_cell("Edit".$myrow["id"], _("Edit"));
150         delete_button_cell("Delete".$myrow["id"], _("Delete"));
151     end_row(); 
152 }
153
154 inactive_control_row($th);
155 end_table(1);
156
157
158 function bank_account_settings($bank_id)
159 {
160         global $Mode, $bank_account_types, $page_nested;
161
162         $is_used = $bank_id && key_in_foreign_table($bank_id, 'bank_trans', 'bank_act');
163         
164         start_table(TABLESTYLE2);
165
166         if ($bank_id) 
167         {
168                 if ($Mode == 'Edit') {  
169                         $myrow = get_bank_account($bank_id);
170
171                         $_POST['account_code'] = $myrow["account_code"];
172                         $_POST['account_type'] = $myrow["account_type"];
173                         $_POST['bank_name']  = $myrow["bank_name"];
174                         $_POST['bank_account_name']  = $myrow["bank_account_name"];
175                         $_POST['bank_account_number'] = $myrow["bank_account_number"];
176                         $_POST['bank_address'] = $myrow["bank_address"];
177                         $_POST['BankAccountCurrency'] = $myrow["bank_curr_code"];
178                         $_POST['dflt_curr_act'] = $myrow["dflt_curr_act"];
179                         $_POST['bank_charge_act'] = $myrow["bank_charge_act"];
180                 }
181                 hidden('bank_id', $bank_id);
182                 set_focus('bank_account_name');
183         } 
184
185         text_row(_("Bank Account Name:"), 'bank_account_name', null, 50, 100);
186
187         if ($is_used) 
188         {
189                 label_row(_("Account Type:"), $bank_account_types[$_POST['account_type']]);
190                 hidden('account_type');
191         } 
192         else 
193         {
194                 bank_account_types_list_row(_("Account Type:"), 'account_type', null); 
195         }
196         if ($is_used) 
197         {
198                 label_row(_("Bank Account Currency:"), $_POST['BankAccountCurrency']);
199                 hidden('BankAccountCurrency', $_POST['BankAccountCurrency']);
200         } 
201         else 
202         {
203                 currencies_list_row(_("Bank Account Currency:"), 'BankAccountCurrency', null);
204         }       
205
206         yesno_list_row(_("Default currency account:"), 'dflt_curr_act');
207
208         if($is_used)
209         {
210                 label_row(_("Bank Account GL Code:"), $_POST['account_code']);
211                 hidden('account_code');
212         } else 
213                 gl_all_accounts_list_row(_("Bank Account GL Code:"), 'account_code', null);
214
215         gl_all_accounts_list_row(_("Bank Charges Account:"), 'bank_charge_act', null, true);
216         text_row(_("Bank Name:"), 'bank_name', null, 50, 60);
217         text_row(_("Bank Account Number:"), 'bank_account_number', null, 30, 60);
218         textarea_row(_("Bank Address:"), 'bank_address', null, 40, 5);
219
220         end_table(1);
221
222         submit_add_or_update_center(!$bank_id, '', 'both');
223 }
224
225 if (!$bank_id)
226 {
227         unset($_POST['_tabs_sel']); // force settings tab for new customer
228         display_heading("");
229 }
230 else
231 {
232         $act = get_bank_account($bank_id);
233         if ($act)
234                 display_heading($act['bank_account_name']." - ".$act['bank_curr_code']);
235 }
236 if ($bank_id)
237         hidden('bank_id', $bank_id);
238
239 tabbed_content_start('tabs', array(
240                 'settings' => array(_('&General settings'), $bank_id),
241                 'transactions' => array(_('&Transactions'), (user_check_access('SA_BANKTRANSVIEW') ? $bank_id : null)),
242                 'attachments' => array(_('Attachments'), (user_check_access('SA_ATTACHDOCUMENT') ? $bank_id : null)),
243         ));
244         
245         switch (get_post('_tabs_sel')) {
246                 default:
247                 case 'settings':
248                         $Mode = "Edit";
249                         bank_account_settings($bank_id); 
250                         break;
251                 case 'transactions':
252                         $_GET['bank_account'] = $bank_id;
253                         include_once($path_to_root."/gl/inquiry/bank_inquiry.php");
254                         break;
255                 case 'attachments':
256                         $_GET['trans_no'] = $bank_id;
257                         $_GET['type_no']= ST_BANKACCOUNT;
258                         $attachments = new attachments('attachment', $bank_id, 'bank_accounts');
259                         $attachments->show();
260         };
261 br();
262 tabbed_content_end();
263
264 end_form();
265
266 end_page(@$_REQUEST['popup']);