@extends('layouts.admin-simple') @section('title', 'Item Details - ' . $item->item_code) @section('breadcrumb') @endsection @section('page-title')

{{ $item->item_code }} - Detailed Analysis

{{ $item->item_description }}

arrow_back Back to Report
@endsection @section('content')
info Item Information
Item Code: {{ $item->item_code }}
Description: {{ $item->item_description }}
Category: {{ $item->category->category_name ?? 'Unknown' }}
Unit of Measure: {{ $item->unit_of_measure }}
Total Quantity: {{ number_format($inventoryDetails->sum('quantity'), 2) }} {{ $item->unit_of_measure }}
Total Value: AED {{ number_format($inventoryDetails->sum('total_value'), 2) }}
Purchase History: {{ $pricingHistory->count() }} purchase operations
Storage Locations: {{ $inventoryDetails->groupBy('division')->count() }} divisions
attach_money Purchase Price History ({{ $pricingHistory->count() }} records)
@forelse($pricingHistory as $purchase) @empty @endforelse
Date Operation Supplier Quantity Unit Price (Original) Unit Price (د.إ) Total Value (د.إ) Batch
{{ $purchase->date->format('d M, Y') }} {{ $purchase->operation_number }} {{ $purchase->supplier }} {{ number_format($purchase->quantity, 2) }} {{ $purchase->currency }} {{ number_format($purchase->original_unit_price, 2) }} AED {{ number_format($purchase->unit_price, 2) }} AED {{ number_format($purchase->total_price, 2) }} {{ $purchase->batch_number ?: '-' }}
No purchase history found
inventory_2 Current Inventory Breakdown ({{ $inventoryDetails->count() }} batches)
@forelse($inventoryDetails as $inventory) @empty @endforelse
Division Location Batch Number Quantity Unit Price Total Value Production Date Expiry Date Days to Expiry Status
{{ $inventory->division }} {{ $inventory->location ?: '-' }} {{ $inventory->batch_number ?: '-' }} {{ number_format($inventory->quantity, 2) }} {{ $item->unit_of_measure }} AED {{ number_format($inventory->unit_price, 2) }} AED {{ number_format($inventory->total_value, 2) }} {{ $inventory->production_date ? $inventory->production_date->format('d M, Y') : '-' }} @if($inventory->expiry_date) {{ $inventory->expiry_date->format('d M, Y') }} @else - @endif @if($inventory->days_until_expiry !== null) @if($inventory->days_until_expiry < 0) Expired ({{ abs($inventory->days_until_expiry) }} days ago) @elseif($inventory->days_until_expiry <= 30) {{ $inventory->days_until_expiry }} days @else {{ $inventory->days_until_expiry }} days @endif @else - @endif {{ ucfirst(str_replace('_', ' ', $inventory->status)) }}
No current inventory found
swap_vert Stock Movements ({{ $stockMovements->total() }} total)
Showing {{ $stockMovements->firstItem() ?? 0 }} - {{ $stockMovements->lastItem() ?? 0 }} of {{ $stockMovements->total() }}
@forelse($stockMovements as $movement) @php // Get reference number based on reference_type $referenceNumber = 'N/A'; $reference = null; // Map reference_type to model class $referenceModel = match($movement->reference_type) { 'incoming' => \App\Models\Warehouse\IncomingTransaction::class, 'supplier_delivery', 'material_request', 'foc_transfer' => \App\Models\Warehouse\IncomingOperation::class, 'outgoing', 'OutgoingTransaction', 'foc_dispatch' => \App\Models\Warehouse\OutgoingTransaction::class, 'return' => \App\Models\Warehouse\ReturnTransaction::class, 'DirectDelivery', 'direct_delivery', 'App\Models\DirectDelivery' => \App\Models\DirectDelivery::class, 'MaterialTransferRequest', 'material_transfer', 'App\Models\Warehouse\MaterialTransferRequest' => \App\Models\Warehouse\MaterialTransferRequest::class, 'material_transfer_issue' => \App\Models\Warehouse\MaterialTransferIssue::class, 'site_transfer' => \App\Models\Warehouse\MaterialSiteTransfer::class, 'opening_stock_import', 'condition_conversion' => \App\Models\Warehouse\IncomingOperation::class, default => null }; if ($referenceModel && $movement->reference_id) { $reference = $referenceModel::find($movement->reference_id); } if ($reference) { if (method_exists($reference, 'getReferenceNumberAttribute') || isset($reference->reference_number)) { $referenceNumber = $reference->reference_number; } elseif (isset($reference->operation_number)) { $referenceNumber = $reference->operation_number; } elseif (isset($reference->material_request_number)) { $referenceNumber = $reference->material_request_number; } elseif (isset($reference->return_number)) { $referenceNumber = $reference->return_number; } elseif (isset($reference->delivery_note_number)) { $referenceNumber = $reference->delivery_note_number ?: $reference->lpo_number; } elseif (isset($reference->lpo_number)) { $referenceNumber = $reference->lpo_number; } elseif (isset($reference->transfer_request_number)) { $referenceNumber = $reference->transfer_request_number; } elseif (isset($reference->delivery_number)) { $referenceNumber = $reference->delivery_number; } else { $referenceNumber = strtoupper(str_replace('_', '-', $movement->reference_type)) . '-' . str_pad($reference->id, 6, '0', STR_PAD_LEFT); } } elseif ($movement->reference_type === 'stock_adjustment') { $referenceNumber = 'ADJ-' . str_pad($movement->id, 6, '0', STR_PAD_LEFT); } elseif ($movement->reference_type) { $referenceNumber = strtoupper(str_replace('_', '-', $movement->reference_type)) . '-' . str_pad($movement->reference_id, 6, '0', STR_PAD_LEFT); } // Determine badge class based on movement type $badgeClass = match($movement->movement_type) { 'in', 'transfer_in' => 'badge-success', 'out', 'transfer_out' => 'badge-danger', 'return' => 'badge-info', 'adjustment' => 'badge-warning', 'transfer' => 'badge-primary', default => 'badge-secondary' }; $badgeText = match($movement->movement_type) { 'in' => 'Stock In', 'out' => 'Stock Out', 'transfer_in' => 'Transfer In', 'transfer_out' => 'Transfer Out', 'return' => 'Return', 'adjustment' => 'Adjustment', 'transfer' => 'Transfer', default => ucfirst(str_replace('_', ' ', $movement->movement_type)) }; // Determine if this movement increases or decreases stock $isIncrease = in_array($movement->movement_type, ['in', 'return', 'transfer_in']) || ($movement->movement_type === 'adjustment' && $movement->quantity_after > $movement->quantity_before); @endphp @empty @endforelse
Date Type Quantity Reference Notes
{{ $movement->created_at->format('d M, Y H:i') }} {{ $badgeText }} @if($isIncrease) +{{ number_format($movement->quantity_moved, 2) }} @else -{{ number_format($movement->quantity_moved, 2) }} @endif {{ $item->unit_of_measure }} {{ $referenceNumber }} {{ Str::limit($movement->notes, 50) ?? '-' }}
No stock movements found
@if($stockMovements->hasPages()) @endif
analytics Price Analysis
@if($pricingHistory->count() > 0)
Lowest Purchase Price: AED {{ number_format($pricingHistory->min('unit_price'), 2) }}
Highest Purchase Price: AED {{ number_format($pricingHistory->max('unit_price'), 2) }}
Average Purchase Price: AED {{ number_format($pricingHistory->avg('unit_price'), 2) }}
Current Weighted Average: AED {{ $inventoryDetails->sum('quantity') > 0 ? number_format($inventoryDetails->sum('total_value') / $inventoryDetails->sum('quantity'), 2) : '0.00' }}
Price Variance: AED {{ number_format($pricingHistory->max('unit_price') - $pricingHistory->min('unit_price'), 2) }}
@else

No pricing data available

@endif
donut_large Inventory Distribution
@if($inventoryDetails->count() > 0)
@foreach($inventoryDetails->groupBy('division') as $division => $items)
{{ $division }}
{{ $items->count() }} batches
{{ number_format($items->sum('quantity'), 2) }} {{ $item->unit_of_measure }}
AED {{ number_format($items->sum('total_value'), 2) }}
@endforeach
@else

No inventory distribution data available

@endif
@endsection @push('styles') @endpush @push('scripts') @endpush