From 1b59cdd3a48c0e3e6a9009681b387f3f25e1218c Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Fri, 2 Jan 2026 11:07:45 -0600 Subject: [PATCH] fix(psi): correcrtions to account for the tiem offset in the psi --- .../controller/getDeliveryByDateRange.ts | 149 +++++++++-------- .../controller/getDeliveryByDateRangeAndAv.ts | 157 ++++++++++-------- .../dataMart/controller/psiForecastData.ts | 12 +- .../dm/ordersIn/mappings/abbottTruckList.ts | 27 ++- .../querys/dataMart/deleveryByDateRange.ts | 9 +- .../sqlServer/querys/dm/orderState.ts | 4 +- .../sqlServer/querys/psiReport/forecast.ts | 2 +- 7 files changed, 203 insertions(+), 157 deletions(-) diff --git a/lstV2/server/services/dataMart/controller/getDeliveryByDateRange.ts b/lstV2/server/services/dataMart/controller/getDeliveryByDateRange.ts index 3d014ad..db08779 100644 --- a/lstV2/server/services/dataMart/controller/getDeliveryByDateRange.ts +++ b/lstV2/server/services/dataMart/controller/getDeliveryByDateRange.ts @@ -1,84 +1,95 @@ +import { addDays, format } from "date-fns"; +import { formatInTimeZone } from "date-fns-tz"; import { eq } from "drizzle-orm"; import { db } from "../../../../database/dbclient.js"; import { settings } from "../../../../database/schema/settings.js"; import { tryCatch } from "../../../globalUtils/tryCatch.js"; import { query } from "../../sqlServer/prodSqlServer.js"; import { deliveryByDateRange } from "../../sqlServer/querys/dataMart/deleveryByDateRange.js"; -import { addDays, format } from "date-fns"; export const getDeliveryByDateRange = async (data: any | null) => { - // const { data: plantToken, error: plantError } = await tryCatch( - // db.select().from(settings).where(eq(settings.name, "plantToken")) - // ); - // if (plantError) { - // return { - // success: false, - // message: "Error getting Settings", - // data: plantError, - // }; - // } - let deliverys: any = []; + // const { data: plantToken, error: plantError } = await tryCatch( + // db.select().from(settings).where(eq(settings.name, "plantToken")) + // ); + // if (plantError) { + // return { + // success: false, + // message: "Error getting Settings", + // data: plantError, + // }; + // } + let deliverys: any = []; - let updatedQuery = deliveryByDateRange; + let updatedQuery = deliveryByDateRange; - // start days can be sent over - if (data?.start) { - updatedQuery = updatedQuery.replaceAll("[startDate]", data.start[0]); - } else { - updatedQuery = updatedQuery.replaceAll("[startDate]", "1990-1-1"); - } + // start days can be sent over + if (data?.start) { + updatedQuery = updatedQuery.replaceAll("[startDate]", data.start[0]); + } else { + updatedQuery = updatedQuery.replaceAll("[startDate]", "1990-1-1"); + } - // end days can be sent over - if (data?.end) { - updatedQuery = updatedQuery.replaceAll("[endDate]", data.end[0]); - } else { - const defaultEndDate = format( - addDays(new Date(Date.now()), 5), - "yyyy-M-d" - ); - updatedQuery = updatedQuery.replaceAll("[endDate]", defaultEndDate); - } + // end days can be sent over + if (data?.end) { + updatedQuery = updatedQuery.replaceAll("[endDate]", data.end[0]); + } else { + const defaultEndDate = format(addDays(new Date(Date.now()), 5), "yyyy-M-d"); + updatedQuery = updatedQuery.replaceAll("[endDate]", defaultEndDate); + } - try { - const res: any = await query( - updatedQuery, - "Get Delivery by date range" - ); - deliverys = res.data; - //console.log(res.data); - } catch (error) { - console.log(error); - return { - success: false, - message: "All Deliveries within the range.", - data: error, - }; - } + try { + const res: any = await query(updatedQuery, "Get Delivery by date range"); + deliverys = res.data; + //console.log(res.data); + } catch (error) { + console.log(error); + return { + success: false, + message: "All Deliveries within the range.", + data: error, + }; + } - if (!data) { - deliverys = deliverys.splice(1000, 0); - } - // add plant token in - // const pOrders = deliverys.map((item: any) => { - // // const dateCon = new Date(item.loadingDate).toLocaleString("en-US", { - // // month: "numeric", - // // day: "numeric", - // // year: "numeric", - // // hour: "2-digit", - // // minute: "2-digit", - // // hour12: false, - // // }); + // if (!data) { + // deliverys = deliverys.splice(1000, 0); + // } + // add plant token in + // const pOrders = deliverys.map((item: any) => { + // // const dateCon = new Date(item.loadingDate).toLocaleString("en-US", { + // // month: "numeric", + // // day: "numeric", + // // year: "numeric", + // // hour: "2-digit", + // // minute: "2-digit", + // // hour12: false, + // // }); - // //const dateCon = new Date(item.loadingDate).toISOString().replace("T", " ").split(".")[0]; - // const dateCon = new Date(item.loadingDate).toISOString().split("T")[0]; - // //const delDate = new Date(item.deliveryDate).toISOString().replace("T", " ").split(".")[0]; - // const delDate = new Date(item.deliveryDate).toISOString().split("T")[0]; - // return { - // plantToken: plantToken[0].value, - // ...item, - // loadingDate: dateCon, - // deliveryDate: delDate, - // }; - // }); - return { success: true, message: "Current open orders", data: deliverys }; + // //const dateCon = new Date(item.loadingDate).toISOString().replace("T", " ").split(".")[0]; + // const dateCon = new Date(item.loadingDate).toISOString().split("T")[0]; + // //const delDate = new Date(item.deliveryDate).toISOString().replace("T", " ").split(".")[0]; + // const delDate = new Date(item.deliveryDate).toISOString().split("T")[0]; + // return { + // plantToken: plantToken[0].value, + // ...item, + // loadingDate: dateCon, + // deliveryDate: delDate, + // }; + // }); + return { + success: true, + message: "Current open orders", + data: deliverys.map((i: any) => { + const orderDate = new Date(i.OrderDate); + const delDate = new Date(i.DeliveryDate); + const loadDate = new Date(i.LoadingDate); + + return { + ...i, + OrderDate: format(orderDate, "yyyy-MM-dd HH:mm"), + DeliveryDate: format(delDate, "yyyy-MM-dd HH:mm"), + LoadingDate: format(loadDate, "yyyy-MM-dd HH:mm"), + dbDate: i.DeliveryDate, + }; + }), + }; }; diff --git a/lstV2/server/services/dataMart/controller/getDeliveryByDateRangeAndAv.ts b/lstV2/server/services/dataMart/controller/getDeliveryByDateRangeAndAv.ts index d3f17bc..ded2eea 100644 --- a/lstV2/server/services/dataMart/controller/getDeliveryByDateRangeAndAv.ts +++ b/lstV2/server/services/dataMart/controller/getDeliveryByDateRangeAndAv.ts @@ -1,84 +1,97 @@ +import { addDays, format } from "date-fns"; import { query } from "../../sqlServer/prodSqlServer.js"; import { deliveryByDateRangeAndAv } from "../../sqlServer/querys/dataMart/deleveryByDateRange.js"; -import { addDays, format } from "date-fns"; export const getDeliveryByDateRangeAndAv = async ( - avs: string, - startDate: string, - endDate: string + avs: string, + startDate: string, + endDate: string, ) => { - // const { data: plantToken, error: plantError } = await tryCatch( - // db.select().from(settings).where(eq(settings.name, "plantToken")) - // ); - // if (plantError) { - // return { - // success: false, - // message: "Error getting Settings", - // data: plantError, - // }; - // } - let deliverys: any = []; + // const { data: plantToken, error: plantError } = await tryCatch( + // db.select().from(settings).where(eq(settings.name, "plantToken")) + // ); + // if (plantError) { + // return { + // success: false, + // message: "Error getting Settings", + // data: plantError, + // }; + // } + let deliverys: any = []; - let updatedQuery = deliveryByDateRangeAndAv; + let updatedQuery = deliveryByDateRangeAndAv; - // start days can be sent over - if (startDate) { - updatedQuery = updatedQuery.replaceAll("[startDate]", startDate); - } else { - updatedQuery = updatedQuery.replaceAll("[startDate]", "1990-1-1"); - } + // start days can be sent over + if (startDate) { + updatedQuery = updatedQuery.replaceAll("[startDate]", startDate); + } else { + updatedQuery = updatedQuery.replaceAll("[startDate]", "1990-1-1"); + } - // end days can be sent over - if (endDate) { - updatedQuery = updatedQuery.replaceAll("[endDate]", endDate); - } else { - const defaultEndDate = format( - addDays(new Date(Date.now()), 5), - "yyyy-M-d" - ); - updatedQuery = updatedQuery.replaceAll("[endDate]", defaultEndDate); - } + // end days can be sent over + if (endDate) { + updatedQuery = updatedQuery.replaceAll("[endDate]", endDate); + } else { + const defaultEndDate = format(addDays(new Date(Date.now()), 5), "yyyy-M-d"); + updatedQuery = updatedQuery.replaceAll("[endDate]", defaultEndDate); + } - try { - const res: any = await query( - updatedQuery.replace("[articles]", avs), - "Get Delivery by date range" - ); - deliverys = res.data; - //console.log(res.data); - } catch (error) { - console.log(error); - return { - success: false, - message: "All Deliveries within the range.", - data: error, - }; - } + try { + const res: any = await query( + updatedQuery.replace("[articles]", avs), + "Get Delivery by date range", + ); + deliverys = res.data; + //console.log(res.data); + } catch (error) { + console.log(error); + return { + success: false, + message: "All Deliveries within the range.", + data: error, + }; + } - // if (!data) { - // deliverys = deliverys.splice(1000, 0); - // } - // add plant token in - // const pOrders = deliverys.map((item: any) => { - // // const dateCon = new Date(item.loadingDate).toLocaleString("en-US", { - // // month: "numeric", - // // day: "numeric", - // // year: "numeric", - // // hour: "2-digit", - // // minute: "2-digit", - // // hour12: false, - // // }); + // if (!data) { + // deliverys = deliverys.splice(1000, 0); + // } + // add plant token in + // const pOrders = deliverys.map((item: any) => { + // // const dateCon = new Date(item.loadingDate).toLocaleString("en-US", { + // // month: "numeric", + // // day: "numeric", + // // year: "numeric", + // // hour: "2-digit", + // // minute: "2-digit", + // // hour12: false, + // // }); - // //const dateCon = new Date(item.loadingDate).toISOString().replace("T", " ").split(".")[0]; - // const dateCon = new Date(item.loadingDate).toISOString().split("T")[0]; - // //const delDate = new Date(item.deliveryDate).toISOString().replace("T", " ").split(".")[0]; - // const delDate = new Date(item.deliveryDate).toISOString().split("T")[0]; - // return { - // plantToken: plantToken[0].value, - // ...item, - // loadingDate: dateCon, - // deliveryDate: delDate, - // }; - // }); - return { success: true, message: "Current open orders", data: deliverys }; + // //const dateCon = new Date(item.loadingDate).toISOString().replace("T", " ").split(".")[0]; + // const dateCon = new Date(item.loadingDate).toISOString().split("T")[0]; + // //const delDate = new Date(item.deliveryDate).toISOString().replace("T", " ").split(".")[0]; + // const delDate = new Date(item.deliveryDate).toISOString().split("T")[0]; + // return { + // plantToken: plantToken[0].value, + // ...item, + // loadingDate: dateCon, + // deliveryDate: delDate, + // }; + // }); + return { + success: true, + message: "Current open orders", + data: deliverys.map((i: any) => { + const orderDate = new Date(i.OrderDate); + const delDate = new Date(i.DeliveryDate); + const loadDate = new Date(i.LoadingDate); + + return { + ...i, + OrderDate: format(orderDate, "yyyy-MM-dd HH:mm"), + DeliveryDate: format(delDate, "yyyy-MM-dd HH:mm"), + LoadingDate: format(loadDate, "yyyy-MM-dd HH:mm"), + dbDate: i.DeliveryDate, + }; + }), + }; }; diff --git a/lstV2/server/services/dataMart/controller/psiForecastData.ts b/lstV2/server/services/dataMart/controller/psiForecastData.ts index f1394ce..d5bad94 100644 --- a/lstV2/server/services/dataMart/controller/psiForecastData.ts +++ b/lstV2/server/services/dataMart/controller/psiForecastData.ts @@ -1,3 +1,4 @@ +import { format } from "date-fns-tz/format"; import { tryCatch } from "../../../globalUtils/tryCatch.js"; import { createLog } from "../../logger/logger.js"; import { query } from "../../sqlServer/prodSqlServer.js"; @@ -37,6 +38,15 @@ export const getGetPSIForecastData = async (customer: string) => { return { success: true, message: "PSI forecast Data", - data: articles, + data: articles.map((i: any) => { + const requirementDate = new Date(i.requirementDate); + + return { + ...i, + requirementDate: format(requirementDate, "yyyy-MM-dd"), + + dbDate: i.requirementDate, + }; + }), }; }; diff --git a/lstV2/server/services/logistics/controller/dm/ordersIn/mappings/abbottTruckList.ts b/lstV2/server/services/logistics/controller/dm/ordersIn/mappings/abbottTruckList.ts index 46d77b1..a3f40c4 100644 --- a/lstV2/server/services/logistics/controller/dm/ordersIn/mappings/abbottTruckList.ts +++ b/lstV2/server/services/logistics/controller/dm/ordersIn/mappings/abbottTruckList.ts @@ -1,4 +1,4 @@ -import { addDays, addHours, isAfter, parse } from "date-fns"; +import { addDays, addHours, isAfter, parse, subDays } from "date-fns"; import { format } from "date-fns-tz"; import XLSX from "xlsx"; import { db } from "../../../../../../../database/dbclient.js"; @@ -94,6 +94,10 @@ export const abbottOrders = async (data: any, user: any) => { }; const oOrders: any = openOrders; //console.log(orderData); + + function trimAll(str: string) { + return str.replace(/\s+/g, ""); + } let correctedOrders: any = orderData .filter( (o: any) => @@ -103,9 +107,9 @@ export const abbottOrders = async (data: any, user: any) => { .map((o: any) => ({ date: excelDateStuff(o.date, o.time), po: - o.newton8oz.replace(/\s+/g, "") !== "" - ? o.newton8oz.replace(/\s+/g, "") - : o.newton10oz.replace(/\s+/g, ""), + trimAll(o.newton8oz) !== "" + ? trimAll(o.newton8oz) + : o.newton10oz.replace(/[\s\u00A0]+/g, ""), customerArticlenumber: o.newton8oz != "" ? a.filter((a: any) => a.av === 118)[0].CustomerArticleNumber @@ -116,24 +120,29 @@ export const abbottOrders = async (data: any, user: any) => { : a.filter((a: any) => a.av === 120)[0].totalTruckLoad, })); + //console.log(correctedOrders); // now we want to make sure we only correct orders that or after now correctedOrders = correctedOrders.filter((o: any) => { const parsedDate = parse(o.date, "M/d/yyyy, h:mm:ss a", new Date()); - return isAfter(o.date, new Date().toISOString()); + return isAfter(new Date(o.date), new Date().toISOString()); }); - + //console.log(correctedOrders); // last map to remove orders that have already been started // correctedOrders = correctedOrders.filter((oo: any) => // oOrders.some((o: any) => o.CustomerOrderNumber === oo.po) // ); let postedOrders: any = []; const filterOrders: any = correctedOrders; + + //console.log(filterOrders); + filterOrders.forEach((oo: any) => { const isMatch = openOrders.some( (o: any) => String(o.po).trim() === String(oo.po).trim(), ); + //console.log(isMatch, oo.po); if (!isMatch) { - //console.log(`ok to update: ${oo.po}`); + console.log(`ok to update: ${oo.po}`); // oo = { // ...oo, @@ -141,7 +150,7 @@ export const abbottOrders = async (data: any, user: any) => { // }; postedOrders.push(oo); } else { - // console.log(`Not valid order to update: ${oo.po}`); + //console.log(`Not valid order to update: ${oo.po}`); //console.log(oo) } }); @@ -159,7 +168,7 @@ export const abbottOrders = async (data: any, user: any) => { deliveryAddressId: 8, customerArticleNo: o.customerArticlenumber, quantity: o.qty, - deliveryDate: addHours(format(o.date, "M/d/yyyy HH:mm"), 1), //addHours(addDays(o.date, 1), 1), // adding this in so we can over come the constant 1 day behind thing as a work around + deliveryDate: format(o.date, "M/d/yyyy HH:mm"), // addHours(format(o.date, "M/d/yyyy HH:mm"), 1), //addHours(addDays(o.date, 1), 1), // adding this in so we can over come the constant 1 day behind thing as a work around customerLineItemNo: 1, // this is how it is currently sent over from abbott customerReleaseNo: 1, // same as above }, diff --git a/lstV2/server/services/sqlServer/querys/dataMart/deleveryByDateRange.ts b/lstV2/server/services/sqlServer/querys/dataMart/deleveryByDateRange.ts index 51bada5..d722eb6 100644 --- a/lstV2/server/services/sqlServer/querys/dataMart/deleveryByDateRange.ts +++ b/lstV2/server/services/sqlServer/querys/dataMart/deleveryByDateRange.ts @@ -89,9 +89,12 @@ r.[ArticleHumanReadableId] ,ea.JournalNummer ,[ReleaseConfirmationState] ,[PlanningState] - ,format(r.[OrderDate], 'yyyy-MM-dd HH:mm') as OrderDate - ,FORMAT(r.[DeliveryDate], 'yyyy-MM-dd HH:mm') as DeliveryDate - ,FORMAT(r.[LoadingDate], 'yyyy-MM-dd HH:mm') as LoadingDate + --,format(r.[OrderDate], 'yyyy-MM-dd HH:mm') as OrderDate + ,r.[OrderDate] + --,FORMAT(r.[DeliveryDate], 'yyyy-MM-dd HH:mm') as DeliveryDate + ,r.[DeliveryDate] + --,FORMAT(r.[LoadingDate], 'yyyy-MM-dd HH:mm') as LoadingDate + ,r.[LoadingDate] ,[Quantity] ,[DeliveredQuantity] ,r.[AdditionalInformation1] diff --git a/lstV2/server/services/sqlServer/querys/dm/orderState.ts b/lstV2/server/services/sqlServer/querys/dm/orderState.ts index 802fc41..19f91b7 100644 --- a/lstV2/server/services/sqlServer/querys/dm/orderState.ts +++ b/lstV2/server/services/sqlServer/querys/dm/orderState.ts @@ -1,5 +1,5 @@ export const orderState = ` -SELECT top(10000) +SELECT CustomerOrderNumber ,r.CustomerReleaseNumber , OrderState @@ -21,6 +21,6 @@ CustomerOrderNumber where --h.CreatedByEdi = 1 - r.ReleaseState > 0 + r.ReleaseState >= 1 --and CustomerOrderNumber in ( '2358392') `; diff --git a/lstV2/server/services/sqlServer/querys/psiReport/forecast.ts b/lstV2/server/services/sqlServer/querys/psiReport/forecast.ts index 9c4a3d5..81f2f80 100644 --- a/lstV2/server/services/sqlServer/querys/psiReport/forecast.ts +++ b/lstV2/server/services/sqlServer/querys/psiReport/forecast.ts @@ -1,5 +1,5 @@ export const forecastData = ` -SELECT format(cast(RequirementDate as date),'M/d/yyyy') as requirementDate +SELECT RequirementDate as requirementDate ,ArticleHumanReadableId ,CustomerArticleNumber ,ArticleDescription