mivita/resources/views/web/templates/checkout-final.blade.php
Kevin e7b40bc513 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>
2026-07-02 10:38:05 +00:00

229 lines
9.4 KiB
PHP

@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')">
<div class="overlay dark-1"><!-- dark overlay [1 to 9 opacity] --></div>
<div class="container">
</div>
</section>
<!-- /PAGE HEADER -->
<style>
div.shop-item {
margin-bottom: 30px;
border: 1px solid #ddd;
}
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 {
padding: 4px;
}
.cartContent a.remove_item {
background: transparent;
}
.cartContent .product_name {
font-size: 1.15em;
}
.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>
<!-- -->
<!-- -->
<section>
<div class="container">
<!-- CHECKOUT FINAL MESSAGE -->
<div class="panel panel-default">
<div class="panel-body">
<h3>{{ __('payment.thank_you_very_much') }}</h3>
<p>{{ __('payment.we_have_received_your_order_get_email') }}</p>
<h4>{{ __('payment.your_order_number_is') }}: {{ $order_reference }}</h4>
<hr />
@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>
<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 === '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
@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 -->
</div>
</section>
<!-- / -->
@endsection