<?php
namespace Entrepreneurs\Bundle\Entrepreneur\Controller;
use Entrepreneurs\Bundle\Admin\Controller\AdminController;
use Entrepreneurs\Bundle\AppBundle\Manager\GeocodeManager;
use Entrepreneurs\Bundle\AppBundle\Manager\MailManager;
use Entrepreneurs\Bundle\AppBundle\Propel\ConfigSurveyQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\Entrepreneur;
use Entrepreneurs\Bundle\AppBundle\Propel\EntrepreneurQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\EntrepreneurStatut;
use Entrepreneurs\Bundle\AppBundle\Propel\Message;
use Entrepreneurs\Bundle\AppBundle\Propel\MessageQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\TypeIntervention;
use Entrepreneurs\Bundle\AppBundle\Propel\TypeInterventionQuery;
use Entrepreneurs\Bundle\Entrepreneur\Form\Questionnaire2HomePageType;
use Entrepreneurs\Bundle\Entrepreneur\Form\Questionnaire2Type;
use Entrepreneurs\Bundle\Entrepreneur\Form\QuestionnaireSEFType;
use Entrepreneurs\Bundle\Entrepreneur\Form\QuestionnaireType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
class InscriptionController extends AdminController
{
/**
* @Route(name="entrepreneur_inscription", path="/inscription/{uid}", defaults={"uid": ""})
*/
public function indexAction(Request $request): Response
{
if ($request->get('uid')) {
if (!$entrepreneur = EntrepreneurQuery::create()->findOneByUid($request->get('uid'))) {
throw $this->createNotFoundException("Aucun utilisateur n'existe pour l'UID renseigné.");
}
if ($entrepreneur->getMotDePasse()) {
return $this->renderTwig('Entrepreneur:Inscription:deja_inscrit.html.twig');
}
}
return $this->redirectToRoute('entrepreneur_questionnaire', ['from_sign_up' => true]);
}
/**
* @Route(name="entrepreneur_questionnaire", path="/questionnaire")
*/
public function surveyAddAction(Request $request, MailManager $manager, GeocodeManager $geocodeManager): Response
{
$isFromSurvey2 = (bool) $request->get('from_survey_2');
$isFromSignUp = (bool) $request->get('from_sign_up');
/** @var Entrepreneur $entrepreneur */
$entrepreneur = $this->getUser() ?: new Entrepreneur();
$form = $this->createForm(QuestionnaireType::class, $entrepreneur,
[
'entrepreneur' => $entrepreneur,
'isFromSurvey2' => $isFromSurvey2,
'isFromSignUp' => $isFromSignUp,
]
);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$entrepreneur->setReceptionMailingHebdo(true);
$entrepreneur->setSouhaiteIntervenir(true);
if ($entrepreneur->getPassword()) {
$entrepreneur->save();
} else {
$entrepreneur->initQuestionnaire()->save();
}
$entrepreneur->matchDemandesIntervention();
$geocodeManager->updateGpsDataForEntrepreneur($entrepreneur->getFullEntrepriseAdresse(), $entrepreneur, 'pro');
$geocodeManager->updateGpsDataForEntrepreneur($entrepreneur->getFullAdress(), $entrepreneur);
$entrepreneur->logSurvey1();
// Only for new Entrepreneurs
if (EntrepreneurStatut::EN_ATTENTE_ACTIVATION === $entrepreneur->getStatutId()) {
$manager->sendMailEntrepreneurInscription(
$entrepreneur,
$this->generateUrl('entrepreneur_security_activation', [
'uid' => $entrepreneur->getUid(),
'mail' => $entrepreneur->getEmail(),
], UrlGeneratorInterface::ABSOLUTE_URL)
);
}
if (in_array($entrepreneur->getSouhaitDevenirRt(), [Entrepreneur::ACCEPT_DEVENIR_RT, Entrepreneur::PK_PAS_DEVENIR_RT])) {
$manager->sendMailEntrepreneurSouhaitDevenirRT($entrepreneur);
}
if ($entrepreneur->getPassword()) {
$this->addFlash('success', 'Merci pour votre réponse au questionnaire et à bientôt pour les interventions auprès de vos jeunes');
return $this->redirectToRoute('entrepreneur_demande_intervention_list', ['fromSurvey' => true]);
}
// Log the entrepreneur
$token = new UsernamePasswordToken($entrepreneur, 'main', $entrepreneur->getRoles());
$this->container->get('security.token_storage')->setToken($token);
$this->container->get('session')->set('_security_main', serialize($token));
return $this->render('Entrepreneur/Inscription/confirmation.html.twig', [
'entrepreneur' => $entrepreneur,
'message' => 'Merci pour votre réponse au questionnaire et à bientôt pour les interventions auprès de vos jeunes',
]);
} else {
$this->addFlash('warning', "Les modifications n'ont pu être enregistrées. Merci de vérifier les informations renseignées et de les modifier au besoin.");
}
}
return $this->render('Entrepreneur/Inscription/questionnaire.html.twig',
[
'form' => $form->createView(),
'isFromSurvey2' => $isFromSurvey2,
'isFromSignUp' => $isFromSignUp,
]);
}
/**
* @Route(name="entrepreneur_questionnaire_edit", path="/modifier/questionnaire")
*/
public function surveyEditAction(Request $request, MailManager $manager): Response
{
/** @var Entrepreneur $entrepreneur */
$entrepreneur = $this->getUser();
$form = $this->createForm(QuestionnaireType::class, $entrepreneur, ['entrepreneur' => $entrepreneur]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$entrepreneur->save();
$entrepreneur->logSurvey1();
if (in_array($entrepreneur->getSouhaitDevenirRt(), [Entrepreneur::ACCEPT_DEVENIR_RT, Entrepreneur::PK_PAS_DEVENIR_RT])) {
$manager->sendMailEntrepreneurSouhaitDevenirRT($entrepreneur);
}
$this->addFlash('success', 'Merci pour votre réponse au questionnaire et à bientôt pour les interventions auprès de vos jeunes');
return $this->redirectToRoute('entrepreneur_intervention_list');
} else {
$this->addFlash('warning', "Les modifications n'ont pu être enregistrées.
Merci de vérifier les informations renseignées et de les modifier au besoin.");
}
}
return $this->renderTwig('Entrepreneur:Inscription:questionnaire.html.twig',
[
'entrepreneur' => $entrepreneur,
'form' => $form->createView(),
]
);
}
/**
* @Route(name="entrepreneur_questionnaire_verif_compte", path="/questionnaire/verif")
*/
public function verifAction(Request $request): JsonResponse
{
$telephone = $request->get('telephone');
$email = $request->get('email');
$entrepreneurQuery = EntrepreneurQuery::create();
if ($telephone) {
$entrepreneurQuery->filterByTelephone1($telephone);
}
if ($email) {
$entrepreneurQuery->filterByEmail($email);
}
$entrepreneur = $entrepreneurQuery->findOne();
return new JsonResponse(['entrepreneurExist' => (bool) $entrepreneur]);
}
#[Route(path: '/accueil/questionnaire_dynamique/{code?}', name: 'questionnaire_2', requirements: ['code' => '\d*'], defaults: ['code' => null])]
#[Route(path: '/questionnaire_dynamique/{uid}/{code?}', name: 'questionnaire_2_public', requirements: ['uid' => '[a-zA-Z0-9]*', 'code' => '\d*'], defaults: ['code' => null])]
public function survey2AddAction(
Request $request,
MailManager $manager,
string $uid = null,
int $code = null
): Response {
/** @var Entrepreneur $entrepreneur */
$entrepreneur = $this->getUser() ?: new Entrepreneur();
if ($uid) {
$entrepreneur = EntrepreneurQuery::create()->findOneByUid($uid);
if (!$entrepreneur) {
$this->addFlash('warning', "Le lien n'est plus valide.");
return $this->redirectToRoute('entrepreneur_homepage');
}
}
if (null === $code) {
$code = ConfigSurveyQuery::getEntrepreneurQuestionnaire2Code();
}
$form = $this->createForm(Questionnaire2Type::class, $entrepreneur, [
'entrepreneur' => $entrepreneur,
'code' => $code,
]);
$relaisEnfant = $entrepreneur->getRelaisEcoleEnfant();
$participCommunauteEntrepreneur = $entrepreneur->getParticiperCommunauteEntrepreneur();
$relaisRT = $entrepreneur->getSouhaitDevenirRt();
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$entrepreneur->setReceptionMailingHebdo(true);
$entrepreneur->save();
$entrepreneur->logSurvey2();
if ('Oui' === $entrepreneur->getRelaisEcoleEnfant() && $relaisEnfant != $entrepreneur->getRelaisEcoleEnfant()) {
$manager->sendMailRelaisEtablissementEnfant($entrepreneur);
}
if (in_array($entrepreneur->getParticiperCommunauteEntrepreneur(), ['Oui', 'Pourquoi pas']) && 'Non' == $participCommunauteEntrepreneur) {
$manager->sendMailParticiperCommunauteEntrepreneur($entrepreneur);
}
if (in_array($entrepreneur->getSouhaitDevenirRt(), [Entrepreneur::ACCEPT_DEVENIR_RT, Entrepreneur::PK_PAS_DEVENIR_RT])
&& Entrepreneur::REFUSE_DEVENIR_RT == $relaisRT) {
$manager->sendMailEntrepreneurSouhaitDevenirRT($entrepreneur);
}
return $this->render('Entrepreneur/Inscription/confirmation_questionnaire2.html.twig', [
'entrepreneur' => $entrepreneur,
]);
} else {
$this->addFlash('warning', "Les modifications n'ont pu être enregistrées. Merci de vérifier les informations renseignées et de les modifier au besoin.");
}
}
return $this->render('Entrepreneur/Inscription/questionnaire2.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route(name="questionnaire_2_home_page", path="/questionnaire_ent_dynamique")
*
* @throws \Exception
*/
public function survey2HomePageAction(Request $request): Response
{
if ($this->getUser()) {
$this->redirectToRoute('questionnaire_2');
}
$form = $this->createForm(Questionnaire2HomePageType::class);
return $this->render('Entrepreneur/Inscription/questionnaire2HomePage.html.twig', [
'form' => $form->createView(),
'link_questionnaire_2' => $this->generateUrl('questionnaire_2', [
'code' => ConfigSurveyQuery::getEntrepreneurQuestionnaire2Code(),
]),
]);
}
/**
* @Route(name="entrepreneur_questionnaire_sef", path="/questionnaire/sef")
*/
public function surveySEFAction(Request $request, MailManager $manager, GeocodeManager $geocodeManager): Response
{
$isFromSignUp = (bool) $request->get('from_sign_up');
/** @var Entrepreneur $entrepreneur */
$entrepreneur = $this->getUser() ?: new Entrepreneur();
$form = $this->createForm(QuestionnaireSEFType::class, $entrepreneur,
[
'entrepreneur' => $entrepreneur,
'isFromSignUp' => $isFromSignUp,
]
);
$typeInterventionEF = TypeInterventionQuery::create()->findOneByLabel(TypeIntervention::ENTREPRENEURIAT_FEMININ);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$entrepreneur->setSouhaiteIntervenir(true);
$entrepreneur->setReceptionMailingHebdo(true);
$entrepreneur->addTypeIntervention($typeInterventionEF);
if ($entrepreneur->getPassword()) {
$entrepreneur->save();
} else {
$entrepreneur->initQuestionnaire()->save();
}
$geocodeManager->updateGpsDataForEntrepreneur($entrepreneur->getFullEntrepriseAdresse(), $entrepreneur, 'pro');
$entrepreneur->matchDemandesIntervention();
$entrepreneur->logSurveySEF();
// Only for new Entrepreneurs
if (EntrepreneurStatut::EN_ATTENTE_ACTIVATION === $entrepreneur->getStatutId()) {
$manager->sendMailEntrepreneurInscription(
$entrepreneur,
$this->generateUrl('entrepreneur_security_activation', [
'uid' => $entrepreneur->getUid(),
'mail' => $entrepreneur->getEmail(),
], UrlGeneratorInterface::ABSOLUTE_URL),
true
);
$manager->sendMailEntrepreneurNonForme($entrepreneur, true);
$entrepreneur->setNbRelancesNonForme($entrepreneur->getNbRelancesNonForme() + 1)->save();
// Log the entrepreneur
$token = new UsernamePasswordToken($entrepreneur, 'main', $entrepreneur->getRoles());
$this->container->get('security.token_storage')->setToken($token);
$this->container->get('session')->set('_security_main', serialize($token));
}
if ($entrepreneur->getPassword()) {
$this->addFlash('success', 'Merci pour votre réponse au questionnaire et à bientôt pour les interventions auprès de vos jeunes');
return $this->redirectToRoute('entrepreneur_demande_intervention_list', ['fromSurveySef' => true]);
}
return $this->renderTwig('Entrepreneur:Inscription:confirmation.html.twig', [
'entrepreneur' => $entrepreneur,
'message' => 'Merci pour votre réponse au questionnaire et à bientôt pour les interventions auprès de vos jeunes',
'fromSurveySef' => true,
]);
} else {
$this->addFlash('warning', "Les modifications n'ont pu être enregistrées. Merci de vérifier les informations renseignées et de les modifier au besoin.");
}
}
return $this->renderTwig('Entrepreneur:Inscription:questionnaire_sef.html.twig',
[
'entrepreneurId' => $entrepreneur->getId(),
'form' => $form->createView(),
'isFromSignUp' => $isFromSignUp,
'introMessage' => MessageQuery::create()->findOneByCode(Message::SURVEY_SEF_INTRO_MESSAGE_ENT)->getMessage(),
]);
}
/**
* @Route(name="entrepreneur_questionnaire_sef_edit", path="/modifier/questionnaire-sef")
*/
public function surveySefEditAction(): Response
{
return $this->redirectToRoute('entrepreneur_questionnaire_sef');
}
}