130 lines
3.8 KiB
TypeScript
130 lines
3.8 KiB
TypeScript
import { eq, sql } from "drizzle-orm";
|
|
import { db } from "../../../../../database/dbclient.js";
|
|
import { notifications } from "../../../../../database/schema/notifications.js";
|
|
import { tryCatch } from "../../../../globalUtils/tryCatch.js";
|
|
import { createLog } from "../../../logger/logger.js";
|
|
import { query } from "../../../sqlServer/prodSqlServer.js";
|
|
import { sendEmail } from "../sendMail.js";
|
|
|
|
export interface Labels {
|
|
IdEtikettenHistorie?: number;
|
|
}
|
|
const notification = async (notifyData: any) => {
|
|
/**
|
|
* Pass the entire notification over
|
|
*/
|
|
createLog("debug", "reprinting", "notify", `monitoring ${notifyData.name}`);
|
|
|
|
// validate if there are any emails.
|
|
if (notifyData.emails === "") {
|
|
createLog(
|
|
"error",
|
|
"reprinting",
|
|
"notify",
|
|
`There are no emails set for ${notifyData.name}`
|
|
);
|
|
return;
|
|
}
|
|
|
|
// well set a backup default time here
|
|
let timeCheck = `DATEADD(SECOND, -30, getdate()) `;
|
|
|
|
// set the time of getting the label
|
|
if (notifyData.timeType === "sec") {
|
|
timeCheck = `DATEADD(SECOND, -${notifyData.checkInterval}, getdate()) `;
|
|
} else if (notifyData.timeType === "min") {
|
|
timeCheck = `DATEADD(MINUTE, -${notifyData.checkInterval}, getdate()) `;
|
|
}
|
|
|
|
let reprintQuery = `
|
|
SELECT
|
|
IdEtikettenHistorie,
|
|
IdArtikelvarianten as av,
|
|
ArtikelVariantenBez as alias,
|
|
LfdNr as runningNumber,
|
|
CONVERT(VARCHAR, CAST(Add_Date AS DATETIME), 100) Add_Date,
|
|
Add_User,
|
|
CONVERT(VARCHAR, CAST(Upd_Date AS DATETIME), 100) Upd_Date,
|
|
Upd_User,
|
|
EtikettenDruckerBezeichnung as printer,
|
|
AnzahlGedruckterKopien as totalPrinted
|
|
FROM Alplaprod_test1.dbo.V_EtikettenGedruckt (nolock)
|
|
where AnzahlGedruckterKopien > 2
|
|
and CONVERT(varchar(5), Add_Date,108) not like CONVERT(varchar(5), Upd_Date,108)
|
|
and Upd_Date > DATEADD(SECOND, -30, getdate())
|
|
and VpkVorschriftBez not like '%$%'
|
|
`;
|
|
|
|
//update the time check
|
|
|
|
reprintQuery = reprintQuery.replaceAll(
|
|
"DATEADD(SECOND, -30, getdate()) ",
|
|
timeCheck
|
|
);
|
|
|
|
//let labels: Labels[];
|
|
|
|
const { data: labels, error: labelError } = await tryCatch(
|
|
query(reprintQuery, "Label Reprints")
|
|
);
|
|
|
|
if (labelError) {
|
|
createLog(
|
|
"error",
|
|
"reprinting",
|
|
"notify",
|
|
`Failed to get the labels: ${labelError}`
|
|
);
|
|
return;
|
|
}
|
|
|
|
if (labels.length > 0) {
|
|
//send the email :D
|
|
const emailSetup = {
|
|
email: notifyData.emails,
|
|
subject: "Alert! Label Reprinted",
|
|
template: "reprintLabels",
|
|
context: {
|
|
items: labels,
|
|
},
|
|
};
|
|
|
|
const sentEmail = await sendEmail(emailSetup);
|
|
|
|
if (!sentEmail.success) {
|
|
createLog(
|
|
"error",
|
|
"reprinting",
|
|
"notify",
|
|
"Failed to send email, will try again on next interval"
|
|
);
|
|
return;
|
|
}
|
|
|
|
// // update the last time we ran and the prod id
|
|
// const notifUpdate = {
|
|
// prodID: labels[0].IdEtikettenHistorie,
|
|
// lastRan: nowDate(),
|
|
// };
|
|
|
|
// update the last time ran
|
|
|
|
const { data, error } = await tryCatch(
|
|
db
|
|
.update(notifications)
|
|
.set({
|
|
lastRan: sql`NOW()`,
|
|
notifiySettings: {
|
|
...notifyData.notifiySettings,
|
|
prodID: labels[0].IdEtikettenHistorie,
|
|
},
|
|
})
|
|
.where(eq(notifications.name, notifyData.name))
|
|
);
|
|
} else {
|
|
return;
|
|
}
|
|
};
|
|
|
|
export default notification;
|