feat(orders): reopen cancelled orders only after confirmation; accurate sales
Docker Image bauen und veroeffentlichen / build-and-push (push) Successful in 2m24s
Docker Image bauen und veroeffentlichen / build-and-push (push) Successful in 2m24s
Cancelled orders: - Moving an order out of STORNIERT is possible again, but only after a warning is confirmed in the status form (OrderStatusForm); without the confirmation the server changes nothing. - Reopening books the counter-entry to the cancellation: goods that the cancellation restocked are deducted again (atomically, only if enough stock is left, otherwise the order stays cancelled). A later second cancellation therefore restocks +1 again instead of leaving +2. - The warning states that no new payment is collected. Dashboard figures: - One definition of a counted sale (lib/sales.ts): not unpaid (NEU), not cancelled, no refunded return. Used for revenue today/month, sold glasses, average cart, top products/categories, revenue trend and repeat customers. - "Verkaufte Gläser" previously summed every order item, including cancelled orders and refunded returns. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
1 parent
dc1523aafd
commit
e0b47faf45
11 files changed
+243
-82
No files matched your search
@@ -0,0 +1,18 @@
|
||||
import type { Prisma } from "@/generated/prisma/client";
|
||||
|
||||
/**
|
||||
* Welche Bestellungen zaehlen in der Auswertung (Admin-Dashboard) als Verkauf?
|
||||
*
|
||||
* - nicht "NEU": noch nicht bezahlt — die Ware ist nur reserviert, nicht verkauft
|
||||
* - nicht "STORNIERT": Ware zurueckgebucht, Geld erstattet
|
||||
* - keine erstattete Retoure: die Glaeser sind zurueck im Bestand und das Geld
|
||||
* bei der Kundschaft; sie weiter als verkauft zu zaehlen, blaehte Umsatz und
|
||||
* "Verkaufte Glaeser" auf
|
||||
*
|
||||
* EINE Definition fuer alle Kennzahlen, damit Umsatz, Glaeser, Warenkorbwert
|
||||
* und Top-Produkte nicht auseinanderlaufen.
|
||||
*/
|
||||
export const COUNTED_SALE_WHERE = {
|
||||
status: { notIn: ["NEU", "STORNIERT"] },
|
||||
NOT: { returnRequest: { is: { status: "ERSTATTET" } } },
|
||||
} satisfies Prisma.OrderWhereInput;
|
||||
Reference in new issue
Block a user