import { ok, type ReadonlyDB } from "@tailor-platform/erp-kit/core"; import type { DB } from "../generated/kysely-tailordb"; export interface ListPurchaseOrderLinesForMatchingInput { purchaseOrderLineIds: string[]; } export interface PurchaseOrderLineForMatching { id: string; purchaseOrderId: string; companyId: string; supplierAccountId: string; itemId: string; quantity: string; unitPrice: string; unitId: string; requiresPhysicalReceipt: boolean; receivedQuantity: string; } export async function run(db: ReadonlyDB, input: ListPurchaseOrderLinesForMatchingInput) { if (input.purchaseOrderLineIds.length === 0) { return ok({ purchaseOrderLines: [] as PurchaseOrderLineForMatching[] }); } const purchaseOrderLines = await db .selectFrom("PurchaseOrderLine as line") .innerJoin("PurchaseOrder as order", "order.id", "line.purchaseOrderId") .select([ "order.companyId", "order.supplierAccountId", "line.id as id", "line.purchaseOrderId as purchaseOrderId", "line.itemId as itemId", "line.quantity as quantity", "line.unitPrice as unitPrice", "line.unitId as unitId", "line.requiresPhysicalReceipt as requiresPhysicalReceipt", "line.receivedQuantity as receivedQuantity", ]) .where("line.id", "in", input.purchaseOrderLineIds) .execute(); return ok({ purchaseOrderLines }); }