CREATE OR ALTER VIEW [dbo].[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, N' ', u.Surname) AS EmployeeName, u.DepartmentId, u.JobPositionId, CAST(COALESCE(u.SeniorityStartDate, u.HireDate) AS date) AS SeniorityStartDate, CASE WHEN COALESCE(u.SeniorityStartDate, u.HireDate) IS NULL THEN NULL ELSE DATEDIFF(year, COALESCE(u.SeniorityStartDate, u.HireDate), GETDATE()) - CASE WHEN DATEADD(year, DATEDIFF(year, COALESCE(u.SeniorityStartDate, u.HireDate), GETDATE()), COALESCE(u.SeniorityStartDate, u.HireDate)) > GETDATE() THEN 1 ELSE 0 END END AS ServiceYears, CAST(COALESCE(SUM(CASE WHEN l.YearNo > 0 THEN l.EntitledDays END), 0) AS decimal(9, 1)) AS EntitledDays, CAST(COALESCE(SUM(CASE WHEN l.YearNo = 0 THEN l.EntitledDays END), 0) AS decimal(9, 1)) AS AdjustmentDays, CAST(COALESCE(SUM(l.UsedDays), 0) AS decimal(9, 1)) AS UsedDays, CAST(COALESCE(SUM(l.PendingDays), 0) AS decimal(9, 1)) AS PendingDays, CAST(COALESCE(SUM(l.EntitledDays - l.UsedDays), 0) AS decimal(9, 1)) AS RemainingDays, CAST(COALESCE(SUM(l.EntitledDays - l.UsedDays - l.PendingDays), 0) AS decimal(9, 1)) AS AvailableDays, MAX(l.NextAccrualDate) AS NextAccrualDate, MAX(l.NextAccrualDays) AS NextAccrualDays, u.IsActive FROM AbpUsers u LEFT JOIN Hr_V_LeaveBalanceYear l ON l.EmployeeId = u.Id WHERE u.IsDeleted = 0 GROUP BY u.Id, u.TenantId, u.Name, u.Surname, u.DepartmentId, u.JobPositionId, u.SeniorityStartDate, u.HireDate, u.IsActive GO