@php $nf0 = fn ($v) => number_format((float) $v, 0, ',', '.'); $nf2 = fn ($v) => number_format((float) $v, 2, ',', '.'); @endphp
Bestellungen Bedarf ohne Deckung Zentrallager 94
{{-- Kennzahlen --}}

Artikel

{{ $nf0($summe['artikel']) }}

@if($summe['zeilen'] > $summe['artikel'])

{{ $nf0($summe['zeilen']) }} Zeilen – einzelne Artikel kommen über zwei Lieferanten

@endif

Positionen (Artikel × Filiale)

{{ $nf0($summe['positionen']) }}

Fehlmenge

{{ $nf0($summe['stueck']) }}

Stück

Warenwert (EK)

{{ $nf0($summe['wert']) }} €

{{-- Werkzeugleiste --}}
@if(request()->hasAny(['branch_id','supplier','status','product_group','manufacturer','gebinde'])) Zurücksetzen @endif {{-- Hersteller und Gebinde haben keine eigene Auswahl - sie entstehen durch einen Klick in der Gliederung. Damit man sieht, dass sie greifen, stehen sie hier als Merker. --}} @foreach(['manufacturer' => 'Hersteller', 'gebinde' => 'Gebinde'] as $feld => $beschriftung) @if(request($feld)) {{ $beschriftung }}: {{ request($feld) }} × @endif @endforeach
{{-- Bei drei Ebenen ist ein Schalter fuer alle noetig; jede Ebene hoert auf dieselben beiden Ereignisse. --}} CSV

Fehlmenge = Bedarf minus zugeteilt. Enthalten sind auch teilweise gedeckte Positionen – ein Artikel, von dem 2 statt 10 Stück kommen, fehlt genauso. Verfügbar bei der Quelle ist der Bestand, gegen den gedeckelt wurde: Lager 94 bei Riccardo, der echte Bestand bei Niko, die Tagesmeldung bei ExTrade.

@if($zeilen->isEmpty())
Kein ungedeckter Bedarf – alles, was gebraucht wird, ist auch beschaffbar.
@else {{-- Ein Block je Warengruppe. Die Zwischensummen stehen im Kopf, damit auch eine zugeklappte Gruppe etwas aussagt. --}} @foreach($nachGruppe as $name => $gruppe)

{{ $name }}

{{ $nf0($gruppe['artikel']) }} Artikel · {{ $nf0($gruppe['positionen']) }} Positionen @if($gruppe['ohne_ware'] > 0) · {{ $nf0($gruppe['ohne_ware']) }} ohne Ware an der Quelle @endif

Bedarf {{ $nf0($gruppe['bedarf']) }}

fehlt {{ $nf0($gruppe['fehlt']) }}

{{ $nf0($gruppe['wert']) }} €

{{-- @click.stop, sonst klappt der Export die Gruppe zu. --}} CSV
{{-- Zweite Ebene: Hersteller innerhalb der Warengruppe. --}}
@foreach($gruppe['hersteller'] as $hName => $h)

{{ $hName }}

{{ $nf0($h['artikel']) }} Artikel · {{ $nf0($h['positionen']) }} Positionen @if($h['ohne_ware'] > 0) {{ $nf0($h['ohne_ware']) }} ohne Ware @endif
fehlt {{ $nf0($h['fehlt']) }} {{ $nf0($h['wert']) }} € CSV
{{-- Dritte Ebene: Gebinde. Bewusst als schmale Zeile und nicht als weiterer Block - sonst erschlaegt die Gliederung den Inhalt. --}}
@foreach($h['gebinde'] as $bName => $b)

{{ $bName }} · {{ $nf0($b['artikel']) }} Artikel · {{ $nf0($b['positionen']) }} Positionen

fehlt {{ $nf0($b['fehlt']) }} {{ $nf0($b['wert']) }} € CSV

@foreach($b['zeilen'] as $z) @endforeach
Artikel Lieferant Filialen Bedarf zugeteilt Fehlmenge bei der Quelle Wert EK

{{ $z->article_name }}

{{ $z->article_sku }} @if($z->supplier_sku && $z->supplier_sku !== $z->article_sku) · beim Lieferanten {{ $z->supplier_sku }} @endif @if($z->gebinde_quelle === 'aus dem Namen') · Gebinde geschätzt @endif

{{ $z->supplier_name ?: 'ohne Lieferant' }} {{ $z->filialen }} {{ $nf0($z->bedarf) }} {{ $nf0($z->zugeteilt) }} {{ $nf0($z->fehlt) }} @if($z->quelle === null) unbekannt @else {{ $nf0($z->quelle) }} @endif {{ $z->wert > 0 ? $nf2($z->wert) . ' €' : '–' }}
@endforeach
@endforeach
@endforeach

Nichts davon ist verloren: der nächste Lauf rechnet den Bedarf aus dem dann niedrigeren Bestand erneut – er kommt größer wieder, statt sich aufzuaddieren. Steht bei „bei der Quelle“ eine 0, ist es kein Verteilungsproblem, sondern schlicht keine Ware da. Gebinde kommt aus dem Artikelstamm; kursive Werte sind aus dem Artikelnamen abgeleitet, weil dort nichts gepflegt ist – bei Longfills nennt der Name die Aromamenge, die Flasche kann größer sein.

@endif