/** * Phase 1 we will just follow the logic of printing a label when we are told requested to based on this tag. * Phase 2 we will just reprint the tag that was generated at the line */ import os from "os"; import { createLog } from "../../../logger/logger.js"; import { labelingProcess } from "../../../ocp/controller/labeling/labelProcess.js"; import type { TagData } from "../tagData.js"; import { tagStuff } from "../tags/crudTag.js"; import { sendEmail } from "../../../notifications/controller/sendMail.js"; export const wrapperStuff = async (tagData: TagData[]) => { if (tagData[0]?.lastareaIn === "NeedsChecked") { createLog( "error", "rfid", "rfid", `The tags on this pallet need to be checked as it was flagged as more than 1 tag number. please validate and looks at both sides.` ); // just making sure we clear out the running number if one really came over. for (let i = 0; i < tagData.length; i++) { const tag = { ...tagData[i], runningNr: 0 }; tagStuff([tag]); } monitorChecks(); return { success: false, message: "The tags on this pallet need to be checked as it was flagged as more than 1 tag number. please validate and looks at both sides.", }; } if (tagData.length != 1) { createLog( "error", "rfid", "rfid", `There are ${tagData.length} tags and this ${tagData[0].reader} only allows 1 tag to create a label.` ); const tag = { ...tagData[0], runningNr: 0 }; tagStuff([tag]); monitorChecks(); } else { if (!tagData) { createLog("error", "rfid", "rfid", `No tagData was grabbed.`); monitorChecks(); } const tagdata = await tagStuff(tagData); /** * we want to make sure this pallet came from a line as its last spot if not we need to have a manual check. */ const lines = tagdata[0]?.lastareaIn.includes("line3"); if (!lines) { createLog( "error", "rfid", "rfid", `${tagdata[0].tag}, Did not come from a line please check the pallet and manually print the label.` ); monitorChecks(); return { success: false, message: `${tagdata[0].tag}, Did not come from a line please check the pallet and manually print the label.`, }; // when we manually run again we want to make sure we read from the 3rd antenna this way we do not get the wrong info. // more testing will need to be done on this. } // check if a running number exists if (lines[0].runningNumber) { createLog( "info", "rfid", "rfid", `Reprint label ${lines[0].runningNumber}` ); } else { createLog( "info", "rfid", "rfid", `A new label will be created and linked to this ${tagdata[0].tag} tag` ); // get the actaul line number from the last area in const lineNum = parseInt( tagdata[0]?.lastareaIn.repalceAll("line3", "") ); createLog( "info", "rfid", "rfid", `Line to be checked for printing: ${lineNum}` ); const genlabel = await labelingProcess({ line: lineNum.toString(), }); if (genlabel?.success) { // update the tag and add the label into it const createPrintData = { ...tagData[0], runnungNr: parseInt(genlabel.data?.SSCC.slice(10, -1)), }; } } } }; const monitorErrorTags: any = []; const monitorChecks = () => { /** * If we have to check more than 10 tags in an hour send an email to alert everyone. */ const now = new Date(Date.now()).getTime(); monitorErrorTags.push({ timestamp: now }); // remove if creater than 1 hour const removalTiming = now - 1 * 60 * 60 * 1000; // 1 hour while ( monitorErrorTags > 0 && monitorErrorTags[0].timestamp < removalTiming ) { monitorErrorTags.shift(); } if (monitorErrorTags > 10) { // send the email. const emailData = { email: "blake.matthes@alpla.com", // should be moved to the db so it can be reused. subject: `${os.hostname()} has had ${monitorErrorTags}.`, template: "toManyManualPrints", context: { count: monitorErrorTags, hours: "1", }, }; sendEmail(emailData); } }; // if ( // !Array.isArray(tagdata) && // tagdata?.some((n: any) => n.lastareaIn.includes("line3")) // ) { // createLog( // "error", // "rfid", // "rfid", // `Data passed over is not an array.` // ); // return; // }