Absatzstatistik: Summen aus Bestellpositionen, Kompensationsprodukte ausgewiesen, Extern-Bestellungen nachgefüllt

- Stats\Sales: alle Summenzeilen (Angezeigt/Ausgeblendet/Gesamt/Rabatte/Netto)
  aus price_net × qty der Positionen statt aus subtotal_full/discount des
  Bestellkopfs; WooCommerce-Importe (txaction extern) hatten dort NULL und
  zählten seit 06/2026 mit 0 € (Aug 2026: 449 € statt 3.318 € angezeigt)
- Kompensationsprodukte (comp > 0) bleiben in der Menge, neue Spalten
  „davon Kompensation“ (aktuell + Vorjahr) und Summenzeile 9993
- Gelöschte Produkte bleiben im Umsatz sichtbar (withTrashed, „(gelöscht)“)
- WP-Import setzt subtotal_full und discount jetzt wie der Checkout
- Migration füllt subtotal_full/discount bestehender Extern-Bestellungen nach
- Excel-Export um die beiden Kompensationsspalten erweitert
- Test tests/Feature/StatsSalesVolumeTest.php (Konsistenz, Filter, Jahr)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-09-14 08:15:30 +00:00
parent 2482d073a1
commit ef19dc2ced
6 changed files with 433 additions and 255 deletions

View file

@ -67,8 +67,10 @@
<th>{{__('tables.product')}}</th>
<th>{{__('tables.article_no')}}</th>
<th>{{__('tables.quantity')}}</th>
<th>davon Kompensation</th>
<th>{{__('tables.total')}} netto €</th>
<th>Vorjahr {{__('tables.quantity')}}</th>
<th>Vorjahr davon Kompensation</th>
<th>Vorjahr {{__('tables.total')}} netto €</th>
<th>{{__('Einzelrabatt')}}</th>
<th>{{__('Einzelrabatt %')}}</th>
@ -82,7 +84,8 @@
</div>
<br>
<div class="alert alert-info m-2">
Bei "Gesamter Umsatz", "Gesamte Rabatte", "Gesamt netto", sind die ausgeschlossenen Produkte einberechnet, da Rabatte auf Warenkorb-Ebene verrechnet werden und nicht auf Produkt-Ebene.
Alle Umsätze werden aus den Bestellpositionen (Netto-Einzelpreis × Menge) berechnet: „Angezeigter Umsatz“ + „Ausgeblendeter Umsatz“ = „Gesamter Umsatz“. Bei "Gesamter Umsatz", "Gesamte Rabatte", "Gesamt netto" sind die ausgeschlossenen Produkte einberechnet, da Rabatte auf Warenkorb-Ebene verrechnet werden und nicht auf Produkt-Ebene.<br>
Kompensationsprodukte (0 € Umsatz) sind in der Menge enthalten und werden in „davon Kompensation“ separat ausgewiesen.
</div>
</div>
@ -113,8 +116,10 @@
{ data: 'name', name: 'name', orderable: true, searchable: false },
{ data: 'number', name: 'number', orderable: true, searchable: false },
{ data: 'qty', name: 'qty', orderable: true, searchable: false },
{ data: 'comp_qty', name: 'comp_qty', orderable: true, searchable: false },
{ data: 'total', name: 'total', orderable: true, searchable: false },
{ data: 'pre_qty', name: 'pre_qty', orderable: true, searchable: false },
{ data: 'pre_comp_qty', name: 'pre_comp_qty', orderable: true, searchable: false },
{ data: 'pre_total', name: 'pre_total', orderable: true, searchable: false },
{ data: 'single_commission', name: 'single_commission', orderable: true, searchable: false },
{ data: 'value_commission', name: 'value_commission', orderable: true, searchable: false },