src/EventListener/AssessmentCompletedListener.php line 40

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\AssessmentCycleAssessor;
  4. use App\Enum\UserRelation;
  5. use App\Event\AssessmentCompletedEvent;
  6. use App\Service\Assessment\AssessmentCycleManager;
  7. use App\Service\Assessment\AssessmentService;
  8. use App\Service\User\UserService;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. class AssessmentCompletedListener
  11. {
  12.     private $em;
  13.     private $assessmentService;
  14.     private $assessmentCycleManager;
  15.     private $userService;
  16.     /**
  17.      * AssessmentCompletedListener constructor.
  18.      *
  19.      * @param EntityManagerInterface $em
  20.      * @param AssessmentService      $assessmentService
  21.      * @param AssessmentCycleManager $assessmentCycleManager
  22.      * @param UserService            $userService
  23.      */
  24.     public function __construct(
  25.         EntityManagerInterface $em,
  26.         AssessmentService $assessmentService,
  27.         AssessmentCycleManager $assessmentCycleManager,
  28.         UserService $userService
  29.     ) {
  30.         $this->em $em;
  31.         $this->assessmentService $assessmentService;
  32.         $this->assessmentCycleManager $assessmentCycleManager;
  33.         $this->userService $userService;
  34.     }
  35.     public function onAssessmentCompleted(AssessmentCompletedEvent $event)
  36.     {
  37.         $assessment $event->getAssessment();
  38.         $cycle $assessment->getCycle();
  39.         $assessmentCycleAssessor $this->em->getRepository(AssessmentCycleAssessor::class)->findOneBy([
  40.             'assessor' => $assessment->getAssessor(),
  41.             'cycle' => $cycle,
  42.         ]);
  43.         if ($assessmentCycleAssessor) {
  44.             $this->assessmentCycleManager->completeAssessorRequest($assessmentCycleAssessor);
  45.         }
  46.         $incompleteCycleAssessors $this->em->getRepository(AssessmentCycleAssessor::class)->findBy([
  47.             'cycle' => $cycle,
  48.             'timecompleted' => null
  49.         ]);
  50.         if (!$incompleteCycleAssessors) {
  51.             $this->assessmentCycleManager->completeCycle($cycle);
  52.         }
  53.         $relation $assessment->getAssessorRelation();
  54.         if ($relation === UserRelation::TYPE_MANAGER || $relation === UserRelation::TYPE_SELF) {
  55.             $this->userService->updateCompProfileScores($assessment->getUser());
  56.             $this->userService->updateSkillProfileScores($assessment->getUser());
  57.         }
  58.         // @todo calculate cycle score
  59.     }
  60. }