Added ajax and some smaller fixes in sales module files
[fa-stable.git] / sales / credit_note_entry.php
1 <?php
2 //---------------------------------------------------------------------------
3 //
4 //      Entry/Modify free hand Credit Note
5 //
6 $page_security = 3;
7 $path_to_root="..";
8 include_once($path_to_root . "/sales/includes/cart_class.inc");
9 include_once($path_to_root . "/includes/session.inc");
10 include_once($path_to_root . "/includes/data_checks.inc");
11 include_once($path_to_root . "/sales/includes/sales_db.inc");
12 include_once($path_to_root . "/sales/includes/sales_ui.inc");
13 include_once($path_to_root . "/sales/includes/ui/sales_credit_ui.inc");
14 include_once($path_to_root . "/sales/includes/ui/sales_order_ui.inc");
15
16 $js = "";
17 if ($use_popup_windows) {
18         $js .= get_js_open_window(900, 500);
19 }
20 if ($use_date_picker) {
21         $js .= get_js_date_picker();
22 }
23
24 if(isset($_GET['NewCredit'])) {
25         $_SESSION['page_title'] = _("Customer Credit Note");
26         handle_new_credit(0);
27 } elseif (isset($_GET['ModifyCredit'])) {
28         $_SESSION['page_title'] = sprintf(_("Modifying Customer Credit Note #%d"), $_GET['ModifyCredit']);
29         handle_new_credit($_GET['ModifyCredit']);
30         $help_page_title = _("Modifying Customer Credit Note");
31 }
32
33 page($_SESSION['page_title'],false, false, "", $js);
34
35 //-----------------------------------------------------------------------------
36
37 check_db_has_stock_items(_("There are no items defined in the system."));
38
39 check_db_has_customer_branches(_("There are no customers, or there are no customers with branches. Please define customers and customer branches."));
40
41 //-----------------------------------------------------------------------------
42
43 if (isset($_GET['AddedID'])) {
44         $credit_no = $_GET['AddedID'];
45         $trans_type = 11;
46
47         display_notification_centered(sprintf(_("Credit Note # %d has been processed"),$credit_no));
48
49         display_note(get_customer_trans_view_str($trans_type, $credit_no, _("View this credit note")), 0, 1);
50
51         display_note(get_gl_view_str($trans_type, $credit_no, _("View the GL Journal Entries for this Credit Note")));
52
53         hyperlink_params($_SERVER['PHP_SELF'], _("Enter Another Credit Note"), "NewCredit=yes");
54
55         display_footer_exit();
56 }
57 //--------------------------------------------------------------------------------
58
59 function line_start_focus() {
60   global $Ajax;
61   $Ajax->activate('items_table');
62   set_focus('_stock_id_edit');
63 }
64
65 //-----------------------------------------------------------------------------
66
67 function copy_to_cn()
68 {
69         $_SESSION['Items']->Comments = $_POST['CreditText'];
70         $_SESSION['Items']->document_date = $_POST['OrderDate'];
71         $_SESSION['Items']->freight_cost = input_num('ChargeFreightCost');
72         $_SESSION['Items']->Location = $_POST["Location"];
73         $_SESSION['Items']->sales_type = $_POST['sales_type_id'];
74         $_SESSION['Items']->reference = $_POST['ref'];
75         $_SESSION['Items']->ship_via = $_POST['ShipperID'];
76 }
77
78 //-----------------------------------------------------------------------------
79
80 function copy_from_cn()
81 {
82         $_POST['CreditText'] = $_SESSION['Items']->Comments;
83         $_POST['OrderDate'] = $_SESSION['Items']->document_date;
84         $_POST['ChargeFreightCost'] = price_format($_SESSION['Items']->freight_cost);
85         $_POST['Location'] = $_SESSION['Items']->Location;
86         $_POST['sales_type_id'] = $_SESSION['Items']->sales_type;
87         $_POST['ref'] = $_SESSION['Items']->reference;
88         $_POST['ShipperID'] = $_SESSION['Items']->ship_via;
89 }
90
91 //-----------------------------------------------------------------------------
92
93 function handle_new_credit($trans_no)
94 {
95         processing_start();
96         $_SESSION['Items'] = new Cart(11,$trans_no);
97         copy_from_cn();
98     line_start_focus();
99 }
100
101 //-----------------------------------------------------------------------------
102
103 function can_process()
104 {
105
106         $input_error = 0;
107
108         if ($_SESSION['Items']->count_items() == 0 && (!check_num('ChargeFreightCost',0)))
109                 return false;
110         if($_SESSION['Items']->trans_no == 0) {
111             if (!references::is_valid($_POST['ref'])) {
112                 display_error( _("You must enter a reference."));
113                 set_focus('ref');
114                 $input_error = 1;
115             } elseif (!is_new_reference($_POST['ref'], 11))     {
116                 display_error( _("The entered reference is already in use."));
117                 set_focus('ref');
118                 $input_error = 1;
119             }
120         }
121         if (!is_date($_POST['OrderDate'])) {
122                 display_error(_("The entered date for the credit note is invalid."));
123                 set_focus('OrderDate');
124                 $input_error = 1;
125         } elseif (!is_date_in_fiscalyear($_POST['OrderDate'])) {
126                 display_error(_("The entered date is not in fiscal year."));
127                 set_focus('OrderDate');
128                 $input_error = 1;
129         }
130         return ($input_error == 0);
131 }
132
133 //-----------------------------------------------------------------------------
134
135 if (isset($_POST['ProcessCredit']) && can_process()) {
136         if ($_POST['CreditType'] == "WriteOff" && (!isset($_POST['WriteOffGLCode']) ||
137                 $_POST['WriteOffGLCode'] == '')) {
138                 display_note(_("For credit notes created to write off the stock, a general ledger account is required to be selected."), 1, 0);
139                 display_note(_("Please select an account to write the cost of the stock off to, then click on Process again."), 1, 0);
140                 exit;
141                 
142         }
143         if (!isset($_POST['WriteOffGLCode'])) {
144                 $_POST['WriteOffGLCode'] = 0;
145         }
146         $credit_no = $_SESSION['Items']->write($_POST['WriteOffGLCode']);
147         processing_end();
148         meta_forward($_SERVER['PHP_SELF'], "AddedID=$credit_no");
149
150 } /*end of process credit note */
151
152   //-----------------------------------------------------------------------------
153
154 function check_item_data()
155 {
156         if (!check_num('qty',0)) {
157                 display_error(_("The quantity must be greater than zero."));
158                 set_focus('qty');
159                 return false;
160         }
161         if (!check_num('price',0)) {
162                 display_error(_("The entered price is negative or invalid."));
163                 set_focus('price');
164                 return false;
165         }
166         if (!check_num('Disc', 0, 100)) {
167                 display_error(_("The entered discount percent is negative, greater than 100 or invalid."));
168                 set_focus('Disc');
169                 return false;
170         }
171         return true;
172 }
173
174 //-----------------------------------------------------------------------------
175
176 function handle_update_item()
177 {
178         if ($_POST['UpdateItem'] != "" && check_item_data()) {
179                 $_SESSION['Items']->update_cart_item($_POST['line_no'], input_num('qty'),
180                         input_num('price'), input_num('Disc') / 100);
181         }
182     line_start_focus();
183 }
184
185 //-----------------------------------------------------------------------------
186
187 function handle_delete_item($line_no)
188 {
189         $_SESSION['Items']->remove_from_cart($line_no);
190     line_start_focus();
191 }
192
193 //-----------------------------------------------------------------------------
194
195 function handle_new_item()
196 {
197
198         if (!check_item_data())
199                 return;
200
201         add_to_order($_SESSION['Items'], $_POST['stock_id'], input_num('qty'),
202                 input_num('price'), input_num('Disc') / 100);
203     line_start_focus();
204 }
205 //-----------------------------------------------------------------------------
206 $id = find_submit('Delete');
207 if ($id!=-1)
208         handle_delete_item($id);
209
210 if (isset($_POST['AddItem']) || isset($_POST['UpdateItem']))
211         copy_to_cn();
212
213 if (isset($_POST['AddItem']))
214         handle_new_item();
215
216 if (isset($_POST['UpdateItem']))
217         handle_update_item();
218
219 if (isset($_POST['CancelItemChanges']) || isset($_POST['UpdateItem']))
220         line_start_focus();
221
222 //-----------------------------------------------------------------------------
223
224 if (!processing_active()) {
225         handle_new_credit();
226 } else {
227         if (!isset($_POST['customer_id']))
228                 $_POST['customer_id'] = $_SESSION['Items']->customer_id;
229         if (!isset($_POST['branch_id']))
230                 $_POST['branch_id'] = $_SESSION['Items']->Branch;
231 }
232
233 //-----------------------------------------------------------------------------
234
235 start_form(false, true);
236
237 $customer_error = display_credit_header($_SESSION['Items']);
238
239 if ($customer_error == "") {
240         start_table("$table_style width=80%", 10);
241         echo "<tr><td>";
242         display_credit_items(_("Credit Note Items"), $_SESSION['Items']);
243         credit_options_controls();
244         echo "</td></tr>";
245         end_table();
246 } else {
247         display_error($customer_error);
248 }
249
250 echo "<br><center><table><tr>";
251 submit_cells('Update', _("Update"));
252 submit_cells('ProcessCredit', _("Process Credit Note"));
253 echo "</tr></table></center>";
254
255 end_form();
256 end_page();
257
258 ?>