142 lines
5.6 KiB
TypeScript
142 lines
5.6 KiB
TypeScript
// export const mmQuery = `
|
|
// SELECT lot.ProductionLotHumanReadableId,
|
|
// case when SourcingState in (1, 2) then 1
|
|
// when x.ProvidedAmount > 0 then 1
|
|
// when x.EffectiveConsumption > 0 then 1
|
|
// else 0 end as Staged,
|
|
// x.ProvidedAmount as Provided,
|
|
// x.EffectiveConsumption as consumption,
|
|
// x.TotalDemand as totalNeeded,
|
|
// /* remaining needed to complete the lot */
|
|
// x.TotalDemand - x.EffectiveConsumption as remainingNeeded,
|
|
// /* do we have enough staged or scanned to the lot? */
|
|
// case when (case when x.ProvidedAmount <> 0 then x.ProvidedAmount else x.EffectiveConsumption end) > x.TotalDemand then 'good' else 'bad' end as noShortage ,
|
|
// x.IsManualProcess as isManual,
|
|
// MaterialHumanReadableId
|
|
// FROM [test1_AlplaPROD2.0_Read].[issueMaterial].[MaterialDemand] x (nolock)
|
|
// left join
|
|
// [test1_AlplaPROD2.0_Read].[issueMaterial].[ProductionLot] as lot on
|
|
// x.ProductionLotId = lot.Id
|
|
// where lot.ProductionLotHumanReadableId = [lotNumber]
|
|
// and IsMainMaterial = 1
|
|
// `;
|
|
|
|
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
|
|
MaterialHumanReadableId
|
|
,MaterialDescription
|
|
-- check box is staged so we could book in even if we used preprint.
|
|
,case when SourcingState in (1, 2) then 1
|
|
when x.ProvidedAmount > 0 then 1
|
|
when x.EffectiveConsumption > 0 then 1
|
|
else 0 end as Staged
|
|
,x.IsManualProcess as isManual
|
|
,IsMainMaterial
|
|
-- lot stuff
|
|
,lot.TotalPlannedLoadingUnits
|
|
,lot.TotalProducedLoadingUnits
|
|
,lot.TotalPlannedLoadingUnits - lot.TotalProducedLoadingUnits as remainingPallets
|
|
,x.ProvidedAmount as Provided -- this is what has been provided most of the time this is due to a silo attachment
|
|
,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 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
|
|
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 'mmGood'
|
|
else 'noMM' end else null end as noMMShortage
|
|
|
|
-- pkg check auto
|
|
,case when pkg.QuantityPosition is null then null else
|
|
(case when l.qty > ((lot.TotalProducedLoadingUnits+1) * pkg.QuantityPosition) and IsManualProcess = 0 then 'pkgAutoGood' else 'noAutoPkg' end) end as noPKGAutoShortage
|
|
-- plg check manual
|
|
,case when pkg.QuantityPosition is null then null else
|
|
(case when x.EffectiveConsumption > ((lot.TotalProducedLoadingUnits+1) * pkg.QuantityPosition) and IsManualProcess = 1 then 'pkgManGood' else 'noManPkg' end) end as noPKGManualShortage
|
|
-- 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
|
|
|
|
,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 */
|
|
left join
|
|
[productionControlling].[ProducedLot] as lot on
|
|
lot.Id = x.ProductionLotId
|
|
|
|
/* packagaing */
|
|
left join
|
|
[masterData].[PackagingInstructionPosition] as pkg on
|
|
pkg.PackagingInstructionId = lot.PackagingId
|
|
and pkg.ArticleId = x.MaterialId
|
|
|
|
-- get the pkg stuff so we have the total amount per pallet.
|
|
left join
|
|
[masterData].[PackagingInstruction] as p on
|
|
p.id = lot.PackagingId
|
|
|
|
/* av data */
|
|
left join
|
|
[masterData].[Article] as a on
|
|
a.id = lot.ArticleId
|
|
|
|
/* compound*/
|
|
left join
|
|
[masterData].[CompoundPosition] as cp on
|
|
cp.CompoundId = a.CompoundId
|
|
and cp.ArticleId = x.MaterialId
|
|
|
|
/* current stock info for auto consumption*/
|
|
left join
|
|
(select
|
|
IdArtikelVarianten
|
|
,ArtikelVariantenBez
|
|
,sum(VerfuegbareMengeSum) as qty
|
|
|
|
from AlplaPROD_test1.dbo.V_LagerPositionenBarcodes as i (nolock)
|
|
|
|
left join
|
|
AlplaPROD_test1.dbo.V_LagerAbteilungen as l (nolock) on
|
|
l.IdLagerAbteilung = i.IdLagerAbteilung
|
|
where autoverbrauch = 1 and aktiv = 1
|
|
group by IdArtikelVarianten,ArtikelVariantenBez
|
|
) as l on
|
|
l.IdArtikelVarianten = MaterialHumanReadableId
|
|
|
|
where lot.ProductionLotHumanReadableId = @lot and
|
|
MaterialDescription NOT LIKE '%nopal%'
|
|
and MaterialDescription NOT LIKE '%bb%'
|
|
and MaterialDescription NOT LIKE '%mcg%'
|
|
`;
|