55 lines
2.8 KiB
MySQL
55 lines
2.8 KiB
MySQL
|
|
CREATE OR REPLACE PROCEDURE public."Hr_S_PerformancePeriodActivate"(
|
|||
|
|
p_PeriodId uuid,
|
|||
|
|
p_ActorId uuid DEFAULT NULL
|
|||
|
|
)
|
|||
|
|
LANGUAGE plpgsql
|
|||
|
|
AS $$
|
|||
|
|
DECLARE
|
|||
|
|
v_TenantId uuid;
|
|||
|
|
v_ReviewIds uuid[];
|
|||
|
|
v_EmployeeIds uuid[];
|
|||
|
|
v_i integer;
|
|||
|
|
BEGIN
|
|||
|
|
SELECT "TenantId" INTO v_TenantId
|
|||
|
|
FROM "Hr_T_PerformancePeriod"
|
|||
|
|
WHERE "Id" = p_PeriodId AND "IsDeleted" = FALSE AND "Status" = 'Active';
|
|||
|
|
|
|||
|
|
IF NOT FOUND THEN
|
|||
|
|
RETURN;
|
|||
|
|
END IF;
|
|||
|
|
|
|||
|
|
-- 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.
|
|||
|
|
WITH created AS (
|
|||
|
|
INSERT INTO "Hr_T_PerformanceReview" ("Id", "TenantId", "PeriodId", "EmployeeId", "EmployeeName", "DepartmentId", "JobPositionId", "Status", "LastStatus", "IsActive", "CreationTime", "CreatorId", "IsDeleted")
|
|||
|
|
SELECT gen_random_uuid(), v_TenantId, p_PeriodId, u."Id", LEFT(LTRIM(COALESCE(u."Name", '') || ' ' || COALESCE(u."Surname", '')), 128), u."DepartmentId", u."JobPositionId", 'GoalSetting', 'GoalSetting', TRUE, NOW() AT TIME ZONE 'UTC', p_ActorId, FALSE
|
|||
|
|
FROM "AbpUsers" u
|
|||
|
|
WHERE u."IsDeleted" = FALSE AND u."IsActive" = TRUE
|
|||
|
|
AND (u."TenantId" = v_TenantId OR (u."TenantId" IS NULL AND v_TenantId IS NULL))
|
|||
|
|
AND NOT EXISTS (
|
|||
|
|
SELECT 1 FROM "Hr_T_PerformanceReview" rv
|
|||
|
|
WHERE rv."PeriodId" = p_PeriodId AND rv."EmployeeId" = u."Id" AND rv."IsDeleted" = FALSE)
|
|||
|
|
RETURNING "Id", "EmployeeId"
|
|||
|
|
)
|
|||
|
|
SELECT array_agg("Id"), array_agg("EmployeeId") INTO v_ReviewIds, v_EmployeeIds
|
|||
|
|
FROM created;
|
|||
|
|
|
|||
|
|
-- 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 gen_random_uuid(), rv."TenantId", rv."Id", ps."SkillId", ps."ExpectedLevelId", TRUE, NOW() AT TIME ZONE 'UTC', p_ActorId, FALSE
|
|||
|
|
FROM "Hr_T_PerformanceReview" rv
|
|||
|
|
INNER JOIN "Hr_T_PerformancePeriodSkill" ps ON ps."PeriodId" = rv."PeriodId" AND ps."IsDeleted" = FALSE AND ps."IsActive" = TRUE
|
|||
|
|
WHERE rv."PeriodId" = p_PeriodId AND rv."IsDeleted" = FALSE AND rv."Status" <> 'Completed'
|
|||
|
|
AND NOT EXISTS (
|
|||
|
|
SELECT 1 FROM "Hr_T_PerformanceCompetency" c
|
|||
|
|
WHERE c."ReviewId" = rv."Id" AND c."SkillId" = ps."SkillId" AND c."IsDeleted" = FALSE);
|
|||
|
|
|
|||
|
|
IF v_ReviewIds IS NOT NULL THEN
|
|||
|
|
FOR v_i IN 1 .. array_length(v_ReviewIds, 1) LOOP
|
|||
|
|
CALL public."Hr_S_PerformanceNotify"(v_ReviewIds[v_i], v_EmployeeIds[v_i], 'PerformansDurumDegisti',
|
|||
|
|
'App.Hr.Performance.Notification.Status.Subject', 'App.Hr.Performance.Notification.Status.Message', p_ActorId);
|
|||
|
|
END LOOP;
|
|||
|
|
END IF;
|
|||
|
|
END
|
|||
|
|
$$;
|