CREATE OR ALTER PROCEDURE [dbo].[Hr_S_PerformancePeriodActivate] @PeriodId uniqueidentifier, @ActorId uniqueidentifier = NULL AS BEGIN SET NOCOUNT ON; DECLARE @TenantId uniqueidentifier; SELECT @TenantId = TenantId FROM Hr_T_PerformancePeriod WHERE Id = @PeriodId AND IsDeleted = 0 AND Status = N'Active'; IF @@ROWCOUNT = 0 RETURN; DECLARE @Created TABLE (Id uniqueidentifier, EmployeeId uniqueidentifier); -- Dönem aktif olduğunda kiracının aktif her kullanıcısına bir değerlendirme açılır; var olana -- dokunulmaz, böylece dönem yeniden kaydedildiğinde yalnızca yeni katılan çalışanlar eklenir. INSERT INTO Hr_T_PerformanceReview (Id, TenantId, PeriodId, EmployeeId, EmployeeName, DepartmentId, JobPositionId, Status, LastStatus, IsActive, CreationTime, CreatorId, IsDeleted) OUTPUT inserted.Id, inserted.EmployeeId INTO @Created SELECT NEWID(), @TenantId, @PeriodId, u.Id, LEFT(LTRIM(COALESCE(u.Name, N'') + N' ' + COALESCE(u.Surname, N'')), 128), u.DepartmentId, u.JobPositionId, N'GoalSetting', N'GoalSetting', 1, GETUTCDATE(), @ActorId, 0 FROM AbpUsers u WHERE u.IsDeleted = 0 AND u.IsActive = 1 AND (u.TenantId = @TenantId OR (u.TenantId IS NULL AND @TenantId IS NULL)) AND NOT EXISTS ( SELECT 1 FROM Hr_T_PerformanceReview rv WHERE rv.PeriodId = @PeriodId AND rv.EmployeeId = u.Id AND rv.IsDeleted = 0); -- Dönemin yetkinlik seti eksik olan her değerlendirmeye kopyalanır (sonradan eklenen yetkinlik dahil). INSERT INTO Hr_T_PerformanceCompetency (Id, TenantId, ReviewId, SkillId, ExpectedLevelId, IsActive, CreationTime, CreatorId, IsDeleted) SELECT NEWID(), rv.TenantId, rv.Id, ps.SkillId, ps.ExpectedLevelId, 1, GETUTCDATE(), @ActorId, 0 FROM Hr_T_PerformanceReview rv INNER JOIN Hr_T_PerformancePeriodSkill ps ON ps.PeriodId = rv.PeriodId AND ps.IsDeleted = 0 AND ps.IsActive = 1 WHERE rv.PeriodId = @PeriodId AND rv.IsDeleted = 0 AND rv.Status <> N'Completed' AND NOT EXISTS ( SELECT 1 FROM Hr_T_PerformanceCompetency c WHERE c.ReviewId = rv.Id AND c.SkillId = ps.SkillId AND c.IsDeleted = 0); DECLARE @ReviewId uniqueidentifier, @EmployeeId uniqueidentifier; DECLARE created CURSOR LOCAL FAST_FORWARD FOR SELECT Id, EmployeeId FROM @Created; OPEN created; FETCH NEXT FROM created INTO @ReviewId, @EmployeeId; WHILE @@FETCH_STATUS = 0 BEGIN EXEC dbo.Hr_S_PerformanceNotify @ReviewId, @EmployeeId, N'PerformansDurumDegisti', N'App.Hr.Performance.Notification.Status.Subject', N'App.Hr.Performance.Notification.Status.Message', @ActorId; FETCH NEXT FROM created INTO @ReviewId, @EmployeeId; END CLOSE created; DEALLOCATE created; END GO