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' => 'Remarque : la prochaine exécution de l’abonnement est déjà dans :placeholder_days jours (:placeholder_date).',
|
||||
'warning_next_date_info' => 'La prochaine exécution de l’abonnement est dans :days jours, le :date.',
|
||||
'info_next_execution_select' => 'Prochaine exécution : dans :placeholder_days jours, le :placeholder_date.',
|
||||
'error_change_locked' => 'Les modifications ne sont plus possibles. La prochaine exécution est dans :days jours. Les modifications doivent être effectuées au moins 10 jours avant.',
|
||||
'error_abo_interval_too_soon' => 'Le jour de livraison choisi n’est qu’à :days jours. Veuillez choisir un jour de livraison situé au moins 10 jours dans le futur.',
|
||||
'error_cancel_locked' => 'Une résiliation n’est plus possible. La prochaine exécution est dans :days jours. Les résiliations doivent être effectuées au moins 3 jours avant.',
|
||||
'error_pause_locked' => 'L’abonnement ne peut plus être mis en pause. La prochaine exécution est dans :days jours. La pause doit être effectuée au moins 3 jours avant.',
|
||||
'error_change_locked' => 'Les modifications ne sont plus possibles. La prochaine exécution est dans :days jours. Les modifications doivent être effectuées au moins :lock jours avant.',
|
||||
'error_abo_interval_too_soon' => 'Le jour de livraison choisi n’est qu’à :days jours. Veuillez choisir un jour de livraison situé au moins :lock jours dans le futur.',
|
||||
'error_cancel_locked' => 'Une résiliation n’est plus possible. La prochaine exécution est dans :days jours. Les résiliations doivent être effectuées au moins :lock jours avant.',
|
||||
'error_pause_locked' => 'L’abonnement ne peut plus être mis en pause. La prochaine exécution est dans :days jours. La pause doit être effectuée au moins :lock jours avant.',
|
||||
'error_next_date' => 'La date de la prochaine exécution est incorrecte',
|
||||
'checkout_mail_abo_hl' => 'Votre abonnement / livraison régulière.',
|
||||
'checkout_mail_abo_start' => 'Votre abonnement a été créé avec succès avec les paramètres suivants :',
|
||||
|
|
@ -164,6 +164,37 @@ return [
|
|||
'retry_exception' => 'La nouvelle tentative de paiement n’a pas pu être finalisée : :error',
|
||||
'team_subscriptions' => 'Abonnements équipe',
|
||||
'team_customer_abos' => 'Abonnements clients de l’équipe',
|
||||
'team_total' => 'Total',
|
||||
'team_line' => 'Niveau :line',
|
||||
'filter_period' => 'Période :',
|
||||
'team_total_abos' => 'Abonnements totaux de l’équipe',
|
||||
'team_own_abos' => 'Abonnements propres',
|
||||
'team_members_with_abo' => 'Avec abonnement propre',
|
||||
'team_by_level' => 'Abonnements par niveau',
|
||||
'new_this_month' => 'nouveaux ce mois-ci',
|
||||
'with_own_abo' => 'Avec abonnement propre',
|
||||
'consultants' => 'Conseillers',
|
||||
'level' => 'Niveau',
|
||||
'own_abo' => 'Abonnement propre',
|
||||
'customer_abos_count' => 'Abonnements clients',
|
||||
'career_level' => 'Niveau de carrière',
|
||||
'of' => 'sur',
|
||||
'yes' => 'Oui',
|
||||
'no' => 'Non',
|
||||
'shop_1000' => 'Boutiques 1000 points',
|
||||
'next_execution' => 'Prochaine exécution',
|
||||
'executions_count' => 'Exécutions',
|
||||
'abo_count_points' => 'Points',
|
||||
'no_own_abo' => 'Aucun abonnement propre.',
|
||||
'no_customer_abos' => 'Aucun abonnement client.',
|
||||
'team_growth' => 'Croissance des abonnements (nouveaux par mois)',
|
||||
'month' => 'Mois',
|
||||
'new_own_abos' => 'Nouveaux abonnements propres',
|
||||
'new_customer_abos' => 'Nouveaux abonnements clients',
|
||||
'new_total' => 'Nouveaux au total',
|
||||
'filter' => 'Filtrer',
|
||||
'reset' => 'Réinitialiser',
|
||||
'filter_added_period' => 'Ajouté durant la période :',
|
||||
'chart_monthly_abos' => 'Abonnements par mois',
|
||||
'chart_active_abos' => 'Abonnements actifs',
|
||||
'chart_abos_label' => 'Abonnements',
|
||||
|
|
@ -171,4 +202,33 @@ return [
|
|||
'customer_privacy_info' => 'Pour des raisons de protection des données, aucune donnée personnelle client n’est affichée.',
|
||||
'every_month_on' => 'mensuellement le :day.',
|
||||
'back' => 'retour',
|
||||
|
||||
// Statut / paiement en attente / traité en externe (synchronisé avec de/abo.php)
|
||||
'abo_extern_done' => 'traité en externe',
|
||||
'error_user_has_initiated_abo' => 'Un abonnement a déjà été créé pour vous ou son paiement est encore en cours. Veuillez vérifier le statut sous « Mes abonnements ».',
|
||||
'pending_payment_waiting_title' => 'Abonnement créé - paiement pas encore confirmé',
|
||||
'pending_payment_waiting_copy' => 'Le paiement a été finalisé. Nous attendons encore le statut de paiement du prestataire de paiement. Tant qu’aucun statut n’est reçu, cette entrée ne peut pas être supprimée.',
|
||||
'pending_payment_processing_title' => 'Abonnement créé - paiement en cours de traitement',
|
||||
'pending_payment_processing_copy' => 'Le prestataire de paiement a déjà fourni un statut. Veuillez attendre la confirmation finale du paiement.',
|
||||
'pending_payment_failed_title' => 'Échec du paiement',
|
||||
'pending_payment_failed_copy' => 'Le paiement de cet abonnement n’a pas pu être finalisé. Vous pouvez supprimer cette entrée puis recréer l’abonnement.',
|
||||
'pending_delete_button' => 'Supprimer l’entrée',
|
||||
'pending_delete_success' => 'L’entrée d’abonnement non confirmée a été supprimée.',
|
||||
'pending_delete_not_allowed' => 'Cette entrée d’abonnement ne peut pas encore être supprimée, car le paiement n’a pas encore définitivement échoué.',
|
||||
'payment_link_sent_title' => 'Lien de paiement d’abonnement envoyé',
|
||||
'payment_link_sent_copy' => 'Le lien de paiement a été envoyé au client. Tant qu’aucun paiement n’a été lancé, cette entrée peut être supprimée.',
|
||||
'payment_link_processing_copy' => 'Le client a lancé le paiement. Nous attendons le statut de paiement final du prestataire de paiement. Dans cet état, l’entrée ne peut pas être supprimée.',
|
||||
'payment_link_failed_copy' => 'Le paiement lié à ce lien de paiement d’abonnement a échoué ou a été annulé. Vous pouvez supprimer l’entrée puis créer un nouveau lien de paiement.',
|
||||
'payment_link_delete_success' => 'Le lien de paiement d’abonnement a été supprimé.',
|
||||
'payment_link_delete_not_allowed' => 'Ce lien de paiement ne peut actuellement pas être supprimé, car le paiement est déjà en cours ou finalisé.',
|
||||
'extern_done' => 'Traité en externe',
|
||||
'extern_done_confirm_title' => 'Marquer la commande comme traitée en externe',
|
||||
'extern_done_confirm_copy' => 'La commande sera marquée comme livrée et facturée en dehors du système. AUCUNE facture ni AUCUN bon de livraison ne sera généré, le statut reste impayé. Les points de l’abonnement seront crédités et le blocage de l’abonnement sera levé, afin qu’il reprenne normalement à la prochaine échéance.',
|
||||
'extern_done_confirm_button' => 'Marquer comme traité',
|
||||
'extern_done_only_abo' => 'Cette action n’est possible que pour les commandes d’abonnement.',
|
||||
'extern_done_no_order' => 'Aucune commande d’abonnement en attente pouvant être traitée n’a été trouvée.',
|
||||
'extern_done_already' => 'Cette commande a déjà été marquée comme traitée en externe.',
|
||||
'extern_done_already_paid' => 'Cette commande est déjà payée et ne peut pas être traitée en externe.',
|
||||
'extern_done_success' => 'La commande a été marquée comme traitée en externe. Points crédités, blocage levé.',
|
||||
'extern_done_error' => 'La commande n’a pas pu être marquée comme traitée : :error',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ return [
|
|||
'cancel' => 'annuler',
|
||||
'confirm' => 'confirmer',
|
||||
'file_is_too_big' => 'Le fichier est trop volumineux<br>max. $0 Mo',
|
||||
'image_too_small ' => 'Image trop petite<br>min. $0 pixels',
|
||||
'image_too_small' => 'Image trop petite<br>min. $0 pixels',
|
||||
'invalid_file' => 'Fichier invalide<br>uniquement : $0',
|
||||
'really_delete_picture' => 'Supprimer vraiment l’image ?',
|
||||
'rotate' => 'pivoter',
|
||||
|
|
|
|||
|
|
@ -127,4 +127,14 @@ Votre équipe MIVITA',
|
|||
'dhl_tracking_order_ref' => 'Numéro de commande : :order',
|
||||
'dhl_tracking_button' => 'Suivre l’envoi chez DHL',
|
||||
'dhl_tracking_info' => 'Vous pouvez consulter à tout moment le statut actuel de votre envoi chez DHL via le bouton ci-dessus.',
|
||||
|
||||
// Produits uniques de l'abonnement : rappel avant l'exécution
|
||||
'abo_reminder_subject' => 'Votre prochaine livraison d\'abonnement approche – ajoutez des produits maintenant',
|
||||
'abo_reminder_title' => 'Votre prochaine livraison d\'abonnement approche',
|
||||
'abo_reminder_intro' => '{1}Votre prochaine livraison d\'abonnement sera traitée dans :days jour (le :date).|[2,*]Votre prochaine livraison d\'abonnement sera traitée dans :days jours (le :date).',
|
||||
'abo_reminder_onetime_hint' => 'Vous pouvez désormais ajouter, une seule fois, d\'autres produits de notre gamme à cette livraison – sans frais de port supplémentaires et sans second envoi.',
|
||||
'abo_reminder_coverage_hint' => 'Veuillez vous assurer que votre moyen de paiement enregistré couvre le montant total (abonnement + produits supplémentaires).',
|
||||
'abo_reminder_sustainability_hint' => 'Ensemble, nous économisons des emballages et un second trajet de transport – bon pour l\'environnement.',
|
||||
'abo_reminder_button_consultant' => 'Ajouter des produits à la livraison',
|
||||
'abo_reminder_button_customer' => 'Ajouter des produits à la livraison',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@ return [
|
|||
'weight' => 'Poids',
|
||||
'you_has_article_in_shopping_cart' => 'Vous avez :num article(s) dans votre panier',
|
||||
'excl' => 'plus',
|
||||
'VAT' => 'TVA',
|
||||
'ipay' => 'je paie',
|
||||
'cpay' => 'le client paie',
|
||||
'ipay_text' => 'Je paie moins ma marge et je facture le prix de vente à mon client',
|
||||
|
|
|
|||
|
|
@ -62,4 +62,8 @@ return [
|
|||
'subtotal_net' => 'Sous-total (net)',
|
||||
'shipping_costs' => 'Frais de livraison',
|
||||
'total_amount' => 'Montant total',
|
||||
|
||||
// Produits uniques de l'abonnement (regroupement facture/bon de livraison)
|
||||
'abo_items_heading' => 'Produits d\'abonnement',
|
||||
'abo_addon_items_heading' => 'Articles ajoutés une seule fois',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -92,4 +92,8 @@ return [
|
|||
'previous_orders' => 'commandes clients précédentes',
|
||||
'partner_since' => 'Partenaire depuis',
|
||||
'no_data_available' => 'Aucune donnée disponible',
|
||||
'inactive' => 'Inactif',
|
||||
'all' => 'Tous',
|
||||
'month' => 'Mois',
|
||||
'year' => 'Année',
|
||||
];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue