Better layout. Copyright notes. Mailto links, outer table routines. (3. run)
[fa-stable.git] / purchasing / supplier_credit.php
1 <?php
2 /**********************************************************************
3     Copyright (C) FrontAccounting, LLC.
4         Released under the terms of the GNU Affero General Public License,
5         AGPL, as published by the Free Software Foundation, either version 
6         3 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/agpl-3.0.html>.
11 ***********************************************************************/
12 $path_to_root="..";
13
14 include_once($path_to_root . "/purchasing/includes/supp_trans_class.inc");
15
16 $page_security=5;
17
18 include_once($path_to_root . "/includes/session.inc");
19
20 include_once($path_to_root . "/includes/data_checks.inc");
21
22 include_once($path_to_root . "/purchasing/includes/purchasing_db.inc");
23 include_once($path_to_root . "/purchasing/includes/purchasing_ui.inc");
24 $js = "";
25 if ($use_popup_windows)
26         $js .= get_js_open_window(900, 500);
27 if ($use_date_picker)
28         $js .= get_js_date_picker();
29 page(_("Supplier Credit Note"), false, false, "", $js);
30
31 //----------------------------------------------------------------------------------------
32
33 check_db_has_suppliers(_("There are no suppliers defined in the system."));
34
35 //---------------------------------------------------------------------------------------------------------------
36 if ($ret = context_restore()) {
37  // return from supplier editor
38         copy_from_trans($_SESSION['supp_trans']);
39         if(isset($ret['supplier_id']))
40                 $_POST['supplier_id'] = $ret['supplier_id'];
41 }
42 if (isset($_POST['_supplier_id_editor'])) {
43         copy_to_trans($_SESSION['supp_trans']);
44         context_call($path_to_root.'/purchasing/manage/suppliers.php?supplier_id='.$_POST['supplier_id'], 'supp_trans');
45 }
46
47 //---------------------------------------------------------------------------------------------------------------
48
49 if (isset($_GET['AddedID'])) 
50 {
51         $invoice_no = $_GET['AddedID'];
52         $trans_type = 21;
53
54
55     echo "<center>";
56     display_notification_centered(_("Supplier credit note has been processed."));
57     display_note(get_trans_view_str($trans_type, $invoice_no, _("View this Credit Note")));
58
59         display_note(get_gl_view_str($trans_type, $invoice_no, _("View the GL Journal Entries for this Credit Note")), 1);
60
61     hyperlink_params($_SERVER['PHP_SELF'], _("Enter Another Credit Note"), "New=1");
62         hyperlink_params("$path_to_root/admin/attachments.php", _("Add an Attachment"), "filterType=$trans_type&trans_no=$invoice_no");
63         
64         display_footer_exit();
65 }
66
67 //---------------------------------------------------------------------------------------------------
68
69 if (isset($_GET['New']))
70 {
71         if (isset( $_SESSION['supp_trans']))
72         {
73                 unset ($_SESSION['supp_trans']->grn_items);
74                 unset ($_SESSION['supp_trans']->gl_codes);
75                 unset ($_SESSION['supp_trans']);
76         }
77
78         $_SESSION['supp_trans'] = new supp_trans;
79         $_SESSION['supp_trans']->is_invoice = false;
80 }
81
82 function clear_fields()
83 {
84         global $Ajax;
85         
86         unset($_POST['gl_code']);
87         unset($_POST['dimension_id']);
88         unset($_POST['dimension2_id']);
89         unset($_POST['amount']);
90         unset($_POST['memo_']);
91         unset($_POST['AddGLCodeToTrans']);
92         $Ajax->activate('gl_items');
93         set_focus('gl_code');
94 }
95 //------------------------------------------------------------------------------------------------
96 //      GL postings are often entered in the same form to two accounts
97 //  so fileds are cleared only on user demand.
98 //
99 if (isset($_POST['ClearFields']))
100 {
101         clear_fields();
102 }
103
104 if (isset($_POST['AddGLCodeToTrans'])){
105
106         $Ajax->activate('gl_items');
107         $input_error = false;
108
109         $sql = "SELECT account_code, account_name FROM ".TB_PREF."chart_master WHERE account_code='" . $_POST['gl_code'] . "'";
110         $result = db_query($sql,"get account information");
111         if (db_num_rows($result) == 0)
112         {
113                 display_error(_("The account code entered is not a valid code, this line cannot be added to the transaction."));
114                 set_focus('gl_code');
115                 $input_error = true;
116         }
117         else
118         {
119                 $myrow = db_fetch_row($result);
120                 $gl_act_name = $myrow[1];
121                 if (!check_num('amount'))
122                 {
123                         display_error(_("The amount entered is not numeric. This line cannot be added to the transaction."));
124                         set_focus('amount');
125                         $input_error = true;
126                 }
127         }
128
129         if ($input_error == false)
130         {
131                 $_SESSION['supp_trans']->add_gl_codes_to_trans($_POST['gl_code'], $gl_act_name,
132                         $_POST['dimension_id'], $_POST['dimension2_id'], 
133                         input_num('amount'), $_POST['memo_']);
134                 set_focus('gl_code');
135         }
136 }
137
138
139 //---------------------------------------------------------------------------------------------------
140
141 function check_data()
142 {
143         global $total_grn_value, $total_gl_value;
144         
145         if (!$_SESSION['supp_trans']->is_valid_trans_to_post())
146         {
147                 display_error(_("The credit note cannot be processed because the there are no items or values on the invoice.  Credit notes are expected to have a charge."));
148                 set_focus('');
149                 return false;
150         }
151
152         if (!references::is_valid($_SESSION['supp_trans']->reference)) 
153         {
154                 display_error(_("You must enter an credit note reference."));
155                 set_focus('reference');
156                 return false;
157         }
158
159         if (!is_new_reference($_SESSION['supp_trans']->reference, 21)) 
160         {
161                 display_error(_("The entered reference is already in use."));
162                 set_focus('reference');
163                 return false;
164         }
165
166         if (!references::is_valid($_SESSION['supp_trans']->supp_reference)) 
167         {
168                 display_error(_("You must enter a supplier's credit note reference."));
169                 set_focus('supp_reference');
170                 return false;
171         }
172
173         if (!is_date($_SESSION['supp_trans']->tran_date))
174         {
175                 display_error(_("The credit note as entered cannot be processed because the date entered is not valid."));
176                 set_focus('tran_date');
177                 return false;
178         } 
179         elseif (!is_date_in_fiscalyear($_SESSION['supp_trans']->tran_date)) 
180         {
181                 display_error(_("The entered date is not in fiscal year."));
182                 set_focus('tran_date');
183                 return false;
184         }
185         if (!is_date( $_SESSION['supp_trans']->due_date))
186         {
187                 display_error(_("The invoice as entered cannot be processed because the due date is in an incorrect format."));
188                 set_focus('due_date');
189                 return false;
190         }
191
192         if ($_SESSION['supp_trans']->ov_amount < ($total_gl_value + $total_grn_value))
193         {
194                 display_error(_("The credit note total as entered is less than the sum of the the general ledger entires (if any) and the charges for goods received. There must be a mistake somewhere, the credit note as entered will not be processed."));
195                 return false;
196         }
197
198         return true;
199 }
200
201 //---------------------------------------------------------------------------------------------------
202
203 function handle_commit_credit_note()
204 {
205         copy_to_trans($_SESSION['supp_trans']);
206
207         if (!check_data())
208                 return;
209
210         $invoice_no = add_supp_invoice($_SESSION['supp_trans']);
211
212     $_SESSION['supp_trans']->clear_items();
213     unset($_SESSION['supp_trans']);
214
215         meta_forward($_SERVER['PHP_SELF'], "AddedID=$invoice_no");
216 }
217
218 //--------------------------------------------------------------------------------------------------
219
220 if (isset($_POST['PostCreditNote']))
221 {
222         handle_commit_credit_note();
223 }
224
225 function check_item_data($n)
226 {
227         if (!check_num('This_QuantityCredited'.$n, 0))
228         {
229                 display_error(_("The quantity to credit must be numeric and greater than zero."));
230                 set_focus('This_QuantityCredited'.$n);
231                 return false;
232         }
233
234         if (!check_num('ChgPrice'.$n, 0))
235         {
236                 display_error(_("The price is either not numeric or negative."));
237                 set_focus('ChgPrice'.$n);
238                 return false;
239         }
240
241         return true;
242 }
243
244 function commit_item_data($n)
245 {
246         if (check_item_data($n))
247         {
248                 $complete = False;
249
250                 $_SESSION['supp_trans']->add_grn_to_trans($n,
251                 $_POST['po_detail_item'.$n], $_POST['item_code'.$n],
252                 $_POST['item_description'.$n], $_POST['qty_recd'.$n],
253                 $_POST['prev_quantity_inv'.$n], input_num('This_QuantityCredited'.$n),
254                 $_POST['order_price'.$n], input_num('ChgPrice'.$n), $complete,
255                 $_POST['std_cost_unit'.$n], "");
256         }
257 }
258
259 //-----------------------------------------------------------------------------------------
260
261 $id = find_submit('grn_item_id');
262 if ($id != -1)
263 {
264         commit_item_data($id);
265 }
266
267 if (isset($_POST['InvGRNAll']))
268 {
269         foreach($_POST as $postkey=>$postval )
270     {
271                 if (strpos($postkey, "qty_recd") === 0)
272                 {
273                         $id = substr($postkey, strlen("qty_recd"));
274                         $id = (int)$id;
275                         commit_item_data($id);
276                 }
277     }
278 }       
279
280
281 //--------------------------------------------------------------------------------------------------
282 $id3 = find_submit('Delete');
283 if ($id3 != -1)
284 {
285         $_SESSION['supp_trans']->remove_grn_from_trans($id3);
286         $Ajax->activate('grn_items');
287         $Ajax->activate('inv_tot');
288 }
289
290 $id4 = find_submit('Delete2');
291 if ($id4 != -1)
292 {
293         $_SESSION['supp_trans']->remove_gl_codes_from_trans($id4);
294         clear_fields();
295         $Ajax->activate('gl_items');
296         $Ajax->activate('inv_tot');
297 }
298
299
300 //--------------------------------------------------------------------------------------------------
301
302 start_form(false, true);
303
304 invoice_header($_SESSION['supp_trans']);
305 if ($_POST['supplier_id']=='') 
306         display_error('No supplier found for entered search text');
307 else {
308         start_outer_table("$table_style2 width=98%", 5);
309
310         $total_grn_value = display_grn_items($_SESSION['supp_trans'], 1);
311
312         $total_gl_value = display_gl_items($_SESSION['supp_trans'], 1);
313
314         div_start('inv_tot');
315         invoice_totals($_SESSION['supp_trans']);
316         div_end();
317
318         end_outer_table(0, false);
319 }
320
321 if ($id != -1)
322 {
323         $Ajax->activate('grn_items');
324         $Ajax->activate('inv_tot');
325 }
326
327 if (get_post('AddGLCodeToTrans'))
328         $Ajax->activate('inv_tot');
329
330 br();
331 submit_center('PostCreditNote', _("Enter Credit Note"), true, '', true);
332 br();
333
334 end_form();
335 end_page();
336 ?>