import { PrismaClient } from '@prisma/client'; const p = new PrismaClient(); function n(v: any): number { return v == null ? 0 : Number(v); } async function main() { const order = await p.order.findFirst({ where: { orderCode: { contains: 'OZ2604OZ113' } }, select: { id: true, orderCode: true }, }); if (!order) { console.log('Order not found'); return; } console.log('Order', order.id, order.orderCode); const prs = await p.purchaseRequirement.findMany({ where: { orderId: order.id, description: { contains: 'Trub', mode: 'insensitive' } }, include: { poLines: { include: { purchaseOrder: { select: { orderCode: true, status: true } }, receptions: { select: { id: true, receivedQty: true, status: true, lotId: true } }, lotLines: { include: { lot: { select: { id: true, lotNumber: true, status: true, plannedDate: true, deliveryDate: true, quantity: true } } } }, }, }, }, orderBy: { id: 'asc' }, }); console.log('PR count:', prs.length); for (const pr of prs) { console.log(); console.log('=== PR', pr.id, pr.description, 'qty:', n(pr.quantity), 'orig:', n(pr.originalQuantity), 'status:', pr.status, 'arch:', pr.archived); for (const pl of pr.poLines) { console.log(' POLine', pl.id, 'PO:', pl.purchaseOrder?.orderCode, 'status:', pl.purchaseOrder?.status); console.log(' receptions:', pl.receptions.length); for (const rc of pl.receptions) console.log(' #', rc.id, 'qty:', n(rc.receivedQty), 'status:', rc.status, 'lotId:', rc.lotId); console.log(' lotLines:', pl.lotLines.length); for (const ll of pl.lotLines) { const dd = ll.lot.deliveryDate ? ll.lot.deliveryDate.toISOString().slice(0, 10) : 'NULL'; console.log(' ll.qty:', n(ll.quantity), 'lot#:', ll.lot.id, ll.lot.lotNumber, 'status:', ll.lot.status, 'dd:', dd, 'lot.qty:', n(ll.lot.quantity)); } } } await p.$disconnect(); } main().catch(e => { console.error(e); process.exit(1); });