drag scheduling
This commit is contained in:
@@ -15,6 +15,7 @@ import {
|
||||
listManufacturingStations,
|
||||
listWorkOrders,
|
||||
recordWorkOrderCompletion,
|
||||
updateManufacturingStation,
|
||||
updateWorkOrder,
|
||||
updateWorkOrderOperationSchedule,
|
||||
updateWorkOrderStatus,
|
||||
@@ -100,6 +101,25 @@ manufacturingRouter.post("/stations", requirePermissions([permissions.manufactur
|
||||
return ok(response, await createManufacturingStation(parsed.data, request.authUser?.id), 201);
|
||||
});
|
||||
|
||||
manufacturingRouter.put("/stations/:stationId", requirePermissions([permissions.manufacturingWrite]), async (request, response) => {
|
||||
const stationId = getRouteParam(request.params.stationId);
|
||||
if (!stationId) {
|
||||
return fail(response, 400, "INVALID_INPUT", "Manufacturing station id is invalid.");
|
||||
}
|
||||
|
||||
const parsed = stationSchema.safeParse(request.body);
|
||||
if (!parsed.success) {
|
||||
return fail(response, 400, "INVALID_INPUT", "Manufacturing station payload is invalid.");
|
||||
}
|
||||
|
||||
const result = await updateManufacturingStation(stationId, parsed.data, request.authUser?.id);
|
||||
if (!result.ok) {
|
||||
return fail(response, 404, "STATION_NOT_FOUND", result.reason);
|
||||
}
|
||||
|
||||
return ok(response, result.station);
|
||||
});
|
||||
|
||||
manufacturingRouter.get("/work-orders", requirePermissions([permissions.manufacturingRead]), async (request, response) => {
|
||||
const parsed = workOrderFiltersSchema.safeParse(request.query);
|
||||
if (!parsed.success) {
|
||||
|
||||
@@ -927,6 +927,57 @@ export async function createManufacturingStation(payload: ManufacturingStationIn
|
||||
return mapStation(station);
|
||||
}
|
||||
|
||||
export async function updateManufacturingStation(stationId: string, payload: ManufacturingStationInput, actorId?: string | null) {
|
||||
const existing = await prisma.manufacturingStation.findUnique({
|
||||
where: { id: stationId },
|
||||
});
|
||||
|
||||
if (!existing) {
|
||||
return { ok: false as const, reason: "Manufacturing station was not found." };
|
||||
}
|
||||
|
||||
const workingDays = normalizeStationWorkingDays(payload.workingDays);
|
||||
const station = await prisma.manufacturingStation.update({
|
||||
where: { id: stationId },
|
||||
data: {
|
||||
code: payload.code.trim(),
|
||||
name: payload.name.trim(),
|
||||
description: payload.description,
|
||||
queueDays: payload.queueDays,
|
||||
dailyCapacityMinutes: payload.dailyCapacityMinutes,
|
||||
parallelCapacity: payload.parallelCapacity,
|
||||
workingDays: workingDays.join(","),
|
||||
isActive: payload.isActive,
|
||||
},
|
||||
});
|
||||
|
||||
await logAuditEvent({
|
||||
actorId,
|
||||
entityType: "manufacturing-station",
|
||||
entityId: station.id,
|
||||
action: "updated",
|
||||
summary: `Updated manufacturing station ${station.code}.`,
|
||||
metadata: {
|
||||
previousCode: existing.code,
|
||||
previousName: existing.name,
|
||||
previousQueueDays: existing.queueDays,
|
||||
previousDailyCapacityMinutes: existing.dailyCapacityMinutes,
|
||||
previousParallelCapacity: existing.parallelCapacity,
|
||||
previousWorkingDays: parseWorkingDays(existing.workingDays),
|
||||
previousIsActive: existing.isActive,
|
||||
code: station.code,
|
||||
name: station.name,
|
||||
queueDays: station.queueDays,
|
||||
dailyCapacityMinutes: station.dailyCapacityMinutes,
|
||||
parallelCapacity: station.parallelCapacity,
|
||||
workingDays,
|
||||
isActive: station.isActive,
|
||||
},
|
||||
});
|
||||
|
||||
return { ok: true as const, station: mapStation(station) };
|
||||
}
|
||||
|
||||
export async function listManufacturingProjectOptions(): Promise<ManufacturingProjectOptionDto[]> {
|
||||
const projects = await prisma.project.findMany({
|
||||
where: {
|
||||
|
||||
Reference in New Issue
Block a user