X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=includes%2Fui%2Fitems_cart.inc;h=c836f487fa1a869342ddd7393d6a65d5e9777471;hb=927ebef2443b6dda544056e33ec84b71d2bdb6c2;hp=a2d3e2d2e9a971494eee82baa76baa6d5de04872;hpb=e9d08fae16b010fcadc8f29d6d491a0d0ea37a90;p=fa-stable.git diff --git a/includes/ui/items_cart.inc b/includes/ui/items_cart.inc index a2d3e2d2..c836f487 100644 --- a/includes/ui/items_cart.inc +++ b/includes/ui/items_cart.inc @@ -1,5 +1,14 @@ . +***********************************************************************/ include_once($path_to_root . "/includes/prefs/sysprefs.inc"); include_once($path_to_root . "/inventory/includes/inventory_db.inc"); @@ -9,21 +18,18 @@ class items_cart var $line_items; var $gl_items; - var $gl_item_count; - var $order_id; - var $editing_item, $deleting_item; - var $from_loc; var $to_loc; var $tran_date; var $transfer_type; var $increase; var $memo_; - var $person_id; var $branch_id; - + var $reference; + var $original_amount; + function items_cart($type) { $this->trans_type = $type; @@ -44,7 +50,7 @@ class items_cart else { // shouldn't come here under normal circumstances - display_db_error("unexpected - adding an invalid item or null quantity", "", true); + display_error("unexpected - adding an invalid item or null quantity", "", true); } return false; @@ -67,7 +73,7 @@ class items_cart function remove_from_cart($line_no) { - unset($this->line_items[$line_no]); + array_splice($this->line_items, $line_no, 1); } function count_items() @@ -75,56 +81,81 @@ class items_cart return count($this->line_items); } + /* + Checks cart quantities on document_date. + Returns array of stock_ids which stock quantities would go negative on some day. + */ function check_qoh($location, $date_, $reverse=false) { + $low_stock = array(); + + // collect quantities by stock_id + $qtys = array(); foreach ($this->line_items as $line_no => $line_item) { - $item_ret = $line_item->check_qoh($location, $date_, $reverse); - if ($item_ret != null) - return $line_no; + $qty = $reverse ? -$line_item->quantity : $line_item->quantity; + + $qtys[$line_item->stock_id]['qty'] = $qty + @$qtys[$line_item->stock_id]['qty']; + $qtys[$line_item->stock_id]['line'] = $line_no; } - return -1; + + foreach($qtys as $stock_id => $sum) + { + $fail = check_negative_stock($stock_id, $sum['qty'], $location, $date_); + if ($fail) + $low_stock[] = $stock_id; + } + + return $low_stock; } // ----------- GL item functions - function add_gl_item($code_id, $dimension_id, $dimension2_id, $amount, $reference, $description=null) + function add_gl_item($code_id, $dimension_id, $dimension2_id, $amount, $reference, $description=null, $person_id=null) { if (isset($code_id) && $code_id != "" && isset($amount) && isset($dimension_id) && isset($dimension2_id)) { - $this->gl_items[$this->gl_item_count] = new gl_item($this->gl_item_count, - $code_id, $dimension_id, $dimension2_id, $amount, $reference, $description); - $this->gl_item_count++; + $this->gl_items[] = new gl_item($code_id, $dimension_id, $dimension2_id, $amount, $reference, $description, $person_id); return true; } else { // shouldn't come here under normal circumstances - display_db_error("unexpected - adding an invalid item or null quantity", "", true); + display_error("unexpected - invalid parameters in add_gl_item($code_id, $dimension_id, $dimension2_id, $amount,...)", "", true); } return false; } - function update_gl_item($index, $dimension_id, $dimension2_id, $amount, $reference, $description=null) + function update_gl_item($index, $code_id, $dimension_id, $dimension2_id, $amount, $reference, $description=null, $person_id=null) { - $this->gl_items[$index]->index = $index; + $this->gl_items[$index]->code_id = $code_id; + $this->gl_items[$index]->person_id = $person_id; + + $gl_type = is_subledger_account($code_id, $person_id); + if ($gl_type) + { + $this->gl_items[$index]->person_type_id = $gl_type > 0 ? PT_CUSTOMER : PT_SUPPLIER; + $this->gl_items[$index]->person_name = get_subaccount_name($code_id, $person_id); + } else + { + $this->gl_items[$index]->person_type_id = $this->gl_items[$index]->person_name = ''; + } $this->gl_items[$index]->dimension_id = $dimension_id; $this->gl_items[$index]->dimension2_id = $dimension2_id; $this->gl_items[$index]->amount = $amount; $this->gl_items[$index]->reference = $reference; - if ($description != null) + if ($description == null) + $this->gl_items[$index]->description = get_gl_account_name($code_id); + else $this->gl_items[$index]->description = $description; } function remove_gl_item($index) { - if (isset($index)) - { - unset($this->gl_items[$index]); - } + array_splice($this->gl_items, $index, 1); } function count_gl_items() @@ -171,9 +202,20 @@ class items_cart unset($this->gl_items); $this->gl_items = array(); - $this->gl_item_count = 1; } + // + // Check if cart contains virtual subaccount (AP/AR) postings + // + function has_sub_accounts() + { + foreach ($this->gl_items as $gl_item) + { + if ($gl_item->person_id) + return true; + } + return false; + } } //-------------------------------------------------------------------------------------------- @@ -194,7 +236,7 @@ class line_item $item_row = get_item($stock_id); if ($item_row == null) - display_db_error("invalid item added to order : $stock_id", ""); + display_error("invalid item added to order : $stock_id", ""); $this->mb_flag = $item_row["mb_flag"]; $this->units = $item_row["units"]; @@ -215,9 +257,15 @@ class line_item $this->price = 0; } + /* + This method is generally obsolete and subject to removal in FA 2.4 (preserved for now to support 2.3 extensions). + Use items_cart::check_qoh instead. + */ function check_qoh($location, $date_, $reverse) { - if (!sys_prefs::allow_negative_stock()) + global $SysPrefs; + + if (!$SysPrefs->allow_negative_stock()) { if (has_stock_holding($this->mb_flag)) { @@ -228,11 +276,9 @@ class line_item if ($quantity >= 0) return null; - $qoh = get_qoh_on_date($this->stock_id, $location, $date_); - if ($quantity + $qoh < 0) - { - return $this; - } + $fail = check_negative_stock($this->stock_id, $quantity, $location, $date_); + if ($fail) + return $this; } } @@ -245,16 +291,18 @@ class line_item class gl_item { - var $index; var $code_id; var $dimension_id; var $dimension2_id; var $amount; var $reference; var $description; + var $person_id; + var $person_type_id; + var $person_name; - function gl_item($index, $code_id, $dimension_id, $dimension2_id, $amount, $reference, - $description=null) + function gl_item($code_id, $dimension_id, $dimension2_id, $amount, $reference, + $description=null, $person_id=null) { //echo "adding $index, $code_id, $dimension_id, $amount, $reference
"; @@ -263,8 +311,14 @@ class gl_item else $this->description = $description; - $this->index = $index; $this->code_id = $code_id; + $this->person_id = $person_id; + $gl_type = is_subledger_account($code_id, $person_id); + if ($gl_type) + { + $this->person_type_id = $gl_type > 0 ? PT_CUSTOMER : PT_SUPPLIER; + $this->person_name = get_subaccount_name($code_id, $person_id); + } $this->dimension_id = $dimension_id; $this->dimension2_id = $dimension2_id; $this->amount = $amount; @@ -274,4 +328,3 @@ class gl_item //--------------------------------------------------------------------------------------- -?>