51 lines
2 KiB
MySQL
51 lines
2 KiB
MySQL
|
|
CREATE OR ALTER PROCEDURE [dbo].[Hr_S_WorkCalendarAfterSave]
|
|||
|
|
@CalendarId uniqueidentifier,
|
|||
|
|
@ActorId uniqueidentifier = NULL
|
|||
|
|
AS
|
|||
|
|
BEGIN
|
|||
|
|
SET NOCOUNT ON;
|
|||
|
|
|
|||
|
|
-- Ç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.
|
|||
|
|
DECLARE @TenantId uniqueidentifier, @StartDate date, @EndDate date, @Recurrence nvarchar(256);
|
|||
|
|
|
|||
|
|
SELECT @TenantId = TenantId, @StartDate = CAST(StartDate AS date), @EndDate = CAST(EndDate AS date),
|
|||
|
|
@Recurrence = RecurrenceRule
|
|||
|
|
FROM Hr_T_WorkCalendar
|
|||
|
|
WHERE Id = @CalendarId;
|
|||
|
|
|
|||
|
|
IF @StartDate IS NULL
|
|||
|
|
RETURN;
|
|||
|
|
|
|||
|
|
IF @Recurrence = N'FREQ=YEARLY'
|
|||
|
|
BEGIN
|
|||
|
|
DECLARE @Shift int = YEAR(GETDATE()) - YEAR(@StartDate);
|
|||
|
|
IF @Shift > 0
|
|||
|
|
BEGIN
|
|||
|
|
SET @StartDate = DATEADD(year, @Shift, @StartDate);
|
|||
|
|
SET @EndDate = DATEADD(year, @Shift + 1, @EndDate);
|
|||
|
|
END
|
|||
|
|
ELSE
|
|||
|
|
SET @EndDate = DATEADD(year, 1, @EndDate);
|
|||
|
|
END
|
|||
|
|
|
|||
|
|
UPDATE r
|
|||
|
|
SET Days = CASE WHEN r.IsHalfDay = 1 AND n.Days > 0.5 THEN 0.5 ELSE n.Days END
|
|||
|
|
FROM Hr_T_LeaveRequest r
|
|||
|
|
INNER JOIN Hr_T_LeaveType t ON t.Id = r.LeaveTypeId
|
|||
|
|
CROSS APPLY (
|
|||
|
|
SELECT CASE WHEN t.Code = N'Sick'
|
|||
|
|
THEN dbo.Hr_F_LeaveWorkDays(r.TenantId, CAST(r.StartDate AS date), CAST(r.EndDate AS date))
|
|||
|
|
ELSE dbo.Hr_F_LeaveNetDays(r.TenantId, r.EmployeeId, CAST(r.StartDate AS date), CAST(r.EndDate AS date))
|
|||
|
|
END AS Days
|
|||
|
|
) n
|
|||
|
|
WHERE r.IsDeleted = 0
|
|||
|
|
AND (r.TenantId = @TenantId OR (r.TenantId IS NULL AND @TenantId IS NULL))
|
|||
|
|
AND CAST(r.StartDate AS date) <= @EndDate AND CAST(r.EndDate AS date) >= @StartDate;
|
|||
|
|
|
|||
|
|
EXEC dbo.Hr_S_TimesheetCalculate @TenantId, NULL, @StartDate, @EndDate, @ActorId;
|
|||
|
|
END
|
|||
|
|
GO
|