sozsoft-platform/configs/seeds/host/sql/object/Hr_V_AttendanceShift.sql

33 lines
2.3 KiB
MySQL
Raw Normal View History

2026-10-04 21:18:13 +00:00
CREATE OR ALTER VIEW [dbo].[Hr_V_AttendanceShift]
AS
-- Çalışanın puantajda kullanılan vardiyası (dakika cinsinden). Kullanıcı kartında vardiya yoksa ya da
-- vardiyanın alanı boşsa Ayarlar › İnsan Kaynakları › Puantaj'daki varsayılan geçerlidir.
-- DayOffset: hareketin hangi iş gününe yazılacağı. Vardiya bitişi ile bir sonraki başlangıç arasındaki
-- boşluğun ortası gün sınırıdır; gece vardiyasındaki 23:50 okutması vardiyanın başladığı ertesi günün
-- hareketidir. İş günü = CAST(DATEADD(minute, -DayOffset, Zaman) AS date).
SELECT x.EmployeeId, x.TenantId, x.ShiftId, x.StartMin, x.EndMin, x.BreakMin, x.LateTol, x.EarlyTol,
x.StartMin - ((x.StartMin - ((x.EndMin + ((x.StartMin - x.EndMin + 1440) % 1440) / 2) % 1440) + 1440) % 1440) AS DayOffset
FROM AbpUsers u
LEFT JOIN Hr_T_Shift s ON s.Id = u.ShiftId AND s.IsDeleted = 0
CROSS APPLY (
SELECT TRY_CONVERT(time, s.StartTime) AS ShiftStart,
TRY_CONVERT(time, s.EndTime) AS ShiftEnd,
TRY_CONVERT(time, dbo.Hr_F_HrSetting(u.TenantId, N'App.HrSettings.Attendance.DefaultShiftStart')) AS DefaultStart,
TRY_CONVERT(time, dbo.Hr_F_HrSetting(u.TenantId, N'App.HrSettings.Attendance.DefaultShiftEnd')) AS DefaultEnd
) t
CROSS APPLY (
SELECT u.Id AS EmployeeId, u.TenantId, s.Id AS ShiftId,
COALESCE(DATEPART(hour, t.ShiftStart) * 60 + DATEPART(minute, t.ShiftStart),
DATEPART(hour, t.DefaultStart) * 60 + DATEPART(minute, t.DefaultStart), 480) AS StartMin,
COALESCE(DATEPART(hour, t.ShiftEnd) * 60 + DATEPART(minute, t.ShiftEnd),
DATEPART(hour, t.DefaultEnd) * 60 + DATEPART(minute, t.DefaultEnd), 1080) AS EndMin,
COALESCE(s.BreakMinutes,
TRY_CONVERT(int, dbo.Hr_F_HrSetting(u.TenantId, N'App.HrSettings.Attendance.DefaultBreakMinutes')), 60) AS BreakMin,
COALESCE(s.LateToleranceMinutes,
TRY_CONVERT(int, dbo.Hr_F_HrSetting(u.TenantId, N'App.HrSettings.Attendance.LateToleranceMinutes')), 10) AS LateTol,
COALESCE(s.EarlyLeaveToleranceMinutes,
TRY_CONVERT(int, dbo.Hr_F_HrSetting(u.TenantId, N'App.HrSettings.Attendance.EarlyLeaveToleranceMinutes')), 10) AS EarlyTol
) x
WHERE u.IsDeleted = 0;
GO