feat(ocp): materials contorls and transfer to next lot logic
This commit is contained in:
@@ -1,22 +1,117 @@
|
||||
// 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 = `
|
||||
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,
|
||||
use [test1_AlplaPROD2.0_Read]
|
||||
/*
|
||||
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.
|
||||
|
||||
*/
|
||||
SELECT lot.ProductionLotHumanReadableId
|
||||
,MaterialHumanReadableId
|
||||
,MaterialDescription
|
||||
--IsMainMaterial,
|
||||
--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 totalDemand ,
|
||||
case when cp.Pieces = 1 then (lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces else
|
||||
(a.Weight *(cp.Percentage / 100) * ((lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces)) / 1000 end totalNeeded
|
||||
,l.qty as invForAutoConsume
|
||||
/* remaining needed to complete the lot */
|
||||
x.TotalDemand - x.EffectiveConsumption as remainingNeeded,
|
||||
--,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)
|
||||
,case when (case when x.ProvidedAmount <> 0
|
||||
then x.ProvidedAmount else x.EffectiveConsumption end) >
|
||||
case when cp.Pieces = 1 then (lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces else
|
||||
(a.Weight *(cp.Percentage / 100) * ((lot.TotalProducedLoadingUnits+1) * p.LoadingUnitPieces)) / 1000 end
|
||||
then 'good'
|
||||
else 'no' end as noMaterialShortage
|
||||
-- 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
|
||||
|
||||
,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
|
||||
,x.IsManualProcess as isManual
|
||||
,IsMainMaterial
|
||||
,lot.TotalPlannedLoadingUnits
|
||||
,lot.TotalProducedLoadingUnits
|
||||
,lot.TotalPlannedLoadingUnits - lot.TotalProducedLoadingUnits as remainingPallets
|
||||
,cp.Percentage
|
||||
,case when cp.Pieces is not null then cp.Pieces else pkg.QuantityPosition end as peices
|
||||
FROM [issueMaterial].[MaterialDemand] x (nolock)
|
||||
|
||||
left join
|
||||
[test1_AlplaPROD2.0_Read].[issueMaterial].[ProductionLot] as lot on
|
||||
x.ProductionLotId = lot.Id
|
||||
[productionControlling].[ProducedLot] as lot on
|
||||
lot.Id = x.ProductionLotId
|
||||
|
||||
/* 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
|
||||
|
||||
/* 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
|
||||
|
||||
/* 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 = [lotNumber]
|
||||
and IsMainMaterial = 1
|
||||
`;
|
||||
|
||||
@@ -1,20 +1,36 @@
|
||||
export const labelInfo = `
|
||||
select top(500) e.Barcode,
|
||||
e.IdArtikelvarianten as av,
|
||||
e.lfdnr as rn,
|
||||
IdEtikettenLayout as labelLayout,
|
||||
AnzStkJePalette,
|
||||
Sonstiges_9,AnzStkJeKarton
|
||||
,case when EinlagerungsMengeSum IS NULL then 'notOnStock' else 'onStock' end as stockStatus
|
||||
,EinlagerungsMengeSum
|
||||
--,*
|
||||
from [AlplaPROD_test1].dbo.[T_EtikettenGedruckt] e (nolock)
|
||||
declare @runningNumber nvarchar(max) = [runningNr]
|
||||
|
||||
select e.Barcode,
|
||||
e.RunningNumber as runnungNumber,
|
||||
externalRunningNumber= null,
|
||||
e.ArticleHumanReadableId as av,
|
||||
e.LabelManagementHumanReadableId as labelLayout,
|
||||
case when EinlagerungsMengeSum IS NULL then 'notOnStock' else 'onStock' end as stockStatus
|
||||
from [test1_AlplaPROD2.0_Read].[labelling].[InternalLabel] (nolock) as e
|
||||
|
||||
left join
|
||||
[AlplaPROD_test1].dbo.V_LagerPositionenBarcodes as l on
|
||||
e.LfdNr = l.Lfdnr
|
||||
alplaprod_test1.dbo.V_LagerPositionenBarcodes (nolock) as l on
|
||||
e.RunningNumber = l.Lfdnr
|
||||
|
||||
where e.LfdNr in ([runningNr])
|
||||
WHERE e.RunningNumber IN (@runningNumber)
|
||||
|
||||
order by add_date desc
|
||||
union all
|
||||
|
||||
select ext.Barcode
|
||||
,RunningNumber as runnungNumber
|
||||
,SsccEanRunningNumber as externalRunningNumber
|
||||
,ArticleHumanReadableId
|
||||
,case when LabelManagementHumanReadableId is null then (select HumanReadableId from [test1_AlplaPROD2.0_Read].[masterData].[LabelManagement] (nolock) where LabelMarkerId = 7) else LabelManagementHumanReadableId end as labelLayout
|
||||
,case when EinlagerungsMengeSum IS NULL then 'notOnStock' else 'onStock' end as stockStatus
|
||||
from [test1_AlplaPROD2.0_Read].[labelling].[ExternalLabel] (nolock) as ext
|
||||
|
||||
left join
|
||||
alplaprod_test1.dbo.V_LagerPositionenBarcodes (nolock) as l on
|
||||
ext.RunningNumber = l.Lfdnr
|
||||
|
||||
WHERE ext.SsccEanRunningNumber IN (@runningNumber) and
|
||||
ext.RunningNumber NOT IN (
|
||||
SELECT RunningNumber FROM [test1_AlplaPROD2.0_Read].[labelling].[InternalLabel] WHERE RunningNumber IN (@runningNumber)
|
||||
)
|
||||
`;
|
||||
|
||||
Reference in New Issue
Block a user