sozsoft-platform/configs/seeds/sql/object/Hr_S_LeaveRequestGuard.sql

58 lines
2.3 KiB
MySQL
Raw Normal View History

2026-10-04 19:17:16 +00:00
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
2026-10-04 21:18:13 +00:00
-- 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
2026-10-04 19:17:16 +00:00
RETURN;
2026-10-04 21:18:13 +00:00
DECLARE @EmployeeId uniqueidentifier, @Status nvarchar(50), @ManagerIds nvarchar(1024),
@TenantId uniqueidentifier, @StartDate date, @EndDate date;
2026-10-04 19:17:16 +00:00
2026-10-04 21:18:13 +00:00
SELECT @EmployeeId = EmployeeId, @Status = ApprovalStatus, @ManagerIds = ManagerIds,
@TenantId = TenantId, @StartDate = CAST(StartDate AS date), @EndDate = CAST(EndDate AS date)
2026-10-04 19:17:16 +00:00
FROM Hr_T_LeaveRequest
WHERE Id = @RequestId AND IsDeleted = 0;
IF @EmployeeId IS NULL
RETURN;
2026-10-04 21:18:13 +00:00
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;
2026-10-04 19:17:16 +00:00
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