<?php
namespace Entrepreneurs\Bundle\FrontBundle\Controller;
use Entrepreneurs\Bundle\AppBundle\Manager\MailManager;
use Entrepreneurs\Bundle\AppBundle\Propel\DemandeInterventionQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\DemandeInterventionStatut;
use Entrepreneurs\Bundle\AppBundle\Propel\EnseignantQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\EntrepreneurQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\EvaluationEnseignant;
use Entrepreneurs\Bundle\AppBundle\Propel\EvaluationEnseignantQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\EvaluationEntrepreneur;
use Entrepreneurs\Bundle\AppBundle\Propel\EvaluationEntrepreneurQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\EvaluationJeune;
use Entrepreneurs\Bundle\AppBundle\Propel\InterventionQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\InterventionStatut;
use Entrepreneurs\Bundle\FrontBundle\Form\EvaluationEnseignantType;
use Entrepreneurs\Bundle\FrontBundle\Form\EvaluationEntrepreneurType;
use Entrepreneurs\Bundle\FrontBundle\Form\EvaluationJeuneType;
use Propel\Runtime\ActiveQuery\Criteria;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class EvaluationController extends AbstractController
{
protected UrlGeneratorInterface $urlGenerator;
public function __construct(UrlGeneratorInterface $urlGenerator)
{
$this->urlGenerator = $urlGenerator;
}
/**
* @Route(name="front_evaluation_entrepreneur", path="/evaluation/entrepreneur/{uid}/{demande_uid}")
*/
public function entrepreneurAction(Request $request, MailManager $manager): Response
{
$entrepreneur = EntrepreneurQuery::create()->findOneByUid($request->get('uid'));
$demandeHash = DemandeInterventionQuery::create()->findOneByUid($request->get('demande_uid'));
if (!$entrepreneur || !$demandeHash) {
return $this->render('Front/Evaluation/erreur_uai.html.twig', ['profil' => 'entrepreneur']);
}
$eval = EvaluationEntrepreneurQuery::create()
->filterByDemandeInterventionId($demandeHash->getId())
->filterByEntrepreneurId($entrepreneur->getId())
->useDemandeInterventionQuery()
->useInterventionQuery()
->useEntrepreneurQuery()
->filterByUid($request->get('uid'))
->endUse()
->endUse()
->endUse()
->findOne();
if ($eval) {
return $this->render('Front/Evaluation/confirmation.html.twig', ['deja_realisee' => true, 'type' => 'entrepreneur']);
}
$intervention = InterventionQuery::create()
->filterByStatutId(InterventionStatut::INTERVENANT_POSITIONNE, Criteria::IN)
->useDemandeInterventionQuery()
->filterById($demandeHash->getId())
->endUse()
->useEntrepreneurQuery()
->filterByUid($request->get('uid'))
->endUse()
->findOne();
if (!$intervention) {
throw $this->createNotFoundException("L'évaluation demandée n'existe pas.");
}
$evaluation = new EvaluationEntrepreneur();
$evaluation->setEntrepreneurId($intervention->getEntrepreneurId());
$evaluation->setDemandeInterventionId($intervention->getDemandeInterventionId());
$form = $this->createForm(EvaluationEntrepreneurType::class, $evaluation);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$evaluation->save();
$manager->sendMailEnseignantReponseEvaluationEntrepreneur($evaluation, $intervention);
$manager->sendMailEntrepreneurIncitationCreationIntervention($entrepreneur);
$intervention->setStatutId(InterventionStatut::TERMINEE);
$intervention->save();
return $this->render('Front/Evaluation/confirmation.html.twig', [
'type' => 'entrepreneur',
'displayButtonAction' => 'Oui' == $evaluation->getRenewExperience(),
]);
} else {
$this->addFlash('warning', "Merci de renseigner une valeur pour chaque critère d'évaluation de ce formulaire.");
}
}
return $this->render('Front/Evaluation/form_entrepreneur.html.twig', [
'form' => $form->createView(),
'intervention' => $intervention,
'demande' => $intervention->getDemandeIntervention(),
'type' => 'entrepreneur',
]);
}
/**
* @Route(name="front_evaluation_enseignant", path="/evaluation/enseignant/{demande_uid}/{uid}")
*/
public function enseignantAction(Request $request, MailManager $manager): Response
{
$enseignant = EnseignantQuery::create()->findOneByUid($request->get('uid'));
$demandeHash = DemandeInterventionQuery::create()->findOneByUid($request->get('demande_uid'));
if (!$enseignant || !$demandeHash) {
return $this->render('Front/Evaluation/erreur_uai.html.twig', ['profil' => 'enseignant']);
}
$eval = EvaluationEnseignantQuery::create()
->filterByEnseignantId(null, Criteria::ISNOTNULL)
->filterByDemandeInterventionId($demandeHash->getId())
->useDemandeInterventionQuery()
->useEnseignantQuery()
->filterByUid($request->get('uid'))
->endUse()
->endUse()
->findOne();
if ($eval) {
return $this->render('Front/Evaluation/confirmation.html.twig', ['deja_realisee' => true, 'type' => 'enseignant']);
}
$demande = DemandeInterventionQuery::create()
->filterByStatutId([DemandeInterventionStatut::EN_ATTENTE_EVALUATION, DemandeInterventionStatut::INTERVENANT_POSITIONNE], Criteria::IN)
->filterByUid($request->get('demande_uid'))
->useEnseignantQuery()
->filterByUid($request->get('uid'))
->endUse()
->findOne();
if (!$demande) {
throw $this->createNotFoundException("L'évaluation demandée n'existe pas.");
}
$evaluation = new EvaluationEnseignant();
$evaluation->setEnseignantId($demande->getEnseignantId());
$evaluation->setDemandeInterventionId($demande->getId());
$form = $this->createForm(EvaluationEnseignantType::class, $evaluation);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
foreach ($demande->getInterventionsAcceptees() as $intervention) {
$manager->sendMailEntrepreneurReponseEvaluationEnseignant($evaluation, $intervention, 'enseignant');
}
$manager->sendMailEnseignantIncitationCreationDemandeIntervention($demande, $enseignant);
$demande->setStatutId(DemandeInterventionStatut::TERMINEE);
$demande->save();
$form->getData()->save();
return $this->render('Front/Evaluation/confirmation.html.twig', [
'type' => 'enseignant',
'displayButtonAction' => 'Oui' == $evaluation->getRenewExperience(),
]);
} else {
$this->addFlash('warning', "Merci de renseigner une valeur pour chaque critère d'évaluation de ce formulaire.");
}
}
$url = $this->urlGenerator->generate('front_evaluation_jeune', ['uid' => $demande->getUid()], UrlGeneratorInterface::ABSOLUTE_URL);
return $this->render('Front/Evaluation/form_enseignant.html.twig', [
'form' => $form->createView(),
'type' => 'enseignant',
'enseignant' => $enseignant,
'qrCode' => $demande->generateQrCode($url),
'url' => $url,
'demande' => $demande,
]);
}
/**
* @Route(name="front_evaluation_jeune", path="/evaluation-jeune/")
*/
public function jeuneAction(Request $request): Response
{
if ($request->get('uid')) {
$demande = DemandeInterventionQuery::create()->findOneByUid($request->get('uid'));
if (!$demande) {
throw $this->createNotFoundException();
}
} else {
throw $this->createNotFoundException();
}
$evaluation = new EvaluationJeune();
$evaluation->setDemandeInterventionId($demande->getId());
$isAURA = 'Auvergne-Rhône-Alpes' === $demande->getEnseignant()->getDepartement()?->getRegion()->getLabel();
$form = $this->createForm(EvaluationJeuneType::class, $evaluation, [
'isAura' => $isAURA,
'action' => $this->generateUrl('front_evaluation_jeune', ['uid' => $demande->getUid()]),
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$evaluation->setDemandeInterventionId($demande->getId());
$evaluation->save();
return $this->render('Front/EvaluationJeune/confirmation.html.twig', ['type' => 'enseignant']);
} else {
$this->addFlash('warning', "Merci de renseigner une valeur pour chaque critère d'évaluation de ce formulaire.");
}
}
/** @phpstan-ignore-next-line */
$demandeDate = $demande->getSelectedCreneauDateFormat() ? $demande->getSelectedCreneauDateFormat()?->format('Y-m-d') : $demande->getCreneau1Debut()?->format('Y-m-d');
$todayFromatedDate = (new \DateTime())->format('Y-m-d');
$displayForm = in_array($demande->getStatutId(), [DemandeInterventionStatut::EN_ATTENTE_EVALUATION, DemandeInterventionStatut::TERMINEE])
|| (DemandeInterventionStatut::INTERVENANT_POSITIONNE === $demande->getStatutId() && $demandeDate === $todayFromatedDate);
return $this->render('Front/EvaluationJeune/form.html.twig', [
'form' => $form->createView(),
'type' => 'enseignant',
'uid' => $request->get('uid'),
'isAura' => $isAURA,
'demande' => $demande,
'displayForm' => $displayForm,
]);
}
}