src/Controller/QuestionnaireController.php line 28

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CategorieQuestion;
  4. use App\Entity\CommentaireCategorie;
  5. use App\Entity\CommentaireGlobal;
  6. use App\Entity\CommentaireQuestionEconomique;
  7. use App\Entity\ConditionCommentaireGlobal;
  8. use App\Entity\Departement;
  9. use App\Entity\Exploitation;
  10. use App\Entity\LibelleReponse;
  11. use App\Entity\MentionsLegales;
  12. use App\Entity\NoteCategorie;
  13. use App\Entity\Parametres;
  14. use App\Entity\Question;
  15. use App\Entity\Questionnaire;
  16. use App\Entity\Reponse;
  17. use App\Entity\SystemeProduction;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\Mailer\MailerInterface;
  22. use Symfony\Component\Mime\Email;
  23. class QuestionnaireController extends AbstractController
  24. {
  25.     public function afficher(EntityManagerInterface $emMailerInterface $mailer)
  26.     {
  27.         // Valeurs renseignées par l'utilisateur
  28.         $produit "";
  29.         $EBE "";
  30.         $annuites 0;
  31.         $pac 0;
  32.         // variable permettant d'afficher ou non l'onglet des resultats
  33.         $resultat false;
  34.         // Resultat des calculs des questions fixes Economiques
  35.         $ebe_produit '';
  36.         $annuites_ebe '';
  37.         $aides_ebe '';
  38.         $dettes '';
  39.         // Point attribué en fonction des résultats des questions fixes ( ex : une note de 10 à la question 'Dettes fournisseurs' vaut 100 points )
  40.         $note_ebe_produit '';
  41.         $note_annuites_ebe '';
  42.         $note_aides_ebe '';
  43.         $note_dettes '';
  44.         // Note totale
  45.         $noteTotal 0;
  46.         // Tableau indéxé par categorie avec la note et les commentaires
  47.         $resultatCategorie = [];
  48.         // Commentaires
  49.         $commentaire_ebe_produit "";
  50.         $commentaire_annuites_ebe "";
  51.         $commentaire_aide_ebe "";
  52.         $commentaire_dettes "";
  53.         $commentaireGlobal "";
  54.         $questionnaire $em->getRepository(Questionnaire::class)->find(1);
  55.         $categories $em->getRepository(CategorieQuestion::class)->findBy([],['ordre'=>'asc']);
  56.         $departements $em->getRepository(Departement::class)->findAll();
  57.         $systemes $em->getRepository(SystemeProduction::class)->findAll();
  58.         $questionsFixes $em->getRepository(Question::class)->findBy(['questionnaire' => $questionnaire 'type' => 'fix''active' => true]);
  59.         $questions $em->getRepository(Question::class)->findBy(['questionnaire' => $questionnaire 'type' => 'jauge''active' => true]);
  60.         $listeQuestions = [];
  61.         $libelleReponse $em->getRepository(LibelleReponse::class)->findBy(['question' => $questions],['min' => 'asc']);
  62.         foreach ($libelleReponse as $libelle) {
  63.             $question $libelle->getQuestion();
  64.             $listeQuestions[$question->getCategorie()->getId()][$question->getId()]['question'] = $question;
  65.             $listeQuestions[$question->getCategorie()->getId()][$question->getId()]['reponse'] = [
  66.                 'valeur' => '',
  67.                 'texte' => ''
  68.             ];
  69.             $listeQuestions[$question->getCategorie()->getId()][$question->getId()]['libelleReponse'][] = $libelle;
  70.         }
  71.         $exploitation null;
  72.         $mentionsLegales $em->getRepository(MentionsLegales::class)->find(1);
  73.         if (isset($_POST['valider'])) {
  74.             //Création de l'entité Exploitation temporaire
  75.             $exploitation = (new Exploitation())->setDateReponse(new \DateTime('now'));
  76.             $systeme $em->getRepository(SystemeProduction::class)->find($_POST['exp_systeme']);
  77.             $exploitation->setSystemeProduction($systeme);
  78.             $em->persist($exploitation);
  79.             // Permettant de calculer la note totale pour chaque catégorie
  80.             $valeurEco 0;
  81.             $nbEco 0;
  82.             $valeurStrat 0;
  83.             $nbStrat 0;
  84.             $valeurTech 0;
  85.             $nbTech 0;
  86.             $poidsDettes 0;
  87.             $sujetsPreoccupants '';
  88.             $listeQuestions = [];
  89.             // On récupère le résultat de chaques questions
  90.             foreach ($questions as $q) {
  91.                 $reponse $_POST['reponse_'.$q->getId()];
  92.                 $textLibelle "";
  93.                 $libelle $em->getRepository(LibelleReponse::class)->findBy(['question' => $q],['min' => 'asc']);
  94.                 foreach ($libelle as $lib) {
  95.                     if ($lib->getMin() <= $reponse && $lib->getMax() >= $reponse) {
  96.                         $textLibelle $lib->getLibelle();
  97.                     }
  98.                 }
  99.                 $listeQuestions[$q->getCategorie()->getId()][] = ['question' => $q,'libelleReponse' => $libelle,'reponse' => ['valeur' => $reponse,'texte' => $textLibelle]];
  100.                 $coef $q->getCoef();
  101.                 if ($q->getCategorie()->getId() === 1) {
  102.                     if ($q->getLibelleFix() === "dettes") {
  103.                         $dettes $reponse;
  104.                     } else {
  105.                         $nbEco += $coef;
  106.                         $valeurEco += ($reponse*10)*$coef;
  107.                     }
  108.                 } elseif ($q->getCategorie()->getId() === 2) {
  109.                     $nbStrat += $coef;
  110.                     $valeurStrat += ($reponse*10)*$coef;
  111.                 } elseif ($q->getCategorie()->getId() === 3) {
  112.                     $nbTech += $coef;
  113.                     $valeurTech += ($reponse*10)*$coef;
  114.                 }
  115.                 $reponseQuestion = (new Reponse())
  116.                     ->setQuestion($q)
  117.                     ->setExploitation($exploitation)
  118.                     ->setValeur($reponse)
  119.                 ;
  120.                 $em->persist($reponseQuestion);
  121.                 if ($reponse <= && $q->getCategorie()->getSujetsPreoccupants() && $q->getCommentaireSujetsPreoccupants() != null) {
  122.                     $sujetsPreoccupants .= '- ' $q->getCommentaireSujetsPreoccupants() . "\n";
  123.                 }
  124.             }
  125.             // On récupère les resultats pour les questions fixes
  126.             foreach ($questionsFixes as $qFix) {
  127.                 $nomFix $qFix->getLibelleFix();
  128.                 if ($nomFix === 'produit') {
  129.                     $produit $_POST['produit'];
  130.                     $reponse $produit;
  131.                 } elseif ($nomFix === 'annuites') {
  132.                     $annuites $_POST['annuites'];
  133.                     $reponse $annuites;
  134.                 } elseif ($nomFix === 'EBE') {
  135.                     $EBE $_POST['EBE'];
  136.                     $reponse $EBE;
  137.                 } elseif ($nomFix === 'pac') {
  138.                     $pac $_POST['pac'];
  139.                     $reponse $pac;
  140.                 }
  141.                 $reponseQuestion = (new Reponse())
  142.                     ->setQuestion($qFix)
  143.                     ->setExploitation($exploitation)
  144.                     ->setValeur($reponse)
  145.                 ;
  146.                 $em->persist($reponseQuestion);
  147.             }
  148.             // On fait les calculs nécéssaires
  149.             $ebe_produit round($EBE $produit 100,0);
  150.             $annuites_ebe round($annuites $EBE 100,0);
  151.             $aides_ebe round($pac $EBE 100,0);
  152.             // On fait l'attribution des points
  153.             if ($ebe_produit >= 45) {
  154.                 $note_ebe_produit 100;
  155.             } elseif($ebe_produit >= 35) {
  156.                 $note_ebe_produit 85;
  157.             } elseif($ebe_produit >= 30) {
  158.                 $note_ebe_produit 70;
  159.             } elseif($ebe_produit >= 25) {
  160.                 $note_ebe_produit 50;
  161.             } else {
  162.                 $note_ebe_produit 10;
  163.             }
  164.             if ($annuites_ebe >= 80) {
  165.                 $note_annuites_ebe 10;
  166.             } elseif($annuites_ebe >= 60) {
  167.                 $note_annuites_ebe 30;
  168.             } elseif($annuites_ebe >= 45) {
  169.                 $note_annuites_ebe 50;
  170.             } elseif($annuites_ebe >= 40) {
  171.                 $note_annuites_ebe 70;
  172.             } elseif($annuites_ebe >= 35) {
  173.                 $note_annuites_ebe 85;
  174.             } else {
  175.                 $note_annuites_ebe 100;
  176.             }
  177.             if ($aides_ebe >= 60) {
  178.                 $note_aides_ebe 20;
  179.             } elseif($aides_ebe >= 40) {
  180.                 $note_aides_ebe 50;
  181.             } elseif($aides_ebe >= 20) {
  182.                 $note_aides_ebe 85;
  183.             } else {
  184.                 $note_aides_ebe 100;
  185.             }
  186.             if($dettes !== "") {
  187.                 $poidsDettes 1;
  188.                 if ($dettes 9) {
  189.                     $note_dettes 100;
  190.                 } elseif ($dettes 7) {
  191.                     $note_dettes 80;
  192.                 } elseif ($dettes 5) {
  193.                     $note_dettes 60;
  194.                 } elseif ($dettes 3) {
  195.                     $note_dettes 30;
  196.                 } else {
  197.                     $note_dettes 10;
  198.                 }
  199.             }
  200.             else{
  201.                 $note_dettes 0;
  202.             }
  203.             // Commentaires pour les questions fixes/montants
  204.             $getCommentaire1 $em->getRepository(CommentaireQuestionEconomique::class)->getCommentaireByImpactNote($questionnaire,'EBE/produit',$ebe_produit);
  205.             foreach ($getCommentaire1 as $comm) {
  206.                 $commentaire_ebe_produit .= $comm->getLibelle() . "\n";
  207.             }
  208.             $getCommentaire2 $em->getRepository(CommentaireQuestionEconomique::class)->getCommentaireByImpactNote($questionnaire,'annuites/EBE',$annuites_ebe);
  209.             foreach ($getCommentaire2 as $comm) {
  210.                 $commentaire_annuites_ebe .= $comm->getLibelle() . "\n";
  211.             }
  212.             $getCommentaire3 $em->getRepository(CommentaireQuestionEconomique::class)->getCommentaireByImpactNote($questionnaire,'pac/EBE',$aides_ebe);
  213.             foreach ($getCommentaire3 as $comm) {
  214.                 $commentaire_aide_ebe .= $comm->getLibelle() . "\n";
  215.             }
  216.             if($dettes !== ""){
  217.                 $getCommentaire4 $em->getRepository(CommentaireQuestionEconomique::class)->getCommentaireByImpactNote($questionnaire,'dettes',$dettes*10);
  218.                 foreach ($getCommentaire4 as $comm) {
  219.                     $commentaire_dettes .= $comm->getLibelle() . "\n";
  220.                 }
  221.             }
  222.             // Calcul du total par catégorie
  223.             foreach ($categories as $cat) {
  224.                 $commentaire "";
  225.                 $noteCat 0;
  226.                 if ($cat->getId() === 1) {
  227.                     $noteCat round(($note_ebe_produit $note_annuites_ebe $note_aides_ebe $note_dettes $valeurEco) / ($nbEco $poidsDettes),0);
  228.                 } elseif ($cat->getId() === 2) {
  229.                     $noteCat round($valeurStrat $nbStrat ,0);
  230.                 }
  231.                 elseif ($cat->getId() === 3) {
  232.                     $noteCat round($valeurTech $nbTech,0);
  233.                 }
  234.                 $commentaireCat $em->getRepository(CommentaireCategorie::class)->getCommentaireByNote($questionnaire,$cat->getId(),$noteCat);
  235.                 foreach ($commentaireCat as $comm) {
  236.                     $commentaire .= $comm->getLibelle() . "\n";
  237.                     if ($cat->getSujetsPreoccupants() && $comm->getSujetsPreoccupants()) {
  238.                         $commentaire .= $sujetsPreoccupants;
  239.                     }
  240.                 }
  241.                 $resultatCategorie[$cat->getId()] = ['libelle'=> $cat->getLibelle() ,'note' => $noteCat'commentaire' => $commentaire];
  242.                 $noteTotal += $noteCat;
  243.                 $noteCategorie = (new NoteCategorie())
  244.                     ->setExploitation($exploitation)
  245.                     ->setCategorie($cat)
  246.                     ->setNote($noteCat)
  247.                 ;
  248.                 $em->persist($noteCategorie);
  249.             }
  250.             // Commentaire Globaux
  251.             $commentaireGlobaux $em->getRepository(CommentaireGlobal::class)->findByQuestionnaire($questionnaire);
  252.             foreach ($commentaireGlobaux as $cg) {
  253.                 $isConditionOK true;
  254.                 $condition $em->getRepository(ConditionCommentaireGlobal::class)->findBy(['commentaireGlobal' => $cg],['categorie'=>'ASC']);
  255.                 foreach ($condition as $cond) {
  256.                     $noteCat $resultatCategorie[$cond->getCategorie()->getId()]['note'];
  257.                     if($cond->getCategorie()->getId() === && ($noteCat $cond->getMin() || $noteCat $cond->getMax())) {
  258.                         $isConditionOK false;
  259.                     } elseif($cond->getCategorie()->getId() === && ($noteCat $cond->getMin() || $noteCat $cond->getMax())) {
  260.                         $isConditionOK false;
  261.                     } elseif($cond->getCategorie()->getId() === && ($noteCat $cond->getMin() || $noteCat $cond->getMax() )) {
  262.                         $isConditionOK false;
  263.                     }
  264.                 }
  265.                 if ($isConditionOK) {
  266.                     $commentaireGlobal .= $cg->getLibelle() . "\n";
  267.                 }
  268.             }
  269.             $noteTotal round( ($noteTotal) / count($categories));
  270.             $exploitation->setNoteGlobale($noteTotal);
  271.             // On ajoute le departement selectionné
  272.             $departement $em->getRepository(Departement::class)->find($_POST['departement']);
  273.             $exploitation->setDepartement($departement);
  274.             $resultat true;
  275.             if ($resultat) {
  276.                 $em->flush();
  277.                 $this->addFlash('success',"Votre diagnostic a été réalisé ");
  278.                 $parametre $em->getRepository(Parametres::class)->find(1);
  279.                 if($this->getParameter('alerte_nouveau_questionnaire') === && $parametre->getEmailReception()) {
  280.                     $texte "Bonjour,
  281.                     
  282. Un nouveau diagnostic vient d'être réalisé depuis l'application ProAgri.
  283.                     
  284. Cordialement.";
  285.                     $email = (new Email())
  286.                         ->from($parametre->getEmailExpedition())
  287.                         ->to(...explode(','$parametre->getEmailReception()))
  288.                         ->subject('ProAgri - Nouveau diagnostic')
  289.                         ->text($texte);
  290.                     $mailer->send($email);
  291.                 }
  292.             }
  293.         } elseif (isset($_POST['validerExploitation'])) {
  294.             $exploitation $em->getRepository(Exploitation::class)->find($_POST['exploitationId']);
  295.             if ($exploitation) {
  296.                 $exploitation->setNomExploitation($_POST['exp_nomExp'])
  297.                     ->setNomResponsable($_POST['exp_nomResp'])
  298.                     ->setAdresse($_POST['exp_adresse'])
  299.                     ->setCodePostal($_POST['exp_cp'])
  300.                     ->setCommune($_POST['exp_ville'])
  301.                     ->setEmail($_POST['exp_mail'])
  302.                     ->setTelephone($_POST['exp_tel'])
  303.                     ->setMessage($_POST['exp_message'] ?? null);
  304.                 $em->flush();
  305.                 $this->addFlash('success',"Vos informations ont bien été enregistrées. Vous serez contacté prochainement.");
  306.                 return $this->redirectToRoute('home');
  307.             }
  308.             $this->addFlash('danger',"Un problème a été détécté, veuillez réessayer.");
  309.         }
  310.         return $this->render('questionnaire/afficher.html.twig', [
  311.             'questionnaire' => $questionnaire,
  312.             'listeQuestions' => $listeQuestions,
  313.             'questionsFixes' => $questionsFixes,
  314.             'produit' => $produit,
  315.             'EBE' => $EBE,
  316.             'annuites' => $annuites,
  317.             'pac' => $pac,
  318.             'resultat' => $resultat,
  319.             'ebe_produit' => $ebe_produit,
  320.             'annuites_ebe' => $annuites_ebe,
  321.             'aides_ebe' => $aides_ebe,
  322.             'dettes' => $dettes,
  323.             'noteTotale' => $noteTotal,
  324.             'commentaire_ebe_produit' => $commentaire_ebe_produit,
  325.             'commentaire_annuites_ebe' => $commentaire_annuites_ebe,
  326.             'commentaire_aides_ebe' => $commentaire_aide_ebe,
  327.             'commentaire_dettes' => $commentaire_dettes,
  328.             'commentaireGlobal' => $commentaireGlobal,
  329.             'resultatCategorie' => $resultatCategorie,
  330.             'categories' => $categories,
  331.             'departements' => $departements,
  332.             'systemes' => $systemes,
  333.             'exploitation' => $exploitation,
  334.             'mentionsLegales' => $mentionsLegales,
  335.         ]);
  336.     }
  337. }