Ergebnis des Senior-Reviews über dev/2026-07-22 (Konzept 22.07., Feedback 24.07.,
Plan 19.08.). Rechnerisch war nichts zu korrigieren: Payline-Punkte und Provision
des Prognose-Blocks (N4) stimmen exakt mit der Provisions-Engine überein
(54.718,5 P. bzw. 3.772,88 EUR gegengerechnet an User 454). Behoben sind
Darstellungs- und Konsistenzfehler, die der Beraterin als falsche Zahlen
aufgefallen wären:
- "+N neu" schrumpfte rückwirkend, der Bestand daneben nicht: newAboCount() nutzte
weiter activeAbo(), während aboStockCount() auf das Monatsende zurückrechnet.
Beide teilen sich jetzt aboStockQuery(); die Jahres-Wachstumstabelle ebenso.
- Level-Kachel widersprach sich ("Zum nächsten Level Diamant fehlen X" über
"Karriere-Level: Diamant"): Text auf die Monats-Qualifikation umformuliert
(de/en/es/fr), Überschrift "Qualifikation in diesem Monat", Karriere-Level nur
noch bei Abweichung.
- Firstlines-Kachel zählte alle direkten Partner, "Teampartner gesamt" daneben nur
aktive (F1): Kachel nutzt jetzt isActiveConsultant(), die Detailseite listet
weiter alle und weist beide Zahlen aus.
- Neupartnerzahlen vergangener Monate sanken auf dem Home-Dashboard, sobald
Jahresgebühren ausliefen: neue User::newPartnerReferenceDate() (laufender Monat =
heute, abgeschlossener Monat = Monatsende). Dabei die drei Inline-Kopien der
Neupartner-Regel auf scopeNewPartnerIn()/isNewPartnerIn() zusammengeführt.
- Top-3-Karte ließ den Betrachter aus, obwohl "ich gehört in die Liste" in der
Juli-Runde für alle anderen Ranglisten umgesetzt wurde: zählt jetzt mit, inkl.
is_self und "ich"-Badge.
- Neues Profilfoto zeigte bis zu 6 h ein totes Bild: die URL steckt nicht mehr im
Cache, sondern entsteht beim Lesen (withProfileImages()).
- Test-Regression seit der Juli-Runde: Unit/Services/BackofficeDashboardServiceTest
fiel über die fehlende Spalte status_points (kam mit nonPaylinePoints() dazu).
- Kleinigkeiten: ProfileImageController gab die komplette Exception als
Flash-Message aus (jetzt Log + Sprachkey), BackofficeDrilldownService formatierte
Datumsangaben hart auf d.m.Y statt über Util::formatDateDB().
Tests: neuer HomeMonthlyStatsTest (buildMonthlyStats war ungetestet) plus Tests für
Stichtags-Zählung und Foto-Cache. Fünf Tests kodierten das alte Verhalten
(Betrachter zählt nicht mit, abgelaufener Account zählt nie) und wurden auf die
neue Semantik umgestellt, jeweils mit Gegenprobe. Suite: 861 grün (vorher 855),
89 rot — ausschließlich die in docs/2026-06-11-test-suite-vorbestehende-fehler.md
dokumentierten Altlasten.
Offen und bewusst nicht enthalten:
- Deploy-Schritt: backoffice:store-statistics-snapshots --force (vorher dumpen).
Kein vorhandener Snapshot enthält recruiter_ranking, Mai/Juni zusätzlich weder
non_payline_points noch die Führungskräfte-"gesamt"-Spalten; der Cron überspringt
vorhandene Snapshots ohne --force. Achtung: die Neuberechnung ist nicht
verlustfrei.
- TreeHtmlRendererTest/TreeCalcBotIntegrationTest: die Abo-Badges machten den
Renderer datenbankabhängig; die Dateien waren schon vorher rot und gehören in die
separate Test-Aufräumaufgabe.
- deleteImage bleibt ein GET-Route (gleiches Muster wie das Shop-Bild).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
56 lines
4.6 KiB
PHP
56 lines
4.6 KiB
PHP
<?php
|
|
|
|
return [
|
|
'shipping_country_was_not_found' => 'Fehler: Das Versandland wurde nicht gefunden',
|
|
'shipping_country_was_not_correctly' => 'Fehler: Das Versandland wurde dem Warenkorb nicht richtig verarbeitet',
|
|
'shopping_cart_was_shipping_free' => 'Fehler: Der Warenkorb wurde als Versandkostenfrei angegeben',
|
|
'shipping_cost_cannot_be_0' => 'Fehler: Die Versandkosten können nicht 0 sein',
|
|
'shipping_costs_were_not_calculated_correctly' => 'Fehler: Die Versandkosten wurden nicht richtig berechnet',
|
|
'compensation_products_cannot_be_0' => 'Fehler: Die Kompensationsprodukte können nicht 0 sein.',
|
|
'link_for_homeparty_not_found' => 'Link für die Auszeitparty wurde nicht gefunden, oder ist nicht mehr aktiv.',
|
|
'contact_delete' => 'Kontakt gelöscht',
|
|
'error_occurred_with_order' => 'Es ist ein Fehler bei der Bestellung aufgetreten',
|
|
'abo_deaktivert' => 'Abo-Option deaktiviert',
|
|
'error_checkbox_not_confirm' => 'Fehler: Checkbox nicht bestätigt',
|
|
'no_change_made' => 'keine Änderung vorgenommen',
|
|
'booked_package_has_been_changed' => 'gebuchtes Paket wurde geändert.',
|
|
'cancel_membership_is_requested' => 'Mitgliedschaft beenden ist beantragt',
|
|
'file_upload_failed' => 'Die Datei konnte nicht hochgeladen werden. Bitte versuche es erneut.',
|
|
'file_uploaded' => 'Datei hochgeladen',
|
|
'file_empty' => 'Datei leer"',
|
|
'file_deleted' => 'Datei gelöscht',
|
|
'file_not_found' => 'Datei nicht gefunden',
|
|
'country_account_has_been_changed__cost_has_been_reset' => 'Das Rechnungsland wurde geändert und der Warenkrob zurückgesetzt',
|
|
'your_shopping_cart_is_empty_please_add_products_first.' => 'Dein Warenkorb ist leer, bitte füge erst Produkte hinzu',
|
|
'homeparty_guest_delete' => 'Auszeitparty Gast gelöscht',
|
|
'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',
|
|
'please_enter_reason_why_you_not_need_trade_licence' => 'Bitte gib eine Begründung ein, warum Du keinen Gewerbeschein benötigst',
|
|
'please_select_compensation_product' => 'Bitte wähle ein Kompensationsprodukt aus',
|
|
'please_select_count_compensation_products' => ' Bitte wähle :count Kompensationsprodukte aus',
|
|
'user_not_found' => 'Der Berater wurde nicht gefunden.<br>Der Account wurde deaktiviert oder gelöscht.',
|
|
'shopping_cart_was_not_user_shop' => 'Fehler: Der Berater hat keinen Shop, die Bestellung kann nicht fortgesetzt werden',
|
|
'shopping_instance_not_found' => 'Fehler: Es wurde keine ShoppingInstance gefunden',
|
|
'shopping_user_not_found' => 'Fehler: Es wurde kein ShoppingUser gefunden',
|
|
'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.') }}
|
|
__('msg.')
|
|
msg.name
|
|
*/
|