diff --git a/server/services/dataMart/controller/getinventory.ts b/server/services/dataMart/controller/getinventory.ts new file mode 100644 index 0000000..31ef6f1 --- /dev/null +++ b/server/services/dataMart/controller/getinventory.ts @@ -0,0 +1,23 @@ +import { query } from "../../sqlServer/prodSqlServer.js"; +import { + totalInvNoRn, + totalInvRn, +} from "../../sqlServer/querys/dataMart/totalINV.js"; + +export const getINV = async () => { + let inventory: any = []; + + let updatedQuery = totalInvNoRn; + + try { + inventory = await query(updatedQuery, "Gets Curruent inv"); + return { success: true, message: "Current inv", data: inventory }; + } catch (error) { + console.log(error); + return { + success: false, + message: "There was an error getting the inventory", + data: error, + }; + } +}; diff --git a/server/services/dataMart/dataMartService.ts b/server/services/dataMart/dataMartService.ts index 4578526..d434cb3 100644 --- a/server/services/dataMart/dataMartService.ts +++ b/server/services/dataMart/dataMartService.ts @@ -1,10 +1,11 @@ import { OpenAPIHono } from "@hono/zod-openapi"; - +import activequerys from "./route/getCurrentQuerys.js"; import getArticles from "./route/getActiveArticles.js"; +import currentInv from "./route/getInventory.js"; const app = new OpenAPIHono(); -const routes = [getArticles] as const; +const routes = [activequerys, getArticles, currentInv] as const; const appRoutes = routes.forEach((route) => { app.route("/datamart", route); diff --git a/server/services/dataMart/route/getCurrentQuerys.ts b/server/services/dataMart/route/getCurrentQuerys.ts new file mode 100644 index 0000000..c25ba94 --- /dev/null +++ b/server/services/dataMart/route/getCurrentQuerys.ts @@ -0,0 +1,102 @@ +import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi"; +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/v1/masterData/getCustomerInventory", + // description: "Returns specific customer inventory based on there address ID.", + // criteria: "customer", + // }, + // { + // 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/v1/masterData/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/v1/warehouse/getSiloAdjustment", + // // 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 + // }, +]; + +app.openapi( + 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: `api/logger/logs/id` }); + + return c.json({ + success: true, + message: "All Current Active Querys.", + data: current, + }); + } +); +export default app; diff --git a/server/services/dataMart/route/getInventory.ts b/server/services/dataMart/route/getInventory.ts new file mode 100644 index 0000000..0ab8d03 --- /dev/null +++ b/server/services/dataMart/route/getInventory.ts @@ -0,0 +1,54 @@ +import { createRoute, OpenAPIHono, z } from "@hono/zod-openapi"; +import { responses } from "../../../globalUtils/routeDefs/responses.js"; +import { tryCatch } from "../../../globalUtils/tryCatch.js"; +import { getINV } from "../controller/getinventory.js"; + +const app = new OpenAPIHono({ strict: false }); + +app.openapi( + createRoute({ + tags: ["dataMart"], + summary: "Returns All current inventory.", + method: "get", + path: "/getinventory", + // request: { + // body: { + // content: { + // "application/json": { schema: Body }, + // }, + // }, + // }, + responses: responses(), + }), + async (c) => { + // const { data: body, error } = await c.req.json(); + + // if (error) { + // return c.json({ + // success: false, + // message: "Missing data please try again.", + // }); + // } + // 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(getINV()); + + if (error) { + return c.json( + { + success: false, + message: "There was an error getting the inv.", + 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/article.js b/server/services/sqlServer/querys/dataMart/article.ts similarity index 100% rename from server/services/sqlServer/querys/dataMart/article.js rename to server/services/sqlServer/querys/dataMart/article.ts diff --git a/server/services/sqlServer/querys/dataMart/totalINV.ts b/server/services/sqlServer/querys/dataMart/totalINV.ts new file mode 100644 index 0000000..a169264 --- /dev/null +++ b/server/services/sqlServer/querys/dataMart/totalINV.ts @@ -0,0 +1,82 @@ +// this query pulls all the inventory except the inv locations. + +export const totalInvNoRn = ` +select x.idartikelVarianten as av, +ArtikelVariantenAlias as Alias, +--x.Lfdnr as RunningNumber, +round(sum(EinlagerungsMengeVPKSum),0) as Total_Pallets, +sum(EinlagerungsMengeSum) as Total_PalletQTY, +round(sum(VerfuegbareMengeVPKSum),0) as Avalible_Pallets, +sum(VerfuegbareMengeSum) as Avaliable_PalletQTY, +sum(case when c.Description LIKE '%COA%' then GesperrteMengeVPKSum else 0 end) as COA_Pallets, +sum(case when c.Description LIKE '%COA%' then GesperrteMengeSum else 0 end) as COA_QTY, +sum(case when c.Description NOT LIKE '%COA%' or x.IdMainDefect = -1 then GesperrteMengeVPKSum else 0 end) as Held_Pallets, +sum(case when c.Description NOT LIKE '%COA%' or x.IdMainDefect = -1 then GesperrteMengeSum else 0 end) as Held_QTY, +IdProdPlanung as Lot, +IdAdressen, +x.AdressBez +--,* +from [AlplaPROD_test1].dbo.[V_LagerPositionenBarcodes] (nolock) x + +left join +[AlplaPROD_test1].dbo.T_EtikettenGedruckt as l(nolock) on +x.Lfdnr = l.Lfdnr AND l.Lfdnr > 1 + +left join + +(SELECT * + FROM [AlplaPROD_test1].[dbo].[T_BlockingDefects] where Active = 1) as c + on x.IdMainDefect = c.IdBlockingDefect +/* +The data below will be controlled by the user in excell by default everything will be passed over + IdAdressen = 3 +*/ +where /*IdArtikelTyp = 1 and */x.IdWarenlager not in (6, 1) + +group by x.idartikelVarianten, ArtikelVariantenAlias, IdProdPlanung, c.Description, IdAdressen, +x.AdressBez --, x.Lfdnr +order by x.IdArtikelVarianten + +`; + +export const totalInvRn = ` +select x.idartikelVarianten as av, +ArtikelVariantenAlias as Alias, +x.Lfdnr as RunningNumber, +round(sum(EinlagerungsMengeVPKSum),0) as Total_Pallets, +sum(EinlagerungsMengeSum) as Total_PalletQTY, +round(sum(VerfuegbareMengeVPKSum),0) as Avalible_Pallets, +sum(VerfuegbareMengeSum) as Avaliable_PalletQTY, +sum(case when c.Description LIKE '%COA%' then GesperrteMengeVPKSum else 0 end) as COA_Pallets, +sum(case when c.Description LIKE '%COA%' then GesperrteMengeSum else 0 end) as COA_QTY, +sum(case when c.Description NOT LIKE '%COA%' or x.IdMainDefect = -1 then GesperrteMengeVPKSum else 0 end) as Held_Pallets, +sum(case when c.Description NOT LIKE '%COA%' or x.IdMainDefect = -1 then GesperrteMengeSum else 0 end) as Held_QTY, +IdProdPlanung as Lot, +IdAdressen, +x.AdressBez +--,* +from [AlplaPROD_test1].dbo.[V_LagerPositionenBarcodes] (nolock) x + +left join +[AlplaPROD_test1].dbo.T_EtikettenGedruckt as l(nolock) on +x.Lfdnr = l.Lfdnr AND l.Lfdnr > 1 + +left join + +(SELECT * + FROM [AlplaPROD_test1].[dbo].[T_BlockingDefects] where Active = 1) as c + on x.IdMainDefect = c.IdBlockingDefect +/* +The data below will be controlled by the user in excell by default everything will be passed over + IdAdressen = 3 +*/ +where IdArtikelTyp = 1 and x.IdWarenlager not in (6, 1) + +group by x.idartikelVarianten, ArtikelVariantenAlias, IdProdPlanung, c.Description, IdAdressen, +x.AdressBez , x.Lfdnr +order by x.IdArtikelVarianten +`; + +const totalInvValue = ``; + +const totalInvValueRn = ``;