@php $nf0 = fn ($v) => number_format((float) $v, 0, ',', '.'); @endphp {{-- Kennzahlen: links der Katalog, rechts was er uns bringt --}}

Artikel im Katalog

{{ $nf0($kennzahlen['gesamt']) }}

Stand {{ $kennzahlen['stand'] ? \Carbon\Carbon::parse($kennzahlen['stand'])->format('d.m.Y H:i') : '–' }}

bei uns bekannt

{{ $nf0($kennzahlen['bekannt']) }}

{{ $nf0($kennzahlen['per_ean']) }} über EAN · {{ $nf0($kennzahlen['per_nr']) }} über Lief.-Nr. @if($kennzahlen['manuell'] > 0) · {{ $nf0($kennzahlen['manuell']) }} von Hand @endif

fehlt noch in der Wawi

@if($kennzahlen['fehlt_online'] === null || $kennzahlen['fehlt_offline'] === null) eine der beiden Warenwirtschaften ist gerade nicht erreichbar @else ohne Auslaufartikel · die Automatik pflegt {{ count((array) config('extrade.automatik.ziele', [])) > 1 ? 'beide' : 'eine' }} Warenwirtschaft{{ count((array) config('extrade.automatik.ziele', [])) > 1 ? 'en' : '' }} @endif

Felder zum Anreichern

{{ $nf0($potenzial['werte']) }}

@if($potenzial['ok']) in {{ $nf0($potenzial['artikel']) }} Artikeln, die wir führen @else {{ $potenzial['message'] }} @endif

@if($potenzial['ok'] && $potenzial['werte'] > 0)

Was der Katalog füllen kann

@foreach($potenzial['felder'] as $feld => $anzahl) {{ $feld }} {{ $nf0($anzahl) }} @endforeach

In der Anreicherungsdatei steht ausschließlich, was bei uns leer ist. Gepflegte Felder kommen nicht vor – der Import kann also nichts überschreiben. Preise sind bewusst nicht dabei: der Wert aus dem Portal ist der Listenpreis, nicht unser EK.

@endif {{-- Werkzeugleiste. Oben die Suche und die Fragen, die man taeglich stellt. Alles andere liegt eingeklappt darunter - sieben gleichwertige Auswahlfelder nebeneinander liest niemand. --}} @php $aktiv = []; $namen = ['suche' => 'Suche', 'art' => 'Artikelart', 'hersteller' => 'Hersteller', 'fehlt' => 'Fehlt in', 'bestand' => 'Beim Lieferanten', 'eol' => 'Auslaufartikel', 'seit' => 'Erstmals gesehen']; $klartext = [ 'fehlt' => ['online' => 'fehlt online', 'offline' => 'fehlt offline', 'beide' => 'fehlt in beiden'], 'bestand' => ['mit' => 'lieferbar', 'ohne' => 'nicht lieferbar'], 'eol' => ['nur' => 'nur Auslaufartikel', 'alle' => 'mit Auslaufartikeln'], 'seit' => ['1' => 'seit gestern', '7' => 'letzte 7 Tage', '30' => 'letzte 30 Tage'], 'kuenftig' => ['ja' => 'erscheint erst noch'], ]; foreach ($filter as $k => $v) { if ($v === '' || $v === 'alle' || ($k === 'eol' && $v === 'ohne')) { continue; } $aktiv[$k] = $klartext[$k][$v] ?? ($namen[$k] . ': ' . $v); } @endphp
@foreach($filter as $k => $v) @if($k !== 'suche' && $v !== '' && $v !== 'alle') @endif @endforeach Was der nächste Lauf anlegt
@foreach($schnell as $s) @php $istAktiv = collect($s['ziel'])->every(fn ($v, $k) => ($filter[$k] ?? null) === $v); @endphp {{ $s['text'] }} {{ $s['zahl'] === null ? '–' : $nf0($s['zahl']) }} @endforeach
@if($aktiv)
aktiv: @foreach($aktiv as $k => $text) {{ $text }} × @endforeach alle entfernen
@endif
Weitere Filter ▾
{{-- Stand der Automatik. Bedient wird hier nichts mehr: der Katalog haelt sich selbst nach, entschieden wird in JTL. --}}

Der Katalog hält sich selbst nach

Täglich um 03:20 holt die Suite den Lieferantenkatalog und legt in {{ collect((array) config('extrade.automatik.ziele', ['online'])) ->map(fn ($z) => config('extrade.ziele.' . $z . '.name', $z))->implode(' und ') }} alles an, was dort fehlt – mit Artikelnummer, Kategorie, Lieferant, Preis, Varianten und Bildern. Auslaufartikel des Lieferanten werden im eigenen Feld „Auslaufartikel“ gekennzeichnet. Ob ein Artikel ins Sortiment kommt, entscheidet die Pflege in JTL – nicht diese Seite.

Preise werden nur beim Anlegen gesetzt (VK netto = Listenpreis, UVP = Bruttopreis des Lieferanten); spätere Pflege in der Wawi bleibt unangetastet. Einkaufspreise liefert ExTrade nicht. @if(config('extrade.automatik.ohne_eol', true)) Bereits abgekündigte Artikel werden nicht neu angelegt. @endif

Letzter Lauf

@if($automatik)

{{ \Carbon\Carbon::parse($automatik['zeitpunkt'])->format('d.m.Y H:i') }} Uhr

    @foreach($automatik['zeilen'] as $zeile)
  • {{ $zeile }}
  • @endforeach
@else

noch nicht gelaufen – der erste Lauf ist heute Nacht.

@endif
{{-- Liste --}}
@forelse($treffer as $a) @empty @endforelse
Artikel Hersteller Kategorie Inhalt Nikotin Bestand Listenpreis bei uns vorhanden

{{ $a->name }}

{{ $a->source_number }} @if($a->ean) · EAN {{ $a->ean }} @endif @if($a->eol) · Auslauf @endif @if($a->available_from && $a->available_from->isFuture()) · ab {{ $a->available_from->format('d.m.Y') }} @elseif($a->coming_soon) · in Kürze @endif

{{ $a->manufacturer ?: '–' }} {{ $a->category ?: '–' }} {{ $a->volume_ml ? rtrim(rtrim(number_format($a->volume_ml, 2, ',', ''), '0'), ',') . ' ml' : '–' }} {{ $a->nicotine_mg !== null ? rtrim(rtrim(number_format($a->nicotine_mg, 2, ',', ''), '0'), ',') . ' mg' : '–' }} {{ $nf0($a->stock) }} {{ $a->price_net_list !== null ? number_format($a->price_net_list, 2, ',', '.') . ' €' : '–' }} @if($a->sku)
@csrf

{{ ['ean' => 'über EAN', 'liefnr' => 'über Lief.-Nr.', 'manuell' => 'von Hand', 'angelegt' => 'von uns angelegt'][$a->matched_by] ?? $a->matched_by }}

@else {{-- Noch nicht in der Wawi: der nächste Lauf legt ihn an. --}} wird angelegt @if($a->decision === 'ablehnen') · ausgenommen @endif @endif
@php $wo = $pruefer->fuer($a->sku, $vorhanden); @endphp
online {{ $wo['online'] ? '✓' : '–' }} offline {{ $wo['offline'] ? '✓' : '–' }}
Keine Artikel zu diesen Filtern. @if($kennzahlen['gesamt'] === 0) Der Katalog ist noch leer – „Katalog aktualisieren“ holt ihn beim Lieferanten. @endif
{{ $treffer->links() }}