Abo Einmalprodukte: Phasen 5-7, konfigurierbare Sperrfristen, Lokalisierung & Dashboard
Rechnung/Lieferschein: - PDF-Gruppierung Abo- vs. Einmal-Artikel (is_abo_addon), rueckwaertskompatibel - Vorschau-Command sales:preview-invoice (umgeht Test-System-Gate, ohne Rechnungsnummer) Reminder-Mail (vorbereitet, Cron inaktiv): - MailAboExecutionReminder + Template, abo:send-execution-reminder, Spalte onetime_reminder_sent_for - Berater -> Sales Center, Kunde -> Portal; Vorschau abo:preview-reminder - Datum-Fix: formatDateDB() statt formatDate() (ICU-Format) Sperrfristen konfigurierbar (Admin-Settings): - abo-lock-days-change (Liefertag + Abo-Produkte), abo-lock-days-pause-cancel - Meldungen mit :lock-Platzhalter; Pausieren/Kuendigen vom Change-Lock entkoppelt - Abo-Produkt-Aenderungen im Lock-Fenster server- + clientseitig eingefroren - Selbstbedienung: Add-only/Lock nach $view (kein Admin-Bypass), Stale-Cache-Fix beim Mengen-Update Dashboard: - Einmalprodukte-Card + Team-Abo-KPI-Card, News-Card responsiv (col-xl-6) Lokalisierung: - Sprachdateien en/es/fr vollstaendig mit de synchronisiert (inkl. marketingplan/portal) - LocalizationSyncTest sichert Key-Gleichheit ab Tests: AboOneTimeInvoiceGrouping, AboExecutionReminder, AboLockDaysSetting, AboOnetimeDashboardAndMail, PreviewInvoiceCommand, TeamAboOverview + erweiterte View-Tests Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
9f996a7f1b
commit
65b867f8ee
96 changed files with 4154 additions and 1189 deletions
|
|
@ -10,7 +10,29 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($shopping_order->shopping_order_items as $shopping_order_item)
|
||||
@php
|
||||
$deliveryItems = $shopping_order->shopping_order_items->sortBy(fn ($item) => $item->is_abo_addon ? 1 : 0)->values();
|
||||
$hasAddonItems = $deliveryItems->contains(fn ($item) => $item->is_abo_addon);
|
||||
$addonHeadingShown = false;
|
||||
$aboHeadingShown = false;
|
||||
@endphp
|
||||
@foreach($deliveryItems as $shopping_order_item)
|
||||
@if($hasAddonItems && ! $shopping_order_item->is_abo_addon && ! $aboHeadingShown)
|
||||
@php($aboHeadingShown = true)
|
||||
<tr class="item">
|
||||
<td class="small text-left" colspan="3" style="background-color: #f2f2f2;">
|
||||
<b>{{ __('pdf.abo_items_heading') }}</b>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($hasAddonItems && $shopping_order_item->is_abo_addon && ! $addonHeadingShown)
|
||||
@php($addonHeadingShown = true)
|
||||
<tr class="item">
|
||||
<td class="small text-left" colspan="3" style="background-color: #f2f2f2;">
|
||||
<b>{{ __('pdf.abo_addon_items_heading') }}</b>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr class="item">
|
||||
<td class="small text-left">
|
||||
{{ $shopping_order_item->product->number }}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,30 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($shopping_order->shopping_order_items as $shopping_order_item)
|
||||
@php
|
||||
$invoiceItems = $shopping_order->shopping_order_items->sortBy(fn ($item) => $item->is_abo_addon ? 1 : 0)->values();
|
||||
$hasAddonItems = $invoiceItems->contains(fn ($item) => $item->is_abo_addon);
|
||||
$headingColspan = $shopping_order->payment_for === 6 ? 6 : 7;
|
||||
$addonHeadingShown = false;
|
||||
$aboHeadingShown = false;
|
||||
@endphp
|
||||
@foreach($invoiceItems as $shopping_order_item)
|
||||
@if($hasAddonItems && ! $shopping_order_item->is_abo_addon && ! $aboHeadingShown)
|
||||
@php($aboHeadingShown = true)
|
||||
<tr class="item">
|
||||
<td class="small text-left" colspan="{{ $headingColspan }}" style="background-color: #f2f2f2;">
|
||||
<b>{{ __('pdf.abo_items_heading') }}</b>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@if($hasAddonItems && $shopping_order_item->is_abo_addon && ! $addonHeadingShown)
|
||||
@php($addonHeadingShown = true)
|
||||
<tr class="item">
|
||||
<td class="small text-left" colspan="{{ $headingColspan }}" style="background-color: #f2f2f2;">
|
||||
<b>{{ __('pdf.abo_addon_items_heading') }}</b>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
<tr class="item">
|
||||
<td class="small text-left">
|
||||
{{ $shopping_order_item->product->number }}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue