EnVisageOnline/Main/Database/Scripts/20160224/01_VW_PlanningCapacityAdjus...

113 lines
3.7 KiB
Transact-SQL

USE [EnVisage]
GO
if exists (select 1 from sys.views where name like 'VW_Holidays2TeamsAndExpenditures')
begin
DROP VIEW [dbo].[VW_Holidays2TeamsAndExpenditures]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[VW_Holidays2TeamsAndExpenditures] AS
-- Holidays for specified Teams and ECs
(SELECT H.HolidayGroupId, T.Id as TeamId, EC.Id as ExpenditureCategoryId
FROM Holiday H
LEFT JOIN Holiday2Team H2T ON (H2T.HolidayId = H.Id)
LEFT JOIN Holiday2ExpenditureCategory H2E ON (H2E.HolidayId = H.Id)
LEFT JOIN Team T on T.Id = H2T.TeamId or (H2T.Id IS NULL AND H2E.Id IS NOT NULL)
LEFT JOIN ExpenditureCategory EC on EC.Id = H2E.ExpenditureCategoryId or (H2E.Id IS NULL AND H2T.Id IS NOT NULL)
WHERE (H.CompanyImpact = 0) AND (H.IsInclude = 1) AND (H.WorkingDays = 0)
UNION
-- Holidays for all company resources
SELECT H.HolidayGroupId, T.Id as TeamId, EC.Id as ExpenditureCategoryId
FROM Holiday H
LEFT JOIN Team T ON (1 = 1)
LEFT JOIN ExpenditureCategory EC ON (1 = 1)
WHERE (H.CompanyImpact = 1) AND (H.WorkingDays = 0)
UNION
-- Holidays for all resources, except specified resources, teams and ECs
SELECT H.HolidayGroupId, T.Id as TeamId, EC.Id as ExpenditureCategoryId
FROM Holiday H
LEFT JOIN Team T ON (1 = 1)
LEFT JOIN ExpenditureCategory EC ON (1 = 1)
WHERE (H.CompanyImpact = 0) AND (H.IsInclude = 0) AND (H.WorkingDays = 0)
)
EXCEPT
(SELECT H.HolidayGroupId, H2T.TeamId, EC.Id as ExpenditureCategoryId
FROM Holiday H
INNER JOIN Holiday2Team H2T ON (H2T.HolidayId = H.Id)
LEFT JOIN ExpenditureCategory EC ON (1 = 1)
WHERE (H.CompanyImpact = 0) AND (H.IsInclude = 0) AND (H.WorkingDays = 0)
UNION
SELECT H.HolidayGroupId, T.Id as TeamId, H2E.ExpenditureCategoryId
FROM Holiday H
INNER JOIN Holiday2ExpenditureCategory H2E ON (H2E.HolidayId = H.Id)
LEFT JOIN Team T ON (1 = 1)
WHERE (H.CompanyImpact = 0) AND (H.IsInclude = 0) AND (H.WorkingDays = 0)
)
GO
if exists (select 1 from sys.views where name like 'VW_PlanningCapacityWorkingDays')
begin
DROP VIEW [dbo].[VW_PlanningCapacityWorkingDays]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW VW_PlanningCapacityWorkingDays AS
select B.HolidayGroupId, B.WeekEndingDate, A.ExpenditureCategoryId, A.TeamId, WW.WorkDaysAmount,
MIN(CAST((B.Sunday & WW.Sunday) as decimal)) AS Sunday,
MIN(CAST((B.Monday & WW.Monday) as decimal)) AS Monday,
MIN(CAST((B.Tuesday & WW.Tuesday) as decimal)) AS Tuesday,
MIN(CAST((B.Wednesday & WW.Wednesday) as decimal)) AS Wednesday,
MIN(CAST((B.Thursday & WW.Thursday) as decimal)) AS Thursday,
MIN(CAST((B.Friday & WW.Friday) as decimal)) AS Friday,
MIN(CAST((B.Saturday & WW.Saturday) as decimal)) AS Saturday
from VW_Holidays2TeamsAndExpenditures A
INNER JOIN HolidayAllocation B ON (B.HolidayGroupId = A.HolidayGroupId)
INNER JOIN VW_WorkWeek WW ON WW.Id = (select top 1 Id from WorkWeek where IsSystem=1)
GROUP BY B.HolidayGroupId, B.WeekEndingDate, A.ExpenditureCategoryId, A.TeamId, WW.WorkDaysAmount
GO
if exists (select 1 from sys.views where name like 'VW_PlanningCapacityAdjusted')
begin
DROP VIEW [dbo].[VW_PlanningCapacityAdjusted]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[VW_PlanningCapacityAdjusted]
AS
SELECT distinct sc.Id as ScenarioId, WD.ExpenditureCategoryId, WD.TeamId, WD.WeekEndingDate,
(CASE (WD.WorkDaysAmount)
WHEN 0 THEN 0
ELSE (ISNULL(WD.Sunday + WD.Monday + WD.Tuesday + WD.Wednesday + WD.Thursday + WD.Friday + WD.Saturday, 0) / WD.WorkDaysAmount)
END) AS AdjustmentKoeff
FROM Scenario sc
inner join ScenarioDetail sd on sd.ParentID = sc.Id
inner join Team t on t.PlannedCapacityScenarioId = sc.Id
left join VW_PlanningCapacityWorkingDays WD on WD.TeamId = t.Id and WD.WeekEndingDate = sd.WeekEndingDate
where WD.WeekEndingDate IS NOT NULL
GO