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. IF @RequestId IS NULL OR @Actor = N'Hr' RETURN; DECLARE @EmployeeId uniqueidentifier, @Status nvarchar(50), @ManagerIds nvarchar(1024); SELECT @EmployeeId = EmployeeId, @Status = ApprovalStatus, @ManagerIds = ManagerIds FROM Hr_T_LeaveRequest WHERE Id = @RequestId AND IsDeleted = 0; IF @EmployeeId IS NULL 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