@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 ($tabs as $t) {{ $t['label'] }} @endforeach
Movements CSV Summary CSV @if ($binItem) Bin card CSV @endif
@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')
Reset
@forelse ($movements as $m) @empty @endforelse
Date Item Store Type In Out Unit cost Value Balance after Document By
{{ $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 }}
No movements match these filters.
@elseif ($tab === 'summary')

Opening to closing rollup per item

{{ $summary->count() }} item(s)
@forelse ($summary as $r) @empty @endforelse
Item Opening Receipts Issues Transfer in Transfer out Waste Adjustment Closing
{{ $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']) }}
Nothing posted to the ledger yet.
@else
@forelse ($binMovements as $m) @empty @endforelse
Date Store Type Document In Out Unit cost Balance after By
{{ $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 }}
{{ $binItem ? 'No movements posted for this item yet.' : 'Select an item to open its bin card.' }}
@endif
@endsection