sozsoft-platform/configs/seeds/postgres/object/Hr_V_AttendanceShift.sql
2026-10-06 14:24:30 +03:00

39 lines
3.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CREATE OR REPLACE VIEW public."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ü = ("Zaman" - "DayOffset" * INTERVAL '1 minute')::date.
-- Geçersiz metin (TRY_CONVERT karşılığı) pg_input_is_valid ile NULL'a düşer.
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" = FALSE
CROSS JOIN LATERAL (
SELECT public."Hr_F_HrSetting"(u."TenantId", 'App.HrSettings.Attendance.DefaultShiftStart') AS DefaultStartText,
public."Hr_F_HrSetting"(u."TenantId", 'App.HrSettings.Attendance.DefaultShiftEnd') AS DefaultEndText
) h
CROSS JOIN LATERAL (
SELECT CASE WHEN pg_input_is_valid(s."StartTime", 'time') THEN s."StartTime"::time END AS ShiftStart,
CASE WHEN pg_input_is_valid(s."EndTime", 'time') THEN s."EndTime"::time END AS ShiftEnd,
CASE WHEN pg_input_is_valid(h.DefaultStartText, 'time') THEN h.DefaultStartText::time END AS DefaultStart,
CASE WHEN pg_input_is_valid(h.DefaultEndText, 'time') THEN h.DefaultEndText::time END AS DefaultEnd
) t
CROSS JOIN LATERAL (
SELECT u."Id" AS "EmployeeId", u."TenantId", s."Id" AS "ShiftId",
COALESCE(EXTRACT(HOUR FROM t.ShiftStart)::int * 60 + EXTRACT(MINUTE FROM t.ShiftStart)::int,
EXTRACT(HOUR FROM t.DefaultStart)::int * 60 + EXTRACT(MINUTE FROM t.DefaultStart)::int, 480) AS "StartMin",
COALESCE(EXTRACT(HOUR FROM t.ShiftEnd)::int * 60 + EXTRACT(MINUTE FROM t.ShiftEnd)::int,
EXTRACT(HOUR FROM t.DefaultEnd)::int * 60 + EXTRACT(MINUTE FROM t.DefaultEnd)::int, 1080) AS "EndMin",
COALESCE(s."BreakMinutes",
(SELECT CASE WHEN pg_input_is_valid(z.v, 'integer') THEN z.v::int END
FROM (SELECT public."Hr_F_HrSetting"(u."TenantId", 'App.HrSettings.Attendance.DefaultBreakMinutes') AS v) z), 60) AS "BreakMin",
COALESCE(s."LateToleranceMinutes",
(SELECT CASE WHEN pg_input_is_valid(z.v, 'integer') THEN z.v::int END
FROM (SELECT public."Hr_F_HrSetting"(u."TenantId", 'App.HrSettings.Attendance.LateToleranceMinutes') AS v) z), 10) AS "LateTol",
COALESCE(s."EarlyLeaveToleranceMinutes",
(SELECT CASE WHEN pg_input_is_valid(z.v, 'integer') THEN z.v::int END
FROM (SELECT public."Hr_F_HrSetting"(u."TenantId", 'App.HrSettings.Attendance.EarlyLeaveToleranceMinutes') AS v) z), 10) AS "EarlyTol"
) x
WHERE u."IsDeleted" = FALSE;