sozsoft-platform/configs/seeds/host/sql/object/Hr_S_LeaveRequestGuard.sql
2026-10-04 22:17:16 +03:00

48 lines
1.7 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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