<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use App\Helper\Utils;
use App\Services\Annonces\CapitalImmateriel\{
CapitalImmateriel,
AbstractConstCapital
};
use App\Entity\{
DetailAnnonceCapitalImmateriel,
DetailAnnonceSyntheseStrategique,
AnnoncesVendeur
};
use Symfony\Component\Form\Extension\Core\Type\{
ChoiceType,
TextareaType,
SubmitType
};
use App\Validator\Constraints\Emoji;
use Symfony\Component\Validator\Constraints\NotBlank;
use App\Services\MetaTag;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\{
Request,
Cookie,
Response
};
use App\Services\Annonces\SecurityAnnonce;
use App\Form\Type\DepotAnnonceCapitalImmateriel\{
OrganisationnelType,
RelationnelType,
HumainType
};
use App\Security\CookieManager;
use App\Services\PDFGenerator;
use App\Services\Annonces\ModeAnnonce;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
class DepotAnnonceCapitalImmoController extends EntityUsingController {
public const MAX_AGE = 43200; // 12heures
private const COOKIE_NAME = "depot_annonce_capital_immo";
const ROUTES_STEP = [
"depot_annonce_capital_immateriel_index", // page visible sous condition de cookies
"depot_annonce_capital_immateriel_organisationnel",
"depot_annonce_capital_immateriel_relationnel",
"depot_annonce_capital_immateriel_humain"
];
private $em;
private $metaTag;
private $cookie;
/**
*
* @param Request $request
* @param type $id_annonce
* @param type $type_raprochement
* @param type $codePays
* @throws type
*/
public function synthese(Request $request, $id_annonce, $type_raprochement, $codePays) {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$serviceEliteCurrentUser = $this->securityAnnonce->serviceEliteCurrentUser(); // utilisateur avec Offre elite
$annonceEnConsultationGratuite = $this->securityAnnonce->annonceEnConsultationGratuite($id_annonce); // annonce synthese gratuite temporaire
if (!$serviceEliteCurrentUser && !$annonceEnConsultationGratuite) {
$this->securityAnnonce->annonceCurrentUser($id_annonce, $type_raprochement); // on autorise juste ses annonces
}
$synthese = $this->em->getRepository(DetailAnnonceSyntheseStrategique::class)->detailSynthese($id_annonce);
if (!$synthese) {
throw $this->createNotFoundException('Page introuvable');
}
$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'];
return $this->pdf->generatePDFviewBrowser(
'templates_pdf/annonces/capital_immateriel/synthese.html.twig',
[
'titre_annonce' => $synthese['titre_annonce'],
'identifiant' => $synthese['identifiant'],
'synthese_strategique' => $synthese['synthese_strategique'],
'positionnement_marche' => $synthese['positionnement_marche'],
'valeur_clientele' => $synthese['valeur_clientele'],
'potentiel_developpement' => $synthese['potentiel_developpement'],
'repreneur_ideal' => $synthese['repreneur_ideal']
],
'analyse_strategique_' . $synthese['identifiant'],
'Analyse stratégique',
$footer
);
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function index(Request $request, $id_annonce, $type_raprochement, $codePays): Response { // current ROUTES_STEP = 0
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$annonceRecente = $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
if ($this->cookie->has(self::COOKIE_NAME)) {// choix sauvegardé en cookies
return $this->redirectToRoute(self::ROUTES_STEP[1],
[
'id_annonce' => $id_annonce,
'type_raprochement' => $type_raprochement,
'codePays' => $codePays
]);
}
$metaTag = $this->metaTag
->setTitle("Fusacq - Levée de fonds, Ouverture de capital | Financement PME/TPE")
->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.");
$form = $this->createFormBuilder()
->add('neplusafficher', ChoiceType::class,
[
'choices' => ["oui", "non"],
'expanded' => true,
'multiple' => true,
'constraints' => [new NotBlank(['message' => 'ce champ est obligatoire'])]
]
)
->add('btn', SubmitType::class, [
'label' => "continuer le dépôt de mon annonce",
'attr' => ['class' => 'button-rond'],
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted()) {
$response = $this->redirectToRoute(self::ROUTES_STEP[1],
[
'id_annonce' => $id_annonce,
'type_raprochement' => $type_raprochement,
'codePays' => $codePays
]);
// Ajouter un cookie qui expire dans 1 an
$response->headers->setCookie(
$this->cookie->createCookie(
self::COOKIE_NAME, // nom
'1', // valeur (en string)
[
time() + 60 * 60 * 24 * 365, // expiration (1 an)
'/', // chemin
null, // domaine (null = domaine actuel)
false, // secure (HTTPS uniquement)
true, // httpOnly (inaccessible via JavaScript)
false, // raw
'lax' // sameSite (lax, strict, none)
]
)
);
return $response;
}
$mode = $this->capital->modeAnnonce($id_annonce);
$response = $this->render('annonces/depot-annonce-capital-immo/index.html.twig', [
'controller_name' => 'DepotAnnonceCapitalImmoController',
'metaTag' => $metaTag,
'id_annonce' => $id_annonce,
"annonce_recente" => $annonceRecente,
"data" => $form->getData(), "mode" => $mode,
"type_raprochement" => $type_raprochement,
'form' => $form->createView()
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function publicationExceptionnelle(Request $request, $id_annonce, $type_raprochement, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$annonceRecente = $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
$form = $this->createFormBuilder()
->add('motif_demande', TextareaType::class, [
'label' => 'Votre message',
'attr' => [
'rows' => 5,
'cols' => 50,
'placeholder' => 'Saisissez votre texte ici...'
],
'required' => true,
'constraints' => [
new NotBlank(['message' => 'Le motif de la demande ne peut pas être vide.']),
new Emoji()
]
])
->add('submit', SubmitType::class, [
'label' => 'Soumettre la demande et continuer le dépôt',
'attr' => ['class' => 'button-rond']
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$data['champs_obligatoires'] = "non";
$this->capital->sauvegarderDemandeExceptionnelle(array_merge($data, ["id_annonce" => $id_annonce]));
$response = $this->redirectToRoute(self::ROUTES_STEP[1], ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
$metaTag = $this->metaTag
->setTitle("Publications Exceptionnelles Capital - Opportunités Exclusives | FUSACQ")
->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.");
$response = $this->render('annonces/depot-annonce-capital-immo/publication_exceptionnelle.html.twig',
[
'controller_name' => 'DepotAnnonceCapitalImmoController',
'form' => $form->createView(),
'id_annonce' => $id_annonce,
"annonce_recente" => $annonceRecente,
"type_raprochement" => $type_raprochement,
'metaTag' => $metaTag,
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function organisationnel(Request $request, $id_annonce, $type_raprochement, $codePays): Response { // current ROUTES_STEP =1
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$validationDisabled = $this->em->getRepository(DetailAnnonceCapitalImmateriel::class)->etatValidation($id_annonce);
$annonceRecente = $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
if ($annonceRecente == false) {
$validationDisabled = true;
}
$currentStep = $this->capital->getCurrentStepDetailAnnonceCapitalByIdAnnonce($id_annonce);
if ((!$validationDisabled) && (array_search($request->attributes->get('_route'), self::ROUTES_STEP) > array_search($currentStep, self::ROUTES_STEP))) { // l 'etape demandée dans l'url est au déla des données déja sauvegardées!
$response = $this->redirectToRoute($currentStep, ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
$object = $this->capital->getDetailAnnonceCapitalImmaterielByIdAnnonce($id_annonce);
$parameters = ['codePays' => $codePays, 'id_annonce' => $id_annonce, "type_raprochement" => $type_raprochement];
$form = $this->createForm(OrganisationnelType::class, Utils::entityToArray($object), [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
$parameters
),
'method' => 'POST',
'params' => array_merge($parameters, ['validation_disabled' => $validationDisabled])
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->all($form->getName()));
if ($form->isSubmitted()) {
$data = $form->getData();
$data['champs_obligatoires'] = ($validationDisabled) ? "non" : "oui";
if ($form->getClickedButton() && OrganisationnelType::$BUTTON_SUIVANT === $form->getClickedButton()->getName()) {
if ($form->isValid()) {
if (($this->capital->isValidCapitalImmaterielByIdAnnonce($data, "organisationnel") == false) && ($validationDisabled == true)) {
$this->addFlash('blocage_depot_annonce_capital', HumainType::$MESSAGE_ENREGISTRER_ANNONCE['blocage_organisationnel']);
} else {
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce, "btn" => OrganisationnelType::$BUTTON_SUIVANT, "etape" => AbstractConstCapital::ETAPES[0]]), $object);
$response = $this->redirectToRoute(self::ROUTES_STEP[2], ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
}
}
if ($form->getClickedButton() && OrganisationnelType::$BUTTON_CONTINUER === $form->getClickedButton()->getName()) {
$form->clearErrors(true);
if ($form->isValid()) {
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce, "btn" => OrganisationnelType::$BUTTON_CONTINUER, "etape" => AbstractConstCapital::ETAPES[0]]), $object);
$this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
$this->addFlash('success_depot_annonce_capital_organisationnel', OrganisationnelType::$MESSAGE_ENREGISTRER_ANNONCE['enregistrer']);
}
}
if ($form->getClickedButton() && OrganisationnelType::$BUTTON_PRECEDANT === $form->getClickedButton()->getName()) {
$form->clearErrors(true);
if ($form->isValid()) {
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce, "btn" => OrganisationnelType::$BUTTON_PRECEDANT, "etape" => AbstractConstCapital::ETAPES[0]]), $object);
$response = $this->redirectToRoute("depot_annonce_second_step", ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
}
}
}
$mode = $this->capital->modeAnnonce($id_annonce);
$deja_publique_ou_deja_elite = $this->capital->annonceDejaPubOuDejaElite($id_annonce);
$metaTag = $this->metaTag
->setTitle("Fusacq - Réorganisation du capital d'entreprise | Ingénierie financière")
->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.");
$response = $this->render('annonces/depot-annonce-capital-immo/organisationnel.html.twig', [
'controller_name' => 'DepotAnnonceCapitalImmoController',
'metaTag' => $metaTag, 'id_annonce' => $id_annonce,
"validation_disabled" => $validationDisabled,
"deja_publique_ou_deja_elite" => $deja_publique_ou_deja_elite,
"annonce_recente" => $annonceRecente,
"mode" => $mode,
"type_raprochement" => $type_raprochement, "data" => $form->getData(),
'form' => $form->createView()
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function relationnel(Request $request, $id_annonce, $type_raprochement, $codePays): Response { // current ROUTES_STEP =2
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$validationDisabled = $this->em->getRepository(DetailAnnonceCapitalImmateriel::class)->etatValidation($id_annonce);
$annonceRecente = $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
if ($annonceRecente == false) {
$validationDisabled = true;
}
$currentStep = $this->capital->getCurrentStepDetailAnnonceCapitalByIdAnnonce($id_annonce);
if ((!$validationDisabled) && (array_search($request->attributes->get('_route'), self::ROUTES_STEP) > array_search($currentStep, self::ROUTES_STEP))) { // l 'etape demandée dans l'url est au déla des données déja sauvegardées!
$response = $this->redirectToRoute($currentStep, ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
$object = $this->capital->getDetailAnnonceCapitalImmaterielByIdAnnonce($id_annonce);
$parameters = ['codePays' => $codePays, 'id_annonce' => $id_annonce, "type_raprochement" => $type_raprochement];
$form = $this->createForm(RelationnelType::class, Utils::entityToArray($object), [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
$parameters
),
'method' => 'POST',
'params' => array_merge($parameters, ['validation_disabled' => $validationDisabled])
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->all($form->getName()));
if ($form->isSubmitted()) {
$data = $form->getData();
$data['champs_obligatoires'] = ($validationDisabled) ? "non" : "oui";
if ($form->getClickedButton() && RelationnelType::$BUTTON_SUIVANT === $form->getClickedButton()->getName()) {
if ($form->isValid()) {
if (($this->capital->isValidCapitalImmaterielByIdAnnonce($data, "relationnel") == false) && ($validationDisabled == true)) {
$this->addFlash('blocage_depot_annonce_capital', HumainType::$MESSAGE_ENREGISTRER_ANNONCE['blocage_relationnel']);
} else {
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce, "btn" => RelationnelType::$BUTTON_SUIVANT, "etape" => AbstractConstCapital::ETAPES[1]]), $object);
$response = $this->redirectToRoute(self::ROUTES_STEP[3], ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
}
}
if ($form->getClickedButton() && RelationnelType::$BUTTON_CONTINUER === $form->getClickedButton()->getName()) {
$form->clearErrors(true);
if ($form->isValid()) {
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce, "btn" => RelationnelType::$BUTTON_CONTINUER, "etape" => AbstractConstCapital::ETAPES[1]]), $object);
$this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
$this->addFlash('success_depot_annonce_capital_relationnel', RelationnelType::$MESSAGE_ENREGISTRER_ANNONCE['enregistrer']);
}
}
if ($form->getClickedButton() && RelationnelType::$BUTTON_PRECEDANT === $form->getClickedButton()->getName()) {
$form->clearErrors(true);
if ($form->isValid()) {
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce, "btn" => RelationnelType::$BUTTON_PRECEDANT, "etape" => AbstractConstCapital::ETAPES[1]]), $object);
$response = $this->redirectToRoute(self::ROUTES_STEP[1], ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
}
}
}
$mode = $this->capital->modeAnnonce($id_annonce);
$deja_publique_ou_deja_elite = $this->capital->annonceDejaPubOuDejaElite($id_annonce);
$metaTag = $this->metaTag
->setTitle("Fusacq - Relations investisseurs & Recherche de fonds | Réseau de financement")
->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.");
$response = $this->render('annonces/depot-annonce-capital-immo/relationnel.html.twig', [
'controller_name' => 'DepotAnnonceCapitalImmoController',
'metaTag' => $metaTag,
'id_annonce' => $id_annonce,
"data" => $form->getData(),
"validation_disabled" => $validationDisabled,
"deja_publique_ou_deja_elite" => $deja_publique_ou_deja_elite,
"annonce_recente" => $annonceRecente, "mode" => $mode,
"type_raprochement" => $type_raprochement,
'form' => $form->createView()
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function humain(Request $request, $id_annonce, $type_raprochement, $codePays): Response { // current ROUTES_STEP = 3
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$validationDisabled = $this->em->getRepository(DetailAnnonceCapitalImmateriel::class)->etatValidation($id_annonce);
$annonceRecente = $this->capital->annonceRecenteCapitalImmateriel($id_annonce);
if ($annonceRecente == false) {
$validationDisabled = true;
}
$currentStep = $this->capital->getCurrentStepDetailAnnonceCapitalByIdAnnonce($id_annonce);
if ((!$validationDisabled) && (array_search($request->attributes->get('_route'), self::ROUTES_STEP) > array_search($currentStep, self::ROUTES_STEP))) { // l 'etape demandée dans l'url est au déla des données déja sauvegardées!
$response = $this->redirectToRoute($currentStep, ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
$object = $this->capital->getDetailAnnonceCapitalImmaterielByIdAnnonce($id_annonce);
$parameters = ['codePays' => $codePays, 'id_annonce' => $id_annonce, "type_raprochement" => $type_raprochement];
$form = $this->createForm(HumainType::class, Utils::entityToArray($object), [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
$parameters
),
'method' => 'POST',
'params' => array_merge($parameters, ['validation_disabled' => $validationDisabled])
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->all($form->getName()));
if ($form->isSubmitted()) {
$data = $form->getData();
$data['champs_obligatoires'] = ($validationDisabled) ? "non" : "oui";
if ($form->getClickedButton() && HumainType::$BUTTON_SUIVANT === $form->getClickedButton()->getName()) {
if ($form->isValid()) {
if (($this->capital->isValidCapitalImmaterielByIdAnnonce($data, "humain") == false) && ($validationDisabled == true)) {
$this->addFlash('blocage_depot_annonce_capital', HumainType::$MESSAGE_ENREGISTRER_ANNONCE['blocage_humain']);
} else {
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce, "btn" => HumainType::$BUTTON_SUIVANT, "etape" => AbstractConstCapital::ETAPES[2]]), $object);
$response = $this->redirectToRoute("depot_annonce_third_step", ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
}
}
if ($form->getClickedButton() && HumainType::$BUTTON_CONTINUER === $form->getClickedButton()->getName()) {
$form->clearErrors(true);
if ($form->isValid()) {
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce, "btn" => HumainType::$BUTTON_CONTINUER, "etape" => AbstractConstCapital::ETAPES[2]]), $object);
$this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
$this->addFlash('success_depot_annonce_capital_humain', HumainType::$MESSAGE_ENREGISTRER_ANNONCE['enregistrer']);
}
}
if ($form->getClickedButton() && HumainType::$BUTTON_PRECEDANT === $form->getClickedButton()->getName()) {
$form->clearErrors(true);
if ($form->isValid()) {
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id_annonce, "btn" => HumainType::$BUTTON_PRECEDANT, "etape" => AbstractConstCapital::ETAPES[2]]), $object);
$response = $this->redirectToRoute(self::ROUTES_STEP[2], ["id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement, 'codePays' => $codePays]);
return $response;
}
}
}
}
$mode = $this->capital->modeAnnonce($id_annonce);
$deja_publique_ou_deja_elite = $this->capital->annonceDejaPubOuDejaElite($id_annonce);
$metaTag = $this->metaTag
->setTitle("Fusacq - Recrutement de dirigeants & Management de transition | Expertise PME")
->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.");
$response = $this->render('annonces/depot-annonce-capital-immo/humain.html.twig', [
'controller_name' => 'DepotAnnonceCapitalImmoController',
'metaTag' => $metaTag,
'id_annonce' => $id_annonce,
"data" => $form->getData(),
"validation_disabled" => $validationDisabled,
"deja_publique_ou_deja_elite" => $deja_publique_ou_deja_elite,
"annonce_recente" => $annonceRecente, "mode" => $mode,
"type_raprochement" => $type_raprochement,
'form' => $form->createView()
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
*
* @param EntityManagerInterface $em
* @param MetaTag $metaTag
* @param SecurityAnnonce $securityAnnonce
* @param CapitalImmateriel $capital
* @param CookieManager $cookie
* @param PDFGenerator $pdf
* @param ModeAnnonce $serviceModeUpdate
*/
public function __construct(EntityManagerInterface $em, MetaTag $metaTag, SecurityAnnonce $securityAnnonce, CapitalImmateriel $capital, CookieManager $cookie, PDFGenerator $pdf, ModeAnnonce $serviceModeUpdate) {
$this->em = $em;
$this->metaTag = $metaTag;
$this->securityAnnonce = $securityAnnonce;
$this->capital = $capital;
$this->cookie = $cookie;
$this->pdf = $pdf;
$this->serviceModeUpdate = $serviceModeUpdate;
}
/**
* @Route("/api/capital-immateriel/{id}", name="api_capital_immateriel_update", methods={"PUT"})
*/
public function updateCapitalImmateriel(Request $request, $id, ParameterBagInterface $params): JsonResponse {
// Vérification du token
$authHeader = $request->headers->get('Authorization');
if (!$authHeader || $authHeader !== 'Bearer ' . $params->get('app.api_key')) {
return new JsonResponse(['error' => 'Unauthorized'], 401);
}
// Récupérer l'objet
$annonceV = $this->em->getRepository(AnnoncesVendeur::class)->find($id);
if (!$annonceV) {
return new JsonResponse(['error' => 'annonce not found'], 404);
}
$mode_annonce = $annonceV->_get("mode_annonce");
// Récupérer l'objet
$detailAnnonceCapitalImmateriel = $this->em->getRepository(DetailAnnonceCapitalImmateriel::class)->findOneBy(["id_annonce" => $id]);
if (!$detailAnnonceCapitalImmateriel) {
return new JsonResponse(['error' => 'Detail Annonce CapitalImmateriel not found'], 404);
}
$data = Utils::entityToArray($detailAnnonceCapitalImmateriel);
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id, "etape" => AbstractConstCapital::ETAPES[0]]), $detailAnnonceCapitalImmateriel);
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id, "etape" => AbstractConstCapital::ETAPES[1]]), $detailAnnonceCapitalImmateriel);
$this->capital->enregistrer(array_merge($data, ["id_annonce" => $id, "etape" => AbstractConstCapital::ETAPES[2]]), $detailAnnonceCapitalImmateriel);
$this->serviceModeUpdate->updateModeAnnonce($id, $mode_annonce, 'V'); // remettre l'ancien mode
return new JsonResponse(['message' => 'CapitalImmateriel updated']);
}
}