sozsoft-platform/configs/seeds/sql/object/Hr_S_LeaveRequestGuard.sql
2026-10-05 15:58:59 +03:00

57 lines
2.3 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. 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