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>
59 lines
2.9 KiB
PHP
59 lines
2.9 KiB
PHP
@php
|
|
$cartInstance = \App\Services\AboOrderCart::INSTANCE;
|
|
$taxFree = Yard::instance($cartInstance)->getUserTaxFree();
|
|
@endphp
|
|
<div class="card-header bg-primary">
|
|
<h5 class="font-weight-semibold mb-0 text-white"> <i class="fa fa-shopping-cart text-white"></i>
|
|
{{ __('abo.combined_summary_hl') }}
|
|
</h5>
|
|
</div>
|
|
<div class="card-body bg-warning-light" style="background-color: rgba(227, 227, 54, 0.5) !important;">
|
|
<table class="table table-product m-0">
|
|
<tbody>
|
|
@if (($summary['one_time']['gross'] ?? 0) > 0)
|
|
<tr>
|
|
<td class="small"><strong>{{ __('abo.onetime_subtotal') }}:</strong></td>
|
|
<td class="text-right small">{{ formatNumber($summary['one_time']['gross']) }} €</td>
|
|
</tr>
|
|
@endif
|
|
<tr>
|
|
<td class="small"><strong>{{ __('abo.abo_subtotal') }}:</strong></td>
|
|
<td class="text-right small">{{ formatNumber($summary['abo']['gross'] ?? 0) }} €</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="small no-border-top"><strong>{{ __('Delivery country') }}:</strong></td>
|
|
<td class="text-right small no-border-top">{{ Yard::instance($cartInstance)->getShippingCountryName() }}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="small no-border-top"><strong>{{ __('order.shipping_costs') }}:</strong></td>
|
|
<td class="text-right small no-border-top">
|
|
{{ $taxFree ? Yard::instance($cartInstance)->shippingNet() : Yard::instance($cartInstance)->shipping() }}
|
|
€</td>
|
|
</tr>
|
|
@if ($taxFree)
|
|
<tr>
|
|
<td class="small no-border-top"><strong>{{ __('order.sum_net') }}:</strong></td>
|
|
<td class="text-right small no-border-top">
|
|
{{ Yard::instance($cartInstance)->subtotalWithShipping() }} €</td>
|
|
</tr>
|
|
@else
|
|
<tr>
|
|
<td class="small no-border-top"><strong>{{ __('order.total_without_VAT') }}:</strong></td>
|
|
<td class="text-right small no-border-top">
|
|
{{ Yard::instance($cartInstance)->subtotalWithShipping() }} €</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="small no-border-top"><strong>{{ __('order.plus_VAT') }}:</strong></td>
|
|
<td class="text-right small no-border-top">{{ Yard::instance($cartInstance)->taxWithShipping() }} €
|
|
</td>
|
|
</tr>
|
|
@endif
|
|
<tr class="bg-white">
|
|
<td class="pt-2 pb-2"><strong>{{ __('order.total_sum') }}:</strong></td>
|
|
<td class="text-right font-weight-bold pt-2 pb-2">
|
|
{{ Yard::instance($cartInstance)->totalWithShipping() }} €</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|