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
|
|
@ -39,10 +39,10 @@ return [
|
|||
'warning_next_date_soon_select' => 'Hinweis: Die nächste Abo-Ausführung ist bereits in :placeholder_days Tagen (:placeholder_date).',
|
||||
'warning_next_date_info' => 'Die nächste Abo-Ausführung ist in :days Tagen am :date.',
|
||||
'info_next_execution_select' => 'Nächste Ausführung: in :placeholder_days Tagen am :placeholder_date.',
|
||||
'error_change_locked' => 'Änderungen sind nicht mehr möglich. Die nächste Ausführung ist in :days Tagen. Änderungen müssen mindestens 10 Tage vorher erfolgen.',
|
||||
'error_abo_interval_too_soon' => 'Der gewählte Liefertag liegt nur :days Tage entfernt. Bitte wähle einen Liefertag, der mindestens 10 Tage in der Zukunft liegt.',
|
||||
'error_cancel_locked' => 'Eine Kündigung ist nicht mehr möglich. Die nächste Ausführung ist in :days Tagen. Kündigungen müssen mindestens 3 Tage vorher erfolgen.',
|
||||
'error_pause_locked' => 'Das Abo kann nicht mehr pausiert werden. Die nächste Ausführung ist in :days Tagen. Pausieren muss mindestens 3 Tage vorher erfolgen.',
|
||||
'error_change_locked' => 'Änderungen sind nicht mehr möglich. Die nächste Ausführung ist in :days Tagen. Änderungen müssen mindestens :lock Tage vorher erfolgen.',
|
||||
'error_abo_interval_too_soon' => 'Der gewählte Liefertag liegt nur :days Tage entfernt. Bitte wähle einen Liefertag, der mindestens :lock Tage in der Zukunft liegt.',
|
||||
'error_cancel_locked' => 'Eine Kündigung ist nicht mehr möglich. Die nächste Ausführung ist in :days Tagen. Kündigungen müssen mindestens :lock Tage vorher erfolgen.',
|
||||
'error_pause_locked' => 'Das Abo kann nicht mehr pausiert werden. Die nächste Ausführung ist in :days Tagen. Pausieren muss mindestens :lock Tage vorher erfolgen.',
|
||||
'error_next_date' => 'Das Datum für die nächste Ausführung nicht korrekt',
|
||||
'checkout_mail_abo_hl' => 'Dein Abo / regelmäßige Lieferung.',
|
||||
'checkout_mail_abo_start' => 'Dein Abo wurde erfolgreich mit folgenden Einstellungen angelegt:',
|
||||
|
|
@ -95,6 +95,22 @@ return [
|
|||
'product_prices_career_level_info' => 'Die Produktpreise werden entsprechend Deinem Karriere-Level <strong>:user_level_name</strong> abzüglich <strong>:user_level_margin %</strong> Marge angezeigt und brechnet.',
|
||||
'product_prices_career_level_cpay_info' => 'Die Produktpreise werden als Kunden VK-Preise angezeigt, nach Abschluss der Kundenzahlung erhälst du Deine Provision entsprechend Deinem Karriere-Level <strong>:user_level_name</strong> Provision <strong>:user_level_margin %</strong>.',
|
||||
'error_email_has_abo' => 'Für die E-Mail-Adresse :email ist bereits ein Abonnement vorhanden.',
|
||||
'error_user_has_initiated_abo' => 'Für dich ist bereits ein Abo angelegt oder die Zahlung dazu läuft noch. Bitte prüfe den Status unter "Meine Abos".',
|
||||
'pending_payment_waiting_title' => 'Abo angelegt - Zahlung noch nicht bestätigt',
|
||||
'pending_payment_waiting_copy' => 'Der Checkout wurde abgeschlossen. Wir warten noch auf den Zahlungsstatus des Zahlungsanbieters. Solange kein Status eingegangen ist, kann dieser Eintrag nicht gelöscht werden.',
|
||||
'pending_payment_processing_title' => 'Abo angelegt - Zahlung wird verarbeitet',
|
||||
'pending_payment_processing_copy' => 'Der Zahlungsanbieter hat bereits einen Status geliefert. Bitte warte auf die finale Zahlungsbestätigung.',
|
||||
'pending_payment_failed_title' => 'Zahlung fehlgeschlagen',
|
||||
'pending_payment_failed_copy' => 'Die Zahlung für dieses Abo konnte nicht abgeschlossen werden. Du kannst diesen Eintrag löschen und das Abo anschließend neu anlegen.',
|
||||
'pending_delete_button' => 'Eintrag löschen',
|
||||
'pending_delete_success' => 'Der nicht bestätigte Abo-Eintrag wurde gelöscht.',
|
||||
'pending_delete_not_allowed' => 'Dieser Abo-Eintrag kann noch nicht gelöscht werden, weil die Zahlung noch nicht final fehlgeschlagen ist.',
|
||||
'payment_link_sent_title' => 'Abo-Zahlungslink gesendet',
|
||||
'payment_link_sent_copy' => 'Der Zahlungslink wurde an den Kunden gesendet. Solange noch keine Zahlung gestartet wurde, kann dieser Eintrag gelöscht werden.',
|
||||
'payment_link_processing_copy' => 'Der Kunde hat die Zahlung gestartet. Wir warten auf den finalen Zahlungsstatus des Zahlungsanbieters. In diesem Zustand kann der Eintrag nicht gelöscht werden.',
|
||||
'payment_link_failed_copy' => 'Die Zahlung zu diesem Abo-Zahlungslink ist fehlgeschlagen oder wurde abgebrochen. Du kannst den Eintrag löschen und anschließend einen neuen Zahlungslink erstellen.',
|
||||
'payment_link_delete_success' => 'Der Abo-Zahlungslink wurde gelöscht.',
|
||||
'payment_link_delete_not_allowed' => 'Dieser Zahlungslink kann aktuell nicht gelöscht werden, weil die Zahlung bereits läuft oder abgeschlossen ist.',
|
||||
'abo_assigned' => 'Abo aktiv',
|
||||
'base' => 'Basis',
|
||||
'upgrade' => 'Upgrade',
|
||||
|
|
@ -175,6 +191,37 @@ return [
|
|||
'extern_done_error' => 'Die Bestellung konnte nicht als erledigt markiert werden: :error',
|
||||
'team_subscriptions' => 'Team Abos',
|
||||
'team_customer_abos' => 'Team Kunden-Abos',
|
||||
'team_total' => 'Gesamt',
|
||||
'team_line' => ':line. Ebene',
|
||||
'filter_period' => 'Zeitraum:',
|
||||
'team_total_abos' => 'Gesamtabos im Team',
|
||||
'team_own_abos' => 'Eigen-Abos',
|
||||
'team_members_with_abo' => 'Mit eigenem Abo',
|
||||
'team_by_level' => 'Abos nach Ebenen',
|
||||
'new_this_month' => 'neu im Monat',
|
||||
'with_own_abo' => 'Mit Eigen-Abo',
|
||||
'consultants' => 'Berater',
|
||||
'level' => 'Ebene',
|
||||
'own_abo' => 'Eigen-Abo',
|
||||
'customer_abos_count' => 'Kundenabos',
|
||||
'career_level' => 'Karriere-Level',
|
||||
'of' => 'von',
|
||||
'yes' => 'Ja',
|
||||
'no' => 'Nein',
|
||||
'shop_1000' => '1000-Punkte-Shops',
|
||||
'next_execution' => 'Nächste Ausführung',
|
||||
'executions_count' => 'Ausführungen',
|
||||
'abo_count_points' => 'Punkte',
|
||||
'no_own_abo' => 'Kein eigenes Abo vorhanden.',
|
||||
'no_customer_abos' => 'Keine Kunden-Abos vorhanden.',
|
||||
'team_growth' => 'Abo-Wachstum (Neuzugänge je Monat)',
|
||||
'month' => 'Monat',
|
||||
'new_own_abos' => 'Neue Eigen-Abos',
|
||||
'new_customer_abos' => 'Neue Kunden-Abos',
|
||||
'new_total' => 'Neu gesamt',
|
||||
'filter' => 'Filtern',
|
||||
'reset' => 'Zurücksetzen',
|
||||
'filter_added_period' => 'Hinzugekommen im Zeitraum:',
|
||||
'chart_monthly_abos' => 'Abos pro Monat',
|
||||
'chart_active_abos' => 'Aktive Abos',
|
||||
'chart_abos_label' => 'Abos',
|
||||
|
|
|
|||
|
|
@ -1,24 +1,24 @@
|
|||
<?php
|
||||
|
||||
return array (
|
||||
'' => '',
|
||||
'cancel' => 'abbrechen',
|
||||
'confirm' => 'bestätigen',
|
||||
'file_is_too_big' => 'Die Datei ist zu groß<br>max. $0 MB',
|
||||
'image_too_small ' => 'Bild zu klein<br>min. $0 Pixel',
|
||||
'invalid_file' => 'Ungültige Datei<br>bitte nur: $0',
|
||||
'really_delete_picture' => 'Bild wirklich löschen?',
|
||||
'rotate' => 'drehen',
|
||||
'save_image' => 'Bild speichern',
|
||||
'search_file_or_drag_drop' => 'Datei suchen oder Drag & Drop',
|
||||
'upload_photo' => 'Foto-Upload',
|
||||
'dictDefaultMessage' => 'Drop files here to upload',
|
||||
'dictFallbackMessage' => 'Your browser does not support drag n drop file uploads.',
|
||||
'dictFallbackText' => 'Please use the fallback form below to upload your files like in the olden days',
|
||||
'dictFileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
|
||||
'dictInvalidFileType' => 'You cant upload files of this type.',
|
||||
'dictResponseError' => 'Server responded with {{statusCode}} code.',
|
||||
'dictCancelUpload' => 'Cancel upload',
|
||||
'dictRemoveFile' => 'Remove file',
|
||||
'dictMaxFilesExceeded' => 'You can not upload any more files.',
|
||||
);
|
||||
return [
|
||||
'' => '',
|
||||
'cancel' => 'abbrechen',
|
||||
'confirm' => 'bestätigen',
|
||||
'file_is_too_big' => 'Die Datei ist zu groß<br>max. $0 MB',
|
||||
'image_too_small' => 'Bild zu klein<br>min. $0 Pixel',
|
||||
'invalid_file' => 'Ungültige Datei<br>bitte nur: $0',
|
||||
'really_delete_picture' => 'Bild wirklich löschen?',
|
||||
'rotate' => 'drehen',
|
||||
'save_image' => 'Bild speichern',
|
||||
'search_file_or_drag_drop' => 'Datei suchen oder Drag & Drop',
|
||||
'upload_photo' => 'Foto-Upload',
|
||||
'dictDefaultMessage' => 'Drop files here to upload',
|
||||
'dictFallbackMessage' => 'Your browser does not support drag n drop file uploads.',
|
||||
'dictFallbackText' => 'Please use the fallback form below to upload your files like in the olden days',
|
||||
'dictFileTooBig' => 'File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.',
|
||||
'dictInvalidFileType' => 'You cant upload files of this type.',
|
||||
'dictResponseError' => 'Server responded with {{statusCode}} code.',
|
||||
'dictCancelUpload' => 'Cancel upload',
|
||||
'dictRemoveFile' => 'Remove file',
|
||||
'dictMaxFilesExceeded' => 'You can not upload any more files.',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -130,4 +130,14 @@ Dein Team von MIVITA',
|
|||
'dhl_tracking_button' => 'Sendung bei DHL verfolgen',
|
||||
'dhl_tracking_info' => 'Du kannst den aktuellen Status Deiner Sendung jederzeit über den obigen Button bei DHL einsehen.',
|
||||
|
||||
// Abo-Einmalprodukte: Reminder vor der Ausführung
|
||||
'abo_reminder_subject' => 'Deine nächste Abo-Lieferung steht an – jetzt Produkte mitnehmen',
|
||||
'abo_reminder_title' => 'Deine nächste Abo-Lieferung steht bevor',
|
||||
'abo_reminder_intro' => '{1}Deine nächste Abo-Lieferung wird in :days Tag (am :date) ausgeführt.|[2,*]Deine nächste Abo-Lieferung wird in :days Tagen (am :date) ausgeführt.',
|
||||
'abo_reminder_onetime_hint' => 'Du kannst dieser Lieferung jetzt einmalig weitere Produkte aus unserem Sortiment hinzufügen – ohne zusätzliche Versandkosten und ohne zweiten Versandweg.',
|
||||
'abo_reminder_coverage_hint' => 'Bitte achte darauf, dass Deine hinterlegte Zahlungsweise den Gesamtbetrag (Abo + zusätzliche Produkte) deckt.',
|
||||
'abo_reminder_sustainability_hint' => 'Gemeinsam sparen wir so Verpackung und einen zweiten Transportweg – gut für die Umwelt.',
|
||||
'abo_reminder_button_consultant' => 'Produkte zur Lieferung hinzufügen',
|
||||
'abo_reminder_button_customer' => 'Produkte zur Lieferung hinzufügen',
|
||||
|
||||
];
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@ return [
|
|||
'weight' => 'Gewicht',
|
||||
'you_has_article_in_shopping_cart' => 'Du hast :num Artikel in Deinem Warenkorb',
|
||||
'excl' => 'zzgl.',
|
||||
'VAT' => 'MwSt.',
|
||||
'ipay' => 'ich zahle',
|
||||
'cpay' => 'Kunde zahlt',
|
||||
'ipay_text' => 'Ich zahle abzüglich meiner Marge und rechne den VK mit meinem Kunden ab',
|
||||
|
|
|
|||
|
|
@ -71,6 +71,10 @@ return [
|
|||
'shipping_costs' => 'Versandkosten',
|
||||
'total_amount' => 'Gesamtbetrag',
|
||||
|
||||
// Abo-Einmalprodukte (Gruppierung Rechnung/Lieferschein)
|
||||
'abo_items_heading' => 'Abo-Produkte',
|
||||
'abo_addon_items_heading' => 'Einmalig hinzugefügte Artikel',
|
||||
|
||||
];
|
||||
/*
|
||||
{{ __('pdf.') }}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue