feat(notify): material per day for the next 90 days
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
/**
|
||||
* This will return the material demand per day
|
||||
* startdate and end date should be passed over
|
||||
*/
|
||||
export const materialPerDay = `
|
||||
use [test3_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);
|
||||
`;
|
||||
Reference in New Issue
Block a user