sozsoft-platform/configs/seeds/sql/object/Prj_V_ManMonthGantt.sql
2026-10-14 22:26:03 +03:00

43 lines
2.1 KiB
Transact-SQL

CREATE OR ALTER VIEW [dbo].[Prj_V_ManMonthGantt]
AS
WITH base AS (
SELECT r.[TenantId], p.[BranchId], w.[ProjectId], r.[UserId], w.[Id] AS [WorkPackageId],
w.[Code], w.[Name], r.[Rate], DATEFROMPARTS(r.[Year], r.[Month], 1) AS [PeriodDate]
FROM [dbo].[Prj_T_WorkPackageMonthRate] r
INNER JOIN [dbo].[Prj_T_WorkPackage] w ON w.[Id] = r.[WorkPackageId] AND w.[IsDeleted] = 0
INNER JOIN [dbo].[Prj_T_Project] p ON p.[Id] = w.[ProjectId] AND p.[IsDeleted] = 0
WHERE r.[IsDeleted] = 0 AND r.[Rate] > 0
)
SELECT
CAST(CONCAT(CAST(b.[ProjectId] AS nvarchar(36)), '|', CAST(b.[UserId] AS nvarchar(36))) AS nvarchar(120)) AS [Id],
CAST(NULL AS nvarchar(120)) AS [ParentId],
b.[TenantId], b.[ProjectId], b.[UserId], CAST(NULL AS uniqueidentifier) AS [WorkPackageId],
CAST(0 AS bit) AS [IsDeleted], 1 AS [RowLevel],
CAST(COALESCE(MAX(u.[Name] + N' ' + u.[Surname]), MAX(u.[UserName])) AS nvarchar(256)) AS [Title],
MIN(b.[PeriodDate]) AS [StartDate],
EOMONTH(MAX(b.[PeriodDate])) AS [EndDate],
CAST(AVG(b.[Rate]) AS decimal(18, 4)) AS [Progress],
CAST(AVG(b.[Rate]) AS decimal(18, 4)) AS [AvgRate],
CAST(SUM(b.[Rate]) AS decimal(18, 4)) AS [TotalRate],
COUNT(DISTINCT b.[PeriodDate]) AS [MonthCount],
b.[BranchId]
FROM base b
LEFT JOIN [dbo].[AbpUsers] u ON u.[Id] = b.[UserId]
GROUP BY b.[TenantId], b.[BranchId], b.[ProjectId], b.[UserId]
UNION ALL
SELECT
CAST(CONCAT(CAST(b.[ProjectId] AS nvarchar(36)), '|', CAST(b.[UserId] AS nvarchar(36)), '|', CAST(b.[WorkPackageId] AS nvarchar(36))) AS nvarchar(120)),
CAST(CONCAT(CAST(b.[ProjectId] AS nvarchar(36)), '|', CAST(b.[UserId] AS nvarchar(36))) AS nvarchar(120)),
b.[TenantId], b.[ProjectId], b.[UserId], b.[WorkPackageId],
CAST(0 AS bit), 2,
CAST(MAX(b.[Code]) + N' ' + MAX(b.[Name]) AS nvarchar(256)),
MIN(b.[PeriodDate]),
EOMONTH(MAX(b.[PeriodDate])),
CAST(AVG(b.[Rate]) AS decimal(18, 4)),
CAST(AVG(b.[Rate]) AS decimal(18, 4)),
CAST(SUM(b.[Rate]) AS decimal(18, 4)),
COUNT(DISTINCT b.[PeriodDate]),
b.[BranchId]
FROM base b
GROUP BY b.[TenantId], b.[BranchId], b.[ProjectId], b.[UserId], b.[WorkPackageId]
GO