[0004212] Work Order Entry: fixed error when voided WO refence is reused.
[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 $js = "";
17 if ($SysPrefs->use_popup_windows && $SysPrefs->use_popup_search)
18         $js .= get_js_open_window(900, 500);
19
20 page(_($help_context = "System and General GL Setup"), false, false, "", $js);
21
22 include_once($path_to_root . "/includes/date_functions.inc");
23 include_once($path_to_root . "/includes/ui.inc");
24 include_once($path_to_root . "/includes/data_checks.inc");
25
26 include_once($path_to_root . "/admin/db/company_db.inc");
27
28 //-------------------------------------------------------------------------------------------------
29
30 function can_process()
31 {
32         if (!check_num('po_over_receive', 0, 100))
33         {
34                 display_error(_("The delivery over-receive allowance must be between 0 and 100."));
35                 set_focus('po_over_receive');
36                 return false;
37         }
38
39         if (!check_num('po_over_charge', 0, 100))
40         {
41                 display_error(_("The invoice over-charge allowance must be between 0 and 100."));
42                 set_focus('po_over_charge');
43                 return false;
44         }
45
46         if (!check_num('past_due_days', 0, 100))
47         {
48                 display_error(_("The past due days interval allowance must be between 0 and 100."));
49                 set_focus('past_due_days');
50                 return false;
51         }
52
53         $grn_act = get_company_pref('grn_clearing_act');
54         $post_grn_act = get_post('grn_clearing_act');
55         if ($post_grn_act == null)
56                 $post_grn_act = 0;
57         if (($post_grn_act != $grn_act) && db_num_rows(get_grn_items(0, '', true)))
58         {
59                 display_error(_("Before GRN Clearing Account can be changed all GRNs have to be invoiced"));
60                 $_POST['grn_clearing_act'] = $grn_act;
61                 set_focus('grn_clearing_account');
62                 return false;
63         }
64         if (!is_account_balancesheet(get_post('retained_earnings_act')) || is_account_balancesheet(get_post('profit_loss_year_act')))
65         {
66                 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)"));
67                 return false;
68         }
69         return true;
70 }
71
72 //-------------------------------------------------------------------------------------------------
73
74 if (isset($_POST['submit']) && can_process())
75 {
76         update_company_prefs( get_post( array( 'retained_earnings_act', 'profit_loss_year_act',
77                 'debtors_act', 'pyt_discount_act', 'creditors_act', 'freight_act', 'deferred_income_act',
78                 'exchange_diff_act', 'bank_charge_act', 'default_sales_act', 'default_sales_discount_act',
79                 'default_prompt_payment_act', 'default_inventory_act', 'default_cogs_act', 'depreciation_period',
80                 'default_loss_on_asset_disposal_act', 'default_adj_act', 'default_inv_sales_act', 'default_wip_act', 'legal_text',
81                 'past_due_days', 'default_workorder_required', 'default_dim_required', 'default_receival_required',
82                 'default_delivery_required', 'default_quote_valid_days', 'grn_clearing_act', 'tax_algorithm',
83                 'no_zero_lines_amount', 'show_po_item_codes', 'accounts_alpha', 'loc_notification', 'print_invoice_no',
84                 'allow_negative_prices', 'print_item_images_on_quote', 
85                 'allow_negative_stock'=> 0, 'accumulate_shipping'=> 0,
86                 'po_over_receive' => 0.0, 'po_over_charge' => 0.0, 'default_credit_limit'=>0.0
87 )));
88
89         display_notification(_("The general GL setup has been updated."));
90
91 } /* end of if submit */
92
93 //-------------------------------------------------------------------------------------------------
94
95 start_form();
96
97 start_outer_table(TABLESTYLE2);
98
99 table_section(1);
100
101 $myrow = get_company_prefs();
102
103 $_POST['retained_earnings_act']  = $myrow["retained_earnings_act"];
104 $_POST['profit_loss_year_act']  = $myrow["profit_loss_year_act"];
105 $_POST['debtors_act']  = $myrow["debtors_act"];
106 $_POST['creditors_act']  = $myrow["creditors_act"];
107 $_POST['freight_act'] = $myrow["freight_act"];
108 $_POST['deferred_income_act'] = $myrow["deferred_income_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['tax_algorithm'] = $myrow["tax_algorithm"];
114 $_POST['default_sales_act'] = $myrow["default_sales_act"];
115 $_POST['default_sales_discount_act']  = $myrow["default_sales_discount_act"];
116 $_POST['default_prompt_payment_act']  = $myrow["default_prompt_payment_act"];
117
118 $_POST['default_inventory_act'] = $myrow["default_inventory_act"];
119 $_POST['default_cogs_act'] = $myrow["default_cogs_act"];
120 $_POST['default_adj_act'] = $myrow["default_adj_act"];
121 $_POST['default_inv_sales_act'] = $myrow['default_inv_sales_act'];
122 $_POST['default_wip_act'] = $myrow['default_wip_act'];
123
124 $_POST['allow_negative_stock'] = $myrow['allow_negative_stock'];
125
126 $_POST['po_over_receive'] = percent_format($myrow['po_over_receive']);
127 $_POST['po_over_charge'] = percent_format($myrow['po_over_charge']);
128 $_POST['past_due_days'] = $myrow['past_due_days'];
129
130 $_POST['grn_clearing_act'] = $myrow['grn_clearing_act'];
131
132 $_POST['default_credit_limit'] = price_format($myrow['default_credit_limit']);
133 $_POST['legal_text'] = $myrow['legal_text'];
134 $_POST['accumulate_shipping'] = $myrow['accumulate_shipping'];
135
136 $_POST['default_workorder_required'] = $myrow['default_workorder_required'];
137 $_POST['default_dim_required'] = $myrow['default_dim_required'];
138 $_POST['default_delivery_required'] = $myrow['default_delivery_required'];
139 $_POST['default_receival_required'] = $myrow['default_receival_required'];
140 $_POST['default_quote_valid_days'] = $myrow['default_quote_valid_days'];
141 $_POST['no_zero_lines_amount'] = $myrow['no_zero_lines_amount'];
142 $_POST['show_po_item_codes'] = $myrow['show_po_item_codes'];
143 $_POST['accounts_alpha'] = $myrow['accounts_alpha'];
144 $_POST['loc_notification'] = $myrow['loc_notification'];
145 $_POST['print_invoice_no'] = $myrow['print_invoice_no'];
146 $_POST['allow_negative_prices'] = $myrow['allow_negative_prices'];
147 $_POST['print_item_images_on_quote'] = $myrow['print_item_images_on_quote'];
148 $_POST['default_loss_on_asset_disposal_act'] = $myrow['default_loss_on_asset_disposal_act'];
149 $_POST['depreciation_period'] = $myrow['depreciation_period'];
150
151 //---------------
152
153
154 table_section_title(_("General GL"));
155
156 text_row(_("Past Due Days Interval:"), 'past_due_days', $_POST['past_due_days'], 6, 6, '', "", _("days"));
157
158 accounts_type_list_row(_("Accounts Type:"), 'accounts_alpha', $_POST['accounts_alpha']); 
159
160 gl_all_accounts_list_row(_("Retained Earnings:"), 'retained_earnings_act', $_POST['retained_earnings_act']);
161
162 gl_all_accounts_list_row(_("Profit/Loss Year:"), 'profit_loss_year_act', $_POST['profit_loss_year_act']);
163
164 gl_all_accounts_list_row(_("Exchange Variances Account:"), 'exchange_diff_act', $_POST['exchange_diff_act']);
165
166 gl_all_accounts_list_row(_("Bank Charges Account:"), 'bank_charge_act', $_POST['bank_charge_act']);
167
168 tax_algorithm_list_row(_("Tax Algorithm:"), 'tax_algorithm', $_POST['tax_algorithm']);
169
170 //---------------
171
172 table_section_title(_("Dimension Defaults"));
173
174 text_row(_("Dimension Required By After:"), 'default_dim_required', $_POST['default_dim_required'], 6, 6, '', "", _("days"));
175
176 //----------------
177
178 table_section_title(_("Customers and Sales"));
179
180 amount_row(_("Default Credit Limit:"), 'default_credit_limit', $_POST['default_credit_limit']);
181
182 yesno_list_row(_("Invoice Identification:"), 'print_invoice_no', $_POST['print_invoice_no'], $name_yes=_("Number"), $name_no=_("Reference"));
183
184 check_row(_("Accumulate batch shipping:"), 'accumulate_shipping', null);
185
186 check_row(_("Print Item Image on Quote:"), 'print_item_images_on_quote', null);
187
188 textarea_row(_("Legal Text on Invoice:"), 'legal_text', $_POST['legal_text'], 32, 4);
189
190 gl_all_accounts_list_row(_("Shipping Charged Account:"), 'freight_act', $_POST['freight_act']);
191
192 gl_all_accounts_list_row(_("Deferred Income Account:"), 'deferred_income_act', $_POST['deferred_income_act'], true, false,
193         _("Not used"), false, false, false);
194
195 //---------------
196
197 table_section_title(_("Customers and Sales Defaults"));
198 // default for customer branch
199 gl_all_accounts_list_row(_("Receivable Account:"), 'debtors_act');
200
201 gl_all_accounts_list_row(_("Sales Account:"), 'default_sales_act', null,
202         false, false, true);
203
204 gl_all_accounts_list_row(_("Sales Discount Account:"), 'default_sales_discount_act');
205
206 gl_all_accounts_list_row(_("Prompt Payment Discount Account:"), 'default_prompt_payment_act');
207
208 text_row(_("Quote Valid Days:"), 'default_quote_valid_days', $_POST['default_quote_valid_days'], 6, 6, '', "", _("days"));
209
210 text_row(_("Delivery Required By:"), 'default_delivery_required', $_POST['default_delivery_required'], 6, 6, '', "", _("days"));
211
212 //---------------
213
214 table_section(2);
215
216 table_section_title(_("Suppliers and Purchasing"));
217
218 percent_row(_("Delivery Over-Receive Allowance:"), 'po_over_receive');
219
220 percent_row(_("Invoice Over-Charge Allowance:"), 'po_over_charge');
221
222 table_section_title(_("Suppliers and Purchasing Defaults"));
223
224 gl_all_accounts_list_row(_("Payable Account:"), 'creditors_act', $_POST['creditors_act']);
225
226 gl_all_accounts_list_row(_("Purchase Discount Account:"), 'pyt_discount_act', $_POST['pyt_discount_act']);
227
228 gl_all_accounts_list_row(_("GRN Clearing Account:"), 'grn_clearing_act', get_post('grn_clearing_act'), true, false, _("No postings on GRN"));
229
230 text_row(_("Receival Required By:"), 'default_receival_required', $_POST['default_receival_required'], 6, 6, '', "", _("days"));
231
232 check_row(_("Show PO item codes:"), 'show_po_item_codes', null);
233
234 table_section_title(_("Inventory"));
235
236 check_row(_("Allow Negative Inventory:"), 'allow_negative_stock', null);
237 label_row(null, _("Warning:  This may cause a delay in GL postings"), "", "class='stockmankofg' colspan=2"); 
238
239 check_row(_("No zero-amounts (Service):"), 'no_zero_lines_amount', null);
240
241 check_row(_("Location Notifications:"), 'loc_notification', null);
242
243 check_row(_("Allow Negative Prices:"), 'allow_negative_prices', null);
244
245 table_section_title(_("Items Defaults"));
246 gl_all_accounts_list_row(_("Sales Account:"), 'default_inv_sales_act', $_POST['default_inv_sales_act']);
247
248 gl_all_accounts_list_row(_("Inventory Account:"), 'default_inventory_act', $_POST['default_inventory_act']);
249 // this one is default for items and suppliers (purchase account)
250 gl_all_accounts_list_row(_("C.O.G.S. Account:"), 'default_cogs_act', $_POST['default_cogs_act']);
251
252 gl_all_accounts_list_row(_("Inventory Adjustments Account:"), 'default_adj_act', $_POST['default_adj_act']);
253
254 gl_all_accounts_list_row(_("WIP Account:"), 'default_wip_act', $_POST['default_wip_act']);
255
256 //----------------
257
258 table_section_title(_("Fixed Assets Defaults"));
259
260 gl_all_accounts_list_row(_("Loss On Asset Disposal Account:"), 'default_loss_on_asset_disposal_act', $_POST['default_loss_on_asset_disposal_act']);
261
262 array_selector_row (_("Depreciation Period:"), 'depreciation_period', $_POST['depreciation_period'], array(FA_MONTHLY => _("Monthly"), FA_YEARLY => _("Yearly")));
263
264 //----------------
265
266 table_section_title(_("Manufacturing Defaults"));
267
268 text_row(_("Work Order Required By After:"), 'default_workorder_required', $_POST['default_workorder_required'], 6, 6, '', "", _("days"));
269
270 //----------------
271
272 end_outer_table(1);
273
274 submit_center('submit', _("Update"), true, '', 'default');
275
276 end_form(2);
277
278 //-------------------------------------------------------------------------------------------------
279
280 end_page();
281