feat(lstv2): energizer forecast added with new format

This commit is contained in:
2025-10-02 08:58:43 -05:00
parent 7e1a93512b
commit 7ed29e7432
9 changed files with 189 additions and 1 deletions

View File

@@ -0,0 +1,30 @@
meta {
name: Login
type: http
seq: 1
}
post {
url: {{urlv2}}/api/auth/login
body: json
auth: inherit
}
headers {
Content-Type: application/json
}
body:json {
{
"username": "matthes01",
"password": "{{v2Password}}"
}
}
script:post-response {
bru.setEnvVar("jwtV2",res.body.token)
}
settings {
encodeUrl: true
}

View File

@@ -0,0 +1,8 @@
meta {
name: Auth
seq: 2
}
auth {
mode: inherit
}

View File

@@ -0,0 +1,20 @@
meta {
name: Forecast
type: http
seq: 1
}
post {
url: {{urlv2}}/api/logistics/postforecastin
body: multipartForm
auth: inherit
}
body:multipart-form {
postForecast: @file(C:\Users\matthes01\Downloads\Rolling Forecast .xlsx)
fileType: energizer
}
settings {
encodeUrl: true
}

View File

@@ -0,0 +1,8 @@
meta {
name: DM
seq: 1
}
auth {
mode: inherit
}

View File

@@ -0,0 +1,12 @@
meta {
name: LstV2
seq: 3
}
auth {
mode: bearer
}
auth:bearer {
token: {{jwtV2}}
}

View File

@@ -1,4 +1,9 @@
vars {
url: https://usmcd1vms036.alpla.net
url: http://localhost:4200
session_cookie:
urlv2: http://localhost:3000
jwtV2:
}
vars:secret [
v2Password
]

View File

@@ -1,3 +1,4 @@
import { energizerForecast } from "./mappings/energizer.js";
import { lorealForecast } from "./mappings/loralForecast.js";
import { pNgForecast } from "./mappings/pNgForecast.js";
import { standardForecast } from "./mappings/standardForcast.js";
@@ -40,6 +41,14 @@ export const forecastIn = async (data: any, user: any) => {
orderData = pg.data;
}
if (data["fileType"] === "energizer") {
//run the standard forecast in
const eg = await energizerForecast(data["postForecast"], user);
success = eg.success ?? false;
message = eg.message ?? "Error posting standard forecast";
orderData = eg.data;
}
return {
success,
message,

View File

@@ -0,0 +1,95 @@
import { db } from "../../../../../../../database/dbclient.js";
import { settings } from "../../../../../../../database/schema/settings.js";
import { tryCatch } from "../../../../../../globalUtils/tryCatch.js";
import XLSX from "xlsx";
import { postForecast } from "../postForecast.js";
import { query } from "../../../../../sqlServer/prodSqlServer.js";
import { activeArticle } from "../../../../../sqlServer/querys/dataMart/article.js";
import { addDays } from "date-fns";
import { sendEmail } from "../../../../../notifications/controller/sendMail.js";
import { createLog } from "../../../../../logger/logger.js";
export const energizerForecast = async (data: any, user: any) => {
/**
* Post a standard forecast based on the standard template.
*/
const { data: s, error: e } = await tryCatch(db.select().from(settings));
if (e) {
return {
success: false,
message: `Error getting settings`,
data: e,
};
}
const plantToken = s.filter((s) => s.name === "plantToken");
const arrayBuffer = await data.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
const workbook = XLSX.read(buffer, { type: "buffer" });
const sheet: any = workbook.Sheets["Sheet1"];
const range = XLSX.utils.decode_range(sheet["!ref"]);
const headers = [
"CustomerArticleNumber",
"Quantity",
"RequirementDate",
"CustomerID",
];
// formatting the data
const rows = XLSX.utils.sheet_to_json(sheet, { header: 1 }) as any;
const posting: any = [];
const customerId = 44;
for (let i = 1; i < rows.length; i++) {
const row: any = rows[i];
const material = row[0];
if (material == undefined) continue;
for (let j = 1; j < row.length; j++) {
const qty = row[j];
if (qty && qty !== 0) {
const requirementDate = rows[0][j]; // first row is dates
posting.push({
customerArticleNo: material,
quantity: qty,
requirementDate: new Date(requirementDate),
});
}
}
}
// the predefined data that will never change
const predefinedObject = {
receivingPlantId: plantToken[0].value,
documentName: `ForecastFromLST-${new Date(Date.now()).toLocaleString(
"en-US"
)}`,
sender: user.username || "lst-system",
customerId: customerId,
positions: [],
};
// add the new forecast to the predefined data
let updatedPredefinedObject = {
...predefinedObject,
positions: [...predefinedObject.positions, ...posting],
};
//post it
const forecastData: any = await postForecast(updatedPredefinedObject, user);
return {
success: forecastData.success,
message: forecastData.message,
data: forecastData.data,
};
};

View File

@@ -8,6 +8,7 @@ export const postForecast = async (data: any, user: any) => {
);
//console.log(endpoint);
//console.log(req.body.orders[0]);
try {
const results = await axios({