// 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.TotalProducedLoadingUnits+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.TotalProducedQuantity + 1) / 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%'
`;
