CREATE OR REPLACE FUNCTION public."Hr_F_LeaveNetDays" ( p_TenantId uuid, p_EmployeeId uuid, p_StartDate date, p_EndDate date ) RETURNS numeric(9, 1) LANGUAGE plpgsql STABLE AS $$ DECLARE v_Total numeric(9, 1); v_Day date := p_StartDate; BEGIN -- İzin talebinin düştüğü gün sayısı: çalışma günleri (Hr_F_LeaveWorkDays) eksi çalışanın -- rapor (istirahat) kapsamındaki günleri. İzin sırasında alınan raporun günleri izinden sayılmaz; -- puantajda da o günler Raporlu'dur, bakiye ile puantaj aynı günü iki kez kullanmaz. IF p_StartDate IS NULL OR p_EndDate IS NULL OR p_EndDate < p_StartDate THEN RETURN 0; END IF; v_Total := public."Hr_F_LeaveWorkDays"(p_TenantId, p_StartDate, p_EndDate); WHILE v_Day <= p_EndDate AND v_Total > 0 LOOP IF EXISTS (SELECT 1 FROM "Adm_T_UserSickLeave" s WHERE s."UserId" = p_EmployeeId AND s."IsDeleted" = FALSE AND v_Day BETWEEN s."StartDate"::date AND s."EndDate"::date) THEN v_Total := v_Total - public."Hr_F_LeaveWorkDays"(p_TenantId, v_Day, v_Day); END IF; v_Day := v_Day + 1; END LOOP; RETURN CASE WHEN v_Total < 0 THEN 0 ELSE v_Total END; END; $$;