diff --git a/lstV2/server/services/dataMart/controller/getInhouseDeliveryByDateRange.ts b/lstV2/server/services/dataMart/controller/getInhouseDeliveryByDateRange.ts new file mode 100644 index 0000000..ed8e3b9 --- /dev/null +++ b/lstV2/server/services/dataMart/controller/getInhouseDeliveryByDateRange.ts @@ -0,0 +1,81 @@ +import { addDays, format } from "date-fns"; +import { query } from "../../sqlServer/prodSqlServer.js"; +import { inhouseDelivery } from "../../sqlServer/querys/dataMart/inhouseDelivery.js"; + +export const getInhouseDeliveryByDateRange = 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 = []; + + let updatedQuery = inhouseDelivery; + + // 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); + } + + try { + const res: any = await query( + updatedQuery, + "Get inhouse Delivery by date range", + ); + deliverys = res.data; + //console.log(res.data); + } catch (error) { + console.log(error); + return { + success: false, + message: "All In-House 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, + // // }); + + // //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 In-House deliveries by range", + data: deliverys, + }; +}; diff --git a/lstV2/server/services/dataMart/dataMartService.ts b/lstV2/server/services/dataMart/dataMartService.ts index 75c227f..5c3273c 100644 --- a/lstV2/server/services/dataMart/dataMartService.ts +++ b/lstV2/server/services/dataMart/dataMartService.ts @@ -1,43 +1,46 @@ import { OpenAPIHono } from "@hono/zod-openapi"; -import activequerys from "./route/getCurrentQuerys.js"; -import getArticles from "./route/getActiveArticles.js"; -import currentInv from "./route/getInventory.js"; -import getCustomerInv from "./route/getCustomerInv.js"; -import getOpenOrders from "./route/getOpenOrders.js"; -import getDeliveryByDate from "./route/getDeliveryDateByRange.js"; import fakeEDI from "./route/fakeEDI.js"; +import getArticles from "./route/getActiveArticles.js"; import addressCorrections from "./route/getCityStateData.js"; +import activequerys from "./route/getCurrentQuerys.js"; +import getCustomerInv from "./route/getCustomerInv.js"; +import getDeliveryByDate from "./route/getDeliveryDateByRange.js"; +import getDeliveryByDateRangeAndAv from "./route/getDeliveryDateByRangeAndAv.js"; import fifoIndex from "./route/getFifoIndex.js"; import financeAudit from "./route/getFinanceAudit.js"; +import getForecastByAv from "./route/getForecastDataByAv.js"; +import getInhouseDeliveryByDate from "./route/getInHouseDeliveryDateByRange.js"; +import currentInv from "./route/getInventory.js"; +import getOpenOrders from "./route/getOpenOrders.js"; import psiArticleData from "./route/getPsiArticleData.js"; +import psiInventory from "./route/getPsiinventory.js"; import psiPlanningData from "./route/getPsiPlanningData.js"; import psiProductionData from "./route/getPsiProductionData.js"; -import psiInventory from "./route/getPsiinventory.js"; -import getForecastByAv from "./route/getForecastDataByAv.js"; -import getDeliveryByDateRangeAndAv from "./route/getDeliveryDateByRangeAndAv.js"; + const app = new OpenAPIHono(); const routes = [ - activequerys, - getArticles, - currentInv, - getCustomerInv, - getOpenOrders, - getDeliveryByDate, - getDeliveryByDateRangeAndAv, - getForecastByAv, - fakeEDI, - addressCorrections, - fifoIndex, - financeAudit, - psiArticleData, - psiPlanningData, - psiProductionData, - psiInventory, + activequerys, + getArticles, + currentInv, + getCustomerInv, + getOpenOrders, + getDeliveryByDate, + getInhouseDeliveryByDate, + getDeliveryByDateRangeAndAv, + getForecastByAv, + fakeEDI, + addressCorrections, + fifoIndex, + financeAudit, + psiArticleData, + psiPlanningData, + psiProductionData, + psiInventory, ] as const; const appRoutes = routes.forEach((route) => { - app.route("/datamart", route); + app.route("/datamart", route); }); export default app; diff --git a/lstV2/server/services/dataMart/route/getCurrentQuerys.ts b/lstV2/server/services/dataMart/route/getCurrentQuerys.ts index 1c72276..bf98bb4 100644 --- a/lstV2/server/services/dataMart/route/getCurrentQuerys.ts +++ b/lstV2/server/services/dataMart/route/getCurrentQuerys.ts @@ -1,146 +1,153 @@ import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi"; -import { responses } from "../../../globalUtils/routeDefs/responses.js"; import { apiHit } from "../../../globalUtils/apiHits.js"; +import { responses } from "../../../globalUtils/routeDefs/responses.js"; const app = new OpenAPIHono({ strict: false }); const current: any = [ - { - name: "getActiveAv", - endpoint: "/api/datamart/getarticles", - description: "Gets all current active AV, with specific critiera.", - }, - // { - // name: "getStockLaneDims", - // endpoint: "/api/v1/masterData/getStockDims", - // description: "Returns the lane dims along with a column to send actaul dims to be updated.", - // }, - // { - // name: "getAddressInfo", - // endpoint: "/api/v1/masterData/getAddressInfo", - // description: "Returns current active addresses with street and zip", - // }, - // { - // name: "getMissingPkgData", - // endpoint: "/api/v1/masterData/getMissingPKGData", - // description: "Returns all packaging data that is missing either printer, layout, or carton layout", - // }, - { - name: "getCustomerInventory", - endpoint: "/api/datamart/getcustomerinventory", - description: - "Returns specific customer inventory based on there address ID, with optional to include warehouses, IE 36,41,5. leaving warehouse blank will just pull everything", - criteria: "customer,whseToInclude", - }, - // { - // name: "getPalletLabels", - // endpoint: "/api/v1/masterData/getPalletLabels", - // description: "Returns specific amount of pallets RN, Needs label number and printer, Specfic to Dayton.", - // criteria: "runningNumber,printerName,count", - // }, - { - name: "getopenorders", - endpoint: "/api/datamart/getopenorders", - description: - "Returns open orders based on day count sent over, sDay 15 days in the past eDay 5 days in the future, can be left empty for this default days", - criteria: "sDay,eDay", - }, - // { - // name: "getOpenIncoming", - // endpoint: "/api/v1/masterData/getOpenIncoming", - // description: - // "Returns open orders based on day count sent over, sDay 15 days in the past eDay 5 days in the future, can be left empty for this default days", - // criteria: "sDay,eDay", - // }, - // { - // name: "planningCheckPkg", - // endpoint: "/api/v1/masterData/planningPkgCheck", - // description: "Returns all lots starting later than today and has a pkg that is missing layouts.", - // }, - { - name: "getinventory", - endpoint: "/api/datamart/getinventory", - // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", - description: - "Returns all inventory, excludes inv locations. no running numbers", - criteria: "includeRunnningNumbers", // uncomment this out once the improt process can be faster - }, - // { - // name: "getOpenOrderUpdates", - // endpoint: "/api/v1/masterData/getOpenOrderUpdates", - // // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", - // description: "Returns all orders based on customer id, leaving empty will pull everythinng in.", - // criteria: "customer", // uncomment this out once the improt process can be faster - // }, - { - name: "getSiloAdjustment", - endpoint: "/api/logistics/getsilosdjustment", - // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", - description: - "Returns all siloadjustments in selected date range IE: 1/1/2025 to 1/31/2025", - criteria: "startDate,endDate", // uncomment this out once the improt process can be faster - }, - { - name: "Delivery by date trange", - endpoint: "/api/datamart/deliverybydaterange", - // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", - description: - "Returns all Deliverys in selected date range IE: 1/1/2025 to 1/31/2025", - criteria: "start,end", // uncomment this out once the improt process can be faster - }, - { - name: "Fake Edi Update", - endpoint: "/api/datamart/fakeediupdate", - // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", - description: - "Returns all open orders to correct and resubmit, leaving blank will get everything putting an address only returns the specified address", - criteria: "address", // uncomment this out once the improt process can be faster - }, - { - name: "Address Corrections", - endpoint: "/api/datamart/getaddressdata", - // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", - description: - "Returns all addresses that will not process correctly in tms due to incorrect city state setup.", - //criteria: "address", // uncomment this out once the improt process can be faster - }, - { - name: "Fifo index", - endpoint: "/api/datamart/getfifoindex", - // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", - description: - "Returns fifo index for all pallets shipped within the last 90 days.", - //criteria: "address", // uncomment this out once the improt process can be faster - }, - { - name: "Finance Audit inv", - endpoint: "/api/datamart/getfinanceaudit", - // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", - description: - "Returns all inventory past the date provided, ie: 5/31/2025", - criteria: "date", // uncomment this out once the improt process can be faster - }, + { + name: "getActiveAv", + endpoint: "/api/datamart/getarticles", + description: "Gets all current active AV, with specific critiera.", + }, + // { + // name: "getStockLaneDims", + // endpoint: "/api/v1/masterData/getStockDims", + // description: "Returns the lane dims along with a column to send actaul dims to be updated.", + // }, + // { + // name: "getAddressInfo", + // endpoint: "/api/v1/masterData/getAddressInfo", + // description: "Returns current active addresses with street and zip", + // }, + // { + // name: "getMissingPkgData", + // endpoint: "/api/v1/masterData/getMissingPKGData", + // description: "Returns all packaging data that is missing either printer, layout, or carton layout", + // }, + { + name: "getCustomerInventory", + endpoint: "/api/datamart/getcustomerinventory", + description: + "Returns specific customer inventory based on there address ID, with optional to include warehouses, IE 36,41,5. leaving warehouse blank will just pull everything", + criteria: "customer,whseToInclude", + }, + // { + // name: "getPalletLabels", + // endpoint: "/api/v1/masterData/getPalletLabels", + // description: "Returns specific amount of pallets RN, Needs label number and printer, Specfic to Dayton.", + // criteria: "runningNumber,printerName,count", + // }, + { + name: "getopenorders", + endpoint: "/api/datamart/getopenorders", + description: + "Returns open orders based on day count sent over, sDay 15 days in the past eDay 5 days in the future, can be left empty for this default days", + criteria: "sDay,eDay", + }, + // { + // name: "getOpenIncoming", + // endpoint: "/api/v1/masterData/getOpenIncoming", + // description: + // "Returns open orders based on day count sent over, sDay 15 days in the past eDay 5 days in the future, can be left empty for this default days", + // criteria: "sDay,eDay", + // }, + // { + // name: "planningCheckPkg", + // endpoint: "/api/v1/masterData/planningPkgCheck", + // description: "Returns all lots starting later than today and has a pkg that is missing layouts.", + // }, + { + name: "getinventory", + endpoint: "/api/datamart/getinventory", + // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", + description: + "Returns all inventory, excludes inv locations. no running numbers", + criteria: "includeRunnningNumbers", // uncomment this out once the improt process can be faster + }, + // { + // name: "getOpenOrderUpdates", + // endpoint: "/api/v1/masterData/getOpenOrderUpdates", + // // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", + // description: "Returns all orders based on customer id, leaving empty will pull everythinng in.", + // criteria: "customer", // uncomment this out once the improt process can be faster + // }, + { + name: "getSiloAdjustment", + endpoint: "/api/logistics/getsilosdjustment", + // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", + description: + "Returns all siloadjustments in selected date range IE: 1/1/2025 to 1/31/2025", + criteria: "startDate,endDate", // uncomment this out once the improt process can be faster + }, + { + name: "Delivery by date range", + endpoint: "/api/datamart/deliverybydaterange", + // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", + description: + "Returns all Deliverys in selected date range IE: 1/1/2025 to 1/31/2025", + criteria: "start,end", // uncomment this out once the improt process can be faster + }, + { + name: "In House Delivery by date range", + endpoint: "/api/datamart/inhousedeliverybydaterange", + // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", + description: + "Returns all in-house deliveries in selected date range IE: 1/1/2025 to 1/31/2025", + criteria: "start,end", // uncomment this out once the improt process can be faster + }, + { + name: "Fake Edi Update", + endpoint: "/api/datamart/fakeediupdate", + // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", + description: + "Returns all open orders to correct and resubmit, leaving blank will get everything putting an address only returns the specified address", + criteria: "address", // uncomment this out once the improt process can be faster + }, + { + name: "Address Corrections", + endpoint: "/api/datamart/getaddressdata", + // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", + description: + "Returns all addresses that will not process correctly in tms due to incorrect city state setup.", + //criteria: "address", // uncomment this out once the improt process can be faster + }, + { + name: "Fifo index", + endpoint: "/api/datamart/getfifoindex", + // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", + description: + "Returns fifo index for all pallets shipped within the last 90 days.", + //criteria: "address", // uncomment this out once the improt process can be faster + }, + { + name: "Finance Audit inv", + endpoint: "/api/datamart/getfinanceaudit", + // description: "Returns all inventory, by default excludes running numebrs, also excludes inv locations.", + description: "Returns all inventory past the date provided, ie: 5/31/2025", + criteria: "date", // uncomment this out once the improt process can be faster + }, ]; app.openapi( - createRoute({ - tags: ["dataMart"], - summary: "Returns all avalible querys.", - method: "get", - path: "/getavalibleaquerys", + createRoute({ + tags: ["dataMart"], + summary: "Returns all avalible querys.", + method: "get", + path: "/getavalibleaquerys", - responses: responses(), - }), - async (c) => { - //const body = await c.req.json(); - // make sure we have a vaid user being accessed thats really logged in - apiHit(c, { endpoint: "/getavalibleaquerys" }); + responses: responses(), + }), + async (c) => { + //const body = await c.req.json(); + // make sure we have a vaid user being accessed thats really logged in + apiHit(c, { endpoint: "/getavalibleaquerys" }); - return c.json({ - success: true, - message: "All Current Active Querys.", - sheetVersion: 2.8, - data: current, - }); - } + return c.json({ + success: true, + message: "All Current Active Querys.", + sheetVersion: 2.8, + data: current, + }); + }, ); export default app; diff --git a/lstV2/server/services/dataMart/route/getInHouseDeliveryDateByRange.ts b/lstV2/server/services/dataMart/route/getInHouseDeliveryDateByRange.ts new file mode 100644 index 0000000..da1d231 --- /dev/null +++ b/lstV2/server/services/dataMart/route/getInHouseDeliveryDateByRange.ts @@ -0,0 +1,54 @@ +import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi"; +import { apiHit } from "../../../globalUtils/apiHits.js"; +import { responses } from "../../../globalUtils/routeDefs/responses.js"; +import { tryCatch } from "../../../globalUtils/tryCatch.js"; +import { getInhouseDeliveryByDateRange } from "../controller/getInhouseDeliveryByDateRange.js"; + +const app = new OpenAPIHono({ strict: false }); +const Body = z.object({ + includeRunnningNumbers: z.string().openapi({ example: "x" }), +}); +app.openapi( + createRoute({ + tags: ["dataMart"], + summary: "Returns deliveries by date range.", + method: "get", + path: "/inhousedeliverybydaterange", + request: { + body: { + content: { + "application/json": { schema: Body }, + }, + }, + }, + responses: responses(), + }), + async (c) => { + const delivery: any = c.req.queries(); + + // make sure we have a vaid user being accessed thats really logged in + apiHit(c, { endpoint: "/inhousedeliverybydaterange" }); + const { data, error } = await tryCatch( + getInhouseDeliveryByDateRange(delivery ? delivery : null), + ); + + if (error) { + console.log(error); + return c.json( + { + success: false, + message: "There was an error getting the deliveries.", + data: error, + }, + 400, + ); + } + + return c.json({ + success: data.success, + message: data.message, + data: data.data, + }); + }, +); +export default app; diff --git a/lstV2/server/services/sqlServer/querys/dataMart/inhouseDelivery.ts b/lstV2/server/services/sqlServer/querys/dataMart/inhouseDelivery.ts new file mode 100644 index 0000000..5b40da8 --- /dev/null +++ b/lstV2/server/services/sqlServer/querys/dataMart/inhouseDelivery.ts @@ -0,0 +1,18 @@ +export const inhouseDelivery = ` +declare @shiftStart varchar(max) = (select top(1) CAST(StartDate AS time(0)) from [test1_AlplaPROD2.0_Read].[masterData].[ShiftDefinition] (nolock) order by TeamNumber) + +SELECT TOP (1000) +ProduktionsLos as lot +,Menge as qty +,Barcode as barcode +,IdArtikelVarianten as av +,ArtikelVariantenAlias as alias +,LieferDatum as deliveryDate +--.* +FROM [AlplaPROD_test1].[dbo].V_LieferBuchungen (nolock) + + where Urheber = 1350 and ProduktionsLos > 0 + and LieferDatum between '[startDate]' + ' ' + @shiftStart + and '[endDate]' + ' ' + @shiftStart + order by LieferDatum desc +`;