src/Controller/DepotAnnonceCapitalImmoController.php line 72

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Controller;
  7. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use App\Helper\Utils;
  11. use App\Services\Annonces\CapitalImmateriel\{
  12.     CapitalImmateriel,
  13.     AbstractConstCapital
  14. };
  15. use App\Entity\{
  16.     DetailAnnonceCapitalImmateriel,
  17.     DetailAnnonceSyntheseStrategique,
  18.     AnnoncesVendeur
  19. };
  20. use Symfony\Component\Form\Extension\Core\Type\{
  21.     ChoiceType,
  22.     TextareaType,
  23.     SubmitType
  24. };
  25. use App\Validator\Constraints\Emoji;
  26. use Symfony\Component\Validator\Constraints\NotBlank;
  27. use App\Services\MetaTag;
  28. use Doctrine\ORM\EntityManagerInterface;
  29. use Symfony\Component\HttpFoundation\{
  30.     Request,
  31.     Cookie,
  32.     Response
  33. };
  34. use App\Services\Annonces\SecurityAnnonce;
  35. use App\Form\Type\DepotAnnonceCapitalImmateriel\{
  36.     OrganisationnelType,
  37.     RelationnelType,
  38.     HumainType
  39. };
  40. use App\Security\CookieManager;
  41. use App\Services\PDFGenerator;
  42. use App\Services\Annonces\ModeAnnonce;
  43. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  44. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  45. class DepotAnnonceCapitalImmoController extends EntityUsingController {
  46.     public const MAX_AGE 43200// 12heures
  47.     private const COOKIE_NAME "depot_annonce_capital_immo";
  48.     const ROUTES_STEP = [
  49.         "depot_annonce_capital_immateriel_index"// page visible sous condition de cookies
  50.         "depot_annonce_capital_immateriel_organisationnel",
  51.         "depot_annonce_capital_immateriel_relationnel",
  52.         "depot_annonce_capital_immateriel_humain"
  53.     ];
  54.     private $em;
  55.     private $metaTag;
  56.     private $cookie;
  57.     /**
  58.      *
  59.      * @param Request $request
  60.      * @param type $id_annonce
  61.      * @param type $type_raprochement
  62.      * @param type $codePays
  63.      * @throws type
  64.      */
  65.     public function synthese(Request $request$id_annonce$type_raprochement$codePays) {
  66.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  67.         $serviceEliteCurrentUser $this->securityAnnonce->serviceEliteCurrentUser(); // utilisateur avec Offre elite
  68.         $annonceEnConsultationGratuite $this->securityAnnonce->annonceEnConsultationGratuite($id_annonce); // annonce synthese gratuite temporaire
  69.         if (!$serviceEliteCurrentUser && !$annonceEnConsultationGratuite) {
  70.             $this->securityAnnonce->annonceCurrentUser($id_annonce$type_raprochement); // on autorise juste ses annonces
  71.         }
  72.         $synthese $this->em->getRepository(DetailAnnonceSyntheseStrategique::class)->detailSynthese($id_annonce);
  73.         if (!$synthese) {
  74.             throw $this->createNotFoundException('Page introuvable');
  75.         }
  76.         $footer "Ce rapport a été généré automatiquement par la plateforme d’intelligence artificielle FUSACQ ELITE et son moteur d’analyse stratégique, alimentée par les données de l’annonce FUSACQ V" $synthese['identifiant'];
  77.         return $this->pdf->generatePDFviewBrowser(
  78.                         'templates_pdf/annonces/capital_immateriel/synthese.html.twig',
  79.                         [
  80.                             'titre_annonce' => $synthese['titre_annonce'],
  81.                             'identifiant' => $synthese['identifiant'],
  82.                             'synthese_strategique' => $synthese['synthese_strategique'],
  83.                             'positionnement_marche' => $synthese['positionnement_marche'],
  84.                             'valeur_clientele' => $synthese['valeur_clientele'],
  85.                             'potentiel_developpement' => $synthese['potentiel_developpement'],
  86.                             'repreneur_ideal' => $synthese['repreneur_ideal']
  87.                         ],
  88.                         'analyse_strategique_' $synthese['identifiant'],
  89.                         'Analyse stratégique',
  90.                         $footer
  91.                 );
  92.     }
  93.     /**
  94.      * @IsGranted("ROLE_USER")
  95.      * @IsGranted("VIEW_OWN_ANNONCE")
  96.      */
  97.     public function index(Request $request$id_annonce$type_raprochement$codePays): Response // current  ROUTES_STEP = 0
  98.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  99.         $annonceRecente $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
  100.         if ($this->cookie->has(self::COOKIE_NAME)) {// choix sauvegardé en cookies
  101.            return $this->redirectToRoute(self::ROUTES_STEP[1],
  102.                     [
  103.                         'id_annonce' => $id_annonce,
  104.                         'type_raprochement' => $type_raprochement,
  105.                         'codePays' => $codePays
  106.             ]);
  107.             
  108.         }
  109.         $metaTag $this->metaTag
  110.                 ->setTitle("Fusacq - Levée de fonds, Ouverture de capital | Financement PME/TPE")
  111.                 ->setDescription("Besoin de financer votre développement ? Fusacq vous accompagne dans votre recherche d'investisseurs pour une levée de fonds ou une ouverture de capital de votre entreprise.");
  112.         $form $this->createFormBuilder()
  113.                 ->add('neplusafficher'ChoiceType::class,
  114.                         [
  115.                             'choices' => ["oui""non"],
  116.                             'expanded' => true,
  117.                             'multiple' => true,
  118.                             'constraints' => [new NotBlank(['message' => 'ce champ est obligatoire'])]
  119.                         ]
  120.                 )
  121.                 ->add('btn'SubmitType::class, [
  122.                     'label' => "continuer le dépôt de mon annonce",
  123.                     'attr' => ['class' => 'button-rond'],
  124.                 ])
  125.                 ->getForm();
  126.         $form->handleRequest($request);
  127.         if ($form->isSubmitted()) {
  128.             $response $this->redirectToRoute(self::ROUTES_STEP[1],
  129.                     [
  130.                         'id_annonce' => $id_annonce,
  131.                         'type_raprochement' => $type_raprochement,
  132.                         'codePays' => $codePays
  133.             ]);
  134.             // Ajouter un cookie qui expire dans 1 an
  135.             $response->headers->setCookie(
  136.                     $this->cookie->createCookie(
  137.                             self::COOKIE_NAME// nom
  138.                             '1'// valeur (en string)
  139.                             [
  140.                                 time() + 60 60 24 365// expiration (1 an)
  141.                                 '/'// chemin
  142.                                 null// domaine (null = domaine actuel)
  143.                                 false// secure (HTTPS uniquement)
  144.                                 true// httpOnly (inaccessible via JavaScript)
  145.                                 false// raw
  146.                                 'lax'                 // sameSite (lax, strict, none) 
  147.                             ]
  148.                     )
  149.             );
  150.             return $response;
  151.         }
  152.         $mode $this->capital->modeAnnonce($id_annonce);
  153.         $response $this->render('annonces/depot-annonce-capital-immo/index.html.twig', [
  154.             'controller_name' => 'DepotAnnonceCapitalImmoController',
  155.             'metaTag' => $metaTag,
  156.             'id_annonce' => $id_annonce,
  157.             "annonce_recente" => $annonceRecente,
  158.             "data" => $form->getData(), "mode" => $mode,
  159.             "type_raprochement" => $type_raprochement,
  160.             'form' => $form->createView()
  161.         ]);
  162.         $response->setPublic();
  163.         $response->setMaxAge(self::MAX_AGE); // 12heures
  164.         return $response;
  165.     }
  166.     /**
  167.      * @IsGranted("ROLE_USER")
  168.      * @IsGranted("VIEW_OWN_ANNONCE")
  169.      */
  170.     public function publicationExceptionnelle(Request $request$id_annonce$type_raprochement$codePays): Response {
  171.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  172.         $annonceRecente $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
  173.         $form $this->createFormBuilder()
  174.                 ->add('motif_demande'TextareaType::class, [
  175.                     'label' => 'Votre message',
  176.                     'attr' => [
  177.                         'rows' => 5,
  178.                         'cols' => 50,
  179.                         'placeholder' => 'Saisissez votre texte ici...'
  180.                     ],
  181.                     'required' => true,
  182.                     'constraints' => [
  183.                         new NotBlank(['message' => 'Le motif de la demande ne peut pas être vide.']),
  184.                         new Emoji()
  185.                     ]
  186.                 ])
  187.                 ->add('submit'SubmitType::class, [
  188.                     'label' => 'Soumettre la demande et continuer le dépôt',
  189.                     'attr' => ['class' => 'button-rond']
  190.                 ])
  191.                 ->getForm();
  192.         $form->handleRequest($request);
  193.         if ($form->isSubmitted() && $form->isValid()) {
  194.             $data $form->getData();
  195.             $data['champs_obligatoires'] = "non";
  196.             $this->capital->sauvegarderDemandeExceptionnelle(array_merge($data, ["id_annonce" => $id_annonce]));
  197.             $response $this->redirectToRoute(self::ROUTES_STEP[1], ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  198.             return $response;
  199.         }
  200.         $metaTag $this->metaTag
  201.                 ->setTitle("Publications Exceptionnelles Capital - Opportunités Exclusives | FUSACQ")
  202.                 ->setDescription("Découvrez les opportunités d'investissement en capital privé les plus exclusives. Publications exceptionnelles réservées aux investisseurs qualifiés sur FUSACQ.");
  203.         $response $this->render('annonces/depot-annonce-capital-immo/publication_exceptionnelle.html.twig',
  204.                 [
  205.                     'controller_name' => 'DepotAnnonceCapitalImmoController',
  206.                     'form' => $form->createView(),
  207.                     'id_annonce' => $id_annonce,
  208.                     "annonce_recente" => $annonceRecente,
  209.                     "type_raprochement" => $type_raprochement,
  210.                     'metaTag' => $metaTag,
  211.         ]);
  212.         $response->setPublic();
  213.         $response->setMaxAge(self::MAX_AGE); // 12heures
  214.         return $response;
  215.     }
  216.     /**
  217.      * @IsGranted("ROLE_USER")
  218.      * @IsGranted("VIEW_OWN_ANNONCE")
  219.      */
  220.     public function organisationnel(Request $request$id_annonce$type_raprochement$codePays): Response // current  ROUTES_STEP =1
  221.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  222.         $validationDisabled $this->em->getRepository(DetailAnnonceCapitalImmateriel::class)->etatValidation($id_annonce);
  223.         $annonceRecente $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
  224.         if ($annonceRecente == false) {
  225.             $validationDisabled true;
  226.         }
  227.         $currentStep $this->capital->getCurrentStepDetailAnnonceCapitalByIdAnnonce($id_annonce);
  228.         if ((!$validationDisabled) && (array_search($request->attributes->get('_route'), self::ROUTES_STEP) > array_search($currentStepself::ROUTES_STEP))) {  // l 'etape demandée dans l'url est au déla des données déja sauvegardées!
  229.             $response $this->redirectToRoute($currentStep, ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  230.             return $response;
  231.         }
  232.         $object $this->capital->getDetailAnnonceCapitalImmaterielByIdAnnonce($id_annonce);
  233.         $parameters = ['codePays' => $codePays'id_annonce' => $id_annonce"type_raprochement" => $type_raprochement];
  234.         $form $this->createForm(OrganisationnelType::class, Utils::entityToArray($object), [
  235.             'action' => $this->generateUrl(
  236.                     $request->attributes->get('_route'),
  237.                     $parameters
  238.             ),
  239.             'method' => 'POST',
  240.             'params' => array_merge($parameters, ['validation_disabled' => $validationDisabled])
  241.         ]);
  242.         if ($request->isMethod('POST')) {
  243.             $form->submit($request->request->all($form->getName()));
  244.             if ($form->isSubmitted()) {
  245.                 $data $form->getData();
  246.                 $data['champs_obligatoires'] = ($validationDisabled) ? "non" "oui";
  247.                 if ($form->getClickedButton() && OrganisationnelType::$BUTTON_SUIVANT === $form->getClickedButton()->getName()) {
  248.                     if ($form->isValid()) {
  249.                         if (($this->capital->isValidCapitalImmaterielByIdAnnonce($data"organisationnel") == false) && ($validationDisabled == true)) {
  250.                             $this->addFlash('blocage_depot_annonce_capital'HumainType::$MESSAGE_ENREGISTRER_ANNONCE['blocage_organisationnel']);
  251.                         } else {
  252.                             $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce"btn" => OrganisationnelType::$BUTTON_SUIVANT"etape" => AbstractConstCapital::ETAPES[0]]), $object);
  253.                             $response $this->redirectToRoute(self::ROUTES_STEP[2], ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  254.                             return $response;
  255.                         }
  256.                     }
  257.                 }
  258.                 if ($form->getClickedButton() && OrganisationnelType::$BUTTON_CONTINUER === $form->getClickedButton()->getName()) {
  259.                     $form->clearErrors(true);
  260.                     if ($form->isValid()) {
  261.                         $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce"btn" => OrganisationnelType::$BUTTON_CONTINUER"etape" => AbstractConstCapital::ETAPES[0]]), $object);
  262.                         $this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
  263.                         $this->addFlash('success_depot_annonce_capital_organisationnel'OrganisationnelType::$MESSAGE_ENREGISTRER_ANNONCE['enregistrer']);
  264.                     }
  265.                 }
  266.                 if ($form->getClickedButton() && OrganisationnelType::$BUTTON_PRECEDANT === $form->getClickedButton()->getName()) {
  267.                     $form->clearErrors(true);
  268.                     if ($form->isValid()) {
  269.                         $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce"btn" => OrganisationnelType::$BUTTON_PRECEDANT"etape" => AbstractConstCapital::ETAPES[0]]), $object);
  270.                         $response $this->redirectToRoute("depot_annonce_second_step", ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  271.                         return $response;
  272.                     }
  273.                 }
  274.             }
  275.         }
  276.         $mode $this->capital->modeAnnonce($id_annonce);
  277.         $deja_publique_ou_deja_elite $this->capital->annonceDejaPubOuDejaElite($id_annonce);
  278.         $metaTag $this->metaTag
  279.                 ->setTitle("Fusacq - Réorganisation du capital d'entreprise | Ingénierie financière")
  280.                 ->setDescription("Optimisez la structure du capital de votre entreprise avec Fusacq. Solutions de réorganisation actionnariat, LBO, MBO et expertise en ingénierie financière pour dirigeants et actionnaires.");
  281.         $response $this->render('annonces/depot-annonce-capital-immo/organisationnel.html.twig', [
  282.             'controller_name' => 'DepotAnnonceCapitalImmoController',
  283.             'metaTag' => $metaTag'id_annonce' => $id_annonce,
  284.             "validation_disabled" => $validationDisabled,
  285.             "deja_publique_ou_deja_elite" => $deja_publique_ou_deja_elite,
  286.             "annonce_recente" => $annonceRecente,
  287.             "mode" => $mode,
  288.             "type_raprochement" => $type_raprochement"data" => $form->getData(),
  289.             'form' => $form->createView()
  290.         ]);
  291.         $response->setPublic();
  292.         $response->setMaxAge(self::MAX_AGE); // 12heures
  293.         return $response;
  294.     }
  295.     /**
  296.      * @IsGranted("ROLE_USER")
  297.      * @IsGranted("VIEW_OWN_ANNONCE")
  298.      */
  299.     public function relationnel(Request $request$id_annonce$type_raprochement$codePays): Response // current  ROUTES_STEP =2
  300.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  301.         $validationDisabled $this->em->getRepository(DetailAnnonceCapitalImmateriel::class)->etatValidation($id_annonce);
  302.         $annonceRecente $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
  303.         if ($annonceRecente == false) {
  304.             $validationDisabled true;
  305.         }
  306.         $currentStep $this->capital->getCurrentStepDetailAnnonceCapitalByIdAnnonce($id_annonce);
  307.         if ((!$validationDisabled) && (array_search($request->attributes->get('_route'), self::ROUTES_STEP) > array_search($currentStepself::ROUTES_STEP))) {  // l 'etape demandée dans l'url est au déla des données déja sauvegardées!
  308.             $response $this->redirectToRoute($currentStep, ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  309.             return $response;
  310.         }
  311.         $object $this->capital->getDetailAnnonceCapitalImmaterielByIdAnnonce($id_annonce);
  312.         $parameters = ['codePays' => $codePays'id_annonce' => $id_annonce"type_raprochement" => $type_raprochement];
  313.         $form $this->createForm(RelationnelType::class, Utils::entityToArray($object), [
  314.             'action' => $this->generateUrl(
  315.                     $request->attributes->get('_route'),
  316.                     $parameters
  317.             ),
  318.             'method' => 'POST',
  319.             'params' => array_merge($parameters, ['validation_disabled' => $validationDisabled])
  320.         ]);
  321.         if ($request->isMethod('POST')) {
  322.             $form->submit($request->request->all($form->getName()));
  323.             if ($form->isSubmitted()) {
  324.                 $data $form->getData();
  325.                 $data['champs_obligatoires'] = ($validationDisabled) ? "non" "oui";
  326.                 if ($form->getClickedButton() && RelationnelType::$BUTTON_SUIVANT === $form->getClickedButton()->getName()) {
  327.                     if ($form->isValid()) {
  328.                         if (($this->capital->isValidCapitalImmaterielByIdAnnonce($data"relationnel") == false) && ($validationDisabled == true)) {
  329.                             $this->addFlash('blocage_depot_annonce_capital'HumainType::$MESSAGE_ENREGISTRER_ANNONCE['blocage_relationnel']);
  330.                         } else {
  331.                             $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce"btn" => RelationnelType::$BUTTON_SUIVANT"etape" => AbstractConstCapital::ETAPES[1]]), $object);
  332.                             $response $this->redirectToRoute(self::ROUTES_STEP[3], ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  333.                             return $response;
  334.                         }
  335.                     }
  336.                 }
  337.                 if ($form->getClickedButton() && RelationnelType::$BUTTON_CONTINUER === $form->getClickedButton()->getName()) {
  338.                     $form->clearErrors(true);
  339.                     if ($form->isValid()) {
  340.                         $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce"btn" => RelationnelType::$BUTTON_CONTINUER"etape" => AbstractConstCapital::ETAPES[1]]), $object);
  341.                         $this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
  342.                         $this->addFlash('success_depot_annonce_capital_relationnel'RelationnelType::$MESSAGE_ENREGISTRER_ANNONCE['enregistrer']);
  343.                     }
  344.                 }
  345.                 if ($form->getClickedButton() && RelationnelType::$BUTTON_PRECEDANT === $form->getClickedButton()->getName()) {
  346.                     $form->clearErrors(true);
  347.                     if ($form->isValid()) {
  348.                         $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce"btn" => RelationnelType::$BUTTON_PRECEDANT"etape" => AbstractConstCapital::ETAPES[1]]), $object);
  349.                         $response $this->redirectToRoute(self::ROUTES_STEP[1], ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  350.                         return $response;
  351.                     }
  352.                 }
  353.             }
  354.         }
  355.         $mode $this->capital->modeAnnonce($id_annonce);
  356.         $deja_publique_ou_deja_elite $this->capital->annonceDejaPubOuDejaElite($id_annonce);
  357.         $metaTag $this->metaTag
  358.                 ->setTitle("Fusacq - Relations investisseurs & Recherche de fonds | Réseau de financement")
  359.                 ->setDescription("Accédez au réseau d'investisseurs de Fusacq pour votre entreprise. Mise en relation ciblée avec des fonds d'investissement, business angels et family offices adaptés à votre projet.");
  360.         $response $this->render('annonces/depot-annonce-capital-immo/relationnel.html.twig', [
  361.             'controller_name' => 'DepotAnnonceCapitalImmoController',
  362.             'metaTag' => $metaTag,
  363.             'id_annonce' => $id_annonce,
  364.             "data" => $form->getData(),
  365.             "validation_disabled" => $validationDisabled,
  366.             "deja_publique_ou_deja_elite" => $deja_publique_ou_deja_elite,
  367.             "annonce_recente" => $annonceRecente"mode" => $mode,
  368.             "type_raprochement" => $type_raprochement,
  369.             'form' => $form->createView()
  370.         ]);
  371.         $response->setPublic();
  372.         $response->setMaxAge(self::MAX_AGE); // 12heures
  373.         return $response;
  374.     }
  375.     /**
  376.      * @IsGranted("ROLE_USER")
  377.      * @IsGranted("VIEW_OWN_ANNONCE")
  378.      */
  379.     public function humain(Request $request$id_annonce$type_raprochement$codePays): Response // current  ROUTES_STEP = 3
  380.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  381.         $validationDisabled $this->em->getRepository(DetailAnnonceCapitalImmateriel::class)->etatValidation($id_annonce);
  382.         $annonceRecente $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
  383.         if ($annonceRecente == false) {
  384.             $validationDisabled true;
  385.         }
  386.         $currentStep $this->capital->getCurrentStepDetailAnnonceCapitalByIdAnnonce($id_annonce);
  387.         if ((!$validationDisabled) && (array_search($request->attributes->get('_route'), self::ROUTES_STEP) > array_search($currentStepself::ROUTES_STEP))) {  // l 'etape demandée dans l'url est au déla des données déja sauvegardées!
  388.             $response $this->redirectToRoute($currentStep, ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  389.             return $response;
  390.         }
  391.         $object $this->capital->getDetailAnnonceCapitalImmaterielByIdAnnonce($id_annonce);
  392.         $parameters = ['codePays' => $codePays'id_annonce' => $id_annonce"type_raprochement" => $type_raprochement];
  393.         $form $this->createForm(HumainType::class, Utils::entityToArray($object), [
  394.             'action' => $this->generateUrl(
  395.                     $request->attributes->get('_route'),
  396.                     $parameters
  397.             ),
  398.             'method' => 'POST',
  399.             'params' => array_merge($parameters, ['validation_disabled' => $validationDisabled])
  400.         ]);
  401.         if ($request->isMethod('POST')) {
  402.             $form->submit($request->request->all($form->getName()));
  403.             if ($form->isSubmitted()) {
  404.                 $data $form->getData();
  405.                 $data['champs_obligatoires'] = ($validationDisabled) ? "non" "oui";
  406.                 if ($form->getClickedButton() && HumainType::$BUTTON_SUIVANT === $form->getClickedButton()->getName()) {
  407.                     if ($form->isValid()) {
  408.                         if (($this->capital->isValidCapitalImmaterielByIdAnnonce($data"humain") == false) && ($validationDisabled == true)) {
  409.                             $this->addFlash('blocage_depot_annonce_capital'HumainType::$MESSAGE_ENREGISTRER_ANNONCE['blocage_humain']);
  410.                         } else {
  411.                             $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce"btn" => HumainType::$BUTTON_SUIVANT"etape" => AbstractConstCapital::ETAPES[2]]), $object);
  412.                             $response $this->redirectToRoute("depot_annonce_third_step", ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  413.                             return $response;
  414.                         }
  415.                     }
  416.                 }
  417.                 if ($form->getClickedButton() && HumainType::$BUTTON_CONTINUER === $form->getClickedButton()->getName()) {
  418.                     $form->clearErrors(true);
  419.                     if ($form->isValid()) {
  420.                         $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce"btn" => HumainType::$BUTTON_CONTINUER"etape" => AbstractConstCapital::ETAPES[2]]), $object);
  421.                         $this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
  422.                         $this->addFlash('success_depot_annonce_capital_humain'HumainType::$MESSAGE_ENREGISTRER_ANNONCE['enregistrer']);
  423.                     }
  424.                 }
  425.                 if ($form->getClickedButton() && HumainType::$BUTTON_PRECEDANT === $form->getClickedButton()->getName()) {
  426.                     $form->clearErrors(true);
  427.                     if ($form->isValid()) {
  428.                         $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce"btn" => HumainType::$BUTTON_PRECEDANT"etape" => AbstractConstCapital::ETAPES[2]]), $object);
  429.                         $response $this->redirectToRoute(self::ROUTES_STEP[2], ["id_annonce" => $id_annonce"type_raprochement" => $type_raprochement'codePays' => $codePays]);
  430.                         return $response;
  431.                     }
  432.                 }
  433.             }
  434.         }
  435.         $mode $this->capital->modeAnnonce($id_annonce);
  436.         $deja_publique_ou_deja_elite $this->capital->annonceDejaPubOuDejaElite($id_annonce);
  437.         $metaTag $this->metaTag
  438.                 ->setTitle("Fusacq - Recrutement de dirigeants & Management de transition | Expertise PME")
  439.                 ->setDescription("Renforcez votre équipe dirigeante avec Fusacq. Services de recrutement de cadres, management de transition et accompagnement pour les PME/TPE en développement ou transmission.");
  440.         $response $this->render('annonces/depot-annonce-capital-immo/humain.html.twig', [
  441.             'controller_name' => 'DepotAnnonceCapitalImmoController',
  442.             'metaTag' => $metaTag,
  443.             'id_annonce' => $id_annonce,
  444.             "data" => $form->getData(),
  445.             "validation_disabled" => $validationDisabled,
  446.             "deja_publique_ou_deja_elite" => $deja_publique_ou_deja_elite,
  447.             "annonce_recente" => $annonceRecente"mode" => $mode,
  448.             "type_raprochement" => $type_raprochement,
  449.             'form' => $form->createView()
  450.         ]);
  451.         $response->setPublic();
  452.         $response->setMaxAge(self::MAX_AGE); // 12heures
  453.         return $response;
  454.     }
  455.     /**
  456.      *
  457.      * @param EntityManagerInterface $em
  458.      * @param MetaTag $metaTag
  459.      * @param SecurityAnnonce $securityAnnonce
  460.      * @param CapitalImmateriel $capital
  461.      * @param CookieManager $cookie
  462.      * @param PDFGenerator $pdf
  463.      * @param ModeAnnonce $serviceModeUpdate
  464.      */
  465.     public function __construct(EntityManagerInterface $emMetaTag $metaTagSecurityAnnonce $securityAnnonceCapitalImmateriel $capitalCookieManager $cookiePDFGenerator $pdfModeAnnonce $serviceModeUpdate) {
  466.         $this->em $em;
  467.         $this->metaTag $metaTag;
  468.         $this->securityAnnonce $securityAnnonce;
  469.         $this->capital $capital;
  470.         $this->cookie $cookie;
  471.         $this->pdf $pdf;
  472.         $this->serviceModeUpdate $serviceModeUpdate;
  473.     }
  474.     /**
  475.      * @Route("/api/capital-immateriel/{id}", name="api_capital_immateriel_update", methods={"PUT"})
  476.      */
  477.     public function updateCapitalImmateriel(Request $request$idParameterBagInterface $params): JsonResponse {
  478.         // Vérification du token
  479.         $authHeader $request->headers->get('Authorization');
  480.         if (!$authHeader || $authHeader !== 'Bearer ' $params->get('app.api_key')) {
  481.             return new JsonResponse(['error' => 'Unauthorized'], 401);
  482.         }
  483.         // Récupérer l'objet
  484.         $annonceV $this->em->getRepository(AnnoncesVendeur::class)->find($id);
  485.         if (!$annonceV) {
  486.             return new JsonResponse(['error' => 'annonce not found'], 404);
  487.         }
  488.         $mode_annonce $annonceV->_get("mode_annonce");
  489.         // Récupérer l'objet
  490.         $detailAnnonceCapitalImmateriel $this->em->getRepository(DetailAnnonceCapitalImmateriel::class)->findOneBy(["id_annonce" => $id]);
  491.         if (!$detailAnnonceCapitalImmateriel) {
  492.             return new JsonResponse(['error' => 'Detail Annonce CapitalImmateriel not found'], 404);
  493.         }
  494.         $data Utils::entityToArray($detailAnnonceCapitalImmateriel);
  495.         $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id"etape" => AbstractConstCapital::ETAPES[0]]), $detailAnnonceCapitalImmateriel);
  496.         $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id"etape" => AbstractConstCapital::ETAPES[1]]), $detailAnnonceCapitalImmateriel);
  497.         $this->capital->enregistrer(array_merge($data, ["id_annonce" => $id"etape" => AbstractConstCapital::ETAPES[2]]), $detailAnnonceCapitalImmateriel);
  498.         $this->serviceModeUpdate->updateModeAnnonce($id$mode_annonce'V'); // remettre l'ancien mode
  499.         return new JsonResponse(['message' => 'CapitalImmateriel updated']);
  500.     }
  501. }