{{-- Filial- und Zentrallagerbestellung sind derselbe Vorgang auf zwei Geltungsbereichen. Sie bleiben getrennte Seiten - dahinter liegen zwei Tabellen, zwei Rechenlaeufe und ganz andere Steuerelemente (Filter, Senden je Filiale, Skip, Riccardo-Weg gegen eine Liste mit einem Knopf). Eine Seite mit "wenn Zentrallager"-Abzweigungen waere unuebersichtlicher als zwei klare. Was fehlte, war nur der Weg dazwischen (07.09.2026). --}}
Filialen Zentrallager 94
@php $nf0 = fn ($v) => number_format((float) $v, 0, ',', '.'); // Ein einzelner Filial-Blick (Filter gesetzt oder nur eine Filiale) zeigt // die Positionstabellen sofort; die Gesamtsicht startet eingeklappt. $startOffen = request()->filled('branch_id') || $orders->count() === 1; // Farbwelt je Lieferant, damit die Belege auf einen Blick unterscheidbar sind. $lieferantenFarbe = fn ($id) => match ((int) $id) { 2 => ['border-blue-300', 'bg-blue-50', 'text-blue-800'], // ExTrade: taeglich 3 => ['border-purple-300', 'bg-purple-50', 'text-purple-800'], // Riccardo: woechentlich 1 => ['border-teal-300', 'bg-teal-50', 'text-teal-800'], // Nico: woechentlich default => ['border-red-400', 'bg-red-50', 'text-red-700'], // ohne Lieferant }; $rhythmus = fn ($id) => match ((int) $id) { 2 => 'Bestellung täglich 07:00', 1, 3 => 'Bestellung montags 07:00', default => 'nicht bestellbar', }; // ExTrade-Direktversand (Framework 02.09.2026, API-Definition folgt). $extradeBereit = app(\App\Services\ExTrade\ExTradeOrderService::class)->istKonfiguriert(); $extradeGesendet = fn ($branchId) => \App\Models\SupplierOrder::heuteGesendet( \App\Services\ExTrade\ExTradeOrderService::SUPPLIER_ID, 'branch', $branchId, ); // Riccardo (Vorgabe 07.09.2026): Auftrag in der Online-Wawi + Ameise-CSV // fuer die Offline-Wawi, beides ueber die Vorschauseite. $riccardoGesendet = fn ($branchId) => \App\Models\SupplierOrder::heuteGesendet( \App\Services\Riccardo\RiccardoOrderService::SUPPLIER_ID, 'branch', $branchId, ); @endphp @if(session('success'))
{{ session('success') }}
@endif @if(session('error'))
{{ session('error') }}
@endif {{-- Altbestand-Warnung: darf im Normalbetrieb nie erscheinen, weil jeder Rechenlauf nicht bestellte Vorschlaege von Vortagen entfernt. --}} @if(($summary['stale'] ?? 0) > 0)

{{ $nf0($summary['stale']) }} Positionen ({{ $nf0($summary['stale_units']) }} Stück) stammen noch vom {{ \Illuminate\Support\Carbon::parse($summary['stale_oldest'])->format('d.m.Y') }} und nicht vom heutigen Lauf.

Ihre Mengen beruhen auf den Beständen von damals – nicht ungeprüft mitbestellen. Normalerweise räumt jeder Rechenlauf solche Positionen weg; dass sie hier stehen, heißt: der Lauf für diesen Lieferanten ist seitdem nicht mehr durchgelaufen. Bitte neu rechnen lassen.

@endif {{-- Kennzahlen --}}

Filialen mit Bestellung

{{ $nf0($summary['branches']) }}

Positionen

{{ $nf0($summary['positions']) }}

Stück gesamt

{{ $nf0($summary['units']) }}

Ohne Lieferant

{{ $nf0($summary['no_supplier']) }}

{{-- Werkzeugleiste: Filter links, Sammelexporte rechts --}}
Reset Zur Übersicht
@if($suppliers->isNotEmpty() || $summary['no_supplier'] > 0)
Sammelexport @foreach($suppliers as $s) {{ \Illuminate\Support\Str::before($s->supplier_name, ' GmbH') }} – CSV @endforeach @if($summary['no_supplier'] > 0) Ohne Lieferant – CSV @endif
@endif

Angezeigt wird nur, was tatsächlich bestellt wird (offene Positionen mit Menge > 0). Je Filiale und Lieferant entsteht ein eigener Beleg. Sammelexport = alle Filialen eines Lieferanten in einer Datei.

{{-- Sprungleiste zu den Filialen --}} @if($orders->count() > 1)
@foreach($orders as $branchId => $bySupplier) @php $b = $bySupplier->first()->first()->branch; @endphp {{ $b->name }} {{ $bySupplier->flatten(1)->count() }} @if($bySupplier->has(0)) @endif @endforeach
@endif {{-- Bestellungen je Filiale und Lieferant --}} @forelse($orders as $branchId => $bySupplier) @php $branch = $bySupplier->first()->first()->branch; @endphp

{{ $branch->name }}

JTL-Lager {{ $branch->jtl_branch_id ?: '–' }} · {{ $bySupplier->flatten(1)->count() }} Positionen · {{ $nf0($bySupplier->flatten(1)->sum('order_quantity')) }} Stück · {{ $bySupplier->count() }} {{ $bySupplier->count() === 1 ? 'Beleg' : 'Belege' }}
@foreach($bySupplier as $supplierId => $items) @php $ohneLieferant = (int) $supplierId === 0; [$rand, $kopfBg, $kopfText] = $lieferantenFarbe($supplierId); @endphp
{{-- Belegkopf: klickbar zum Auf-/Zuklappen (div statt button, damit Export-Link und Senden-Formular gueltig darin liegen) --}}

{{ $ohneLieferant ? 'Ohne hinterlegten Lieferanten' : $items->first()->supplier_name }}

@if($ohneLieferant) Nicht bestellbar – in JTL ist für diese Artikel kein Lieferant gepflegt @else {{ $rhythmus($supplierId) }} @endif

{{ $items->count() }} Positionen · {{ $nf0($items->sum('order_quantity')) }} Stück

CSV @if((int) $supplierId === 2) @php $sendung = $extradeGesendet($branchId); @endphp @if($sendung) ✓ {{ $sendung->sent_at?->format('H:i') }} Uhr @elseif($extradeBereit)
@csrf
@else @endif @endif {{-- Riccardo laeuft ueber zwei Systeme (Auftrag Online-Wawi + Lieferantenbestellung Offline-Wawi), deshalb kein direkter Senden-Knopf, sondern der Weg ueber die Vorschau: dort wird die Lieferanschrift geprueft, bevor etwas angelegt wird. --}} @if((int) $supplierId === 3) @php $ricSendung = $riccardoGesendet($branchId); @endphp @if($ricSendung) ✓ {{ $ricSendung->sent_at?->format('H:i') }} Uhr @else Bestellen … @endif @endif
{{-- Positionen --}}
@foreach($items as $p) @endforeach
Artikel Bestand Dringlichkeit Meldebestand Bestellmenge

{{ $p->article_name }}

{{ $p->article_sku ?: '–' }}

{{ $nf0($p->current_stock) }} @if($p->severity() === 'out') Ausverkauft @elseif($p->severity() === 'critical') Unter Sicherheitsbest. @else Nachbestellen @endif @if(!is_null($p->days_of_stock) && $p->days_of_stock > 0)

reicht ~{{ $p->days_of_stock }} T

@endif
{{ $nf0($p->reorder_point) }} {{ $nf0($p->order_quantity) }}
Detail
@csrf @method('PATCH')
Summe {{ $nf0($items->sum('order_quantity')) }}
@endforeach @empty
Aktuell keine geplante Bestellung. Die Berechnung läuft automatisch – ExTrade täglich 04:30, Riccardo Online & Nico montags 01:00 (zur Übersicht).
@endforelse