56 lines
2.3 KiB
MySQL
56 lines
2.3 KiB
MySQL
|
|
CREATE OR REPLACE PROCEDURE public."Hr_S_WorkCalendarAfterSave"(
|
|||
|
|
p_CalendarId uuid,
|
|||
|
|
p_ActorId uuid DEFAULT NULL
|
|||
|
|
)
|
|||
|
|
LANGUAGE plpgsql
|
|||
|
|
AS $$
|
|||
|
|
DECLARE
|
|||
|
|
v_TenantId uuid;
|
|||
|
|
v_StartDate date;
|
|||
|
|
v_EndDate date;
|
|||
|
|
v_Recurrence varchar(256);
|
|||
|
|
v_Shift integer;
|
|||
|
|
BEGIN
|
|||
|
|
-- Çalışma Takvimi satırı eklenince, değişince ya da silinince tatile denk gelen izin taleplerinin
|
|||
|
|
-- gün sayısı ve puantaj yeniden hesaplanır; aksi hâlde sonradan girilen bayram izinden düşmeye,
|
|||
|
|
-- puantajda çalışma günü görünmeye devam ederdi. Yıllık tekrarlı satırın bu yılki ve gelecek
|
|||
|
|
-- yılki karşılığı işlenir; kapalı puantaj ayı yazılmaz.
|
|||
|
|
SELECT "TenantId", "StartDate"::date, "EndDate"::date, "RecurrenceRule"
|
|||
|
|
INTO v_TenantId, v_StartDate, v_EndDate, v_Recurrence
|
|||
|
|
FROM public."Hr_T_WorkCalendar"
|
|||
|
|
WHERE "Id" = p_CalendarId;
|
|||
|
|
|
|||
|
|
IF v_StartDate IS NULL THEN
|
|||
|
|
RETURN;
|
|||
|
|
END IF;
|
|||
|
|
|
|||
|
|
IF v_Recurrence = 'FREQ=YEARLY' THEN
|
|||
|
|
v_Shift := EXTRACT(YEAR FROM LOCALTIMESTAMP)::integer - EXTRACT(YEAR FROM v_StartDate)::integer;
|
|||
|
|
IF v_Shift > 0 THEN
|
|||
|
|
v_StartDate := (v_StartDate + make_interval(years => v_Shift))::date;
|
|||
|
|
v_EndDate := (v_EndDate + make_interval(years => v_Shift + 1))::date;
|
|||
|
|
ELSE
|
|||
|
|
v_EndDate := (v_EndDate + INTERVAL '1 year')::date;
|
|||
|
|
END IF;
|
|||
|
|
END IF;
|
|||
|
|
|
|||
|
|
UPDATE public."Hr_T_LeaveRequest" r
|
|||
|
|
SET "Days" = CASE WHEN r."IsHalfDay" = TRUE AND n.Days > 0.5 THEN 0.5 ELSE n.Days END
|
|||
|
|
FROM (
|
|||
|
|
SELECT q."Id",
|
|||
|
|
CASE WHEN t."Code" = 'Sick'
|
|||
|
|
THEN public."Hr_F_LeaveWorkDays"(q."TenantId", q."StartDate"::date, q."EndDate"::date)
|
|||
|
|
ELSE public."Hr_F_LeaveNetDays"(q."TenantId", q."EmployeeId", q."StartDate"::date, q."EndDate"::date)
|
|||
|
|
END AS Days
|
|||
|
|
FROM public."Hr_T_LeaveRequest" q
|
|||
|
|
INNER JOIN public."Hr_T_LeaveType" t ON t."Id" = q."LeaveTypeId"
|
|||
|
|
WHERE q."IsDeleted" = FALSE
|
|||
|
|
AND (q."TenantId" = v_TenantId OR (q."TenantId" IS NULL AND v_TenantId IS NULL))
|
|||
|
|
AND q."StartDate"::date <= v_EndDate AND q."EndDate"::date >= v_StartDate
|
|||
|
|
) n
|
|||
|
|
WHERE n."Id" = r."Id";
|
|||
|
|
|
|||
|
|
CALL public."Hr_S_TimesheetCalculate"(v_TenantId, NULL, v_StartDate, v_EndDate, p_ActorId);
|
|||
|
|
END;
|
|||
|
|
$$;
|