feat(quality): priority ranking added

This commit is contained in:
2025-11-14 11:49:57 -06:00
parent c509c7fe28
commit c777395b03
18 changed files with 3137 additions and 103 deletions

View File

@@ -0,0 +1 @@
ALTER TABLE "qualityRequest" ADD COLUMN "priority" integer DEFAULT 4;

File diff suppressed because it is too large Load Diff

View File

@@ -533,6 +533,13 @@
"when": 1762983466464,
"tag": "0075_tan_unicorn",
"breakpoints": true
},
{
"idx": 76,
"version": "7",
"when": 1763134709763,
"tag": "0076_stiff_champions",
"breakpoints": true
}
]
}

View File

@@ -1,45 +1,46 @@
import {
text,
pgTable,
numeric,
index,
timestamp,
boolean,
uuid,
uniqueIndex,
integer,
boolean,
index,
integer,
numeric,
pgTable,
text,
timestamp,
uniqueIndex,
uuid,
} from "drizzle-orm/pg-core";
import { createInsertSchema, createSelectSchema } from "drizzle-zod";
import { z } from "zod";
export const qualityRequest = pgTable(
"qualityRequest",
{
request_id: uuid("request_id").defaultRandom().primaryKey(),
article: numeric("article"),
description: text("description"),
runningNr: text("runningNr"),
lotNr: numeric("lotNr"),
warehouseAtRequest: text("warehouseAtRequest"),
locationAtRequest: text("locationAtRequest"),
warehouseMovedTo: text("warehouseMovedTo"),
locationMovedTo: text("locationMovedTo"),
durationToMove: integer("durationToMove"),
qualityDurationToInspect: integer("qualityDurationToInspect"),
returnDurationToInspect: integer("returnDurationToInspect"),
locationDropOff: text("locationDropOff"),
palletStatus: integer("palletStatus"),
palletStatusText: text("palletStatusText"),
palletRequest: integer("palletRequest"),
add_date: timestamp("add_date").defaultNow(),
add_user: text("add_user").default("LST"),
upd_date: timestamp("upd_date").defaultNow(),
upd_user: text("upd_user").default("LST"),
},
(table) => [
// uniqueIndex('emailUniqueIndex').on(sql`lower(${table.email})`),
// uniqueIndex("role_name").on(table.name),
]
"qualityRequest",
{
request_id: uuid("request_id").defaultRandom().primaryKey(),
article: numeric("article"),
description: text("description"),
runningNr: text("runningNr"),
lotNr: numeric("lotNr"),
warehouseAtRequest: text("warehouseAtRequest"),
locationAtRequest: text("locationAtRequest"),
warehouseMovedTo: text("warehouseMovedTo"),
locationMovedTo: text("locationMovedTo"),
durationToMove: integer("durationToMove"),
qualityDurationToInspect: integer("qualityDurationToInspect"),
returnDurationToInspect: integer("returnDurationToInspect"),
locationDropOff: text("locationDropOff"),
palletStatus: integer("palletStatus"),
palletStatusText: text("palletStatusText"),
palletRequest: integer("palletRequest"),
priority: integer("priority").default(4), // 1,2,3,4
add_date: timestamp("add_date").defaultNow(),
add_user: text("add_user").default("LST"),
upd_date: timestamp("upd_date").defaultNow(),
upd_user: text("upd_user").default("LST"),
},
(table) => [
// uniqueIndex('emailUniqueIndex').on(sql`lower(${table.email})`),
// uniqueIndex("role_name").on(table.name),
],
);
// Schema for inserting a user - can be used to validate API requests

View File

@@ -1,5 +1,6 @@
import { differenceInMinutes } from "date-fns";
import { eq, sql } from "drizzle-orm";
import { priority } from "st-ethernet-ip/dist/enip/cip/connection-manager/index.js";
import { db } from "../../../../database/dbclient.js";
import { qualityRequest } from "../../../../database/schema/qualityRequest.js";
import { timeZoneFix } from "../../../globalUtils/timeZoneFix.js";
@@ -39,11 +40,13 @@ export const addNewPallet = async (data: any) => {
const palletData: any = c;
// if the pallet exist then tell the user to check on it
const pStatus = [1, 4, 6];
if (palletData && pStatus.includes(palletData[0]?.palletStatus)) {
return {
success: false,
message: `Running number ${data.runningNr} is already pending or reactivated please follow up with the warehouse team on status to be moved.`,
};
if (!data.priority) {
if (palletData && pStatus.includes(palletData[0]?.palletStatus)) {
return {
success: false,
message: `Running number ${data.runningNr} is already pending or reactivated please follow up with the warehouse team on status to be moved.`,
};
}
}
// update the existing pallet if already in the system
@@ -61,25 +64,36 @@ export const addNewPallet = async (data: any) => {
data: pe,
};
}
const pData = {
warehouseAtRequest: p[0].warehouseAtRequest,
locationAtRequest: p[0].locationAtRequest,
warehouseMovedTo: null,
locationMovedTo: null,
palletStatus: data.palletStatusText === "return" ? 6 : 4,
//durationToMove: 0,
palletStatusText:
data.palletStatusText === "return" ? "return" : "reactivated",
qualityDurationToInspect:
data.palletStatusText === "return"
? differenceInMinutes(new Date(Date.now()), p[0].lastMove)
: 0,
locationDropOff:
data.palletStatusText === "return" ? "Return to warhouse" : "",
palletRequest: palletData[0].palletStatus + 1,
upd_user: data.user,
upd_date: sql`NOW()`,
};
let pData = {};
if (data.priority) {
pData = {
priority: data.priority,
upd_user: data.user,
upd_date: sql`NOW()`,
};
} else {
pData = {
warehouseAtRequest: p[0].warehouseAtRequest,
locationAtRequest: p[0].locationAtRequest,
warehouseMovedTo: null,
locationMovedTo: null,
palletStatus: data.palletStatusText === "return" ? 6 : 4,
//durationToMove: 0,
palletStatusText:
data.palletStatusText === "return" ? "return" : "reactivated",
qualityDurationToInspect:
data.palletStatusText === "return"
? differenceInMinutes(new Date(Date.now()), p[0].lastMove)
: 0,
locationDropOff:
data.palletStatusText === "return" ? "Return to warhouse" : "",
palletRequest: palletData[0].palletStatus + 1,
upd_user: data.user,
upd_date: sql`NOW()`,
};
}
const { data: u, error } = await tryCatch(
db

View File

@@ -1,25 +1,28 @@
import { desc } from "drizzle-orm";
import { asc, desc } from "drizzle-orm";
import { db } from "../../../../database/dbclient.js";
import { qualityRequest } from "../../../../database/schema/qualityRequest.js";
import { tryCatch } from "../../../globalUtils/tryCatch.js";
import qualityBlockingMonitor from "../../notifications/controller/notifications/qualityBlocking.js";
export const getRequest = async () => {
const { data, error } = await tryCatch(
db.select().from(qualityRequest).orderBy(desc(qualityRequest.add_date))
);
const { data, error } = await tryCatch(
db
.select()
.from(qualityRequest)
.orderBy(asc(qualityRequest.priority), asc(qualityRequest.add_date)),
);
if (error) {
return {
success: false,
message: "There was an error getting the quality request",
data: error,
};
}
if (error) {
return {
success: false,
message: "There was an error getting the quality request",
data: error,
};
}
return {
success: true,
message: "Quality request pallets.",
data,
};
return {
success: true,
message: "Quality request pallets.",
data,
};
};

View File

@@ -105,7 +105,7 @@ export const qualityCycle = async () => {
);
} else {
createLog(
"info",
"debug",
"lst",
"quality",
`Pallet ${
@@ -119,7 +119,7 @@ export const qualityCycle = async () => {
}
await delay(150);
} else {
createLog("info", "lst", "quality", "nothing to update");
//createLog("info", "lst", "quality", "nothing to update");
}
},
5 * 60 * 1000,