2026-10-08 10:51:14 +00:00
|
|
|
CREATE OR REPLACE VIEW public."Prj_V_ManMonthGantt"
|
|
|
|
|
AS
|
|
|
|
|
WITH base AS (
|
2026-10-14 19:26:03 +00:00
|
|
|
SELECT r."TenantId", p."BranchId", w."ProjectId", r."UserId", w."Id" AS "WorkPackageId",
|
2026-10-08 10:51:14 +00:00
|
|
|
w."Code", w."Name", r."Rate", make_date(r."Year", r."Month", 1) AS "PeriodDate"
|
|
|
|
|
FROM public."Prj_T_WorkPackageMonthRate" r
|
|
|
|
|
INNER JOIN public."Prj_T_WorkPackage" w ON w."Id" = r."WorkPackageId" AND w."IsDeleted" = FALSE
|
|
|
|
|
INNER JOIN public."Prj_T_Project" p ON p."Id" = w."ProjectId" AND p."IsDeleted" = FALSE
|
|
|
|
|
WHERE r."IsDeleted" = FALSE AND r."Rate" > 0
|
|
|
|
|
)
|
|
|
|
|
SELECT
|
|
|
|
|
(b."ProjectId"::text || '|' || b."UserId"::text)::varchar(120) AS "Id",
|
|
|
|
|
NULL::varchar(120) AS "ParentId",
|
|
|
|
|
b."TenantId", b."ProjectId", b."UserId", NULL::uuid AS "WorkPackageId",
|
|
|
|
|
FALSE AS "IsDeleted", 1 AS "RowLevel",
|
|
|
|
|
COALESCE(MAX(u."Name" || ' ' || u."Surname"), MAX(u."UserName"))::varchar(256) AS "Title",
|
|
|
|
|
MIN(b."PeriodDate") AS "StartDate",
|
|
|
|
|
(MAX(b."PeriodDate") + INTERVAL '1 month' - INTERVAL '1 day')::date AS "EndDate",
|
|
|
|
|
AVG(b."Rate")::numeric(18,4) AS "Progress",
|
|
|
|
|
AVG(b."Rate")::numeric(18,4) AS "AvgRate",
|
|
|
|
|
SUM(b."Rate")::numeric(18,4) AS "TotalRate",
|
2026-10-14 19:26:03 +00:00
|
|
|
COUNT(DISTINCT b."PeriodDate")::integer AS "MonthCount",
|
|
|
|
|
b."BranchId"
|
2026-10-08 10:51:14 +00:00
|
|
|
FROM base b
|
|
|
|
|
LEFT JOIN public."AbpUsers" u ON u."Id" = b."UserId"
|
2026-10-14 19:26:03 +00:00
|
|
|
GROUP BY b."TenantId", b."BranchId", b."ProjectId", b."UserId"
|
2026-10-08 10:51:14 +00:00
|
|
|
UNION ALL
|
|
|
|
|
SELECT
|
|
|
|
|
(b."ProjectId"::text || '|' || b."UserId"::text || '|' || b."WorkPackageId"::text)::varchar(120),
|
|
|
|
|
(b."ProjectId"::text || '|' || b."UserId"::text)::varchar(120),
|
|
|
|
|
b."TenantId", b."ProjectId", b."UserId", b."WorkPackageId",
|
|
|
|
|
FALSE, 2,
|
|
|
|
|
(MAX(b."Code") || ' ' || MAX(b."Name"))::varchar(256),
|
|
|
|
|
MIN(b."PeriodDate"),
|
|
|
|
|
(MAX(b."PeriodDate") + INTERVAL '1 month' - INTERVAL '1 day')::date,
|
|
|
|
|
AVG(b."Rate")::numeric(18,4),
|
|
|
|
|
AVG(b."Rate")::numeric(18,4),
|
|
|
|
|
SUM(b."Rate")::numeric(18,4),
|
2026-10-14 19:26:03 +00:00
|
|
|
COUNT(DISTINCT b."PeriodDate")::integer,
|
|
|
|
|
b."BranchId"
|
2026-10-08 10:51:14 +00:00
|
|
|
FROM base b
|
2026-10-14 19:26:03 +00:00
|
|
|
GROUP BY b."TenantId", b."BranchId", b."ProjectId", b."UserId", b."WorkPackageId";
|