33 lines
1.2 KiB
MySQL
33 lines
1.2 KiB
MySQL
|
|
CREATE OR ALTER FUNCTION [dbo].[Hr_F_LeaveNetDays]
|
|||
|
|
(
|
|||
|
|
@TenantId uniqueidentifier,
|
|||
|
|
@EmployeeId uniqueidentifier,
|
|||
|
|
@StartDate date,
|
|||
|
|
@EndDate date
|
|||
|
|
)
|
|||
|
|
RETURNS decimal(9, 1)
|
|||
|
|
AS
|
|||
|
|
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 @StartDate IS NULL OR @EndDate IS NULL OR @EndDate < @StartDate
|
|||
|
|
RETURN 0;
|
|||
|
|
|
|||
|
|
DECLARE @Total decimal(9, 1) = dbo.Hr_F_LeaveWorkDays(@TenantId, @StartDate, @EndDate);
|
|||
|
|
DECLARE @Day date = @StartDate;
|
|||
|
|
|
|||
|
|
WHILE @Day <= @EndDate AND @Total > 0
|
|||
|
|
BEGIN
|
|||
|
|
IF EXISTS (SELECT 1 FROM Adm_T_UserSickLeave s
|
|||
|
|
WHERE s.UserId = @EmployeeId AND s.IsDeleted = 0
|
|||
|
|
AND @Day BETWEEN CAST(s.StartDate AS date) AND CAST(s.EndDate AS date))
|
|||
|
|
SET @Total -= dbo.Hr_F_LeaveWorkDays(@TenantId, @Day, @Day);
|
|||
|
|
|
|||
|
|
SET @Day = DATEADD(day, 1, @Day);
|
|||
|
|
END
|
|||
|
|
|
|||
|
|
RETURN CASE WHEN @Total < 0 THEN 0 ELSE @Total END;
|
|||
|
|
END
|
|||
|
|
GO
|