feat(datamart): active article moved over to the new version

This commit is contained in:
2025-11-26 08:52:28 -06:00
parent 59c6fd0117
commit 8e7f1eb098
4 changed files with 124 additions and 21 deletions

View File

@@ -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;

View File

@@ -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);
};

View File

@@ -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) => {

View File

@@ -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)