diff --git a/server/services/dataMart/controller/getDeliveryByDateRange.ts b/server/services/dataMart/controller/getDeliveryByDateRange.ts new file mode 100644 index 0000000..e9af620 --- /dev/null +++ b/server/services/dataMart/controller/getDeliveryByDateRange.ts @@ -0,0 +1,79 @@ +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 = []; + + 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"); + } + + // 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 { + deliverys = await query(updatedQuery, "Get Delivery by date range"); + } 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, + // // }); + + // //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 }; +}; diff --git a/server/services/dataMart/dataMartService.ts b/server/services/dataMart/dataMartService.ts index 95a46b9..7262d0e 100644 --- a/server/services/dataMart/dataMartService.ts +++ b/server/services/dataMart/dataMartService.ts @@ -4,6 +4,7 @@ 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"; const app = new OpenAPIHono(); @@ -13,6 +14,7 @@ const routes = [ currentInv, getCustomerInv, getOpenOrders, + getDeliveryByDate, ] as const; const appRoutes = routes.forEach((route) => { diff --git a/server/services/dataMart/route/getCurrentQuerys.ts b/server/services/dataMart/route/getCurrentQuerys.ts index 0841696..3efa00d 100644 --- a/server/services/dataMart/route/getCurrentQuerys.ts +++ b/server/services/dataMart/route/getCurrentQuerys.ts @@ -78,6 +78,14 @@ const current: any = [ "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 + }, ]; app.openapi( diff --git a/server/services/dataMart/route/getDeliveryDateByRange.ts b/server/services/dataMart/route/getDeliveryDateByRange.ts new file mode 100644 index 0000000..85543c2 --- /dev/null +++ b/server/services/dataMart/route/getDeliveryDateByRange.ts @@ -0,0 +1,53 @@ +import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi"; +import { responses } from "../../../globalUtils/routeDefs/responses.js"; +import { tryCatch } from "../../../globalUtils/tryCatch.js"; +import { getDeliveryByDateRange } from "../controller/getDeliveryByDateRange.js"; + +const app = new OpenAPIHono({ strict: false }); +const Body = z.object({ + includeRunnningNumbers: z.string().openapi({ example: "x" }), +}); +app.openapi( + createRoute({ + tags: ["dataMart"], + summary: "Returns deliverys by daterange.", + method: "get", + path: "/deliverybydaterange", + 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: `api/logger/logs/id` }); + const { data, error } = await tryCatch( + getDeliveryByDateRange(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/server/services/sqlServer/querys/dataMart/deleveryByDateRange.ts b/server/services/sqlServer/querys/dataMart/deleveryByDateRange.ts new file mode 100644 index 0000000..c9afaa5 --- /dev/null +++ b/server/services/sqlServer/querys/dataMart/deleveryByDateRange.ts @@ -0,0 +1,73 @@ +export const deliveryByDateRange = ` + +use AlplaPROD_test1 +DECLARE @StartDate DATE = ' [startDate] ' -- 2025-1-1 +DECLARE @EndDate DATE = '[endDate]' -- 2025-1-31 +select * from +(select (select wert from dbo.T_SystemParameter where Bezeichnung = 'Werkskuerzel') as Plant, +AuftragsNummer as OrderNumber, +PositionsNummer as CustomerLineNumber, +AbrufNummer as CustomerReleaseNumber, +CONVERT(date, AbrufLiefertermin) as DeliveryDate, +CONVERT(DATE,JournalDatum) Bol_PrintDate, +AbrufMenge AS OrderQuantity, +AbrufMengeVPK as OrderPallets, +GelieferteMenge AS DeliveredQTY, +GelieferteMengeVPK as DeliverdPallets, +JournalNummer as BOLNum, +ProdArtikelBez AS ProductFamily, +dbo.V_LadePlanungenLadeAuftragAbruf.AbrufIdKundenAdresse AS IdCustomer, +dbo.V_LadePlanungenLadeAuftragAbruf.AdressBez AS CustName, +dbo.T_EAIJournal.IdJournalStatus as bolStatus, +V_TrackerAuftragsAbrufe.IdAuftragsAbruf as releaseNum, +V_LadePlanungenLadeAuftragAbruf.IdLadeAuftrag as truckPostion +,'Base Plant' as plantType +from dbo.V_TrackerAuftragsAbrufe (nolock) + +left join +dbo.V_LadePlanungenLadeAuftragAbruf on V_TrackerAuftragsAbrufe.IdAuftragsAbruf = +dbo.V_LadePlanungenLadeAuftragAbruf.AbrufIdAuftragsAbruf + +left join +dbo.T_EAIJournal on dbo.V_LadePlanungenLadeAuftragAbruf.IdLadeAuftrag = +dbo.T_EAIJournal.IdLadeAuftrag + +left join +dbo.V_ArtikelKomplett on V_TrackerAuftragsAbrufe.IdArtikelVarianten = +dbo.V_ArtikelKomplett.IdArtikelvarianten +where GelieferteMengeVPK > 0 AND ( + AbrufLiefertermin IS NULL + OR CONVERT(date, AbrufLiefertermin) BETWEEN @StartDate AND @EndDate +) + +/*in house*/ +union all + +select top (50) (select wert from dbo.T_SystemParameter where Bezeichnung = 'Werkskuerzel') as Plant +,[KundenAuftragsNummer] as OrderNumber +,[KundenPositionsNummer] as CustomerLineNumber +, null as CustomerReleaseNumber +,CONVERT(date, i.Add_Date) as DeliveryDate +,CONVERT(DATE,i.Upd_Date) Bol_PrintDate +,null AS OrderQuantity +,null as OrderPallets +,LieferMengeVereinbart AS DeliveredQTY +,null as DeliverdPallets +,JournalNummer as BOLNum +,null AS ProductFamily +,IdAdresse AS IdCustomer +,null AS CustName +,null as bolStatus +,null as releaseNum +,null as truckPostion +,'In-House' as plantType +--,* + +from [dbo].[T_InhouseLieferungen] as i (nolock) + +where CONVERT(date, Upd_Date) BETWEEN @StartDate AND @EndDate +) x + + +order by DeliveryDate desc +`;