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 include_once($path_to_root . "/includes/prefs/sysprefs.inc");
13 include_once($path_to_root . "/inventory/includes/inventory_db.inc");
33 function items_cart($type)
35 $this->trans_type = $type;
39 // --------------- line item functions
41 function add_to_cart($line_no, $stock_id, $qty, $standard_cost, $description=null)
44 if (isset($stock_id) && $stock_id != "" && isset($qty))
46 $this->line_items[$line_no] = new line_item($stock_id, $qty,
47 $standard_cost, $description);
52 // shouldn't come here under normal circumstances
53 display_error("unexpected - adding an invalid item or null quantity", "", true);
59 function find_cart_item($stock_id)
61 foreach($this->line_items as $line_no=>$line) {
62 if ($line->stock_id == $stock_id)
63 return $this->line_items[$line_no];
68 function update_cart_item($line_no, $qty, $standard_cost)
70 $this->line_items[$line_no]->quantity = $qty;
71 $this->line_items[$line_no]->standard_cost = $standard_cost;
74 function remove_from_cart($line_no)
76 array_splice($this->line_items, $line_no, 1);
79 function count_items()
81 return count($this->line_items);
85 Checks cart quantities on document_date.
86 Returns array of stock_ids which stock quantities would go negative on some day.
88 function check_qoh($location, $date_, $reverse=false)
92 // collect quantities by stock_id
94 foreach ($this->line_items as $line_no => $line_item)
96 $qty = $reverse ? -$line_item->quantity : $line_item->quantity;
98 $qtys[$line_item->stock_id]['qty'] = $qty + @$qtys[$line_item->stock_id]['qty'];
99 $qtys[$line_item->stock_id]['line'] = $line_no;
102 foreach($qtys as $stock_id => $sum)
104 $fail = check_negative_stock($stock_id, $sum['qty'], $location, $date_);
106 $low_stock[] = $stock_id;
112 // ----------- GL item functions
114 function add_gl_item($code_id, $dimension_id, $dimension2_id, $amount, $reference, $description=null, $person_id=null)
116 if (isset($code_id) && $code_id != "" && isset($amount) && isset($dimension_id) &&
117 isset($dimension2_id))
119 $this->gl_items[] = new gl_item($code_id, $dimension_id, $dimension2_id, $amount, $reference, $description, $person_id);
124 // shouldn't come here under normal circumstances
125 display_error("unexpected - invalid parameters in add_gl_item($code_id, $dimension_id, $dimension2_id, $amount,...)", "", true);
131 function update_gl_item($index, $code_id, $dimension_id, $dimension2_id, $amount, $reference, $description=null, $person_id=null)
133 $this->gl_items[$index]->code_id = $code_id;
134 $this->gl_items[$index]->person_id = $person_id;
136 $gl_type = is_subledger_account($code_id, $person_id);
139 $this->gl_items[$index]->person_type_id = $gl_type > 0 ? PT_CUSTOMER : PT_SUPPLIER;
140 $this->gl_items[$index]->person_name = get_subaccount_name($code_id, $person_id);
143 $this->gl_items[$index]->person_type_id = $this->gl_items[$index]->person_name = '';
145 $this->gl_items[$index]->dimension_id = $dimension_id;
146 $this->gl_items[$index]->dimension2_id = $dimension2_id;
147 $this->gl_items[$index]->amount = $amount;
148 $this->gl_items[$index]->reference = $reference;
149 if ($description == null)
150 $this->gl_items[$index]->description = get_gl_account_name($code_id);
152 $this->gl_items[$index]->description = $description;
156 function remove_gl_item($index)
158 array_splice($this->gl_items, $index, 1);
161 function count_gl_items()
163 return count($this->gl_items);
166 function gl_items_total()
169 foreach ($this->gl_items as $gl_item)
170 $total += $gl_item->amount;
174 function gl_items_total_debit()
177 foreach ($this->gl_items as $gl_item)
179 if ($gl_item->amount > 0)
180 $total += $gl_item->amount;
185 function gl_items_total_credit()
188 foreach ($this->gl_items as $gl_item)
190 if ($gl_item->amount < 0)
191 $total += $gl_item->amount;
196 // ------------ common functions
198 function clear_items()
200 unset($this->line_items);
201 $this->line_items = array();
203 unset($this->gl_items);
204 $this->gl_items = array();
208 // Check if cart contains virtual subaccount (AP/AR) postings
210 function has_sub_accounts()
212 foreach ($this->gl_items as $gl_item)
214 if ($gl_item->person_id)
221 //--------------------------------------------------------------------------------------------
226 var $item_description;
234 function line_item ($stock_id, $qty, $standard_cost=null, $description=null)
236 $item_row = get_item($stock_id);
238 if ($item_row == null)
239 display_error("invalid item added to order : $stock_id", "");
241 $this->mb_flag = $item_row["mb_flag"];
242 $this->units = $item_row["units"];
244 if ($description == null)
245 $this->item_description = $item_row["description"];
247 $this->item_description = $description;
249 if ($standard_cost == null)
250 $this->standard_cost = $item_row["actual_cost"];
252 $this->standard_cost = $standard_cost;
254 $this->stock_id = $stock_id;
255 $this->quantity = $qty;
256 //$this->price = $price;
261 This method is generally obsolete and subject to removal in FA 2.4 (preserved for now to support 2.3 extensions).
262 Use items_cart::check_qoh instead.
264 function check_qoh($location, $date_, $reverse)
268 if (!$SysPrefs->allow_negative_stock())
270 if (has_stock_holding($this->mb_flag))
272 $quantity = $this->quantity;
274 $quantity = -$this->quantity;
279 $fail = check_negative_stock($this->stock_id, $quantity, $location, $date_);
289 //---------------------------------------------------------------------------------------
304 function gl_item($code_id, $dimension_id, $dimension2_id, $amount, $reference,
305 $description=null, $person_id=null)
307 //echo "adding $index, $code_id, $dimension_id, $amount, $reference<br>";
309 if ($description == null)
310 $this->description = get_gl_account_name($code_id);
312 $this->description = $description;
314 $this->code_id = $code_id;
315 $this->person_id = $person_id;
316 $gl_type = is_subledger_account($code_id, $person_id);
319 $this->person_type_id = $gl_type > 0 ? PT_CUSTOMER : PT_SUPPLIER;
320 $this->person_name = get_subaccount_name($code_id, $person_id);
322 $this->dimension_id = $dimension_id;
323 $this->dimension2_id = $dimension2_id;
324 $this->amount = $amount;
325 $this->reference = $reference;
329 //---------------------------------------------------------------------------------------