Files
opensourcepos/application/models/receiving.php
jekkos 3838147bb9 All database types used in amount calculations changes to decimal(15,2)
Removed round() statements in sale temp table, precision is defined by datatypes
Removed round() statement in receiving temp table, precision is defined by datatypes

git-svn-id: svn+ssh://svn.code.sf.net/p/opensourcepos/code/@105 c3eb156b-1dc0-44e1-88ae-e38439141b53
2014-07-04 21:01:47 +00:00

119 lines
4.0 KiB
PHP

<?php
class Receiving extends CI_Model
{
public function get_info($receiving_id)
{
$this->db->from('receivings');
$this->db->where('receiving_id',$receiving_id);
return $this->db->get();
}
function exists($receiving_id)
{
$this->db->from('receivings');
$this->db->where('receiving_id',$receiving_id);
$query = $this->db->get();
return ($query->num_rows()==1);
}
function save ($items,$supplier_id,$employee_id,$comment,$payment_type,$receiving_id=false)
{
if(count($items)==0)
return -1;
$receivings_data = array(
'supplier_id'=> $this->Supplier->exists($supplier_id) ? $supplier_id : null,
'employee_id'=>$employee_id,
'payment_type'=>$payment_type,
'comment'=>$comment
);
//Run these queries as a transaction, we want to make sure we do all or nothing
$this->db->trans_start();
$this->db->insert('receivings',$receivings_data);
$receiving_id = $this->db->insert_id();
foreach($items as $line=>$item)
{
$cur_item_info = $this->Item->get_info($item['item_id']);
$receivings_items_data = array
(
'receiving_id'=>$receiving_id,
'item_id'=>$item['item_id'],
'line'=>$item['line'],
'description'=>$item['description'],
'serialnumber'=>$item['serialnumber'],
'quantity_purchased'=>$item['quantity'],
'discount_percent'=>$item['discount'],
'item_cost_price' => $cur_item_info->cost_price,
'item_unit_price'=>$item['price']
);
$this->db->insert('receivings_items',$receivings_items_data);
//Update stock quantity
$item_data = array('quantity'=>$cur_item_info->quantity + $item['quantity']);
$this->Item->save($item_data,$item['item_id']);
$qty_recv = $item['quantity'];
$recv_remarks ='RECV '.$receiving_id;
$inv_data = array
(
'trans_date'=>date('Y-m-d H:i:s'),
'trans_items'=>$item['item_id'],
'trans_user'=>$employee_id,
'trans_comment'=>$recv_remarks,
'trans_inventory'=>$qty_recv
);
$this->Inventory->insert($inv_data);
$supplier = $this->Supplier->get_info($supplier_id);
}
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE)
{
return -1;
}
return $receiving_id;
}
function get_receiving_items($receiving_id)
{
$this->db->from('receivings_items');
$this->db->where('receiving_id',$receiving_id);
return $this->db->get();
}
function get_supplier($receiving_id)
{
$this->db->from('receivings');
$this->db->where('receiving_id',$receiving_id);
return $this->Supplier->get_info($this->db->get()->row()->supplier_id);
}
//We create a temp table that allows us to do easy report/receiving queries
public function create_receivings_items_temp_table()
{
$this->db->query("CREATE TEMPORARY TABLE ".$this->db->dbprefix('receivings_items_temp')."
(SELECT date(receiving_time) as receiving_date, ".$this->db->dbprefix('receivings_items').".receiving_id, comment,payment_type, employee_id,
".$this->db->dbprefix('items').".item_id, ".$this->db->dbprefix('receivings').".supplier_id, quantity_purchased, item_cost_price, item_unit_price,
discount_percent, (item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100) as subtotal,
".$this->db->dbprefix('receivings_items').".line as line, serialnumber, ".$this->db->dbprefix('receivings_items').".description as description,
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100) as total,
(item_unit_price*quantity_purchased-item_unit_price*quantity_purchased*discount_percent/100) - (item_cost_price*quantity_purchased) as profit
FROM ".$this->db->dbprefix('receivings_items')."
INNER JOIN ".$this->db->dbprefix('receivings')." ON ".$this->db->dbprefix('receivings_items').'.receiving_id='.$this->db->dbprefix('receivings').'.receiving_id'."
INNER JOIN ".$this->db->dbprefix('items')." ON ".$this->db->dbprefix('receivings_items').'.item_id='.$this->db->dbprefix('items').'.item_id'."
GROUP BY receiving_id, item_id, line)");
}
}
?>