mivita/resources/views/admin/sales/_detail.blade.php
Kevin d65922adfe Statistiken: Kundenfeedback 2026-08-19 komplett (N1-N8) + Review-Fixes + VP-/Incentive-Repair gehärtet
Statistik-Änderungen 2026-08-19 (dev/2026-07-22/entwicklungsplan-2026-08-19.md, alle 8 Pakete gemäß beantworteten F-Fragen):
- N1 Monatsstatistik: Team-Cluster (Firstlines klickbar -> neue Seite user_team_firstlines, Teampartner gesamt/Payline [nur aktive], Abos Payline mit +N) + Level-Kachel (Quali-Stufe, fehlende Payline-/persönliche Punkte, Karriere-Level); LiveCommissionService-Snapshot v3 reicht Level-/Quali-Daten durch
- N2 Abo-Kacheln auf Home monatsbezogen (aboStockCount-Rückrechnung über cancel/deleted/Status-Historie; VIP-Statistik bleibt tagesaktuell)
- N3 VIP-Statistik 'Recruiter des Monats' (Neupartner-Definition wie KPI, rekursives Ketten-Volumen als Gesamtpunkte inkl. Starterpaket) + Drilldown/CSV-Spalte 'Punkte gesamt'
- N4 Prognose-Block 'Level & Provision laut Prognose (Stand 25.)' mit unverbindlich-Kennzeichnung (ebenengenaue offene Abo-Punkte + TP-Laufstände)
- N5 Checkout-Herkunft: Dropdown raus, Pflicht-Freitext (lokalisierte Fehlermeldung)
- N6 Berater-Profilfoto (user_accounts.profile_image, Einwilligung als Sprachkey-Platzhalter, DSGVO-Löschung) + teaminterne Top-3-Karte (TopResultsService, Scope-Schalter)
- N7 USt-Optionen: 'nicht umsatzsteuerpflichtig' zuerst + '§ 19 UStG'-Textfix
- N8 Jahresgebühr-Nachfassliste je Berater (AnnualFeeDueService, überfällig/1-3 Monate, Sidenav)

Kontroll-Review (8 Perspektiven) angewendet: next-Level-Fallback im Steady-State (resolveNextLevel — sonst 'Höchstes Level erreicht' für Normalfälle), _calculated-Punktebasis bei mehr Paylines, keine Wiederbelebung deaktivierter Abos in der Monatsrückrechnung, Payline-Abo-Kachel monatskonsistent, Top-3-Nachrücker; Performance: BackofficeDashboardService als Singleton mit lineBuckets-Memo (+flushLineBucketsMemo), level_forecast 6h-Cache; Reuse: User-Scopes firstlinesOf/newPartnerIn, SalesVolumePoints::totalPointsByUser, Slim::storeCroppedImage (3 Upload-Kopien vereinigt), activeAbo-Scope statt Inline-Prädikate, Form::open-Konvention, Return-Types

Repair-Härtung (Kundenentscheide): VP-Nachtrepair dedupliziert über shopping_order_id (Live-Pfad schreibt sie jetzt mit), zählende Alt-Zeilen-Erkennung, Vormonats-Scan für Monatswechsel, Firmenaccount-Buchungen (config mivita.company_user_id) werden automatisch auf den Berater umgebucht (in place bzw. per Gegenbuchung bei geschlossenem Monat; Echtfall Anna Schall Order 58797 -> Christina Schuder), Berater-zu-Berater nur Warnung; Incentive-Repair: m_sponsor=NULL löscht nicht mehr, FK-Repair vor Stale-Bereinigung, gebatchte Lookups, zentrales Incentive::qualificationWindow(); .env aus dem Git-Tracking entfernt (Pflege per SFTP)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 10:44:44 +00:00

962 lines
53 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@php
$aboOrder = $shopping_order->is_abo
? \App\Models\UserAboOrder::where('shopping_order_id', $shopping_order->id)->first()
: null;
$isExternDone = $aboOrder && (int) $aboOrder->status === \App\Services\AboExternalCompletionService::STATUS_EXTERN_DONE;
$canExternDone = $aboOrder && ! $isExternDone && ! $aboOrder->paid && ! $shopping_order->paid;
@endphp
<div class="card">
<!-- Status -->
<div class="card-body">
<div class="row">
<div class="col-md-2 mb-1">
<strong class="mr-2">{{ __('Status') }}:</strong>
<div class="d-flex flex-wrap align-items-center mt-1" style="gap: 6px;">
<span class="text-big">
{!! \App\Services\Payment::getShoppingOrderBadge($shopping_order) !!}
</span>
</div>
</div>
<div class="col-md-3 mb-1">
<strong class="mr-2">{{ __('order.shipping') }}:</strong>
<div class="d-flex flex-wrap align-items-center mt-1" style="gap: 6px;"> @if($shopping_order->payment_for !== 8)
@if ($isAdmin)
<button type="button" class="btn btn-sm btn-{{ $shopping_order->getShippedColor() }}"
data-toggle="modal" data-target="#modals-shipped" data-id="{{ $shopping_order->id }}"
data-shipped="{{ $shopping_order->shipped }}" data-back="{{ url()->current() }}"
data-action="store_shipped">
<span class="fa fa-edit"></span> <strong>{{ $shopping_order->getShippedType() }}</strong>
</button>
<button type="button" class="btn btn-sm btn-{{ $shopping_order->hasDhlShipments() ? 'primary' : 'secondary' }}"
data-toggle="modal"
data-id="{{ $shopping_order->id }}"
data-target="#modals-load-content"
data-action="create-dhl-shipment"
data-route="{{ route('modal_load') }}">
<i class="fas fa-shipping-fast"></i> DHL
</button>
@else
<span class="text-big">
<span
class="badge badge-pill badge-{{ $shopping_order->getShippedColor() }}">{{ $shopping_order->getShippedType() }}</span>
</span>
@endif
@endif
</div>
</div>
@if ($isAdmin && $aboOrder)
<div class="col-md-3 mb-1">
<strong class="mr-2">{{ __('navigation.abo') }}:</strong>
<div class="d-flex flex-wrap align-items-center mt-1" style="gap: 6px;">
@if ($isExternDone)
<span class="badge badge-pill badge-success">
<span class="fa fa-check"></span> {{ __('abo.abo_extern_done') }}
</span>
@elseif ($canExternDone)
<button type="button" class="btn btn-sm btn-success" data-toggle="modal"
data-target="#modals-abo-extern-done">
<span class="fa fa-check"></span> {{ __('abo.extern_done') }}
</button>
@endif
</div>
</div>
@endif
<div class="col-md-4 mb-2">
<strong class="mr-2">{{ __('order.invoice') }}:</strong>
<div class="d-flex flex-wrap align-items-center mt-1" style="gap: 6px;">
@if ($isAdmin)
@if ($shopping_order->isInvoice())
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'download']) }}"
class="btn btn-primary btn-sm" title="Download DE"><i class="fa fa-download"></i></a>
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'stream']) }}"
target="_blank" class="btn btn-warning btn-sm" title="Ansicht DE"><i class="fa fa-eye"></i></a>
{{-- Lokalisierte Versionen --}}
@foreach($shopping_order->user_invoice->getAvailableLocales() as $locale)
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'download', $locale]) }}"
class="btn btn-outline-primary btn-sm" title="Download {{ strtoupper($locale) }}">
<i class="fa fa-download"></i> {{ strtoupper($locale) }}
</a>
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'stream', $locale]) }}"
class="btn btn-outline-warning btn-sm" title="Ansicht {{ strtoupper($locale) }}">
<i class="fa fa-eye"></i> {{ strtoupper($locale) }}
</a>
@endforeach
@if (Auth::user()->isSySAdmin())
<button type="button" class="btn btn-sm btn-info" data-toggle="modal"
data-target="#modals-invoice" data-id="{{ $shopping_order->id }}" //TODO
//data-invoice="{{ $shopping_order->invoice_status }}"
data-back="{{ url()->current() }}" data-action="create_invoice">
<span class="fa fa-file"></span>
</button>
@endif
@else
@if (Auth::user()->isSySAdmin())
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal"
data-target="#modals-invoice" data-id="{{ $shopping_order->id }}" //TODO //
data-invoice="{{ $shopping_order->invoice_status }}"
data-back="{{ url()->current() }}" data-action="create_invoice">
<span class="fa fa-file"></span> <strong>{{ __('order.create_invoice') }}</strong>
</button>
@endif
@endif
@else
@if ($shopping_order->isInvoice())
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'download']) }}"
class="btn btn-primary btn-sm" title="Download DE"><i class="fa fa-download"></i></a>
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'stream']) }}"
target="_blank" class="btn btn-warning btn-sm" title="Ansicht DE"><i class="fa fa-eye"></i></a>
{{-- Lokalisierte Versionen --}}
@foreach($shopping_order->user_invoice->getAvailableLocales() as $locale)
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'download', $locale]) }}"
class="btn btn-outline-primary btn-sm" title="Download {{ strtoupper($locale) }}">
<i class="fa fa-download"></i> {{ strtoupper($locale) }}
</a>
<a href="{{ route('storage_file', [$shopping_order->id, 'invoice', 'stream', $locale]) }}"
class="btn btn-outline-warning btn-sm" title="Ansicht {{ strtoupper($locale) }}">
<i class="fa fa-eye"></i> {{ strtoupper($locale) }}
</a>
@endforeach
@endif
@endif
@if (($shopping_order->txaction === 'extern' || $shopping_order->txaction === 'extern_paid') && $shopping_order->wp_invoice_path)
<a href="{{ $shopping_order->wp_invoice_path }}" class="btn btn-secondary btn-sm"><i
class="fa fa-external-link-alt"></i> <i class="fa fa-download"></i></a>
@endif
</div>
</div>
@if ($isAdmin && $shopping_order->payment_for != 8)
<div class="col-md-3 mb-2">
<strong class="mr-2">{{ __('order.delivery_note') }}:</strong>
<div class="d-flex flex-wrap align-items-center mt-1" style="gap: 6px;">
@if ($shopping_order->isInvoice())
<a href="{{ route('storage_file', [$shopping_order->id, 'delivery', 'download']) }}"
class="btn btn-primary btn-sm" title="Download DE"><i class="fa fa-download"></i></a>
<a href="{{ route('storage_file', [$shopping_order->id, 'delivery', 'stream']) }}"
target="_blank" class="btn btn-warning btn-sm" title="Ansicht DE"><i class="fa fa-eye"></i></a>
{{-- Lokalisierte Versionen --}}
@foreach($shopping_order->user_invoice->getAvailableLocales() as $locale)
<a href="{{ route('storage_file', [$shopping_order->id, 'delivery', 'download', $locale]) }}"
class="btn btn-outline-primary btn-sm" title="Download {{ strtoupper($locale) }}">
<i class="fa fa-download"></i> {{ strtoupper($locale) }}
</a>
<a href="{{ route('storage_file', [$shopping_order->id, 'delivery', 'stream', $locale]) }}"
class="btn btn-outline-warning btn-sm" title="Ansicht {{ strtoupper($locale) }}">
<i class="fa fa-eye"></i> {{ strtoupper($locale) }}
</a>
@endforeach
@endif
</div>
</div>
@endif
<div class="col-md-3 mb-2">
@if (!$isAdmin && $shopping_order->isCancellationInvoice())
@php
$cancellation_invoice = $shopping_order->getCancellationInvoice();
@endphp
@if($cancellation_invoice)
<strong class="mr-2">Stornorechnung:</strong><span class="badge badge-danger">{{ $cancellation_invoice->full_number }}</span>
<br>
<div class="d-flex flex-wrap align-items-center mt-1" style="gap: 6px;">
<a href="{{ route('storage_file', [$shopping_order->id, 'cancellation', 'download']) }}"
class="btn btn-danger btn-sm" title="Stornorechnung herunterladen DE">
<i class="fa fa-download"></i>
</a>
<a href="{{ route('storage_file', [$shopping_order->id, 'cancellation', 'stream']) }}"
target="_blank" class="btn btn-danger btn-sm" title="Stornorechnung anzeigen DE">
<i class="fa fa-eye"></i>
</a>
{{-- Lokalisierte Versionen der Stornorechnung --}}
@foreach($cancellation_invoice->getAvailableLocales() as $locale)
<a href="{{ route('storage_file', [$shopping_order->id, 'cancellation', 'download', $locale]) }}"
class="btn btn-outline-danger btn-sm" title="Download {{ strtoupper($locale) }}">
<i class="fa fa-download"></i> {{ strtoupper($locale) }}
</a>
<a href="{{ route('storage_file', [$shopping_order->id, 'cancellation', 'stream', $locale]) }}"
class="btn btn-outline-danger btn-sm" title="Ansicht {{ strtoupper($locale) }}">
<i class="fa fa-eye"></i> {{ strtoupper($locale) }}
</a>
@endforeach
</div>
@endif
@endif
</div>
</div>
</div>
<hr class="m-0">
<!-- / Status -->
<!-- Info -->
<div class="card-body pb-1">
<div class="row">
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('order.order_date') }}</div>
{{ $shopping_order->created_at->format('d.m.Y H:i') }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('order.number_of_items') }}</div>
{{ $shopping_order->getItemsCount() }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('order.total_price') }}</div>
{{ $shopping_order->getFormattedTotalShipping() }} &euro;
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('order.points_total') }}</div>
{{ $shopping_order->getFormattedPoints() }}
</div>
@if ((int) $shopping_order->payment_for === 6 && ($shopping_order->customer_order_source_comment || $shopping_order->customer_order_source))
<div class="col-md-3 mb-3">
<div class="text-muted small">Herkunft</div>
@if ($shopping_order->customer_order_source)
{{ $shopping_order->getCustomerOrderSourceLabel() }}
@if ($shopping_order->customer_order_source_comment)
<div class="small text-muted mt-1">{{ $shopping_order->customer_order_source_comment }}</div>
@endif
@else
{{ $shopping_order->customer_order_source_comment }}
@endif
</div>
@endif
</div>
</div>
<hr class="m-0">
<div class="card-body pb-1">
<div class="row">
<div class="col-md-9 mb-3">
<div class="text-muted small">{{ __('order.points_turnover_assigned') }}</div>
@if($shopping_order->user_sales_volume && $shopping_order->user_sales_volume->user)
{{ $shopping_order->user_sales_volume->user->getFullName() }}
@endif
@if ($isAdmin)
<button type="button" class="btn btn-xs btn-outline-secondary" data-toggle="modal"
data-target="#modals-load-content" data-id="{{ $shopping_order->id }}"
data-action="shopping-order-change-points" data-view="{{ $isView }}"
data-route="{{ route('modal_load') }}"><span class="fa fa-edit"></span></button>
@endif
</div>
<div class="col-md-3 mb-3">
@if ($isAdmin)
@if ($shopping_order->isCancellationInvoice())
@php
$cancellation_invoice = $shopping_order->getCancellationInvoice();
@endphp
@if($cancellation_invoice)
<strong class="mr-2">Stornorechnung:</strong><br>
<span class="badge badge-danger">{{ $cancellation_invoice->full_number }}</span>
<a href="{{ route('storage_file', [$shopping_order->id, 'cancellation', 'download']) }}"
class="btn btn-danger btn-sm" title="Stornorechnung herunterladen DE">
<i class="fa fa-download"></i>
</a>
<a href="{{ route('storage_file', [$shopping_order->id, 'cancellation', 'stream']) }}"
target="_blank" class="btn btn-danger btn-sm" title="Stornorechnung anzeigen DE">
<i class="fa fa-eye"></i>
</a>
{{-- Lokalisierte Versionen der Stornorechnung --}}
@foreach($cancellation_invoice->getAvailableLocales() as $locale)
<a href="{{ route('storage_file', [$shopping_order->id, 'cancellation', 'download', $locale]) }}"
class="btn btn-outline-danger btn-sm" title="Download {{ strtoupper($locale) }}">
<i class="fa fa-download"></i> {{ strtoupper($locale) }}
</a>
<a href="{{ route('storage_file', [$shopping_order->id, 'cancellation', 'stream', $locale]) }}"
class="btn btn-outline-danger btn-sm" title="Ansicht {{ strtoupper($locale) }}">
<i class="fa fa-eye"></i> {{ strtoupper($locale) }}
</a>
@endforeach
<br><small class="text-muted">Erstellt am: {{ $cancellation_invoice->date }}</small>
@endif
@else
@if ($shopping_order->isInvoice())
<button type="button" class="btn btn-sm btn-outline-warning" data-toggle="modal"
data-target="#modals-cancellation-invoice" data-id="{{ $shopping_order->id }}"
data-back="{{ url()->current() }}" data-action="create_cancellation_invoice">
<span class="fa fa-undo"></span> <strong>Stornorechnung erstellen</strong>
</button>
@endif
@endif
@endif
</div>
</div>
</div>
<hr class="m-0">
@if ($isAdmin)
<!-- Member -->
<div class="card-body pb-1">
<div class="row">
<div class="col-md-8 mb-3">
@if (isset($change_member_error) && $change_member_error)
<div class="row">
<div class="col-sm-12">
<div class="alert alert-danger p-2">
<ul>
<li>{{ $change_member_error }}</li>
</ul>
</div>
</div>
</div>
@endif
<div class="text-muted small">{{ __('order.assigned_counsellor') }}</div>
@if ($isView === 'sales_user')
@if ($shopping_order->user_shop)
{{ $shopping_order->user_shop->title }}
@endif
@endif
@if ($isView === 'sales_customer')
@if ($shopping_order->shopping_user && $shopping_order->shopping_user->is_like)
<button type="button" class="btn btn-xs btn-outline-info" data-toggle="modal"
data-target="#modals-load-content" data-id="{{ $shopping_order->shopping_user->id }}"
data-action="shopping-user-is-like-member"
data-back="{{ route('admin_sales_customers_detail', [$shopping_order->id]) }}"
data-modal="modal-xl" data-route="{{ route('modal_load') }}"><span
class="fa fa-edit"></span> {{ __('order.assigned_advisor') }}</button>
@else
@if ($shopping_order->member)
<a class="btn btn-xs btn-outline-primary"
href="{{ route('admin_lead_edit', [$shopping_order->member->id]) }}"><i
class="ion ion-ios-contacts"></i></a>
{{ $shopping_order->member->getFullName() }} <span
class="text-muted">#{{ $shopping_order->member->number }}</span>
@endif
<button type="button" class="btn btn-xs btn-outline-secondary" data-toggle="modal"
data-target="#modals-load-content" data-id="{{ $shopping_order->id }}"
data-action="shopping-order-change-member" data-view="{{ $isView }}"
data-route="{{ route('modal_load') }}"><span class="fa fa-edit"></span></button>
@endif
@endif
</div>
<div class="col-md-4 mb-3">
<div class="text-muted small">{{ __('order.purchased_from_shop') }}</div>
@if ($shopping_order->user_shop && $shopping_order->user_shop->user && $shopping_order->user_shop->user->isActive() && $shopping_order->user_shop->user->isActiveShop())
<a href="{{ $shopping_order->user_shop->getSubdomain(false) }}" class="badge badge-success"
target="_blank">{{ $shopping_order->user_shop->getSubdomain(false) }}</a>
@else
@if ($shopping_order->user_shop)
<span class="badge badge-danger"
target="_blank">{{ $shopping_order->user_shop->getSubdomain(false) }}</span>
@endif
@endif
</div>
</div>
</div>
<hr class="m-0">
<!-- / Member -->
@endif
{{-- Vorkasse Hinweis mit TXID bei unbezahlten Bestellungen --}}
@php
$vorPayment = $shopping_order->shopping_payments->where('clearingtype', 'vor')->first();
$isVorUnpaid = $vorPayment && !in_array($shopping_order->txaction, ['paid', 'completed']);
@endphp
@if($isVorUnpaid)
@php
$payTrans = $vorPayment->payment_transactions->first();
$txid = $payTrans->txid ?? ($payTrans->transmitted_data['txid'] ?? null);
@endphp
<!-- Billing -->
<div class="card-body">
<div class="alert alert-warning border-warning mb-3" style="border-left: 4px solid #ffc107 !important;">
<h5 class="mb-3"><i class="fa fa-university"></i> {{ __('payment.prepayment_bank_details') }}:</h5>
<div style="background: #fff; border-radius: 8px; padding: 15px;">
@if($payTrans && isset($payTrans->transmitted_data) && !empty($payTrans->transmitted_data['clearing_bankiban']))
<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;">{{ $payTrans->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;">{{ $payTrans->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;">{{ $payTrans->transmitted_data['clearing_bankbic'] ?? '—' }}</td>
</tr>
<tr>
<td style="padding: 5px 10px 5px 0;"><strong>{{ __('payment.bank') }}:</strong></td>
<td style="padding: 5px 0;">{{ $payTrans->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($payTrans->shopping_payment->amount/100), 2, ",", ".") }} EUR</td>
</tr>
</table>
@else
<p class="mb-0 text-muted">{{ __('payment.prepayment_no_clearing_data') }}</p>
@endif
</div>
<hr style="border-color: #ffc107;">
<p>{{ __('payment.prepayment_reference_notice') }}</p>
@if(isset($payTrans->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;">{{ $payTrans->transmitted_data['txid'] }}</span>
</div>
@endif
<p><strong>{{ __('payment.prepayment_reference_only') }}</strong></p>
<p class="mt-3 mb-0 text-muted"><em>{{ __('payment.prepayment_waiting_payment') }}</em></p>
</div>
</div>
<hr class="m-0">
@endif
<!-- Billing -->
<div class="card-body">
<h6 class="small font-weight-semibold">
@if ($shopping_order->shopping_user->is_from === 'shopping' ||
$shopping_order->shopping_user->is_from === 'extern')
{{ __('order.billing_address_of_client') }}
@else
{{ __('order.billing_address_of_the_advisor') }}
@endif
</h6>
<div class="row">
@if ($shopping_order->shopping_user->billing_company)
<div class="col-md-12 mb-3">
<div class="text-muted small">{{ __('Company') }}</div>
{{ $shopping_order->shopping_user->billing_company }}
</div>
@endif
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Salutation') }}</div>
{{ \App\Services\HTMLHelper::getSalutationLang($shopping_order->shopping_user->billing_salutation) }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('First name') }}</div>
{{ $shopping_order->shopping_user->billing_firstname }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Last name') }}</div>
{{ $shopping_order->shopping_user->billing_lastname }}
</div>
</div>
<div class="row">
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Street') }}</div>
{{ $shopping_order->shopping_user->billing_address }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Addition') }}</div>
{{ $shopping_order->shopping_user->billing_address_2 }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Postcode') }}</div>
{{ $shopping_order->shopping_user->billing_zipcode }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('City') }}</div>
{{ $shopping_order->shopping_user->billing_city }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('E-Mail') }}</div>
{{ $shopping_order->shopping_user->billing_email }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Phone') }}</div>
{{ $shopping_order->shopping_user->billing_phone }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Country') }}</div>
{{ $shopping_order->shopping_user->billing_country->getLocated() }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('account.preferred_language') }}</div>
{{ \App\Models\ShoppingUser::getAvailableLanguages()[$shopping_order->shopping_user->language] ?? $shopping_order->shopping_user->language }}
</div>
</div>
</div>
<!-- / Billing -->
<!-- Shipping -->
@if ($shopping_order->shopping_user->is_from !== 'homeparty')
<hr class="m-0">
<div class="card-body">
<h6 class="small font-weight-semibold">
@if ($shopping_order->shopping_user->is_from === 'user_order' ||
$shopping_order->shopping_user->is_from === 'extern')
@if ($shopping_order->shopping_user->is_for === 'me')
{{ __('order.delivery_address_of_the_consultant') }}
@else
{{ __('order.delivery_address_of_the_client') }}
@endif
@endif
@if ($shopping_order->shopping_user->is_from === 'wizard')
{{ __('order.delivery_address_of_the_consultant') }}
@endif
@if ($shopping_order->shopping_user->is_from === 'membership')
{{ __('order.delivery_address_of_the_consultant') }}
@endif
@if ($shopping_order->shopping_user->is_from === 'shopping')
{{ __('order.delivery_address_of_the_client') }}
@endif
</h6>
@if ($shopping_order->shopping_user->same_as_billing)
{{ __('email.checkout_mail_same_address') }}
@else
<div class="row">
@if ($shopping_order->shopping_user->shipping_company)
<div class="col-md-12 mb-3">
<div class="text-muted small">{{ __('Company') }}</div>
{{ $shopping_order->shopping_user->shipping_company }}
</div>
@endif
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Salutation') }}</div>
{{ \App\Services\HTMLHelper::getSalutationLang($shopping_order->shopping_user->shipping_salutation) }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('First name') }}</div>
{{ $shopping_order->shopping_user->shipping_firstname }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Last name') }}</div>
{{ $shopping_order->shopping_user->shipping_lastname }}
</div>
</div>
<div class="row">
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Street') }}</div>
{{ $shopping_order->shopping_user->shipping_address }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Addition') }}</div>
{{ $shopping_order->shopping_user->shipping_address_2 }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Postcode') }}</div>
{{ $shopping_order->shopping_user->shipping_zipcode }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('City') }}</div>
{{ $shopping_order->shopping_user->shipping_city }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('E-Mail') }}</div>
{{ $shopping_order->shopping_user->shipping_email }}
</div>
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Phone') }}</div>
{{ $shopping_order->shopping_user->shipping_phone }}
</div>
@if($shopping_order->shopping_user->shipping_postnumber)
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('payment.dhl_postnumber') }}</div>
<span class="badge badge-info">{{ $shopping_order->shopping_user->shipping_postnumber }}</span>
<small class="d-block text-muted">{{ __('payment.packstation_delivery') }}</small>
</div>
@endif
<div class="col-md-3 mb-3">
<div class="text-muted small">{{ __('Country') }}</div>
{{ $shopping_order->shopping_user->shipping_country->getLocated() }}
</div>
</div>
@endif
</div>
@endif
<hr class="m-0">
<!-- / Shipping -->
<!-- DHL Sendungen -->
@include('admin.sales._detail_dhl_shipments')
<!-- / DHL Sendungen -->
<!-- Items -->
<div class="card-body">
<h6 class="small font-weight-semibold">
@if ($shopping_order->shopping_user->is_from === 'user_order')
@if ($shopping_order->shopping_user->is_for === 'me')
<strong>{{ __('order.order_for_consultant') }}</strong>
@else
<strong>{{ __('order.order_for_client') }}</strong>
@endif
@endif
@if ($shopping_order->shopping_user->is_from === 'wizard')
<strong>{{ __('order.adviser_order_for_registration') }}</strong>
@endif
@if ($shopping_order->shopping_user->is_from === 'membership')
<strong>{{ __('order.adviser_order_for_membership') }}</strong>
@endif
@if ($shopping_order->shopping_user->is_from === 'shopping')
<strong>{{ __('order.client_order_via_shop') }}</strong>
@endif
@if ($shopping_order->shopping_user->is_from === 'homeparty')
<h5>{{ __('order.consultant_order_for_home_party') }} </h5>
<hr>
@endif
@if ($shopping_order->shopping_user->is_from === 'collection')
<h5>{{ __('order.adviser_collective_invoice') }}</h5>
<hr>
@endif
</h6>
<style>
table.table-product,
table.table-product tr td,
table.table-product tr th {
border: none;
}
table.table-product tr.border-top td {
border-top: 1px solid #b8b8b9;
}
table.table-product tr.border-bottom td,
table.table-product tr.border-bottom th {
border-bottom: 1px solid #b8b8b9;
}
</style>
@if ($shopping_order->shopping_user->is_from !== 'homeparty' && $shopping_order->shopping_user->is_from !== 'collection')
@include('admin.sales._detail_shopping_order')
@else
@if ($shopping_order->shopping_collect_order)
@include('admin.sales._detail_collection')
@endif
@if ($shopping_order->homeparty)
@include('admin.sales._detail_homparty')
@endif
@endif
</div>
<hr class="m-0">
@if ($shopping_order->txaction === 'extern')
<div class="card-body">
@if ($shopping_order->wp_invoice_path)
<div class="row">
<div class="col-sm-12">
<a href="{{ $shopping_order->wp_invoice_path }}" target="_blank"
class="btn btn-secondary btn-sm"><i class="fa fa-external-link-alt"></i>
{{ __('order.link_to_the_invoice') }}</a>
</div>
</div>
@endif
@if ($shopping_order->api_notice['wp_advertising'])
<div class="row">
<div class="col-sm-12">
<b>{{ __('order.advertising_material') }}: {!! $shopping_order->api_notice['wp_advertising'] !!}<br></b>
</div>
</div>
@endif
@if ($shopping_order->api_notice['wp_incentives'])
<div class="row">
<div class="col-sm-12">
<b>{{ __('order.incentives') }}: {!! $shopping_order->api_notice['wp_incentives'] !!}<br></b>
</div>
</div>
@endif
</div>
<hr class="m-0">
@endif
<!-- / Payment -->
<div class="card-body">
<h6 class="small font-weight-semibold">
{{ __('tables.payment') }}
</h6>
@if ($shopping_order->txaction !== 'extern')
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="min-width: 60px">#</th>
<th>{{ __('tables.payment_type') }}</th>
<th>{{ __('tables.total') }}</th>
<th>{{ __('tables.status') }}</th>
<th>{{ __('tables.date') }}</th>
<th>{{ __('tables.reference_number') }}</th>
</tr>
</thead>
<tbody>
@php($count = 0)
@if(isset($shopping_order->shopping_payments) && $shopping_order->shopping_payments)
@foreach ($shopping_order->shopping_payments as $shopping_payment)
@if(isset($shopping_payment) && $shopping_payment)
<tr>
<th scope="row">{{ ++$count }}</th>
<td>{{ $shopping_payment->getPaymentType() }}</td>
<td>{{ $shopping_payment->getPaymentAmount() }}</td>
<td>
@if ($isAdmin && $shopping_payment->clearingtype === 'fnc' && $shopping_payment->onlinebanktransfertype === 'MIV')
<button type="button"
class="btn btn-sm btn-{{ \App\Services\Payment::getFormattedTxactionColor($shopping_payment->txaction) }}"
data-toggle="modal" data-target="#modals-txaction"
data-id="{{ $shopping_order->id }}"
data-payment_id="{{ $shopping_payment->id }}"
data-txaction="{{ $shopping_payment->txaction }}"
data-back="{{ url()->current() }}" data-action="store_txaction">
<span class="fa fa-edit"></span>
<strong>{{ \App\Services\Payment::getFormattedTxaction($shopping_payment->txaction) }}</strong>
</button>
@else
{!! \App\Services\Payment::getShoppingPaymentBadge($shopping_payment) !!}
@endif
</td>
<td>{{ $shopping_payment->created_at->format('d.m.Y H:i') }}</td>
<td>{{ $shopping_payment->reference }}</td>
</tr>
@if ($isAdmin && $shopping_payment->payment_transactions)
@php($ccount = 0)
<tr>
<th scope="row" class="m-0">{{ $count }}.{{ ++$ccount }}</th>
<td colspan="5" class="m-0 p-0">
<table class="table table-info table-borderless mb-0 small">
<thead>
<tr>
<th style="min-width: 80px">Request</th>
<th style="min-width: 80px">{{ __('tables.status') }}</th>
<th style="min-width: 200px">TX-Action</th>
<th style="min-width: 120px">{{ __('tables.date') }}</th>
</tr>
</thead>
<tbody>
@foreach ($shopping_payment->payment_transactions as $payment_transaction)
<tr>
<td>{{ $payment_transaction->request }}</td>
<td>{{ $payment_transaction->status }}</td>
<td>{{ $payment_transaction->txaction }}
{{ $payment_transaction->errormessage }}</td>
<td>{{ $payment_transaction->created_at->format('d.m.Y H:i') }}
</td>
</tr>
@endforeach
</tbody>
</table>
</td>
</tr>
@endif
@endif
@endforeach
@endif
</tbody>
</table>
</div>
@else
<div class="row">
<div class="col-sm-12">
<div class="alert alert-info p-2 mt-2">
<ul>
<li>{{ __('order.order_via_external_shop') }} </li>
</ul>
</div>
</div>
</div>
@endif
</div>
</div>
@if ($isAdmin && $canExternDone)
<div class="modal fade" id="modals-abo-extern-done">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('admin_sales_customers_detail', [$shopping_order->id]) }}"
method="post">
@csrf
<input type="hidden" name="id" value="{{ $shopping_order->id }}">
<input type="hidden" name="action" value="shopping-order-abo-extern-done">
<div class="modal-header">
<h5 class="modal-title">{{ __('abo.extern_done_confirm_title') }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="alert alert-warning">{{ __('abo.extern_done_confirm_copy') }}</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ __('close') }}</button>
<button type="submit" class="btn btn-success">{{ __('abo.extern_done_confirm_button') }}</button>
</div>
</form>
</div>
</div>
@endif
@if ($isAdmin)
<div class="modal fade" id="modals-shipped">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('admin_sales_store') }}" method="post">
@csrf
<input type="hidden" name="id" value="{{ $shopping_order->id }}">
<input type="hidden" name="action" value="store_shipped">
<input type="hidden" name="back" value="{{ url()->current() }}">
<div class="modal-header">
<h5 class="modal-title">{{ __('Bestellung') }} {{ __('Versand') }} </h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-group col-sm-12">
<label class="form-label" for="shipped">{{ __('Versand') }}</label>
{{ Form::select('shipped', \App\Models\ShoppingOrder::getTransShippedType(), $shopping_order->shipped, ['data-live-search' => 'false', 'class' => 'selectpicker']) }}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ __('close') }}</button>
<button type="submit" class="btn btn-primary">{{ __('save') }}</button>
</div>
</form>
</div>
</div>
<div class="modal fade" id="modals-invoice">
<div class="modal-dialog">
<form class="modal-content form-prevent-multiple-submits" action="{{ route('admin_sales_invoice') }}" method="post">
@csrf
<input type="hidden" name="id" value="{{ $shopping_order->id }}">
<input type="hidden" name="action" value="create_invoice">
<input type="hidden" name="back" value="{{ url()->current() }}">
<input type="hidden" name="view" value="{{ $isView }}">
<div class="modal-header">
<h5 class="modal-title">{{ __('order.invoice') }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-group col-sm-12">
{{ Form::select('invoice_option', ['create' => 'Rechnung erstellen'], false, ['data-live-search' => 'false', 'class' => 'selectpicker']) }}
</div>
<div class="form-group col-sm-12">
<label class="form-label" for="invoice_date">{{ __('Rechnungsdatum') }}</label>
{!! Form::text('invoice_date', $shopping_order->created_at->format('d.m.Y'), [
'class' => 'form-control datepicker-base',
]) !!}
</div>
<div class="form-group col-sm-12">
<label class="form-label" for="invoice_number">{{ __('Rechnungsnummer') }}</label>
{!! Form::text('invoice_number', App\Services\Invoice::getInvoiceNumber(), [
'class' => 'form-control',
'disabled',
]) !!}
<em> nächste Rechnungsnummer <a href="{{ route('admin_settings') }}"><i
class="fa fa-edit"></i></a></em>
</div>
<div class="form-group col-sm-12">
<label class="custom-control custom-checkbox">
{!! Form::checkbox('invoice_send_mail', 1, false, ['class' => 'custom-control-input']) !!}
<span class="custom-control-label">{{ __('order.invoice') }} senden an:
{{ $shopping_order->shopping_user->billing_email }}</span>
</label>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{ __('close') }}</button>
<button type="submit" class="btn btn-primary button-prevent-multiple-submits"><i
class="spinner fa fa-spinner fa-spin"></i> {{ __('save') }}</button>
</div>
</form>
</div>
</div>
<div class="modal fade" id="modals-txaction">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('admin_sales_store') }}" method="post">
@csrf
<input type="hidden" name="id" value="{{ $shopping_order->id }}">
<input type="hidden" name="payment_id">
<input type="hidden" name="action" value="store_txaction">
<input type="hidden" name="back" value="{{ url()->current() }}">
<div class="modal-header">
<h5 class="modal-title">{{ __('order.order') }} {{ __('order.invoice') }} </h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-group col-sm-12">
<label class="form-label" for="txaction">{{ __('order.invoice') }}</label>
{{ Form::select('txaction', \App\Services\Payment::getTransTxactionInvoice(), 'invoice_paid', ['data-live-search' => 'false', 'class' => 'selectpicker']) }}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default"
data-dismiss="modal">{{ __('close') }}</button>
<button type="submit" class="btn btn-primary">{{ __('save') }}</button>
</div>
</form>
</div>
</div>
<div class="modal fade" id="modals-cancellation-invoice">
<div class="modal-dialog">
<form class="modal-content form-prevent-multiple-submits"
action="{{ route('admin_sales_invoice_cancellation') }}" method="post">
@csrf
<input type="hidden" name="id" value="{{ $shopping_order->id }}">
<input type="hidden" name="action" value="create_cancellation_invoice">
<input type="hidden" name="back" value="{{ url()->current() }}">
<div class="modal-header">
<h5 class="modal-title">{{ __('Stornorechnung erstellen') }}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="alert alert-warning">
<strong>Achtung!</strong> Sie sind dabei, eine Stornorechnung zu erstellen. Diese wird die
ursprüngliche Rechnung mit negativen Beträgen stornieren.
</div>
<div class="form-group col-sm-12">
<label class="form-label">{{ __('Ursprüngliche Rechnung') }}</label>
<div class="form-control-plaintext">
<strong>Rechnungsnummer:</strong>
{{ App\Services\Invoice::getNumber($shopping_order) }}<br>
<strong>Rechnungsdatum:</strong> {{ App\Services\Invoice::getDate($shopping_order) }}<br>
<strong>Betrag:</strong> {{ $shopping_order->getFormattedTotalShipping() }} €
</div>
</div>
<div class="form-group col-sm-12">
<label class="form-label" for="cancellation_date">{{ __('Stornodatum') }}</label>
{!! Form::text('cancellation_date', now()->format('d.m.Y'), ['class' => 'form-control datepicker-base']) !!}
</div>
<div class="form-group col-sm-12">
<label class="form-label" for="cancellation_number">{{ __('Stornonummer') }}</label>
{!! Form::text('cancellation_number', App\Services\Invoice::getInvoiceNumber(), [
'class' => 'form-control',
'disabled',
]) !!}
<em> nächste Rechnungsnummer <a href="{{ route('admin_settings') }}"><i
class="fa fa-edit"></i></a></em>
</div>
<div class="form-group col-sm-12">
<label class="custom-control custom-checkbox">
{!! Form::checkbox('cancellation_send_mail', 1, false, ['class' => 'custom-control-input']) !!}
<span class="custom-control-label">Stornorechnung an
{{ $shopping_order->shopping_user->billing_email }}</span>
</label>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default"
data-dismiss="modal">{{ __('close') }}</button>
<button type="submit" class="btn btn-danger button-prevent-multiple-submits"><i
class="spinner fa fa-spinner fa-spin"></i> Stornorechnung erstellen</button>
</div>
</form>
</div>
</div>
<script>
$(document).ready(function() {
$('#modals-txaction').on('show.bs.modal', function(event) {
var button = $(event.relatedTarget);
$(this).find(".modal-content input[name='payment_id']").val(button.data('payment_id'));
$(this).find(".modal-body select[name='txaction']").val(button.data('txaction'));
$('.selectpicker').selectpicker('refresh');
});
});
</script>
@endif