Statistiken/Abo: Kundenfeedback 2026-07-24 komplett umgesetzt + Steuern: DATEV-Fixes 08+09/2025 (Sammel-Commit Branch-WIP)
Feedback-Umsetzung (dev/2026-07-22/feedback-analyse-2026-07-24.md, alle 10 Punkte):
- VIP-Statistik: eigener Berater ('ich', Linie 0) in Neue-Kundenabos- und beiden Top-10-Listen; Top-10-Umsatz sortiert nach abgerechneten Ist-Punkten + Abo-Anzahl-Spalte; Fußnote nicht-payline-wirksame Punkte (SalesVolumePoints::nonPaylinePoints)
- Führungskräfte-Liste: beide Sichten 'direkt' (an nächster FK abgeschnitten, additiv) und 'gesamt' (komplette Downline), Gesamt-Spalte nach Kundenzählweise
- Team-Abos: je Ebene 'abgerechnet (Monat)' und 'bis zum 25. erwartet'; Payline-Karte mit Teamabo-/Kundenabo-Zählern
- Incentive-Live-Ranking: Qualifizierte zuerst nummeriert (fixt auch isWinner rank<=max_winners)
- Porto: Netto-/Brutto-Kennzeichnung (Berater netto, Endkunden inkl. MwSt., portal_view-Flag; auch CRM-/Shop-Warenkorb + Checkout), Yard::shipping_tax-Fix
- Struktur-Ansicht: Abo-Badges 'A' (eigenes Abo) und '(n)' (Kundenabos) je Teampartner, gebatcht
- Abo-Löschung: Softdelete setzt active=0 (UserAbo deleting-Hook) + Bereinigungs-Migration für gelöschte-aber-aktive Abos
- Doku: technische Analyse + Kundinnen-Feedback-Dokument unter dev/2026-07-22/
- Tests: IncentiveRankingTest, TeamStructureAboBadgesTest, YardShippingTaxTest (neu); BackofficeStatisticsListsTest, TeamAboOverviewTest, PaylineForecastServiceTest, AboAdminDeleteTest, AboOneTimeViewTest erweitert
Außerdem enthalten (Branch-WIP vor dem Feedback): DATEV-Abgleich-Fixes 08+09/2025, USt-ID-Live-Validierung sowie restliche unkommittete Stände (u. a. Abo-Pause-Sprachkeys).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
657d4bd5b7
commit
ac3bd6e8ea
136 changed files with 7610 additions and 2688 deletions
|
|
@ -43,6 +43,24 @@ return [
|
|||
'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.',
|
||||
'abo_copy_pause' => 'Verschiebt die nächste Ausführung um einen Monat nach hinten. Maximal 1x alle :months Monate möglich.',
|
||||
'payline_abo_turnover' => 'Abo-Umsatz in der Payline',
|
||||
'payline_abo_turnover_hint' => 'Soll = Abo-Punkte pro Zyklus aller aktiven Abos deiner Payline (Berater- und Kundenabos). Ist = im laufenden Monat bereits abgerechnete Abo-Punkte der Payline.',
|
||||
'payline_target_label' => 'Soll (Punkte pro Zyklus)',
|
||||
'payline_actual_label' => 'Ist (im Monat abgerechnet)',
|
||||
'payline_hint' => 'Payline = :lines Ebenen · :members Berater',
|
||||
'payline_abo_counts' => ':team_abos Teamabos + :customer_abos Kundenabos in der Payline',
|
||||
'payline_none' => 'Noch keine Payline vorhanden (kein Provisionslevel erreicht).',
|
||||
'abo_points_per_cycle' => 'Punkte pro Lieferung (Bestand)',
|
||||
'abo_points_billed' => 'abgerechnet (:month)',
|
||||
'abo_points_expected' => 'bis zum :day. erwartet',
|
||||
'abo_points_expected_hint' => 'Bereits abgerechnete Abo-Punkte plus die Punkte aller Abos dieser Ebene, deren Lieferung bis zum :day. des Monats noch ansteht.',
|
||||
'pause_abo' => '1 Monat pausieren',
|
||||
'confirm_pause' => 'Möchtest du das Abo wirklich um einen Monat pausieren? Die nächste Lieferung verschiebt sich auf den Folgemonat.',
|
||||
'pause_success' => 'Dein Abo wurde um einen Monat pausiert. Die nächste Ausführung ist am :date.',
|
||||
'error_pause_interval' => 'Das Abo kann maximal 1x alle :months Monate pausiert werden. Die nächste Pause ist ab dem :date möglich.',
|
||||
'error_pause_not_active' => 'Nur aktive Abos können pausiert werden.',
|
||||
'info_pause_available_from' => 'Eine Pause ist maximal 1x alle :months Monate möglich — wieder ab dem :date.',
|
||||
'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.',
|
||||
|
|
|
|||
|
|
@ -36,6 +36,12 @@ return [
|
|||
'desc_rollback' => 'Auf Ursprung zurückgesetzt',
|
||||
|
||||
// Channels
|
||||
'status_history_title' => 'Status-Änderungen (Pause & Kündigung)',
|
||||
'status_paused' => 'Pausiert',
|
||||
'status_cancelled' => 'Gekündigt',
|
||||
'status_deactivated' => 'Deaktiviert',
|
||||
'status_reactivated' => 'Reaktiviert',
|
||||
'status_shift' => 'Ausführung von :from auf :to verschoben',
|
||||
'channel_admin' => 'Admin',
|
||||
'channel_user_me' => 'Berater',
|
||||
'channel_user_ot' => 'Berater (Kunde)',
|
||||
|
|
|
|||
|
|
@ -48,6 +48,12 @@ return [
|
|||
'until' => 'bis zum',
|
||||
'welcome_back' => 'Willkommen zurück',
|
||||
'your_shop' => 'Dein Shop',
|
||||
'commission_today' => 'Provision (Stand heute)',
|
||||
'payline_forecast_title' => 'Payline-Prognose zum 5. / 10. / 20. / 25.',
|
||||
'payline_forecast_hint' => 'Basis: aktueller Kundenumsatz + Teamumsatz (Payline). Dazu kommen kumuliert die bis zum jeweiligen Termin noch anstehenden Abo-Punkte deiner Payline (inkl. deiner eigenen Abos und Kundenabos). Prognose: Pausen, Kündigungen oder fehlgeschlagene Zahlungen können den Wert verändern.',
|
||||
'forecast_day' => 'Prognose zum :date',
|
||||
'forecast_upcoming' => 'Abo-Punkte offen',
|
||||
'forecast_done' => 'Termin liegt bereits im Ist-Umsatz',
|
||||
'monthly_statistics' => 'Monatsstatistik',
|
||||
'customer_turnover_points' => 'Kunden-Umsatz Punkte',
|
||||
'team_turnover_points' => 'Team-Umsatz Punkte',
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ return [
|
|||
'homeparty_delete' => 'Auszeitparty gelöscht',
|
||||
'VATID_could_not_be_validated' => 'Die UST-ID konnte nicht validiert werden, Eingabe bitte prüfen',
|
||||
'VATID_successfully_entered' => 'UST-ID erfolgreich eingetragen',
|
||||
'VATID_german_not_allowed' => 'Deutsche USt-IDs können hier nicht verwendet werden. Das Reverse-Charge-Verfahren gilt nur für ausländische EU-USt-IDs.',
|
||||
'VATID_no_longer_valid_taxes_applied' => 'Deine USt-ID ist nicht mehr gültig. Die Bestellung wird daher mit Umsatzsteuer berechnet.',
|
||||
'reverse_charge_procedure_and_VATID_deleted' => 'Reverse Charge Verfahren und UST-ID gelöscht',
|
||||
'no_id_card_deposited_please_upload_first' => 'Kein Ausweis hinterlegt, bitte erst hochladen',
|
||||
'no_trade_licence_deposited_please_upload_first' => 'Kein Gewerbeschein hinterlegt, bitte erst hochladen',
|
||||
|
|
@ -38,6 +40,13 @@ return [
|
|||
'account_released' => 'Account freigeschaltet',
|
||||
'cart_product_not_allowed_for_order_type' => 'Der Warenkorb enthält Artikel, die für diese Bestellart nicht vorgesehen sind. Bitte leere den Warenkorb und wähle nur Produkte, die zu dieser Bestellung passen.',
|
||||
'cart_max_weight_reached' => 'Das maximale Versandgewicht ist erreicht. Es können keine weiteren Produkte hinzugefügt werden.',
|
||||
'gdpr_delete_success' => 'DSGVO-Löschung ausgeführt: Alle personenbezogenen Daten wurden unwiderruflich anonymisiert.',
|
||||
'gdpr_delete_customer_success' => 'DSGVO-Löschung ausgeführt: Alle personenbezogenen Daten des Kunden wurden unwiderruflich anonymisiert.',
|
||||
'gdpr_delete_customer_button' => 'Kunde DSGVO-löschen',
|
||||
'gdpr_confirm_checkbox_missing' => 'Bitte bestätige die DSGVO-Löschung über die Checkbox.',
|
||||
'gdpr_error_is_admin' => 'DSGVO-Löschung nicht möglich: Der Account hat Admin-Rechte. Bitte entziehe zuerst die Admin-Rechte.',
|
||||
'gdpr_error_active_abo' => 'DSGVO-Löschung nicht möglich: Es besteht noch ein aktives Abo. Bitte kündige das Abo zuerst.',
|
||||
'gdpr_error_customer_is_member' => 'DSGVO-Löschung nicht möglich: Dieser Kundendatensatz gehört zu einem Berater-Account. Bitte nutze die DSGVO-Löschung in der User-Verwaltung.',
|
||||
];
|
||||
/*
|
||||
{{ __('msg.') }}
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ return [
|
|||
'gross' => 'brutto',
|
||||
'gross_price' => 'Preis brutto',
|
||||
'incentives' => 'Incentives',
|
||||
'incl_VAT' => 'inkl. MwSt.',
|
||||
'included_VAT' => 'Enthaltene MwSt',
|
||||
'invoice' => 'Rechnung',
|
||||
'invoice_address' => 'Rechnungsadresse',
|
||||
|
|
|
|||
|
|
@ -70,6 +70,10 @@ return [
|
|||
'in_progress_yellow' => 'In Arbeit (gelb)',
|
||||
'no_level_red' => 'Kein Level (rot)',
|
||||
|
||||
// Abo-Kennzeichen (Struktur-Ansicht)
|
||||
'badge_own_abo' => 'hat ein eigenes Abo',
|
||||
'badge_customer_abos' => '{1} 1 eigenes Kundenabo|[2,*] :count eigene Kundenabos',
|
||||
|
||||
// Performance & Badges
|
||||
'optimized' => 'OPTIMIERT',
|
||||
'standard_monitoring' => 'STANDARD + MONITORING',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue