48 lines
1.7 KiB
Transact-SQL
48 lines
1.7 KiB
Transact-SQL
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
|