<?php
namespace App\Controller;
use App\Entity\GlobalAdvice;
use App\Entity\GlobalAdviceEs;
use App\Entity\GlobalAdvicePr;
use App\Entity\SpecificAdvice;
use App\Entity\SpecificAdvicethree;
use App\Entity\SpecificAdvicetwo;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\UX\Chartjs\Builder\ChartBuilderInterface;
use Symfony\UX\Chartjs\Model\Chart;
#[Route('/{_locale<%app.supported_locales%>}/results', name: 'app-results-')]
class ResultController extends AbstractController
{
private $globalLevel = null;
public function __construct(readonly EntityManagerInterface $entityManager)
{
}
#[Route('/', name: 'index')]
public function index(Request $request, ChartBuilderInterface $chartBuilder): Response
{
$local = $request->getLocale(); // get la locale
$session = $request->getSession();
$selectedPath = $session->get('selectedPath');
//calcul des moyennes de tous les secteurs et renvoi
$participationData = $session->get('participation');
$responsabilitiesData = $session->get('responsabilite');
$capaciteCritiqueData = $session->get('capacitecritique');
$estimeDeSoiData = $session->get('estimedesoi');
$metaApprentissageData = $session->get('metaapprentissage');
$effectiviteData = $session->get('effectivite');
$autonomieData = $session->get('autonomie');
$identiteCommunautaireData = $session->get('identitecommunautaire');
$teamWorkData = $session->get('travaildequipe');
$specificAdvice = [];
$adviceRepository = null;
switch ($selectedPath) {
case 1:
$adviceRepository = SpecificAdvice::class;
break;
case 2:
$adviceRepository = SpecificAdvicetwo::class;
break;
case 3:
$adviceRepository = SpecificAdvicethree::class;
break;
}
$specificAdvice['participation'] = $this->getLevelSkills($session, $adviceRepository, $participationData, 'participationlevel', 'participationfloat', 'participation');
$specificAdvice['responsabilite'] = $this->getLevelSkills($session, $adviceRepository, $responsabilitiesData, 'responsabilitelevel', 'responsabilitefloat', 'responsabilite');
$specificAdvice['capacitecritique'] = $this->getLevelSkills($session, $adviceRepository, $capaciteCritiqueData, 'capacitecritiquelevel', 'capacitecritiquefloat', 'capacitecritique');
$specificAdvice['metaapprentissage'] = $this->getLevelSkills($session, $adviceRepository, $metaApprentissageData, 'metaapprentissagelevel', 'metaapprentissagefloat', 'metaapprentissage');
$specificAdvice['estimedesoi'] = $this->getLevelSkills($session, $adviceRepository, $estimeDeSoiData, 'estimedesoilevel', 'estimedesoifloat', 'estimedesoi');
$specificAdvice['effectivite'] = $this->getLevelSkills($session, $adviceRepository, $effectiviteData, 'effectivitelevel', 'effectivitefloat', 'effectivite');
$specificAdvice['autonomie'] = $this->getLevelSkills($session, $adviceRepository, $autonomieData, 'autonomielevel', 'autonomiefloat', 'autonomie');
$specificAdvice['identitecommunautaire'] = $this->getLevelSkills($session, $adviceRepository, $identiteCommunautaireData, 'identitecommunautairelevel', 'identitecommunautairefloat', 'identitecommunautaire');
$specificAdvice['travaildequipe'] = $this->getLevelSkills($session, $adviceRepository, $teamWorkData, 'travaildequipelevel', 'travaildequipefloat', 'travaildequipe');
$session->set('global_level', $this->globalLevel);
switch ($local) {
case "fr":
$globalAdvice = $this->entityManager->getRepository(GlobalAdvice::class)->findOneBy(['level' => $this->globalLevel]);
break;
case "es":
$globalAdvice = $this->entityManager->getRepository(GlobalAdviceEs::class)->findOneBy(['level' => $this->globalLevel]);
break;
case "pt":
$globalAdvice = $this->entityManager->getRepository(GlobalAdvicePr::class)->findOneBy(['level' => $this->globalLevel]);
break;
default:
$globalAdvice = null;
break;
}
return $this->render('results/' . $local . '/index.html.twig', [
'countPercent' => 100,
'countTotal' => 100,
'skills' => $specificAdvice,
'globalLevel' => $this->globalLevel,
'globalAdvice' => $globalAdvice,
'path'=>$selectedPath
]);
}
private function getLevelSkills($session, $adviceRepository, array $skillsData, string $skillLevel, string $skillFloat, string $skill)
{
$em = $this->entityManager;
$advancedCount = 0;
$inProgressCount = 0;
$initialCount = 0;
$results = [];
foreach ($skillsData as $value) {
switch ($value) {
case 1:
$initialCount++;
break;
case 2:
$inProgressCount++;
break;
case 3:
$advancedCount++;
break;
}
}
// traduction du résultat en appréciation moyenne en fonction des réponses
if (($initialCount > $advancedCount && $initialCount > $inProgressCount) || ($initialCount == $inProgressCount && $initialCount > $advancedCount && $inProgressCount > $advancedCount)) {
$this->globalLevel = 'initial';
$session->set($skillLevel, 'initial');
return $results[$skill] = [
'specificAdvice' => $em->getRepository($adviceRepository)->findOneBy(['level' => 'initial', 'dimension' => $skill]),
'level' => 'initial',
'float' => 1
];
} else if (($advancedCount == $inProgressCount && $advancedCount > $initialCount && $inProgressCount > $initialCount) || ($initialCount == $advancedCount && $initialCount > $inProgressCount && $advancedCount > $inProgressCount) || ($inProgressCount > $advancedCount && $inProgressCount > $initialCount)) {
$this->globalLevel = 'encours';
$session->set($skillLevel, 'encours');
return $results[$skill] = [
'specificAdvice' => $em->getRepository($adviceRepository)->findOneBy(['level' => 'encours', 'dimension' => $skill]),
'level' => 'encours',
'float' => 2
];
} // ($advancedCount > $inProgressCount && $advancedCount > $initialCount)
else {
$this->globalLevel = 'advanced';
$session->set($skillLevel, 'advanced');
return $results[$skill] = [
'specificAdvice' => $em->getRepository($adviceRepository)->findOneBy(['level' => 'advanced', 'dimension' => $skill]),
'level' => 'advanced',
'float' => 3
];
}
}
}