mivita/resources/views/dashboard/_abo_onetime.blade.php
Kevin 65b867f8ee 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>
2026-06-23 13:38:11 +00:00

25 lines
1.2 KiB
PHP

@if (!empty($oneTimeAbo))
<div class="d-flex col-xl-6 align-items-stretch">
<div class="card w-100 mb-4 border-primary">
<h5 class="card-header with-elements border-bottom bg-secondary">
<div class="card-header-title">
<i class="ion ion-md-add-circle text-primary mr-1"></i> {{ __('abo.onetime_card_hl') }}
</div>
</h5>
<div class="card-body">
<p>{{ __('abo.onetime_card_info') }}</p>
<p class="mb-0">
<span class="ion ion-md-calendar text-primary"></span>
<strong>{{ __('abo.abo_next_execution_date') }}:</strong>
{{ \Carbon\Carbon::parse($oneTimeAbo->next_date)->format('d.m.Y') }}
</p>
</div>
<div class="card-footer py-3">
<a href="{{ route('user_abos_detail', ['view' => 'me', 'id' => $oneTimeAbo->id]) }}"
class="btn btn-primary">
<i class="ion ion-ios-cart text-white mr-1"></i> {{ __('abo.add_onetime_product') }}
</a>
</div>
</div>
</div>
@endif