Fixed Quote Valid Days in System and GL Setup, Setup tab.
[fa-stable.git] / admin / gl_setup.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_GLSETUP';
13 $path_to_root="..";
14 include($path_to_root . "/includes/session.inc");
15
16 page(_($help_context = "System and General GL Setup"));
17
18 include_once($path_to_root . "/includes/date_functions.inc");
19 include_once($path_to_root . "/includes/ui.inc");
20 include_once($path_to_root . "/includes/data_checks.inc");
21
22 include_once($path_to_root . "/admin/db/company_db.inc");
23
24 //-------------------------------------------------------------------------------------------------
25
26 function can_process()
27 {
28         if (!check_num('po_over_receive', 0, 100))
29         {
30                 display_error(_("The delivery over-receive allowance must be between 0 and 100."));
31                 set_focus('po_over_receive');
32                 return false;
33         }
34
35         if (!check_num('po_over_charge', 0, 100))
36         {
37                 display_error(_("The invoice over-charge allowance must be between 0 and 100."));
38                 set_focus('po_over_charge');
39                 return false;
40         }
41
42         if (!check_num('past_due_days', 0, 100))
43         {
44                 display_error(_("The past due days interval allowance must be between 0 and 100."));
45                 set_focus('past_due_days');
46                 return false;
47         }
48
49         $grn_act = get_company_pref('grn_clearing_act');
50         if ((get_post('grn_clearing_act') != $grn_act) && db_num_rows(get_grn_items(0, '', true)))
51         {
52                 display_error(_("Before GRN Clearing Account can be changed all GRNs have to be invoiced"));
53                 $_POST['grn_clearing_act'] = $grn_act;
54                 set_focus('grn_clearing_account');
55                 return false;
56         }
57         if (!is_account_balancesheet(get_post('retained_earnings_act')) || is_account_balancesheet(get_post('profit_loss_year_act')))
58         {
59                 display_error(_("The Retained Earnings Account should be a Balance Account or the Profit and Loss Year Account should be an Expense Account (preferred the last one in the Expense Class)"));
60                 return false;
61         }
62         return true;
63 }
64
65 //-------------------------------------------------------------------------------------------------
66
67 if (isset($_POST['submit']) && can_process())
68 {
69         update_company_prefs( get_post( array( 'retained_earnings_act', 'profit_loss_year_act',
70                 'debtors_act', 'pyt_discount_act', 'creditors_act', 'freight_act',
71                 'exchange_diff_act', 'bank_charge_act', 'default_sales_act', 'default_sales_discount_act',
72                 'default_prompt_payment_act', 'default_inventory_act', 'default_cogs_act',
73                 'default_adj_act', 'default_inv_sales_act', 'default_assembly_act', 'legal_text',
74                 'past_due_days', 'default_workorder_required', 'default_dim_required',
75                 'default_delivery_required', 'default_quote_valid_days', 'grn_clearing_act',
76                 'allow_negative_stock'=> 0, 'accumulate_shipping'=> 0,
77                 'po_over_receive' => 0.0, 'po_over_charge' => 0.0, 'default_credit_limit'=>0.0
78 )));
79
80         display_notification(_("The general GL setup has been updated."));
81
82 } /* end of if submit */
83
84 //-------------------------------------------------------------------------------------------------
85
86 start_form();
87
88 start_outer_table(TABLESTYLE2);
89
90 table_section(1);
91
92 if (get_company_pref('grn_clearing_act') === null) { // available from 2.3.1, can be not defined on pre-2.4 installations
93         set_company_pref('grn_clearing_act', 'glsetup.purchase', 'varchar', 15, 0);
94         refresh_sys_prefs();
95 }
96
97 if (get_company_pref('default_quote_valid_days') === null) { // available from 2.3.23, can be not defined on pre-2.4 installations
98         set_company_pref('default_quote_valid_days', 'glsetup.sales', 'smallint', 6, 30);
99         refresh_sys_prefs();
100 }
101
102 $myrow = get_company_prefs();
103
104 $_POST['retained_earnings_act']  = $myrow["retained_earnings_act"];
105 $_POST['profit_loss_year_act']  = $myrow["profit_loss_year_act"];
106 $_POST['debtors_act']  = $myrow["debtors_act"];
107 $_POST['creditors_act']  = $myrow["creditors_act"];
108 $_POST['freight_act'] = $myrow["freight_act"];
109 $_POST['pyt_discount_act']  = $myrow["pyt_discount_act"];
110
111 $_POST['exchange_diff_act'] = $myrow["exchange_diff_act"];
112 $_POST['bank_charge_act'] = $myrow["bank_charge_act"];
113 $_POST['default_sales_act'] = $myrow["default_sales_act"];
114 $_POST['default_sales_discount_act']  = $myrow["default_sales_discount_act"];
115 $_POST['default_prompt_payment_act']  = $myrow["default_prompt_payment_act"];
116
117 $_POST['default_inventory_act'] = $myrow["default_inventory_act"];
118 $_POST['default_cogs_act'] = $myrow["default_cogs_act"];
119 $_POST['default_adj_act'] = $myrow["default_adj_act"];
120 $_POST['default_inv_sales_act'] = $myrow['default_inv_sales_act'];
121 $_POST['default_assembly_act'] = $myrow['default_assembly_act'];
122
123 $_POST['allow_negative_stock'] = $myrow['allow_negative_stock'];
124
125 $_POST['po_over_receive'] = percent_format($myrow['po_over_receive']);
126 $_POST['po_over_charge'] = percent_format($myrow['po_over_charge']);
127 $_POST['past_due_days'] = $myrow['past_due_days'];
128
129 $_POST['grn_clearing_act'] = $myrow['grn_clearing_act'];
130
131 $_POST['default_credit_limit'] = $myrow['default_credit_limit'];
132 $_POST['legal_text'] = $myrow['legal_text'];
133 $_POST['accumulate_shipping'] = $myrow['accumulate_shipping'];
134
135 $_POST['default_workorder_required'] = $myrow['default_workorder_required'];
136 $_POST['default_dim_required'] = $myrow['default_dim_required'];
137 $_POST['default_delivery_required'] = $myrow['default_delivery_required'];
138 $_POST['default_quote_valid_days'] = $myrow['default_quote_valid_days'];
139
140 //---------------
141
142
143 table_section_title(_("General GL"));
144
145 text_row(_("Past Due Days Interval:"), 'past_due_days', $_POST['past_due_days'], 6, 6, '', "", _("days"));
146
147 gl_all_accounts_list_row(_("Retained Earnings:"), 'retained_earnings_act', $_POST['retained_earnings_act']);
148
149 gl_all_accounts_list_row(_("Profit/Loss Year:"), 'profit_loss_year_act', $_POST['profit_loss_year_act']);
150
151 gl_all_accounts_list_row(_("Exchange Variances Account:"), 'exchange_diff_act', $_POST['exchange_diff_act']);
152
153 gl_all_accounts_list_row(_("Bank Charges Account:"), 'bank_charge_act', $_POST['bank_charge_act']);
154
155 //---------------
156
157 table_section_title(_("Customers and Sales"));
158
159 text_row(_("Default Credit Limit:"), 'default_credit_limit', $_POST['default_credit_limit'], 12, 12);
160
161 check_row(_("Accumulate batch shipping:"), 'accumulate_shipping', null);
162
163 textarea_row(_("Legal Text on Invoice:"), 'legal_text', $_POST['legal_text'], 32, 3);
164
165 gl_all_accounts_list_row(_("Shipping Charged Account:"), 'freight_act', $_POST['freight_act']);
166
167 //---------------
168
169 table_section_title(_("Customers and Sales Defaults"));
170 // default for customer branch
171 gl_all_accounts_list_row(_("Receivable Account:"), 'debtors_act');
172
173 gl_all_accounts_list_row(_("Sales Account:"), 'default_sales_act', null,
174         false, false, true);
175
176 gl_all_accounts_list_row(_("Sales Discount Account:"), 'default_sales_discount_act');
177
178 gl_all_accounts_list_row(_("Prompt Payment Discount Account:"), 'default_prompt_payment_act');
179
180 text_row(_("Quote Valid Days:"), 'default_quote_valid_days', $_POST['default_quote_valid_days'], 6, 6, '', "", _("days"));
181
182 text_row(_("Delivery Required By:"), 'default_delivery_required', $_POST['default_delivery_required'], 6, 6, '', "", _("days"));
183
184 //----------------
185
186 table_section(2);
187
188 table_section_title(_("Dimension Defaults"));
189
190 text_row(_("Dimension Required By After:"), 'default_dim_required', $_POST['default_dim_required'], 6, 6, '', "", _("days"));
191 //---------------
192
193 table_section_title(_("Suppliers and Purchasing"));
194
195 percent_row(_("Delivery Over-Receive Allowance:"), 'po_over_receive');
196
197 percent_row(_("Invoice Over-Charge Allowance:"), 'po_over_charge');
198
199 table_section_title(_("Suppliers and Purchasing Defaults"));
200
201 gl_all_accounts_list_row(_("Payable Account:"), 'creditors_act', $_POST['creditors_act']);
202
203 gl_all_accounts_list_row(_("Purchase Discount Account:"), 'pyt_discount_act', $_POST['pyt_discount_act']);
204
205 gl_all_accounts_list_row(_("GRN Clearing Account:"), 'grn_clearing_act', get_post('grn_clearing_act'), true, false, _("No postings on GRN"));
206
207 table_section_title(_("Inventory"));
208
209 check_row(_("Allow Negative Inventory:"), 'allow_negative_stock', null);
210 label_row(null, _("Warning:  This may cause a delay in GL postings"), "", "class='stockmankofg' colspan=2"); 
211
212 table_section_title(_("Items Defaults"));
213 gl_all_accounts_list_row(_("Sales Account:"), 'default_inv_sales_act', $_POST['default_inv_sales_act']);
214
215 gl_all_accounts_list_row(_("Inventory Account:"), 'default_inventory_act', $_POST['default_inventory_act']);
216 // this one is default for items and suppliers (purchase account)
217 gl_all_accounts_list_row(_("C.O.G.S. Account:"), 'default_cogs_act', $_POST['default_cogs_act']);
218
219 gl_all_accounts_list_row(_("Inventory Adjustments Account:"), 'default_adj_act', $_POST['default_adj_act']);
220
221 gl_all_accounts_list_row(_("Item Assembly Costs Account:"), 'default_assembly_act', $_POST['default_assembly_act']);
222
223 //----------------
224
225 table_section_title(_("Manufacturing Defaults"));
226
227 text_row(_("Work Order Required By After:"), 'default_workorder_required', $_POST['default_workorder_required'], 6, 6, '', "", _("days"));
228
229
230 //----------------
231
232 end_outer_table(1);
233
234 submit_center('submit', _("Update"), true, '', 'default');
235
236 end_form(2);
237
238 //-------------------------------------------------------------------------------------------------
239
240 end_page();
241
242 ?>