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