Abo: Einmalprodukte bereits bei der Abo-Anlage + es/fr-Sprachsync

Einmalprodukte (Normalsortiment, show_on 3) können jetzt schon beim
Abo-Abschluss hinzugefügt werden – im Portal-Wizard (Abschnitt im
Upgrade-Schritt) und in allen drei Sales-Center-Abo-Strecken (eigene
Produktliste). Variante A: Zeilen laufen als Cart-Option abo_addon mit
durch den Checkout, werden sofort bezahlt und mit der Erstlieferung
verschickt (Rechnung/Lieferschein gruppieren automatisch).

- Checkout persistiert is_abo_addon (CheckoutRepository, PaymentHelper)
- createAboItems/ensureUserAboItemsFromLatestOrder überspringen Addons
  (sonst würden Einmalprodukte dauerhaft wiederkehren); amount ohne
  Addon-Anteil; aboHasBaseProduct ignoriert Addon-Zeilen
- CreateAboReplacementOrder propagiert is_abo_addon in Ersatzbestellungen
- iq-shopping-cart.js: zweite Datatable + abo_addon-Flag-Weitergabe
- i18n: neue abo.onetime_create_*-Keys (de/en/es/fr); zusätzlich es/fr
  komplett synchronisiert (abo-Kartenblock, navigation, payment,
  weborder inkl. Entfernung PAYONE-Altlasten, withdrawal.php neu)
- Tests: AboCreateOneTimeItemsTest, AboCreateOneTimeCartTest,
  AboPortalCreateOneTimeTest (17 neue, 122 Tests gesamt grün)

Plan: dev/2026-07-21-abo-einmalprodukte-anlage/

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-07-21 14:36:40 +00:00
parent 438a1e72d8
commit 50d55f4b35
32 changed files with 1479 additions and 52 deletions

View file

@ -189,4 +189,20 @@ return [
'packstation_alert_location' => 'Emplacement de la Packstation',
'packstation_alert_not_home' => 'pas votre adresse personnelle !',
'packstation_alert_footer' => 'Le NUMÉRO de Packstation comporte 3 chiffres (100-999, indiqué sur le panneau jaune). Le numéro postal DHL comporte 6 à 10 chiffres et doit être saisi dans le champ séparé ci-dessus.',
'prepayment_payone' => 'Paiement anticipé (PAYONE)',
'prepayment_no_clearing_data' => 'Les coordonnées bancaires ne sont pas encore disponibles — le paiement n\'a pas encore été enregistré avec succès auprès du prestataire de paiement.',
'checkout_maintenance_title' => 'Difficultés techniques',
'checkout_maintenance' => 'Les commandes ne sont actuellement pas possibles en raison de difficultés techniques. Nous serons bientôt de retour — veuillez réessayer plus tard.',
'abo_payments_frozen_title' => 'Paiements d\'abonnement temporairement indisponibles',
'abo_payments_frozen' => 'Les paiements d\'abonnement ne sont actuellement pas possibles. Nous travaillons d\'arrache-pied à une solution technique — veuillez réessayer plus tard. Vos abonnements et commandes ne seront pas perdus.',
'stripe_online' => 'Paiement en ligne',
'stripe_online_short' => 'Paiement en ligne (Stripe)',
'stripe_online_copy' => 'Vous serez redirigé vers la page de paiement sécurisée où vous choisirez votre moyen de paiement.',
'stripe_online_methods' => 'Carte de crédit, PayPal, Apple Pay, Google Pay, Klarna, Amazon Pay et bien plus',
'stripe_order_label' => 'Commande :reference',
'stripe_unavailable' => 'Le paiement en ligne est actuellement indisponible. Veuillez réessayer dans un instant.',
'stripe_abo_hint' => 'Votre moyen de paiement est enregistré en toute sécurité chez notre prestataire de paiement Stripe et utilisé pour les prochains prélèvements de l\'abonnement.',
'stripe_abo_payment_method_missing' => 'Aucun moyen de paiement valide n\'est enregistré pour cet abonnement. Veuillez mettre à jour votre moyen de paiement.',
'stripe_abo_authentication_required' => 'Votre banque exige une confirmation du paiement. Veuillez finaliser le paiement depuis votre page d\'abonnement.',
];