*** empty log message ***
[fa-stable.git] / inventory / transfers.php
1 <?php
2
3 $page_security = 3;
4 $path_to_root="..";
5 include_once($path_to_root . "/includes/ui/items_cart.inc");
6
7 include_once($path_to_root . "/includes/session.inc");
8
9 include_once($path_to_root . "/includes/date_functions.inc");
10 include_once($path_to_root . "/includes/data_checks.inc");
11
12 include_once($path_to_root . "/inventory/includes/stock_transfers_ui.inc");
13 include_once($path_to_root . "/inventory/includes/inventory_db.inc");
14 $js = "";
15 if ($use_popup_windows)
16         $js .= get_js_open_window(800, 500);
17 page(_("Inventory Location Transfers"), false, false, "", $js);
18
19
20 //-----------------------------------------------------------------------------------------------
21
22 check_db_has_costable_items(_("There are no inventory items defined in the system (Purchased or manufactured items)."));
23
24 check_db_has_movement_types(_("There are no inventory movement types defined in the system. Please define at least one inventory adjustment type."));
25
26 //-----------------------------------------------------------------------------------------------
27
28 if (isset($_GET['AddedID'])) 
29 {
30         $trans_no = $_GET['AddedID'];
31         $trans_type = systypes::location_transfer();
32
33         display_notification_centered(_("Inventory transfer has been processed"));
34         display_note(get_trans_view_str($trans_type, $trans_no, _("View this transfer")));
35
36         hyperlink_no_params($_SERVER['PHP_SELF'], _("Enter Another Inventory Transfer"));
37
38         display_footer_exit();
39 }
40
41 //--------------------------------------------------------------------------------------------------
42
43 function copy_to_st()
44 {
45         $_SESSION['transfer_items']->from_loc = $_POST['FromStockLocation'];
46         $_SESSION['transfer_items']->to_loc = $_POST['ToStockLocation'];
47         $_SESSION['transfer_items']->tran_date = $_POST['AdjDate'];
48         $_SESSION['transfer_items']->transfer_type = $_POST['type'];
49         $_SESSION['transfer_items']->memo_ = $_POST['memo_'];
50 }
51
52 //--------------------------------------------------------------------------------------------------
53
54 function copy_from_st()
55 {
56         $_POST['FromStockLocation'] = $_SESSION['transfer_items']->from_loc;
57         $_POST['ToStockLocation'] = $_SESSION['transfer_items']->to_loc;
58         $_POST['AdjDate'] = $_SESSION['transfer_items']->tran_date;
59         $_POST['type'] = $_SESSION['transfer_items']->transfer_type;
60         $_POST['memo_'] = $_SESSION['transfer_items']->memo_;
61 }
62
63 //-----------------------------------------------------------------------------------------------
64
65 function handle_new_order()
66 {
67         if (isset($_SESSION['transfer_items']))
68         {
69                 $_SESSION['transfer_items']->clear_items();
70                 unset ($_SESSION['transfer_items']);
71         }
72
73     session_register("transfer_items");
74
75         $_SESSION['transfer_items'] = new items_cart;
76         $_POST['AdjDate'] = Today();
77         if (!is_date_in_fiscalyear($_POST['AdjDate']))
78                 $_POST['AdjDate'] = end_fiscalyear();
79         $_SESSION['transfer_items']->tran_date = $_POST['AdjDate'];     
80 }
81
82 //-----------------------------------------------------------------------------------------------
83
84 if (isset($_POST['Process']))
85 {
86
87         $input_error = 0;
88
89         if (!references::is_valid($_POST['ref'])) 
90         {
91                 display_error(_("You must enter a reference."));
92                 $input_error = 1;
93         } 
94         elseif (!is_new_reference($_POST['ref'], systypes::location_transfer())) 
95         {
96                 display_error(_("The entered reference is already in use."));
97                 $input_error = 1;
98         } 
99         elseif (!is_date($_POST['AdjDate'])) 
100         {
101                 display_error(_("The entered date for the adjustment is invalid."));
102                 $input_error = 1;
103         } 
104         elseif (!is_date_in_fiscalyear($_POST['AdjDate'])) 
105         {
106                 display_error(_("The entered date is not in fiscal year."));
107                 $input_error = 1;
108         } 
109         elseif ($_POST['FromStockLocation'] == $_POST['ToStockLocation'])
110         {
111                 display_error(_("The locations to transfer from and to must be different."));
112                 $input_error = 1;
113         } 
114         else 
115         {
116                 $failed_item = $_SESSION['transfer_items']->check_qoh($_POST['FromStockLocation'], $_POST['AdjDate'], true);
117                 if ($failed_item != null) 
118                 {
119                 display_error(_("The quantity entered is greater than the available quantity for this item at the source location :") .
120                         " " . $failed_item->stock_id . " - " .  $failed_item->item_description);
121                 echo "<br>";
122                         $input_error = 1;
123                 }
124         }
125
126         if ($input_error == 1)
127                 unset($_POST['Process']);
128 }
129
130 //-------------------------------------------------------------------------------
131
132 if (isset($_POST['Process']))
133 {
134
135         $trans_no = add_stock_transfer($_SESSION['transfer_items']->line_items,
136                 $_POST['FromStockLocation'], $_POST['ToStockLocation'],
137                 $_POST['AdjDate'], $_POST['type'], $_POST['ref'], $_POST['memo_']);
138
139         $_SESSION['transfer_items']->clear_items();
140         unset($_SESSION['transfer_items']);
141
142         meta_forward($_SERVER['PHP_SELF'], "AddedID=$trans_no");
143 } /*end of process credit note */
144
145 //-----------------------------------------------------------------------------------------------
146
147 function check_item_data()
148 {
149         if (!is_numeric($_POST['qty']) || ($_POST['qty'] == 0))
150         {
151                 display_error( _("The quantity entered is not a valid number."));
152                 return false;
153         }
154
155         if ($_POST['qty'] <= 0)
156         {
157                 display_error(_("The quantity entered must be a positive number."));
158                 return false;
159         }
160
161         return true;
162 }
163
164 //-----------------------------------------------------------------------------------------------
165
166 function handle_update_item()
167 {
168     if($_POST['UpdateItem'] != "" && check_item_data())
169     {
170         if (!isset($_POST['std_cost']))
171                 $_POST['std_cost'] = $_SESSION['transfer_items']->line_items[$_POST['stock_id']]->standard_cost;
172         $_SESSION['transfer_items']->update_cart_item($_POST['stock_id'], $_POST['qty'], $_POST['std_cost']);
173     }
174 }
175
176 //-----------------------------------------------------------------------------------------------
177
178 function handle_delete_item()
179 {
180         $_SESSION['transfer_items']->remove_from_cart($_GET['Delete']);
181 }
182
183 //-----------------------------------------------------------------------------------------------
184
185 function handle_new_item()
186 {
187         if (!check_item_data())
188                 return;
189         if (!isset($_POST['std_cost']))
190                 $_POST['std_cost'] = 0;
191         add_to_order($_SESSION['transfer_items'], $_POST['stock_id'], $_POST['qty'], $_POST['std_cost']);
192 }
193
194 //-----------------------------------------------------------------------------------------------
195
196 if (isset($_GET['Delete']) || isset($_GET['Edit']))
197         copy_from_st();
198
199 if (isset($_GET['Delete']))
200         handle_delete_item();
201
202 if (isset($_POST['AddItem']) || isset($_POST['UpdateItem']))
203         copy_to_st();
204         
205 if (isset($_POST['AddItem']))
206         handle_new_item();
207
208 if (isset($_POST['UpdateItem']))
209         handle_update_item();
210
211 //-----------------------------------------------------------------------------------------------
212
213 if (isset($_GET['NewTransfer']) || !isset($_SESSION['transfer_items']))
214 {
215         handle_new_order();
216 }
217
218 //-----------------------------------------------------------------------------------------------
219
220 start_form(false, true);
221
222 display_order_header($_SESSION['transfer_items']);
223
224 start_table("$table_style width=70%", 10);
225 start_row();
226 echo "<td>";
227 display_transfer_items(_("Items"), $_SESSION['transfer_items']);
228 transfer_options_controls();
229 echo "</td>";
230 end_row();
231 end_table(1);
232
233 if (!isset($_POST['Process']))
234 {
235         if ($_SESSION['transfer_items']->count_items() >= 1)
236         {
237         submit_center_first('Update', _("Update"));
238             submit_center_last('Process', _("Process Transfer"));
239         }
240         else
241         submit_center('Update', _("Update"));
242 }
243 end_form();
244 end_page();
245
246 ?>