CREATE OR ALTER PROCEDURE [dbo].[Hr_S_LeaveRequestGuard] @RequestId uniqueidentifier, @ActorId uniqueidentifier, @Actor nvarchar(16), @Operation nvarchar(16) AS BEGIN SET NOCOUNT ON; -- Persona ekranları satırı DefaultFilter ile süzer; kayıt uçları satırı yalnızca Id ile -- güncellediği için sahiplik ve aşama kuralı yazma tarafında burada uygulanır. Kayıttan önce -- çalıştığı için talebin eski tarihleri de burada kapalı puantaj dönemine karşı denetlenir. IF @RequestId IS NULL RETURN; DECLARE @EmployeeId uniqueidentifier, @Status nvarchar(50), @ManagerIds nvarchar(1024), @TenantId uniqueidentifier, @StartDate date, @EndDate date; SELECT @EmployeeId = EmployeeId, @Status = ApprovalStatus, @ManagerIds = ManagerIds, @TenantId = TenantId, @StartDate = CAST(StartDate AS date), @EndDate = CAST(EndDate AS date) FROM Hr_T_LeaveRequest WHERE Id = @RequestId AND IsDeleted = 0; IF @EmployeeId IS NULL RETURN; IF dbo.Hr_F_TimesheetPeriodClosed(@TenantId, @StartDate, @EndDate) = 1 THROW 51118, N'İzin tarihleri kapalı bir puantaj dönemine düşüyor. Önce İnsan Kaynakları dönemi açmalıdır.', 1; IF @Actor = N'Hr' RETURN; IF @Actor = N'Employee' BEGIN IF @EmployeeId <> @ActorId THROW 51100, N'Bu izin talebi size ait değil.', 1; -- Karar verilmiş talep çalışan tarafından değiştirilemez; iptal için İK'ya başvurulur. IF @Status IS NOT NULL AND @Status NOT IN (N'Onaya Gönderildi', N'Müdür Onayı') THROW 51101, N'Onay sürecinde ilerlemiş ya da sonuçlanmış izin talebi değiştirilemez veya silinemez. İptal için İnsan Kaynakları ile görüşün.', 1; RETURN; END IF @Actor = N'Manager' BEGIN IF @Operation = N'Delete' THROW 51102, N'Yönetici izin talebini silemez.', 1; IF @ActorId IS NULL OR N'|' + COALESCE(@ManagerIds, N'') + N'|' NOT LIKE N'%|' + CONVERT(nvarchar(36), @ActorId) + N'|%' THROW 51103, N'Bu izin talebinin onaycısı değilsiniz.', 1; IF @Status IS NULL OR @Status <> N'Müdür Onayı' THROW 51104, N'İzin talebi müdür onayında beklemiyor.', 1; END END GO