mivita/resources/views/admin/abo/_order_combined_summary.blade.php
Kevin ac3bd6e8ea Statistiken/Abo: Kundenfeedback 2026-07-24 komplett umgesetzt + Steuern: DATEV-Fixes 08+09/2025 (Sammel-Commit Branch-WIP)
Feedback-Umsetzung (dev/2026-07-22/feedback-analyse-2026-07-24.md, alle 10 Punkte):
- VIP-Statistik: eigener Berater ('ich', Linie 0) in Neue-Kundenabos- und beiden Top-10-Listen; Top-10-Umsatz sortiert nach abgerechneten Ist-Punkten + Abo-Anzahl-Spalte; Fußnote nicht-payline-wirksame Punkte (SalesVolumePoints::nonPaylinePoints)
- Führungskräfte-Liste: beide Sichten 'direkt' (an nächster FK abgeschnitten, additiv) und 'gesamt' (komplette Downline), Gesamt-Spalte nach Kundenzählweise
- Team-Abos: je Ebene 'abgerechnet (Monat)' und 'bis zum 25. erwartet'; Payline-Karte mit Teamabo-/Kundenabo-Zählern
- Incentive-Live-Ranking: Qualifizierte zuerst nummeriert (fixt auch isWinner rank<=max_winners)
- Porto: Netto-/Brutto-Kennzeichnung (Berater netto, Endkunden inkl. MwSt., portal_view-Flag; auch CRM-/Shop-Warenkorb + Checkout), Yard::shipping_tax-Fix
- Struktur-Ansicht: Abo-Badges 'A' (eigenes Abo) und '(n)' (Kundenabos) je Teampartner, gebatcht
- Abo-Löschung: Softdelete setzt active=0 (UserAbo deleting-Hook) + Bereinigungs-Migration für gelöschte-aber-aktive Abos
- Doku: technische Analyse + Kundinnen-Feedback-Dokument unter dev/2026-07-22/
- Tests: IncentiveRankingTest, TeamStructureAboBadgesTest, YardShippingTaxTest (neu); BackofficeStatisticsListsTest, TeamAboOverviewTest, PaylineForecastServiceTest, AboAdminDeleteTest, AboOneTimeViewTest erweitert

Außerdem enthalten (Branch-WIP vor dem Feedback): DATEV-Abgleich-Fixes 08+09/2025, USt-ID-Live-Validierung sowie restliche unkommittete Stände (u. a. Abo-Pause-Sprachkeys).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 13:56:02 +00:00

63 lines
3.2 KiB
PHP

@php
$cartInstance = \App\Services\AboOrderCart::INSTANCE;
$taxFree = Yard::instance($cartInstance)->getUserTaxFree();
// Kunden-Portal: Versand brutto ("inkl. MwSt."), Berater/Admin: netto ("netto")
$portal_view = $portal_view ?? false;
$shippingGross = $portal_view && ! $taxFree;
@endphp
<div class="card-header bg-primary">
<h5 class="font-weight-semibold mb-0 text-white"> <i class="fa fa-shopping-cart text-white"></i> &nbsp;
{{ __('abo.combined_summary_hl') }}
</h5>
</div>
<div class="card-body bg-warning-light" style="background-color: rgba(227, 227, 54, 0.5) !important;">
<table class="table table-product m-0">
<tbody>
@if (($summary['one_time']['gross'] ?? 0) > 0)
<tr>
<td class="small"><strong>{{ __('abo.onetime_subtotal') }}:</strong></td>
<td class="text-right small">{{ formatNumber($summary['one_time']['gross']) }} €</td>
</tr>
@endif
<tr>
<td class="small"><strong>{{ __('abo.abo_subtotal') }}:</strong></td>
<td class="text-right small">{{ formatNumber($summary['abo']['gross'] ?? 0) }} €</td>
</tr>
<tr>
<td class="small no-border-top"><strong>{{ __('Delivery country') }}:</strong></td>
<td class="text-right small no-border-top">{{ Yard::instance($cartInstance)->getShippingCountryName() }}
</td>
</tr>
<tr>
<td class="small no-border-top"><strong>{{ __('order.shipping_costs') }}
({{ $shippingGross ? __('order.incl_VAT') : __('order.net') }}):</strong></td>
<td class="text-right small no-border-top">
{{ $shippingGross ? Yard::instance($cartInstance)->shipping() : Yard::instance($cartInstance)->shippingNet() }}
€</td>
</tr>
@if ($taxFree)
<tr>
<td class="small no-border-top"><strong>{{ __('order.sum_net') }}:</strong></td>
<td class="text-right small no-border-top">
{{ Yard::instance($cartInstance)->subtotalWithShipping() }} €</td>
</tr>
@else
<tr>
<td class="small no-border-top"><strong>{{ __('order.total_without_VAT') }}:</strong></td>
<td class="text-right small no-border-top">
{{ Yard::instance($cartInstance)->subtotalWithShipping() }} €</td>
</tr>
<tr>
<td class="small no-border-top"><strong>{{ __('order.plus_VAT') }}:</strong></td>
<td class="text-right small no-border-top">{{ Yard::instance($cartInstance)->taxWithShipping() }} €
</td>
</tr>
@endif
<tr class="bg-white">
<td class="pt-2 pb-2"><strong>{{ __('order.total_sum') }}:</strong></td>
<td class="text-right font-weight-bold pt-2 pb-2">
{{ Yard::instance($cartInstance)->totalWithShipping() }} €</td>
</tr>
</tbody>
</table>
</div>