Available Stock Amount
@php
$products = App\Models\Product::with('unit.related_unit')->get();
$purchase_price_tk = 0;
$selling_price_tk = 0;
foreach ($products as $key => $product) {
if ($product->unit?->related_unit == null) {
$inv_stock = App\Models\InvoiceItem::with('invoice')
->where('product_id', $product->id)
->sum('main_qty');
$pur_stock = App\Models\PurchaseItem::with('purchase')
->where('product_id', $product->id)
->sum('main_qty');
$rtn_stock = App\Models\ReturnItem::with('return')
->where('product_id', $product->id)
->sum('main_qty');
$rtn_pur = App\Models\ReturnPurchaseItem::where(
'product_id',
$product->id,
)->sum('main_qty');
$open_pro_stock = App\Models\Product::where('id', $product->id)->first()
->o_main_qty;
$total_stock =
(float) ($pur_stock + $open_pro_stock + $rtn_stock) -
($inv_stock + $rtn_pur);
$purchase_price = $total_stock * $product->purchase_price;
$selling_price = $total_stock * $product->selling_price;
} else {
//invoice
$inv_stock_main = App\Models\InvoiceItem::with('invoice')
->where('product_id', $product->id)
->sum('main_qty');
$inv_total_main = (float) ($inv_stock_main * $product->unit->related_value);
$inv_total_sub = App\Models\InvoiceItem::with('invoice')
->where('product_id', $product->id)
->sum('sub_qty');
$inv_total_stock = (float) ($inv_total_main + $inv_total_sub);
//return
$rtn_stock_main = App\Models\ReturnItem::with('return')
->where('product_id', $product->id)
->sum('main_qty');
$rtn_total_main = (float) ($rtn_stock_main * $product->unit->related_value);
$rtn_total_sub = App\Models\ReturnItem::with('return')
->where('product_id', $product->id)
->sum('sub_qty');
$rtn_total_stock = (float) ($rtn_total_main + $rtn_total_sub);
//purchase
$pur_stock_main = App\Models\PurchaseItem::with('purchase')
->where('product_id', $product->id)
->sum('main_qty');
$open_main_pro_stock = App\Models\Product::where('id', $product->id)->first()
->o_main_qty;
$main_pro = $open_main_pro_stock + $pur_stock_main;
$pur_total_main = (float) ($main_pro * $product->unit->related_value);
$pur_stock_sub = App\Models\PurchaseItem::with('purchase')
->where('product_id', $product->id)
->sum('sub_qty');
$open_main_pro_stock = App\Models\Product::where('id', $product->id)->first()
->o_sub_qty;
$pur_total_stock =
(float) ($pur_total_main + $open_main_pro_stock + $pur_stock_sub);
$total_stock = $pur_total_stock + $rtn_total_stock - $inv_total_stock;
$p_value = $product->purchase_price / $product->unit->related_value;
$s_value = $product->selling_price / $product->unit->related_value;
$purchase_price = $total_stock * $p_value;
$selling_price = $total_stock * $s_value;
}
$purchase_price_tk += $purchase_price;
$selling_price_tk += $selling_price;
}
@endphp
{{-- @php
$products = App\Models\Product::with('unit.related_unit')->get();
$purchase_price_tk = 0;
$selling_price_tk = 0;
foreach ($products as $key => $product) {
if ($product->unit?->related_unit == null) {
// Fetch purchase items in FIFO order
$purchaseItems = App\Models\PurchaseItem::where('product_id', $product->id)
->orderBy('created_at', 'asc') // FIFO
->get();
// Get total sold quantity
$sold_qty = App\Models\InvoiceItem::where('product_id', $product->id)->sum(
'main_qty',
);
// Handle returns (adding returned stock)
$rtn_stock = App\Models\ReturnItem::where('product_id', $product->id)->sum(
'main_qty',
);
$total_stock = 0;
$purchase_price = 0;
foreach ($purchaseItems as $purchaseItem) {
if ($sold_qty > 0) {
// Deduct sold quantity from purchase stock
if ($purchaseItem->main_qty <= $sold_qty) {
$sold_qty -= $purchaseItem->main_qty;
} else {
// Calculate the remaining stock from this batch
$remaining_qty = $purchaseItem->main_qty - $sold_qty;
$total_stock += $remaining_qty;
$purchase_price += $remaining_qty * $purchaseItem->rate;
$sold_qty = 0; // all sold, no further deduction needed
}
} else {
// If no sales left to deduct, simply add the stock
$total_stock += $purchaseItem->main_qty;
$purchase_price += $purchaseItem->main_qty * $purchaseItem->rate;
}
}
// dd($purchase_price);
// Adjust for return stock
$total_stock += $rtn_stock;
// Calculate selling price
$selling_price = $total_stock * $product->selling_price;
} else {
// Handle the case with related units similarly
}
$purchase_price_tk = $purchase_price;
$selling_price_tk = $selling_price;
}
@endphp --}}
{{ number_format($purchase_price_tk, 2) }}
TK