CREATE OR ALTER PROCEDURE [dbo].[Hr_S_LeaveSickLeaveSync] @SickLeaveId uniqueidentifier, @ActorId uniqueidentifier = NULL AS BEGIN SET NOCOUNT ON; -- Sağlık Kartı › İstirahatler'den (ya da kullanıcı detayındaki istirahat listesinden) girilen -- rapor, İzin Yönetimi'nde onaylanmış "Sick" türünde talep olarak görünür (tek kayıt). Talep -- tarafı istirahati kendisi yazar; bu prosedür yalnızca istirahat ekranından gelen değişikliği taşır. IF @SickLeaveId IS NULL RETURN; DECLARE @TenantId uniqueidentifier, @UserId uniqueidentifier, @StartDate date, @EndDate date, @Reason nvarchar(1024), @IsDeleted bit; SELECT @TenantId = TenantId, @UserId = UserId, @StartDate = CAST(StartDate AS date), @EndDate = CAST(EndDate AS date), @Reason = SickLeaveReason, @IsDeleted = IsDeleted FROM Adm_T_UserSickLeave WHERE Id = @SickLeaveId; IF @UserId IS NULL RETURN; DECLARE @RequestId uniqueidentifier = (SELECT TOP 1 Id FROM Hr_T_LeaveRequest WHERE SickLeaveId = @SickLeaveId ORDER BY IsDeleted, CreationTime); IF @IsDeleted = 1 BEGIN UPDATE Hr_T_LeaveRequest SET IsDeleted = 1, DeletionTime = GETUTCDATE(), DeleterId = @ActorId WHERE SickLeaveId = @SickLeaveId AND IsDeleted = 0; RETURN; END DECLARE @Days decimal(9, 1) = dbo.Hr_F_LeaveWorkDays(@TenantId, @StartDate, @EndDate); IF @RequestId IS NOT NULL BEGIN UPDATE Hr_T_LeaveRequest SET StartDate = @StartDate, EndDate = @EndDate, Days = @Days, IsDeleted = 0, DeletionTime = NULL, DeleterId = NULL, LastModificationTime = GETUTCDATE(), LastModifierId = @ActorId WHERE Id = @RequestId; RETURN; END -- Kiracıda rapor türü tanımlı değilse eşlenecek talep yoktur. DECLARE @LeaveTypeId uniqueidentifier = (SELECT TOP 1 Id FROM Hr_T_LeaveType WHERE Code = N'Sick' AND IsDeleted = 0 AND (TenantId = @TenantId OR (TenantId IS NULL AND @TenantId IS NULL))); IF @LeaveTypeId IS NULL RETURN; DECLARE @ActorName nvarchar(256) = (SELECT UserName FROM AbpUsers WHERE Id = @ActorId); DECLARE @Year nvarchar(4) = CAST(YEAR(GETUTCDATE()) AS nvarchar(4)); -- İstirahat sağlık birimince girilmiş bir belgedir; onay akışına girmeden onaylı yazılır. INSERT INTO Hr_T_LeaveRequest (Id, TenantId, RequestNo, EmployeeId, EmployeeName, DepartmentId, JobPositionId, LeaveTypeId, StartDate, EndDate, IsHalfDay, Days, [Description], SickLeaveId, ApprovalStatus, ApprovalUser, ApprovalDate, LastNotifiedStatus, IsActive, CreationTime, CreatorId, IsDeleted) SELECT NEWID(), @TenantId, N'IZN-' + @Year + N'-' + RIGHT(N'00000' + CAST( (SELECT COALESCE(MAX(TRY_CAST(RIGHT(x.RequestNo, 5) AS int)), 0) + 1 FROM Hr_T_LeaveRequest x WHERE (x.TenantId = @TenantId OR (x.TenantId IS NULL AND @TenantId IS NULL)) AND x.RequestNo LIKE N'IZN-' + @Year + N'-%') AS nvarchar(10)), 5), u.Id, CONCAT(u.Name, N' ', u.Surname), u.DepartmentId, u.JobPositionId, @LeaveTypeId, @StartDate, @EndDate, 0, @Days, LEFT(@Reason, 1024), @SickLeaveId, N'Onaylandı', @ActorName, GETUTCDATE(), N'Onaylandı', 1, GETUTCDATE(), @ActorId, 0 FROM AbpUsers u WHERE u.Id = @UserId; END GO