@extends('layouts.app')
@section('title', 'Stores Ledger')
@section('content')
@php
$money = fn ($v) => \App\Support\Fmt::money($v);
$num = fn ($v) => \App\Support\Fmt::plain($v, 2);
$day = fn ($v) => \App\Support\Fmt::day($v instanceof \DateTimeInterface ? $v->format('Y-m-d') : $v);
$sel = 'h-9 w-full rounded-lg border border-input bg-transparent px-3 text-sm outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50';
$th = 'px-4 py-2 text-left text-xs font-medium text-muted-foreground';
$thr = 'px-4 py-2 text-right text-xs font-medium text-muted-foreground';
$csv = fn ($name, $params = []) => route($name, array_filter($params, fn ($v) => $v !== 'all' && $v !== '' && $v !== 'both'));
$movParams = ['store' => $filters['store'], 'type' => $filters['type'], 'direction' => $filters['direction'],
'document' => $filters['document'], 'category' => $filters['category'],
'from' => $filters['from'], 'to' => $filters['to'], 'q' => $filters['q']];
$tabs = [
['key' => 'movements', 'label' => 'Movements', 'href' => route('kitchen.stores-ledger', $filters + ['tab' => 'movements'])],
['key' => 'summary', 'label' => 'Ledger summary', 'href' => route('kitchen.stores-ledger', $filters + ['tab' => 'summary'])],
['key' => 'bin', 'label' => 'Bin card', 'href' => route('kitchen.stores-ledger', $filters + ['tab' => 'bin'])],
];
@endphp
Every receipt, issue, transfer, waste and adjustment posted to the stores
Stores Ledger
@include('partials.flashes')
@foreach ([
['label' => 'Movements shown', 'value' => (string) $movements->count()],
['label' => 'Movements posted', 'value' => (string) $totalPosted],
['label' => 'Items tracked', 'value' => (string) $items->count()],
['label' => 'Items in summary', 'value' => (string) $summary->count()],
] as $card)
{{ $card['value'] }}
{{ $card['label'] }}
@endforeach
@if ($tab === 'movements')
| Date |
Item |
Store |
Type |
In |
Out |
Unit cost |
Value |
Balance after |
Document |
By |
@forelse ($movements as $m)
| {{ $day($m->moved_on) }} |
{{ $m->item?->name ?? '—' }} |
{{ $m->store?->name ?? '—' }} |
{{ $m->type }} |
{{ $m->qty_in > 0 ? $num($m->qty_in) : '—' }} |
{{ $m->qty_out > 0 ? $num($m->qty_out) : '—' }} |
{{ $money($m->unit_cost) }} |
{{ $money($m->value) }} |
{{ $num($m->balance_after) }} |
{{ $m->document ?: '—' }} |
{{ $m->by }} |
@empty
| No movements match these filters. |
@endforelse
@elseif ($tab === 'summary')
Opening to closing rollup per item
{{ $summary->count() }} item(s)
| Item |
Opening |
Receipts |
Issues |
Transfer in |
Transfer out |
Waste |
Adjustment |
Closing |
@forelse ($summary as $r)
| {{ $r['item'] }} |
{{ $num($r['opening']) }} |
{{ $num($r['receipts']) }} |
{{ $num($r['issues']) }} |
{{ $num($r['transfer_in']) }} |
{{ $num($r['transfer_out']) }} |
{{ $num($r['waste']) }} |
{{ \App\Support\Fmt::signed($r['adjustment']) }} |
{{ $num($r['closing']) }} |
@empty
| Nothing posted to the ledger yet. |
@endforelse
@else
| Date |
Store |
Type |
Document |
In |
Out |
Unit cost |
Balance after |
By |
@forelse ($binMovements as $m)
| {{ $day($m->moved_on) }} |
{{ $m->store?->name ?? '—' }} |
{{ $m->type }} |
{{ $m->document ?: '—' }} |
{{ $m->qty_in > 0 ? $num($m->qty_in) : '—' }} |
{{ $m->qty_out > 0 ? $num($m->qty_out) : '—' }} |
{{ $money($m->unit_cost) }} |
{{ $num($m->balance_after) }} |
{{ $m->by }} |
@empty
|
{{ $binItem ? 'No movements posted for this item yet.' : 'Select an item to open its bin card.' }}
|
@endforelse
@endif
@endsection