54 lines
2.6 KiB
MySQL
54 lines
2.6 KiB
MySQL
|
|
CREATE OR ALTER PROCEDURE [dbo].[Hr_S_PerformanceGuard]
|
|||
|
|
@ReviewId uniqueidentifier,
|
|||
|
|
@UserId uniqueidentifier,
|
|||
|
|
@Actor nvarchar(16),
|
|||
|
|
@Scope nvarchar(16),
|
|||
|
|
@FeedbackId uniqueidentifier = NULL
|
|||
|
|
AS
|
|||
|
|
BEGIN
|
|||
|
|
SET NOCOUNT ON;
|
|||
|
|
|
|||
|
|
-- Kişisel ekranlar (Değerlendirmelerim, Ekibim, 360 Taleplerim) satırı listede süzer; bu kontrol
|
|||
|
|
-- aynı kuralı yazma tarafında uygular. Kayıt uçları satırı yalnızca Id ile güncellediği için
|
|||
|
|
-- başka birinin kaydına doğrudan yapılan istek burada reddedilir.
|
|||
|
|
IF @Actor = N'Hr'
|
|||
|
|
RETURN;
|
|||
|
|
|
|||
|
|
DECLARE @Status nvarchar(16), @EmployeeId uniqueidentifier, @ManagerId uniqueidentifier, @PeriodStatus nvarchar(16);
|
|||
|
|
|
|||
|
|
SELECT @Status = rv.Status, @EmployeeId = rv.EmployeeId, @ManagerId = rv.ManagerId, @PeriodStatus = p.Status
|
|||
|
|
FROM Hr_T_PerformanceReview rv
|
|||
|
|
INNER JOIN Hr_T_PerformancePeriod p ON p.Id = rv.PeriodId
|
|||
|
|
WHERE rv.Id = @ReviewId AND rv.IsDeleted = 0;
|
|||
|
|
|
|||
|
|
IF @Status IS NULL
|
|||
|
|
THROW 51000, N'Değerlendirme kaydı bulunamadı.', 1;
|
|||
|
|
|
|||
|
|
IF @PeriodStatus = N'Closed'
|
|||
|
|
THROW 51001, N'Dönem kapatıldığı için değerlendirme değiştirilemez.', 1;
|
|||
|
|
|
|||
|
|
IF @Actor = N'Employee' AND (@UserId IS NULL OR @UserId <> @EmployeeId)
|
|||
|
|
THROW 51002, N'Yalnızca kendi değerlendirmenizi değiştirebilirsiniz.', 1;
|
|||
|
|
|
|||
|
|
IF @Actor = N'Manager' AND (@UserId IS NULL OR @ManagerId IS NULL OR @UserId <> @ManagerId)
|
|||
|
|
THROW 51003, N'Yalnızca yöneticisi olduğunuz değerlendirmeleri değiştirebilirsiniz.', 1;
|
|||
|
|
|
|||
|
|
IF @Actor = N'Reviewer' AND NOT EXISTS (
|
|||
|
|
SELECT 1 FROM Hr_T_PerformanceFeedback f
|
|||
|
|
WHERE f.Id = @FeedbackId AND f.ReviewId = @ReviewId AND f.ReviewerId = @UserId AND f.IsDeleted = 0)
|
|||
|
|
THROW 51004, N'Yalnızca size atanan 360 değerlendirmesini doldurabilirsiniz.', 1;
|
|||
|
|
|
|||
|
|
-- Durum matrisi: hangi rol hangi aşamada neyi değiştirebilir.
|
|||
|
|
DECLARE @Allowed bit = CASE
|
|||
|
|
WHEN @Scope = N'DevelopmentPlan' THEN 1
|
|||
|
|
WHEN @Actor = N'Employee' AND @Scope = N'Review' THEN IIF(@Status IN (N'GoalSetting', N'SelfReview'), 1, 0)
|
|||
|
|
WHEN @Actor = N'Employee' AND @Scope IN (N'Goal', N'Competency') THEN IIF(@Status IN (N'GoalSetting', N'SelfReview'), 1, 0)
|
|||
|
|
WHEN @Actor = N'Manager' AND @Scope IN (N'Review', N'Goal', N'Competency') THEN IIF(@Status IN (N'GoalSetting', N'SelfReview', N'ManagerReview'), 1, 0)
|
|||
|
|
WHEN @Actor = N'Reviewer' THEN IIF(@Status IN (N'GoalSetting', N'SelfReview', N'ManagerReview'), 1, 0)
|
|||
|
|
ELSE 0
|
|||
|
|
END;
|
|||
|
|
|
|||
|
|
IF @Allowed = 0
|
|||
|
|
THROW 51005, N'Değerlendirme bu aşamada bu işlem için açık değil.', 1;
|
|||
|
|
END
|
|||
|
|
GO
|