From 8e7f1eb09811fcf3ea49b95b0ba9a8f55b9c4184 Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Wed, 26 Nov 2025 08:52:28 -0600 Subject: [PATCH] feat(datamart): active article moved over to the new version --- .../internal/datamart/routes/getActiveAv.ts | 89 +++++++++++++++++++ app/src/internal/datamart/routes/routes.ts | 10 +++ .../internal/routerHandler/routeHandler.ts | 2 + .../pkg/prodSql/querys/datamart/article.ts | 44 ++++----- 4 files changed, 124 insertions(+), 21 deletions(-) create mode 100644 app/src/internal/datamart/routes/getActiveAv.ts create mode 100644 app/src/internal/datamart/routes/routes.ts diff --git a/app/src/internal/datamart/routes/getActiveAv.ts b/app/src/internal/datamart/routes/getActiveAv.ts new file mode 100644 index 0000000..cfde3d8 --- /dev/null +++ b/app/src/internal/datamart/routes/getActiveAv.ts @@ -0,0 +1,89 @@ +import { Router, type Request, type Response } from "express"; +import { prodQuery } from "../../../pkg/prodSql/prodQuery.js"; +import { tryCatch } from "../../../pkg/utils/tryCatch.js"; +import { db } from "../../../pkg/db/db.js"; +import { settings } from "../../../pkg/db/schema/settings.js"; +import { eq } from "drizzle-orm"; +import { activeArticle } from "../../../pkg/prodSql/querys/datamart/article.js"; + +type Articles = { +article: string +description: string +articleType: string +pricePoint:string +salesPrice:string +typeOfMaterial:string +articleIdType:string +articleWeight:string +idAddress:string +addressDescription:string +addressType:string +profitCenter:String +fg: string +num_of_cycles:string +costsCenterId:string +costCenterDescription:string +customerArticleNumber:string +customerArticleDescription:String +cycleTime:string +salesAgreement:string +productFamily:string +uom:string +} + + +const router = Router(); + +// GET /health +router.get("/", async (req: Request, res: Response) => { + + const includePlantToken = req.params.includePlantToken + + let articles:Articles[] = []; + try { + const res = await prodQuery(activeArticle, "Get active articles"); + articles = res?.data; + } + catch (error) { + return { + success: false, + message:"Error getting articles", + error: error + }; + } + if (includePlantToken) { + const { data, error } = await tryCatch(db.select().from(settings).where(eq(settings.name, "plantToken"))) + if (error) { + + return { + success: false, + message:"Error getting settings", + error: error + }; + } + // return articles.map((n) => { + // return { + // success: true, + // message: "Active articles including plant token", + // data:{ plantToken: data[0].value, ...n }}; + // }); + + return { + success: true, + message: "Active articles including plant token", + data: articles.map((n) => { + return { plantToken: data[0].value, ...n } + }) + } + } + else { + return { + success: true, + message: "Active articles including plant token", + data:articles}; + } + + +}); + +export default router; \ No newline at end of file diff --git a/app/src/internal/datamart/routes/routes.ts b/app/src/internal/datamart/routes/routes.ts new file mode 100644 index 0000000..302c763 --- /dev/null +++ b/app/src/internal/datamart/routes/routes.ts @@ -0,0 +1,10 @@ +import type { Express, Request, Response } from "express"; + +//datamart Routes +import getActiveAv from './getActiveAv.js' +export const setupDataMartRoutes = (app: Express, basePath: string) => { + const route = basePath + "/api/datamart" + app.use(route + '/activeArticle', getActiveAv); + //app.use(basePath + "/api/user/me", requireAuth(), me); + +}; diff --git a/app/src/internal/routerHandler/routeHandler.ts b/app/src/internal/routerHandler/routeHandler.ts index 44bbc01..c8723e1 100644 --- a/app/src/internal/routerHandler/routeHandler.ts +++ b/app/src/internal/routerHandler/routeHandler.ts @@ -5,6 +5,7 @@ import { setupForkliftRoutes } from "../forklifts/routes/routes.js"; import { setupLogisticsRoutes } from "../logistics/routes.js"; import { setupSystemRoutes } from "../system/routes.js"; import { setupMobileRoutes } from "../mobile/route.js"; +import { setupDataMartRoutes } from "../datamart/routes/routes.js"; export const setupRoutes = (app: Express, basePath: string) => { // all routes @@ -14,6 +15,7 @@ export const setupRoutes = (app: Express, basePath: string) => { setupLogisticsRoutes(app, basePath); setupForkliftRoutes(app, basePath); setupMobileRoutes(app, basePath); + setupDataMartRoutes(app, basePath) // always try to go to the app weather we are in dev or in production. app.get(basePath + "/", (req: Request, res: Response) => { diff --git a/app/src/pkg/prodSql/querys/datamart/article.ts b/app/src/pkg/prodSql/querys/datamart/article.ts index e817462..307fa31 100644 --- a/app/src/pkg/prodSql/querys/datamart/article.ts +++ b/app/src/pkg/prodSql/querys/datamart/article.ts @@ -1,12 +1,12 @@ export const activeArticle = ` use AlplaPROD_test1 -SELECT V_Artikel.IdArtikelvarianten, -V_Artikel.Bezeichnung, -V_Artikel.ArtikelvariantenTypBez, -V_Artikel.PreisEinheitBez, +SELECT V_Artikel.IdArtikelvarianten as article, +V_Artikel.Bezeichnung as description, +V_Artikel.ArtikelvariantenTypBez as articleType, +V_Artikel.PreisEinheitBez as pricePoint, case when sales.price is null then 0 else sales.price end as salesPrice, -TypeOfMaterial=CASE +CASE WHEN V_Artikel.ArtikelvariantenTypBez LIKE'%Additive' Then 'AD' @@ -90,14 +90,15 @@ THEN 'Caps' When V_Artikel.ArtikelvariantenTypBez = 'Dummy' THEN 'Not used' -ELSE 'Item not defined' END -,V_Artikel.IdArtikelvariantenTyp, -Round(V_Artikel.ArtikelGewicht, 3) as Article_Weight, -IdAdresse, -AdressBez, -AdressTypBez, -ProdBereichBez, -FG=case when +ELSE 'Item not defined' END as typeOfMaterial + +,V_Artikel.IdArtikelvariantenTyp as articleIdType, +Round(V_Artikel.ArtikelGewicht, 3) as articleWeight, +IdAdresse as idAddress, +AdressBez as addressDescription, +AdressTypBez as addressType, +ProdBereichBez as profitCenter, +case when V_Artikel.ProdBereichBez = 'SBM' or V_Artikel.ProdBereichBez = 'IM-Caps' or V_Artikel.ProdBereichBez = 'IM-PET' or @@ -107,15 +108,16 @@ V_Artikel.ProdBereichBez = 'ISBM' or V_Artikel.ProdBereichBez = 'IM-Finishing' Then 'FG' Else 'not Defined Profit Center' -end, +end as fg, + V_Artikel.Umlaeufe as num_of_cycles, -V_FibuKonten_BASIS.FibuKontoNr as CostsCenterId, -V_FibuKonten_BASIS.Bezeichnung as CostCenterDescription, -sales.[KdArtNr] as CustomerArticleNumber, -sales.[KdArtBez] as CustomerArticleDescription, -round(V_Artikel.Zyklus, 2) as CycleTime, +V_FibuKonten_BASIS.FibuKontoNr as costsCenterId, +V_FibuKonten_BASIS.Bezeichnung as costCenterDescription, +sales.[KdArtNr] as customerArticleNumber, +sales.[KdArtBez] as customerArticleDescription, +round(V_Artikel.Zyklus, 2) as cycleTime, Sypronummer as salesAgreement, -V_Artikel.ProdArtikelBez as ProductFamily +V_Artikel.ProdArtikelBez as productFamily --,REPLACE(pur.UOM,'UOM:','') ,Case when LEFT( LTRIM(REPLACE(pur.UOM,'UOM:','')), @@ -123,7 +125,7 @@ V_Artikel.ProdArtikelBez as ProductFamily ) is null then '1' else LEFT( LTRIM(REPLACE(pur.UOM,'UOM:','')), CHARINDEX(' ', LTRIM(REPLACE(REPLACE(pur.UOM,'UOM:',''), CHAR(13)+CHAR(10), ' ')) + ' ') - 1 - ) end AS UOM + ) end AS uom --,* FROM dbo.V_Artikel (nolock)