CREATE OR REPLACE VIEW public."Hr_V_LeaveSummary" AS -- Çalışan başına yıllık izin bakiyesi; defterin (Hr_V_LeaveBalanceYear) toplamıdır. -- Kalan = hak edilen + düzeltme − onaylı kullanılan; Kullanılabilir = kalan − onay bekleyen. SELECT u."Id", u."TenantId", u."Id" AS "EmployeeId", CONCAT(u."Name", ' ', u."Surname")::varchar(129) AS "EmployeeName", u."DepartmentId", u."JobPositionId", COALESCE(u."SeniorityStartDate", u."HireDate")::date AS "SeniorityStartDate", CASE WHEN COALESCE(u."SeniorityStartDate", u."HireDate") IS NULL THEN NULL ELSE (EXTRACT(YEAR FROM LOCALTIMESTAMP) - EXTRACT(YEAR FROM COALESCE(u."SeniorityStartDate", u."HireDate")))::int - CASE WHEN COALESCE(u."SeniorityStartDate", u."HireDate") + make_interval(years => (EXTRACT(YEAR FROM LOCALTIMESTAMP) - EXTRACT(YEAR FROM COALESCE(u."SeniorityStartDate", u."HireDate")))::int) > LOCALTIMESTAMP THEN 1 ELSE 0 END END AS "ServiceYears", COALESCE(SUM(CASE WHEN l."YearNo" > 0 THEN l."EntitledDays" END), 0)::numeric(9, 1) AS "EntitledDays", COALESCE(SUM(CASE WHEN l."YearNo" = 0 THEN l."EntitledDays" END), 0)::numeric(9, 1) AS "AdjustmentDays", COALESCE(SUM(l."UsedDays"), 0)::numeric(9, 1) AS "UsedDays", COALESCE(SUM(l."PendingDays"), 0)::numeric(9, 1) AS "PendingDays", COALESCE(SUM(l."EntitledDays" - l."UsedDays"), 0)::numeric(9, 1) AS "RemainingDays", COALESCE(SUM(l."EntitledDays" - l."UsedDays" - l."PendingDays"), 0)::numeric(9, 1) AS "AvailableDays", MAX(l."NextAccrualDate") AS "NextAccrualDate", MAX(l."NextAccrualDays")::numeric(5, 1) AS "NextAccrualDays", u."IsActive" FROM "AbpUsers" u LEFT JOIN public."Hr_V_LeaveBalanceYear" l ON l."EmployeeId" = u."Id" WHERE u."IsDeleted" = FALSE GROUP BY u."Id", u."TenantId", u."Name", u."Surname", u."DepartmentId", u."JobPositionId", u."SeniorityStartDate", u."HireDate", u."IsActive";