@php // Der Baum geht als Ganzes in den Browser: Suchen und Aufklappen sollen // ohne Nachladen gehen. Zahlen bleiben Zahlen, damit sortiert werden kann. $js = collect($baum)->map(fn ($g) => [ 'name' => $g['name'], 'absatz' => (float) $g['absatz'], 'anzahl' => $g['anzahl'], 'kern' => $g['kern'], 'marken' => collect($g['marken'])->map(fn ($m) => [ 'name' => $m['name'], 'absatz' => (float) $m['absatz'], 'anzahl' => $m['anzahl'], 'kern' => $m['kern'], 'artikel' => collect($m['artikel'])->map(fn ($a) => [ 'sku' => $a['sku'], 'name' => $a['name'], 'absatz' => (float) $a['absatz'], 'proWoche' => round((float) $a['pro_woche'], 1), 'bestand' => (float) $a['bestand'], 'filialen' => $a['filialen'], 'kern' => $a['kern'], 'zentral' => round((float) $a['zentral'] * 100), 'trend' => $a['trend'], 'trendWert' => $a['trend_wert'] === null ? null : round((float) $a['trend_wert'] * 100), // Nur belegt, wenn eine Filiale gewaehlt ist - dann wird // aus der Sortimentsansicht die Rasteransicht. 'marge' => $a['marge'] === null ? null : round((float) $a['marge'] * 100), 'umsatz' => $a['umsatz'] === null ? null : round((float) $a['umsatz']), 'kapital' => $a['kapital'] === null ? null : round((float) $a['kapital']), 'leerIn' => $a['leer_in'] ?? 0, 'verkauftIn' => $a['verkauft_in'] ?? 0, 'variante' => $a['variante'] ?? null, 'raster' => $a['raster'] ?? false, 'reichweite' => $a['reichweite'] ?? null, 'zustand' => $a['zustand'] ?? null, 'imLauf' => $a['im_lauf'] ?? null, 'nachschub' => ! array_key_exists('im_lauf', $a) ? null : (! $a['im_lauf'] ? 'nicht im Lauf' : ((float) $a['bestellt'] > 0 ? 'bestellt ' . (int) $a['bestellt'] . ' · ' . \Illuminate\Support\Str::before((string) $a['lieferant'], ' GmbH') : ($a['grund'] ?: 'kein Bedarf'))), ])->values(), ])->values(), ])->values(); @endphp

Artikelsortiment

Spaltenüberschrift anklicken sortiert innerhalb des Herstellers, nochmal klicken dreht die Richtung um; leere Werte stehen immer am Ende. Gegliedert nach Warengruppe und Hersteller aus den Stammdaten der Offline-Wawi. Gezeigt werden nur Artikel, die sich im Auswertungszeitraum bewegt haben – sonst stünden hier über 10.000 Zeilen, von denen die Mehrzahl tot ist.

@if($branchId)

Es ist eine Filiale gewählt – die Ansicht zeigt daher deren Sicht: Bestand, Reichweite und Nachschubstatus dieser Filiale, und ob der Artikel dort Rastersortiment ist (Kennzeichen S). Über die Kacheln lässt sich auf Rasterartikel, leere, knappe oder solche ohne Vorschlag einschränken.

@endif

fehlt in zeigt, in wie vielen der Filialen, die den Artikel verkaufen, er gerade nicht im Regal steht. Das ist wichtig für die Flughöhe: ein Artikel, der wochenlang leer stand, sieht aus wie einer, den niemand will – ist aber nur nicht da gewesen. Marge ist EK gegen VK aus den Stammdaten; unter 25 % rot. Fehlt der EK (bei 4.260 Artikeln), bleibt sie leer.

Zentral heißt: in wie viel Prozent der Filialen der Artikel Kernsortiment ist (Stammkundensorte laut Kassenbons). Ein Artikel, der überall Kern ist, wiegt anders als einer mit gleichem Absatz in einer einzigen Filiale. Flughöhe vergleicht die letzten {{ $fenster['tage'] }} Tage mit den {{ $fenster['tage'] }} davor – verglichen werden Tagesdurchschnitte, nicht Summen. Die Fensterlänge richtet sich nach der vorhandenen Verkaufshistorie (höchstens 4 Wochen je Hälfte); unter 8 Stück im Gesamtzeitraum wird bewusst kein Trend ausgewiesen, weil aus „1 auf 2 Stück" sonst ein Aufwärtstrend von 100 % würde. @if(! $fenster['reicht']) Achtung: die Historie reicht für einen belastbaren Trend noch nicht aus. @endif

@php $kacheln = [ ['Artikel in Bewegung', number_format($summe['artikel'], 0, ',', '.'), 'text-gray-900', 'alle'], ['Absatz ' . ($fenster['jung'] + $fenster['alt']) . ' Tage', number_format($summe['absatz'], 0, ',', '.'), 'text-gray-900', null], ['Aufwärts', number_format($summe['aufwaerts'], 0, ',', '.'), 'text-emerald-700', 'aufwaerts'], ['Abwärts', number_format($summe['abwaerts'], 0, ',', '.'), 'text-red-700', 'abwaerts'], ['Neu', number_format($summe['neu'], 0, ',', '.'), 'text-blue-700', 'neu'], ['Umsatz im Zeitraum', number_format($summe['umsatz'], 0, ',', '.') . ' €', 'text-gray-900', null], ['Kapital im Bestand', number_format($summe['kapital'], 0, ',', '.') . ' €', 'text-gray-900', null], ['Lücken (Artikel × Filiale)', number_format($summe['luecken'], 0, ',', '.'), $summe['luecken'] > 0 ? 'text-red-700' : 'text-gray-400', 'luecke'], ]; if ($branchId) { $kacheln = array_merge($kacheln, [ ['Rasterartikel', number_format($summe['raster'], 0, ',', '.'), 'text-amber-700', 'raster'], ['davon leer', number_format($summe['leer'], 0, ',', '.'), $summe['leer'] > 0 ? 'text-red-700' : 'text-gray-400', 'leer'], ['davon knapp', number_format($summe['knapp'], 0, ',', '.'), $summe['knapp'] > 0 ? 'text-amber-700' : 'text-gray-400', 'knapp'], ['ohne Vorschlag', number_format($summe['ohne'], 0, ',', '.'), $summe['ohne'] > 0 ? 'text-red-700' : 'text-gray-400', 'ohne'], ]); } @endphp
@foreach($kacheln as [$label, $wert, $farbe, $f]) @if($f) @else

{{ $label }}

{{ $wert }}

@endif @endforeach
Keine Artikel in dieser Auswahl.