<?php
namespace App\EventListener;
use App\Entity\AssessmentCycleAssessor;
use App\Enum\UserRelation;
use App\Event\AssessmentCompletedEvent;
use App\Service\Assessment\AssessmentCycleManager;
use App\Service\Assessment\AssessmentService;
use App\Service\User\UserService;
use Doctrine\ORM\EntityManagerInterface;
class AssessmentCompletedListener
{
private $em;
private $assessmentService;
private $assessmentCycleManager;
private $userService;
/**
* AssessmentCompletedListener constructor.
*
* @param EntityManagerInterface $em
* @param AssessmentService $assessmentService
* @param AssessmentCycleManager $assessmentCycleManager
* @param UserService $userService
*/
public function __construct(
EntityManagerInterface $em,
AssessmentService $assessmentService,
AssessmentCycleManager $assessmentCycleManager,
UserService $userService
) {
$this->em = $em;
$this->assessmentService = $assessmentService;
$this->assessmentCycleManager = $assessmentCycleManager;
$this->userService = $userService;
}
public function onAssessmentCompleted(AssessmentCompletedEvent $event)
{
$assessment = $event->getAssessment();
$cycle = $assessment->getCycle();
$assessmentCycleAssessor = $this->em->getRepository(AssessmentCycleAssessor::class)->findOneBy([
'assessor' => $assessment->getAssessor(),
'cycle' => $cycle,
]);
if ($assessmentCycleAssessor) {
$this->assessmentCycleManager->completeAssessorRequest($assessmentCycleAssessor);
}
$incompleteCycleAssessors = $this->em->getRepository(AssessmentCycleAssessor::class)->findBy([
'cycle' => $cycle,
'timecompleted' => null
]);
if (!$incompleteCycleAssessors) {
$this->assessmentCycleManager->completeCycle($cycle);
}
$relation = $assessment->getAssessorRelation();
if ($relation === UserRelation::TYPE_MANAGER || $relation === UserRelation::TYPE_SELF) {
$this->userService->updateCompProfileScores($assessment->getUser());
$this->userService->updateSkillProfileScores($assessment->getUser());
}
// @todo calculate cycle score
}
}