CI =& get_instance(); } function get_cart() { if(!$this->CI->session->userdata('cartRecv')) $this->set_cart(array()); return $this->CI->session->userdata('cartRecv'); } function set_cart($cart_data) { $this->CI->session->set_userdata('cartRecv',$cart_data); } function get_supplier() { if(!$this->CI->session->userdata('supplier')) $this->set_supplier(-1); return $this->CI->session->userdata('supplier'); } function set_supplier($supplier_id) { $this->CI->session->set_userdata('supplier',$supplier_id); } function get_mode() { if(!$this->CI->session->userdata('recv_mode')) $this->set_mode('receive'); return $this->CI->session->userdata('recv_mode'); } function set_mode($mode) { $this->CI->session->set_userdata('recv_mode',$mode); } function get_stock_source() { if(!$this->CI->session->userdata('recv_stock_source')) { $location_id = $this->CI->Stock_locations->get_default_location_id(); $this->set_stock_source($location_id); } return $this->CI->session->userdata('recv_stock_source'); } function get_comment() { return $this->CI->session->userdata('comment'); } function set_comment($comment) { $this->CI->session->set_userdata('comment', $comment); } function clear_comment() { $this->CI->session->unset_userdata('comment'); } function get_invoice_number() { return $this->CI->session->userdata('recv_invoice_number'); } function set_invoice_number($invoice_number) { $this->CI->session->set_userdata('recv_invoice_number', $invoice_number); } function clear_invoice_number() { $this->CI->session->unset_userdata('recv_invoice_number'); } function is_invoice_number_enabled() { return $this->CI->session->userdata('recv_invoice_number_enabled') == 'true' || $this->CI->session->userdata('recv_invoice_number_enabled') == '1'; } function set_invoice_number_enabled($invoice_number_enabled) { return $this->CI->session->set_userdata('recv_invoice_number_enabled', $invoice_number_enabled); } function set_stock_source($stock_source) { $this->CI->session->set_userdata('recv_stock_source',$stock_source); } function clear_stock_source() { $this->CI->session->unset_userdata('recv_stock_source'); } function get_stock_destination() { if(!$this->CI->session->userdata('recv_stock_destination')) { $location_id = $this->CI->Stock_locations->get_default_location_id(); $this->set_stock_destination($location_id); } return $this->CI->session->userdata('recv_stock_destination'); } function set_stock_destination($stock_destination) { $this->CI->session->set_userdata('recv_stock_destination',$stock_destination); } function clear_stock_destination() { $this->CI->session->unset_userdata('recv_stock_destination'); } function add_item($item_id,$quantity=1,$item_location=null,$discount=0,$price=null,$description=null,$serialnumber=null) { //make sure item exists in database. if(!$this->CI->Item->exists($item_id)) { //try to get item id given an item_number $item_id = $this->CI->Item->get_item_id($item_id); if(!$item_id) return false; } //Get items in the receiving so far. $items = $this->get_cart(); //We need to loop through all items in the cart. //If the item is already there, get it's key($updatekey). //We also need to get the next key that we are going to use in case we need to add the //item to the list. Since items can be deleted, we can't use a count. we use the highest key + 1. $maxkey=0; //Highest key so far $itemalreadyinsale=FALSE; //We did not find the item yet. $insertkey=0; //Key to use for new entry. $updatekey=0; //Key to use to update(quantity) foreach ($items as $item) { //We primed the loop so maxkey is 0 the first time. //Also, we have stored the key in the element itself so we can compare. //There is an array function to get the associated key for an element, but I like it better //like that! if($maxkey <= $item['line']) { $maxkey = $item['line']; } if($item['item_id']==$item_id && $item['item_location']==$item_location) { $itemalreadyinsale=TRUE; $updatekey=$item['line']; } } $insertkey=$maxkey+1; $item_info=$this->CI->Item->get_info($item_id,$item_location); //array records are identified by $insertkey and item_id is just another field. $item = array(($insertkey)=> array( 'item_id'=>$item_id, 'item_location'=>$item_location, 'stock_name'=>$this->CI->Stock_locations->get_location_name($item_location), 'line'=>$insertkey, 'name'=>$item_info->name, 'description'=>$description!=null ? $description: $item_info->description, 'serialnumber'=>$serialnumber!=null ? $serialnumber: '', 'allow_alt_description'=>$item_info->allow_alt_description, 'is_serialized'=>$item_info->is_serialized, 'quantity'=>$quantity, 'discount'=>$discount, 'in_stock'=>$this->CI->Item_quantities->get_item_quantity($item_id, $item_location)->quantity, 'price'=>$price!=null ? $price: $item_info->cost_price, 'receiving_quantity'=>$item_info->receiving_quantity ) ); //Item already exists if($itemalreadyinsale) { $items[$updatekey]['quantity']+=$quantity; } else { //add to existing array $items+=$item; } $this->set_cart($items); return true; } function edit_item($line,$description,$serialnumber,$quantity,$discount,$price) { $items = $this->get_cart(); if(isset($items[$line])) { $items[$line]['description'] = $description; $items[$line]['serialnumber'] = $serialnumber; $items[$line]['quantity'] = $quantity; $items[$line]['discount'] = $discount; $items[$line]['price'] = $price; $this->set_cart($items); } return false; } function is_valid_receipt($receipt_receiving_id) { //RECV # $pieces = explode(' ',$receipt_receiving_id); if(count($pieces)==2) { return $this->CI->Receiving->exists($pieces[1]); } else { return $this->CI->Receiving->get_receiving_by_invoice_number($receipt_receiving_id)->num_rows() > 0; } return false; } function is_valid_item_kit($item_kit_id) { //KIT # $pieces = explode(' ',$item_kit_id); if(count($pieces)==2) { return $this->CI->Item_kit->exists($pieces[1]); } return false; } function return_entire_receiving($receipt_receiving_id) { //POS # $pieces = explode(' ',$receipt_receiving_id); if ($pieces[0] == "RECV") { $receiving_id = $pieces[1]; } else { $receiving = $this->CI->Receiving->get_receiving_by_invoice_number($receipt_receiving_id)->row(); $receiving_id = $receiving->receiving_id; } $this->empty_cart(); $this->delete_supplier(); $this->clear_comment(); foreach($this->CI->Receiving->get_receiving_items($receiving_id)->result() as $row) { $this->add_item($row->item_id,-$row->quantity_purchased,$row->item_location,$row->discount_percent,$row->item_unit_price,$row->description,$row->serialnumber); } $this->set_supplier($this->CI->Receiving->get_supplier($receiving_id)->person_id); } function add_item_kit($external_item_kit_id,$item_location) { //KIT # $pieces = explode(' ',$external_item_kit_id); $item_kit_id = $pieces[1]; foreach ($this->CI->Item_kit_items->get_info($item_kit_id) as $item_kit_item) { $this->add_item($item_kit_item['item_id'],$item_kit_item['quantity'],$item_location); } } function copy_entire_receiving($receiving_id) { $this->empty_cart(); $this->delete_supplier(); foreach($this->CI->Receiving->get_receiving_items($receiving_id)->result() as $row) { $this->add_item($row->item_id,$row->quantity_purchased,$row->item_location,$row->discount_percent,$row->item_unit_price,$row->description,$row->serialnumber); } $this->set_supplier($this->CI->Receiving->get_supplier($receiving_id)->person_id); $receiving_info=$this->CI->Receiving->get_info($receiving_id); //$this->set_invoice_number($receiving_info->row()->invoice_number); } function copy_entire_requisition($requisition_id,$item_location) { $this->empty_cart(); $this->delete_supplier(); foreach($this->CI->Receiving->get_requisition_items($requisition_id)->result() as $row) { $this->add_item_unit($row->item_id,$row->requisition_quantity,$item_location,$row->description); } $this->set_supplier($this->CI->Receiving->get_supplier($requisition_id)->person_id); $receiving_info=$this->CI->Receiving->get_info($receiving_id); //$this->set_invoice_number($receiving_info->row()->invoice_number); } function delete_item($line) { $items=$this->get_cart(); unset($items[$line]); $this->set_cart($items); } function empty_cart() { $this->CI->session->unset_userdata('cartRecv'); } function delete_supplier() { $this->CI->session->unset_userdata('supplier'); } function clear_mode() { $this->CI->session->unset_userdata('receiving_mode'); } function clear_all() { $this->clear_mode(); $this->empty_cart(); $this->delete_supplier(); $this->clear_comment(); $this->clear_invoice_number(); } function get_item_total($quantity, $price, $discount_percentage) { $total = bcmul($quantity, $price, PRECISION); $discount_fraction = bcdiv($discount_percentage, 100, PRECISION); $discount_amount = bcmul($total, $discount_fraction, PRECISION); return bcsub($total, $discount_amount, PRECISION); } function get_total() { $total = 0; foreach($this->get_cart() as $item) { $total += $this->get_item_total($item['quantity'], $item['price'], $item['discount']); } return $total; } } ?>