All checks were successful
Build and Push LST Docker Image / docker (push) Successful in 4m26s
176 lines
4.1 KiB
TypeScript
176 lines
4.1 KiB
TypeScript
import * as XLSX from "xlsx";
|
|
import { runDatamartQuery } from "../datamart/datamart.controller.js";
|
|
import { excelDateStuff } from "../utils/excelToDate.utils.js";
|
|
import { returnFunc } from "../utils/returnHelper.utils.js";
|
|
import { tryCatch } from "../utils/trycatch.utils.js";
|
|
import { postData } from "./logistics.dm.postData.js";
|
|
|
|
export const scjOrders = async (data: any, user: any) => {
|
|
/**
|
|
* Standard orders meaning that we get the standard file exported and fill it out and uplaod to lst.
|
|
*/
|
|
|
|
const customerID = 48;
|
|
|
|
const plantToken = process.env.PROD_PLANT_TOKEN;
|
|
|
|
/*
|
|
get the order state.
|
|
*/
|
|
|
|
const { data: o, error: oe } = await tryCatch(
|
|
runDatamartQuery({ name: "orderState", options: {} }),
|
|
);
|
|
|
|
if (oe) {
|
|
return returnFunc({
|
|
success: false,
|
|
level: "error",
|
|
module: "logistics",
|
|
subModule: "orders",
|
|
message: `Error getting Article info`,
|
|
data: [oe.message],
|
|
notify: true,
|
|
});
|
|
}
|
|
|
|
const openOrders: any = o?.data;
|
|
|
|
/*
|
|
get default invoice address
|
|
*/
|
|
const { data: invoice, error: ie } = await tryCatch(
|
|
runDatamartQuery({ name: "invoiceAddress", options: {} }),
|
|
);
|
|
|
|
if (ie) {
|
|
return returnFunc({
|
|
success: false,
|
|
level: "error",
|
|
module: "logistics",
|
|
subModule: "orders",
|
|
message: `Error getting Article info`,
|
|
data: [ie.message],
|
|
notify: true,
|
|
});
|
|
}
|
|
|
|
const i: any = invoice?.data;
|
|
|
|
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;
|
|
|
|
// define custom headers
|
|
const headers = [
|
|
"ItemNo",
|
|
"Description",
|
|
"DeliveryDate",
|
|
"Quantity",
|
|
"PO",
|
|
"Releases",
|
|
"remarks",
|
|
];
|
|
|
|
const orderData = XLSX.utils.sheet_to_json(sheet, {
|
|
defval: "",
|
|
header: headers,
|
|
range: 1,
|
|
});
|
|
|
|
// the base of the import
|
|
const predefinedObject = {
|
|
receivingPlantId: plantToken ?? "test1",
|
|
documentName: `OrdersFromLST-${new Date(Date.now()).toLocaleString(
|
|
"en-US",
|
|
)}`,
|
|
sender: user.username || "lst-system",
|
|
externalRefNo: `OrdersFromLST-${new Date(Date.now()).toLocaleString(
|
|
"en-US",
|
|
)}`,
|
|
orders: [],
|
|
};
|
|
|
|
let newOrders: any = orderData;
|
|
|
|
// filter out the orders that have already been started just to reduce the risk of errors.
|
|
newOrders.filter((oo: any) =>
|
|
openOrders.some(
|
|
(o: any) => o.CustomerOrderNumber === oo.CustomerOrderNumber,
|
|
),
|
|
);
|
|
|
|
// filter out the blanks
|
|
newOrders = newOrders.filter((z: any) => z.ItemNo !== "");
|
|
|
|
const nOrder = newOrders.map((o: any) => {
|
|
const invoice = i.filter((i: any) => i.deliveryAddress === customerID);
|
|
if (!invoice) {
|
|
return null;
|
|
}
|
|
|
|
if (o.Releases === "") {
|
|
return null;
|
|
}
|
|
|
|
if (o.PO === "") {
|
|
return null;
|
|
}
|
|
|
|
const date = isNaN(o.DeliveryDate)
|
|
? new Date(o.DeliveryDate)
|
|
: excelDateStuff(o.DeliveryDate);
|
|
return {
|
|
customerId: customerID,
|
|
invoiceAddressId: invoice[0].invoiceAddress, // matched to the default invoice address
|
|
customerOrderNo: o.PO,
|
|
orderDate: new Date(Date.now()).toLocaleString("en-US"),
|
|
positions: [
|
|
{
|
|
deliveryAddressId: customerID,
|
|
customerArticleNo: o.ItemNo,
|
|
quantity: parseInt(o.Quantity),
|
|
deliveryDate: date, //excelDateStuff(o.DELDATE),
|
|
customerLineItemNo: o.PO, // this is how it is currently sent over from abbott
|
|
customerReleaseNo: o.Releases, // same as above
|
|
remark: o.remarks === "" ? null : o.remarks,
|
|
},
|
|
],
|
|
};
|
|
});
|
|
|
|
//console.log(nOrder.filter((o: any) => o !== undefined));
|
|
|
|
// // do that fun combining thing
|
|
const updatedPredefinedObject = {
|
|
...predefinedObject,
|
|
orders: [
|
|
...predefinedObject.orders,
|
|
...nOrder.filter((o: any) => o !== undefined),
|
|
],
|
|
};
|
|
|
|
//console.log(updatedPredefinedObject.orders[0]);
|
|
|
|
// // post the orders to the server
|
|
const posting: any = await postData(
|
|
{
|
|
type: "orders",
|
|
endpoint: "/public/v1.0/DemandManagement/ORDERS",
|
|
data: updatedPredefinedObject as any,
|
|
},
|
|
user,
|
|
);
|
|
|
|
return {
|
|
customer: customerID,
|
|
//totalOrders: orders?.length(),
|
|
success: posting.success,
|
|
message: posting.message,
|
|
data: posting.data,
|
|
};
|
|
};
|