From a7e1fcd3be8a2b69d114821a7f952fa752fd73d6 Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Fri, 3 Oct 2025 14:57:57 -0500 Subject: [PATCH] feat(printer delay): printer delay option to grab the delay based off cycle time --- .../services/ocp/utils/checkAssignments.ts | 5 + .../services/ocp/utils/printerDelayByLot.ts | 111 ++++++++++++++++++ .../services/server/utils/settingsCheck.ts | 8 ++ 3 files changed, 124 insertions(+) create mode 100644 lstV2/server/services/ocp/utils/printerDelayByLot.ts diff --git a/lstV2/server/services/ocp/utils/checkAssignments.ts b/lstV2/server/services/ocp/utils/checkAssignments.ts index d984245..9e203c5 100644 --- a/lstV2/server/services/ocp/utils/checkAssignments.ts +++ b/lstV2/server/services/ocp/utils/checkAssignments.ts @@ -6,11 +6,13 @@ import { tryCatch } from "../../../globalUtils/tryCatch.js"; import { getLots } from "../controller/lots/lots.js"; import { getPrinters } from "../controller/printers/getPrinters.js"; import { createLog } from "../../logger/logger.js"; +import { printerDelayByLot } from "./printerDelayByLot.js"; export const assignedPrinters = async () => { createLog("debug", "ocp", "ocp", "Lot assignment check"); const { data: lot, error: lotError } = await tryCatch(getLots()); const l: any = lot; + if (lotError) { return { success: false, @@ -41,6 +43,9 @@ export const assignedPrinters = async () => { data: [], }; } + + // update the printers if we have the setting checked + printerDelayByLot(l.data); const { data: print, error: printerError } = await tryCatch(getPrinters()); if (printerError) { diff --git a/lstV2/server/services/ocp/utils/printerDelayByLot.ts b/lstV2/server/services/ocp/utils/printerDelayByLot.ts new file mode 100644 index 0000000..8c0eb85 --- /dev/null +++ b/lstV2/server/services/ocp/utils/printerDelayByLot.ts @@ -0,0 +1,111 @@ +import { eq, sql } from "drizzle-orm"; +import { db } from "../../../../database/dbclient.js"; +import { printerData } from "../../../../database/schema/printers.js"; +import { settings } from "../../../../database/schema/settings.js"; +import { tryCatch } from "../../../globalUtils/tryCatch.js"; +import { createLog } from "../../logger/logger.js"; +import { delay } from "../../../globalUtils/delay.js"; +import { getPrinters } from "../controller/printers/getPrinters.js"; + +//**The logic here will be when the setting is active to utilize the lots times it will update the printDelay in the printer data table */ +export const printerDelayByLot = async (lot: any) => { + const { data: settingData, error: settingError } = await tryCatch( + db.select().from(settings) + ); + + if (settingError) { + return { + success: false, + message: "There was an error getting the settings.", + settingError, + }; + } + // get the plantToken + const printDelay = settingData.filter((n) => n.name === "lotPrintDelay"); + + const ignorePrinters = [ + "Autolabeler", + "pdf24", + "PDF24", + "zecchetti_1", + "zecchetti2", + ]; + const printers = (await getPrinters()) as any; + const p = printers.data; + + if (printDelay[0].value === "0") { + for (let i = 0; i < p.length; i++) { + if (p[i].printDelay > 90) { + if (ignorePrinters.includes(lot[i].PrinterName)) continue; + + const { data, error } = await tryCatch( + db + .update(printerData) + .set({ + printDelay: "90", + upd_date: sql`NOW()`, + }) + .where( + eq(printerData.humanReadableId, lot[i].printerID) + ) + ); + + // if (data) { + // createLog( + // "info", + // "printers", + // "ocp", + // `${printerData.name} had its delay time updated to 90 seconds ` + // ); + // } + + // if (error) { + // createLog( + // "error", + // "printers", + // "ocp", + // `${printerData.name} encountered an error updating the printer delay time ` + // ); + // } + await delay(500); + } + } + } + + if (printDelay[0].value === "1") { + for (let i = 0; i < lot.length; i++) { + if (ignorePrinters.includes(lot[i].PrinterName)) continue; + + const { data, error } = await tryCatch( + db + .update(printerData) + .set({ + printDelay: lot[i].timeTOmakeInSeconds.toFixed(2), + upd_date: sql`NOW()`, + }) + .where(eq(printerData.humanReadableId, lot[i].printerID)) + ); + + // if (data) { + // createLog( + // "info", + // "printers", + // "ocp", + // `${lot[i].PrinterName} had its delay time updated to ${lot[ + // i + // ].timeTOmakeInSeconds.toFixed(2)} seconds ` + // ); + // } + + // if (error) { + // createLog( + // "error", + // "printers", + // "ocp", + // `${lot[i].PrinterName} encountered an error updating the printer delay time ` + // ); + // } + await delay(500); + } + } +}; diff --git a/lstV2/server/services/server/utils/settingsCheck.ts b/lstV2/server/services/server/utils/settingsCheck.ts index c1dd885..1126d79 100644 --- a/lstV2/server/services/server/utils/settingsCheck.ts +++ b/lstV2/server/services/server/utils/settingsCheck.ts @@ -280,6 +280,14 @@ const newSettings = [ serviceBelowsTo: "admin", roleToChange: "admin", }, + { + name: "lotPrintDelay", + value: `0`, + description: + "Changes the print delay to be based on the pallet completion time", + serviceBelowsTo: "admin", + roleToChange: "admin", + }, ]; export const areSettingsIn = async () => { // get the roles