feat(drafts): DB drafts with deferred numbering — create-as-draft (no number), assign number on finalize (offers/invoices/issued-orders)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
BOHA
2026-06-09 18:04:11 +02:00
parent 28186397a0
commit 473f7c4a8c
8 changed files with 494 additions and 37 deletions

View File

@@ -120,7 +120,7 @@ describe("computeIssuedOrderTotals (NET + VAT-on-top)", () => {
});
describe("createIssuedOrder", () => {
it("assigns a PO number, defaults to draft, stores items", async () => {
it("defaults to draft with NO PO number, stores items", async () => {
const c = await makeCustomer();
const order = await createIssuedOrder({
customer_id: c.id,
@@ -129,7 +129,8 @@ describe("createIssuedOrder", () => {
],
});
createdIds.push(order.id);
expect(order.po_number).toBeTruthy();
// Deferred numbering: a draft carries no number.
expect(order.po_number).toBeNull();
expect(order.status).toBe("draft");
const items = await prisma.issued_order_items.findMany({
where: { issued_order_id: order.id },
@@ -137,6 +138,14 @@ describe("createIssuedOrder", () => {
expect(items.length).toBe(1);
expect(Number(items[0].unit_price)).toBe(100);
});
it("numbers immediately when created already-finalized (status sent)", async () => {
const before = (await previewIssuedOrderNumber()).number;
const order = await createIssuedOrder({ status: "sent" });
createdIds.push(order.id);
expect(order.po_number).toBe(before);
expect(order.status).toBe("sent");
});
});
describe("updateIssuedOrder status transitions", () => {
@@ -183,7 +192,10 @@ describe("deleteIssuedOrder", () => {
const order = await createIssuedOrder({
items: [{ description: "X", quantity: 1, unit_price: 1 }],
});
const before = order.po_number;
// Finalize so the order has a real (consumed) number to free on delete.
const finalized = await updateIssuedOrder(order.id, { status: "sent" });
const before = "po_number" in finalized ? finalized.po_number : null;
expect(before).toBeTruthy();
await deleteIssuedOrder(order.id);
expect(
await prisma.issued_orders.findUnique({ where: { id: order.id } }),