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>
48 lines
No EOL
2.6 KiB
PHP
48 lines
No EOL
2.6 KiB
PHP
@extends('layouts.layout-2')
|
||
|
||
@section('content')
|
||
|
||
<h4 class="font-weight-bold py-2 mb-2">
|
||
<a href="{{route('admin_customers')}}" class="btn btn-sm btn-default float-right">{{ __('back') }}</a>
|
||
{{ __('customer.customer_details') }}
|
||
</h4>
|
||
@include('admin.customer._detail')
|
||
<a href="{{route('admin_customers')}}" class="btn btn-sm btn-default mt-2 float-right">{{ __('back') }}</a>
|
||
|
||
@if (Auth::user()->isSuperAdmin() && !$shopping_user->auth_user_id)
|
||
<button type="button" class="btn btn-sm btn-danger mt-2" data-toggle="modal"
|
||
data-target="#modals-customer-gdpr-delete">{{ __('msg.gdpr_delete_customer_button') }}</button>
|
||
|
||
<!-- Modal DSGVO-Löschung -->
|
||
<div class="modal fade" id="modals-customer-gdpr-delete">
|
||
<div class="modal-dialog">
|
||
<form class="modal-content" action="{{ route('admin_customer_gdpr_delete', [$shopping_user->id]) }}"
|
||
method="post">
|
||
@csrf
|
||
<div class="modal-header">
|
||
<h5 class="modal-title">{{ __('msg.gdpr_delete_customer_button') }}</h5>
|
||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
|
||
</div>
|
||
<div class="modal-body">
|
||
<p>Alle personenbezogenen Daten dieses Kunden werden <b>unwiderruflich anonymisiert</b>
|
||
(alle Einträge mit der Kundennummer {{ $shopping_user->number }}).
|
||
Bei Bestellungen mit Rechnung bleiben Name und Rechnungsadresse wegen der
|
||
gesetzlichen Aufbewahrungspflichten erhalten; alle Kontaktdaten
|
||
(E-Mail, Telefon, Notizen, Newsletter) werden entfernt.
|
||
Aktive Abos müssen vorher gekündigt werden.</p>
|
||
<label class="custom-control custom-checkbox m-0">
|
||
<input type="checkbox" class="custom-control-input" name="gdpr_delete_customer" value="1">
|
||
<span class="custom-control-label">DSGVO-Löschung unwiderruflich ausführen?</span>
|
||
</label>
|
||
</div>
|
||
<div class="modal-footer">
|
||
<button type="button" class="btn btn-default" data-dismiss="modal">{{ __('close') }}</button>
|
||
<button type="submit"
|
||
class="btn btn-danger">{{ __('msg.gdpr_delete_customer_button') }}</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
|
||
@endsection |