212 lines
7.7 KiB
PHP
212 lines
7.7 KiB
PHP
|
<?php
|
||
|
class MStocks extends CI_Model
|
||
|
{
|
||
|
public function __construct()
|
||
|
{
|
||
|
parent::__construct();
|
||
|
}
|
||
|
public function isDeleteable($item_id)
|
||
|
{
|
||
|
$this->db->where("items_id", $item_id);
|
||
|
$t = $this->db->get("tbl_salesdetails")->row();
|
||
|
if ($t) return false;
|
||
|
$this->db->where("items_id", $item_id);
|
||
|
$t = $this->db->get("tbl_purchasedetails")->row();
|
||
|
if ($t) return false;
|
||
|
return true;
|
||
|
}
|
||
|
public function deleteOpeningStock($item_id)
|
||
|
{
|
||
|
$this->db->where("items_id", $item_id);
|
||
|
$this->db->delete("tbl_stocks");
|
||
|
}
|
||
|
public function updateOpeningStock($item_id, $qty, $rate)
|
||
|
{
|
||
|
$this->db->where("items_id", $item_id);
|
||
|
$this->db->delete("tbl_stocks");
|
||
|
$this->db->insert("tbl_stocks", [
|
||
|
'stocklocations_id' => 1,
|
||
|
'ref_id' => 0,
|
||
|
"title" => "Opening Stock",
|
||
|
"items_id" => $item_id,
|
||
|
"qty" => $qty,
|
||
|
'price' => $rate,
|
||
|
'status' => 1,
|
||
|
'created_on' => date("y-m-d H:i:s")
|
||
|
]);
|
||
|
}
|
||
|
public function addOpeningStock($item_id, $qty, $rate)
|
||
|
{
|
||
|
$this->db->insert("tbl_stocks", [
|
||
|
'stocklocations_id' => 1,
|
||
|
'ref_id' => 0,
|
||
|
"title" => "Opening Stock",
|
||
|
"items_id" => $item_id,
|
||
|
"qty" => $qty,
|
||
|
'price' => $rate,
|
||
|
'status' => 1,
|
||
|
'created_on' => date("y-m-d H:i:s")
|
||
|
]);
|
||
|
}
|
||
|
public function getSellableItems()
|
||
|
{
|
||
|
$subquery = "(SELECT SUM(qty) FROM tbl_stocks WHERE item_id = tbl_items.item_id) AS total_qty";
|
||
|
$this->db->select("tbl_items.*, $subquery", false);
|
||
|
$this->db->having('total_qty >', 0);
|
||
|
return $this->db->get("tbl_items")->result();
|
||
|
}
|
||
|
|
||
|
public function getItemSalesStock($item_id)
|
||
|
{
|
||
|
|
||
|
$this->db->where("status", 1);
|
||
|
$this->db->where("items_id", $item_id);
|
||
|
// $this->db->where("title='Opening Stock'");
|
||
|
$Items = $this->db->get("tbl_salesdetails")->result();
|
||
|
$qty = 0;
|
||
|
$rate = 0;
|
||
|
$nos = 0;
|
||
|
foreach ($Items as $Item) {
|
||
|
$qty += $Item->qty;
|
||
|
$nos++;
|
||
|
$rate += $Item->rate;
|
||
|
}
|
||
|
if($nos!=0) $rate = $rate / $nos;
|
||
|
|
||
|
$SalesStock = new stdClass;
|
||
|
$SalesStock->qty = $qty;
|
||
|
$SalesStock->rate = $rate;
|
||
|
$SalesStock->amount = $qty * $rate;
|
||
|
return $SalesStock;
|
||
|
}
|
||
|
public function getItemPurchaseStock($item_id)
|
||
|
{
|
||
|
|
||
|
$this->db->where("status", 1);
|
||
|
$this->db->where("items_id", $item_id);
|
||
|
// $this->db->where("title='Opening Stock'");
|
||
|
$Items = $this->db->get("tbl_purchasedetails")->result();
|
||
|
$qty = 0;
|
||
|
$rate = 0;
|
||
|
$nos = 0;
|
||
|
foreach ($Items as $Item) {
|
||
|
$qty += $Item->qty;
|
||
|
$nos++;
|
||
|
$rate += $Item->rate;
|
||
|
}
|
||
|
if($nos!=0) $rate = $rate / $nos;
|
||
|
$PurchaseStock = new stdClass;
|
||
|
$PurchaseStock->qty = $qty;
|
||
|
$PurchaseStock->rate = $rate;
|
||
|
$PurchaseStock->amount = $qty * $rate;
|
||
|
return $PurchaseStock;
|
||
|
}
|
||
|
|
||
|
public function getOpeningStock($item_id)
|
||
|
{
|
||
|
$this->db->where("status", 1);
|
||
|
$this->db->where("items_id", $item_id);
|
||
|
$this->db->where("title='Opening Stock'");
|
||
|
$Items = $this->db->get("tbl_stocks")->result();
|
||
|
$qty = 0;
|
||
|
$rate = 0;
|
||
|
$nos = 0;
|
||
|
foreach ($Items as $Item) {
|
||
|
$qty += $Item->qty;
|
||
|
$nos++;
|
||
|
$rate += $Item->price;
|
||
|
}
|
||
|
if($nos!=0) $rate = $rate / $nos;
|
||
|
$OpeningStock = new stdClass;
|
||
|
$OpeningStock->qty = $qty;
|
||
|
$OpeningStock->rate = $rate;
|
||
|
$OpeningStock->amount = $qty * $rate;
|
||
|
return $OpeningStock;
|
||
|
}
|
||
|
public function getClosingStock($item_id)
|
||
|
{
|
||
|
$OpeningStock=$this->getOpeningStock($item_id);
|
||
|
$PurchaseStock=$this->getItemPurchaseStock($item_id);
|
||
|
$SalesStock=$this->getItemSalesStock($item_id);
|
||
|
$ClosingStock = new stdClass;
|
||
|
$ClosingStock->qty =$PurchaseStock->qty+$OpeningStock->qty-$SalesStock->qty;
|
||
|
$ClosingStock->rate = $PurchaseStock->rate+$OpeningStock->rate-$SalesStock->rate;
|
||
|
$ClosingStock->amount = $ClosingStock->qty * $ClosingStock->rate;
|
||
|
return $ClosingStock;
|
||
|
}
|
||
|
public function getStockItemSummary($item_id)
|
||
|
{
|
||
|
$this->db->where("status", 1);
|
||
|
$this->db->where("items_id", $item_id);
|
||
|
$Item = $this->db->get("tbl_stocks")->row();
|
||
|
$qty = 0;
|
||
|
$price = 0;
|
||
|
$Item->Item = $this->db->where("item_id", $item_id)->get("tbl_items")->row();
|
||
|
$Item->qty = $this->db->where("items_id", $item_id)->select("sum(qty) as qty")->get("tbl_stocks")->row()->qty;
|
||
|
$Item->amount = $this->db->where("items_id", $item_id)->select("sum(price * qty) as amount")->get("tbl_stocks")->row()->amount;
|
||
|
$Item->Opening = $this->getOpeningStock($item_id);
|
||
|
$Item->Purchase = $this->getItemPurchaseStock($item_id);
|
||
|
$Item->Sales = $this->getItemSalesStock($item_id);
|
||
|
$Item->Closing = $this->getClosingStock($item_id);
|
||
|
return $Item;
|
||
|
}
|
||
|
public function getStockSummary($stocklocation_id = 0)
|
||
|
{
|
||
|
$this->db->where("status", 1);
|
||
|
if ($stocklocation_id != 0) {
|
||
|
$this->db->where("stocklocations_id", $stocklocation_id);
|
||
|
}
|
||
|
$StockRecords = $this->db->select("distinct(items_id) as items_id")->get("tbl_stocks")->result();
|
||
|
foreach ($StockRecords as $StockRecord) {
|
||
|
$StockRecord->Summary = $this->getStockItemSummary($StockRecord->items_id);
|
||
|
// $StockRecord->StockLocation = $this->db->where("stocklocation_id", $StockRecord->stocklocations_id)->get("tbl_stocklocations")->row();
|
||
|
$StockRecord->Item = $this->db->where("item_id", $StockRecord->items_id)->get("tbl_items")->row();
|
||
|
}
|
||
|
return $StockRecords;
|
||
|
}
|
||
|
public function getStockRecords($stocklocation_id = 0)
|
||
|
{
|
||
|
$this->db->where("status", 1);
|
||
|
if ($stocklocation_id != 0) {
|
||
|
$this->db->where("stocklocations_id", $stocklocation_id);
|
||
|
}
|
||
|
$StockRecords = $this->db->get("tbl_stocks")->result();
|
||
|
foreach ($StockRecords as $StockRecord) {
|
||
|
$StockRecord->StockLocation = $this->db->where("stocklocation_id", $StockRecord->stocklocations_id)->get("tbl_stocklocations")->row();
|
||
|
$StockRecord->Item = $this->db->where("item_id", $StockRecord->items_id)->get("tbl_items")->row();
|
||
|
$StockRecord->Item->Unit = $this->db->where("unit_id", $StockRecord->Item->units_id)->get("tbl_units")->row();
|
||
|
}
|
||
|
return $StockRecords;
|
||
|
}
|
||
|
public function addPurchaseToStock($PurchaseDetails)
|
||
|
{
|
||
|
foreach ($PurchaseDetails as $PurchaseDetail) {
|
||
|
$TableData = array(
|
||
|
'stocklocations_id' => 1,
|
||
|
'ref_id' => $PurchaseDetail->purchases_id,
|
||
|
'title' => "Purchase",
|
||
|
'items_id' => $PurchaseDetail->items_id,
|
||
|
'qty' => $PurchaseDetail->qty,
|
||
|
'price' => $PurchaseDetail->rate,
|
||
|
'status' => 1,
|
||
|
);
|
||
|
$this->db->insert("tbl_stocks", $TableData);
|
||
|
}
|
||
|
}
|
||
|
public function addSalesToStock($SalesDetails)
|
||
|
{
|
||
|
foreach ($SalesDetails as $SalesDetail) {
|
||
|
$TableData = array(
|
||
|
'stocklocations_id' => 1,
|
||
|
'ref_id' => $SalesDetail->sales_id,
|
||
|
'title' => "Sales",
|
||
|
'items_id' => $SalesDetail->items_id,
|
||
|
'qty' => (-$SalesDetail->qty),
|
||
|
'price' => $SalesDetail->rate,
|
||
|
'status' => 1,
|
||
|
);
|
||
|
$this->db->insert("tbl_stocks", $TableData);
|
||
|
}
|
||
|
}
|
||
|
}
|