feat(loreal forecast): added in an email to be sent when we are missing skus
This commit is contained in:
@@ -7,6 +7,8 @@ import { postForecast } from "../postForecast.js";
|
|||||||
import { query } from "../../../../../sqlServer/prodSqlServer.js";
|
import { query } from "../../../../../sqlServer/prodSqlServer.js";
|
||||||
import { activeArticle } from "../../../../../sqlServer/querys/dataMart/article.js";
|
import { activeArticle } from "../../../../../sqlServer/querys/dataMart/article.js";
|
||||||
import { addDays } from "date-fns";
|
import { addDays } from "date-fns";
|
||||||
|
import { sendEmail } from "../../../../../notifications/controller/sendMail.js";
|
||||||
|
import { createLog } from "../../../../../logger/logger.js";
|
||||||
|
|
||||||
let customerID = 4;
|
let customerID = 4;
|
||||||
export const lorealForecast = async (data: any, user: any) => {
|
export const lorealForecast = async (data: any, user: any) => {
|
||||||
@@ -111,6 +113,9 @@ export const lorealForecast = async (data: any, user: any) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (activeAV.length === 0) {
|
if (activeAV.length === 0) {
|
||||||
|
if (typeof forcast.customerArticleNo === "number") {
|
||||||
|
missingSku.push(forcast);
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,6 +186,9 @@ export const lorealForecast = async (data: any, user: any) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (activeAV.length === 0) {
|
if (activeAV.length === 0) {
|
||||||
|
if (typeof forcast.customerArticleNo === "number") {
|
||||||
|
missingSku.push(forcast);
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,6 +198,56 @@ export const lorealForecast = async (data: any, user: any) => {
|
|||||||
|
|
||||||
//console.log(comForecast);
|
//console.log(comForecast);
|
||||||
|
|
||||||
|
// email the for the missing ones
|
||||||
|
const missedGrouped = Object.values(
|
||||||
|
missingSku.reduce((acc: any, item: any) => {
|
||||||
|
const key = item.customerArticleNo;
|
||||||
|
|
||||||
|
if (!acc[key]) {
|
||||||
|
// first time we see this customer
|
||||||
|
acc[key] = item;
|
||||||
|
} else {
|
||||||
|
// compare dates and keep the earliest
|
||||||
|
if (
|
||||||
|
new Date(item.requirementDate) <
|
||||||
|
new Date(acc[key].requirementDate)
|
||||||
|
) {
|
||||||
|
acc[key] = item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return acc;
|
||||||
|
}, {})
|
||||||
|
);
|
||||||
|
|
||||||
|
const emailSetup = {
|
||||||
|
email: "Blake.matthes@alpla.com; Stuart.Gladney@alpla.com; Harold.Mccalister@alpla.com; Jenn.Osbourn@alpla.com",
|
||||||
|
subject:
|
||||||
|
missedGrouped.length > 0
|
||||||
|
? `Alert! There are ${missedGrouped.length}, missing skus.`
|
||||||
|
: `Alert! There is a missing SKU.`,
|
||||||
|
template: "missingLorealSkus",
|
||||||
|
context: {
|
||||||
|
items: missedGrouped,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const { data: sentEmail, error: sendEmailError } = await tryCatch(
|
||||||
|
sendEmail(emailSetup)
|
||||||
|
);
|
||||||
|
if (sendEmailError) {
|
||||||
|
createLog(
|
||||||
|
"error",
|
||||||
|
"blocking",
|
||||||
|
"notify",
|
||||||
|
"Failed to send email, will try again on next interval"
|
||||||
|
);
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
message: "Failed to send email, will try again on next interval",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// if the customerarticle number is not matching just ignore it
|
// if the customerarticle number is not matching just ignore it
|
||||||
const predefinedObject = {
|
const predefinedObject = {
|
||||||
receivingPlantId: plantToken[0].value,
|
receivingPlantId: plantToken[0].value,
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
{{!-- <link rel="stylesheet" href="styles/styles.css" /> --}}
|
||||||
|
{{> styles}}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>All,</p>
|
||||||
|
<p>The below SKU's do not currently have an av and will be ignored in the forcast import.</p>
|
||||||
|
<p>The date and qty are the first time needed showing from teh vmi report</p>
|
||||||
|
<table >
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Customer Article Number</th>
|
||||||
|
<th>First Date Needed</th>
|
||||||
|
<th>Quantity</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
{{#each items}}
|
||||||
|
<tr>
|
||||||
|
<td>{{customerArticleNo}}</td>
|
||||||
|
<td>{{requirementDate}}</td>
|
||||||
|
<td>{{quantity}}</td>
|
||||||
|
</tr>
|
||||||
|
{{/each}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<p>Thank you,</p>
|
||||||
|
<p>LST Team</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user