Abo-Recovery: fehlgeschlagene Folgezahlung im Checkout nachholen
- Pay-now-Flow: bei fehlgeschlagenem Abo (Status 3) begleicht der Inhaber die offene Rechnung im Standard-Checkout mit frei waehlbarer, abo-faehiger Zahlart (nur eigenes Abo: Berater me-View + Kundenportal), payNow-Controller + Routen - AboRecoveryCheckoutService baut die ShoppingInstance aus den Abo-Artikeln; neue Spalte shopping_orders.recovery_user_abo_id verknuepft Bestellung<->Abo - Bei Erfolg: AboHelper::advanceAboAfterRecoveryPayment schreibt das Abo fort (Status->2, next_date) und uebernimmt die gewaehlte Zahlart als neues Token fuer kuenftige Abbuchungen - Neue Pay-now-Fehlermail (AboPaymentFailedMail) ersetzt die generische Fehlermail im Abo-Cron; Link fuehrt auf die Abo-Detailseite (CRM bzw. Portal) - Retry-/"extern erledigt"-Buttons nur noch fuer Admins; tote user/portal- Retry-Routen entfernt - Checkout: Recovery-Hinweis statt "Abschluss des Abonnements", Lieferadresse vorbelegt, korrekter Zurueck-Link (Abo statt Shop) - UserAbo::selfServiceDetailUrl zentralisiert die Abo-URL (Mail, Back-Links) - Test-Command abo:test-recovery; Tests fuer payNow, Advance-Logik, Fehlermail Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
78db952130
commit
0660f4e0a0
28 changed files with 1535 additions and 181 deletions
|
|
@ -15,6 +15,7 @@ return [
|
|||
'abo_order_info_check' => 'Mit Abschluss des Abonnements wird eine regelmäßige Lieferung eingerichtet. Diese wird automatisch am gewählten Liefertag versendet und abgerechnet.',
|
||||
'abo_order_info_check_2' => 'Die erste Lieferung und Abrechnung erfolgt am Tag der Abo-Einrichtung. Danach erfolgt der Versand automatisch am gewählten Liefertag des Folgemonats.',
|
||||
'abo_order_info_check_3' => 'Als Zahlungsmethoden stehen PayPal und Kreditkarte zur Verfügung. <strong>Das Abo hat eine Mindestlaufzeit von :abo-min-duration Monaten.</strong> Danach kann es jederzeit pausiert, geändert oder gekündigt werden.',
|
||||
'abo_recovery_info_check' => 'Du begleichst hier die offene Rechnung deines bestehenden Abos. <strong>Die dabei gewählte Zahlart wird zusätzlich für alle zukünftigen Abbuchungen deines Abos gespeichert.</strong> Nach erfolgreicher Zahlung wird dein Abo wieder aktiviert und regelmäßig am gewählten Liefertag ausgeführt.',
|
||||
'abo_order_info_checkbox' => 'Ja, ich habe die Abo-Bedingungen verstanden!',
|
||||
'abo_order_info_checkbox_required' => 'Bitte bestätige die Abo-Bedingungen, um fortzufahren.',
|
||||
'abo_infos' => 'Abo Infos',
|
||||
|
|
@ -172,6 +173,16 @@ return [
|
|||
'retry_payment_confirm_copy' => 'Der Zahlungsversuch wird sofort gestartet und kann eine PayPal- oder Kreditkartenbuchung auslösen. Bitte nur ausführen, wenn die Ursache geprüft wurde.',
|
||||
'retry_payment_confirm_button' => 'Zahlung jetzt erneut versuchen',
|
||||
'retry_only_hold' => 'Der erneute Zahlungsversuch ist nur für angehaltene Abos möglich.',
|
||||
'pay_now_title' => 'Zahlung fehlgeschlagen – jetzt bezahlen',
|
||||
'pay_now_copy' => 'Die letzte Abbuchung für dein Abo ist fehlgeschlagen (z. B. Karte oder PayPal nicht mehr gültig). Im Checkout begleichst du jetzt die offene Rechnung mit einer Zahlart deiner Wahl – diese wird zusätzlich für alle zukünftigen Abbuchungen deines Abos gespeichert.',
|
||||
'pay_now_button' => 'Jetzt bezahlen',
|
||||
'pay_now_not_allowed' => 'Eine nachträgliche Zahlung ist für dieses Abo aktuell nicht möglich.',
|
||||
'pay_now_failed' => 'Der Checkout konnte nicht gestartet werden. Bitte versuche es später erneut.',
|
||||
'back_to_abo' => 'Zurück zu meinem Abo',
|
||||
'payment_failed_mail_subject' => 'Zahlung für dein Abo fehlgeschlagen',
|
||||
'payment_failed_mail_intro' => 'die letzte Abbuchung für dein Abo ist leider fehlgeschlagen (z. B. weil deine Kreditkarte oder dein PayPal-Konto nicht mehr gültig ist). Über den folgenden Link kannst du den offenen Betrag jetzt sicher bezahlen. Die dabei gewählte Zahlart wird auch für deine künftigen Abbuchungen gespeichert.',
|
||||
'payment_failed_mail_button' => 'Jetzt bezahlen',
|
||||
'payment_failed_mail_hint' => 'Falls der Button nicht funktioniert, kopiere diesen Link in deinen Browser:',
|
||||
'retry_only_active' => 'Der erneute Zahlungsversuch ist nur für aktive Abos möglich.',
|
||||
'retry_already_paid_today' => 'Für dieses Abo wurde heute bereits eine erfolgreiche Zahlung gespeichert.',
|
||||
'retry_error_shopping_user' => 'Der Shopping-User konnte für den erneuten Zahlungsversuch nicht erstellt werden.',
|
||||
|
|
@ -189,6 +200,11 @@ return [
|
|||
'extern_done_already_paid' => 'Diese Bestellung ist bereits bezahlt und kann nicht extern erledigt werden.',
|
||||
'extern_done_success' => 'Die Bestellung wurde als extern erledigt markiert. Punkte gutgeschrieben, Blockade aufgehoben.',
|
||||
'extern_done_error' => 'Die Bestellung konnte nicht als erledigt markiert werden: :error',
|
||||
'admin_delete' => 'Abo löschen',
|
||||
'admin_delete_confirm_title' => 'Abo löschen',
|
||||
'admin_delete_confirm_copy' => 'Das Abo wird gelöscht (deleted_at) und ist anschließend nicht mehr in der Übersicht sichtbar. Bitte nur ausführen, wenn dies wirklich gewünscht ist.',
|
||||
'admin_delete_confirm_button' => 'Abo jetzt löschen',
|
||||
'admin_delete_success' => 'Das Abo wurde gelöscht.',
|
||||
'team_subscriptions' => 'Team Abos',
|
||||
'team_customer_abos' => 'Team Kunden-Abos',
|
||||
'team_total' => 'Gesamt',
|
||||
|
|
@ -231,4 +247,35 @@ return [
|
|||
'customer_privacy_info' => 'Aus Datenschutzgründen werden keine persönlichen Kundendaten angezeigt.',
|
||||
'every_month_on' => 'monatlich am :day.',
|
||||
'back' => 'zurück',
|
||||
|
||||
// Kreditkarte aktualisieren
|
||||
'payment_method' => 'Zahlungsmethode',
|
||||
'update_payment_method' => 'Zahlungsmethode aktualisieren',
|
||||
'update_card_title' => 'Kreditkarte aktualisieren',
|
||||
'current_card' => 'Aktuelle Karte',
|
||||
'card_update_intro' => 'Hinterlegen Sie eine neue Kreditkarte für dieses Abo. Zur Verifizierung kann eine Autorisierung von 0,01 EUR erfolgen, die nicht belastet wird. Die nächste Abbuchung erfolgt über die neue Karte.',
|
||||
'card_security_notice' => 'Ihre Kreditkartendaten werden hier nicht gespeichert. Sie werden ausschließlich SSL-verschlüsselt direkt an unseren Zahlungsdienstleister PAYONE zur Verifizierung übermittelt.',
|
||||
'card_change_history' => 'Änderungsverlauf',
|
||||
'card_update_link_button' => 'Update-Link an Kunden senden',
|
||||
'card_update_link_sent' => 'Der Update-Link wurde an den Kunden gesendet.',
|
||||
'card_update_link_not_allowed' => 'Für dieses Abo kann kein Update-Link gesendet werden.',
|
||||
'card_update_link_invalid' => 'Dieser Link ist ungültig oder abgelaufen.',
|
||||
'card_update_link_mail_subject' => 'Kreditkarte für Ihr Abo aktualisieren',
|
||||
'card_update_link_mail_intro' => 'Bitte aktualisieren Sie die Kreditkarte für Ihr Abo über den folgenden sicheren Link. Ihre Kartendaten werden ausschließlich SSL-verschlüsselt an unseren Zahlungsdienstleister PAYONE übermittelt.',
|
||||
'card_update_link_mail_button' => 'Kreditkarte aktualisieren',
|
||||
'card_update_link_mail_hint' => 'Falls der Button nicht funktioniert, kopieren Sie diesen Link in Ihren Browser:',
|
||||
'card_update_done_success_title' => 'Kreditkarte aktualisiert',
|
||||
'card_update_done_success_copy' => 'Vielen Dank. Die nächste Abbuchung erfolgt über Ihre neue Karte.',
|
||||
'card_update_done_failed_title' => 'Aktualisierung fehlgeschlagen',
|
||||
'card_update_done_failed_copy' => 'Die Kreditkarte konnte nicht aktualisiert werden. Bitte fordern Sie bei Bedarf einen neuen Link an.',
|
||||
'card_update_portal_hint' => 'Dieses Abo finden Sie auch in Ihrem Kundenportal. Dort können Sie sich anmelden und Ihre Zahlungsmethode sowie Ihr Abo jederzeit selbst verwalten.',
|
||||
'card_update_to_portal' => 'Zum Kundenportal',
|
||||
'card_update_success' => 'Ihre Kreditkarte wurde aktualisiert. Die nächste Abbuchung erfolgt über die neue Karte.',
|
||||
'card_update_not_allowed' => 'Für dieses Abo kann die Kreditkarte nicht aktualisiert werden.',
|
||||
'card_update_failed' => 'Die Kreditkarte konnte nicht aktualisiert werden. Bitte versuchen Sie es erneut.',
|
||||
'card_holder_required' => 'Bitte geben Sie den Namen des Karteninhabers an.',
|
||||
'card_number_invalid' => 'Bitte geben Sie eine gültige Kreditkartennummer ein.',
|
||||
'card_expiry_invalid' => 'Bitte geben Sie ein gültiges Ablaufdatum an.',
|
||||
'card_type_invalid' => 'Bitte wählen Sie einen gültigen Kartentyp (Visa oder Mastercard).',
|
||||
'card_cvc_invalid' => 'Bitte geben Sie eine gültige Prüfziffer (CVC) ein.',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ return [
|
|||
'abo_order_info_check' => 'By completing the subscription, a regular delivery is set up. This is automatically shipped and billed on the selected delivery day.',
|
||||
'abo_order_info_check_2' => 'The first delivery and billing takes place on the day the subscription is set up. After that, shipping is automatically carried out on the selected delivery day of the following month.',
|
||||
'abo_order_info_check_3' => 'PayPal and credit card are available as payment methods. <strong>The subscription has a minimum duration of :abo-min-duration months.</strong> After that, it can be paused, changed or canceled at any time.',
|
||||
'abo_recovery_info_check' => 'You are settling the outstanding invoice of your existing subscription here. <strong>The payment method you choose will also be saved for all future charges of your subscription.</strong> After a successful payment your subscription is reactivated and runs regularly on the selected delivery day.',
|
||||
'abo_order_info_checkbox' => 'Yes, I have understood the subscription terms!',
|
||||
'abo_order_info_checkbox_required' => 'Please confirm the subscription terms to continue.',
|
||||
'abo_infos' => 'Subscription info',
|
||||
|
|
@ -172,6 +173,16 @@ return [
|
|||
'retry_payment_confirm_copy' => 'The payment attempt will start immediately and can trigger a PayPal or credit card charge. Please run this only after checking the cause.',
|
||||
'retry_payment_confirm_button' => 'Retry payment now',
|
||||
'retry_only_hold' => 'The payment retry is only available for held subscriptions.',
|
||||
'pay_now_title' => 'Payment failed – pay now',
|
||||
'pay_now_copy' => 'The last charge for your subscription failed (e.g. card or PayPal no longer valid). In the checkout you now settle the outstanding invoice with a payment method of your choice — which will also be saved for all future charges of your subscription.',
|
||||
'pay_now_button' => 'Pay now',
|
||||
'pay_now_not_allowed' => 'A follow-up payment is currently not possible for this subscription.',
|
||||
'pay_now_failed' => 'The checkout could not be started. Please try again later.',
|
||||
'back_to_abo' => 'Back to my subscription',
|
||||
'payment_failed_mail_subject' => 'Payment for your subscription failed',
|
||||
'payment_failed_mail_intro' => 'unfortunately the last charge for your subscription failed (e.g. because your credit card or PayPal account is no longer valid). Using the link below you can pay the outstanding amount now. The payment method you choose will also be saved for your future charges.',
|
||||
'payment_failed_mail_button' => 'Pay now',
|
||||
'payment_failed_mail_hint' => 'If the button does not work, copy this link into your browser:',
|
||||
'retry_only_active' => 'The payment retry is only available for active subscriptions.',
|
||||
'retry_already_paid_today' => 'A successful payment has already been recorded for this subscription today.',
|
||||
'retry_error_shopping_user' => 'The shopping user could not be created for the payment retry.',
|
||||
|
|
@ -189,6 +200,11 @@ return [
|
|||
'extern_done_already_paid' => 'This order is already paid and cannot be completed externally.',
|
||||
'extern_done_success' => 'The order was marked as externally completed. Points credited, block lifted.',
|
||||
'extern_done_error' => 'The order could not be marked as completed: :error',
|
||||
'admin_delete' => 'Delete subscription',
|
||||
'admin_delete_confirm_title' => 'Delete subscription',
|
||||
'admin_delete_confirm_copy' => 'The subscription will be deleted (deleted_at) and will no longer appear in the overview. Please only proceed if this is really intended.',
|
||||
'admin_delete_confirm_button' => 'Delete subscription now',
|
||||
'admin_delete_success' => 'The subscription has been deleted.',
|
||||
'back' => 'back',
|
||||
'team_subscriptions' => 'Team subscriptions',
|
||||
'team_customer_abos' => 'Team Customer Subscriptions',
|
||||
|
|
@ -231,4 +247,35 @@ return [
|
|||
'abo_count' => 'Number of subscriptions',
|
||||
'customer_privacy_info' => 'For privacy reasons, no personal customer data is displayed.',
|
||||
'every_month_on' => 'monthly on :day.',
|
||||
|
||||
// Update credit card
|
||||
'payment_method' => 'Payment method',
|
||||
'update_payment_method' => 'Update payment method',
|
||||
'update_card_title' => 'Update credit card',
|
||||
'current_card' => 'Current card',
|
||||
'card_update_intro' => 'Store a new credit card for this subscription. A verification authorization of EUR 0.01 may be made, which is not charged. The next debit will use the new card.',
|
||||
'card_security_notice' => 'Your credit card details are not stored here. They are transmitted SSL-encrypted directly to our payment provider PAYONE for verification only.',
|
||||
'card_change_history' => 'Change history',
|
||||
'card_update_link_button' => 'Send update link to customer',
|
||||
'card_update_link_sent' => 'The update link has been sent to the customer.',
|
||||
'card_update_link_not_allowed' => 'No update link can be sent for this subscription.',
|
||||
'card_update_link_invalid' => 'This link is invalid or has expired.',
|
||||
'card_update_link_mail_subject' => 'Update the credit card for your subscription',
|
||||
'card_update_link_mail_intro' => 'Please update the credit card for your subscription via the secure link below. Your card details are transmitted SSL-encrypted to our payment provider PAYONE only.',
|
||||
'card_update_link_mail_button' => 'Update credit card',
|
||||
'card_update_link_mail_hint' => 'If the button does not work, copy this link into your browser:',
|
||||
'card_update_done_success_title' => 'Credit card updated',
|
||||
'card_update_done_success_copy' => 'Thank you. The next debit will use your new card.',
|
||||
'card_update_done_failed_title' => 'Update failed',
|
||||
'card_update_done_failed_copy' => 'The credit card could not be updated. Please request a new link if needed.',
|
||||
'card_update_portal_hint' => 'You can also find this subscription in your customer portal. There you can log in and manage your payment method and subscription yourself at any time.',
|
||||
'card_update_to_portal' => 'Go to customer portal',
|
||||
'card_update_success' => 'Your credit card has been updated. The next debit will use the new card.',
|
||||
'card_update_not_allowed' => 'The credit card cannot be updated for this subscription.',
|
||||
'card_update_failed' => 'The credit card could not be updated. Please try again.',
|
||||
'card_holder_required' => 'Please enter the cardholder name.',
|
||||
'card_number_invalid' => 'Please enter a valid credit card number.',
|
||||
'card_expiry_invalid' => 'Please enter a valid expiry date.',
|
||||
'card_type_invalid' => 'Please select a valid card type (Visa or Mastercard).',
|
||||
'card_cvc_invalid' => 'Please enter a valid security code (CVC).',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ return [
|
|||
'abo_order_info_check' => 'Al completar la suscripción, se establece una entrega regular. Esta se envía y factura automáticamente el día de entrega seleccionado.',
|
||||
'abo_order_info_check_2' => 'La primera entrega y facturación se realiza el día en que se establece la suscripción. Después, el envío se realiza automáticamente el día de entrega seleccionado del mes siguiente.',
|
||||
'abo_order_info_check_3' => 'PayPal y tarjeta de crédito están disponibles como métodos de pago. <strong>La suscripción tiene una duración mínima de :abo-min-duration meses.</strong> Después, puede pausarse, cambiarse o cancelarse en cualquier momento.',
|
||||
'abo_recovery_info_check' => 'Aquí pagas la factura pendiente de tu suscripción existente. <strong>El método de pago que elijas también se guardará para todos los cobros futuros de tu suscripción.</strong> Tras el pago correcto, tu suscripción se reactiva y se ejecuta periódicamente en el día de entrega elegido.',
|
||||
'abo_order_info_checkbox' => '¡Sí, he entendido los términos de la suscripción!',
|
||||
'abo_order_info_checkbox_required' => 'Por favor, confirma los términos de la suscripción para continuar.',
|
||||
'abo_infos' => 'Información de suscripción',
|
||||
|
|
@ -155,6 +156,16 @@ return [
|
|||
'retry_payment_confirm_copy' => 'El intento de pago comenzará inmediatamente y puede activar un cargo de PayPal o tarjeta de crédito. Ejecútelo solo después de comprobar la causa.',
|
||||
'retry_payment_confirm_button' => 'Reintentar pago ahora',
|
||||
'retry_only_hold' => 'El reintento de pago solo está disponible para suscripciones en pausa.',
|
||||
'pay_now_title' => 'Pago fallido: pagar ahora',
|
||||
'pay_now_copy' => 'El último cobro de tu suscripción ha fallado (p. ej. la tarjeta o PayPal ya no son válidos). En el checkout pagas ahora la factura pendiente con el método de pago que prefieras, que además se guardará para todos los cobros futuros de tu suscripción.',
|
||||
'pay_now_button' => 'Pagar ahora',
|
||||
'pay_now_not_allowed' => 'Actualmente no es posible un pago posterior para esta suscripción.',
|
||||
'pay_now_failed' => 'No se pudo iniciar el checkout. Inténtalo de nuevo más tarde.',
|
||||
'back_to_abo' => 'Volver a mi suscripción',
|
||||
'payment_failed_mail_subject' => 'El pago de tu suscripción ha fallado',
|
||||
'payment_failed_mail_intro' => 'lamentablemente el último cobro de tu suscripción ha fallado (p. ej. porque tu tarjeta de crédito o tu cuenta de PayPal ya no son válidas). Con el siguiente enlace puedes pagar ahora el importe pendiente. El método de pago que elijas también se guardará para tus próximos cobros.',
|
||||
'payment_failed_mail_button' => 'Pagar ahora',
|
||||
'payment_failed_mail_hint' => 'Si el botón no funciona, copia este enlace en tu navegador:',
|
||||
'retry_only_active' => 'El reintento de pago solo está disponible para suscripciones activas.',
|
||||
'retry_already_paid_today' => 'Ya se ha registrado hoy un pago correcto para esta suscripción.',
|
||||
'retry_error_shopping_user' => 'No se pudo crear el usuario de compra para el reintento de pago.',
|
||||
|
|
@ -233,4 +244,9 @@ return [
|
|||
'extern_done_already_paid' => 'Este pedido ya está pagado y no se puede gestionar externamente.',
|
||||
'extern_done_success' => 'El pedido se ha marcado como gestionado externamente. Puntos abonados, bloqueo levantado.',
|
||||
'extern_done_error' => 'El pedido no se pudo marcar como gestionado: :error',
|
||||
'admin_delete' => 'Eliminar suscripción',
|
||||
'admin_delete_confirm_title' => 'Eliminar suscripción',
|
||||
'admin_delete_confirm_copy' => 'La suscripción se eliminará (deleted_at) y ya no aparecerá en el resumen. Continúe solo si realmente lo desea.',
|
||||
'admin_delete_confirm_button' => 'Eliminar suscripción ahora',
|
||||
'admin_delete_success' => 'La suscripción se ha eliminado.',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ return [
|
|||
'abo_order_info_check' => 'À la conclusion de l’abonnement, une livraison régulière est mise en place. Elle est automatiquement expédiée et facturée au jour de livraison choisi.',
|
||||
'abo_order_info_check_2' => 'La première livraison et facturation a lieu le jour de la création de l’abonnement. Ensuite, l’expédition se fait automatiquement au jour de livraison choisi du mois suivant.',
|
||||
'abo_order_info_check_3' => 'PayPal et carte de crédit sont disponibles comme modes de paiement. <strong>L’abonnement a une durée minimale de :abo-min-duration mois.</strong> Ensuite, il peut être mis en pause, modifié ou résilié à tout moment.',
|
||||
'abo_recovery_info_check' => 'Vous réglez ici la facture en attente de votre abonnement existant. <strong>Le moyen de paiement choisi sera également enregistré pour tous les prélèvements futurs de votre abonnement.</strong> Après un paiement réussi, votre abonnement est réactivé et exécuté régulièrement le jour de livraison choisi.',
|
||||
'abo_order_info_checkbox' => 'Oui, j’ai compris les conditions de l’abonnement !',
|
||||
'abo_order_info_checkbox_required' => 'Veuillez confirmer les conditions de l’abonnement pour continuer.',
|
||||
'abo_infos' => 'Infos abonnement',
|
||||
|
|
@ -155,6 +156,16 @@ return [
|
|||
'retry_payment_confirm_copy' => 'La tentative de paiement démarre immédiatement et peut déclencher un débit PayPal ou carte de crédit. À exécuter uniquement si la cause a été vérifiée.',
|
||||
'retry_payment_confirm_button' => 'Réessayer le paiement maintenant',
|
||||
'retry_only_hold' => 'La nouvelle tentative de paiement n’est possible que pour les abonnements en pause.',
|
||||
'pay_now_title' => 'Paiement échoué – payer maintenant',
|
||||
'pay_now_copy' => 'Le dernier prélèvement de votre abonnement a échoué (p. ex. carte ou PayPal plus valides). Dans le checkout, vous réglez maintenant la facture en attente avec un moyen de paiement de votre choix, qui sera également enregistré pour tous les prélèvements futurs de votre abonnement.',
|
||||
'pay_now_button' => 'Payer maintenant',
|
||||
'pay_now_not_allowed' => 'Un paiement ultérieur n’est actuellement pas possible pour cet abonnement.',
|
||||
'pay_now_failed' => 'Le checkout n’a pas pu être démarré. Veuillez réessayer plus tard.',
|
||||
'back_to_abo' => 'Retour à mon abonnement',
|
||||
'payment_failed_mail_subject' => 'Le paiement de votre abonnement a échoué',
|
||||
'payment_failed_mail_intro' => 'malheureusement, le dernier prélèvement de votre abonnement a échoué (p. ex. parce que votre carte de crédit ou votre compte PayPal n’est plus valide). Grâce au lien ci-dessous, vous pouvez régler le montant en attente dès maintenant. Le moyen de paiement choisi sera également enregistré pour vos prochains prélèvements.',
|
||||
'payment_failed_mail_button' => 'Payer maintenant',
|
||||
'payment_failed_mail_hint' => 'Si le bouton ne fonctionne pas, copiez ce lien dans votre navigateur :',
|
||||
'retry_only_active' => 'La nouvelle tentative de paiement n’est possible que pour les abonnements actifs.',
|
||||
'retry_already_paid_today' => 'Un paiement réussi a déjà été enregistré aujourd’hui pour cet abonnement.',
|
||||
'retry_error_shopping_user' => 'Le Shopping-User n’a pas pu être créé pour la nouvelle tentative de paiement.',
|
||||
|
|
@ -233,4 +244,9 @@ return [
|
|||
'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',
|
||||
'admin_delete' => 'Supprimer l’abonnement',
|
||||
'admin_delete_confirm_title' => 'Supprimer l’abonnement',
|
||||
'admin_delete_confirm_copy' => 'L’abonnement sera supprimé (deleted_at) et n’apparaîtra plus dans l’aperçu. Ne continuez que si cela est vraiment souhaité.',
|
||||
'admin_delete_confirm_button' => 'Supprimer l’abonnement maintenant',
|
||||
'admin_delete_success' => 'L’abonnement a été supprimé.',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
<div class="col-md-3 mb-3">
|
||||
<div class="text-muted small">{{ __('tables.status') }} / {{ __('tables.active') }}</div>
|
||||
{!! $user_abo->getStatusFormated() !!} {!! get_active_badge($user_abo->active) !!}
|
||||
@if ($user_abo->status === 3 && $user_abo->active)
|
||||
@if ($isAdmin && $user_abo->status === 3 && $user_abo->active)
|
||||
<button type="button" class="btn btn-sm btn-danger mt-3" data-toggle="modal"
|
||||
data-target="#modal-retry-abo-payment">
|
||||
<span class="fa fa-redo"></span> {{ __('abo.retry_payment') }}
|
||||
|
|
@ -64,6 +64,9 @@
|
|||
data-view="admin" data-route="{{ route('modal_load') }}"><span
|
||||
class="fa fa-edit"></span>{{ __('abo.abo_settings') }}</button>
|
||||
|
||||
<button type="button" class="btn btn-sm btn-danger" data-toggle="modal"
|
||||
data-target="#modal-abo-delete"><span class="fa fa-trash"></span> {{ __('abo.admin_delete') }}</button>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 mb-3">
|
||||
|
|
|
|||
|
|
@ -1,49 +0,0 @@
|
|||
@if ($user_abo->status === 3 && $user_abo->active)
|
||||
<div class="text-right mt-3">
|
||||
<button type="button" class="btn btn-warning" data-toggle="modal" data-target="#modal-retry-abo-payment">
|
||||
<span class="fa fa-redo"></span> {{ __('abo.retry_payment') }}
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal fade" id="modal-retry-abo-payment" tabindex="-1" role="dialog" aria-labelledby="modal-retry-abo-payment-label" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
{!! Form::open(['action' => $retryAction]) !!}
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="modal-retry-abo-payment-label">{{ __('abo.retry_payment') }}</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="alert alert-warning">
|
||||
<strong>{{ __('abo.retry_payment_confirm_title') }}</strong><br>
|
||||
{{ __('abo.retry_payment_confirm_copy') }}
|
||||
</div>
|
||||
<table class="table table-sm mb-0">
|
||||
<tr>
|
||||
<td class="font-weight-bold">{{ __('navigation.abo') }}:</td>
|
||||
<td>#{{ $user_abo->id }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="font-weight-bold">{{ __('tables.payment') }}:</td>
|
||||
<td>{{ $user_abo->getPaymentType() }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="font-weight-bold">{{ __('tables.amount') }}:</td>
|
||||
<td>{{ $user_abo->getFormattedAmount() }} €</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="font-weight-bold">{{ __('tables.next_date') }}:</td>
|
||||
<td>{{ $user_abo->next_date }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{ __('close') }}</button>
|
||||
<button type="submit" class="btn btn-warning">{{ __('abo.retry_payment_confirm_button') }}</button>
|
||||
</div>
|
||||
{!! Form::close() !!}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
108
resources/views/emails/abo_payment_failed.blade.php
Normal file
108
resources/views/emails/abo_payment_failed.blade.php
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>{{ __('abo.payment_failed_mail_subject') }}</title>
|
||||
<style type="text/css">
|
||||
a { text-decoration: none; border: 0; outline: none; color: #919f7a; }
|
||||
a:hover { color: #b6b600; }
|
||||
td, h1, h2, h3 { font-family: Helvetica, Verdana, Arial, sans-serif; font-weight: 400; }
|
||||
td { text-align: left; }
|
||||
body { -webkit-font-smoothing: antialiased; width: 100%; height: 100%; color: #37302d; background: #ffffff; font-size: 15px; line-height: 26px; }
|
||||
table { border-collapse: separate !important; }
|
||||
.headline { color: #37302d; font-size: 18px; }
|
||||
.force-full-width { width: 100% !important; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
|
||||
<table align="left" cellpadding="0" cellspacing="0" width="100%" height="100%">
|
||||
<tr>
|
||||
<td align="left" valign="top" bgcolor="#f8f8f8" width="100%">
|
||||
<br>
|
||||
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="700" class="w320">
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td style="text-align:center;">
|
||||
<center>
|
||||
<picture style="text-align: center">
|
||||
<img src="https://my.mivita.care/images/logo_mivita.png" alt="mivita.care" style="border:none" width="230">
|
||||
</picture>
|
||||
</center>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table cellpadding="10" style="padding: 10px;" cellspacing="0" border="0" width="100%" bgcolor="#ffffff">
|
||||
<tr>
|
||||
<td class="headline">
|
||||
<b>{{ __('abo.payment_failed_mail_subject') }}</b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="color:#37302d;line-height:1.6em;">
|
||||
{{ $salutation }},
|
||||
<br><br>
|
||||
{{ __('abo.payment_failed_mail_intro') }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table style="background-color: #f6fdf5; border: 2px solid #b5c49b; border-radius: 8px; margin: 20px 0;" cellpadding="15" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td style="text-align: center; padding-top: 10px;">
|
||||
<a href="{{ $link }}" style="display: inline-block; background: #FFCC00; color: #37302d; padding: 12px 24px; text-decoration: none; border-radius: 5px; font-weight: bold; font-size: 14px;">
|
||||
{{ __('abo.payment_failed_mail_button') }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="color:#7B7B7E; font-size: 13px; line-height:1.6em;">
|
||||
{{ __('abo.payment_failed_mail_hint') }}
|
||||
<br>
|
||||
<a href="{{ $link }}" style="color:#7B7B7E; text-decoration: underline; word-break: break-all;">{{ $link }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="color:#37302d;line-height:1.6em;">
|
||||
<br>
|
||||
{{ $greetings }}<br>
|
||||
{{ $sender }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<center>
|
||||
<table cellpadding="0" cellspacing="0" class="force-full-width" bgcolor="#f8f8f8" style="margin: 0 auto; text-align: center;line-height:1.6em;">
|
||||
<tr>
|
||||
<td style="color:#7B7B7E; font-size:14px; text-align: center;line-height:1.6em;" align="center">
|
||||
<p>{{__('email.footer_copy1')}}</p>
|
||||
<br>
|
||||
<a href="https://www.mivita.care" style="color: #7B7B7E; text-decoration: underline;">www.mivita.care</a>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="color:#bbbbbb; font-size:12px; text-align: center;line-height:1.6em;" align="center">
|
||||
<p>{{__('email.footer_copy2')}}</p>
|
||||
<a href="https://www.mivita.care/datenschutz">{{ __('dataprotect.data_protect') }}</a> <br>
|
||||
<p>{{__('email.footer_copy3')}}</p>
|
||||
<br><br>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -26,10 +26,10 @@
|
|||
</div>
|
||||
@endif
|
||||
|
||||
@if($user_abo->isPendingInitialPayment())
|
||||
@if ($user_abo->isPendingInitialPayment())
|
||||
<div class="alert alert-warning">
|
||||
<strong>{{ __('abo.pending_payment_waiting_title') }}</strong><br>
|
||||
@if($user_abo->hasFailedInitialPayment())
|
||||
@if ($user_abo->hasFailedInitialPayment())
|
||||
{{ __('abo.pending_payment_failed_copy') }}
|
||||
@elseif($user_abo->hasInitialPaymentStatus())
|
||||
{{ __('abo.pending_payment_processing_copy') }}
|
||||
|
|
@ -39,6 +39,22 @@
|
|||
</div>
|
||||
@endif
|
||||
|
||||
@if ($user_abo->status === 3 && $user_abo->active)
|
||||
<div class="card mt-3 mb-3 border-info">
|
||||
<div class="card-body">
|
||||
<h6 class="font-weight-bold text-info">{{ __('abo.pay_now_title') }}</h6>
|
||||
<p class="mb-2">{{ __('abo.pay_now_copy') }}</p>
|
||||
<form method="POST" action="{{ route('portal_abos_pay_now', [$user_abo->id]) }}">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-info">
|
||||
<i class="ion ion-md-card mr-1"></i>{{ __('abo.pay_now_button') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
<div class="card">
|
||||
@include('admin.abo._detail')
|
||||
</div>
|
||||
|
|
@ -95,7 +111,10 @@
|
|||
</div>
|
||||
@else
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._order_abo', ['add_only_mode' => $addOnlyMode, 'change_locked' => $aboChangeLocked])
|
||||
@include('admin.abo._order_abo', [
|
||||
'add_only_mode' => $addOnlyMode,
|
||||
'change_locked' => $aboChangeLocked,
|
||||
])
|
||||
</div>
|
||||
|
||||
<div id="holder_html_view_comp_product">
|
||||
|
|
@ -114,7 +133,41 @@
|
|||
@include('admin.abo._executions')
|
||||
</div>
|
||||
|
||||
@include('admin.abo._retry_payment_modal', ['retryAction' => route('portal_abos_retry_payment', [$user_abo->id])])
|
||||
@if ($user_abo->isCreditCard())
|
||||
<div class="card mt-3 mb-3">
|
||||
<div class="card-body">
|
||||
<h6 class="font-weight-bold">{{ __('abo.payment_method') }}</h6>
|
||||
<p class="mb-2">
|
||||
{{ __('payment.credit_card') }}@if ($user_abo->maskedCard())
|
||||
: {{ $user_abo->maskedCard() }}
|
||||
@endif
|
||||
</p>
|
||||
@if ($user_abo->canUpdatePaymentMethod())
|
||||
<a href="{{ route('portal_abos_payment_method_edit', [$user_abo->id]) }}"
|
||||
class="btn btn-sm btn-primary">
|
||||
{{ __('abo.update_payment_method') }}
|
||||
</a>
|
||||
@endif
|
||||
|
||||
@if ($user_abo->card_changes->isNotEmpty())
|
||||
<div class="mt-3">
|
||||
<small class="text-muted d-block mb-1">{{ __('abo.card_change_history') }}</small>
|
||||
<ul class="list-unstyled mb-0 small">
|
||||
@foreach ($user_abo->card_changes->take(5) as $change)
|
||||
<li>
|
||||
<i class="ion ion-md-time text-muted mr-1"></i>
|
||||
{{ $change->created_at->format('d.m.Y H:i') }}@if ($change->masked_card)
|
||||
— {{ $change->masked_card }}
|
||||
@endif
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
<a href="{{ route('portal.my_subscriptions') }}" class="btn btn-sm btn-default float-right">{{ __('abo.back') }}</a>
|
||||
|
||||
|
|
@ -130,7 +183,5 @@
|
|||
var iqAboOneTime = IqAboOneTime.init();
|
||||
$( document ).ready(function() {
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -43,9 +43,26 @@
|
|||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if ($view === 'me' && $user_abo->status === 3 && $user_abo->active)
|
||||
<div class="card mt-3 mb-3 border-info">
|
||||
<div class="card-body">
|
||||
<h6 class="font-weight-bold text-info">{{ __('abo.pay_now_title') }}</h6>
|
||||
<p class="mb-2">{{ __('abo.pay_now_copy') }}</p>
|
||||
<form method="POST" action="{{ route('user_abos_pay_now', [$view, $user_abo->id]) }}">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-info">
|
||||
<i class="ion ion-md-card mr-1"></i>{{ __('abo.pay_now_button') }}
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card">
|
||||
@include('admin.abo._detail')
|
||||
</div>
|
||||
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._detail_abo_info')
|
||||
</div>
|
||||
|
|
@ -103,7 +120,10 @@
|
|||
</div>
|
||||
@else
|
||||
<div class="card mt-3">
|
||||
@include('admin.abo._order_abo', ['add_only_mode' => $addOnlyMode, 'change_locked' => $aboChangeLocked])
|
||||
@include('admin.abo._order_abo', [
|
||||
'add_only_mode' => $addOnlyMode,
|
||||
'change_locked' => $aboChangeLocked,
|
||||
])
|
||||
</div>
|
||||
|
||||
<div id="holder_html_view_comp_product">
|
||||
|
|
@ -121,7 +141,52 @@
|
|||
@include('admin.abo._executions')
|
||||
</div>
|
||||
|
||||
@include('admin.abo._retry_payment_modal', ['retryAction' => route('user_abos_retry_payment', [$view, $user_abo->id])])
|
||||
@if ($user_abo->isCreditCard())
|
||||
<div class="card mt-3 mb-3">
|
||||
<div class="card-body">
|
||||
<h6 class="font-weight-bold">{{ __('abo.payment_method') }}</h6>
|
||||
<p class="mb-2">
|
||||
{{ __('payment.credit_card') }}@if ($user_abo->maskedCard())
|
||||
: {{ $user_abo->maskedCard() }}
|
||||
@endif
|
||||
</p>
|
||||
@if ($view === 'me' && $user_abo->canUpdatePaymentMethod())
|
||||
<a href="{{ route('user_abos_payment_method_edit', [$view, $user_abo->id]) }}"
|
||||
class="btn btn-sm btn-primary">
|
||||
{{ __('abo.update_payment_method') }}
|
||||
</a>
|
||||
@endif
|
||||
|
||||
@if ($view === 'ot' && $user_abo->canUpdatePaymentMethod())
|
||||
<form method="POST" action="{{ route('user_abos_payment_method_send_link', [$view, $user_abo->id]) }}"
|
||||
class="d-inline">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-sm btn-outline-primary">
|
||||
<i class="ion ion-md-mail mr-1"></i>{{ __('abo.card_update_link_button') }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
|
||||
@if ($user_abo->card_changes->isNotEmpty())
|
||||
<div class="mt-3">
|
||||
<small class="text-muted d-block mb-1">{{ __('abo.card_change_history') }}</small>
|
||||
<ul class="list-unstyled mb-0 small">
|
||||
@foreach ($user_abo->card_changes->take(5) as $change)
|
||||
<li>
|
||||
<i class="ion ion-md-time text-muted mr-1"></i>
|
||||
{{ $change->created_at->format('d.m.Y H:i') }}@if ($change->masked_card)
|
||||
— {{ $change->masked_card }}
|
||||
@endif
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
|
||||
<a href="{{ route('user_abos', [$view]) }}" class="btn btn-sm btn-default float-right">{{ __('back') }}</a>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
@extends($user_shop ?'web.user.layouts.layout' : 'web.layouts.layout')
|
||||
@extends($user_shop ? 'web.user.layouts.layout' : 'web.layouts.layout')
|
||||
|
||||
@section('content')
|
||||
|
||||
<section class="page-header page-header-xlg parallax parallax-3"
|
||||
style="background-image:url('/assets/images/vision-min.jpg')">
|
||||
style="background-image:url('/assets/images/vision-min.jpg')">
|
||||
<div class="overlay dark-1"><!-- dark overlay [1 to 9 opacity] --></div>
|
||||
|
||||
<div class="container">
|
||||
|
|
@ -13,75 +13,91 @@
|
|||
|
||||
<style>
|
||||
div.shop-item {
|
||||
margin-bottom:30px;
|
||||
margin-bottom: 30px;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
div.shop-item > .thumbnail, .thumbnail {
|
||||
|
||||
div.shop-item>.thumbnail,
|
||||
.thumbnail {
|
||||
border: none;
|
||||
}
|
||||
|
||||
div.shop-item-summary {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
div.shop-item-summary h2 a {
|
||||
color: #9aa983;
|
||||
font-size: 1.2em;
|
||||
margin: 0 0 10px 0;
|
||||
}
|
||||
|
||||
div.shop-item-buttons {
|
||||
padding: 0 8px 10px 8px;
|
||||
}
|
||||
div.shop-item-buttons .btn-xs{
|
||||
|
||||
div.shop-item-buttons .btn-xs {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.cartContent a.remove_item {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.cartContent .product_name {
|
||||
font-size: 1.15em;
|
||||
}
|
||||
.cartContent .product_name > small {
|
||||
|
||||
.cartContent .product_name>small {
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
.cartContent .product_name {
|
||||
padding-bottom: 0;
|
||||
min-height: 60px;
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.cartContent .remove_item {
|
||||
clear: right;
|
||||
}
|
||||
|
||||
.cartContent .total_price {
|
||||
width: auto;
|
||||
padding-top: 30px;
|
||||
clear: right;
|
||||
}
|
||||
|
||||
.cartContent .item .qty {
|
||||
float: left;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.cartContent .item.head {
|
||||
display: none;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 768px) {
|
||||
|
||||
.cartContent .total_price {
|
||||
padding-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 992px) {
|
||||
.cartContent .total_price {
|
||||
padding-top: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1200px) {
|
||||
.cartContent .total_price {
|
||||
padding-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
<!-- -->
|
||||
|
||||
|
|
@ -98,80 +114,111 @@
|
|||
<h4>{{ __('payment.your_order_number_is') }}: {{ $order_reference }}</h4>
|
||||
<hr />
|
||||
|
||||
@if($pay_trans && $pay_trans->shopping_payment)
|
||||
@if ($pay_trans && $pay_trans->shopping_payment)
|
||||
|
||||
@if($pay_trans->shopping_payment->clearingtype === "vor")
|
||||
{{-- Prominenter Vorkasse-Hinweis mit TXID und Bankdaten --}}
|
||||
<div class="alert alert-warning" style="border: 3px solid #ffc107; background-color: #fff8e1;">
|
||||
<h4 class="alert-heading"><i class="fa fa-exclamation-triangle"></i> {{ __('payment.prepayment_important_notice') }}</h4>
|
||||
|
||||
|
||||
|
||||
<h5 class="mb-3"><i class="fa fa-university"></i> {{ __('payment.prepayment_bank_details') }}:</h5>
|
||||
<div style="background: #fff; border-radius: 8px; padding: 15px;">
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0; width: 140px;"><strong>{{ __('payment.account_holder') }}:</strong></td>
|
||||
<td style="padding: 5px 0;">{{ $pay_trans->transmitted_data['clearing_bankaccountholder'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.IBAN') }}:</strong></td>
|
||||
<td style="padding: 5px 0; font-family: monospace; letter-spacing: 1px;">{{ $pay_trans->transmitted_data['clearing_bankiban'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.BIC') }}:</strong></td>
|
||||
<td style="padding: 5px 0; font-family: monospace;">{{ $pay_trans->transmitted_data['clearing_bankbic'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.bank') }}:</strong></td>
|
||||
<td style="padding: 5px 0;">{{ $pay_trans->transmitted_data['clearing_bankname'] }}</td>
|
||||
</tr>
|
||||
<tr style="border-top: 1px solid #ffc107;">
|
||||
<td style="padding: 10px 10px 5px 0;"><strong>{{ __('payment.total_amount') }}:</strong></td>
|
||||
<td style="padding: 10px 0 5px 0; font-size: 18px; font-weight: bold; color: #d35400;">{{ number_format( floatval($pay_trans->shopping_payment->amount/100), 2, ",", ".") }} EUR</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
@if ($pay_trans->shopping_payment->clearingtype === 'vor')
|
||||
{{-- Prominenter Vorkasse-Hinweis mit TXID und Bankdaten --}}
|
||||
<div class="alert alert-warning" style="border: 3px solid #ffc107; background-color: #fff8e1;">
|
||||
<h4 class="alert-heading"><i class="fa fa-exclamation-triangle"></i>
|
||||
{{ __('payment.prepayment_important_notice') }}</h4>
|
||||
|
||||
<hr style="border-color: #ffc107;">
|
||||
|
||||
<p>{{ __('payment.prepayment_reference_notice') }}</p>
|
||||
|
||||
@if(isset($pay_trans->transmitted_data['txid']))
|
||||
<div class="text-center p-4 my-3" style="background: #fff; border: 3px dashed #ffc107; border-radius: 8px;">
|
||||
<strong style="font-size: 16px;">{{ __('payment.prepayment_txid') }}:</strong><br>
|
||||
<span style="font-size: 32px; font-weight: bold; color: #d35400; letter-spacing: 3px;">{{ $pay_trans->transmitted_data['txid'] }}</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<p><strong>{{ __('payment.prepayment_reference_only') }}</strong></p>
|
||||
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<h5 class="mb-3"><i class="fa fa-university"></i>
|
||||
{{ __('payment.prepayment_bank_details') }}:</h5>
|
||||
<div style="background: #fff; border-radius: 8px; padding: 15px;">
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0; width: 140px;">
|
||||
<strong>{{ __('payment.account_holder') }}:</strong>
|
||||
</td>
|
||||
<td style="padding: 5px 0;">
|
||||
{{ $pay_trans->transmitted_data['clearing_bankaccountholder'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.IBAN') }}:</strong>
|
||||
</td>
|
||||
<td style="padding: 5px 0; font-family: monospace; letter-spacing: 1px;">
|
||||
{{ $pay_trans->transmitted_data['clearing_bankiban'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.BIC') }}:</strong>
|
||||
</td>
|
||||
<td style="padding: 5px 0; font-family: monospace;">
|
||||
{{ $pay_trans->transmitted_data['clearing_bankbic'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.bank') }}:</strong>
|
||||
</td>
|
||||
<td style="padding: 5px 0;">
|
||||
{{ $pay_trans->transmitted_data['clearing_bankname'] }}</td>
|
||||
</tr>
|
||||
<tr style="border-top: 1px solid #ffc107;">
|
||||
<td style="padding: 10px 10px 5px 0;">
|
||||
<strong>{{ __('payment.total_amount') }}:</strong>
|
||||
</td>
|
||||
<td
|
||||
style="padding: 10px 0 5px 0; font-size: 18px; font-weight: bold; color: #d35400;">
|
||||
{{ number_format(floatval($pay_trans->shopping_payment->amount / 100), 2, ',', '.') }}
|
||||
EUR</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<hr style="border-color: #ffc107;">
|
||||
|
||||
<p>{{ __('payment.prepayment_reference_notice') }}</p>
|
||||
|
||||
@if (isset($pay_trans->transmitted_data['txid']))
|
||||
<div class="text-center p-4 my-3"
|
||||
style="background: #fff; border: 3px dashed #ffc107; border-radius: 8px;">
|
||||
<strong style="font-size: 16px;">{{ __('payment.prepayment_txid') }}:</strong><br>
|
||||
<span
|
||||
style="font-size: 32px; font-weight: bold; color: #d35400; letter-spacing: 3px;">{{ $pay_trans->transmitted_data['txid'] }}</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<p><strong>{{ __('payment.prepayment_reference_only') }}</strong></p>
|
||||
|
||||
</div>
|
||||
<hr />
|
||||
@endif
|
||||
|
||||
@if($pay_trans->shopping_payment->clearingtype === "cc")
|
||||
<h4>{{ __('payment.payment_by_credit_card') }}:</h4>
|
||||
<p>{{ __('payment.payment_by_credit_card_info') }}</p>
|
||||
<hr />
|
||||
@endif
|
||||
@if ($pay_trans->shopping_payment->clearingtype === 'cc')
|
||||
<h4>{{ __('payment.payment_by_credit_card') }}:</h4>
|
||||
<p>{{ __('payment.payment_by_credit_card_info') }}</p>
|
||||
<hr />
|
||||
@endif
|
||||
|
||||
|
||||
@if($pay_trans->shopping_payment->clearingtype === "elv")
|
||||
<h4>{{ __('payment.payment_by_SEPA') }}:</h4>
|
||||
<p>{{ __('payment.payment_by_SEPA_info') }}</p>
|
||||
<hr />
|
||||
@endif
|
||||
@if ($pay_trans->shopping_payment->clearingtype === 'elv')
|
||||
<h4>{{ __('payment.payment_by_SEPA') }}:</h4>
|
||||
<p>{{ __('payment.payment_by_SEPA_info') }}</p>
|
||||
<hr />
|
||||
@endif
|
||||
|
||||
@if($pay_trans->shopping_payment->clearingtype === "fnc" && $pay_trans->shopping_payment->onlinebanktransfertype === 'MIV')
|
||||
<h4>{{ __('payment.payment_by_invoice') }}:</h4>
|
||||
<p>{{ __('payment.payment_by_invoice_info') }}</p>
|
||||
<hr />
|
||||
@endif
|
||||
@if (
|
||||
$pay_trans->shopping_payment->clearingtype === 'fnc' &&
|
||||
$pay_trans->shopping_payment->onlinebanktransfertype === 'MIV')
|
||||
<h4>{{ __('payment.payment_by_invoice') }}:</h4>
|
||||
<p>{{ __('payment.payment_by_invoice_info') }}</p>
|
||||
<hr />
|
||||
@endif
|
||||
@endif
|
||||
<p>
|
||||
<strong>{{ __('payment.your_mivita_team') }}</strong>
|
||||
</p>
|
||||
<hr />
|
||||
<div class="clearfix">
|
||||
<a href="{{ ($back_url ?? null) ?: Util::getUserShopBackUrl($order_reference) }}"
|
||||
class="btn float-left btn-primary btn-text-500">
|
||||
<i class="fa fa-shopping-bag"></i>
|
||||
{{ ($back_url ?? null) ? __('abo.back_to_abo') : __('payment.back_to_shop') }}
|
||||
</a>
|
||||
<a href="{{ route('withdrawal.create') }}" class="btn float-right btn-xs btn-default btn-text-500">
|
||||
<i class="fa fa-undo"></i> {{ __('withdrawal.button_label') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /CHECKOUT FINAL MESSAGE -->
|
||||
|
|
@ -179,4 +226,4 @@
|
|||
</div>
|
||||
</section>
|
||||
<!-- / -->
|
||||
@endsection
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -381,6 +381,7 @@
|
|||
{!! Form::hidden('shopping_collect_order_id', $shopping_user->shopping_collect_order_id) !!}
|
||||
{!! Form::hidden('is_abo', $is_abo) !!}
|
||||
{!! Form::hidden('abo_interval', $abo_interval) !!}
|
||||
{!! Form::hidden('recovery_user_abo_id', $recovery_user_abo_id ?? null) !!}
|
||||
|
||||
@if (\Session::has('elv-managemandate'))
|
||||
<div class="col-sm-12">
|
||||
|
|
@ -1021,6 +1022,9 @@
|
|||
<h4>{{ __('abo.abo_delivery') }}</h4>
|
||||
<hr>
|
||||
<div style="background-color: #fff7da; padding: 10px; border-radius: 5px;">
|
||||
@if(!empty($recovery_user_abo_id))
|
||||
<em class="small mb-4">{!! __('abo.abo_recovery_info_check') !!}</em>
|
||||
@else
|
||||
<em class="small mb-4">{!! __('abo.abo_order_info_check') !!}</em>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px; border-color: #b4b4b4; border-width: 1px;">
|
||||
|
||||
|
|
@ -1028,14 +1032,14 @@
|
|||
<hr style="margin-top: 10px; margin-bottom: 10px; border-color: #b4b4b4; border-width: 1px;">
|
||||
<em class="small mb-4">{!! __('abo.abo_order_info_check_3', ['abo-min-duration' => \App\Models\Setting::getContentBySlug('abo-min-duration')]) !!}</em>
|
||||
<hr>
|
||||
|
||||
|
||||
<div class="clearfix mb-2">
|
||||
<span class="pull-right small text-right">
|
||||
<div class="no-line-break"><strong> {{ now()->format('d.m.Y') }}</strong></div>
|
||||
</span>
|
||||
<span class="pull-left small"><strong>{{ __('abo.abo_first_execution_date') }}:</strong></span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="clearfix mb-2">
|
||||
<span class="pull-right small text-right">
|
||||
<div class="no-line-break"><strong> {{ HTMLHelper::getAboStrLang($abo_interval) }}</strong></div>
|
||||
|
|
@ -1048,6 +1052,7 @@
|
|||
</span>
|
||||
<span class="pull-left small"><strong>{{ __('abo.abo_next_execution_date') }}:</strong></span>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</fieldset>
|
||||
@endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue