From a53915ad8cbec5bd8d6ba4643c460ad0162249e2 Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Sat, 6 Sep 2025 09:03:11 -0500 Subject: [PATCH] fix(material check): split manual material out of the mm to properly catch it --- .../ocp/controller/materials/mainMaterial.ts | 2 +- .../sqlServer/querys/ocp/mainMaterial.ts | 38 +++++++++++++------ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/server/services/ocp/controller/materials/mainMaterial.ts b/server/services/ocp/controller/materials/mainMaterial.ts index e9bb500..5296aec 100644 --- a/server/services/ocp/controller/materials/mainMaterial.ts +++ b/server/services/ocp/controller/materials/mainMaterial.ts @@ -112,7 +112,7 @@ export const isMainMatStaged = async (lot: any) => { ); if ( manualConsumeColor.some( - (n: any) => n.noMaterialShortage === "yes" + (n: any) => n.noManualShortage === "noOK" ) ) { isStaged = { diff --git a/server/services/sqlServer/querys/ocp/mainMaterial.ts b/server/services/sqlServer/querys/ocp/mainMaterial.ts index 6f026d1..457e960 100644 --- a/server/services/sqlServer/querys/ocp/mainMaterial.ts +++ b/server/services/sqlServer/querys/ocp/mainMaterial.ts @@ -25,6 +25,13 @@ export const mmQuery = ` use [test1_AlplaPROD2.0_Read] declare @lot as NVARCHAR(max) = [lotNumber] /* +checks all needed material including pkg + +we only want to monitor the manual materials and the mm materail to make sure they are good. + +for auto consume materails this will be compared with another query. +*/ +/* Material demands for this lot */ select @@ -45,30 +52,39 @@ MaterialHumanReadableId ,x.EffectiveConsumption as consumption -- this is how much was consummed via cmd 112 ,x.TotalDemand as totalDemand -- the total demand needed to finish the lot out - ,case when pkg.QuantityPosition >= 0.001 then ((lot.TotalProducedLoadingUnits+1) * pkg.QuantityPosition) else - (a.Weight *(cp.Percentage / 100) * ((lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces)) / 1000 end totalNeeded + ,case when cp.Pieces >= 0.001 then (lot.TotalProducedQuantity+1) * cp.Pieces else + (a.Weight *((case when cp.Percentage is null then 80 else cp.Percentage end) / 100) * ((lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces)) / 1000 end totalNeeded - ,case when IsMainMaterial = 1 then case when (case when x.ProvidedAmount <> 0 + ,case when IsMainMaterial = 1 then + case when (case when x.ProvidedAmount <> 0 then x.ProvidedAmount else x.EffectiveConsumption end) > - (case when pkg.QuantityPosition >= 0.001 then (lot.TotalProducedLoadingUnits+1) * pkg.QuantityPosition else - (a.Weight *(cp.Percentage / 100) * ((lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces)) / 1000 end) + (case when cp.Pieces >= 0.001 then (lot.TotalProducedQuantity+1) * cp.Pieces else + (a.Weight *((case when cp.Percentage is null then 80 else cp.Percentage end) / 100) * ((lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces)) / 1000 end) then 'mmGood' - else 'noMM' end else null end as noMaterialShortage + else 'noMM' end else null end as noMMShortage -- pkg check ,case when pkg.QuantityPosition is null then null else (case when l.qty > ((lot.TotalProducedLoadingUnits+1) * pkg.QuantityPosition) then 'pkgGood' else 'noPkg' end) end as noPKGShortage - -- autoconsume + -- manualMateiral + ,case when IsMainMaterial = 0 and IsManualProcess = 1 then + case when (case when x.ProvidedAmount <> 0 + then x.ProvidedAmount else x.EffectiveConsumption end) > + (case when cp.Pieces >= 0.001 then (lot.TotalProducedQuantity+1) * cp.Pieces else + (a.Weight *((case when cp.Percentage is null then 80 else cp.Percentage end) / 100) * ((lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces)) / 1000 end) + then 'manualGood' + else 'noOK' end else null end as noManualShortage +-- autoconsume ,case when cp.Percentage is null then case when l.qty > ((lot.TotalProducedLoadingUnits +1) * pkg.QuantityPosition) then 'autoConsumeOk' else 'autoConsumeNOK' end else (case when l.qty > (a.Weight *(cp.Percentage / 100) * ((lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces)) / 1000 and IsManualProcess = 0 then 'autoConsumeOk' else 'autoConsumeNOK' end) end as autoConsumeCheck -- stock amounts ,l.qty as invForAutoConsume - ,x.IsManualProcess as isManual - ,IsMainMaterial + ,case when cp.Percentage is null then 0 else cp.Percentage end as Percentage ,pkg.QuantityPosition + ,(lot.TotalProducedQuantity+1) * cp.Pieces from [issueMaterial].[MaterialDemand] x (nolock) /* production lot info */ @@ -105,10 +121,10 @@ IdArtikelVarianten ,ArtikelVariantenBez ,sum(VerfuegbareMengeSum) as qty -from AlplaPROD_usweb1.dbo.V_LagerPositionenBarcodes as i (nolock) +from AlplaPROD_test1.dbo.V_LagerPositionenBarcodes as i (nolock) left join -AlplaPROD_usweb1.dbo.V_LagerAbteilungen as l (nolock) on +AlplaPROD_test1.dbo.V_LagerAbteilungen as l (nolock) on l.IdLagerAbteilung = i.IdLagerAbteilung where autoverbrauch = 1 and aktiv = 1 group by IdArtikelVarianten,ArtikelVariantenBez