backfill from projects
This commit is contained in:
@@ -868,15 +868,18 @@ async function validateWorkOrderInput(payload: WorkOrderInput) {
|
||||
return { ok: false as const, reason: "Build item must have at least one station operation before a work order can be created." };
|
||||
}
|
||||
|
||||
let projectSalesOrderId: string | null = null;
|
||||
if (payload.projectId) {
|
||||
const project = await prisma.project.findUnique({
|
||||
where: { id: payload.projectId },
|
||||
select: { id: true },
|
||||
select: { id: true, salesOrderId: true },
|
||||
});
|
||||
|
||||
if (!project) {
|
||||
return { ok: false as const, reason: "Linked project was not found." };
|
||||
}
|
||||
|
||||
projectSalesOrderId = project.salesOrderId ?? null;
|
||||
}
|
||||
|
||||
if (payload.salesOrderId) {
|
||||
@@ -888,6 +891,10 @@ async function validateWorkOrderInput(payload: WorkOrderInput) {
|
||||
if (!salesOrder) {
|
||||
return { ok: false as const, reason: "Linked sales order was not found." };
|
||||
}
|
||||
|
||||
if (projectSalesOrderId && projectSalesOrderId !== payload.salesOrderId) {
|
||||
return { ok: false as const, reason: "Linked project does not match the selected sales order." };
|
||||
}
|
||||
}
|
||||
|
||||
if (payload.salesOrderLineId) {
|
||||
@@ -928,6 +935,28 @@ async function validateWorkOrderInput(payload: WorkOrderInput) {
|
||||
return { ok: true as const };
|
||||
}
|
||||
|
||||
async function deriveProjectIdForWorkOrder(payload: WorkOrderInput) {
|
||||
if (payload.projectId) {
|
||||
return payload.projectId;
|
||||
}
|
||||
|
||||
if (!payload.salesOrderId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const project = await prisma.project.findFirst({
|
||||
where: {
|
||||
salesOrderId: payload.salesOrderId,
|
||||
},
|
||||
orderBy: [{ createdAt: "asc" }],
|
||||
select: {
|
||||
id: true,
|
||||
},
|
||||
});
|
||||
|
||||
return project?.id ?? null;
|
||||
}
|
||||
|
||||
export async function listManufacturingItemOptions(): Promise<ManufacturingItemOptionDto[]> {
|
||||
const items = await prisma.inventoryItem.findMany({
|
||||
where: {
|
||||
@@ -1158,13 +1187,14 @@ export async function createWorkOrder(payload: WorkOrderInput, actorId?: string
|
||||
if (!validated.ok) {
|
||||
return { ok: false as const, reason: validated.reason };
|
||||
}
|
||||
const derivedProjectId = await deriveProjectIdForWorkOrder(payload);
|
||||
|
||||
const workOrderNumber = await nextWorkOrderNumber();
|
||||
const created = await workOrderModel.create({
|
||||
data: {
|
||||
workOrderNumber,
|
||||
itemId: payload.itemId,
|
||||
projectId: payload.projectId,
|
||||
projectId: derivedProjectId,
|
||||
salesOrderId: payload.salesOrderId,
|
||||
salesOrderLineId: payload.salesOrderLineId,
|
||||
warehouseId: payload.warehouseId,
|
||||
@@ -1223,12 +1253,13 @@ export async function updateWorkOrder(workOrderId: string, payload: WorkOrderInp
|
||||
if (!validated.ok) {
|
||||
return { ok: false as const, reason: validated.reason };
|
||||
}
|
||||
const derivedProjectId = await deriveProjectIdForWorkOrder(payload);
|
||||
|
||||
await workOrderModel.update({
|
||||
where: { id: workOrderId },
|
||||
data: {
|
||||
itemId: payload.itemId,
|
||||
projectId: payload.projectId,
|
||||
projectId: derivedProjectId,
|
||||
salesOrderId: payload.salesOrderId,
|
||||
salesOrderLineId: payload.salesOrderLineId,
|
||||
warehouseId: payload.warehouseId,
|
||||
|
||||
Reference in New Issue
Block a user