@php // Anzeigewerte hier aufbereiten, damit die Tabelle im Browser nur noch // sortieren und filtern muss - Zahlen bleiben Zahlen, sonst sortiert // "10" vor "9". $zeilen = ($daten['artikel'] ?? collect())->map(fn ($a) => [ 'sku' => $a['sku'], 'name' => $a['name'], 'bestand' => (float) $a['bestand'], 'tag' => (float) $a['tag'], 'reichweite' => $a['reichweite'], 'letzter' => $a['letzter'] ? \Carbon\Carbon::parse($a['letzter'])->format('d.m.Y') : '–', 'letzterSort'=> $a['letzter'] ? \Carbon\Carbon::parse($a['letzter'])->timestamp : 0, 'zustand' => $a['zustand'], 'rang' => ['leer' => 0, 'knapp' => 1, 'gedeckt' => 2][$a['zustand']], 'imLauf' => $a['imLauf'], 'ohne' => ! $a['imLauf'] && in_array($a['zustand'], ['leer', 'knapp'], true), 'nachschub' => ! $a['imLauf'] ? 'nicht im Lauf' : ((float) $a['bestellt'] > 0 ? 'bestellt ' . (int) $a['bestellt'] . ' · ' . \Illuminate\Support\Str::before($a['lieferant'], ' GmbH') : ($a['grund'] ?: 'kein Bedarf')), 'nachschubSort' => ! $a['imLauf'] ? 0 : ((float) $a['bestellt'] > 0 ? 2 : 1), ])->values(); @endphp

Rastersortiment je Filiale

Das Raster ist nicht gepflegt, sondern gemessen: aus den Kassenbons der letzten 90 Tage bestimmt die Suite je Filiale, welche Sorten Stammkunden gezielt kaufen (Bindungsklasse S). Es verschiebt sich also mit dem Kaufverhalten und ist je Filiale verschieden, ohne dass jemand Listen pflegt – dafür taucht eine neu gelistete Sorte erst auf, wenn sie sich verkauft hat.

Zusammengeführt sind hier drei Quellen, die sonst nirgends nebeneinander stehen: Bindungsklasse aus der Offline-Wawi, Bestand aus der Filial-Wawi, Absatz aus der Verkaufshistorie.

@if($branch) Stand {{ $daten['stand'] }}, 30 Minuten zwischengespeichert @endif
@if($branch && $daten) @if($daten['anzahl'] === 0)

Für {{ $branch->name }} konnte kein Raster bestimmt werden. Das passiert, wenn die Offline-Wawi nicht erreichbar ist oder für diese Filiale keine Kassenbons vorliegen (Feld „Shop-Id" in den Filialstammdaten).

@else
@foreach([ ['Rasterartikel', $daten['anzahl'], 'text-gray-900', 'alle'], ['leer', $daten['leer'], $daten['leer'] > 0 ? 'text-red-700' : 'text-gray-400', 'leer'], ['knapp (< 7 Tage)', $daten['knapp'], $daten['knapp'] > 0 ? 'text-amber-700' : 'text-gray-400', 'knapp'], ['gedeckt', $daten['gedeckt'], 'text-emerald-700', 'gedeckt'], ['ohne Vorschlag', $daten['ohne_vorschlag'], $daten['ohne_vorschlag'] > 0 ? 'text-red-700' : 'text-gray-400', 'ohne'], ] as [$label, $wert, $farbe, $f]) @endforeach
@if($daten['ohne_vorschlag'] > 0)

{{ $daten['ohne_vorschlag'] }} Rasterartikel sind leer oder knapp und stehen in keinem Vorschlag. Hier greift der Nachschub nicht – typische Ursachen: kein Lieferant in JTL hinterlegt, Auslaufartikel-Kennzeichen gesetzt, oder der Artikel fehlt in der Bestandsliste der Filial-Wawi. Auf „ohne Vorschlag" klicken zeigt genau diese.

@endif
@foreach([ ['sku', 'Artikelnummer', 'text-left'], ['name', 'Artikel', 'text-left'], ['bestand', 'Bestand', 'text-right'], ['tag', 'pro Tag', 'text-right'], ['reichweite', 'reicht', 'text-right'], ['letzterSort', 'letzter Verkauf', 'text-left'], ['nachschubSort', 'im Nachschub', 'text-left'], ['rang', 'Zustand', 'text-left'], ] as [$feld, $titel, $ausrichtung]) @endforeach
{{ $titel }}
Keine Artikel in dieser Auswahl.

Spaltenüberschrift anklicken sortiert, nochmal klicken dreht die Richtung um. „reicht" = Bestand geteilt durch Tagesabsatz der letzten 8 Wochen, „knapp" ab weniger als 7 Tagen; Artikel ohne Absatz stehen beim Sortieren immer am Ende. „nicht im Lauf" heißt: der Rechenlauf hat diesen Artikel heute gar nicht betrachtet – unabhängig davon, ob er gebraucht wird.

@endif @endif