src/Controller/AnnoncesController.php line 308

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Controller;
  7. use App\Services\Annonces\Elites\AbstractConstProfilsStrategiques as ProfilsConst;
  8. use App\Entity\AnnoncesVendeur;
  9. use App\Entity\Localisations;
  10. use App\Entity\Alertes;
  11. use App\Helper\Utils;
  12. use App\Services\Mailer;
  13. use App\Twig\TranslationExtension;
  14. use App\Services\ManagerEntity\ServicesPrestataireManagers;
  15. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  16. use Symfony\Component\HttpFoundation\RedirectResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use App\Entity\AnnoncesAcheteur;
  19. use App\Services\ManagerEntity\SecteursActiviteManagers;
  20. use App\Services\ManagerEntity\AnnoncesManagers;
  21. use Symfony\Component\Form\Extension\Core\Type\ButtonType;
  22. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  23. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  24. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  25. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  26. use Symfony\Component\Form\Extension\Core\Type\TextType;
  27. use Symfony\Component\Form\Forms;
  28. use Doctrine\ORM\EntityManagerInterface;
  29. use App\Services\ManagerEntity\AlertesManagers;
  30. use App\Services\ManagerEntity\LocalisationsManagers;
  31. use App\Services\Encryptage\AesEncrytageStrategy;
  32. use App\Entity\AnnoncesVendeurComplementPrixCession;
  33. use App\Form\Type\LaCoteFusacq\Etape1;
  34. use App\Form\Type\LaCoteFusacq\Etape2;
  35. use App\Form\Type\LaCoteFusacq\Etape3;
  36. use App\Form\Type\LaCoteFusacq\Etape4;
  37. use App\Form\Type\LaCoteFusacq\Etape5;
  38. use App\Repository\StatistiquesSecteursActiviteRepository;
  39. use App\Repository\HistoriqueStatsSecteursRepository;
  40. use App\Repository\SecteursActiviteRepository;
  41. use App\Services\PDFGenerator;
  42. use App\Repository\CoteFusacqBonusRepository;
  43. use App\Entity\CoteFusacqBonus;
  44. use App\Services\Annonces\CoteFusacq\CalculBonus;
  45. use App\Services\MetaTag;
  46. use App\Services\ManagerEntity\DroitsAccesManagers;
  47. use App\Services\Annonces\Elites\RechercheElite;
  48. use App\Helper\Statistiques;
  49. use App\Services\LogMarketingProvider;
  50.  
  51. class AnnoncesController extends EntityUsingController
  52. {
  53.     /**
  54.      * @var Mailer
  55.      */
  56.     private $mailer;
  57.     /**
  58.      * @var ParameterBagInterface
  59.      */
  60.     private $params;
  61.     /**
  62.      * @var ServicesPrestataireManagers
  63.      */
  64.     private $spm;
  65.     /**
  66.      * @var string
  67.      */
  68.     private $dns_fusacq;
  69.     /**
  70.      * @var AnnoncesManagers
  71.      */
  72.     private $am;
  73.     /**
  74.      * @var LocalisationsManagers
  75.      */
  76.     private $lm;
  77.     /**
  78.      * @var SecteursActiviteManagers
  79.      */
  80.     private $sm;
  81.     /**
  82.      * @var EntityManagerInterface
  83.      */
  84.     private $em;
  85.     
  86.     /**
  87.      * @var LogMarketingProvider
  88.      */
  89.     private $lmp;
  90.     public function __construct(Mailer $mailerParameterBagInterface $paramsServicesPrestataireManagers $spmAnnoncesManagers $amEntityManagerInterface $emLocalisationsManagers $lmSecteursActiviteManagers $sm,MetaTag $metaTagDroitsAccesManagers $damLogMarketingProvider $lmp)
  91.     {
  92.         $this->mailer $mailer;
  93.         $this->params $params;
  94.         $this->spm $spm;
  95.         $this->dns_fusacq $params->get('app.DNS')['FUSACQ'];
  96.         $this->am $am;
  97.         $this->em $em;
  98.         $this->lm $lm;
  99.         $this->sm $sm;
  100.         $this->metaTag $metaTag;
  101.         $this->dam $dam;
  102.         $this->lmp $lmp;
  103.     }
  104.     /**
  105.      * @param $lang
  106.      * @param $codePays
  107.      * @param $idAnnonce
  108.      *
  109.      * @return mixed
  110.      */
  111.     public function partager(Request $requestTranslationExtension $translationExtension$lang$codePays$idAnnonce$typeAnnonce$from)
  112.     {
  113.         if ($request->isMethod('post')) {
  114.             $currentUri $request->headers->get('referer');
  115.             $currentUri str_replace("partager=1"""$currentUri);
  116.             $error false;
  117.             
  118.             $idAnnonce $request->get('id_annonce');
  119.             
  120.             if (!$idAnnonce) {
  121.                 $this->addFlash('error'$translationExtension->translate("une erreur s'est produite, veuillez réessayer"$lang'''M'''));
  122.                 $error true;
  123.             }
  124.             
  125.             $emailDestinataire trim($request->get('email_destinataire'));
  126.             
  127.             if (!$emailDestinataire) {
  128.                 $this->addFlash('error'$translationExtension->translate("email du destinataire obligatoire"$lang'''M'''));
  129.                 $error true;
  130.             }
  131.             
  132.             $emailExpediteur trim($request->get('email_expediteur'));
  133.             
  134.             if (!$emailExpediteur) {
  135.                 $this->addFlash('error'$translationExtension->translate("email de l'expéditeur obligatoire"$lang'''M'''));
  136.                 $error true;
  137.             }
  138.             
  139.             $nomPrenom trim($request->get('nom_prenom'));
  140.             
  141.             if (!$nomPrenom) {
  142.                 $this->addFlash('error'$translationExtension->translate("nom et prénom obligatoires"$lang'''M'''));
  143.                 $error true;
  144.             }
  145.             
  146.             $commentaire $request->get('commentaire');
  147.             $captcha $request->get('g-recaptcha-response');
  148.             
  149.             if (!$captcha) {
  150.                 $this->addFlash('error'$translationExtension->translate("validation captcha obligatoire"$lang'''M'''));
  151.                 $error true;
  152.             } else {
  153.                 $secretKey $this->getParameter('RECAPTCHA_PRIVATE_KEY');
  154.                 $url 'https://www.google.com/recaptcha/api/siteverify?secret=' urlencode($secretKey) .  '&response=' urlencode($captcha);
  155.                 $response file_get_contents($url);
  156.                 $responseKeys json_decode($response,true);
  157.                 
  158.                 if (!$responseKeys["success"]) {
  159.                     $this->addFlash('error'$translationExtension->translate("captcha invalide"$lang'''M'''));
  160.                     $error true;
  161.                 }
  162.             }
  163.             
  164.             if ($error) {
  165.                 return $this->redirect($currentUri);
  166.             }
  167.             
  168.             $subject $translationExtension->translate('cette annonce sur Fusacq me semble intéressante'$lang'''M''');
  169.             
  170.             if ('V' == $typeAnnonce) {
  171.                 //$annonce = $this->getDoctrine()->getManager()->getRepository(AnnoncesVendeur::class)->getAnnonceArrayByIdAnnonce($idAnnonce);
  172.                 $annonce $this->am->getAnnonceVendeurArrayByIdAnnonce($idAnnonce);
  173.                 $expertRandom $this->spm->getAnnonceVendeurRandomByLocalisation(
  174.                     Utils::getLocalisationPlusPrecisPossible($annonce['id_pays'], $annonce['id_region'])
  175.                     );
  176.                 $lienAnnonce $this->generateUrl('reprendre_entreprise_details_annonce_vendeur', [
  177.                     'slug' => Utils::slugify($annonce['titre_annonce']),
  178.                     'nomLocalisation' => $annonce['nom_localisation_slug'],
  179.                     'idAnnonce' => $idAnnonce,
  180.                     'codePays' => $codePays
  181.                 ]);
  182.             } elseif ('A' == $typeAnnonce) {
  183.                 //$annonce = $this->getDoctrine()->getManager()->getRepository(AnnoncesAcheteur::class)->getAnnonceArrayByIdAnnonce($idAnnonce);
  184.                 $annonce $this->am->getAnnonceAcheteurArrayByIdAnnonce($idAnnonce);
  185.                 $expertRandom $this->spm->getRandomExpertByAnnonceAcheteurLocalisation(
  186.                     Utils::getLocalisationPlusPrecisPossible($annonce['id_pays'], $annonce['id_region']), 2
  187.                     );
  188.                 $lienAnnonce $this->generateUrl('vendre_entreprise_annonce_acquisition_details', [
  189.                     'slug' => Utils::slugify($annonce['titre_annonce']),
  190.                     'nomLocalisation' => $annonce['nom_localisation_slug'],
  191.                     'idAnnonce' => $idAnnonce,
  192.                     'codePays' => $codePays
  193.                 ]);
  194.             }
  195.             
  196.             $nomRegion '';
  197.             $localisationsFromDB $this->getDoctrine()->getManager()->getRepository(Localisations::class)
  198.             ->getNomLocalisationById(Utils::getLocalisationPlusPrecisPossible($annonce['id_pays'], $annonce['id_region']));
  199.             if (== count($localisationsFromDB)) { // si localisation departement+localisation pays alors on combine les deux
  200.                 $nomRegion $localisationsFromDB[1]['nom_localisation'].', '.$localisationsFromDB[0]['nom_localisation'];
  201.             }
  202.             if (== count($localisationsFromDB)) {
  203.                 $nomRegion $localisationsFromDB[0]['nom_localisation'];
  204.             }
  205.             
  206.             $varTemplate = [
  207.                 'commentaire' => $commentaire,
  208.                 'nomRegion' => ($nomRegion) ? $nomRegion '',
  209.                 'nomPrenom' => $nomPrenom,
  210.                 'emailExpediteur' => $emailExpediteur,
  211.                 'emailDestinataire' => $emailDestinataire,
  212.                 'annonce' => (isset($annonce) ? $annonce : []),
  213.                 'expertRandom' => (isset($expertRandom) ? $expertRandom : []),
  214.                 'lang' => $lang,
  215.                 'typeAnnonce' => $typeAnnonce,
  216.                 'lienAnnonce' => $lienAnnonce,
  217.                 'dns_fusacq' => $this->dns_fusacq
  218.             ];
  219.             
  220.             $this->mailer->sendmail(
  221.                 Mailer::$senderAdress['notification'],
  222.                 $emailDestinataire,
  223.                 null,
  224.                 null,
  225.                 $subject,
  226.                 null,
  227.                 null,
  228.                 'mails/templates/template_suggestion_FUSACQ.html.twig',
  229.                 $varTemplate,
  230.                 null
  231.                 );
  232.             
  233.             $this->addFlash('success'$translationExtension->translate("votre message a bien été envoyé"$lang'''M'''));
  234.             
  235.             return $this->redirect($currentUri);
  236.         }
  237.         
  238.         // Couleur selon template
  239.         if (== $from) { // reprendre une entreprise
  240.             $classColor1 "bleu";
  241.             $classColor2 "color_bleuclair";
  242.             $classColor3 "btn-bleu";
  243.         } elseif (== $from) { // vendre une entreprise
  244.             $classColor1 "vert";
  245.             $classColor2 "vert";
  246.             $classColor3 "btn-vert";
  247.         } elseif (== $from) { // ouvrir-capital
  248.             $classColor1 "orange-new";
  249.             $classColor2 "orange-new";
  250.             $classColor3 "btn-orange-new";
  251.         } else {
  252.             $classColor1 "bleu";
  253.             $classColor2 "color_bleuclair";
  254.             $classColor3 "btn-bleu";
  255.         }
  256.         $publicKey $this->getParameter('RECAPTCHA_PUBLIC_KEY');
  257.         
  258.         return $this->render(
  259.             'annonces/fragments/partager.html.twig',
  260.             [
  261.                 'lang' => $lang,
  262.                 'codePays' => $codePays,
  263.                 'idAnnonce' => $idAnnonce,
  264.                 'typeAnnonce' => $typeAnnonce,
  265.                 'classColor1' => $classColor1,
  266.                 'classColor2' => $classColor2,
  267.                 'classColor3' => $classColor3,
  268.                 'RECAPTCHA_PUBLIC_KEY' => $publicKey
  269.             ]
  270.             );
  271.     }
  272.     
  273.     public function alertes(Request $requestTranslationExtension $translationExtensionAlertesManagers $alm$codePays)
  274.     {
  275.         $lang $request->getSession()->get('lang');
  276.         $user $this->getUser();
  277.         
  278.         if (!$user) {
  279.             $this->addFlash('error'$translationExtension->translate("veuillez vous identifier pour consulter cette page"$lang'''M'''));
  280.             $uri $request->server->get('HTTP_REFERER'); // redirect to some page
  281.             if (empty($uri)) {
  282.                  return new RedirectResponse('/');
  283.             }
  284.             return new RedirectResponse($uri); // redirect to some page
  285.         }
  286.         
  287.         $alertes $alm->getUserAlertes($user->_get('login_utilisateur'), $lang);
  288.         
  289.              $metaTag $this->metaTag
  290.                 ->setTitle("Vos alertes")
  291.                 ->setDescription("Vos alertes");
  292.              
  293.         return $this->render(
  294.             'annonces/alertes/alertes.html.twig',
  295.             [
  296.                 'metaTag' => $metaTag,
  297.                 'alertes' => $alertes
  298.             ]
  299.             );
  300.     }
  301.     
  302.     public function formAlerte(Request $requestTranslationExtension $translationExtensionSecteursActiviteManagers $secteursActiviteManager$type$idAlerte null$codePays)
  303.     {
  304.         $lang $request->getSession()->get('lang');
  305.         $user $this->getUser();
  306.         
  307.         if (!$user) {
  308.             $this->addFlash('error'$translationExtension->translate("veuillez vous identifier pour consulter cette page"$lang'''M'''));
  309.             $uri $request->server->get('HTTP_REFERER'); // redirect to some page
  310.              if (empty($uri)) {
  311.                  return new RedirectResponse('/');
  312.             }
  313.             return new RedirectResponse($uri); // redirect to some page
  314.         }
  315.         
  316.         if ($request->isMethod('post')) {
  317.             $parametres $request->request->all();
  318.             
  319.             if (trim($parametres['titre_alerte'])) {
  320.                 $titre_alerte trim($parametres['titre_alerte']);
  321.             } else {
  322.                 $titre_alerte "Alerte ";
  323.                 
  324.                 if ($type == "vente") {
  325.                     $titre_alerte .= "de cession";
  326.                 } else {
  327.                     $titre_alerte .= "d'acquisition";
  328.                 }
  329.             }
  330.             
  331.             // ========= SECTEUR D'ACTIVITE =========
  332.             $id_secteur_activite $parametres['id_secteur'] ? $parametres['id_secteur'] : ",tous,";
  333.             
  334.             // Si l'utilisateur a selectionné un secteur mais pas ajouté dans la liste, on le rajoute
  335.             if (isset($parametres['id_secteur_activite3']) && $parametres['id_secteur_activite3'] != "0" && $parametres['id_secteur_activite3'] != "") {
  336.                 if ($id_secteur_activite == ",tous,") {
  337.                     $id_secteur_activite ',' $parametres['id_secteur_activite3'] . ",";
  338.                 } else {
  339.                     $id_secteur_activite .= "," $parametres['id_secteur_activite3'] . ",";
  340.                 }
  341.             } elseif (isset($parametres['id_secteur_activite2']) && $parametres['id_secteur_activite2'] != "0" && $parametres['id_secteur_activite2'] != "") {
  342.                 if ($id_secteur_activite == ",tous,") {
  343.                     $id_secteur_activite ',' $parametres['id_secteur_activite2'] . ",";
  344.                 } else {
  345.                     $id_secteur_activite .= "," $parametres['id_secteur_activite2'] . ",";
  346.                 }
  347.             } elseif (isset($parametres['id_secteur_activite']) && $parametres['id_secteur_activite'] != "0" && $parametres['id_secteur_activite'] != "") {
  348.                 if ($id_secteur_activite == ",tous,") {
  349.                     $id_secteur_activite ',' $parametres['id_secteur_activite'] . ",";
  350.                 } else {
  351.                     $id_secteur_activite .= "," $parametres['id_secteur_activite'] . ",";
  352.                 }
  353.             }
  354.             // ========= FIN SECTEUR D'ACTIVITE =========
  355.             
  356.             // ========= LOCALISATION =========
  357.             $id_localisations $parametres['id_localisation'] ? $parametres['id_localisation'] : ",tous,";
  358.             
  359.             // Si l'utilisateur a selectionné une localisation mais pas ajouté dans la liste, on le rajoute
  360.             if (isset($parametres['id_departement']) && $parametres['id_departement'] != "0" && $parametres['id_departement'] != "") {
  361.                 if ($id_localisations == ",tous,") {
  362.                     $id_localisations ',' $parametres['id_departement'] . ",";
  363.                 } else {
  364.                     $id_localisations .= "," $parametres['id_departement'] . ",";
  365.                 }
  366.             } elseif (isset($parametres['id_region']) && $parametres['id_region'] != "0" && $parametres['id_region'] != "") {
  367.                 if ($id_localisations == ",tous,") {
  368.                     $id_localisations ',' $parametres['id_region'] . ",";
  369.                 } else {
  370.                     $id_localisations .= "," $parametres['id_region'] . ",";
  371.                 }
  372.             } elseif (isset($parametres['id_pays']) && $parametres['id_pays'] != "0" && $parametres['id_pays'] != "") {
  373.                 if ($id_localisations == ",tous,") {
  374.                     $id_localisations ',' $parametres['id_pays'] . ",";
  375.                 } else {
  376.                     $id_localisations .= "," $parametres['id_pays'] . ",";
  377.                 }
  378.             }
  379.             // ========= FIN LOCALISATION =========
  380.             
  381.             
  382.             if ($type == "vente") {
  383.                // $nb_personnes = $parametres['nb_personnes'];
  384.                 
  385. //                switch ($nb_personnes) {
  386. //                    case '1':
  387. //                        $nb_personnes_min = null;
  388. //                        $nb_personnes_max = "9";
  389. //                        break;
  390. //                    case '2':
  391. //                        $nb_personnes_min = "10";
  392. //                        $nb_personnes_max = "50";
  393. //                        break;
  394. //                    case '3':
  395. //                        $nb_personnes_min = "50";
  396. //                        $nb_personnes_max = "100";
  397. //                        break;
  398. //                    case '4':
  399. //                        $nb_personnes_min = "100";
  400. //                        $nb_personnes_max = "200";
  401. //                        break;
  402. //                    case '5':
  403. //                        $nb_personnes_min = "200";
  404. //                        $nb_personnes_max = null;
  405. //                        break;
  406. //                    default:
  407. //                        $nb_personnes_min = null;
  408. //                        $nb_personnes_max = null;
  409. //                        break;
  410. //                }
  411.                 
  412.                 $ca explode(";"$parametres['ca']);
  413.                 $ca_min $ca[0] != "0" $ca[0].".0000" null;
  414.                 $ca_max $ca[1] != "20000000" $ca[1].".0000" null;
  415.                 
  416.                 
  417.                 $nb_p  explode(";"$parametres['nb_p']);
  418.                 $nb_personnes_min = ( $nb_p[0])??1;
  419.                 $nb_personnes_max = ( $nb_p[1])??NULL;
  420.                 
  421.                 
  422.                 $redressement_judiciaire $parametres['redressement_judiciaire'] ? $parametres['redressement_judiciaire'] : "indifferent";
  423.                 $type_cession $parametres['type_cession'] ? strtolower($parametres['type_cession']) : "indifferent";
  424.             } else {
  425.                 $nb_personnes_min null;
  426.                 $nb_personnes_max null;
  427.                 $ca_min null;
  428.                 $ca_max null;
  429.                 $redressement_judiciaire null;
  430.                 $type_cession null;
  431.             }
  432.             
  433.             if ($idAlerte) {
  434.                 $alerte $this->getDoctrine()->getRepository(Alertes::class)->findOneBy(['id_alerte' => $idAlerte]);
  435.                 
  436.                 // On verifie que l'alerte existe et qu'elle appartient à l'utilisateur
  437.                 if (!$alerte || $alerte->__get('login_utilisateur') != $user->_get('login_utilisateur')) {
  438.                     $this->addFlash('error'$translationExtension->translate("une erreur s'est produite, veuillez réessayer"$lang'''M'''));
  439.                     return $this->redirectToRoute('alertes', ['codePays' => $codePays]);
  440.                 }
  441.             } else {
  442.                 $alerte = new Alertes();
  443.             }
  444.             
  445.             $alerte->__set("type_annonce_surveillee"$type);
  446.             $alerte->__set("titre_alerte"$titre_alerte);
  447.             $alerte->__set("id_secteur_activite"$id_secteur_activite);
  448.             $alerte->__set("id_localisations"$this->removeLocalisationLetter($id_localisations));
  449.             $alerte->__set("nb_personnes_min"$nb_personnes_min);
  450.             $alerte->__set("nb_personnes_max"$nb_personnes_max);
  451.             $alerte->__set("ca_min"$ca_min);
  452.             $alerte->__set("ca_max"$ca_max);
  453.             $alerte->__set("redressement_judiciaire"$redressement_judiciaire);
  454.             $alerte->__set("type_cession"$type_cession);
  455.             
  456.             if (!$idAlerte) {
  457.                 $alerte->__set("login_utilisateur"$user->_get('login_utilisateur'));
  458.                 $alerte->__set("activation_sur_fusacqbuzz""oui");
  459.                 $alerte->__set("date_creation"date('Ymd'));
  460.             }
  461.             
  462.             
  463.             $identifiant_profil =  $parametres['identifiant_profil']??NULL;
  464.             $alerte->__set("identifiant_profil"$identifiant_profil);
  465.             
  466.             $this->em->persist $alerte );
  467.             $this->em->flush $alerte );
  468.             
  469.             if ($alerte->__get('id_alerte')) {
  470.                 if ($idAlerte) {
  471.                     $this->addFlash('success'$translationExtension->translate("votre alerte a bien été mise à jour"$lang'''M'''));
  472.                 } else {
  473.                     $this->addFlash('success'$translationExtension->translate("votre alerte a bien été créée"$lang'''M'''));
  474.                 }
  475.             } else {
  476.                 $this->addFlash('error'$translationExtension->translate("une erreur s'est produite, veuillez réessayer"$lang'''M'''));
  477.             }
  478.             
  479.             return $this->redirectToRoute('alertes', ['codePays' => $codePays]);
  480.         } else {
  481.             if ($idAlerte) {
  482.                 $alerte $this->getDoctrine()->getRepository(Alertes::class)->findOneBy(['id_alerte' => $idAlerte]);
  483.                 
  484.                 // On verifie que l'alerte existe et qu'elle appartient à l'utilisateur
  485.                 if (!$alerte || $alerte->__get('login_utilisateur') != $user->_get('login_utilisateur')) {
  486.                     $this->addFlash('error'$translationExtension->translate("une erreur s'est produite, veuillez réessayer"$lang'''M'''));
  487.                     return $this->redirectToRoute('alertes', ['codePays' => $codePays]);
  488.                 }
  489.                 
  490.                 $data $alerte;
  491.                 $action "modifier_alerte";
  492.                 $params = ['type' => $type'idAlerte' => $idAlerte'codePays' => $codePays];
  493.             } else {
  494.                 $data = [];
  495.                 $action "creer_alerte";
  496.                 $params = ['type' => $type'codePays' => $codePays];
  497.             }
  498.          
  499.             $parametres $this->prepareAlerteParameters($data);
  500.               
  501.             $pays $this->am->donne_option_select_pays_annonce_vente();
  502.             $regions = [];
  503.             $departements = [];
  504.             
  505.             $type_cession = [
  506.                 $translationExtension->translate('indifferent'$lang'''M''') => '',
  507.                 $translationExtension->translate('majoritaire'$lang'''M''') => 'majoritaire',
  508.                 $translationExtension->translate('minoritaire'$lang'''M''') => 'minoritaire',
  509.             ];
  510.             
  511.             $secteurs_activite1 $secteursActiviteManager->donne_option_select_secteurs_activite_niveau_1();
  512.             $secteurs_activite2 = [];
  513.             $secteurs_activite3 = [];
  514.             
  515.             /*if (isset($parametres['id_secteur_activite'])) {
  516.                 $secteurs_activite2 = $secteursActiviteManager->donne_option_select_secteurs_activite_enfant_by_secteur_activite_parent($parametres['id_secteur_activite']);
  517.                 $show_secteur_niveau_2 = true;
  518.             } else {
  519.                 $secteurs_activite2 = [];
  520.                 $show_secteur_niveau_2 = false;
  521.             }
  522.             
  523.             if (isset($parametres['id_secteur_activite2'])) {
  524.                 $secteurs_activite3 = $secteursActiviteManager->donne_option_select_secteurs_activite_enfant_by_secteur_activite_parent($parametres['id_secteur_activite2']);
  525.                 $show_secteur_niveau_3 = true;
  526.             } else {
  527.                 $secteurs_activite3 = [];
  528.                 $show_secteur_niveau_3 = false;
  529.             }*/
  530.             
  531.             $show_secteur_niveau_2 false;
  532.             $show_secteur_niveau_3 false;
  533.             
  534.             /*$nb_personnes = [
  535.                 $translationExtension->translate('indifferent', $lang, '', 'M', '') => '',
  536.                 $translationExtension->translate('< 10 personnes', $lang, '', 'M', '') => '1',
  537.                 $translationExtension->translate('10 - 50 personnes', $lang, '', 'M', '') => '2',
  538.                 $translationExtension->translate('50 - 100 personnes', $lang, '', 'M', '') => '3',
  539.                 $translationExtension->translate('100 - 200 personnes', $lang, '', 'M', '') => '4',
  540.                 $translationExtension->translate('> 200 personnes', $lang, '', 'M', '') => '5',
  541.             ];*/
  542.             
  543.             $redressement_judiciaire = [
  544.                 $translationExtension->translate('indifferent'$lang'''M''') => ''// value = indifferent
  545.                 $translationExtension->translate('non'$lang'''M''') => 'non',
  546.                 $translationExtension->translate('oui'$lang'''M''') => 'oui',
  547.             ];
  548.             if (!$parametres['titre_alerte']) {
  549.                 if ($type == "achat") {
  550.                     $parametres['titre_alerte'] = "Alerte d’acquisition";
  551.                 } else {
  552.                     $parametres['titre_alerte'] = "Alerte de cession";
  553.                 }
  554.             }
  555.             $formFactory Forms::createFormFactoryBuilder()->getFormFactory();
  556.             $form $formFactory->createNamedBuilder('')
  557.             ->add('titre_alerte'TextType::class, [
  558.                 'required' => true,
  559.                 'data' => $parametres['titre_alerte']
  560.             ])
  561.             ->add('id_pays'ChoiceType::class, [
  562.                 'choices' => $pays,
  563.             ])
  564.             ->add('id_region'ChoiceType::class, [
  565.                 'choices' => $regions,
  566.             ])
  567.             ->add('id_departement'ChoiceType::class, [
  568.                 'choices' => $departements,
  569.             ])
  570.             ->add('id_localisation'HiddenType::class, [
  571.                 'data' => $parametres['id_localisations'],
  572.             ])
  573.             ->add('ajouter_localisation'ButtonType::class)
  574.             ->add('id_secteur_activite'ChoiceType::class, [
  575.                 'choices' => $secteurs_activite1,
  576.                 'data' => ''
  577.             ])
  578.             ->add('id_secteur_activite2'ChoiceType::class, [
  579.                 'choices' => $secteurs_activite2,
  580.                 'data' => ''
  581.             ])
  582.             ->add('id_secteur_activite3'ChoiceType::class, [
  583.                 'choices' => $secteurs_activite3,
  584.                 'data' => ''
  585.             ])
  586.             ->add('id_secteur'HiddenType::class, [
  587.                 'data' => $parametres['id_secteur_activite'],
  588.             ])
  589.             ->add('ajouter_secteur_activite'ButtonType::class);
  590.             
  591.             if ($type == "vente") {
  592.                
  593.                $form
  594.                        ->add('ca'TextType::class, ['required' => false])
  595. //                        ->add('nb_personnes', ChoiceType::class, [
  596. //                            'choices' => $nb_personnes,
  597. //                            'required' => false,
  598. //                            'data' => $parametres['nb_personnes']
  599. //                        ])
  600.                         ->add('nb_p'TextType::class, ['required' => false])
  601.                        
  602.                 ->add('redressement_judiciaire'ChoiceType::class, [
  603.                     'required' => false,
  604.                     'choices' => $redressement_judiciaire,
  605.                     'choice_attr' => function ($choice) {
  606.                     return ['class' => 'form-check-input'];
  607.                     },
  608.                     'expanded' => true,
  609.                     'multiple' => false,
  610.                     'data' => $parametres['redressement_judiciaire']
  611.                         ])
  612.                 ->add('type_cession'ChoiceType::class, [
  613.                     'required' => false,
  614.                     'choices' => $type_cession,
  615.                     'choice_attr' => function ($choice) {
  616.                     return ['class' => 'form-check-input'];
  617.                     },
  618.                     'expanded' => true,
  619.                     'multiple' => false,
  620.                     'data' => $parametres['type_cession']
  621.                 ])
  622.                             
  623.                  ->add('identifiant_profil'HiddenType::class,
  624.                          [
  625.                              'attr' =>[ 
  626.                                  "multi-value" => $parametres['identifiant_profil']??null
  627.                              ],
  628.                              'data'=>$parametres['identifiant_profil']??null
  629.                          ]
  630.                 )  
  631.                 ;
  632.                     
  633.                $form ->add('ajouter_identifiant_profil'ButtonType::class);
  634.             }
  635.             
  636.             $form $form->add('enregistrer'SubmitType::class)
  637.             ->setAction($this->generateUrl($action$params))
  638.             ->setMethod('POST')
  639.             ->getForm();
  640.             
  641.             
  642.             $profils ProfilsConst::listProfilsStrategiquesByCategory();
  643.  
  644.             $metaTag = ($action =='modifier_alerte')? $this->metaTag ->setTitle("Modifier alerte") ->setDescription("Modifier alerte"):$this->metaTag ->setTitle("Créer alerte") ->setDescription("Créer alerte");
  645.             $accesElite $this->dam->checkIfThisUserHasDroitService($this->getUser(), RechercheElite::CODE_SERVICE); // ELITE      
  646.             return $this->render(
  647.                 "annonces/alertes/form_alerte_$type.html.twig",
  648.                 [
  649.                     'type' => $type,
  650.                     'parametres' => $parametres,
  651.                     'show_secteur_niveau_2' => $show_secteur_niveau_2,
  652.                     'show_secteur_niveau_3' => $show_secteur_niveau_3,
  653.                     'idAlerte' => $idAlerte,
  654.                     "profils" => $profils,
  655.                     "alerte"=>$alerte??NULL,
  656.                     "data" => [
  657.                         "elite"=>$accesElite,
  658.                         "action"=>$action??NULL
  659.                     ],
  660.                      'metaTag' => $metaTag,
  661.                     'form' => $form->createView()
  662.                 ]
  663.                 );
  664.         }
  665.     }
  666.     
  667.     public  function complementAnnonceVendeurSuiteRetraitEtape1(Request $requestAesEncrytageStrategy $aesStatistiquesSecteursActiviteRepository $statistiquesRepoHistoriqueStatsSecteursRepository $historiquesStatsRepoSecteursActiviteRepository $secteursRepoCoteFusacqBonusRepository $cfr$codePays) {
  668.         $code $request->query->get('ref');
  669.         $version $request->query->get('version');
  670.         
  671.         // Si pas de code
  672.         if (!$code) {
  673.             return $this->redirectToRoute('index');
  674.         }
  675.         
  676.         $id_annonce_vendeur $aes->decryptage($code);
  677.         
  678.         // Si $id_annonce_vendeur pas conforme
  679.         if (!is_numeric($id_annonce_vendeur)) {
  680.             return $this->redirectToRoute('index');
  681.         }
  682.         
  683.         $annonce $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
  684.         
  685.         // Si annonce introuvable
  686.         if (!$annonce) {
  687.             return $this->redirectToRoute('index');
  688.         }
  689.         
  690.         $user $this->getUser();
  691.         
  692.         // Si pas authentifié
  693.         if (!$user) {
  694.             $this->addFlash("error""Veuillez-vous authentifier");
  695.             return $this->redirectToRoute('index');
  696.         }
  697.         
  698.         // Si l'annonce n'appartient pas à l'utilisateur
  699.         if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
  700.             return $this->redirectToRoute('index');
  701.         }
  702.         
  703.         // On met la relance cote_fusacq à traité
  704.         $annonce->_set('relance_cote_fusacq''traité');
  705.         $this->em->persist($annonce);
  706.         $this->em->flush();
  707.         
  708.         $prix_cession number_format((int) $annonce->_get('prix_cession'), 0","" ");
  709.         
  710.         $annoncesVendeurComplementPrixCession $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  711.         
  712.         if (!$annoncesVendeurComplementPrixCession) {
  713.             $annoncesVendeurComplementPrixCession = new AnnoncesVendeurComplementPrixCession();
  714.             $annoncesVendeurComplementPrixCession->__set('dateCreation'date('Ymd'));
  715.             $annoncesVendeurComplementPrixCession->__set('idAnnonceVendeur'$id_annonce_vendeur);
  716.             $this->em->persist($annoncesVendeurComplementPrixCession);
  717.             $this->em->flush();
  718.             
  719.             // On ajoute un log action pour la création d'un AnnoncesVendeurComplementPrixCession (Transaction de référence)
  720.             // LOG ID 132 = Création Transaction de référence (La cote FUSACQ)
  721.             $this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(132), $user->_get('type_utilisateur'), $id_annonce_vendeur);
  722.         } elseif ($annoncesVendeurComplementPrixCession->__get('statut') == "en_cours" || $annoncesVendeurComplementPrixCession->__get('statut') == "abandon") {
  723.             // On met à jour la dateCreation pour actualiser les bonus à Ymd
  724.             $annoncesVendeurComplementPrixCession->__set('dateCreation'date('Ymd'));
  725.             
  726.             // LOG ID 132 = Création Transaction de référence (La cote FUSACQ)
  727.             $this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(132), $user->_get('type_utilisateur'), $id_annonce_vendeur);
  728.         }
  729.         
  730.         if ($annoncesVendeurComplementPrixCession->__get('statut') != "vendue") {
  731.             // On enregistre le statut "vendue" car l'utilisateur a cliqué sur "oui" dans le mail
  732.             $annoncesVendeurComplementPrixCession->__set('statut'"vendue");
  733.             $this->em->persist($annoncesVendeurComplementPrixCession);
  734.             $this->em->flush();
  735.         }
  736.         
  737.         // Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
  738.         /*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
  739.             return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
  740.         }*/
  741.         
  742.         $form $this->createFormForStep(1$annoncesVendeurComplementPrixCession);
  743.         
  744.         $form->handleRequest($request);
  745.         
  746.         if ($form->isSubmitted() && $form->isValid()) {
  747.             $this->em->persist($annoncesVendeurComplementPrixCession);
  748.             $this->em->flush();
  749.             
  750.             // Redirection vers l'étape 2
  751.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_2', ['codePays' => $codePays'ref' => $code]);
  752.         } elseif ($form->isSubmitted()) {
  753.             // Annule les changements trackés par Doctrine
  754.             $this->em->refresh($annoncesVendeurComplementPrixCession);
  755.         }
  756.         
  757.         // =====================  ELEMENTS POUR LE BONUS =====================
  758.         // On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
  759.         $bonus $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  760.         $update_bonus false;
  761.         
  762.         if (!$bonus) {
  763.             $bonus = new CoteFusacqBonus();
  764.             $bonus->__set('idAnnonceVendeur'$id_annonce_vendeur);
  765.             $bonus->__set('dateCreation'date('Ymd'));
  766.             $update_bonus true;
  767.         }
  768.         
  769.         if (!$bonus->__get('idSecteurActivite')) {
  770.             $bonus->__set('idSecteurActivite'$annonce->_get('id_secteur_activite'));
  771.             $update_bonus true;
  772.         }
  773.         
  774.         if ($bonus->__get('nomSecteurActivite')) {
  775.             $nom_secteur_activite $bonus->__get('nomSecteurActivite');
  776.         } else {
  777.             $nom_secteur_activite $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
  778.             $bonus->__set('nomSecteurActivite'$nom_secteur_activite);
  779.             $update_bonus true;
  780.         }
  781.         
  782.         if ($bonus->__get('anneeVente')) {
  783.             $annee_vente $bonus->__get('anneeVente');
  784.         } else {
  785.             $annee_vente $annoncesVendeurComplementPrixCession->__get('dateCreation') ? substr($annoncesVendeurComplementPrixCession->__get('dateCreation'), 04) : date('Y');
  786.             $bonus->__set('anneeVente'$annee_vente);
  787.             $update_bonus true;
  788.         }
  789.         
  790.         if ($bonus->__get('classementAnnee')) {
  791.             $classement_annee $bonus->__get('classementAnnee');
  792.         } else {
  793.             $nb_annonces_vendues $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("annee"$annoncesVendeurComplementPrixCession->__get('dateCreation'));
  794.             $classement_annee $nb_annonces_vendues 1;
  795.             $bonus->__set('classementAnnee'$classement_annee);
  796.             $update_bonus true;
  797.         }
  798.         
  799.         if ($bonus->__get('classement1an')) {
  800.             $classement_1an $bonus->__get('classement1an');
  801.         } else {
  802.             $nb_annonces_vendues $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("12mois"$annoncesVendeurComplementPrixCession->__get('dateCreation'));
  803.             $classement_1an $nb_annonces_vendues 1;
  804.             $bonus->__set('classement1an'$classement_1an);
  805.             $update_bonus true;
  806.         }
  807.         
  808.         if ($bonus->__get('classement10ans')) {
  809.             $classement_10ans $bonus->__get('classement10ans');
  810.         } else {
  811.             $nb_annonces_vendues $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("120mois"$annoncesVendeurComplementPrixCession->__get('dateCreation'));
  812.             $classement_10ans $nb_annonces_vendues 1;
  813.             $bonus->__set('classement10ans'$classement_10ans);
  814.             $update_bonus true;
  815.         }
  816.         
  817.         if ($bonus->__get('nbAnnonce12mois') !== null) {
  818.             $nb_annonce_12mois $bonus->__get('nbAnnonce12mois');
  819.         } else {
  820.             $stats_12mois $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 12]);
  821.             $nb_annonce_12mois $stats_12mois->getNb_annonces_deposees();
  822.             $bonus->__set('nbAnnonce12mois'$nb_annonce_12mois);
  823.             $update_bonus true;
  824.         }
  825.         
  826.         $reference_nb_annonces_diffusees $nb_annonce_12mois;
  827.         
  828.         if ($bonus->__get('nbAnnonce24mois') !== null) {
  829.             $nb_annonce_24mois $bonus->__get('nbAnnonce24mois');
  830.         } else {
  831.             $stats_24mois $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 24]);
  832.             $nb_annonce_24mois $stats_24mois->getNb_annonces_deposees();
  833.             $bonus->__set('nbAnnonce24mois'$nb_annonce_24mois);
  834.             $update_bonus true;
  835.         }
  836.         
  837.         // Si nb_annonce identique à reference, on n'affiche pas la donnée
  838.         if ($nb_annonce_24mois == $reference_nb_annonces_diffusees) {
  839.             $show_nb_annonce_24mois false;
  840.         } else {
  841.             $show_nb_annonce_24mois true;
  842.             $reference_nb_annonces_diffusees $nb_annonce_24mois;
  843.         }
  844.         
  845.         if ($bonus->__get('nbAnnonce60mois') !== null) {
  846.             $nb_annonce_60mois $bonus->__get('nbAnnonce60mois');
  847.         } else {
  848.             $stats_60mois $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 60]);
  849.             $nb_annonce_60mois $stats_60mois->getNb_annonces_deposees();
  850.             $bonus->__set('nbAnnonce60mois'$nb_annonce_60mois);
  851.             $update_bonus true;
  852.         }
  853.         
  854.         // Si nb_annonce identique à reference, on n'affiche pas la donnée
  855.         if ($nb_annonce_60mois == $reference_nb_annonces_diffusees) {
  856.             $show_nb_annonce_60mois false;
  857.         } else {
  858.             $show_nb_annonce_60mois true;
  859.             $reference_nb_annonces_diffusees $nb_annonce_60mois;
  860.         }
  861.         
  862.         if ($bonus->__get('nbAnnonce120mois') !== null) {
  863.             $nb_annonce_120mois $bonus->__get('nbAnnonce120mois');
  864.         } else {
  865.             $stats_120mois $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 120]);
  866.             $nb_annonce_120mois $stats_120mois->getNb_annonces_deposees();
  867.             $bonus->__set('nbAnnonce120mois'$nb_annonce_120mois);
  868.             $update_bonus true;
  869.         }
  870.         
  871.         // Si nb_annonce identique à reference, on n'affiche pas la donnée
  872.         if ($nb_annonce_120mois == $reference_nb_annonces_diffusees) {
  873.             $show_nb_annonce_120mois false;
  874.         } else {
  875.             $show_nb_annonce_120mois true;
  876.             $reference_nb_annonces_diffusees $nb_annonce_120mois;
  877.         }
  878.         
  879.         if ($bonus->__get('classementSecteurActivite')) {
  880.             $classement_secteur_activite $bonus->__get('classementSecteurActivite');
  881.         } else {
  882.             if (!$stats_60mois) {
  883.                 $stats_60mois $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 60]);
  884.             }
  885.             
  886.             $classement_secteur_activite $stats_60mois->getRang_secteur_nb_annonces_deposees();
  887.             $bonus->__set('classementSecteurActivite'$classement_secteur_activite);
  888.             $update_bonus true;
  889.         }
  890.         
  891.         if ($bonus->__get('nbSecteurs3') !== null) {
  892.             $nb_secteurs_3 $bonus->__get('nbSecteurs3');
  893.         } else {
  894.             $nb_secteurs_3 $secteursRepo->donneNbSecteursParNiveau(3);
  895.             $bonus->__set('nbSecteurs3'$nb_secteurs_3);
  896.             $update_bonus true;
  897.         }
  898.         
  899.         if ($bonus->__get('nomSecteurActivite2')) {
  900.             $nom_secteur_activite_2 $bonus->__get('nomSecteurActivite2');
  901.         } else {
  902.             $nom_secteur_activite_2 $this->sm->getStringNomSecteurActiviteById(substr((string) $annonce->_get('id_secteur_activite'), 03));
  903.             $bonus->__set('nomSecteurActivite2'$nom_secteur_activite_2);
  904.             $update_bonus true;
  905.         }
  906.         
  907.         if ($bonus->__get('classementSecteurActivite2')) {
  908.             $classement_secteur_activite_2 $bonus->__get('classementSecteurActivite2');
  909.         } else {
  910.             $stats_60mois_secteur_2 $statistiquesRepo->findOneBy(['id_secteur_activite' => substr((string) $annonce->_get('id_secteur_activite'), 03), 'nb_mois' => 60]);
  911.             $classement_secteur_activite_2 $stats_60mois_secteur_2->getRang_secteur_nb_annonces_deposees();
  912.             $bonus->__set('classementSecteurActivite2'$classement_secteur_activite_2);
  913.             $update_bonus true;
  914.         }
  915.         
  916.         if ($bonus->__get('nbSecteurs2') !== null) {
  917.             $nb_secteurs_2 $bonus->__get('nbSecteurs2');
  918.         } else {
  919.             $nb_secteurs_2 $secteursRepo->donneNbSecteursParNiveau(2);
  920.             $bonus->__set('nbSecteurs2'$nb_secteurs_2);
  921.             $update_bonus true;
  922.         }
  923.         
  924.         if ($bonus->__get('nbAnnoncesSecteurActivite2') !== null) {
  925.             $nb_annonces_secteur_activite_2 $bonus->__get('nbAnnoncesSecteurActivite2');
  926.         } else {
  927.             $nb_annonces_secteur_activite_2 $stats_60mois_secteur_2->getNb_annonces_deposees();
  928.             $bonus->__set('nbAnnoncesSecteurActivite2'$nb_annonces_secteur_activite_2);
  929.             $update_bonus true;
  930.         }
  931.         
  932.         if ($bonus->__get('anneesHistorique') && $bonus->__get('historiqueNbAnnoncesDeposees')) {
  933.             $historique unserialize($bonus->__get('historiqueNbAnnoncesDeposees'));
  934.             $annees_historique explode(","$bonus->__get('anneesHistorique'));
  935.         } else {
  936.             $historique = [];
  937.             $annees_historique = [];
  938.             
  939.             // On génère la date de début à 10 ans avant et 1 mois (car on veut 10 ans d'historique, et les stats du mois en cours ne sont pas encore disponibles)
  940.             $date = \DateTime::createFromFormat('Ym'substr($annoncesVendeurComplementPrixCession->__get('dateCreation'), 06));
  941.             $mois $date->format('m');
  942.             
  943.             // Si pas Janvier, on retire 10 ans et 1 mois
  944.             if ($mois != "01") {
  945.                 $date->sub(new \DateInterval('P10Y1M'));
  946.                 // Sinon on retire 10 ans
  947.             } else {
  948.                 $date->sub(new \DateInterval('P10Y'));
  949.             }
  950.             
  951.             // Date au format YYYY-MM-DD
  952.             $date_calcul $date->format('Y-m-01');
  953.             
  954.             for ($i 0$i 10$i++) {
  955.                 // On stock l'année
  956.                 $annees_historique[] = substr($date_calcul04);
  957.                 $historique[$i] = $historiquesStatsRepo->getStatsBy($annonce->_get('id_secteur_activite'), 'nb_annonces_deposees'12$date_calcul);
  958.                 // Ajoute 1 an
  959.                 $date->add(new \DateInterval('P1Y'));
  960.                 
  961.                 // Date au format YYYY-MM-DD
  962.                 $date_calcul $date->format('Y-m-01');
  963.             }
  964.             
  965.             $bonus->__set('anneesHistorique'implode(","$annees_historique));
  966.             $bonus->__set('historiqueNbAnnoncesDeposees'serialize($historique));
  967.             $update_bonus true;
  968.         }
  969.         
  970.         if ($update_bonus) {
  971.             $this->em->persist($bonus);
  972.             $this->em->flush();
  973.         }
  974.         
  975.         // ====================  FIN ELEMENTS POUR LE BONUS ===================
  976.         
  977.         return $this->render('annonces/complement-annonce-vendeur/etape1.html.twig', [
  978.             'id_annonce_vendeur' => $id_annonce_vendeur,
  979.             'prix_cession' => $prix_cession,
  980.             'form' => $form->createView(),
  981.             'nom_secteur_activite' => $nom_secteur_activite,
  982.             'annee_vente' => $annee_vente,
  983.             'classement_annee' => $classement_annee,
  984.             'classement_1an' => $classement_1an,
  985.             'classement_10ans' => $classement_10ans,
  986.             'nb_annonce_12mois' => $nb_annonce_12mois,
  987.             'nb_annonce_24mois' => $nb_annonce_24mois,
  988.             'nb_annonce_60mois' => $nb_annonce_60mois,
  989.             'nb_annonce_120mois' => $nb_annonce_120mois,
  990.             'show_nb_annonce_24mois' => $show_nb_annonce_24mois,
  991.             'show_nb_annonce_60mois' => $show_nb_annonce_60mois,
  992.             'show_nb_annonce_120mois' => $show_nb_annonce_120mois,
  993.             'classement_secteur_activite' => $classement_secteur_activite,
  994.             'nb_secteurs_3' => $nb_secteurs_3,
  995.             'nom_secteur_activite_2' => $nom_secteur_activite_2,
  996.             'classement_secteur_activite_2' => $classement_secteur_activite_2,
  997.             'nb_secteurs_2' => $nb_secteurs_2,
  998.             'nb_annonces_secteur_activite_2' => $nb_annonces_secteur_activite_2,
  999.             'historique' => $historique,
  1000.             'annees_historique' => $annees_historique,
  1001.             'version' => $version
  1002.         ]);
  1003.     }
  1004.     
  1005.     public  function complementAnnonceVendeurSuiteRetraitEtape1bis(Request $requestAesEncrytageStrategy $aesStatistiquesSecteursActiviteRepository $statistiquesRepoHistoriqueStatsSecteursRepository $historiquesStatsRepoSecteursActiviteRepository $secteursRepo$codePays) {
  1006.         $code $request->query->get('ref');
  1007.         
  1008.         // Si pas de code
  1009.         if (!$code) {
  1010.             return $this->redirectToRoute('index');
  1011.         }
  1012.         
  1013.         $id_annonce_vendeur $aes->decryptage($code);
  1014.         
  1015.         // Si $id_annonce_vendeur pas conforme
  1016.         if (!is_numeric($id_annonce_vendeur)) {
  1017.             return $this->redirectToRoute('index');
  1018.         }
  1019.         
  1020.         $annonce $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
  1021.         
  1022.         // Si annonce introuvable
  1023.         if (!$annonce) {
  1024.             return $this->redirectToRoute('index');
  1025.         }
  1026.         
  1027.         $user $this->getUser();
  1028.         
  1029.         // Si pas authentifié
  1030.         if (!$user) {
  1031.             $this->addFlash("error""Veuillez-vous authentifier");
  1032.             return $this->redirectToRoute('index');
  1033.         }
  1034.         
  1035.         // Si l'annonce n'appartient pas à l'utilisateur
  1036.         if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
  1037.             return $this->redirectToRoute('index');
  1038.         }
  1039.         
  1040.         $annoncesVendeurComplementPrixCession $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  1041.         
  1042.         // Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
  1043.         if ($annoncesVendeurComplementPrixCession && $annoncesVendeurComplementPrixCession->isFullyCompleted()) {
  1044.             return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays'ref' => $code]);
  1045.         }
  1046.         
  1047.         if (!$annoncesVendeurComplementPrixCession) {
  1048.             $annoncesVendeurComplementPrixCession = new AnnoncesVendeurComplementPrixCession();
  1049.             $annoncesVendeurComplementPrixCession->__set('dateCreation'date('Ymd'));
  1050.             $annoncesVendeurComplementPrixCession->__set('idAnnonceVendeur'$id_annonce_vendeur);
  1051.             $this->em->persist($annoncesVendeurComplementPrixCession);
  1052.             $this->em->flush();
  1053.             
  1054.             // On ajoute un log action pour la création d'un AnnoncesVendeurComplementPrixCession (Transaction de référence)
  1055.             // LOG ID 134 = Clic Vente en cours Transaction de référence (La Cote FUSACQ)
  1056.             $this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(134), $user->_get('type_utilisateur'), $id_annonce_vendeur);
  1057.         }
  1058.         
  1059.         // On enregistre le statut "en_cours" car l'utilisateur a cliqué sur "en cours" dans le mail
  1060.         $annoncesVendeurComplementPrixCession->__set('statut'"en_cours");
  1061.         $this->em->persist($annoncesVendeurComplementPrixCession);
  1062.         $this->em->flush();
  1063.         
  1064.         // On remet à zéro la relance cote_fusacq
  1065.         //$annonce->_set('date_relance_cote_fusacq', null);
  1066.         //$annonce->_set('relance_cote_fusacq', null);
  1067.         //$this->em->persist($annonce);
  1068.         //$this->em->flush();
  1069.         
  1070.         // =====================  ELEMENTS POUR LE BONUS =====================
  1071.         $nom_secteur_activite $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
  1072.         
  1073.         // statistiques secteurs activite
  1074.         $nb_annonces_vendues $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("annee"date('Ymd'));
  1075.         $classement_annee $nb_annonces_vendues 1;
  1076.         
  1077.         $stats_12mois $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 12]);
  1078.         $stats_24mois $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 24]);
  1079.         $stats_60mois $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 60]);
  1080.         $stats_120mois $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 120]);
  1081.         
  1082.         $classement_secteur_activite $stats_60mois->getRang_secteur_nb_annonces_deposees();
  1083.         $nb_secteurs_3 $secteursRepo->donneNbSecteursParNiveau(3);
  1084.         $nom_secteur_activite_2 $this->sm->getStringNomSecteurActiviteById(substr((string) $annonce->_get('id_secteur_activite'), 03));
  1085.         $stats_60mois_secteur_2 $statistiquesRepo->findOneBy(['id_secteur_activite' => substr((string) $annonce->_get('id_secteur_activite'), 03), 'nb_mois' => 60]);
  1086.         $classement_secteur_activite_2 $stats_60mois_secteur_2->getRang_secteur_nb_annonces_deposees();
  1087.         $nb_secteurs_2 $secteursRepo->donneNbSecteursParNiveau(2);
  1088.         $nb_annonces_secteur_activite_2 $stats_60mois_secteur_2->getNb_annonces_deposees();
  1089.         // ====================  FIN ELEMENTS POUR LE BONUS ===================
  1090.         
  1091.         return $this->render('annonces/complement-annonce-vendeur/etape1bis.html.twig', [
  1092.             'id_annonce_vendeur' => $id_annonce_vendeur,
  1093.             'nom_secteur_activite' => $nom_secteur_activite,
  1094.             'classement_annee' => $classement_annee,
  1095.             'stats_12mois' => $stats_12mois,
  1096.             'stats_24mois' => $stats_24mois,
  1097.             'stats_60mois' => $stats_60mois,
  1098.             'stats_120mois' => $stats_120mois,
  1099.             'classement_secteur_activite' => $classement_secteur_activite,
  1100.             'nb_secteurs_3' => $nb_secteurs_3,
  1101.             'nom_secteur_activite_2' => $nom_secteur_activite_2,
  1102.             'classement_secteur_activite_2' => $classement_secteur_activite_2,
  1103.             'nb_secteurs_2' => $nb_secteurs_2,
  1104.             'nb_annonces_secteur_activite_2' => $nb_annonces_secteur_activite_2,
  1105.         ]);
  1106.     }
  1107.     
  1108.     public  function complementAnnonceVendeurSuiteRetraitEtape1ter(Request $requestAesEncrytageStrategy $aes$codePays) {
  1109.         $code $request->query->get('ref');
  1110.         
  1111.         // Si pas de code
  1112.         if (!$code) {
  1113.             return $this->redirectToRoute('index');
  1114.         }
  1115.         
  1116.         $id_annonce_vendeur $aes->decryptage($code);
  1117.         
  1118.         // Si $id_annonce_vendeur pas conforme
  1119.         if (!is_numeric($id_annonce_vendeur)) {
  1120.             return $this->redirectToRoute('index');
  1121.         }
  1122.         
  1123.         $annonce $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
  1124.         
  1125.         // Si annonce introuvable
  1126.         if (!$annonce) {
  1127.             return $this->redirectToRoute('index');
  1128.         }
  1129.         
  1130.         $user $this->getUser();
  1131.         
  1132.         // Si pas authentifié
  1133.         if (!$user) {
  1134.             $this->addFlash("error""Veuillez-vous authentifier");
  1135.             return $this->redirectToRoute('index');
  1136.         }
  1137.         
  1138.         // Si l'annonce n'appartient pas à l'utilisateur
  1139.         if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
  1140.             return $this->redirectToRoute('index');
  1141.         }
  1142.         
  1143.         $annoncesVendeurComplementPrixCession $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  1144.         
  1145.         // Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
  1146.         if ($annoncesVendeurComplementPrixCession && $annoncesVendeurComplementPrixCession->isFullyCompleted()) {
  1147.             return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays'ref' => $code]);
  1148.         }
  1149.         
  1150.         if (!$annoncesVendeurComplementPrixCession) {
  1151.             $annoncesVendeurComplementPrixCession = new AnnoncesVendeurComplementPrixCession();
  1152.             $annoncesVendeurComplementPrixCession->__set('dateCreation'date('Ymd'));
  1153.             $annoncesVendeurComplementPrixCession->__set('idAnnonceVendeur'$id_annonce_vendeur);
  1154.             $this->em->persist($annoncesVendeurComplementPrixCession);
  1155.             $this->em->flush();
  1156.             
  1157.             // On ajoute un log action pour la création d'un AnnoncesVendeurComplementPrixCession (Transaction de référence)
  1158.             // LOG ID 135 = Clic Opération Abandonnée Transaction de référence (La Cote FUSACQ)
  1159.             $this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(135), $user->_get('type_utilisateur'), $id_annonce_vendeur);
  1160.         }
  1161.         
  1162.         // On enregistre le statut "abandon" car l'utilisateur a cliqué sur "abandon" dans le mail
  1163.         $annoncesVendeurComplementPrixCession->__set('statut'"abandon");
  1164.         $this->em->persist($annoncesVendeurComplementPrixCession);
  1165.         $this->em->flush();
  1166.         
  1167.         // On abandonne la relance cote_fusacq
  1168.         $annonce->_set('relance_cote_fusacq''abandon');
  1169.         $this->em->persist($annonce);
  1170.         $this->em->flush();
  1171.         
  1172.         $nb_annonces_vendues $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("annee"date('Ymd'));
  1173.         $classement_annee $nb_annonces_vendues 1;
  1174.         
  1175.         return $this->render('annonces/complement-annonce-vendeur/etape1ter.html.twig', [
  1176.             'id_annonce_vendeur' => $id_annonce_vendeur,
  1177.             'classement_annee' => $classement_annee
  1178.         ]);
  1179.     }
  1180.     
  1181.     public  function complementAnnonceVendeurSuiteRetraitEtape2(Request $requestAesEncrytageStrategy $aesStatistiquesSecteursActiviteRepository $statistiquesRepoHistoriqueStatsSecteursRepository $historiquesStatsRepoSecteursActiviteRepository $secteursRepoCoteFusacqBonusRepository $cfrCalculBonus $cb$codePays) {
  1182.         $code $request->query->get('ref');
  1183.         
  1184.         // Si pas de code
  1185.         if (!$code) {
  1186.             return $this->redirectToRoute('index');
  1187.         }
  1188.         
  1189.         $id_annonce_vendeur $aes->decryptage($code);
  1190.         
  1191.         // Si $id_annonce_vendeur pas conforme
  1192.         if (!is_numeric($id_annonce_vendeur)) {
  1193.             return $this->redirectToRoute('index');
  1194.         }
  1195.         
  1196.         $annonce $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
  1197.         
  1198.         // Si annonce introuvable
  1199.         if (!$annonce) {
  1200.             return $this->redirectToRoute('index');
  1201.         }
  1202.         
  1203.         $user $this->getUser();
  1204.         
  1205.         // Si pas authentifié
  1206.         if (!$user) {
  1207.             $this->addFlash("error""Veuillez-vous authentifier");
  1208.             return $this->redirectToRoute('index');
  1209.         }
  1210.         
  1211.         // Si l'annonce n'appartient pas à l'utilisateur
  1212.         if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
  1213.             return $this->redirectToRoute('index');
  1214.         }
  1215.         
  1216.         $annoncesVendeurComplementPrixCession $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  1217.         
  1218.         if (!$annoncesVendeurComplementPrixCession) {
  1219.             $this->addFlash('error'"Une erreur s'est produite, veuillez réessayer");
  1220.             // Redirection vers l'étape 1
  1221.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays'ref' => $code]);
  1222.         }
  1223.         
  1224.         // On vérifie que les champs de l'etape 1 sont bien remplis
  1225.         if (!$annoncesVendeurComplementPrixCession->isEtape1Completed()) {
  1226.             $this->addFlash('error'"Une erreur s'est produite, veuillez réessayer");
  1227.             // Redirection vers l'étape 1
  1228.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays'ref' => $code]);
  1229.         }
  1230.         
  1231.         // Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
  1232.         /*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
  1233.             return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
  1234.         }*/
  1235.         
  1236.         $prix_cession_final number_format((int) $annoncesVendeurComplementPrixCession->__get('prixCession'), 0","" ");
  1237.         $nom_secteur_activite $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
  1238.         
  1239.         $annee_n intval(str_replace(' '''$annonce->_get('annee_n')));
  1240.         $annee_nmoinsun $annee_n 1;
  1241.         $annee_nmoinsdeux $annee_n 2;
  1242.         
  1243.         $ca_n $annonce->_get('ca_n') !== null ? (int) $annonce->_get('ca_n') : null;
  1244.         $ebe_n $annonce->_get('EBE_n') !== null ? (int) $annonce->_get('EBE_n') : null;
  1245.         $rex_n $annonce->_get('resultat_exploitation_n') !== null ? (int) $annonce->_get('resultat_exploitation_n') : null;
  1246.         $rn_n $annonce->_get('resultat_net_n') !== null ? (int) $annonce->_get('resultat_net_n') : null;
  1247.         $nb_personnes_n $annonce->_get('nb_personnes_n') !== null ? (int) $annonce->_get('nb_personnes_n') : null;
  1248.         $tresorerie_nette $annonce->_get('tresorerie_nette') !== null ? (int) $annonce->_get('tresorerie_nette') : null;
  1249.         $dettes_financieres $annonce->_get('dettes_financieres') !== null ? (int) $annonce->_get('dettes_financieres') : null;
  1250.         $ca_nmoinsun $annonce->_get('ca_nmoinsun') !== null ? (int) $annonce->_get('ca_nmoinsun') : null;
  1251.         $ebe_nmoinsun $annonce->_get('EBE_nmoinsun') !== null ? (int) $annonce->_get('EBE_nmoinsun') : null;
  1252.         $rex_nmoinsun $annonce->_get('resultat_exploitation_nmoinsun') !== null ? (int) $annonce->_get('resultat_exploitation_nmoinsun') : null;
  1253.         $rn_nmoinsun $annonce->_get('resultat_net_nmoinsun') !== null ? (int) $annonce->_get('resultat_net_nmoinsun') : null;
  1254.         $nb_personnes_nmoinsun $annonce->_get('nb_personnes_nmoinsun') !== null ? (int) $annonce->_get('nb_personnes_nmoinsun') : null;
  1255.         $ca_nmoinsdeux $annonce->_get('ca_nmoinsdeux') !== null ? (int) $annonce->_get('ca_nmoinsdeux') : null;
  1256.         $ebe_nmoinsdeux $annonce->_get('EBE_nmoinsdeux') !== null ? (int) $annonce->_get('EBE_nmoinsdeux') : null;
  1257.         $rex_nmoinsdeux $annonce->_get('resultat_exploitation_nmoinsdeux') !== null ? (int) $annonce->_get('resultat_exploitation_nmoinsdeux') : null;
  1258.         $rn_nmoinsdeux $annonce->_get('resultat_net_nmoinsdeux') !== null ? (int) $annonce->_get('resultat_net_nmoinsdeux') : null;
  1259.         $nb_personnes_nmoinsdeux $annonce->_get('nb_personnes_nmoinsdeux') !== null ? (int) $annonce->_get('nb_personnes_nmoinsdeux') : null;
  1260.         
  1261.         // Si les éléments retraités ne sont pas renseignés, on préremplie par ceux de l'annonce
  1262.         if ($annoncesVendeurComplementPrixCession->__get('ca') === null) {
  1263.             $annoncesVendeurComplementPrixCession->__set('ca'$ca_n);
  1264.         }
  1265.         
  1266.         if ($annoncesVendeurComplementPrixCession->__get('ebe') === null) {
  1267.             $annoncesVendeurComplementPrixCession->__set('ebe'$ebe_n);
  1268.         }
  1269.         
  1270.         if ($annoncesVendeurComplementPrixCession->__get('resultatExploitation') === null) {
  1271.             $annoncesVendeurComplementPrixCession->__set('resultatExploitation'$rex_n);
  1272.         }
  1273.         
  1274.         if ($annoncesVendeurComplementPrixCession->__get('resultatNet') === null) {
  1275.             $annoncesVendeurComplementPrixCession->__set('resultatNet'$rn_n);
  1276.         }
  1277.         
  1278.         if ($annoncesVendeurComplementPrixCession->__get('nbPersonnes') === null) {
  1279.             $annoncesVendeurComplementPrixCession->__set('nbPersonnes'$nb_personnes_n);
  1280.         }
  1281.         
  1282.         if ($annoncesVendeurComplementPrixCession->__get('tresorerieExcedentaire') === null) {
  1283.             $annoncesVendeurComplementPrixCession->__set('tresorerieExcedentaire'$tresorerie_nette);
  1284.         }
  1285.         
  1286.         if ($annoncesVendeurComplementPrixCession->__get('dettesMoyenLongTerme') === null) {
  1287.             $annoncesVendeurComplementPrixCession->__set('dettesMoyenLongTerme'$dettes_financieres);
  1288.         }
  1289.         
  1290.         $options = [];
  1291.         $options['annonce'] = $annonce;
  1292.         $options['diff_map'] = [
  1293.             'ca' => 'ca_n',
  1294.             'ebe' => 'EBE_n',
  1295.             'resultatExploitation' => 'resultat_exploitation_n',
  1296.             'resultatNet' => 'resultat_net_n',
  1297.             'nbPersonnes' => 'nb_personnes_n',
  1298.             'tresorerieExcedentaire' => 'tresorerie_nette',
  1299.             'dettesMoyenLongTerme' => 'dettes_financieres'
  1300.         ];
  1301.         
  1302.         $form $this->createFormForStep(2$annoncesVendeurComplementPrixCession$options);
  1303.         
  1304.         $form->handleRequest($request);
  1305.         
  1306.         if ($form->isSubmitted() && $form->isValid()) {
  1307.             $this->em->persist($annoncesVendeurComplementPrixCession);
  1308.             $this->em->flush();
  1309.             
  1310.             // Redirection vers l'étape 2
  1311.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_3', ['codePays' => $codePays'ref' => $code]);
  1312.         }
  1313.         
  1314.         // =====================  ELEMENTS POUR LE BONUS =====================
  1315.         // On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
  1316.         $bonus $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  1317.         $update_bonus false;
  1318.         
  1319.         if ($bonus->__get('prixAnnonceMoyen12mois')) {
  1320.             $prix_annonce_moyen_12mois $bonus->__get('prixAnnonceMoyen12mois');
  1321.         } else {
  1322.             $moyenne12mois $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12);
  1323.             $prix_annonce_moyen_12mois $moyenne12mois['prix_annonce_moyen'] ? number_format($moyenne12mois['prix_annonce_moyen'], 0","" ") : "";
  1324.             
  1325.             $bonus->__set('prixAnnonceMoyen12mois'$prix_annonce_moyen_12mois);
  1326.             $update_bonus true;
  1327.         }
  1328.         
  1329.         if ($bonus->__get('caMoyenAvecPrix12mois')) {
  1330.             $ca_moyen_avec_prix_12mois $bonus->__get('caMoyenAvecPrix12mois');
  1331.         } else {
  1332.             if (!$moyenne12mois) {
  1333.                 $moyenne12mois $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12);
  1334.             }
  1335.             $ca_moyen_avec_prix_12mois $moyenne12mois['ca_moyen_avec_prix'] ? number_format($moyenne12mois['ca_moyen_avec_prix'], 0","" ") : "";
  1336.             
  1337.             $bonus->__set('caMoyenAvecPrix12mois'$ca_moyen_avec_prix_12mois);
  1338.             $update_bonus true;
  1339.         }
  1340.         
  1341.         // Si $prix_annonce_moyen_12mois ou $ca_moyen_avec_prix_12mois vide
  1342.         if ($prix_annonce_moyen_12mois === "" || $ca_moyen_avec_prix_12mois === "") {
  1343.             $show_prix_annonce_moyen_12mois false;
  1344.         } else {
  1345.             $show_prix_annonce_moyen_12mois true;
  1346.         }
  1347.         
  1348.         $reference_prix_annonce_moyen $prix_annonce_moyen_12mois;
  1349.         $reference_ca_moyen $ca_moyen_avec_prix_12mois;
  1350.         
  1351.         if ($bonus->__get('prixAnnonceMoyen24mois')) {
  1352.             $prix_annonce_moyen_24mois $bonus->__get('prixAnnonceMoyen24mois');
  1353.         } else {
  1354.             $moyenne24mois $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 24);
  1355.             $prix_annonce_moyen_24mois $moyenne24mois['prix_annonce_moyen'] ? number_format($moyenne24mois['prix_annonce_moyen'], 0","" ") : "";
  1356.             
  1357.             $bonus->__set('prixAnnonceMoyen24mois'$prix_annonce_moyen_24mois);
  1358.             $update_bonus true;
  1359.         }
  1360.         
  1361.         if ($bonus->__get('caMoyenAvecPrix24mois')) {
  1362.             $ca_moyen_avec_prix_24mois $bonus->__get('caMoyenAvecPrix24mois');
  1363.         } else {
  1364.             if (!$moyenne24mois) {
  1365.                 $moyenne24mois $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 24);
  1366.             }
  1367.             $ca_moyen_avec_prix_24mois $moyenne24mois['ca_moyen_avec_prix'] ? number_format($moyenne24mois['ca_moyen_avec_prix'], 0","" ") : "";
  1368.             
  1369.             $bonus->__set('caMoyenAvecPrix24mois'$ca_moyen_avec_prix_24mois);
  1370.             $update_bonus true;
  1371.         }
  1372.         
  1373.         // Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
  1374.         if ($prix_annonce_moyen_24mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_24mois == $reference_ca_moyen) {
  1375.             $show_prix_annonce_moyen_24mois false;
  1376.         } else {
  1377.             $show_prix_annonce_moyen_24mois true;
  1378.             $reference_prix_annonce_moyen $prix_annonce_moyen_24mois;
  1379.             $reference_ca_moyen $ca_moyen_avec_prix_24mois;
  1380.         }
  1381.         
  1382.         if ($bonus->__get('prixAnnonceMoyen60mois')) {
  1383.             $prix_annonce_moyen_60mois $bonus->__get('prixAnnonceMoyen60mois');
  1384.         } else {
  1385.             $moyenne60mois $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 60);
  1386.             $prix_annonce_moyen_60mois $moyenne60mois['prix_annonce_moyen'] ? number_format($moyenne60mois['prix_annonce_moyen'], 0","" ") : "";
  1387.             
  1388.             $bonus->__set('prixAnnonceMoyen60mois'$prix_annonce_moyen_60mois);
  1389.             $update_bonus true;
  1390.         }
  1391.         
  1392.         if ($bonus->__get('caMoyenAvecPrix60mois')) {
  1393.             $ca_moyen_avec_prix_60mois $bonus->__get('caMoyenAvecPrix60mois');
  1394.         } else {
  1395.             if (!$moyenne60mois) {
  1396.                 $moyenne60mois $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 60);
  1397.             }
  1398.             
  1399.             $ca_moyen_avec_prix_60mois $moyenne60mois['ca_moyen_avec_prix'] ? number_format($moyenne60mois['ca_moyen_avec_prix'], 0","" ") : "";
  1400.             
  1401.             $bonus->__set('caMoyenAvecPrix60mois'$ca_moyen_avec_prix_60mois);
  1402.             $update_bonus true;
  1403.         }
  1404.         
  1405.         // Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
  1406.         if ($prix_annonce_moyen_60mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_60mois == $reference_ca_moyen) {
  1407.             $show_prix_annonce_moyen_60mois false;
  1408.         } else {
  1409.             $show_prix_annonce_moyen_60mois true;
  1410.             $reference_prix_annonce_moyen $prix_annonce_moyen_60mois;
  1411.             $reference_ca_moyen $ca_moyen_avec_prix_60mois;
  1412.         }
  1413.         
  1414.         if ($bonus->__get('prixAnnonceMoyen120mois')) {
  1415.             $prix_annonce_moyen_120mois $bonus->__get('prixAnnonceMoyen120mois');
  1416.         } else {
  1417.             $moyenne120mois $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
  1418.             $prix_annonce_moyen_120mois $moyenne120mois['prix_annonce_moyen'] ? number_format($moyenne120mois['prix_annonce_moyen'], 0","" ") : "";
  1419.             
  1420.             $bonus->__set('prixAnnonceMoyen120mois'$prix_annonce_moyen_120mois);
  1421.             $update_bonus true;
  1422.         }
  1423.         
  1424.         if ($bonus->__get('caMoyenAvecPrix120mois')) {
  1425.             $ca_moyen_avec_prix_120mois $bonus->__get('caMoyenAvecPrix120mois');
  1426.         } else {
  1427.             if (!$moyenne120mois) {
  1428.                 $moyenne120mois $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
  1429.             }
  1430.             
  1431.             $ca_moyen_avec_prix_120mois $moyenne120mois['ca_moyen_avec_prix'] ? number_format($moyenne120mois['ca_moyen_avec_prix'], 0","" ") : "";
  1432.             
  1433.             $bonus->__set('caMoyenAvecPrix120mois'$ca_moyen_avec_prix_120mois);
  1434.             $update_bonus true;
  1435.         }
  1436.         
  1437.         // Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
  1438.         if ($prix_annonce_moyen_120mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_120mois == $reference_ca_moyen) {
  1439.             $show_prix_annonce_moyen_120mois false;
  1440.         } else {
  1441.             $show_prix_annonce_moyen_120mois true;
  1442.             $reference_prix_annonce_moyen $prix_annonce_moyen_120mois;
  1443.             $reference_ca_moyen $ca_moyen_avec_prix_120mois;
  1444.         }
  1445.         
  1446.         if ($bonus->__get('anneesHistorique') && $bonus->__get('historiquePrixMoyen') && $bonus->__get('historiqueRatioMoyenPrixNbPers') && $bonus->__get('historiqueRatioMoyenPrixCa')) {
  1447.             $historique1 unserialize($bonus->__get('historiquePrixMoyen'));
  1448.             $historique2 unserialize($bonus->__get('historiqueRatioMoyenPrixNbPers'));
  1449.             $annees_historique explode(","$bonus->__get('anneesHistorique'));
  1450.             $data_null_historique1 false;
  1451.             $data_null_historique2 false;
  1452.             
  1453.             foreach ($historique1 as $h) {
  1454.                 if ($h['y'] == null) {
  1455.                     $data_null_historique1 true;
  1456.                     break;
  1457.                 }
  1458.             }
  1459.             
  1460.             foreach ($historique2 as $h) {
  1461.                 if ($h['y'] == null) {
  1462.                     $data_null_historique2 true;
  1463.                     break;
  1464.                 }
  1465.             }
  1466.         } else {
  1467.             $histo1 $cb->getHistoriquePrixMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 1210);
  1468.             $annees_historique $histo1['annees_historique'];
  1469.             $historique1 $histo1['historique'];
  1470.             $data_null_historique1 $histo1['data_null'];
  1471.             $histo2 $cb->getHistoriqueMultiplePrixNbPersMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 1210);
  1472.             $historique2 $histo2['historique'];
  1473.             $data_null_historique2 $histo2['data_null'];
  1474.             
  1475.             $bonus->__set('anneesHistorique'implode(","$annees_historique));
  1476.             $bonus->__set('historiquePrixMoyen'serialize($historique1));
  1477.             $bonus->__set('historiqueRatioMoyenPrixNbPers'serialize($historique2));
  1478.             $update_bonus true;
  1479.         }
  1480.         if ($update_bonus) {
  1481.             $this->em->persist($bonus);
  1482.             $this->em->flush();
  1483.         }
  1484.         // ====================  FIN ELEMENTS POUR LE BONUS ===================
  1485.         
  1486.         return $this->render('annonces/complement-annonce-vendeur/etape2.html.twig', [
  1487.             'id_annonce_vendeur' => $id_annonce_vendeur,
  1488.             'prix_cession_final' => $prix_cession_final,
  1489.             'annonce' => $annonce,
  1490.             'annee_n' => $annee_n,
  1491.             'annee_nmoinsun' => $annee_nmoinsun,
  1492.             'annee_nmoinsdeux' => $annee_nmoinsdeux,
  1493.             'ca_n' => $ca_n,
  1494.             'ebe_n' => $ebe_n,
  1495.             'rex_n' => $rex_n,
  1496.             'rn_n' => $rn_n,
  1497.             'nb_personnes_n' => $nb_personnes_n,
  1498.             'ca_nmoinsun' => $ca_nmoinsun,
  1499.             'ebe_nmoinsun' => $ebe_nmoinsun,
  1500.             'rex_nmoinsun' => $rex_nmoinsun,
  1501.             'rn_nmoinsun' => $rn_nmoinsun,
  1502.             'nb_personnes_nmoinsun' => $nb_personnes_nmoinsun,
  1503.             'ca_nmoinsdeux' => $ca_nmoinsdeux,
  1504.             'ebe_nmoinsdeux' => $ebe_nmoinsdeux,
  1505.             'rex_nmoinsdeux' => $rex_nmoinsdeux,
  1506.             'rn_nmoinsdeux' => $rn_nmoinsdeux,
  1507.             'nb_personnes_nmoinsdeux' => $nb_personnes_nmoinsdeux,
  1508.             'tresorerie_nette' => $tresorerie_nette,
  1509.             'dettes_financieres' => $dettes_financieres,
  1510.             'nom_secteur_activite' => $nom_secteur_activite,
  1511.             'form' => $form->createView(),
  1512.             'code' => $code,
  1513.             'prix_annonce_moyen_12mois' => $prix_annonce_moyen_12mois,
  1514.             'ca_moyen_avec_prix_12mois' => $ca_moyen_avec_prix_12mois,
  1515.             'show_prix_annonce_moyen_12mois' => $show_prix_annonce_moyen_12mois,
  1516.             'prix_annonce_moyen_24mois' => $prix_annonce_moyen_24mois,
  1517.             'ca_moyen_avec_prix_24mois' => $ca_moyen_avec_prix_24mois,
  1518.             'show_prix_annonce_moyen_24mois' => $show_prix_annonce_moyen_24mois,
  1519.             'prix_annonce_moyen_60mois' => $prix_annonce_moyen_60mois,
  1520.             'ca_moyen_avec_prix_60mois' => $ca_moyen_avec_prix_60mois,
  1521.             'show_prix_annonce_moyen_60mois' => $show_prix_annonce_moyen_60mois,
  1522.             'prix_annonce_moyen_120mois' => $prix_annonce_moyen_120mois,
  1523.             'ca_moyen_avec_prix_120mois' => $ca_moyen_avec_prix_120mois,
  1524.             'show_prix_annonce_moyen_120mois' => $show_prix_annonce_moyen_120mois,
  1525.             'historique1' => $historique1,
  1526.             'data_null_historique1' => $data_null_historique1,
  1527.             'historique2' => $historique2,
  1528.             'data_null_historique2' => $data_null_historique2,
  1529.             'annees_historique' => $annees_historique,
  1530.         ]);
  1531.     }
  1532.     
  1533.     public  function complementAnnonceVendeurSuiteRetraitEtape3(Request $requestAesEncrytageStrategy $aesStatistiquesSecteursActiviteRepository $statistiquesRepoHistoriqueStatsSecteursRepository $historiquesStatsRepoSecteursActiviteRepository $secteursRepoCoteFusacqBonusRepository $cfrCalculBonus $cb$codePays) {
  1534.         $code $request->query->get('ref');
  1535.         
  1536.         // Si pas de code
  1537.         if (!$code) {
  1538.             return $this->redirectToRoute('index');
  1539.         }
  1540.         
  1541.         $id_annonce_vendeur $aes->decryptage($code);
  1542.         
  1543.         // Si $id_annonce_vendeur pas conforme
  1544.         if (!is_numeric($id_annonce_vendeur)) {
  1545.             return $this->redirectToRoute('index');
  1546.         }
  1547.         
  1548.         $annonce $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
  1549.         
  1550.         // Si annonce introuvable
  1551.         if (!$annonce) {
  1552.             return $this->redirectToRoute('index');
  1553.         }
  1554.         
  1555.         $user $this->getUser();
  1556.         
  1557.         // Si pas authentifié
  1558.         if (!$user) {
  1559.             $this->addFlash("error""Veuillez-vous authentifier");
  1560.             return $this->redirectToRoute('index');
  1561.         }
  1562.         
  1563.         // Si l'annonce n'appartient pas à l'utilisateur
  1564.         if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
  1565.             return $this->redirectToRoute('index');
  1566.         }
  1567.         
  1568.         $annoncesVendeurComplementPrixCession $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  1569.         
  1570.         if (!$annoncesVendeurComplementPrixCession) {
  1571.             $this->addFlash('error'"Une erreur s'est produite, veuillez réessayer");
  1572.             // Redirection vers l'étape 1
  1573.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays'ref' => $code]);
  1574.         }
  1575.         
  1576.         // On vérifie que les champs de l'etape 2 sont bien remplis
  1577.         if (!$annoncesVendeurComplementPrixCession->isEtape2Completed()) {
  1578.             $this->addFlash('error'"Une erreur s'est produite, veuillez réessayer");
  1579.             // Redirection vers l'étape 2
  1580.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_2', ['codePays' => $codePays'ref' => $code]);
  1581.         }
  1582.         
  1583.         // Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
  1584.         /*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
  1585.             return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
  1586.         }*/
  1587.         
  1588.         $prix_cession_final = (int) $annoncesVendeurComplementPrixCession->__get('prixCession');
  1589.         $tresorerie_nette_final = (int) $annoncesVendeurComplementPrixCession->__get('tresorerieExcedentaire');
  1590.         $dettes_financieres_final = (int) $annoncesVendeurComplementPrixCession->__get('dettesMoyenLongTerme');
  1591.         
  1592.         $ca_final = (int) $annoncesVendeurComplementPrixCession->__get('ca');
  1593.         $ebe_final = (int) $annoncesVendeurComplementPrixCession->__get('ebe');
  1594.         $rex_final = (int) $annoncesVendeurComplementPrixCession->__get('resultatExploitation');
  1595.         $rn_final = (int) $annoncesVendeurComplementPrixCession->__get('resultatNet');
  1596.         
  1597.         $nom_secteur_activite $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
  1598.         $options = [];
  1599.         
  1600.         // Calcul des multiples
  1601.         if ($ca_final != 0) {
  1602.             $multiple_ca = ($prix_cession_final $tresorerie_nette_final $dettes_financieres_final) / $ca_final;
  1603.         } else {
  1604.             $multiple_ca 0;
  1605.         }
  1606.         
  1607.         if (is_float($multiple_ca)) {
  1608.             $multiple_ca number_format($multiple_ca2);
  1609.         }
  1610.         
  1611.         // Si multiple CA compris entre 0.1 et 5, on l'affiche dans le formulaire
  1612.         if ($multiple_ca >= 0.1 && $multiple_ca <= 5) {
  1613.             $options['affichage_multiple_ca'] = true;
  1614.         } else {
  1615.             $options['affichage_multiple_ca'] = false;
  1616.         }
  1617.         
  1618.         if ($ebe_final != 0) {
  1619.             $multiple_ebe = ($prix_cession_final $tresorerie_nette_final $dettes_financieres_final) / $ebe_final;
  1620.         } else {
  1621.             $multiple_ebe 0;
  1622.         }
  1623.         
  1624.         if (is_float($multiple_ebe)) {
  1625.             $multiple_ebe number_format($multiple_ebe2);
  1626.         }
  1627.         
  1628.         // Si multiple EBE compris entre 1 et 10, on l'affiche dans le formulaire
  1629.         if ($multiple_ebe >= && $multiple_ebe <= 10) {
  1630.             $options['affichage_multiple_ebe'] = true;
  1631.         } else {
  1632.             $options['affichage_multiple_ebe'] = false;
  1633.         }
  1634.         
  1635.         if ($rex_final != 0) {
  1636.             $multiple_rex = ($prix_cession_final $tresorerie_nette_final $dettes_financieres_final) / $rex_final;
  1637.         } else {
  1638.             $multiple_rex 0;
  1639.         }
  1640.         
  1641.         if (is_float($multiple_rex)) {
  1642.             $multiple_rex number_format($multiple_rex2);
  1643.         }
  1644.         
  1645.         // Si multiple REX compris entre 1 et 12, on l'affiche dans le formulaire
  1646.         if ($multiple_rex >= && $multiple_rex <= 12) {
  1647.             $options['affichage_multiple_rex'] = true;
  1648.         } else {
  1649.             $options['affichage_multiple_rex'] = false;
  1650.         }
  1651.         
  1652.         if ($rn_final != 0) {
  1653.             $multiple_rn = ($prix_cession_final $tresorerie_nette_final $dettes_financieres_final) / $rn_final;
  1654.         } else {
  1655.             $multiple_rn 0;
  1656.         }
  1657.         
  1658.         if (is_float($multiple_rn)) {
  1659.             $multiple_rn number_format($multiple_rn2);
  1660.         }
  1661.         
  1662.         // Si multiple RN compris entre 2 et 15, on l'affiche dans le formulaire
  1663.         if ($multiple_rn >= && $multiple_rn <= 15) {
  1664.             $options['affichage_multiple_rn'] = true;
  1665.         } else {
  1666.             $options['affichage_multiple_rn'] = false;
  1667.         }
  1668.         
  1669.         // MaJ des multiples
  1670.         $annoncesVendeurComplementPrixCession->__set('multipleCa'$multiple_ca);
  1671.         $annoncesVendeurComplementPrixCession->__set('multipleEbe'$multiple_ebe);
  1672.         $annoncesVendeurComplementPrixCession->__set('multipleResultatExploitation'$multiple_rex);
  1673.         $annoncesVendeurComplementPrixCession->__set('multipleResultatNet'$multiple_rn);
  1674.         $this->em->persist($annoncesVendeurComplementPrixCession);
  1675.         $this->em->flush();
  1676.         
  1677.         $nb_personnes_n = (int) $annonce->_get('nb_personnes_n');
  1678.         $tresorerie_nette = (int) $annonce->_get('tresorerie_nette');
  1679.         $dettes_financieres = (int) $annonce->_get('dettes_financieres');
  1680.         $form $this->createFormForStep(3$annoncesVendeurComplementPrixCession$options);
  1681.         
  1682.         $form->handleRequest($request);
  1683.         
  1684.         if ($form->isSubmitted() && $form->isValid()) {
  1685.             $data $form->getData();
  1686.             
  1687.             // Si les multiples sont ok, on efface la precision
  1688.             if ($data->__get('multipleCaOk') == 1) {
  1689.                 $annoncesVendeurComplementPrixCession->__set('precisionsCa'null);
  1690.             }
  1691.             
  1692.             if ($data->__get('multipleEbeOk') == 1) {
  1693.                 $annoncesVendeurComplementPrixCession->__set('precisionsEbe'null);
  1694.             }
  1695.             
  1696.             if ($data->__get('multipleResultatExploitationOk') == 1) {
  1697.                 $annoncesVendeurComplementPrixCession->__set('precisionsResultatExploitation'null);
  1698.             }
  1699.             
  1700.             if ($data->__get('multipleResultatNetOk') == 1) {
  1701.                 $annoncesVendeurComplementPrixCession->__set('precisionsResultatNet'null);
  1702.             }
  1703.             
  1704.             $this->em->persist($annoncesVendeurComplementPrixCession);
  1705.             $this->em->flush();
  1706.             
  1707.             // A l'étape 3 on considère qu'on a déjà quasiment toutes les informations nécessaires à la Cote Fusacq
  1708.             // On ajoute un log action pour la finalisation d'un AnnoncesVendeurComplementPrixCession (Transaction de référence)
  1709.             // LOG ID 133 = Finalisation Transaction de référence (la Cote FUSACQ)
  1710.             $this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(133), $user->_get('type_utilisateur'), $id_annonce_vendeur);
  1711.             
  1712.             // Redirection vers l'étape 4
  1713.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_4', ['codePays' => $codePays'ref' => $code]);
  1714.         }
  1715.         
  1716.         // =====================  ELEMENTS POUR LE BONUS =====================
  1717.         // On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
  1718.         $bonus $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  1719.         $update_bonus false;
  1720.         if ($bonus->__get('multiple12mois')) {
  1721.             $multiple_12mois $bonus->__get('multiple12mois');
  1722.         } else {
  1723.             $multiplePrixCaMoyen12mois $cb->getMultiplePrixCaMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12);
  1724.             $multiple_12mois $multiplePrixCaMoyen12mois['multiple_prix_ca'] ? number_format($multiplePrixCaMoyen12mois['multiple_prix_ca'], 2'.'' ') : "";
  1725.             
  1726.             $bonus->__set('multiple12mois'$multiple_12mois);
  1727.             $update_bonus true;
  1728.         }
  1729.         
  1730.         // Si $multiple_12mois vide
  1731.         if ($multiple_12mois === "") {
  1732.             $show_multiple_ca_12mois false;
  1733.         } else {
  1734.             $show_multiple_ca_12mois true;
  1735.         }
  1736.         
  1737.         $reference_multiple_ca $multiple_12mois;
  1738.         
  1739.         if ($bonus->__get('multiple24mois')) {
  1740.             $multiple_24mois $bonus->__get('multiple24mois');
  1741.         } else {
  1742.             $multiplePrixCaMoyen24mois $cb->getMultiplePrixCaMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 24);
  1743.             $multiple_24mois $multiplePrixCaMoyen24mois['multiple_prix_ca'] ? number_format($multiplePrixCaMoyen24mois['multiple_prix_ca'], 2'.'' ') : "";
  1744.             
  1745.             $bonus->__set('multiple24mois'$multiple_24mois);
  1746.             $update_bonus true;
  1747.         }
  1748.         
  1749.         // Si multiple identique à reference, on n'affiche pas la donnée
  1750.         if ($multiple_24mois == $reference_multiple_ca) {
  1751.             $show_multiple_ca_24mois false;
  1752.         } else {
  1753.             $show_multiple_ca_24mois true;
  1754.             $reference_multiple_ca $multiple_24mois;
  1755.         }
  1756.         
  1757.         if ($bonus->__get('multiple60mois')) {
  1758.             $multiple_60mois $bonus->__get('multiple60mois');
  1759.         } else {
  1760.             $multiplePrixCaMoyen60mois $cb->getMultiplePrixCaMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 60);
  1761.             $multiple_60mois $multiplePrixCaMoyen60mois['multiple_prix_ca'] ? number_format($multiplePrixCaMoyen60mois['multiple_prix_ca'], 2'.'' ') : "";
  1762.             
  1763.             $bonus->__set('multiple60mois'$multiple_60mois);
  1764.             $update_bonus true;
  1765.         }
  1766.         
  1767.         // Si multiple identique à reference, on n'affiche pas la donnée
  1768.         if ($multiple_60mois == $reference_multiple_ca) {
  1769.             $show_multiple_ca_60mois false;
  1770.         } else {
  1771.             $show_multiple_ca_60mois true;
  1772.             $reference_multiple_ca $multiple_60mois;
  1773.         }
  1774.         
  1775.         if ($bonus->__get('multiple120mois')) {
  1776.             $multiple_120mois $bonus->__get('multiple120mois');
  1777.         } else {
  1778.             $multiplePrixCaMoyen120mois $cb->getMultiplePrixCaMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
  1779.             $multiple_120mois $multiplePrixCaMoyen120mois['multiple_prix_ca'] ? number_format($multiplePrixCaMoyen120mois['multiple_prix_ca'], 2'.'' ') : "";
  1780.             
  1781.             $bonus->__set('multiple120mois'$multiple_120mois);
  1782.             $update_bonus true;
  1783.         }
  1784.         
  1785.         // Si multiple identique à reference, on n'affiche pas la donnée
  1786.         if ($multiple_120mois == $reference_multiple_ca) {
  1787.             $show_multiple_ca_120mois false;
  1788.         } else {
  1789.             $show_multiple_ca_120mois true;
  1790.             $reference_multiple_ca $multiple_120mois;
  1791.         }
  1792.         
  1793.         if ($bonus->__get('anneesHistorique') && $bonus->__get('historiqueRatioMoyenPrixCa')) {
  1794.             $historique unserialize($bonus->__get('historiqueRatioMoyenPrixCa'));
  1795.             $annees_historique explode(","$bonus->__get('anneesHistorique'));
  1796.             $data_null_historique false;
  1797.             
  1798.             foreach ($historique as $h) {
  1799.                 if ($h['y'] == null) {
  1800.                     $data_null_historique true;
  1801.                     break;
  1802.                 }
  1803.             }
  1804.         } else {
  1805.             $histo $cb->getHistoriqueMultiplePrixCa($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 1210);
  1806.             $annees_historique $histo['annees_historique'];
  1807.             $historique $histo['historique'];
  1808.             $data_null_historique $histo['data_null'];
  1809.             
  1810.             $bonus->__set('anneesHistorique'implode(","$annees_historique));
  1811.             $bonus->__set('historiqueRatioMoyenPrixCa'serialize($historique));
  1812.             $update_bonus true;
  1813.         }
  1814.         
  1815.         if ($update_bonus) {
  1816.             $this->em->persist($bonus);
  1817.             $this->em->flush();
  1818.         }
  1819.         // ====================  FIN ELEMENTS POUR LE BONUS ===================
  1820.         
  1821.         return $this->render('annonces/complement-annonce-vendeur/etape3.html.twig', [
  1822.             'id_annonce_vendeur' => $id_annonce_vendeur,
  1823.             'prix_cession_final' => $prix_cession_final,
  1824.             'multiple_ca' => $multiple_ca,
  1825.             'multiple_ebe' => $multiple_ebe,
  1826.             'multiple_rex' => $multiple_rex,
  1827.             'multiple_rn' => $multiple_rn,
  1828.             'nb_personnes_n' => $nb_personnes_n,
  1829.             'tresorerie_nette' => $tresorerie_nette,
  1830.             'dettes_financieres' => $dettes_financieres,
  1831.             'nom_secteur_activite' => $nom_secteur_activite,
  1832.             'form' => $form->createView(),
  1833.             'code' => $code,
  1834.             'multiple_12mois' => $multiple_12mois,
  1835.             'multiple_24mois' => $multiple_24mois,
  1836.             'multiple_60mois' => $multiple_60mois,
  1837.             'multiple_120mois' => $multiple_120mois,
  1838.             'show_multiple_ca_12mois' => $show_multiple_ca_12mois,
  1839.             'show_multiple_ca_24mois' => $show_multiple_ca_24mois,
  1840.             'show_multiple_ca_60mois' => $show_multiple_ca_60mois,
  1841.             'show_multiple_ca_120mois' => $show_multiple_ca_120mois,
  1842.             'historique' => $historique,
  1843.             'data_null_historique' => $data_null_historique,
  1844.             'annees_historique' => $annees_historique,
  1845.             'options' => $options
  1846.         ]);
  1847.     }
  1848.     
  1849.     public  function complementAnnonceVendeurSuiteRetraitEtape4(Request $requestAesEncrytageStrategy $aesStatistiquesSecteursActiviteRepository $statistiquesRepoHistoriqueStatsSecteursRepository $historiquesStatsRepoSecteursActiviteRepository $secteursRepoCoteFusacqBonusRepository $cfrCalculBonus $cb$codePays) {
  1850.         $code $request->query->get('ref');
  1851.         
  1852.         // Si pas de code
  1853.         if (!$code) {
  1854.             return $this->redirectToRoute('index');
  1855.         }
  1856.         
  1857.         $id_annonce_vendeur $aes->decryptage($code);
  1858.         
  1859.         // Si $id_annonce_vendeur pas conforme
  1860.         if (!is_numeric($id_annonce_vendeur)) {
  1861.             return $this->redirectToRoute('index');
  1862.         }
  1863.         
  1864.         $annonce $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
  1865.         
  1866.         // Si annonce introuvable
  1867.         if (!$annonce) {
  1868.             return $this->redirectToRoute('index');
  1869.         }
  1870.         
  1871.         $user $this->getUser();
  1872.         
  1873.         // Si pas authentifié
  1874.         if (!$user) {
  1875.             $this->addFlash("error""Veuillez-vous authentifier");
  1876.             return $this->redirectToRoute('index');
  1877.         }
  1878.         
  1879.         // Si l'annonce n'appartient pas à l'utilisateur
  1880.         if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
  1881.             return $this->redirectToRoute('index');
  1882.         }
  1883.         
  1884.         $annoncesVendeurComplementPrixCession $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  1885.         
  1886.         if (!$annoncesVendeurComplementPrixCession) {
  1887.             $this->addFlash('error'"Une erreur s'est produite, veuillez réessayer");
  1888.             // Redirection vers l'étape 1
  1889.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays'ref' => $code]);
  1890.         }
  1891.         
  1892.         // On vérifie que les champs de l'etape 3 sont bien remplis
  1893.         if (!$annoncesVendeurComplementPrixCession->isEtape3Completed()) {
  1894.             $this->addFlash('error'"Une erreur s'est produite, veuillez réessayer");
  1895.             // Redirection vers l'étape 3
  1896.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_3', ['codePays' => $codePays'ref' => $code]);
  1897.         }
  1898.         
  1899.         // Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
  1900.         /*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
  1901.             return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
  1902.         }*/
  1903.         
  1904.         $prix_cession_final = (int) $annoncesVendeurComplementPrixCession->__get('prixCession');
  1905.         $nom_secteur_activite $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
  1906.         $options = [];
  1907.         $options['id_pays'] = $annonce->_get('id_pays');
  1908.         
  1909.         $form $this->createFormForStep(4$annoncesVendeurComplementPrixCession$options);
  1910.         
  1911.         $form->handleRequest($request);
  1912.         
  1913.         if ($form->isSubmitted() && $form->isValid()) {
  1914.             $data $form->getData();
  1915.             if (strpos($data->__get('idBanqueFinancement'), "0") === false) {
  1916.                 $annoncesVendeurComplementPrixCession->__set('autreBanque'null);
  1917.             }
  1918.             
  1919.             $annoncesVendeurComplementPrixCession->__set('isComplete'1);
  1920.             
  1921.             // Si on n'a pas encore offert de CRO 
  1922.             if ($annoncesVendeurComplementPrixCession->__get('croOffert') == false) {
  1923.                 // 35 = compte rendu d'opération
  1924.                 $this->dam->traitementDroitAccessCommande($user35);
  1925.                 $annoncesVendeurComplementPrixCession->__set('croOffert'1);
  1926.             }
  1927.             
  1928.             $this->em->persist($annoncesVendeurComplementPrixCession);
  1929.             $this->em->flush();
  1930.             
  1931.             // Redirection vers l'étape 5
  1932.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_5', ['codePays' => $codePays'ref' => $code]);
  1933.         }
  1934.         
  1935.         // =====================  ELEMENTS POUR LE BONUS =====================
  1936.         // On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
  1937.         $bonus $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  1938.         $update_bonus false;
  1939.         
  1940.         // On récupère les annonces avec prix exploitables sur 10 ans pour calculer les bornes min et max pour l'ensemble des multiples
  1941.         $annonces_avec_prix_120mois $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
  1942.         
  1943.         if ($annonces_avec_prix_120mois) {
  1944.             $multiple_ebe = [];
  1945.             $multiple_rex = [];
  1946.             $multiple_rn = [];
  1947.             
  1948.             foreach ($annonces_avec_prix_120mois as $a) {
  1949.                 if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
  1950.                     $multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
  1951.                 }
  1952.                 
  1953.                 if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
  1954.                     $multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
  1955.                 }
  1956.                 
  1957.                 if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
  1958.                     $multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
  1959.                 }
  1960.             }
  1961.             
  1962.             list($min_ebe$max_ebe$q1_ebe$q3_ebe$iqr_ebe) = Statistiques::calculerBornesIQR($multiple_ebetrue);
  1963.             list($min_rex$max_rex$q1_rex$q3_rex$iqr_rex) = Statistiques::calculerBornesIQR($multiple_rextrue);
  1964.             list($min_rn$max_rn$q1_rn$q3_rn$iqr_rn) = Statistiques::calculerBornesIQR($multiple_rntrue);
  1965.         } else {
  1966.             $min_ebe $max_ebe $q1_ebe $q3_ebe $iqr_ebe null;
  1967.             $min_rex $max_rex $q1_rex $q3_rex $iqr_rex null;
  1968.             $min_rn $max_rn $q1_rn $q3_rn $iqr_rn null;
  1969.         }
  1970.         
  1971.         if ($bonus->__get('multipleEbe12mois') && $bonus->__get('multipleRex12mois') && $bonus->__get('multipleRn12mois')) {
  1972.             $multiple_ebe_12mois $bonus->__get('multipleEbe12mois');
  1973.             $multiple_rex_12mois $bonus->__get('multipleRex12mois');
  1974.             $multiple_rn_12mois $bonus->__get('multipleRn12mois');
  1975.         } else {
  1976.             $annonces_avec_prix_12mois $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12);
  1977.             
  1978.             $multiple_ebe = [];
  1979.             $multiple_rex = [];
  1980.             $multiple_rn = [];
  1981.             $annonces_ebe_12mois = [];
  1982.             $annonces_rex_12mois = [];
  1983.             $annonces_rn_12mois = [];
  1984.             
  1985.             foreach ($annonces_avec_prix_12mois as $a) {
  1986.                 if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
  1987.                     if ($a['prix_cession'] / $a['EBE_n'] >= $min_ebe && $a['prix_cession'] / $a['EBE_n'] <= $max_ebe) {
  1988.                         $multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
  1989.                         $annonces_ebe_12mois[] = $a;
  1990.                     }
  1991.                 }
  1992.                 
  1993.                 if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
  1994.                     if ($a['prix_cession'] / $a['resultat_exploitation_n'] >= $min_rex && $a['prix_cession'] / $a['resultat_exploitation_n'] <= $max_rex) {
  1995.                         $multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
  1996.                         $annonces_rex_12mois[] = $a;
  1997.                     }
  1998.                 }
  1999.                 
  2000.                 if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
  2001.                     if ($a['prix_cession'] / $a['resultat_net_n'] >= $min_rn && $a['prix_cession'] / $a['resultat_net_n'] <= $max_rn) {
  2002.                         $multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
  2003.                         $annonces_rn_12mois[] = $a;
  2004.                     }
  2005.                 }
  2006.             }
  2007.             
  2008.             /*$multiple_ebe_12mois_IQR = Statistiques::filtreIQR($multiple_ebe);
  2009.             $multiple_rex_12mois_IQR = Statistiques::filtreIQR($multiple_rex);
  2010.             $multiple_rn_12mois_IQR = Statistiques::filtreIQR($multiple_rn);*/
  2011.             
  2012.             $multiple_ebe_12mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_ebe$min_ebe$max_ebe$q1_ebe$q3_ebe$iqr_ebe);
  2013.             $multiple_rex_12mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_rex$min_rex$max_rex$q1_rex$q3_rex$iqr_rex);
  2014.             $multiple_rn_12mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_rn$min_rn$max_rn$q1_rn$q3_rn$iqr_rn);
  2015.             
  2016.             /*$somme_multiple_ebe_12mois = array_sum($multiple_ebe_12mois_IQR['valeurs']);
  2017.             if (count($multiple_ebe_12mois_IQR['valeurs']) > 0) {
  2018.                 $multiple_ebe_12mois = number_format(array_sum($multiple_ebe_12mois_IQR['valeurs']) / count($multiple_ebe_12mois_IQR['valeurs']), 2, '.', ' ');
  2019.             } else {
  2020.                 $multiple_ebe_12mois = null;
  2021.             }*/
  2022.             
  2023.             $somme_multiple_ebe_12mois array_sum(array_values($multiple_ebe));
  2024.             if (count($multiple_ebe) > 0) {
  2025.                 $multiple_ebe_12mois number_format(array_sum(array_values($multiple_ebe)) / count($multiple_ebe), 2'.'' ');
  2026.             } else {
  2027.                 $multiple_ebe_12mois null;
  2028.             }
  2029.             
  2030.             /*$somme_multiple_rex_12mois = array_sum($multiple_rex_12mois_IQR['valeurs']);
  2031.             if (count($multiple_rex_12mois_IQR['valeurs']) > 0) {
  2032.                 $multiple_rex_12mois = number_format(array_sum($multiple_rex_12mois_IQR['valeurs']) / count($multiple_rex_12mois_IQR['valeurs']), 2, '.', ' ');
  2033.             } else {
  2034.                 $multiple_rex_12mois = null;
  2035.             }*/
  2036.             
  2037.             $somme_multiple_rex_12mois array_sum(array_values($multiple_rex));
  2038.             if (count($multiple_rex) > 0) {
  2039.                 $multiple_rex_12mois number_format(array_sum(array_values($multiple_rex)) / count($multiple_rex), 2'.'' ');
  2040.             } else {
  2041.                 $multiple_rex_12mois null;
  2042.             }
  2043.             
  2044.             /*$somme_multiple_rn_12mois = array_sum($multiple_rn_12mois_IQR['valeurs']);
  2045.             if (count($multiple_rn_12mois_IQR['valeurs']) > 0) {
  2046.                 $multiple_rn_12mois = number_format(array_sum($multiple_rn_12mois_IQR['valeurs']) / count($multiple_rn_12mois_IQR['valeurs']), 2, '.', ' ');
  2047.             } else {
  2048.                 $multiple_rn_12mois = null;
  2049.             }*/
  2050.             
  2051.             $somme_multiple_rn_12mois array_sum(array_values($multiple_rn));
  2052.             if (count($multiple_rn) > 0) {
  2053.                 $multiple_rn_12mois number_format(array_sum(array_values($multiple_rn)) / count($multiple_rn), 2'.'' ');
  2054.             } else {
  2055.                 $multiple_rn_12mois null;
  2056.             }
  2057.             
  2058.             $bonus->__set('multipleEbe12mois'$multiple_ebe_12mois);
  2059.             $bonus->__set('multipleRex12mois'$multiple_rex_12mois);
  2060.             $bonus->__set('multipleRn12mois'$multiple_rn_12mois);
  2061.             $update_bonus true;
  2062.         }
  2063.         
  2064.         // Si multiple_ebe, multiple_rex et multiple_rn vide
  2065.         if ($multiple_ebe_12mois == "" && $multiple_rex_12mois == "" && $multiple_rn_12mois == "") {
  2066.             $show_multiple_12mois false;
  2067.         } else {
  2068.             $show_multiple_12mois true;
  2069.         }
  2070.         
  2071.         $reference_multiple_ebe $multiple_ebe_12mois;
  2072.         $reference_multiple_rex $multiple_rex_12mois;
  2073.         $reference_multiple_rn $multiple_rn_12mois;
  2074.         
  2075.         if ($bonus->__get('multipleEbe24mois') && $bonus->__get('multipleRex24mois') && $bonus->__get('multipleRn24mois')) {
  2076.             $multiple_ebe_24mois $bonus->__get('multipleEbe24mois');
  2077.             $multiple_rex_24mois $bonus->__get('multipleRex24mois');
  2078.             $multiple_rn_24mois $bonus->__get('multipleRn24mois');
  2079.         } else {
  2080.             $annonces_avec_prix_24mois $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 24);
  2081.             
  2082.             $multiple_ebe = [];
  2083.             $multiple_rex = [];
  2084.             $multiple_rn = [];
  2085.             $annonces_ebe_24mois = [];
  2086.             $annonces_rex_24mois = [];
  2087.             $annonces_rn_24mois = [];
  2088.             
  2089.             foreach ($annonces_avec_prix_24mois as $a) {
  2090.                 if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
  2091.                     if ($a['prix_cession'] / $a['EBE_n'] >= $min_ebe && $a['prix_cession'] / $a['EBE_n'] <= $max_ebe) {
  2092.                         $multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
  2093.                         $annonces_ebe_24mois[] = $a;
  2094.                     }
  2095.                 }
  2096.                 
  2097.                 if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
  2098.                     if ($a['prix_cession'] / $a['resultat_exploitation_n'] >= $min_rex && $a['prix_cession'] / $a['resultat_exploitation_n'] <= $max_rex) {
  2099.                         $multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
  2100.                         $annonces_rex_24mois[] = $a;
  2101.                     }
  2102.                 }
  2103.                 
  2104.                 if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
  2105.                     if ($a['prix_cession'] / $a['resultat_net_n'] >= $min_rn && $a['prix_cession'] / $a['resultat_net_n'] <= $max_rn) {
  2106.                         $multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
  2107.                         $annonces_rn_24mois[] = $a;
  2108.                     }
  2109.                 }
  2110.             }
  2111.             
  2112.             /*$multiple_ebe_24mois_IQR = Statistiques::filtreIQR($multiple_ebe);
  2113.             $multiple_rex_24mois_IQR = Statistiques::filtreIQR($multiple_rex);
  2114.             $multiple_rn_24mois_IQR = Statistiques::filtreIQR($multiple_rn);*/
  2115.             
  2116.             $multiple_ebe_24mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_ebe$min_ebe$max_ebe$q1_ebe$q3_ebe$iqr_ebe);
  2117.             $multiple_rex_24mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_rex$min_rex$max_rex$q1_rex$q3_rex$iqr_rex);
  2118.             $multiple_rn_24mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_rn$min_rn$max_rn$q1_rn$q3_rn$iqr_rn);
  2119.             
  2120.             /*$somme_multiple_ebe_24mois = array_sum($multiple_ebe_24mois_IQR['valeurs']);
  2121.             if (count($multiple_ebe_24mois_IQR['valeurs']) > 0) {
  2122.                 $multiple_ebe_24mois = number_format(array_sum($multiple_ebe_24mois_IQR['valeurs']) / count($multiple_ebe_24mois_IQR['valeurs']), 2, '.', ' ');
  2123.             } else {
  2124.                 $multiple_ebe_24mois = null;
  2125.             }*/
  2126.             
  2127.             $somme_multiple_ebe_24mois array_sum(array_values($multiple_ebe));
  2128.             if (count($multiple_ebe) > 0) {
  2129.                 $multiple_ebe_24mois number_format(array_sum(array_values($multiple_ebe)) / count($multiple_ebe), 2'.'' ');
  2130.             } else {
  2131.                 $multiple_ebe_24mois null;
  2132.             }
  2133.             
  2134.             /*$somme_multiple_rex_24mois = array_sum($multiple_rex_24mois_IQR['valeurs']);
  2135.             if (count($multiple_rex_24mois_IQR['valeurs']) > 0) {
  2136.                 $multiple_rex_24mois = number_format(array_sum($multiple_rex_24mois_IQR['valeurs']) / count($multiple_rex_24mois_IQR['valeurs']), 2, '.', ' ');
  2137.             } else {
  2138.                 $multiple_rex_24mois = null;
  2139.             }*/
  2140.             
  2141.             $somme_multiple_rex_24mois array_sum(array_values($multiple_rex));
  2142.             if (count($multiple_rex) > 0) {
  2143.                 $multiple_rex_24mois number_format(array_sum(array_values($multiple_rex)) / count($multiple_rex), 2'.'' ');
  2144.             } else {
  2145.                 $multiple_rex_24mois null;
  2146.             }
  2147.             
  2148.             /*$somme_multiple_rn_24mois = array_sum($multiple_rn_24mois_IQR['valeurs']);
  2149.             if (count($multiple_rn_24mois_IQR['valeurs']) > 0) {
  2150.                 $multiple_rn_24mois = number_format(array_sum($multiple_rn_24mois_IQR['valeurs']) / count($multiple_rn_24mois_IQR['valeurs']), 2, '.', ' ');
  2151.             } else {
  2152.                 $multiple_rn_24mois = null;
  2153.             }*/
  2154.             $somme_multiple_rn_24mois array_sum(array_values($multiple_rn));
  2155.             if (count($multiple_rn) > 0) {
  2156.                 $multiple_rn_24mois number_format(array_sum(array_values($multiple_rn)) / count($multiple_rn), 2'.'' ');
  2157.             } else {
  2158.                 $multiple_rn_24mois null;
  2159.             }
  2160.             
  2161.             $bonus->__set('multipleEbe24mois'$multiple_ebe_24mois);
  2162.             $bonus->__set('multipleRex24mois'$multiple_rex_24mois);
  2163.             $bonus->__set('multipleRn24mois'$multiple_rn_24mois);
  2164.             $update_bonus true;
  2165.         }
  2166.         
  2167.         // Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
  2168.         if ($multiple_ebe_24mois == $reference_multiple_ebe && $multiple_rex_24mois == $reference_multiple_rex && $multiple_rn_24mois == $reference_multiple_rn) {
  2169.             $show_multiple_24mois false;
  2170.         } else {
  2171.             $show_multiple_24mois true;
  2172.             $reference_multiple_ebe $multiple_ebe_24mois;
  2173.             $reference_multiple_rex $multiple_rex_24mois;
  2174.             $reference_multiple_rn $multiple_rn_24mois;
  2175.         }
  2176.         
  2177.         if ($bonus->__get('multipleEbe60mois') && $bonus->__get('multipleRex60mois') && $bonus->__get('multipleRn60mois')) {
  2178.             $multiple_ebe_60mois $bonus->__get('multipleEbe60mois');
  2179.             $multiple_rex_60mois $bonus->__get('multipleRex60mois');
  2180.             $multiple_rn_60mois $bonus->__get('multipleRn60mois');
  2181.         } else {
  2182.             $annonces_avec_prix_60mois $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 60);
  2183.             
  2184.             $multiple_ebe = [];
  2185.             $multiple_rex = [];
  2186.             $multiple_rn = [];
  2187.             $annonces_ebe_60mois = [];
  2188.             $annonces_rex_60mois = [];
  2189.             $annonces_rn_60mois = [];
  2190.             
  2191.             foreach ($annonces_avec_prix_60mois as $a) {
  2192.                 if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
  2193.                     if ($a['prix_cession'] / $a['EBE_n'] >= $min_ebe && $a['prix_cession'] / $a['EBE_n'] <= $max_ebe) {
  2194.                         $multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
  2195.                         $annonces_ebe_60mois[] = $a;
  2196.                     }
  2197.                 }
  2198.                 
  2199.                 if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
  2200.                     if ($a['prix_cession'] / $a['resultat_exploitation_n'] >= $min_rex && $a['prix_cession'] / $a['resultat_exploitation_n'] <= $max_rex) {
  2201.                         $multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
  2202.                         $annonces_rex_60mois[] = $a;
  2203.                     }
  2204.                 }
  2205.                 
  2206.                 if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
  2207.                     if ($a['prix_cession'] / $a['resultat_net_n'] >= $min_rn && $a['prix_cession'] / $a['resultat_net_n'] <= $max_rn) {
  2208.                         $multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
  2209.                         $annonces_rn_60mois[] = $a;
  2210.                     }
  2211.                 }
  2212.             }
  2213.             
  2214.             /*$multiple_ebe_60mois_IQR = Statistiques::filtreIQR($multiple_ebe);
  2215.             $multiple_rex_60mois_IQR = Statistiques::filtreIQR($multiple_rex);
  2216.             $multiple_rn_60mois_IQR = Statistiques::filtreIQR($multiple_rn);*/
  2217.             
  2218.             $multiple_ebe_60mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_ebe$min_ebe$max_ebe$q1_ebe$q3_ebe$iqr_ebe);
  2219.             $multiple_rex_60mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_rex$min_rex$max_rex$q1_rex$q3_rex$iqr_rex);
  2220.             $multiple_rn_60mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_rn$min_rn$max_rn$q1_rn$q3_rn$iqr_rn);
  2221.             
  2222.             /*$somme_multiple_ebe_60mois = array_sum($multiple_ebe_60mois_IQR['valeurs']);
  2223.             if (count($multiple_ebe_60mois_IQR['valeurs']) > 0) {
  2224.                 $multiple_ebe_60mois = number_format(array_sum($multiple_ebe_60mois_IQR['valeurs']) / count($multiple_ebe_60mois_IQR['valeurs']), 2, '.', ' ');
  2225.             } else {
  2226.                 $multiple_ebe_60mois = null;
  2227.             }*/
  2228.             
  2229.             $somme_multiple_ebe_60mois array_sum(array_values($multiple_ebe));
  2230.             if (count($multiple_ebe) > 0) {
  2231.                 $multiple_ebe_60mois number_format(array_sum(array_values($multiple_ebe)) / count($multiple_ebe), 2'.'' ');
  2232.             } else {
  2233.                 $multiple_ebe_60mois null;
  2234.             }
  2235.             
  2236.             /*$somme_multiple_rex_60mois = array_sum($multiple_rex_60mois_IQR['valeurs']);
  2237.             if (count($multiple_rex_60mois_IQR['valeurs']) > 0) {
  2238.                 $multiple_rex_60mois = number_format(array_sum($multiple_rex_60mois_IQR['valeurs']) / count($multiple_rex_60mois_IQR['valeurs']), 2, '.', ' ');
  2239.             } else {
  2240.                 $multiple_rex_60mois = null;
  2241.             }*/
  2242.             
  2243.             $somme_multiple_rex_60mois array_sum(array_values($multiple_rex));
  2244.             if (count($multiple_rex) > 0) {
  2245.                 $multiple_rex_60mois number_format(array_sum(array_values($multiple_rex)) / count($multiple_rex), 2'.'' ');
  2246.             } else {
  2247.                 $multiple_rex_60mois null;
  2248.             }
  2249.             
  2250.             /*$somme_multiple_rn_60mois = array_sum($multiple_rn_60mois_IQR['valeurs']);
  2251.             if (count($multiple_rn_60mois_IQR['valeurs']) > 0) {
  2252.                 $multiple_rn_60mois = number_format(array_sum($multiple_rn_60mois_IQR['valeurs']) / count($multiple_rn_60mois_IQR['valeurs']), 2, '.', ' ');
  2253.             } else {
  2254.                 $multiple_rn_60mois = null;
  2255.             }*/
  2256.             
  2257.             $somme_multiple_rn_60mois array_sum(array_values($multiple_rn));
  2258.             if (count($multiple_rn) > 0) {
  2259.                 $multiple_rn_60mois number_format(array_sum(array_values($multiple_rn)) / count($multiple_rn), 2'.'' ');
  2260.             } else {
  2261.                 $multiple_rn_60mois null;
  2262.             }
  2263.             
  2264.             $bonus->__set('multipleEbe60mois'$multiple_ebe_60mois);
  2265.             $bonus->__set('multipleRex60mois'$multiple_rex_60mois);
  2266.             $bonus->__set('multipleRn60mois'$multiple_rn_60mois);
  2267.             $update_bonus true;
  2268.         }
  2269.         
  2270.         // Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
  2271.         if ($multiple_ebe_60mois == $reference_multiple_ebe && $multiple_rex_60mois == $reference_multiple_rex && $multiple_rn_60mois == $reference_multiple_rn) {
  2272.             $show_multiple_60mois false;
  2273.         } else {
  2274.             $show_multiple_60mois true;
  2275.             $reference_multiple_ebe $multiple_ebe_60mois;
  2276.             $reference_multiple_rex $multiple_rex_60mois;
  2277.             $reference_multiple_rn $multiple_rn_60mois;
  2278.         }
  2279.         
  2280.         if ($bonus->__get('multipleEbe120mois') && $bonus->__get('multipleRex120mois') && $bonus->__get('multipleRn120mois')) {
  2281.             $multiple_ebe_120mois $bonus->__get('multipleEbe120mois');
  2282.             $multiple_rex_120mois $bonus->__get('multipleRex120mois');
  2283.             $multiple_rn_120mois $bonus->__get('multipleRn120mois');
  2284.         } else {
  2285.             $annonces_avec_prix_120mois $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
  2286.             
  2287.             $multiple_ebe = [];
  2288.             $multiple_rex = [];
  2289.             $multiple_rn = [];
  2290.             $annonces_ebe_120mois = [];
  2291.             $annonces_rex_120mois = [];
  2292.             $annonces_rn_120mois = [];
  2293.             
  2294.             foreach ($annonces_avec_prix_120mois as $a) {
  2295.                 if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
  2296.                     if ($a['prix_cession'] / $a['EBE_n'] >= $min_ebe && $a['prix_cession'] / $a['EBE_n'] <= $max_ebe) {
  2297.                         $multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
  2298.                         $annonces_ebe_120mois[] = $a;
  2299.                     }
  2300.                 }
  2301.                 
  2302.                 if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
  2303.                     if ($a['prix_cession'] / $a['resultat_exploitation_n'] >= $min_rex && $a['prix_cession'] / $a['resultat_exploitation_n'] <= $max_rex) {
  2304.                         $multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
  2305.                         $annonces_rex_120mois[] = $a;
  2306.                     }
  2307.                 }
  2308.                 
  2309.                 if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
  2310.                     if ($a['prix_cession'] / $a['resultat_net_n'] >= $min_rn && $a['prix_cession'] / $a['resultat_net_n'] <= $max_rn) {
  2311.                         $multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
  2312.                         $annonces_rn_120mois[] = $a;
  2313.                     }
  2314.                 }
  2315.             }
  2316.             
  2317.             /*$multiple_ebe_120mois_IQR = Statistiques::filtreIQR($multiple_ebe);
  2318.             $multiple_rex_120mois_IQR = Statistiques::filtreIQR($multiple_rex);
  2319.             $multiple_rn_120mois_IQR = Statistiques::filtreIQR($multiple_rn);*/
  2320.             
  2321.             $multiple_ebe_120mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_ebe$min_ebe$max_ebe$q1_ebe$q3_ebe$iqr_ebe);
  2322.             $multiple_rex_120mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_rex$min_rex$max_rex$q1_rex$q3_rex$iqr_rex);
  2323.             $multiple_rn_120mois_IQR Statistiques::filtreIQRAvecDonnees($multiple_rn$min_rn$max_rn$q1_rn$q3_rn$iqr_rn);
  2324.             
  2325.             /*$somme_multiple_ebe_120mois = array_sum($multiple_ebe_120mois_IQR['valeurs']);
  2326.             if (count($multiple_ebe_120mois_IQR['valeurs']) > 0) {
  2327.                 $multiple_ebe_120mois = number_format(array_sum($multiple_ebe_120mois_IQR['valeurs']) / count($multiple_ebe_120mois_IQR['valeurs']), 2, '.', ' ');
  2328.             } else {
  2329.                 $multiple_ebe_120mois = null;
  2330.             }*/
  2331.             
  2332.             $somme_multiple_ebe_120mois array_sum(array_values($multiple_ebe));
  2333.             if (count($multiple_ebe) > 0) {
  2334.                 $multiple_ebe_120mois number_format(array_sum(array_values($multiple_ebe)) / count($multiple_ebe), 2'.'' ');
  2335.             } else {
  2336.                 $multiple_ebe_120mois null;
  2337.             }
  2338.             
  2339.             /*$somme_multiple_rex_120mois = array_sum($multiple_rex_120mois_IQR['valeurs']);
  2340.             if (count($multiple_rex_120mois_IQR['valeurs']) > 0) {
  2341.                 $multiple_rex_120mois = number_format(array_sum($multiple_rex_120mois_IQR['valeurs']) / count($multiple_rex_120mois_IQR['valeurs']), 2, '.', ' ');
  2342.             } else {
  2343.                 $multiple_rex_120mois = null;
  2344.             }*/
  2345.             
  2346.             $somme_multiple_rex_120mois array_sum(array_values($multiple_rex));
  2347.             if (count($multiple_rex) > 0) {
  2348.                 $multiple_rex_120mois number_format(array_sum(array_values($multiple_rex)) / count($multiple_rex), 2'.'' ');
  2349.             } else {
  2350.                 $multiple_rex_120mois null;
  2351.             }
  2352.             
  2353.             /*$somme_multiple_rn_120mois = array_sum($multiple_rn_120mois_IQR['valeurs']);
  2354.             if (count($multiple_rn_120mois_IQR['valeurs']) > 0) {
  2355.                 $multiple_rn_120mois = number_format(array_sum($multiple_rn_120mois_IQR['valeurs']) / count($multiple_rn_120mois_IQR['valeurs']), 2, '.', ' ');
  2356.             } else {
  2357.                 $multiple_rn_120mois = null;
  2358.             }*/
  2359.             
  2360.             $somme_multiple_rn_120mois array_sum(array_values($multiple_rn));
  2361.             if (count($multiple_rn) > 0) {
  2362.                 $multiple_rn_120mois number_format(array_sum(array_values($multiple_rn)) / count($multiple_rn), 2'.'' ');
  2363.             } else {
  2364.                 $multiple_rn_120mois null;
  2365.             }
  2366.             
  2367.             $bonus->__set('multipleEbe120mois'$multiple_ebe_120mois);
  2368.             $bonus->__set('multipleRex120mois'$multiple_rex_120mois);
  2369.             $bonus->__set('multipleRn120mois'$multiple_rn_120mois);
  2370.             $update_bonus true;
  2371.         }
  2372.         
  2373.         // Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
  2374.         if ($multiple_ebe_120mois == $reference_multiple_ebe && $multiple_rex_120mois == $reference_multiple_rex && $multiple_rn_120mois == $reference_multiple_rn) {
  2375.             $show_multiple_120mois false;
  2376.         } else {
  2377.             $show_multiple_120mois true;
  2378.             $reference_multiple_ebe $multiple_ebe_120mois;
  2379.             $reference_multiple_rex $multiple_rex_120mois;
  2380.             $reference_multiple_rn $multiple_rn_120mois;
  2381.         }
  2382.         
  2383.         if ($bonus->__get('anneesHistorique') && $bonus->__get('historiqueEbe') && $bonus->__get('historiqueRex') && $bonus->__get('historiqueRn')) {
  2384.             $historique_ebe unserialize($bonus->__get('historiqueEbe'));
  2385.             $historique_rex unserialize($bonus->__get('historiqueRex'));
  2386.             $historique_rn unserialize($bonus->__get('historiqueRn'));
  2387.             $annees_historique explode(","$bonus->__get('anneesHistorique'));
  2388.             $data_null_historique_ebe false;
  2389.             $data_null_historique_rex false;
  2390.             $data_null_historique_rn false;
  2391.             
  2392.             foreach ($historique_ebe as $h) {
  2393.                 if ($h['y'] == null) {
  2394.                     $data_null_historique_ebe true;
  2395.                     break;
  2396.                 }
  2397.             }
  2398.             
  2399.             foreach ($historique_rex as $h) {
  2400.                 if ($h['y'] == null) {
  2401.                     $data_null_historique_rex true;
  2402.                     break;
  2403.                 }
  2404.             }
  2405.             
  2406.             foreach ($historique_rn as $h) {
  2407.                 if ($h['y'] == null) {
  2408.                     $data_null_historique_rn true;
  2409.                     break;
  2410.                 }
  2411.             }
  2412.         } else {
  2413.             $histoEbe $cb->getHistoriqueMultiplePrixEBE($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 1210);
  2414.             $annees_historique $histoEbe['annees_historique'];
  2415.             $historique_ebe $histoEbe['historique'];
  2416.             $data_null_historique_ebe $histoEbe['data_null'];
  2417.             
  2418.             $histoRex $cb->getHistoriqueMultiplePrixREX($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 1210);
  2419.             $historique_rex $histoRex['historique'];
  2420.             $data_null_historique_rex $histoRex['data_null'];
  2421.             
  2422.             $histoRN $cb->getHistoriqueMultiplePrixRN($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 1210);
  2423.             $historique_rn $histoRN['historique'];
  2424.             $data_null_historique_rn $histoRN['data_null'];
  2425.             
  2426.             $bonus->__set('anneesHistorique'implode(","$annees_historique));
  2427.             $bonus->__set('historiqueEbe'serialize($historique_ebe));
  2428.             $bonus->__set('historiqueRex'serialize($historique_rex));
  2429.             $bonus->__set('historiqueRn'serialize($historique_rn));
  2430.             $update_bonus true;
  2431.         }
  2432.         if ($update_bonus) {
  2433.             $this->em->persist($bonus);
  2434.             $this->em->flush();
  2435.         }
  2436.         // ====================  FIN ELEMENTS POUR LE BONUS ===================
  2437.         
  2438.         return $this->render('annonces/complement-annonce-vendeur/etape4.html.twig', [
  2439.             'id_annonce_vendeur' => $id_annonce_vendeur,
  2440.             'prix_cession_final' => $prix_cession_final,
  2441.             'nom_secteur_activite' => $nom_secteur_activite,
  2442.             'form' => $form->createView(),
  2443.             'code' => $code,
  2444.             'multiple_ebe_12mois' => $multiple_ebe_12mois,
  2445.             'multiple_rex_12mois' => $multiple_rex_12mois,
  2446.             'multiple_rn_12mois' => $multiple_rn_12mois,
  2447.             'multiple_ebe_24mois' => $multiple_ebe_24mois,
  2448.             'multiple_rex_24mois' => $multiple_rex_24mois,
  2449.             'multiple_rn_24mois' => $multiple_rn_24mois,
  2450.             'multiple_ebe_60mois' => $multiple_ebe_60mois,
  2451.             'multiple_rex_60mois' => $multiple_rex_60mois,
  2452.             'multiple_rn_60mois' => $multiple_rn_60mois,
  2453.             'multiple_ebe_120mois' => $multiple_ebe_120mois,
  2454.             'multiple_rex_120mois' => $multiple_rex_120mois,
  2455.             'multiple_rn_120mois' => $multiple_rn_120mois,
  2456.             'show_multiple_12mois' => $show_multiple_12mois,
  2457.             'show_multiple_24mois' => $show_multiple_24mois,
  2458.             'show_multiple_60mois' => $show_multiple_60mois,
  2459.             'show_multiple_120mois' => $show_multiple_120mois,
  2460.             'historique_ebe' => $historique_ebe,
  2461.             'data_null_historique_ebe' => $data_null_historique_ebe,
  2462.             'historique_rex' => $historique_rex,
  2463.             'data_null_historique_rex' => $data_null_historique_rex,
  2464.             'historique_rn' => $historique_rn,
  2465.             'data_null_historique_rn' => $data_null_historique_rn,
  2466.             'annees_historique' => $annees_historique,
  2467.         ]);
  2468.     }
  2469.     
  2470.     public  function complementAnnonceVendeurSuiteRetraitEtape5(Request $requestAesEncrytageStrategy $aesCoteFusacqBonusRepository $cfr$codePays) {
  2471.         $code $request->query->get('ref');
  2472.         
  2473.         // Si pas de code
  2474.         if (!$code) {
  2475.             return $this->redirectToRoute('index');
  2476.         }
  2477.         
  2478.         $id_annonce_vendeur $aes->decryptage($code);
  2479.         
  2480.         // Si $id_annonce_vendeur pas conforme
  2481.         if (!is_numeric($id_annonce_vendeur)) {
  2482.             return $this->redirectToRoute('index');
  2483.         }
  2484.         
  2485.         $annonce $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
  2486.         
  2487.         // Si annonce introuvable
  2488.         if (!$annonce) {
  2489.             return $this->redirectToRoute('index');
  2490.         }
  2491.         
  2492.         $user $this->getUser();
  2493.         
  2494.         // Si pas authentifié
  2495.         if (!$user) {
  2496.             $this->addFlash("error""Veuillez-vous authentifier");
  2497.             return $this->redirectToRoute('index');
  2498.         }
  2499.         
  2500.         // Si l'annonce n'appartient pas à l'utilisateur
  2501.         if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
  2502.             return $this->redirectToRoute('index');
  2503.         }
  2504.         
  2505.         $annoncesVendeurComplementPrixCession $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  2506.         
  2507.         if (!$annoncesVendeurComplementPrixCession) {
  2508.             $this->addFlash('error'"Une erreur s'est produite, veuillez réessayer");
  2509.             // Redirection vers l'étape 1
  2510.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays'ref' => $code]);
  2511.         }
  2512.         
  2513.         // On vérifie que les champs de l'etape 4 sont bien remplis
  2514.         if (!$annoncesVendeurComplementPrixCession->isEtape4Completed()) {
  2515.             $this->addFlash('error'"Une erreur s'est produite, veuillez réessayer");
  2516.             // Redirection vers l'étape 4
  2517.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_4', ['codePays' => $codePays'ref' => $code]);
  2518.         }
  2519.         
  2520.         // Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
  2521.         /*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
  2522.             return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
  2523.         }*/
  2524.         $form $this->createFormForStep(5$annoncesVendeurComplementPrixCession);
  2525.         
  2526.         $form->handleRequest($request);
  2527.         
  2528.         if ($form->isSubmitted() && $form->isValid()) {
  2529.             $annoncesVendeurComplementPrixCession->__set('isComplete'1);
  2530.             $this->em->persist($annoncesVendeurComplementPrixCession);
  2531.             $this->em->flush();
  2532.             
  2533.             // Redirection vers l'accueil
  2534.             return $this->redirectToRoute('index', ['codePays' => substr($codePays12), 'ref' => $code]);
  2535.         }
  2536.         
  2537.         return $this->render('annonces/complement-annonce-vendeur/etape5.html.twig', [
  2538.             'id_annonce_vendeur' => $id_annonce_vendeur,
  2539.             'form' => $form->createView(),
  2540.             'code' => $code
  2541.         ]);
  2542.     }
  2543.     
  2544.     public function deleteAlerte(Request $requestTranslationExtension $translationExtension$idAlerte$codePays) {
  2545.         $lang $request->getSession()->get('lang');
  2546.         $user $this->getUser();
  2547.         
  2548.         if (!$user) {
  2549.             $this->addFlash('error'$translationExtension->translate("veuillez vous identifier pour consulter cette page"$lang'''M'''));
  2550.             $uri $request->server->get('HTTP_REFERER'); // redirect to some page
  2551.              if (empty($uri)) {
  2552.                  return new RedirectResponse('/');
  2553.             }
  2554.             return new RedirectResponse($uri); // redirect to some page
  2555.         }
  2556.         
  2557.         $alerte $this->getDoctrine()->getRepository(Alertes::class)->findOneBy(['id_alerte' => $idAlerte]);
  2558.         
  2559.         // On verifie que l'alerte existe et qu'elle appartient à l'utilisateur
  2560.         if (!$alerte || $alerte->__get('login_utilisateur') != $user->_get('login_utilisateur')) {
  2561.             $this->addFlash('error'$translationExtension->translate("une erreur s'est produite, veuillez réessayer"$lang'''M'''));
  2562.         } else {
  2563.             $this->getDoctrine()->getManager()->remove($alerte);
  2564.             $this->getDoctrine()->getManager()->flush();
  2565.             $this->addFlash('success'$translationExtension->translate("votre alerte a bien ete supprimee"$lang'''M'''));
  2566.         }
  2567.         
  2568.         return $this->redirectToRoute('alertes', ['codePays' => $codePays]);
  2569.     }
  2570.     
  2571.     private function prepareAlerteParameters($alerte null) {
  2572.         $parameters = [];
  2573.         
  2574.         if ($alerte) {
  2575.             $parameters['id_alerte'] = $alerte->__get('id_alerte');
  2576.             $parameters['type_annonce_surveillee'] = $alerte->__get('type_annonce_surveillee');
  2577.             $parameters['titre_alerte'] = $alerte->__get('titre_alerte');
  2578.             $parameters['id_secteur_activite'] = $alerte->__get('id_secteur_activite');
  2579.             $parameters['id_localisations'] = $alerte->__get('id_localisations') != ",tous," $alerte->__get('id_localisations') : null;
  2580.             
  2581.             $parameters['identifiant_profil'] =$alerte->__get('identifiant_profil')??NULL;
  2582.                
  2583.             if ($parameters['id_localisations']) {
  2584.                 $array_id_localisation array_values(array_filter(explode(','$parameters['id_localisations'])));
  2585.                 
  2586.                 if ($array_id_localisation) {
  2587.                     $array_localisations = [];
  2588.                     
  2589.                     for ($i 0$i count($array_id_localisation); $i++) {
  2590.                         if ($array_id_localisation[$i] != "tous") {
  2591.                             $idLocalisation $array_id_localisation[$i];
  2592.                             $nom_localisation $this->lm->getStringNomLocalisationById($idLocalisation);
  2593.                             $array_localisations[$array_id_localisation[$i]] = $nom_localisation;
  2594.                         }
  2595.                     }
  2596.                     $parameters['array_localisation'] = $array_localisations;
  2597.                 }
  2598.             }
  2599.             
  2600.             if ($parameters['id_secteur_activite']) {
  2601.                 $array_id_secteur_activite array_values(array_filter(explode(','$parameters['id_secteur_activite'])));
  2602.                 
  2603.                 if ($array_id_secteur_activite) {
  2604.                     $array_secteur_activite = [];
  2605.                     
  2606.                     for ($i 0$i count($array_id_secteur_activite); $i++) {
  2607.                         $idSecteurActivite $array_id_secteur_activite[$i];
  2608.                         if ($idSecteurActivite != "tous") {
  2609.                             $nom_secteur_activite $this->sm->getStringNomSecteurActiviteById($idSecteurActivite);
  2610.                             $array_secteur_activite[$array_id_secteur_activite[$i]] = $nom_secteur_activite;
  2611.                         }
  2612.                     }
  2613.                     $parameters['array_secteur_activite'] = $array_secteur_activite;
  2614.                 }
  2615.             }
  2616.             
  2617. //            $nb_personnes_min = $alerte->__get('nb_personnes_min');
  2618. //            $nb_personnes_max = $alerte->__get('nb_personnes_max');
  2619.             
  2620. //            if ($nb_personnes_min == null && $nb_personnes_max == 9) {
  2621. //                $nb_personnes = 1;
  2622. //            } elseif($nb_personnes_min == 10 && $nb_personnes_max == 50) {
  2623. //                $nb_personnes = 2;
  2624. //            } elseif($nb_personnes_min == 50 && $nb_personnes_max == 100) {
  2625. //                $nb_personnes = 3;
  2626. //            } elseif($nb_personnes_min == 100 && $nb_personnes_max == 200) {
  2627. //                $nb_personnes = 4;
  2628. //            } elseif($nb_personnes_min == 200 && $nb_personnes_max == null) {
  2629. //                $nb_personnes = 5;
  2630. //            } else {
  2631. //                $nb_personnes = null;
  2632. //            }
  2633.             
  2634. //            $parameters['nb_personnes'] = $nb_personnes;
  2635.             
  2636.             $parameters['ca_min'] = $alerte->__get('ca_min') ? $alerte->__get('ca_min') : 0;
  2637.             $parameters['ca_max'] = $alerte->__get('ca_max') ? $alerte->__get('ca_max') : 20000000;
  2638.             
  2639.             $parameters['nb_personnes_min']= $alerte->__get('nb_personnes_min') ? $alerte->__get('nb_personnes_min') : 0;
  2640.             $parameters['nb_personnes_max']= $alerte->__get('nb_personnes_max') ? $alerte->__get('nb_personnes_max') : 200;
  2641.                     
  2642.         
  2643.             $parameters['redressement_judiciaire'] = $alerte->__get('redressement_judiciaire');
  2644.             $parameters['type_cession'] = $alerte->__get('type_cession');
  2645.          
  2646.          
  2647.         } else {
  2648.             $parameters['id_alerte'] = null;
  2649.             $parameters['type_annonce_surveillee'] = null;
  2650.             $parameters['titre_alerte'] = null;
  2651.             $parameters['id_secteur_activite'] = null;
  2652.             $parameters['id_localisations'] = null;
  2653.             $parameters['nb_personnes'] = null;
  2654.             
  2655.             $parameters['ca_min'] = null;
  2656.             $parameters['ca_max'] = 20000000;
  2657.             
  2658.             
  2659.             $parameters['nb_personnes_min'] = 0;
  2660.             $parameters['nb_personnes_max'] = 200;
  2661.             
  2662.             $parameters['redressement_judiciaire'] = null;
  2663.             $parameters['type_cession'] = null;
  2664.           
  2665.         }
  2666.         
  2667.         return $parameters;
  2668.     }
  2669.     
  2670.     function bonusPdf(Request $requestAesEncrytageStrategy $aesTranslationExtension $translationExtensionStatistiquesSecteursActiviteRepository $statistiquesRepoHistoriqueStatsSecteursRepository $historiquesStatsRepoSecteursActiviteRepository $secteursRepoPDFGenerator $pfCoteFusacqBonusRepository $cfr$codePays) {
  2671.         $code $request->query->get('ref');
  2672.         
  2673.         // Si pas de code
  2674.         if (!$code) {
  2675.             return $this->redirectToRoute('index');
  2676.         }
  2677.         
  2678.         $id_annonce_vendeur $aes->decryptage($code);
  2679.         
  2680.         // Si $id_annonce_vendeur pas conforme
  2681.         if (!is_numeric($id_annonce_vendeur)) {
  2682.             return $this->redirectToRoute('index');
  2683.         }
  2684.         
  2685.         $annonce $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
  2686.         
  2687.         // Si annonce introuvable
  2688.         if (!$annonce) {
  2689.             return $this->redirectToRoute('index');
  2690.         }
  2691.         
  2692.         $user $this->getUser();
  2693.         
  2694.         // Si pas authentifié
  2695.         if (!$user) {
  2696.             $this->addFlash("error""Veuillez-vous authentifier");
  2697.             return $this->redirectToRoute('index');
  2698.         }
  2699.         
  2700.         // Si l'annonce n'appartient pas à l'utilisateur
  2701.         if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
  2702.             return $this->redirectToRoute('index');
  2703.         }
  2704.         
  2705.         $annoncesVendeurComplementPrixCession $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  2706.         
  2707.         // Si le formulaire n'a pas été complété entièrement, on redirige vers celui-ci
  2708.         if (!$annoncesVendeurComplementPrixCession->isCompleted()) {
  2709.             // Redirection vers l'étape 1
  2710.             $lang $request->getSession()->get('lang''fr');
  2711.             $this->addFlash('error'$translationExtension->translate("veuillez compléter toutes les étapes afin d'accéder à la synthèse PDF"$lang'''M'''));
  2712.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays'ref' => $code]);
  2713.         }
  2714.         
  2715.         // =====================  ELEMENTS POUR LE BONUS 1 =====================
  2716.         // On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
  2717.         $bonus $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
  2718.         
  2719.         // Si le bonus n'existe pas, on redirige vers le formulaire
  2720.         if (!$bonus) {
  2721.             // Redirection vers l'étape 1
  2722.             $lang $request->getSession()->get('lang''fr');
  2723.             $this->addFlash('error'$translationExtension->translate("veuillez compléter toutes les étapes afin d'accéder à la synthèse PDF"$lang'''M'''));
  2724.             return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays'ref' => $code]);
  2725.         }
  2726.         
  2727.         $nom_secteur_activite $bonus->__get('nomSecteurActivite');
  2728.         $annee_vente $bonus->__get('anneeVente');
  2729.         $classement_annee $bonus->__get('classementAnnee');
  2730.         $classement_1an $bonus->__get('classement1an');
  2731.         $classement_10ans $bonus->__get('classement10ans');
  2732.         
  2733.         $classement_secteur_activite $bonus->__get('classementSecteurActivite');
  2734.         $nb_secteurs_3 $bonus->__get('nbSecteurs3');
  2735.         $nom_secteur_activite_2 $bonus->__get('nomSecteurActivite2');
  2736.         $classement_secteur_activite_2 $bonus->__get('classementSecteurActivite2');
  2737.         $nb_secteurs_2 $bonus->__get('nbSecteurs2');
  2738.         $nb_annonces_secteur_activite_2 $bonus->__get('nbAnnoncesSecteurActivite2');
  2739.         
  2740.         $nb_annonce_12mois $bonus->__get('nbAnnonce12mois');
  2741.         $nb_annonce_24mois $bonus->__get('nbAnnonce24mois');
  2742.         $nb_annonce_60mois $bonus->__get('nbAnnonce60mois');
  2743.         $nb_annonce_120mois $bonus->__get('nbAnnonce120mois');
  2744.         
  2745.         $historique unserialize($bonus->__get('historiqueNbAnnoncesDeposees'));
  2746.         $annees_historique explode(","$bonus->__get('anneesHistorique'));
  2747.         
  2748.         $graph1_data = [
  2749.             'type' => 'line',
  2750.             'data' => [
  2751.                 'labels' => $annees_historique,
  2752.                 'datasets' => [
  2753.                     [
  2754.                         'label' => "Nombre d'annonces déposées",
  2755.                         'data' => $historique,
  2756.                         'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
  2757.                         'borderColor' => 'rgba(48, 128, 208, 1)',
  2758.                         'borderWidth' => 2,
  2759.                         'fill' => false
  2760.                     ]
  2761.                 ]
  2762.             ],
  2763.             'options' => [
  2764.                 'scales' => [
  2765.                     'y' => [
  2766.                         'beginAtZero' => true
  2767.                     ]
  2768.                 ]
  2769.             ]
  2770.         ];
  2771.         
  2772.         $graph1 $this->renderPngBase64($graph1_data);
  2773.         
  2774.         // =====================  ELEMENTS POUR LE BONUS 2 =====================
  2775.         $prix_annonce_moyen_12mois $bonus->__get('prixAnnonceMoyen12mois');
  2776.         $ca_moyen_avec_prix_12mois $bonus->__get('caMoyenAvecPrix12mois');
  2777.         
  2778.         // Si $prix_annonce_moyen_12mois ou $ca_moyen_avec_prix_12mois vide
  2779.         if ($prix_annonce_moyen_12mois === "" || $ca_moyen_avec_prix_12mois === "") {
  2780.             $show_prix_annonce_moyen_12mois false;
  2781.         } else {
  2782.             $show_prix_annonce_moyen_12mois true;
  2783.         }
  2784.         
  2785.         $reference_prix_annonce_moyen $prix_annonce_moyen_12mois;
  2786.         $reference_ca_moyen $ca_moyen_avec_prix_12mois;
  2787.         
  2788.         $prix_annonce_moyen_24mois $bonus->__get('prixAnnonceMoyen24mois');
  2789.         $ca_moyen_avec_prix_24mois $bonus->__get('caMoyenAvecPrix24mois');
  2790.         
  2791.         // Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
  2792.         if ($prix_annonce_moyen_24mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_24mois == $reference_ca_moyen) {
  2793.             $show_prix_annonce_moyen_24mois false;
  2794.         } else {
  2795.             $show_prix_annonce_moyen_24mois true;
  2796.             $reference_prix_annonce_moyen $prix_annonce_moyen_24mois;
  2797.             $reference_ca_moyen $ca_moyen_avec_prix_24mois;
  2798.         }
  2799.         
  2800.         $prix_annonce_moyen_60mois $bonus->__get('prixAnnonceMoyen60mois');
  2801.         $ca_moyen_avec_prix_60mois $bonus->__get('caMoyenAvecPrix60mois');
  2802.         
  2803.         // Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
  2804.         if ($prix_annonce_moyen_60mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_60mois == $reference_ca_moyen) {
  2805.             $show_prix_annonce_moyen_60mois false;
  2806.         } else {
  2807.             $show_prix_annonce_moyen_60mois true;
  2808.             $reference_prix_annonce_moyen $prix_annonce_moyen_60mois;
  2809.             $reference_ca_moyen $ca_moyen_avec_prix_60mois;
  2810.         }
  2811.         
  2812.         $prix_annonce_moyen_120mois $bonus->__get('prixAnnonceMoyen120mois');
  2813.         $ca_moyen_avec_prix_120mois $bonus->__get('caMoyenAvecPrix120mois');
  2814.         
  2815.         // Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
  2816.         if ($prix_annonce_moyen_120mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_120mois == $reference_ca_moyen) {
  2817.             $show_prix_annonce_moyen_120mois false;
  2818.         } else {
  2819.             $show_prix_annonce_moyen_120mois true;
  2820.             $reference_prix_annonce_moyen $prix_annonce_moyen_120mois;
  2821.             $reference_ca_moyen $ca_moyen_avec_prix_120mois;
  2822.         }
  2823.         
  2824.         $historique1 unserialize($bonus->__get('historiquePrixMoyen'));
  2825.         $historique2 unserialize($bonus->__get('historiqueRatioMoyenPrixNbPers'));
  2826.         $historique3 unserialize($bonus->__get('historiqueRatioMoyenPrixCa'));
  2827.         
  2828.         $data_null_historique1 false;
  2829.         $data_null_historique2 false;
  2830.         $data_null_historique3 false;
  2831.         
  2832.         foreach ($historique1 as $h) {
  2833.             if ($h['y'] == null) {
  2834.                 $data_null_historique1 true;
  2835.                 break;
  2836.             }
  2837.         }
  2838.         
  2839.         foreach ($historique2 as $h) {
  2840.             if ($h['y'] == null) {
  2841.                 $data_null_historique2 true;
  2842.                 break;
  2843.             }
  2844.         }
  2845.         
  2846.         foreach ($historique3 as $h) {
  2847.             if ($h['y'] == null) {
  2848.                 $data_null_historique3 true;
  2849.                 break;
  2850.             }
  2851.         }
  2852.         
  2853.         $graph2_data = [
  2854.             'type' => 'line',
  2855.             'data' => [
  2856.                 'labels' => $annees_historique,
  2857.                 'datasets' => [
  2858.                     [
  2859.                         'label' => "Prix moyen (en k€)",
  2860.                         'data' => $historique1,
  2861.                         'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
  2862.                         'borderColor' => 'rgba(48, 128, 208, 1)',
  2863.                         'borderWidth' => 2,
  2864.                         'fill' => false
  2865.                     ]
  2866.                 ]
  2867.             ],
  2868.             'options' => [
  2869.                 'scales' => [
  2870.                     'y' => [
  2871.                         'beginAtZero' => true
  2872.                     ]
  2873.                 ]
  2874.             ]
  2875.         ];
  2876.         
  2877.         $graph2 $this->renderPngBase64($graph2_data);
  2878.         
  2879.         $graph3_data = [
  2880.             'type' => 'line',
  2881.             'data' => [
  2882.                 'labels' => $annees_historique,
  2883.                 'datasets' => [
  2884.                     [
  2885.                         'label' => "Prix moyen / collaborateur (en k€)",
  2886.                         'data' => $historique2,
  2887.                         'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
  2888.                         'borderColor' => 'rgba(48, 128, 208, 1)',
  2889.                         'borderWidth' => 2,
  2890.                         'fill' => false
  2891.                     ]
  2892.                 ]
  2893.             ],
  2894.             'options' => [
  2895.                 'scales' => [
  2896.                     'y' => [
  2897.                         'beginAtZero' => true
  2898.                     ]
  2899.                 ]
  2900.             ]
  2901.         ];
  2902.         
  2903.         $graph3 $this->renderPngBase64($graph3_data);
  2904.         
  2905.         $graph4_data = [
  2906.             'type' => 'line',
  2907.             'data' => [
  2908.                 'labels' => $annees_historique,
  2909.                 'datasets' => [
  2910.                     [
  2911.                         'label' => "Prix moyen / CA",
  2912.                         'data' => $historique3,
  2913.                         'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
  2914.                         'borderColor' => 'rgba(48, 128, 208, 1)',
  2915.                         'borderWidth' => 2,
  2916.                         'fill' => false
  2917.                     ]
  2918.                 ]
  2919.             ],
  2920.             'options' => [
  2921.                 'scales' => [
  2922.                     'y' => [
  2923.                         'beginAtZero' => true
  2924.                     ]
  2925.                 ]
  2926.             ]
  2927.         ];
  2928.         
  2929.         $graph4 $this->renderPngBase64($graph4_data);
  2930.         
  2931.         // =====================  ELEMENTS POUR LE BONUS 3 =====================
  2932.         $multiple_12mois $bonus->__get('multiple12mois');
  2933.         
  2934.         // Si $multiple_12mois vide
  2935.         if ($multiple_12mois === "") {
  2936.             $show_multiple_ca_12mois false;
  2937.         } else {
  2938.             $show_multiple_ca_12mois true;
  2939.         }
  2940.         
  2941.         $reference_multiple_ca $multiple_12mois;
  2942.         
  2943.         $multiple_24mois $bonus->__get('multiple24mois');
  2944.         
  2945.         // Si multiple identique à reference, on n'affiche pas la donnée
  2946.         if ($multiple_24mois == $reference_multiple_ca) {
  2947.             $show_multiple_ca_24mois false;
  2948.         } else {
  2949.             $show_multiple_ca_24mois true;
  2950.             $reference_multiple_ca $multiple_24mois;
  2951.         }
  2952.         
  2953.         $multiple_60mois $bonus->__get('multiple60mois');
  2954.         
  2955.         // Si multiple identique à reference, on n'affiche pas la donnée
  2956.         if ($multiple_60mois == $reference_multiple_ca) {
  2957.             $show_multiple_ca_60mois false;
  2958.         } else {
  2959.             $show_multiple_ca_60mois true;
  2960.             $reference_multiple_ca $multiple_60mois;
  2961.         }
  2962.         
  2963.         $multiple_120mois $bonus->__get('multiple120mois');
  2964.         
  2965.         // Si multiple identique à reference, on n'affiche pas la donnée
  2966.         if ($multiple_120mois == $reference_multiple_ca) {
  2967.             $show_multiple_ca_120mois false;
  2968.         } else {
  2969.             $show_multiple_ca_120mois true;
  2970.             $reference_multiple_ca $multiple_120mois;
  2971.         }
  2972.         
  2973.         $historique unserialize($bonus->__get('historiqueRatioMoyenPrixCa'));
  2974.         
  2975.         // =====================  ELEMENTS POUR LE BONUS 4 =====================
  2976.         $multiple_ebe_12mois $bonus->__get('multipleEbe12mois');
  2977.         $multiple_rex_12mois $bonus->__get('multipleRex12mois');
  2978.         $multiple_rn_12mois $bonus->__get('multipleRn12mois');
  2979.         
  2980.         // Si multiple_ebe, multiple_rex et multiple_rn vide
  2981.         if ($multiple_ebe_12mois == "" && $multiple_rex_12mois == "" && $multiple_rn_12mois == "") {
  2982.             $show_multiple_12mois false;
  2983.         } else {
  2984.             $show_multiple_12mois true;
  2985.         }
  2986.         
  2987.         $reference_multiple_ebe $multiple_ebe_12mois;
  2988.         $reference_multiple_rex $multiple_rex_12mois;
  2989.         $reference_multiple_rn $multiple_rn_12mois;
  2990.         
  2991.         $multiple_ebe_24mois $bonus->__get('multipleEbe24mois');
  2992.         $multiple_rex_24mois $bonus->__get('multipleRex24mois');
  2993.         $multiple_rn_24mois $bonus->__get('multipleRn24mois');
  2994.         
  2995.         // Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
  2996.         if ($multiple_ebe_24mois == $reference_multiple_ebe && $multiple_rex_24mois == $reference_multiple_rex && $multiple_rn_24mois == $reference_multiple_rn) {
  2997.             $show_multiple_24mois false;
  2998.         } else {
  2999.             $show_multiple_24mois true;
  3000.             $reference_multiple_ebe $multiple_ebe_24mois;
  3001.             $reference_multiple_rex $multiple_rex_24mois;
  3002.             $reference_multiple_rn $multiple_rn_24mois;
  3003.         }
  3004.         $multiple_ebe_60mois $bonus->__get('multipleEbe60mois');
  3005.         $multiple_rex_60mois $bonus->__get('multipleRex60mois');
  3006.         $multiple_rn_60mois $bonus->__get('multipleRn60mois');
  3007.         
  3008.         // Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
  3009.         if ($multiple_ebe_60mois == $reference_multiple_ebe && $multiple_rex_60mois == $reference_multiple_rex && $multiple_rn_60mois == $reference_multiple_rn) {
  3010.             $show_multiple_60mois false;
  3011.         } else {
  3012.             $show_multiple_60mois true;
  3013.             $reference_multiple_ebe $multiple_ebe_60mois;
  3014.             $reference_multiple_rex $multiple_rex_60mois;
  3015.             $reference_multiple_rn $multiple_rn_60mois;
  3016.         }
  3017.         
  3018.         $multiple_ebe_120mois $bonus->__get('multipleEbe120mois');
  3019.         $multiple_rex_120mois $bonus->__get('multipleRex120mois');
  3020.         $multiple_rn_120mois $bonus->__get('multipleRn120mois');
  3021.         
  3022.         // Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
  3023.         if ($multiple_ebe_120mois == $reference_multiple_ebe && $multiple_rex_120mois == $reference_multiple_rex && $multiple_rn_120mois == $reference_multiple_rn) {
  3024.             $show_multiple_120mois false;
  3025.         } else {
  3026.             $show_multiple_120mois true;
  3027.             $reference_multiple_ebe $multiple_ebe_120mois;
  3028.             $reference_multiple_rex $multiple_rex_120mois;
  3029.             $reference_multiple_rn $multiple_rn_120mois;
  3030.         }
  3031.         
  3032.         $historique_ebe unserialize($bonus->__get('historiqueEbe'));
  3033.         $historique_rex unserialize($bonus->__get('historiqueRex'));
  3034.         $historique_rn unserialize($bonus->__get('historiqueRn'));
  3035.         
  3036.         $data_null_historique_ebe false;
  3037.         $data_null_historique_rex false;
  3038.         $data_null_historique_rn false;
  3039.         
  3040.         foreach ($historique_ebe as $h) {
  3041.             if ($h['y'] == null) {
  3042.                 $data_null_historique_ebe true;
  3043.                 break;
  3044.             }
  3045.         }
  3046.         
  3047.         foreach ($historique_rex as $h) {
  3048.             if ($h['y'] == null) {
  3049.                 $data_null_historique_rex true;
  3050.                 break;
  3051.             }
  3052.         }
  3053.         
  3054.         foreach ($historique_rn as $h) {
  3055.             if ($h['y'] == null) {
  3056.                 $data_null_historique_rn true;
  3057.                 break;
  3058.             }
  3059.         }
  3060.         
  3061.         $graph5_data = [
  3062.             'type' => 'line',
  3063.             'data' => [
  3064.                 'labels' => $annees_historique,
  3065.                 'datasets' => [
  3066.                     [
  3067.                         'label' => "Multiple Prix demandé / EBE",
  3068.                         'data' => $historique_ebe,
  3069.                         'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
  3070.                         'borderColor' => 'rgba(48, 128, 208, 1)',
  3071.                         'borderWidth' => 2,
  3072.                         'fill' => false
  3073.                     ]
  3074.                 ]
  3075.             ],
  3076.             'options' => [
  3077.                 'scales' => [
  3078.                     'y' => [
  3079.                         'beginAtZero' => true
  3080.                     ]
  3081.                 ]
  3082.             ]
  3083.         ];
  3084.         
  3085.         $graph5 $this->renderPngBase64($graph5_data);
  3086.         
  3087.         $graph6_data = [
  3088.             'type' => 'line',
  3089.             'data' => [
  3090.                 'labels' => $annees_historique,
  3091.                 'datasets' => [
  3092.                     [
  3093.                         'label' => "Multiple Prix demandé / REX",
  3094.                         'data' => $historique_rex,
  3095.                         'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
  3096.                         'borderColor' => 'rgba(48, 128, 208, 1)',
  3097.                         'borderWidth' => 2,
  3098.                         'fill' => false
  3099.                     ]
  3100.                 ]
  3101.             ],
  3102.             'options' => [
  3103.                 'scales' => [
  3104.                     'y' => [
  3105.                         'beginAtZero' => true
  3106.                     ]
  3107.                 ]
  3108.             ]
  3109.         ];
  3110.         
  3111.         $graph6 $this->renderPngBase64($graph6_data);
  3112.         
  3113.         $graph7_data = [
  3114.             'type' => 'line',
  3115.             'data' => [
  3116.                 'labels' => $annees_historique,
  3117.                 'datasets' => [
  3118.                     [
  3119.                         'label' => "Multiple Prix demandé / RN",
  3120.                         'data' => $historique_rn,
  3121.                         'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
  3122.                         'borderColor' => 'rgba(48, 128, 208, 1)',
  3123.                         'borderWidth' => 2,
  3124.                         'fill' => false
  3125.                     ]
  3126.                 ]
  3127.             ],
  3128.             'options' => [
  3129.                 'scales' => [
  3130.                     'y' => [
  3131.                         'beginAtZero' => true
  3132.                     ]
  3133.                 ]
  3134.             ]
  3135.         ];
  3136.         
  3137.         $graph7 $this->renderPngBase64($graph7_data);
  3138.         
  3139.         if ($data_null_historique_rex && $data_null_historique_rn) {
  3140.             $page_count 4;
  3141.         } else {
  3142.             $page_count 5;
  3143.         }
  3144.         return $pf->generatePDFviewBrowser(
  3145.             'templates_pdf/compte/la_cote_fusacq/pdf_bonus.html.twig',
  3146.             [
  3147.                 'lang' => 'fr',
  3148.                 'id_annonce_vendeur' => $id_annonce_vendeur,
  3149.                 'nom_secteur_activite' => $nom_secteur_activite,
  3150.                 'annee_vente' => $annee_vente,
  3151.                 'classement_annee' => $classement_annee,
  3152.                 'classement_1an' => $classement_1an,
  3153.                 'classement_10ans' => $classement_10ans,
  3154.                 'nb_annonce_12mois' => $nb_annonce_12mois,
  3155.                 'nb_annonce_24mois' => $nb_annonce_24mois,
  3156.                 'nb_annonce_60mois' => $nb_annonce_60mois,
  3157.                 'nb_annonce_120mois' => $nb_annonce_120mois,
  3158.                 'prix_annonce_moyen_12mois' => $prix_annonce_moyen_12mois,
  3159.                 'ca_moyen_avec_prix_12mois' => $ca_moyen_avec_prix_12mois,
  3160.                 'show_prix_annonce_moyen_12mois' => $show_prix_annonce_moyen_12mois,
  3161.                 'prix_annonce_moyen_24mois' => $prix_annonce_moyen_24mois,
  3162.                 'ca_moyen_avec_prix_24mois' => $ca_moyen_avec_prix_24mois,
  3163.                 'show_prix_annonce_moyen_24mois' => $show_prix_annonce_moyen_24mois,
  3164.                 'prix_annonce_moyen_60mois' => $prix_annonce_moyen_60mois,
  3165.                 'ca_moyen_avec_prix_60mois' => $ca_moyen_avec_prix_60mois,
  3166.                 'show_prix_annonce_moyen_60mois' => $show_prix_annonce_moyen_60mois,
  3167.                 'prix_annonce_moyen_120mois' => $prix_annonce_moyen_120mois,
  3168.                 'ca_moyen_avec_prix_120mois' => $ca_moyen_avec_prix_120mois,
  3169.                 'show_prix_annonce_moyen_120mois' => $show_prix_annonce_moyen_120mois,
  3170.                 'data_null_historique1' => $data_null_historique1,
  3171.                 'data_null_historique2' => $data_null_historique2,
  3172.                 'data_null_historique3' => $data_null_historique3,
  3173.                 'classement_secteur_activite' => $classement_secteur_activite,
  3174.                 'nb_secteurs_3' => $nb_secteurs_3,
  3175.                 'nom_secteur_activite_2' => $nom_secteur_activite_2,
  3176.                 'classement_secteur_activite_2' => $classement_secteur_activite_2,
  3177.                 'nb_secteurs_2' => $nb_secteurs_2,
  3178.                 'nb_annonces_secteur_activite_2' => $nb_annonces_secteur_activite_2,
  3179.                 'graph1' => $graph1,
  3180.                 'graph2' => $graph2,
  3181.                 'graph3' => $graph3,
  3182.                 'graph4' => $graph4,
  3183.                 'multiple_12mois' => $multiple_12mois,
  3184.                 'multiple_24mois' => $multiple_24mois,
  3185.                 'multiple_60mois' => $multiple_60mois,
  3186.                 'multiple_120mois' => $multiple_120mois,
  3187.                 'show_multiple_ca_12mois' => $show_multiple_ca_12mois,
  3188.                 'show_multiple_ca_24mois' => $show_multiple_ca_24mois,
  3189.                 'show_multiple_ca_60mois' => $show_multiple_ca_60mois,
  3190.                 'show_multiple_ca_120mois' => $show_multiple_ca_120mois,
  3191.                 
  3192.                 'multiple_ebe_12mois' => $multiple_ebe_12mois,
  3193.                 'multiple_rex_12mois' => $multiple_rex_12mois,
  3194.                 'multiple_rn_12mois' => $multiple_rn_12mois,
  3195.                 'multiple_ebe_24mois' => $multiple_ebe_24mois,
  3196.                 'multiple_rex_24mois' => $multiple_rex_24mois,
  3197.                 'multiple_rn_24mois' => $multiple_rn_24mois,
  3198.                 'multiple_ebe_60mois' => $multiple_ebe_60mois,
  3199.                 'multiple_rex_60mois' => $multiple_rex_60mois,
  3200.                 'multiple_rn_60mois' => $multiple_rn_60mois,
  3201.                 'multiple_ebe_120mois' => $multiple_ebe_120mois,
  3202.                 'multiple_rex_120mois' => $multiple_rex_120mois,
  3203.                 'multiple_rn_120mois' => $multiple_rn_120mois,
  3204.                 'show_multiple_12mois' => $show_multiple_12mois,
  3205.                 'show_multiple_24mois' => $show_multiple_24mois,
  3206.                 'show_multiple_60mois' => $show_multiple_60mois,
  3207.                 'show_multiple_120mois' => $show_multiple_120mois,
  3208.                 'graph5' => $graph5,
  3209.                 'graph6' => $graph6,
  3210.                 'graph7' => $graph7,
  3211.                 'data_null_historique_ebe' => $data_null_historique_ebe,
  3212.                 'data_null_historique_rex' => $data_null_historique_rex,
  3213.                 'data_null_historique_rn' => $data_null_historique_rn,
  3214.                 'page_count' => $page_count
  3215.             ],
  3216.             'Synthèse des bonus - Annonce V'.$annonce->_get('id_annonce_vendeur'),
  3217.             'synthese_bonus'
  3218.         );
  3219.     }
  3220.     
  3221.     private function renderPngBase64(array $chartConfigint $width 599int $height 327float $dpr 1.0float $version 4.0): string
  3222.     {
  3223.         // VERSION FILE_GET_CONTENTS
  3224.         
  3225.         /*
  3226.         // 1) JSON Chart.js
  3227.         $json = json_encode($chartConfig, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
  3228.         
  3229.         // 2) Encodage pour URL
  3230.         $url = 'https://quickchart.io/chart?c=' . urlencode($json)
  3231.         . '&width=' . $width
  3232.         . '&height=' . $height
  3233.         . '&devicePixelRatio=' . $dpr
  3234.         . '&version=' .$version;
  3235.         
  3236.         // 3) Récupération image
  3237.         $png = file_get_contents($url);
  3238.         
  3239.         if ($png === false) {
  3240.             throw new \RuntimeException("Impossible de récupérer l'image du graphe");
  3241.         }
  3242.         */
  3243.         
  3244.         // VERSION CURL
  3245.         
  3246.         $url 'https://quickchart.io/chart';
  3247.         
  3248.         $payload json_encode([
  3249.             'c' => $chartConfig,
  3250.             'width' => $width,
  3251.             'height' => $height,
  3252.             'devicePixelRatio' => $dpr,
  3253.             'version' => $version
  3254.         ]);
  3255.         
  3256.         $ch curl_init($url);
  3257.         curl_setopt_array($ch, [
  3258.             CURLOPT_RETURNTRANSFER => true,
  3259.             CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
  3260.             CURLOPT_POST           => true,
  3261.             CURLOPT_POSTFIELDS     => $payload,
  3262.         ]);
  3263.         
  3264.         $png curl_exec($ch);
  3265.         if ($png === false) {
  3266.             throw new \RuntimeException('Erreur cURL : ' curl_error($ch));
  3267.         }
  3268.         curl_close($ch);
  3269.         
  3270.         return 'data:image/png;base64,' base64_encode($png);
  3271.     }
  3272.     
  3273.     private function removeLocalisationLetter($id_localisation)
  3274.     {
  3275.         // On retire les lettres p, r et d (pays / region / departement)
  3276.         return preg_replace('/[prd]/'""$id_localisation);
  3277.     }
  3278.     
  3279.     private function createFormForStep(int $stepAnnoncesVendeurComplementPrixCession $data$options null)
  3280.     {
  3281.         switch ($step) {
  3282.             case 1:
  3283.                 return $this->createForm(Etape1::class, $data);
  3284.             case 2:
  3285.                 return $this->createForm(Etape2::class, $data$options);
  3286.             case 3:
  3287.                 return $this->createForm(Etape3::class, $data$options);
  3288.             case 4:
  3289.                 return $this->createForm(Etape4::class, $data$options);
  3290.             case 5:
  3291.                 return $this->createForm(Etape5::class, $data);
  3292.             default:
  3293.                 throw new \InvalidArgumentException('Étape invalide');
  3294.         }
  3295.     }
  3296. }