155 lines
5.1 KiB
TypeScript
155 lines
5.1 KiB
TypeScript
import { db } from "../../../../../database/dbclient.js";
|
|
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
|
|
import { query } from "../../../sqlServer/prodSqlServer.js";
|
|
import { siloQuery } from "../../../sqlServer/querys/silo/siloQuery.js";
|
|
import { postAdjustment } from "./postAdjustment.js";
|
|
import { siloAdjustments } from "../../../../../database/schema/siloAdjustments.js";
|
|
import { greetingStuff } from "../../../../globalUtils/greetingEmail.js";
|
|
import { sendEmail } from "../../../notifications/controller/sendMail.js";
|
|
import { settings } from "../../../../../database/schema/settings.js";
|
|
import { generateOneTimeKey } from "../../../../globalUtils/singleUseKey.js";
|
|
import { eq } from "drizzle-orm";
|
|
import {
|
|
getSettings,
|
|
serverSettings,
|
|
} from "../../../server/controller/settings/getSettings.js";
|
|
|
|
export const createSiloAdjustment = async (
|
|
data: any | null,
|
|
user: any | null
|
|
) => {
|
|
/**
|
|
* Creates a silo adjustment based off warehouse, location, and qty.
|
|
* qty will come from the hmi, prolink, or silo patrol
|
|
*/
|
|
// const { data: set, error: setError } = await tryCatch(
|
|
// db.select().from(settings)
|
|
// );
|
|
|
|
// const { data: set, error: setError } = await tryCatch(getSettings());
|
|
|
|
// if (setError) {
|
|
// return {
|
|
// success: false,
|
|
// message: `There was an error getting setting data to post to the server.`,
|
|
// data: setError,
|
|
// };
|
|
// }
|
|
|
|
const set = serverSettings.length === 0 ? [] : serverSettings;
|
|
// getting stock data first so we have it prior to the adjustment
|
|
const { data: s, error: stockError } = await tryCatch(
|
|
query(siloQuery, "Silo data Query")
|
|
);
|
|
|
|
if (stockError) {
|
|
return {
|
|
success: false,
|
|
message: `There was an error getting stock data to post to the server.`,
|
|
data: stockError,
|
|
};
|
|
}
|
|
const stock: any = s?.data as any;
|
|
const { data: a, error: errorAdj } = await tryCatch(
|
|
postAdjustment(data, user.prod)
|
|
);
|
|
|
|
if (errorAdj) {
|
|
return {
|
|
success: false,
|
|
message: `There was an error doing the silo adjustment.`,
|
|
data: errorAdj,
|
|
};
|
|
}
|
|
/**
|
|
* Checking to see the difference, and send email if +/- 5% will change later if needed
|
|
*/
|
|
|
|
const sa: any = a;
|
|
|
|
if (!sa.success) {
|
|
console.log(`insde error`);
|
|
return {
|
|
success: sa.success,
|
|
message: sa.message,
|
|
data: sa.data,
|
|
};
|
|
}
|
|
|
|
const stockNummy = stock.filter((s: any) => s.LocationID === data.laneId);
|
|
const theDiff =
|
|
((data.quantity - stockNummy[0].Stock_Total) /
|
|
((data.quantity + stockNummy[0].Stock_Total) / 2)) *
|
|
100;
|
|
|
|
/**
|
|
* Post the data to our db.
|
|
*/
|
|
|
|
//console.log(stockNummy);
|
|
const { data: postAdj, error: postAdjError } = await tryCatch(
|
|
db
|
|
.insert(siloAdjustments)
|
|
.values({
|
|
warehouseID: data.warehouseId,
|
|
locationID: data.laneId,
|
|
currentStockLevel: stockNummy[0].Stock_Total,
|
|
newLevel: data.quantity,
|
|
lastDateAdjusted: new Date(stockNummy[0].LastAdjustment),
|
|
add_user: user.username,
|
|
})
|
|
.returning({ id: siloAdjustments.siloAdjust_id })
|
|
);
|
|
|
|
if (postAdjError) {
|
|
//console.log(postAdjError);
|
|
return {
|
|
success: false,
|
|
message: `There was an error posting the new adjustment.`,
|
|
data: postAdjError,
|
|
};
|
|
}
|
|
let adj: any = a;
|
|
if (Math.abs(theDiff) > 5) {
|
|
// console.log(`Send for comment due to being: ${theDiff.toFixed(2)}%`);
|
|
const server = set.filter((n: any) => n.name === "server");
|
|
|
|
const port = set.filter((n: any) => n.name === "serverPort");
|
|
const key = await generateOneTimeKey();
|
|
const updateKey = await db
|
|
.update(siloAdjustments)
|
|
.set({ commentKey: key })
|
|
.where(eq(siloAdjustments.siloAdjust_id, postAdj[0].id));
|
|
|
|
const emailSetup = {
|
|
email: user.email,
|
|
subject: `Alert - Siloadjustment was done with a descrepancy of 5% or greater`,
|
|
template: "siloAdjustmentComment",
|
|
context: {
|
|
greeting: await greetingStuff(),
|
|
siloName: stockNummy[0].Description,
|
|
variance: `${theDiff.toFixed(2)}%`,
|
|
currentLevel: stockNummy[0].Stock_Total,
|
|
newLevel: data.quantity,
|
|
variancePer: 5,
|
|
adjustID: `${postAdj[0].id}&${key}`,
|
|
server: server[0].value,
|
|
port: port[0].value,
|
|
},
|
|
};
|
|
|
|
//console.log(emailSetup);
|
|
|
|
await sendEmail(emailSetup);
|
|
return {
|
|
success: adj.success,
|
|
message: `Silo adjustmnet was completed you will also receive and email due to the adjustment having a variation of ${Math.abs(
|
|
theDiff
|
|
).toFixed(2)}%`,
|
|
data: adj.data,
|
|
};
|
|
} else {
|
|
return { success: adj.success, message: adj.message, data: adj.data };
|
|
}
|
|
};
|