<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller;
use App\Entity\Model\Annonces;
use App\Entity\DetailsAnnoncePartenariat;
use App\Entity\PeriodesAnnoncePrioritaire;
use App\Form\Models\DepotAnnonce\DepotAnnonceFirstStep;
use App\Form\Type\DepotAnnonce\{
DepotAnnonceFirstStepType,
DepotAnnonceSecondStepType,
DepotAnnonceThirdStepType
};
use App\Helper\Utils;
use App\Services\Annonces\DepotAnnonce;
use Symfony\Component\HttpFoundation\{
Request,
Response
};
use Symfony\Component\Form\Extension\Core\Type\{
RadioType,
SubmitType,
ChoiceType
};
use App\Services\PDFGenerator;
use App\Services\LogMarketingProvider;
use Symfony\Component\Form\Forms;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\StatistiquesNbConsultationsAnnoncesVendeurEntity;
use App\Entity\StatistiquesNbConsultationsAnnoncesAcheteurEntity;
use App\Exception\MissingMandatoryParams;
use App\Services\ManagerEntity\PropositionsAcquereurs;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Psr\Log\LoggerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
class DepotAnnonceController extends EntityUsingController {
public const MAX_AGE = 43200; // 12heures
/**
* @var DepotAnnonce
*/
private $depotAnnonceService;
/**
* @var PDFGenerator
*/
private $pf;
/**
* @var LogMarketingProvider
*/
private $lmp;
/**
* @var EntityManagerInterface
*/
private $em;
/**
*
* @return Response
*/
public function index(): Response {
if ($this->getUser()) { // authentifié
$response = $this->render('annonces/depot-annonce/index.html.twig', [
'controller_name' => 'DepotAnnonceController',
]);
} else { // non authentifié
$response = $this->render('annonces/depot-annonce/no_auth_index.html.twig', [
'controller_name' => 'DepotAnnonceController',
]);
}
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @param Request $request
* @param type $codePays
* @return type
*/
public function depotFirstStep(Request $request, $codePays) {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$model = new DepotAnnonceFirstStep();
$form = $this->createForm(DepotAnnonceFirstStepType::class, $model, [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
]
),
'method' => 'POST',
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$annonce = $this->depotAnnonceService->enregistreAnnonceFirstStep((array) $data);
$userIdentity = $this->getUser();
$typeRaprochement = $data->getTypeAnnonce();
if ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENT_CESSION) {
//stats annonce insertion quand dept
$statsAnnonce = $this->em->getRepository(StatistiquesNbConsultationsAnnoncesVendeurEntity::class)->find($annonce->getId());
if (empty($statsAnnonce)) {
$statsAnnonce = new StatistiquesNbConsultationsAnnoncesVendeurEntity();
$statsAnnonce->_set("id_annonce", $annonce->getId());
$statsAnnonce->_set("nb_consultations", 0);
$this->em->persist($statsAnnonce);
$this->em->flush();
}
//ajouter l'action << Création annonce cession entreprise >> dans les logs_actions, type_action n°3
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(3), $userIdentity->_get('type_utilisateur'), $annonce->getId());
} elseif ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENT_CESSION_ACTIF) {
//stats annonce insertion quand dept
$statsAnnonce = $this->em->getRepository(StatistiquesNbConsultationsAnnoncesVendeurEntity::class)->find($annonce->getId());
if (empty($statsAnnonce)) {
$statsAnnonce = new StatistiquesNbConsultationsAnnoncesVendeurEntity();
$statsAnnonce->_set("id_annonce", $annonce->getId());
$statsAnnonce->_set("nb_consultations", 0);
$this->em->persist($statsAnnonce);
$this->em->flush();
}
//ajouter l'action << Création annonce cession actif >> dans les logs_actions, type_action n°4
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(4), $userIdentity->_get('type_utilisateur'), $annonce->getId());
} elseif ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENT_LEVEE_FONDS) {
//stats annonce insertion quand dept
$statsAnnonce = $this->em->getRepository(StatistiquesNbConsultationsAnnoncesVendeurEntity::class)->find($annonce->getId());
if (empty($statsAnnonce)) {
$statsAnnonce = new StatistiquesNbConsultationsAnnoncesVendeurEntity();
$statsAnnonce->_set("id_annonce", $annonce->getId());
$statsAnnonce->_set("nb_consultations", 0);
$this->em->persist($statsAnnonce);
$this->em->flush();
}
//ajouter l'action << Création annonce levée de fonds >> dans les logs_actions, type_action n°27
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(27), $userIdentity->_get('type_utilisateur'), $annonce->getId());
} elseif ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENT_ACQUISITION) {
//stats annonce insertion quand dept
$statsAnnonce = $this->em->getRepository(StatistiquesNbConsultationsAnnoncesAcheteurEntity::class)->find($annonce->getId());
if (empty($statsAnnonce)) {
$statsAnnonce = new StatistiquesNbConsultationsAnnoncesAcheteurEntity();
$statsAnnonce->_set("id_annonce", $annonce->getId());
$statsAnnonce->_set("nb_consultations", 0);
$this->em->persist($statsAnnonce);
$this->em->flush();
}
//ajouter l'action << Création annonce cession acquisition >> dans les logs_actions, type_action n°5
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(5), $userIdentity->_get('type_utilisateur'), $annonce->getId());
} elseif ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENTE_PARTENARIAT) {
//stats annonce insertion quand dept
$statsAnnonce = $this->em->getRepository(StatistiquesNbConsultationsAnnoncesAcheteurEntity::class)->find($annonce->getId());
if (empty($statsAnnonce)) {
$statsAnnonce = new StatistiquesNbConsultationsAnnoncesAcheteurEntity();
$statsAnnonce->_set("id_annonce", $annonce->getId());
$statsAnnonce->_set("nb_consultations", 0);
$this->em->persist($statsAnnonce);
$this->em->flush();
}
//ajouter l'action << Création annonce cession partenariat >> dans les logs_actions, type_action n°6
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(6), $userIdentity->_get('type_utilisateur'), $annonce->getId());
}
return $this->redirectToRoute('depot_annonce_second_step', [// depotSecondStep
'codePays' => $codePays,
'type_raprochement' => $annonce->_get('type_raprochement'),
'id_annonce' => $annonce->getId()
]
);
} else {
$this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
$this->addFlash('error_depot_annonce_first_step', 'Le formulaire contient des champs invalides');
}
}
$response = $this->render('annonces/depot-annonce/first_step.html.twig', [
'controller_name' => 'DepotAnnonceController',
'form' => $form->createView(),
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function depotSecondStep(Request $request, $id_annonce, $type_raprochement, $codePays) {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$entityAnnonce = Annonces::getEntityAnnonceByTypeRaprochement($type_raprochement); // type_raprochement: validé dans le routing depot_annonce_routing.yml
$annonce = $this->getDoctrine()->getRepository($entityAnnonce)->find($id_annonce);
if (!$annonce) {
throw $this->createNotFoundException('annonce ' . $type_raprochement . ' introuvable avec id ' . $id_annonce);
}
if ($annonce->getTypeRaprochement() == NULL && $type_raprochement != NULL) {
$annonce->_set('type_raprochement', $type_raprochement);
}
$dataAnnonce = Utils::convertObjectToArray($annonce);
if (Annonces::$TYPE_ID_ANNONCE[$annonce->getTypeRaprochement()] == 'V') {
$dataDevise = $this->depotAnnonceService->getDataAnnonceDevise('V', $dataAnnonce['id_annonce_vendeur']);
if (!empty($dataDevise)) {
$dataAnnonce = array_merge($dataAnnonce, $dataDevise);
}
}
if (Annonces::$TYPE_ID_ANNONCE[$annonce->getTypeRaprochement()] == 'A') {
$dataDevise = $this->depotAnnonceService->getDataAnnonceDevise('A', $dataAnnonce['id_annonce_acheteur']);
if (!empty($dataDevise)) {
$dataAnnonce = array_merge($dataAnnonce, $dataDevise);
}
}
if ($annonce->getTypeRaprochement() === array_keys(Annonces::$TYPE_RAPROCHEMENT)[4]) { // exception pour annonce acheteur partenaire
$detailsAnnoncePartenariat = $this->getDoctrine()->getRepository(DetailsAnnoncePartenariat::class)->findOneBy(array('id_annonce_acheteur' => $id_annonce));
if (!$detailsAnnoncePartenariat) {// exception pour annonce acheteur partenaire
// throw $this->createNotFoundException('annonce details_annonce_partenariat introuvable pour id annonce acheteur ' . $id_annonce);
} // on fusionne les données annonce acheteur + details_annonce_partenariat
$dataAnnonce = array_merge($dataAnnonce, Utils::convertObjectToArray($detailsAnnoncePartenariat));
}
$form = $this->createForm(DepotAnnonceSecondStepType::class, $dataAnnonce, [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
'type_raprochement' => $annonce->getTypeRaprochement() ?? $type_raprochement,
'id_annonce' => $id_annonce,
]
),
'method' => 'POST',
'devise' => $dataAnnonce['devise'] ?? 'EUR',
'type_raprochement' => $annonce->getTypeRaprochement() ?? $type_raprochement,
'mode_annonce' => $annonce->_get("mode_annonce")
]
);
$displayModalGrandesRegions = true;
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted()) {
if ($form->getClickedButton() && DepotAnnonceSecondStepType::$BOUTON_METTRE_EN_LIGNE === $form->getClickedButton()->getName()) {
if ($form->isValid()) {
$data = $form->getData();
$annonce = $this->depotAnnonceService->enregistreAnnonceSecondStep($data, DepotAnnonceSecondStepType::$BOUTON_METTRE_EN_LIGNE);
//redirection vers capital immateriel
if ($annonce && in_array($annonce->getTypeRaprochement(), Annonces::$TYPE_RAPROCHEMENT_ANNONCE_CAPITAL_IMMATERIEL)) {//redirection vers capital immateriel
return $this->redirectToRoute('depot_annonce_capital_immateriel_index',
[
'codePays' => $codePays,
'type_raprochement' => $annonce->getTypeRaprochement() ?? $type_raprochement,
'id_annonce' => $annonce->getId()
]
);
}
return $this->redirectToRoute('depot_annonce_third_step',
[// depotThirdtep
'codePays' => $codePays,
'type_raprochement' => $annonce->getTypeRaprochement() ?? $type_raprochement,
'id_annonce' => $annonce->getId()
]
);
} else {
$this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
$this->addFlash('error_depot_annonce_second_step', "Votre annonce ne peut pas être publiée. Certains champs sont vides ou invalides.");
}
}
if ($form->getClickedButton() && DepotAnnonceSecondStepType::$BOUTON_ENREGISTRER_TEMPORAIREMENT === $form->getClickedButton()->getName()) {
$form->clearErrors(true);
$data = $form->getData();
$annonce = $this->depotAnnonceService->enregistreAnnonceSecondStep($data, DepotAnnonceSecondStepType::$BOUTON_ENREGISTRER_TEMPORAIREMENT);
$this->get('session')->getFlashBag()->clear(); // Clear tous les flashbags
$this->addFlash('success_depot_annonce', 'Votre annonce a bien été enregistrée. Vous pouvez la compléter ultérieurement');
}
}
}
$hasServiceAnnoncePrio = false;
if (!empty($annonce->_get("id_period_annonce_prioritaire"))) {
$periodeAnnoncePrioritaire = $this->getDoctrine()->getRepository(PeriodesAnnoncePrioritaire::class)->find($annonce->_get("id_period_annonce_prioritaire"));
if (!empty($periodeAnnoncePrioritaire) && $periodeAnnoncePrioritaire->_get("etat") != "annule" && $periodeAnnoncePrioritaire->_get("etat") != "fini" && $periodeAnnoncePrioritaire->_get("etat") != "attente") {
$hasServiceAnnoncePrio = true;
}
}
$response = $this->render("annonces/depot-annonce/$type_raprochement.html.twig", [
"controller_name" => "DepotAnnonceController",
"form" => $form->createView(),
"hasServiceAnnoncePrio" => $hasServiceAnnoncePrio,
"annonce" => $annonce, "id_annonce" => $id_annonce,
"displayModalGrandesRegions" => $displayModalGrandesRegions,
"type_raprochement" => $type_raprochement
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function depotThirdStep(Request $request, $id_annonce, $type_raprochement, $codePays) {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$entityAnnonce = Annonces::getEntityAnnonceByTypeRaprochement($type_raprochement); // type_raprochement: validé dans le routing depot_annonce_routing.yml
$annonce = $this->getDoctrine()->getRepository($entityAnnonce)->find($id_annonce);
if (!$annonce) {
throw $this->createNotFoundException('annonce ' . $type_raprochement . ' introuvable avec id ' . $id_annonce);
}
$form = $this->createForm(DepotAnnonceThirdStepType::class, Utils::convertObjectToArray($annonce),
[
'action' => $this->generateUrl(
"depot_annonce_fourth_step",
[
'codePays' => $codePays,
'type_raprochement' => $type_raprochement,
'id_annonce' => $id_annonce,
]
),
'method' => 'POST', 'type_raprochement' => $type_raprochement
]);
$propositionAnnonceElite = $this->depotAnnonceService->propositionAnnonceEliteSemaineGratuite($id_annonce);
$charIdAnnonce = Annonces::$TYPE_ID_ANNONCE[$type_raprochement];
$response = $this->render('annonces/depot-annonce/third_step.html.twig', [
'controller_name' => "DepotAnnonceController",
"annonce" => $annonce, "id_annonce" => $id_annonce, "type_raprochement" => $type_raprochement,
"charIdAnnonce" => $charIdAnnonce,
"propositionAnnonceElite" => $propositionAnnonceElite ?? false,
"form" => $form->createView(),
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function depotFourthStep(Request $request, $id_annonce, $type_raprochement, $codePays) {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$entityAnnonce = Annonces::getEntityAnnonceByTypeRaprochement($type_raprochement); // type_raprochement: validé dans le routing depot_annonce_routing.yml
$annonce = $this->getDoctrine()->getRepository($entityAnnonce)->find($id_annonce);
if (!$annonce) {
throw $this->createNotFoundException('annonce ' . $type_raprochement . ' introuvable avec id ' . $id_annonce);
}
$data = $request->request->get('form');
if (!empty($data)) {
$data['type_raprochement'] = !empty($data['type_raprochement']) ? $data['type_raprochement'] : $type_raprochement;
$annonce = $this->depotAnnonceService->enregistreAnnonceThirdStep($data, $annonce);
}
$formFactory = Forms::createFormFactoryBuilder()->getFormFactory();
$form = $formFactory->createBuilder()
->add('remonter', ChoiceType::class, [
'choices' => ["true", "false"],
'expanded' => true,
'multiple' => false
])
->add('btn_submit', SubmitType::class, [
'label' => "terminer",
'attr' => [
'class' => "button-rond"
],
])
->setAction($this->generateUrl('depot_annonce_fifth_step', ['codePays' => $codePays, 'type_raprochement' => $type_raprochement, 'id_annonce' => $id_annonce]))
->setMethod('POST')
->getForm();
$response = $this->render('annonces/depot-annonce/fourth_step.html.twig', [
'controller_name' => 'DepotAnnonceController', "form" => $form->createView(), 'annonce' => $annonce
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function depotFifthStep(Request $request, $id_annonce, $type_raprochement, $codePays) {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$entityAnnonce = Annonces::getEntityAnnonceByTypeRaprochement($type_raprochement); // type_raprochement: validé dans le routing depot_annonce_routing.yml
$annonce = $this->getDoctrine()->getRepository($entityAnnonce)->find($id_annonce);
if (!$annonce) {
throw $this->createNotFoundException('annonce ' . $type_raprochement . ' introuvable avec id ' . $id_annonce);
}
$userIdentity = $this->getUser();
$typeRaprochement = $type_raprochement;
if ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENT_CESSION) {
//ajouter l'action << Demande mise en ligne annonce cession entreprise >> dans les logs_actions, type_action n°7
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(7), $userIdentity->_get('type_utilisateur'), $annonce->getId());
} elseif ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENT_CESSION_ACTIF) {
//ajouter l'action << Demande mise en ligne annonce cession actif >> dans les logs_actions, type_action n°8
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(8), $userIdentity->_get('type_utilisateur'), $annonce->getId());
} elseif ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENT_LEVEE_FONDS) {
//ajouter l'action << Demande mise en ligne annonce levée de fonds >> dans les logs_actions, type_action n°28
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(28), $userIdentity->_get('type_utilisateur'), $annonce->getId());
} elseif ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENT_ACQUISITION) {
//ajouter l'action << Demande mise en ligne annonce acquisition >> dans les logs_actions, type_action n°9
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(9), $userIdentity->_get('type_utilisateur'), $annonce->getId());
} elseif ($typeRaprochement == Annonces::$TYPE_RAPROCHEMENTE_PARTENARIAT) {
//ajouter l'action << Demande mise en ligne annonce partenariat >> dans les logs_actions, type_action n°10
$this->lmp->ajouterActionLogsActions($userIdentity->_get('id_utilisateur'), intval(10), $userIdentity->_get('type_utilisateur'), $annonce->getId());
}
$form = $request->request->get('form');
if (!empty($form)) { // save archive
$remonter = Utils::transformStringBoolToBool($form["remonter"]);
$res = $this->depotAnnonceService->enregistreAnnonceFourthStep($remonter, $annonce, $id_annonce, $type_raprochement);
if (!empty($res)) {
if ($res == "non_active_carte") {
return $this->redirect('/compte/facturation/carte-bancaire');
}
if ($res == "non_cordonnee") {
return $this->redirect('/compte/facturation');
}
}
}
if (in_array($typeRaprochement, Annonces::$TYPE_RAPROCHEMENT_VENDEUR)) {// ( Voir des propositions d'acquéreurs )
$id_secteur = $annonce->_get('id_secteur_activite');
$id_pays = $annonce->_get('id_pays');
$id_region = $annonce->_get('id_region');
$id_departement = $annonce->_get('id_departement');
$id_localisation = Utils::getLocalisationPlusPrecisPossible($id_pays, $id_region, $id_departement);
$nbAnnoncesAcquisitions = $this->pa->getNbAnnoncesAcquisitions($id_localisation, $id_secteur);
$nbCVrepreneurs = $this->pa->getNbCVrepreneurs($id_localisation, $id_secteur, null);
$nbAcheteursPotentiels = $this->pa->getNbAcheteursPotentiels($id_localisation, $id_secteur);
$nbInvestisseursAcquereurs = $this->pa->getNbInvestisseursAcquereurs($id_localisation, $id_secteur);
$nbTransactionComparable = $this->pa->getNbAnnonceVenteCR((string) $id_secteur);
$propositions = [
"annonces_acquisitions" => [
"nb" => $nbAnnoncesAcquisitions,
"lien" => $this->pa->generateLien($codePays, $id_secteur, $id_pays, $id_region, $id_departement)['lienNbAnnoncesAcquisitions'],
],
"cv_repreneurs" => [
"nb" => $nbCVrepreneurs,
"lien" => $this->pa->generateLien($codePays, $id_secteur, $id_pays, $id_region, $id_departement)['lienNbCVrepreneurs'],
],
"acheteurs_potentiels" => [
"nb" => $nbAcheteursPotentiels,
"lien" => $this->pa->generateLien($codePays, $id_secteur, $id_pays, $id_region, $id_departement)['lienNbAcheteursPotentiels'],
],
"investisseurs_acquereurs" => [
"nb" => $nbInvestisseursAcquereurs,
"lien" => $this->pa->generateLien($codePays, $id_secteur, $id_pays, $id_region, $id_departement)['lienNbInvestisseursAcquereurs'],
],
"transaction_comparable" => [
"nb" => $nbTransactionComparable,
"lien" => $this->pa->generateLien($codePays, $id_secteur, $id_pays, $id_region, $id_departement)['lienNbTransactionComparable'],
]
];
}
$response = $this->render('annonces/depot-annonce/fifth_step.html.twig', [
'controller_name' => 'DepotAnnonceController',
"propositions" => $propositions ?? [],
"type_raprochement" => $type_raprochement
]);
$response->setPublic();
$response->setMaxAge(self::MAX_AGE); // 12heures
return $response;
}
/**
* @param DepotAnnonce $depotAnnonceService
* @param PDFGenerator $pf
*/
public function __construct(LoggerInterface $logger, DepotAnnonce $depotAnnonceService, PDFGenerator $pf, EntityManagerInterface $em, LogMarketingProvider $lmp, PropositionsAcquereurs $pa, UrlGeneratorInterface $urlGenerator) {
$this->depotAnnonceService = $depotAnnonceService;
$this->pf = $pf;
$this->lmp = $lmp;
$this->em = $em;
$this->pa = $pa;
$this->urlGenerator = $urlGenerator;
$this->logger = $logger;
}
/**
*
* @param Request $request
* @param type $type_raprochement
* @param type $id_annonce
* @param type $lang
* @param type $codePays
* @throws type
*/
public function imprimerAnnonce(Request $request, $type_raprochement, $id_annonce, $lang, $codePays) {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$entityAnnonce = Annonces::getEntityAnnonceByTypeRaprochement($type_raprochement); // type_raprochement: validé dans le routing depot_annonce_routing.yml
$annonce = $this->getDoctrine()->getRepository($entityAnnonce)->findAnnonceWithDetailsById($id_annonce);
$arr = array_merge(['lang' => $lang, 'type' => Annonces::$TYPE_ID_ANNONCE[$type_raprochement], 'id' => $id_annonce], $annonce);
if (!array_key_exists("devise", $arr)) {
$arr["devise"] = "EUR";
}
$arr["date_demande_publication"] = ($arr["date_demande_publication"]) ? Utils::getDateObjectFromFUSACQDate($arr["date_demande_publication"]) : NULL;
$arr["type_raprochement"] = $type_raprochement;
return $this->pf->generatePDFviewBrowser(
'templates_pdf/annonces/print.html.twig', $arr, 'impression annonce de ' . $type_raprochement, 'impression annonce'
);
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function changeModeAnnonce(Request $request, $type_raprochement, $action, $id_annonce, $codePays) {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!isset($type_raprochement) || !isset($action) || !isset($id_annonce)) {
throw new MissingMandatoryParams();
}
$entityAnnonce = Annonces::getEntityAnnonceByTypeRaprochement($type_raprochement); // type_raprochement: validé dans le routing depot_annonce_routing.yml
$annonce = $this->getDoctrine()->getRepository($entityAnnonce)->find($id_annonce);
$this->depotAnnonceService->changeModeAnnonce($action, $annonce);
if ($action == "attente_envoi") {
return $this->redirectToRoute('compte_annonce_attente', ['codePays' => $codePays]);
}
return $this->redirectToRoute('compte_annonce_publique', ['codePays' => $codePays]);
}
/**
* @IsGranted("ROLE_USER")
* @IsGranted("VIEW_OWN_ANNONCE")
*/
public function switchAnnoncePrioritaire(Request $request, $type_raprochement, $id_annonce, $codePays) {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!isset($type_raprochement) || !isset($id_annonce)) {
throw new MissingMandatoryParams();
}
$entityAnnonce = Annonces::getEntityAnnonceByTypeRaprochement($type_raprochement); // type_raprochement: validé dans le routing depot_annonce_routing.yml
$annonce = $this->getDoctrine()->getRepository($entityAnnonce)->find($id_annonce);
if ($request->isMethod('POST')) {
$souscrire = $request->request->get('souscrire');
$page = $request->request->get('page');
$res = $this->depotAnnonceService->switchAnnoncePrioritaire($souscrire, $annonce, $id_annonce, $type_raprochement);
if (!empty($res)) {
if ($res == "non_active_carte") {
return $this->redirect('/compte/facturation/carte-bancaire');
}
if ($res == "non_cordonnee") {
return $this->redirect('/compte/facturation');
}
}
if ($page == "detail-annonce") {
return $this->redirectToRoute('depot_annonce_second_step', ['type_raprochement' => $type_raprochement, 'id_annonce' => $id_annonce, 'codePays' => $codePays]);
}
}
return $this->redirectToRoute('compte_annonce_publique', ['codePays' => $codePays]);
}
}