27 lines
1.1 KiB
MySQL
27 lines
1.1 KiB
MySQL
|
|
CREATE OR REPLACE PROCEDURE public."Hr_S_LeaveDaysRefresh"(
|
|||
|
|
p_TenantId uuid,
|
|||
|
|
p_EmployeeId uuid
|
|||
|
|
)
|
|||
|
|
LANGUAGE plpgsql
|
|||
|
|
AS $$
|
|||
|
|
BEGIN
|
|||
|
|
-- Rapor eklenince, tarihi değişince ya da silinince çalışanın diğer izin taleplerinin gün sayısı
|
|||
|
|
-- yeniden hesaplanır (Hr_F_LeaveNetDays): rapora denk gelen yıllık izin günü bakiyeye geri döner.
|
|||
|
|
-- Rapor türündeki talep kendi günlerini sayar; onun gün sayısına dokunulmaz.
|
|||
|
|
UPDATE public."Hr_T_LeaveRequest" AS r
|
|||
|
|
SET "Days" = s."NewDays"
|
|||
|
|
FROM (
|
|||
|
|
SELECT x."Id",
|
|||
|
|
CASE WHEN x."IsHalfDay" = TRUE AND n."Days" > 0.5 THEN 0.5 ELSE n."Days" END AS "NewDays"
|
|||
|
|
FROM public."Hr_T_LeaveRequest" x
|
|||
|
|
INNER JOIN public."Hr_T_LeaveType" t ON t."Id" = x."LeaveTypeId"
|
|||
|
|
CROSS JOIN LATERAL (
|
|||
|
|
SELECT public."Hr_F_LeaveNetDays"(p_TenantId, x."EmployeeId", x."StartDate"::date, x."EndDate"::date) AS "Days"
|
|||
|
|
) n
|
|||
|
|
WHERE x."EmployeeId" = p_EmployeeId AND x."IsDeleted" = FALSE AND t."Code" <> 'Sick'
|
|||
|
|
) s
|
|||
|
|
WHERE r."Id" = s."Id"
|
|||
|
|
AND r."Days" <> s."NewDays";
|
|||
|
|
END
|
|||
|
|
$$;
|