## Problem

Alle drei “Verkaufsermittlung”-Optionen in den NetStock-Einstellungen (“Alle Aufträge”,
“Bezahlte Aufträge”, “Gelieferte Aufträge”) liefern aktuell **nur** Aufträge, für die bereits
ein Lieferschein/Warenausgang gebucht wurde. Das liegt daran, dass die `SalesQuery` einen
Warenausgang strukturell voraussetzt (über eine Kette von INNER JOINs), bevor sie überhaupt
auf die gewählte Option schaut.

Für “Alle Aufträge” und “Bezahlte Aufträge” ist das nicht richtig — nur “Gelieferte Aufträge”
soll zwingend einen Lieferschein/Warenausgang voraussetzen.

## Lösung

– **Alle Aufträge:** auch Aufträge ohne Lieferschein/Warenausgang zeigen.
– **Bezahlte Aufträge:** ebenfalls unabhängig davon, ob schon ausgeliefert wurde — nur der
Zahlungsstatus zählt.
– **Gelieferte Aufträge:** bleibt wie bisher zwingend an einen tatsächlichen Warenausgang
gebunden.

## Technischer Hintergrund

Details für die Umsetzung

`SalesQuery` (`Uploader.cs`) joint aktuell so:
`Verkauf.tAuftragPosition → Verkauf.tAuftrag → Verkauf.tAuftragEckdaten → dbo.tLieferscheinPos
→ dbo.tWarenlagerausgang → dbo.tWarenLagerPlatz`

Alles davon sind `INNER JOIN`s — fehlt ein Lieferschein/Warenausgang, fällt die komplette Zeile
raus, unabhängig vom `@WhenSendSales`-Parameter. Der eigentliche Options-Filter
(`@WhenSendSales = 0/1/2 …`) kommt in der `WHERE`-Klausel erst danach und kann diese
strukturelle Einschränkung nicht mehr aufheben.

Für “Alle Aufträge” und “Bezahlte Aufträge” müssten `tLieferscheinPos`/`tWarenlagerausgang`/
`tWarenLagerPlatz` zu `LEFT JOIN`s werden (nur für “Gelieferte Aufträge” weiterhin zwingend).
Das wirft zwei Folgefragen auf, die bei der Umsetzung mitentschieden werden müssen:

1. **Location:** kommt aktuell aus `tWarenLagerPlatz.kWarenLager` (dem tatsächlichen
Warenausgang-Lager). Ohne Warenausgang braucht es eine andere Quelle — z. B. ein
Fallback-Lager wie in `PoQuery`/`CoQuery` (`ISNULL(kLager,0) = 0 THEN ELSE kLager`).
2. **Sales Quantity:** kommt aktuell aus `tWarenlagerausgang.fAnzahl` (versandte Menge). Ohne
Warenausgang müsste stattdessen `tAuftragPosition.fAnzahl` (bestellte Menge) verwendet
werden.

Zu bedenken: Das überschneidet sich inhaltlich mit `co.csv` (dort werden bereits offene
Kundenaufträge separat gemeldet). Sollte beim Umsetzen mitgedacht werden, ändert aber nichts an
der oben beschriebenen Erwartung an die drei Optionen selbst.

## Nächste Schritte

– [ ] Lieferschein-/Warenausgang-Joins nur noch für “Gelieferte Aufträge” erzwingen (`LEFT JOIN`
für die anderen beiden Optionen)
– [ ] Alternative Quelle für Location und Sales Quantity festlegen, wenn kein Warenausgang
vorhanden ist
– [ ] Überschneidung mit `co.csv` (offene Aufträge) bei der Umsetzung berücksichtigen

Gefunden im Rahmen der manuellen NetStock-Upload-Validierungs-Checkliste (Checklistenpunkte
25/26).

Consent Management Platform von Real Cookie Banner