/** * This will return the material demand per day * startdate and end date should be passed over */ export const materialPerDay = ` use [test1_AlplaPROD2.0_Read] DECLARE @ShiftStartHour INT = 6 declare @startDate nvarchar(max) = '[startDate]' declare @endDate nvarchar(max) = '[endDate]' ;with Calendar as ( select cast(@startDate as date) CalDate union all select dateadd(day,1,CalDate) from Calendar where CalDate < @endDate ), DailySplit AS ( SELECT -- Lot fields l.Id AS ProductionLotId, l.ProductionLotHumanReadableId, l.ArticleHumanReadableId, l.ArticleDescription, l.LocationId, l.MachineHumanReadableId, l.MachineDescription, l.StartDate, l.FinishDate, l.ProductionCustomerDescription, l.ProductionCustomerHumanReadableId, l.PlannedQuantity, l.PlannedLoadingUnit, l.Cavity, l.Utilisation, l.TotalMaterialDemand AS LotTotalMaterialDemand, -- Material fields m.MaterialHumanReadableId, m.MaterialDescription, m.TotalDemand AS LotMaterialTotalDemand, c.CalDate, DATEDIFF(SECOND,l.StartDate,l.FinishDate) AS LotDurationSec, -- build shift‑based 24‑hour window (e.g. 06:00 → next day 06:00) CASE WHEN l.StartDate > DATEADD(HOUR,@ShiftStartHour,CAST(c.CalDate AS DATETIME2(7))) THEN l.StartDate ELSE DATEADD(HOUR,@ShiftStartHour,CAST(c.CalDate AS DATETIME2(7))) END AS DayStart, CASE WHEN l.FinishDate < DATEADD(SECOND,-0.0000001, DATEADD(HOUR,@ShiftStartHour, DATEADD(DAY,1,CAST(c.CalDate AS DATETIME2(7))))) THEN l.FinishDate ELSE DATEADD(SECOND,-0.0000001, DATEADD(HOUR,@ShiftStartHour, DATEADD(DAY,1,CAST(c.CalDate AS DATETIME2(7))))) END AS DayEnd FROM [issueMaterial].[ProductionLot] (nolock) AS l LEFT JOIN [issueMaterial].[MaterialDemand] (nolock) AS m ON m.ProductionLotId = l.Id CROSS JOIN Calendar AS c WHERE DATEADD(HOUR,@ShiftStartHour,CAST(c.CalDate AS DATETIME2)) < l.FinishDate AND DATEADD(HOUR,@ShiftStartHour+24,CAST(c.CalDate AS DATETIME2)) > l.StartDate --and l.[ProductionLotHumanReadableId] = 26364 ), Fraction AS ( SELECT ds.*, DATEDIFF(SECOND,ds.DayStart,ds.DayEnd) AS OverlapSec FROM DailySplit ds ), Normalized AS ( SELECT f.*, f.OverlapSec * 1.0 / NULLIF(SUM(f.OverlapSec) OVER (PARTITION BY f.ProductionLotId, f.MaterialHumanReadableId),0) AS NormalizedFraction FROM Fraction f ) SELECT n.ProductionLotId, n.ProductionLotHumanReadableId, n.ArticleHumanReadableId, n.ArticleDescription, n.LocationId, n.MachineHumanReadableId, n.MachineDescription, n.StartDate, n.FinishDate, n.ProductionCustomerDescription, n.ProductionCustomerHumanReadableId, n.PlannedQuantity, n.PlannedLoadingUnit, n.Cavity, n.Utilisation, n.LotTotalMaterialDemand, n.MaterialHumanReadableId, n.MaterialDescription, n.LotMaterialTotalDemand, n.CalDate, n.NormalizedFraction * n.LotMaterialTotalDemand AS DailyMaterialDemand FROM Normalized n ORDER BY n.MaterialHumanReadableId, n.CalDate, n.ProductionLotHumanReadableId OPTION (MAXRECURSION 0); `; export const materialPurchasesPerDay = ` use AlplaPROD_test1 declare @startDate nvarchar(max) = '[startDate]' declare @endDate nvarchar(max) = '[endDate]' SELECT [IdBestellung] as purhcaseOrder ,[IdArtikelVarianten] as MaterialHumanReadableId ,convert(date, [BestellDatum], 120) as orderDate ,convert(date, [Lieferdatum], 120) as deliveryDate ,[BestellMenge] as qty ,[BestellMengeVPK] as pallets FROM [dbo].[T_Bestellpositionen] where PositionsStatus = 2 and convert(date, [Lieferdatum], 120) between @startDate and @endDate --and IdBestellung in( 5535,5534,5513) `;