98 lines
2.4 KiB
TypeScript
98 lines
2.4 KiB
TypeScript
import * as XLSX from "xlsx";
|
|
import { excelDateStuff } from "../utils/excelToDate.utils.js";
|
|
import { postForecast } from "./logistics.dm.postForecast.js";
|
|
export const standardForecast = async (data: any, user: any) => {
|
|
/**
|
|
* Post a standard forecast based on the standard template.
|
|
*/
|
|
|
|
const plantToken = process.env.PROD_PLANT_TOKEN;
|
|
|
|
//const arrayBuffer = await data.arrayBuffer();
|
|
const buffer = Buffer.from(data.buffer);
|
|
|
|
const workbook = XLSX.read(buffer, { type: "buffer" });
|
|
|
|
const sheetName = workbook.SheetNames[0] as string;
|
|
const sheet = workbook.Sheets[sheetName] as any;
|
|
|
|
const headers = [
|
|
"CustomerArticleNumber",
|
|
"Quantity",
|
|
"RequirementDate",
|
|
"CustomerID",
|
|
];
|
|
|
|
const forecastData: any = XLSX.utils.sheet_to_json(sheet, {
|
|
defval: "",
|
|
header: headers,
|
|
range: 1,
|
|
});
|
|
|
|
const groupedByCustomer: any = forecastData.reduce((acc: any, item: any) => {
|
|
const id = item.CustomerID;
|
|
if (!acc[id]) {
|
|
acc[id] = [];
|
|
}
|
|
acc[id].push(item);
|
|
return acc;
|
|
}, {});
|
|
|
|
const foreCastData: any = [];
|
|
|
|
for (const [customerID, forecast] of Object.entries(groupedByCustomer)) {
|
|
//console.log(`Running for Customer ID: ${customerID}`);
|
|
const newForecast: any = forecast;
|
|
|
|
const predefinedObject = {
|
|
receivingPlantId: plantToken,
|
|
documentName: `ForecastFromLST-${new Date(Date.now()).toLocaleString(
|
|
"en-US",
|
|
)}`,
|
|
sender: user.username || "lst-system",
|
|
customerId: customerID,
|
|
positions: [],
|
|
};
|
|
|
|
// map everything out for each order
|
|
const nForecast = newForecast.map((o: any) => {
|
|
// const invoice = i.filter(
|
|
// (i: any) => i.deliveryAddress === parseInt(customerID)
|
|
// );
|
|
// if (!invoice) {
|
|
// return;
|
|
// }
|
|
return {
|
|
customerArticleNo: o.CustomerArticleNumber,
|
|
requirementDate: excelDateStuff(parseInt(o.RequirementDate)),
|
|
quantity: o.Quantity,
|
|
};
|
|
});
|
|
|
|
// do that fun combining thing
|
|
const updatedPredefinedObject = {
|
|
...predefinedObject,
|
|
positions: [...predefinedObject.positions, ...nForecast],
|
|
};
|
|
|
|
//console.log(updatedPredefinedObject);
|
|
|
|
// post the orders to the server
|
|
const posting: any = await postForecast(updatedPredefinedObject, user);
|
|
|
|
foreCastData.push({
|
|
customer: customerID,
|
|
//totalOrders: orders?.length(),
|
|
success: posting.success,
|
|
message: posting.message,
|
|
data: posting.data,
|
|
});
|
|
}
|
|
|
|
return {
|
|
success: foreCastData[0].success,
|
|
message: foreCastData[0].message,
|
|
data: foreCastData,
|
|
};
|
|
};
|