@extends('layouts.app') @section('title', 'Stock Expiry Report') @section('content')

Stock Expiry Report

Monitoring product freshness and inventory shelf life

Refresh
Items with Expiry

{{ number_format($totalItems) }}

Tracked in inventory
Expired Items

{{ number_format($expiredItems) }}

Requires immediate removal
Expiring in 30 Days

{{ number_format($expiringSoonItems) }}

Prioritize for sale
Expiry Inventory Details
Showing {{ $expiryItems->firstItem() ?: 0 }} to {{ $expiryItems->lastItem() ?: 0 }} of {{ $expiryItems->total() }} items
@forelse($expiryItems as $item) @php $expiryDate = $item->expiry_date ?: $item->exp_date; $today = \Carbon\Carbon::today(); $daysUntilExpiry = $expiryDate ? \Carbon\Carbon::parse($expiryDate)->diffInDays($today, false) : null; $statusClass = 'success'; $statusText = 'Valid'; if (!$expiryDate) { $statusClass = 'secondary'; $statusText = 'No Date'; } elseif ($daysUntilExpiry < 0) { $statusClass = 'danger'; $statusText = 'Expired'; } elseif ($daysUntilExpiry <= 30) { $statusClass = 'warning'; $statusText = 'Expiring Soon'; } @endphp @empty @endforelse
Product Name Supplier Purchase / Expiry Remaining Life Qty Value Status
{{ $item->product?->name ?? 'Deleted Product' }}
SKU: {{ $item->product?->sku ?? 'N/A' }}
{{ $item->purchase?->supplier?->name ?? 'N/A' }}
Purch: {{ $item->purchase?->purchase_date ? \Carbon\Carbon::parse($item->purchase->purchase_date)->format('d M, Y') : 'N/A' }}
Exp: {{ $expiryDate ? \Carbon\Carbon::parse($expiryDate)->format('d M, Y') : 'Not Set' }}
@if($expiryDate)
@php $percent = $daysUntilExpiry < 0 ? 0 : min(100, ($daysUntilExpiry / 365) * 100); @endphp
{{ $daysUntilExpiry < 0 ? abs($daysUntilExpiry) . ' days ago' : $daysUntilExpiry . ' days' }} @else - @endif
{{ number_format($item->quantity) }} {{ formatCurrency($item->quantity * $item->unit_cost) }} {{ $statusText }}
No stock expiry items found for the selected filters.
@if($expiryItems->hasPages()) @endif
@endsection