207 lines
6.1 KiB
TypeScript
207 lines
6.1 KiB
TypeScript
import { eq } from "drizzle-orm";
|
|
import { db } from "../../../../../database/dbclient.js";
|
|
import { printerData } from "../../../../../database/schema/printers.js";
|
|
import { runProdApi } from "../../../../globalUtils/runProdApi.js";
|
|
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
|
|
import { createLog } from "../../../logger/logger.js";
|
|
import { query } from "../../../sqlServer/prodSqlServer.js";
|
|
import { labelInfo } from "../../../sqlServer/querys/warehouse/labelInfo.js";
|
|
|
|
type NewLotData = {
|
|
runnungNumber: number;
|
|
lotNumber: number;
|
|
originalAmount: number;
|
|
level: number;
|
|
};
|
|
|
|
/**
|
|
* Move manual material to a new lot.
|
|
*
|
|
* The data sent over should be
|
|
* Running number
|
|
* Lot number
|
|
* Orignal Quantity
|
|
* level of gaylord
|
|
*/
|
|
export const lotMaterialTransfer = async (data: NewLotData) => {
|
|
// get the barcode, and layoutID from the running number
|
|
const { data: label, error: labelError } = (await tryCatch(
|
|
query(
|
|
labelInfo.replace("[runningNr]", `${data.runnungNumber}`),
|
|
"Get label info"
|
|
)
|
|
)) as any;
|
|
|
|
if (labelError) {
|
|
createLog(
|
|
"error",
|
|
"materials",
|
|
"ocp",
|
|
"There was an error getting the label info"
|
|
);
|
|
return {
|
|
success: false,
|
|
message: "There was an error getting the label info",
|
|
data: labelError,
|
|
};
|
|
}
|
|
|
|
// if (
|
|
// label.data[0]?.stockStatus === "notOnStock" ||
|
|
// label.data.length === 0
|
|
// ) {
|
|
// createLog(
|
|
// "error",
|
|
// "materials",
|
|
// "ocp",
|
|
// `${data.runnungNumber}: dose not exist or no longer in stock.`
|
|
// );
|
|
// return {
|
|
// success: false,
|
|
// message: `${data.runnungNumber}: dose not exist or no longer in stock.`,
|
|
// data: [],
|
|
// };
|
|
// }
|
|
|
|
if (label.data[0]?.stockStatus === "onStock") {
|
|
createLog(
|
|
"error",
|
|
"materials",
|
|
"ocp",
|
|
`${data.runnungNumber}: currently in stock and not consumed to a lot.`
|
|
);
|
|
return {
|
|
success: false,
|
|
message: `${data.runnungNumber}: currently in stock and not consumed to a lot.`,
|
|
data: [],
|
|
};
|
|
}
|
|
|
|
// get the pdf24 printer id
|
|
const { data: printer, error: printerError } = (await tryCatch(
|
|
db.select().from(printerData).where(eq(printerData.name, "PDF24"))
|
|
)) as any;
|
|
|
|
if (printerError) {
|
|
createLog(
|
|
"error",
|
|
"materials",
|
|
"ocp",
|
|
"There was an error the printer info"
|
|
);
|
|
return {
|
|
success: false,
|
|
message: "There was an error the printer info",
|
|
data: printerError,
|
|
};
|
|
}
|
|
// calculate the remaining amount bascially it will be orignal number * level sent over
|
|
// level should be sent in a decimal .25 .5 .75 .95 the 95 will allow basically the what looks to be a full gaylord but we always want to consume something
|
|
const newQty = (data.originalAmount * data.level).toFixed(0);
|
|
|
|
// reprint the label and send it to pdf24
|
|
const reprintData = {
|
|
clientId: 999,
|
|
runningNo: label?.data[0].runnungNumber,
|
|
printerId: printer[0].humanReadableId,
|
|
layoutId: label?.data[0].labelLayout,
|
|
noOfCopies: 0,
|
|
quantity: newQty,
|
|
} as any;
|
|
|
|
const { data: reprint, error: reprintError } = (await tryCatch(
|
|
runProdApi({
|
|
endpoint: "/public/v1.0/ProductionLabelling/ReprintLabel",
|
|
data: [reprintData],
|
|
})
|
|
)) as any;
|
|
|
|
if (!reprint.success) {
|
|
createLog(
|
|
"error",
|
|
"materials",
|
|
"ocp",
|
|
`RN:${data.runnungNumber}, Error: ${reprint.data.data.message}`
|
|
);
|
|
return {
|
|
success: false,
|
|
message: `RN:${data.runnungNumber}, Error: ${reprint.data.data.message}`,
|
|
data: reprint,
|
|
};
|
|
}
|
|
// return the label back to fm1 lane id 10001
|
|
|
|
const matReturnData = {
|
|
barcode: label?.data[0].Barcode,
|
|
laneId: 10001,
|
|
};
|
|
const { data: matReturn, error: matReturError } = (await tryCatch(
|
|
runProdApi({
|
|
endpoint:
|
|
"/public/v1.0/IssueMaterial/ReturnPartiallyConsumedManualMaterial",
|
|
data: [matReturnData],
|
|
})
|
|
)) as any;
|
|
|
|
if (!matReturn.success) {
|
|
createLog(
|
|
"error",
|
|
"materials",
|
|
"ocp",
|
|
`RN:${data.runnungNumber}, Error ${matReturn.data.data.errors[0].message}`
|
|
);
|
|
return {
|
|
success: false,
|
|
message: `RN:${data.runnungNumber}, Error ${matReturn.data.data.errors[0].message}`,
|
|
data: matReturn,
|
|
};
|
|
}
|
|
// consume to the lot provided.
|
|
const consumeLot = {
|
|
productionLot: data.lotNumber,
|
|
barcode: label?.data[0].Barcode,
|
|
};
|
|
const { data: matConsume, error: matConsumeError } = (await tryCatch(
|
|
runProdApi({
|
|
endpoint:
|
|
"/public/v1.0/IssueMaterial/ConsumeNonPreparedManualMaterial",
|
|
data: [consumeLot],
|
|
})
|
|
)) as any;
|
|
|
|
if (!matConsume.success) {
|
|
createLog(
|
|
"error",
|
|
"materials",
|
|
"ocp",
|
|
`RN:${data.runnungNumber}, Error ${matConsume.data.data.errors[0].message}`
|
|
);
|
|
return {
|
|
success: false,
|
|
message: `RN:${data.runnungNumber}, Error ${matConsume.data.data.errors[0].message}`,
|
|
data: matConsume,
|
|
};
|
|
}
|
|
|
|
createLog(
|
|
"info",
|
|
"materials",
|
|
"ocp",
|
|
`RN:${data.runnungNumber}: qty: ${newQty}, was transfered to lot:${data.lotNumber}`
|
|
);
|
|
return {
|
|
success: true,
|
|
message: `RN:${data.runnungNumber}: qty: ${newQty}, was transfered to lot:${data.lotNumber}`,
|
|
data: [],
|
|
};
|
|
};
|
|
|
|
// setTimeout(async () => {
|
|
// lotMaterialTransfer({
|
|
// runnungNumber: 603468,
|
|
// lotNumber: 24897,
|
|
// originalAmount: 380,
|
|
// level: 0.95,
|
|
// });
|
|
// }, 5000);
|