diff --git a/src/app/api/v1/buyer-tasks/route.test.ts b/src/app/api/v1/buyer-tasks/route.test.ts index b45c4a6..bb943c5 100644 --- a/src/app/api/v1/buyer-tasks/route.test.ts +++ b/src/app/api/v1/buyer-tasks/route.test.ts @@ -32,6 +32,8 @@ describe("GET /api/v1/buyer-tasks", () => { totalCost: 50, purchaseOrderId: null, poStatus: null, + poNumber: null, + supplierEmail: null, step: "needs_po", }, ]); diff --git a/src/components/buyer-tasks/buyer-task-group-card.test.tsx b/src/components/buyer-tasks/buyer-task-group-card.test.tsx index 0ad2182..a96218d 100644 --- a/src/components/buyer-tasks/buyer-task-group-card.test.tsx +++ b/src/components/buyer-tasks/buyer-task-group-card.test.tsx @@ -17,6 +17,8 @@ const baseGroup = { totalCost: 50, purchaseOrderId: null, poStatus: null, + poNumber: null, + supplierEmail: null, step: "needs_po" as const, }; diff --git a/src/components/buyer-tasks/buyer-tasks-page.test.tsx b/src/components/buyer-tasks/buyer-tasks-page.test.tsx index aca0bcf..69c4b53 100644 --- a/src/components/buyer-tasks/buyer-tasks-page.test.tsx +++ b/src/components/buyer-tasks/buyer-tasks-page.test.tsx @@ -17,6 +17,8 @@ const sampleGroup = { totalCost: 50, purchaseOrderId: null, poStatus: null, + poNumber: null, + supplierEmail: null, step: "needs_po" as const, }; diff --git a/src/components/buyer-tasks/buyer-tasks-page.tsx b/src/components/buyer-tasks/buyer-tasks-page.tsx index 328fba5..a2fd67d 100644 --- a/src/components/buyer-tasks/buyer-tasks-page.tsx +++ b/src/components/buyer-tasks/buyer-tasks-page.tsx @@ -156,10 +156,18 @@ export function BuyerTasksPage() { onCancel={() => setMarkReadyFor(null)} busy={false} /> - {sendPoFor?.purchaseOrderId && ( + {sendPoFor && ( setSendPoFor(null)} onSent={() => { setSendPoFor(null); diff --git a/src/lib/server/buyer-tasks-service.test.ts b/src/lib/server/buyer-tasks-service.test.ts index c021352..b16da9a 100644 --- a/src/lib/server/buyer-tasks-service.test.ts +++ b/src/lib/server/buyer-tasks-service.test.ts @@ -227,6 +227,58 @@ describe("listBuyerTasks", () => { expect(filter).not.toContain(`item_status = "po_generated"`); }); + it("populates poNumber and supplierEmail from the expanded PO", async () => { + const { admin } = makeAdmin([ + baseItem({ + purchase_order: "po-1", + item_status: "po_generated", + expand: { + order: baseOrder, + supplier: baseSupplier, + purchase_order: { + id: "po-1", + status: "draft", + po_number: "PO-26072901", + expand: { + supplier: { + id: "sup-1", + email: "orders@steelco.example", + }, + }, + }, + }, + }), + ]); + vi.mocked(getAdminPocketBase).mockResolvedValue(admin as never); + + const groups = await listBuyerTasks("po_draft"); + + expect(groups).toHaveLength(1); + expect(groups[0].poNumber).toBe("PO-26072901"); + expect(groups[0].supplierEmail).toBe("orders@steelco.example"); + }); + + it("leaves poNumber and supplierEmail null when the PO has no expand", async () => { + const { admin } = makeAdmin([ + baseItem({ + purchase_order: "po-1", + item_status: "po_generated", + expand: { + order: baseOrder, + supplier: baseSupplier, + purchase_order: { id: "po-1", status: "draft" }, + }, + }), + ]); + vi.mocked(getAdminPocketBase).mockResolvedValue(admin as never); + + const groups = await listBuyerTasks("po_draft"); + + expect(groups).toHaveLength(1); + expect(groups[0].poNumber).toBeNull(); + expect(groups[0].supplierEmail).toBeNull(); + }); + it("does not include a separate ready_delivery exclusion in po_sent post-filter", async () => { // The ready_delivery exclusion moved to the PB filter (covered by // the filter-content assertions above). Verify the service still diff --git a/src/lib/server/buyer-tasks-service.ts b/src/lib/server/buyer-tasks-service.ts index 0b8ee62..7ecab6a 100644 --- a/src/lib/server/buyer-tasks-service.ts +++ b/src/lib/server/buyer-tasks-service.ts @@ -21,6 +21,8 @@ export type BuyerTaskGroup = { totalCost: number; purchaseOrderId: string | null; poStatus: "draft" | "sent" | "sending" | "received" | "mail_failed" | "cancelled" | null; + poNumber: string | null; + supplierEmail: string | null; step: BuyerTaskTab; }; @@ -62,7 +64,7 @@ export async function listBuyerTasks(tab: BuyerTaskTab): Promise