src/Services/ManagerEntity/AnnoncesManagers.php line 792

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Raymond
  5.  */
  6. namespace App\Services\ManagerEntity;
  7. use App\Entity\{
  8.     AnnoncesVendeur,
  9.     AnnoncesAcheteur,
  10.     DetailsAnnoncePartenariat,
  11.     Utilisateur,
  12.     Favoris,
  13.     TranslateAnnonceVendeur,
  14.     TranslateAnnonceAcheteur,
  15.     Commandes
  16. };
  17. use App\Helper\PagesRedirection;
  18. use App\Helper\Utils;
  19. use App\Helper\Statistiques;
  20. use App\Repository\{
  21.     LocalisationsRepository,
  22.     SecteursActiviteRepository
  23. };
  24. use Doctrine\ORM\EntityManagerInterface;
  25. use Knp\Component\Pager\PaginatorInterface;
  26. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  27. use Symfony\Component\HttpFoundation\Request;
  28. use App\Twig\TranslationExtension;
  29. use App\Helper\DateProvider;
  30. use Psr\Container\ContainerInterface;
  31. use App\Entity\Localisations;
  32. use App\Exception\MissingMandatoryParams;
  33. use App\Entity\SecteursActivite;
  34. class AnnoncesManagers {
  35.     /**
  36.      * @var EntityManagerInterface
  37.      */
  38.     private $em;
  39.     /**
  40.      * @var LocalisationsManagers
  41.      */
  42.     private $lm;
  43.     /**
  44.      * @var string
  45.      */
  46.     private $cdn_fusacq;
  47.     /**
  48.      * @var SecteursActiviteRepository
  49.      */
  50.     private $secteursActiviteRepo;
  51.     /**
  52.      * @var LocalisationsRepository
  53.      */
  54.     private $localisationsRepository;
  55.     /**
  56.      * @var TranslationExtension
  57.      */
  58.     private $translationExtension;
  59.     /**
  60.      * @var ContainerInterface
  61.      */
  62.     private $container;
  63.     /**
  64.      * @var string
  65.      */
  66.     private $lang;
  67.     public const NB_ANNONCE_PAGINATION 10;
  68.     public function __construct(EntityManagerInterface $emLocalisationsManagers $lmContainerBagInterface $paramsSecteursActiviteRepository $secteursActiviteRepoLocalisationsRepository $localisationsRepositoryTranslationExtension $translationExtensionContainerInterface $container) {
  69.         $this->em $em;
  70.         $this->lm $lm;
  71.         $this->cdn_fusacq $params->get('app.CDN')['CDN_FUSACQ'];
  72.         $this->directory_cache_txt $params->get('directory_cache_txt');
  73.         $this->secteursActiviteRepo $secteursActiviteRepo;
  74.         $this->localisationsRepository $localisationsRepository;
  75.         $this->translationExtension $translationExtension;
  76.         $this->container $container;
  77.         $this->lang "FR"// Pour l'instant on met FR en dur
  78.     }
  79.     /**
  80.      * @return array
  81.      */
  82.     public function getDernieresAnnoncesCessions($nb 5$mode "entreprise"$lang "FR"$id_pays null) {
  83.         $annonces $this->em->getRepository(AnnoncesVendeur::class)->donne_tableau_dernieres_annonces_vendeur($nb$mode$id_pays);
  84.         for ($i 0$i count($annonces); $i++) {
  85.             $annonces[$i]['nom_localisation'] = $this->lm->getStringNomLocalisationById($annonces[$i]['id_region']);
  86.             $annonces[$i]['date_parution_initiale_formated'] = DateProvider::donne_format_jour_mois_by_YMD($annonces[$i]['date_parution_initiale']);
  87.             $annonces[$i]['date_fin_publique_elite_formated'] = "";
  88.             if ($mode=="entreprise_publique_elite"&&!empty( $annonces[$i]['date_fin_publique_elite'])) {
  89.                 $annonces[$i]['date_fin_publique_elite_formated'] = DateProvider::donne_format_jour_mois_by_YMD($annonces[$i]['date_fin_publique_elite']);
  90.             }
  91.             $translation $this->em->getRepository(AnnoncesVendeur::class)->getTranslationAnnonceVendeur($annonces[$i]['id_annonce_vendeur'], strtoupper($lang));
  92.             if ($translation) {
  93.                 $annonces[$i]['titre_annonce'] = $translation->_get('titre_annonce');
  94.             }
  95.             $localisation = [];
  96.             if (null != $annonces[$i]['id_departement'] && preg_match('/[A-Za-z]/'$annonces[$i]['id_departement']) == && substr($annonces[$i]['id_departement'], -3) != "_99") {
  97.                 $localisation $this->lm->getNomLocalisationById($annonces[$i]['id_departement']);
  98.             } elseif (null != $annonces[$i]['id_region'] && preg_match('/[A-Za-z]/'$annonces[$i]['id_region']) == && substr($annonces[$i]['id_region'], -3) != "_99") {
  99.                 $localisation $this->lm->getNomLocalisationById($annonces[$i]['id_region']);
  100.             } elseif (null != $annonces[$i]['id_pays']) {
  101.                 $localisation $this->lm->getNomLocalisationById($annonces[$i]['id_pays']);
  102.             }
  103.             // Exception pour nom trop long
  104.             if ($annonces[$i]['id_region'] == "33_21") {
  105.                 $annonces[$i]['nom_localisation'] = "PACA";
  106.             }
  107.             if ($localisation) {
  108.                 $annonces[$i]['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  109.             } else {
  110.                 $annonces[$i]['nom_localisation_slug'] = "localisation";
  111.             }
  112.         }
  113.         return $annonces;
  114.     }
  115.     /**
  116.      * @return array
  117.      */
  118.     public function getDernieresAnnoncesAcquisitions($nb 5$mode "entreprise"$from null$lang "FR"$id_pays null) {
  119.         $annonces $this->em->getRepository(AnnoncesAcheteur::class)->donne_tableau_dernieres_annonces_acheteur($nb$mode$from$id_pays);
  120.         for ($i 0$i count($annonces); $i++) {
  121.             if (trim($annonces[$i]['id_region']) != "") {
  122.                 $annonces[$i]['nom_localisation'] = $this->lm->getStringNomLocalisationById($annonces[$i]['id_region']);
  123.             } else {
  124.                 $annonces[$i]['nom_localisation'] = $this->lm->getStringNomLocalisationById($annonces[$i]['id_pays']);
  125.             }
  126.             $annonces[$i]['date_parution_initiale_formated'] = DateProvider::donne_format_jour_mois_by_YMD($annonces[$i]['date_parution_initiale']);
  127.             $translation $this->em->getRepository(AnnoncesAcheteur::class)->getTranslationAnnonceAcheteur($annonces[$i]['id_annonce_acheteur'], strtoupper($lang));
  128.             if ($translation) {
  129.                 $annonces[$i]['titre_annonce'] = $translation->_get('titre_annonce');
  130.             }
  131.             $localisation = [];
  132.             if (null != $annonces[$i]['id_departement'] && preg_match('/[A-Za-z]/'$annonces[$i]['id_departement']) == && substr($annonces[$i]['id_departement'], -3) != "_99") {
  133.                 $localisation $this->lm->getNomLocalisationById($annonces[$i]['id_departement']);
  134.             } elseif (null != $annonces[$i]['id_region'] && preg_match('/[A-Za-z]/'$annonces[$i]['id_region']) == && substr($annonces[$i]['id_region'], -3) != "_99") {
  135.                 $localisation $this->lm->getNomLocalisationById($annonces[$i]['id_region']);
  136.             } elseif (null != $annonces[$i]['id_pays']) {
  137.                 $localisation $this->lm->getNomLocalisationById($annonces[$i]['id_pays']);
  138.             }
  139.             // Exception pour nom trop long
  140.             if ($annonces[$i]['id_region'] == "33_21") {
  141.                 $annonces[$i]['nom_localisation'] = "PACA";
  142.             }
  143.             if ($localisation) {
  144.                 $annonces[$i]['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  145.             } else {
  146.                 $annonces[$i]['nom_localisation_slug'] = "localisation";
  147.             }
  148.         }
  149.         return $annonces;
  150.     }
  151.     /**
  152.      * @return \Knp\Component\Pager\Pagination\PaginationInterface
  153.      */
  154.     public function getAnnoncesCessionList(Request $requestPaginatorInterface $paginator, array $filter = [], $mode ''$login_utilisateur null) {
  155.         $sql $this->em->getRepository(AnnoncesVendeur::class)->donne_requete_SQL_pour_tableau_annonces_vendeur_page_en_cours($filter$mode);
  156.         $params $this->em->getRepository(AnnoncesVendeur::class)->prepareParameters($filter);
  157.         $query $this->em->createQuery($sql);
  158.         $query->setParameters($params);
  159.         $annoncesCession $paginator->paginate(
  160.                 $query// Requête contenant les données à paginer (ici nos annonces)
  161.                  max(1$request->query->getInt('page'1)),// Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  162.                 10 // Nombre de résultats par page
  163.         );
  164.         $tab_annonces = [];
  165.         foreach ($annoncesCession as $annonce) {
  166.             // Si la langue n'est pas FR, on récupère la traduction
  167.             if ($annonce['id_langue'] != null && $annonce['id_langue'] != 'FR') {
  168.                 $translate_annonce $this->em->getRepository(TranslateAnnonceVendeur::class)->findOneBy(['id_annonce_vendeur' => $annonce['id_annonce_vendeur'], 'code_langue' => $this->lang]);
  169.                 if ($translate_annonce) {
  170.                     $annonce['titre_annonce'] = $translate_annonce->_get('titre_annonce');
  171.                 }
  172.             }
  173.             if (isset($filter['type_recherche']) && == $filter['type_recherche']) {
  174.                 $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution_initiale']);
  175.             } else {
  176.                 if (empty($annonce['date_parution_initiale'])) {
  177.                     $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution_elite']);
  178.                 }
  179.                 else{
  180.                     $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution']);
  181.                 }
  182.             }
  183.             // $annonce->_set('date_parution', $date_parution);
  184.             $annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
  185.             $id_pays $annonce['id_pays'];
  186.             $id_region $annonce['id_region'];
  187.             $id_departement $annonce['id_departement'];
  188.             $zone_geographique $annonce['zone_geographique'];
  189.             $nom_zone_geographique null;
  190.             if (null != $id_region) {
  191.                 if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
  192.                     if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $zone_geographique '.png')) {
  193.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $zone_geographique '.png';
  194.                     } elseif (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  195.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  196.                     } else {
  197.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  198.                     }
  199.                 } else {
  200.                     if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_region '.png')) {
  201.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_region '.png';
  202.                     } elseif (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  203.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  204.                     } else {
  205.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  206.                     }
  207.                 }
  208.             } elseif (null != $id_pays) {
  209.                 if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  210.                     $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  211.                 } else {
  212.                     $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  213.                 }
  214.             }
  215.             $localisation = [];
  216.             if (null != $id_departement && preg_match('/[A-Za-z]/'$id_departement) == && substr($id_departement, -3) != "_99") {
  217.                 $localisation $this->lm->getNomLocalisationById($id_departement);
  218.                 $nom_localisation '';
  219.                 for ($i count($localisation) - 1$i >= 0; --$i) {
  220.                     $nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
  221.                 }
  222.                 $nom_localisation substr($nom_localisation0, -2);
  223.             } elseif (null != $id_region && preg_match('/[A-Za-z]/'$id_region) == 0) {
  224.                 // Si région confidentielle et qu'on a une zone geographique
  225.                 if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
  226.                     switch ($zone_geographique) {
  227.                         case '33_99_99':
  228.                             $nom_zone_geographique "";
  229.                             break;
  230.                         case '33_99_15':
  231.                             $nom_zone_geographique "Sud-Ouest";
  232.                             break;
  233.                         case '33_99_12':
  234.                             $nom_zone_geographique "Nord-Ouest";
  235.                             break;
  236.                         case '33_99_11':
  237.                             $nom_zone_geographique "Nord";
  238.                             break;
  239.                         case '33_99_14':
  240.                             $nom_zone_geographique "Centre";
  241.                             break;
  242.                         case '33_99_13':
  243.                             $nom_zone_geographique "Nord-Est";
  244.                             break;
  245.                         case '33_99_16':
  246.                             $nom_zone_geographique "Sud-Est";
  247.                             break;
  248.                         default:
  249.                             $nom_zone_geographique "";
  250.                             break;
  251.                     }
  252.                     if (null != $id_pays) {
  253.                         $localisation $this->lm->getNomLocalisationById($id_pays);
  254.                         if ($nom_zone_geographique != "") {
  255.                             $nom_localisation $nom_zone_geographique ', ' $localisation[0]['nom_localisation'];
  256.                         } else {
  257.                             $nom_localisation $localisation[0]['nom_localisation'];
  258.                         }
  259.                     } else {
  260.                         $nom_localisation $nom_zone_geographique;
  261.                     }
  262.                 } else {
  263.                     $localisation $this->lm->getNomLocalisationById($id_region);
  264.                     $nom_localisation '';
  265.                     for ($i count($localisation) - 1$i >= 0; --$i) {
  266.                         $nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
  267.                     }
  268.                     $nom_localisation substr($nom_localisation0, -2);
  269.                 }
  270.             } elseif (null != $id_pays) {
  271.                 $nom_localisation '';
  272.                 $localisation $this->lm->getNomLocalisationById($id_pays);
  273.                 if (isset($localisation[0])) {
  274.                     $nom_localisation $localisation[0]['nom_localisation'];
  275.                 }
  276.             }
  277.             $annonce['nom_localisation'] = $nom_localisation;
  278.             if ($localisation) {
  279.                 $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  280.             } else {
  281.                 $annonce['nom_localisation_slug'] = "localisation";
  282.             }
  283.             if ($nom_zone_geographique) {
  284.                 $annonce['nom_zone_geographique'] = $nom_zone_geographique;
  285.                 $annonce['nom_localisation_slug'] = Utils::slugify($nom_zone_geographique);
  286.             } else {
  287.                 $annonce['nom_zone_geographique'] = null;
  288.             }
  289.             if (is_array($localisation)) {
  290.                 foreach ($localisation as $niveau => $loc) {
  291.                     $nom_niveau 'nom_localisation_niveau_' $niveau;
  292.                     $id_niveau 'id_localisation_niveau_' $niveau;
  293.                     $annonce[$nom_niveau] = $loc['nom_localisation'];
  294.                     $annonce[$id_niveau] = $loc['id_localisation'];
  295.                 }
  296.             }
  297.             if (!isset($annonce['nom_localisation_niveau_0'])) {
  298.                 $annonce['nom_localisation_niveau_0'] = '';
  299.                 $annonce['id_localisation_niveau_0'] = '';
  300.             }
  301.             if (!isset($annonce['nom_localisation_niveau_1'])) {
  302.                 $annonce['nom_localisation_niveau_1'] = '';
  303.                 $annonce['id_localisation_niveau_1'] = '';
  304.             }
  305.             if (!isset($annonce['nom_localisation_niveau_2'])) {
  306.                 $annonce['nom_localisation_niveau_2'] = '';
  307.                 $annonce['id_localisation_niveau_2'] = '';
  308.             }
  309.             $annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
  310.             $annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_vendeur'], "vendeur"$login_utilisateur);
  311.             
  312.             // tag annonces
  313.             $annonce['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
  314.             $annonce['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
  315.             $annonce['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur"15);
  316.             if (empty($annonce['date_parution'])) {
  317.                 $annonce['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution_elite']);
  318.                 $annonce['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution_elite'], $annonce['id_annonce_vendeur']);
  319.             }
  320.             else{
  321.                 $annonce['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution']);
  322.                 $annonce['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution'], $annonce['id_annonce_vendeur']);
  323.             }
  324.             $annonce['publique_elite'] = (isset($annonce['mode_annonce']) && $annonce['mode_annonce'] === 'publique_elite');
  325.             //$this->em->detach($annonce);
  326.             $tab_annonces[] = $annonce;
  327.         }
  328.         
  329.         $annoncesCession->setItems($tab_annonces);
  330.         return $annoncesCession;
  331.     }
  332.     /**
  333.      * @param $filter
  334.      * @param $mode
  335.      * @param $page
  336.      * @param $element_index
  337.      * @return 
  338.      */
  339.     public function getIndexNAnnonceFromCessionList(array $filter = [], $mode ''$page$element_index) {
  340.         $index_in_list = ($page 1) * self::NB_ANNONCE_PAGINATION $element_index;
  341.         if ($page == && $index_in_list == -1) {
  342.             return null;
  343.         }
  344.         $sql $this->em->getRepository(AnnoncesVendeur::class)->donne_requete_SQL_pour_tableau_annonces_vendeur_page_en_cours($filter$mode);
  345.         $params $this->em->getRepository(AnnoncesVendeur::class)->prepareParameters($filter);
  346.         $query $this->em->createQuery($sql);
  347.         $query->setParameters($params);
  348.         $query->setFirstResult(max(0, (int) $index_in_list));
  349.         $query->setMaxResults(1);
  350.         $annonce $query->getOneOrNullResult();
  351.         if ($annonce) {
  352.             $localisation = [];
  353.             if (null != $annonce['id_departement'] && preg_match('/[A-Za-z]/'$annonce['id_departement']) == && substr($annonce['id_departement'], -3) != "_99") {
  354.                 $localisation $this->lm->getNomLocalisationById($annonce['id_departement']);
  355.             } elseif (null != $annonce['id_region'] && preg_match('/[A-Za-z]/'$annonce['id_region']) == && substr($annonce['id_region'], -3) != "_99") {
  356.                 $localisation $this->lm->getNomLocalisationById($annonce['id_region']);
  357.             } elseif (null != $annonce['id_pays']) {
  358.                 $localisation $this->lm->getNomLocalisationById($annonce['id_pays']);
  359.             }
  360.             if ($localisation) {
  361.                 $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  362.             } else {
  363.                 $annonce['nom_localisation_slug'] = "localisation";
  364.             }
  365.         }
  366.         return $annonce;
  367.     }
  368.     /**
  369.      * @return array $annonces
  370.      */
  371.     public function getAnnoncesPrioritairesCession(array $filter = [], $mode ''$login_utilisateur null) {
  372.         $annonces_prioritaires $this->em->getRepository(AnnoncesVendeur::class)->donne_tableau_dernieres_annonces_vendeur_prioritaire($filter$mode);
  373.  
  374.         $tab_annonces = [];
  375.         foreach ($annonces_prioritaires as $annonce) {
  376.             if (isset($filter['type_recherche']) && == $filter['type_recherche']) {
  377.                 $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution_initiale']);
  378.             } else {
  379.                 $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution']);
  380.             }
  381.             // $annonce->_set('date_parution', $date_parution);
  382.             $annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
  383.             $id_pays $annonce['id_pays'];
  384.             $id_region $annonce['id_region'];
  385.             $id_departement $annonce['id_departement'];
  386.             $zone_geographique $annonce['zone_geographique'];
  387.             $nom_zone_geographique null;
  388.             if (null != $id_region) {
  389.                 if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
  390.                     if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $zone_geographique '.png')) {
  391.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $zone_geographique '.png';
  392.                     } elseif (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  393.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  394.                     } else {
  395.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  396.                     }
  397.                 } else {
  398.                     if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_region '.png')) {
  399.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_region '.png';
  400.                     } elseif (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  401.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  402.                     } else {
  403.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  404.                     }
  405.                 }
  406.             } elseif (null != $id_pays) {
  407.                 if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  408.                     $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  409.                 } else {
  410.                     $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  411.                 }
  412.             }
  413.             $localisation = [];
  414.             if (null != $id_departement && preg_match('/[A-Za-z]/'$id_departement) == && substr($id_departement, -3) != "_99") {
  415.                 $localisation $this->lm->getNomLocalisationById($id_departement);
  416.                 $nom_localisation '';
  417.                 for ($i count($localisation) - 1$i >= 0; --$i) {
  418.                     $nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
  419.                 }
  420.                 $nom_localisation substr($nom_localisation0, -2);
  421.             } elseif (null != $id_region && preg_match('/[A-Za-z]/'$id_region) == 0) {
  422.                 // Si région confidentielle et qu'on a une zone geographique
  423.                 if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
  424.                     switch ($zone_geographique) {
  425.                         case '33_99_99':
  426.                             $nom_zone_geographique "";
  427.                             break;
  428.                         case '33_99_15':
  429.                             $nom_zone_geographique "Sud-Ouest";
  430.                             break;
  431.                         case '33_99_12':
  432.                             $nom_zone_geographique "Nord-Ouest";
  433.                             break;
  434.                         case '33_99_11':
  435.                             $nom_zone_geographique "Nord";
  436.                             break;
  437.                         case '33_99_14':
  438.                             $nom_zone_geographique "Centre";
  439.                             break;
  440.                         case '33_99_13':
  441.                             $nom_zone_geographique "Nord-Est";
  442.                             break;
  443.                         case '33_99_16':
  444.                             $nom_zone_geographique "Sud-Est";
  445.                             break;
  446.                         default:
  447.                             $nom_zone_geographique "";
  448.                             break;
  449.                     }
  450.                     if (null != $id_pays) {
  451.                         $localisation $this->lm->getNomLocalisationById($id_pays);
  452.                         if ($nom_zone_geographique != "") {
  453.                             $nom_localisation $nom_zone_geographique ', ' $localisation[0]['nom_localisation'];
  454.                         } else {
  455.                             $nom_localisation $localisation[0]['nom_localisation'];
  456.                         }
  457.                     } else {
  458.                         $nom_localisation $nom_zone_geographique;
  459.                     }
  460.                 } else {
  461.                     $localisation $this->lm->getNomLocalisationById($id_region);
  462.                     $nom_localisation '';
  463.                     for ($i count($localisation) - 1$i >= 0; --$i) {
  464.                         $nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
  465.                     }
  466.                     $nom_localisation substr($nom_localisation0, -2);
  467.                 }
  468.             } elseif (null != $id_pays) {
  469.                 $localisation $this->lm->getNomLocalisationById($id_pays);
  470.                 $nom_localisation $localisation[0]['nom_localisation'];
  471.             }
  472.             $annonce['nom_localisation'] = $nom_localisation;
  473.             if ($localisation) {
  474.                 $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  475.             } else {
  476.                 $annonce['nom_localisation_slug'] = "localisation";
  477.             }
  478.             if ($nom_zone_geographique) {
  479.                 $annonce['nom_zone_geographique'] = $nom_zone_geographique;
  480.                 $annonce['nom_localisation_slug'] = Utils::slugify($nom_zone_geographique);
  481.             } else {
  482.                 $annonce['nom_zone_geographique'] = null;
  483.             }
  484.             foreach ($localisation as $niveau => $loc) {
  485.                 $nom_niveau 'nom_localisation_niveau_' $niveau;
  486.                 $id_niveau 'id_localisation_niveau_' $niveau;
  487.                 $annonce[$nom_niveau] = $loc['nom_localisation'];
  488.                 $annonce[$id_niveau] = $loc['id_localisation'];
  489.             }
  490.             if (!isset($annonce['nom_localisation_niveau_0'])) {
  491.                 $annonce['nom_localisation_niveau_0'] = '';
  492.                 $annonce['id_localisation_niveau_0'] = '';
  493.             }
  494.             if (!isset($annonce['nom_localisation_niveau_1'])) {
  495.                 $annonce['nom_localisation_niveau_1'] = '';
  496.                 $annonce['id_localisation_niveau_1'] = '';
  497.             }
  498.             if (!isset($annonce['nom_localisation_niveau_2'])) {
  499.                 $annonce['nom_localisation_niveau_2'] = '';
  500.                 $annonce['id_localisation_niveau_2'] = '';
  501.             }
  502.             $annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
  503.             $annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_vendeur'], "vendeur"$login_utilisateur);
  504.             
  505.             $annonce['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
  506.             $annonce['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
  507.             $annonce['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur"15);
  508.             $annonce['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution']);
  509.             $annonce['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution'], $annonce['id_annonce_vendeur']);
  510.             $annonce['publique_elite'] = (isset($annonce['mode_annonce']) && $annonce['mode_annonce'] === 'publique_elite');
  511.             
  512.             $tab_annonces[] = $annonce;
  513.             //$this->em->detach($annonce);
  514.         }
  515.  
  516.         //return $annonces_prioritaires;
  517.         return $tab_annonces;
  518.     }
  519.     /**
  520.      * @return array $annonces
  521.      */
  522.     public function getAnnoncesPrioritairesAcquisition(array $filter = [], $mode ''$login_utilisateur null) {
  523.         $annonces_prioritaires $this->em->getRepository(AnnoncesAcheteur::class)->donne_tableau_dernieres_annonces_acheteur_prioritaire($filter$mode);
  524.         $tab_annonces = [];
  525.         foreach ($annonces_prioritaires as $annonce) {
  526.             if (isset($filter['type_recherche']) && == $filter['type_recherche']) {
  527.                 $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution_initiale']);
  528.             } else {
  529.                 $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution']);
  530.             }
  531.             // $annonce['_set('date_parution', $date_parution);
  532.             $annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
  533.             $id_pays $annonce['id_pays'];
  534.             $id_region $annonce['id_region'];
  535.             $id_departement $annonce['id_departement'];
  536. //             if (null != $id_region) {
  537. //                 if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png')) {
  538. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png';
  539. //                     /* // Si le département n'est pas confidentiel, on affiche la carte de la région
  540. //                       if (substr($id_departement, -3) != "_99") {
  541. //                       $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_region.".png";
  542. //                       } else {
  543. //                       // Sinon on regarde si la carte confidentielle existe pour ce pays, si oui on l'affiche
  544. //                       if (Utils::url_exists($this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_99.png")) {
  545. //                       $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_99.png";
  546. //                       } else {
  547. //                       $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_blanc.png";
  548. //                       }
  549. //                       } */
  550. //                 } elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
  551. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
  552. //                 } else {
  553. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  554. //                 }
  555. //             } elseif (null != $id_pays) {
  556. //                 if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
  557. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
  558. //                 } else {
  559. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  560. //                 }
  561. //             }
  562.             $localisation = [];
  563.             if (null != $id_departement && preg_match('/[A-Za-z]/'$id_departement) == && substr($id_departement, -3) != "_99") {
  564.                 $localisation $this->lm->getNomLocalisationById($id_departement);
  565.             } elseif (null != $id_region && preg_match('/[A-Za-z]/'$id_region) == && substr($id_region, -3) != "_99") {
  566.                 $localisation $this->lm->getNomLocalisationById($id_region);
  567.             } elseif (null != $id_pays) {
  568.                 $localisation $this->lm->getNomLocalisationById($id_pays);
  569.             }
  570.             if ($localisation) {
  571.                 $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  572.             } else {
  573.                 $annonce['nom_localisation_slug'] = "localisation";
  574.             }
  575.             // On concatene toutes les loc recherchees
  576.             $idLocalisationsRecherchees $annonce['autres_localisations'];
  577.             if ($id_departement) {
  578.                 $idLocalisationsRecherchees .= "," $id_departement;
  579.             } elseif ($id_region) {
  580.                 $idLocalisationsRecherchees .= "," $id_region;
  581.             } elseif ($id_pays) {
  582.                 $idLocalisationsRecherchees .= "," $id_pays;
  583.             }
  584.             $idLocalisations array_filter(explode(','$idLocalisationsRecherchees));
  585.             $annonce['cartes']['id_localisation_by_country'] = [];
  586.             foreach ($idLocalisations as $idLocalisation) {
  587.                 // Si ce n'est pas un département confidentiel
  588.                 if (strpos($idLocalisation'_99') === false || substr_count($idLocalisation"_") < 2) {
  589.                     if (!in_array(Utils::getIdPaysFromIdLocalisation($idLocalisation), array_keys($annonce['cartes']['id_localisation_by_country']))) {
  590.                         $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = '';
  591.                     }
  592.                     if (!in_array($idLocalisation$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)])) {
  593.                         if ((string) $idLocalisation !== Utils::getIdPaysFromIdLocalisation($idLocalisation)) {
  594.                             $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation;
  595.                         } else {
  596.                             $nbRegions = (int) $this->lm->getCountRegionsByCountry($idLocalisation);
  597.                             $x 1;
  598.                             do {
  599.                                 $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation '_' str_pad((string) $x2'0'STR_PAD_LEFT);
  600.                                 ++$x;
  601.                             } while ($x <= $nbRegions);
  602.                         }
  603.                     }
  604.                     $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)] = array_filter(
  605.                             $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)]
  606.                     );
  607.                 } else {
  608.                     // Récupération du pays
  609.                     $idPays Utils::getIdPaysFromIdLocalisation($idLocalisation);
  610.                     
  611.                     // Récupération de la région parente (ex: 33_01_99 → 33_01)
  612.                     $idRegion substr($idLocalisation0strrpos($idLocalisation'_'));
  613.                     
  614.                     // Initialisation du tableau pays si nécessaire
  615.                     if (!isset($annonce['cartes']['id_localisation_by_country'][$idPays])) {
  616.                         $annonce['cartes']['id_localisation_by_country'][$idPays] = [];
  617.                     }
  618.                     
  619.                     // On ajoute la région si elle n'existe pas déjà
  620.                     if (!in_array($idRegion$annonce['cartes']['id_localisation_by_country'][$idPays], true)) {
  621.                         $annonce['cartes']['id_localisation_by_country'][$idPays][] = $idRegion;
  622.                     }
  623.                     
  624.                     // Nettoyage
  625.                     $annonce['cartes']['id_localisation_by_country'][$idPays] = array_filter(
  626.                         $annonce['cartes']['id_localisation_by_country'][$idPays]
  627.                     );
  628.                 }
  629.             }
  630.             /* if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0) {
  631.               $localisation = $this->lm->getNomLocalisationById($id_departement);
  632.               $nom_localisation = '';
  633.               for ($i = count($localisation) - 1; $i >= 0; --$i) {
  634.               $nom_localisation .= $localisation[$i]['nom_localisation'].', ';
  635.               }
  636.               $nom_localisation = substr($nom_localisation, 0, -2);
  637.               } elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0) {
  638.               $localisation = $this->lm->getNomLocalisationById($id_region);
  639.               $nom_localisation = '';
  640.               for ($i = count($localisation) - 1; $i >= 0; --$i) {
  641.               $nom_localisation .= $localisation[$i]['nom_localisation'].', ';
  642.               }
  643.               $nom_localisation = substr($nom_localisation, 0, -2);
  644.               } elseif (null != $id_pays) {
  645.               $localisation = $this->lm->getNomLocalisationById($id_pays);
  646.               $nom_localisation = $localisation[0]['nom_localisation'];
  647.               }
  648.               $annonce['nom_localisation'] = $nom_localisation; */
  649.             $annonce['localisations'] = $this->getLocalisationsWithUrlAnnonceAcheteur($annonce);
  650.             //dd($annonce);
  651.             /* foreach ($localisation as $niveau => $loc) {
  652.               $nom_niveau = 'nom_localisation_niveau_'.$niveau;
  653.               $id_niveau = 'id_localisation_niveau_'.$niveau;
  654.               $annonce[$nom_niveau] = $loc['nom_localisation'];
  655.               $annonce[$id_niveau] = $loc['id_localisation'];
  656.               } */
  657.             if (!isset($annonce['nom_localisation_niveau_0'])) {
  658.                 $annonce['nom_localisation_niveau_0'] = '';
  659.                 $annonce['id_localisation_niveau_0'] = '';
  660.             }
  661.             if (!isset($annonce['nom_localisation_niveau_1'])) {
  662.                 $annonce['nom_localisation_niveau_1'] = '';
  663.                 $annonce['id_localisation_niveau_1'] = '';
  664.             }
  665.             if (!isset($annonce['nom_localisation_niveau_2'])) {
  666.                 $annonce['nom_localisation_niveau_2'] = '';
  667.                 $annonce['id_localisation_niveau_2'] = '';
  668.             }
  669.             $annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
  670.             $annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_acheteur'], "acheteur"$login_utilisateur);
  671.             $tab_annonces[] = $annonce;
  672.             //$this->em->detach($annonce);
  673.         }
  674.         return $tab_annonces;
  675.     }
  676.     /**
  677.      * @return \Knp\Component\Pager\Pagination\PaginationInterface
  678.      */
  679.     public function getAnnoncesAcquisitionList(Request $requestPaginatorInterface $paginator, array $filter = [], $mode 'entreprise'$login_utilisateur null) {
  680.         $sql $this->em->getRepository(AnnoncesAcheteur::class)->donne_requete_SQL_pour_tableau_annonces_acheteur_page_en_cours($filter$mode);
  681.         $params $this->em->getRepository(AnnoncesAcheteur::class)->prepareParameters($filter);
  682.         $query $this->em->createQuery($sql);
  683.         $query->setParameters($params);
  684.         $annoncesAcquisition $paginator->paginate(
  685.                 $query// Requête contenant les données à paginer (ici nos annonces)
  686.                max(1$request->query->getInt('page'1)), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  687.                 10 // Nombre de résultats par page
  688.         );
  689.         $tab_annonces = [];
  690.         foreach ($annoncesAcquisition as $annonce) {
  691.             // Si la langue n'est pas FR, on récupère la traduction
  692.             if ($annonce['id_langue'] != null && $annonce['id_langue'] != 'FR') {
  693.                 $translate_annonce $this->em->getRepository(TranslateAnnonceAcheteur::class)->findOneBy(['id_annonce_acheteur' => $annonce['id_annonce_acheteur'], 'code_langue' => $this->lang]);
  694.                 if ($translate_annonce) {
  695.                     $annonce['titre_annonce'] = $translate_annonce->_get('titre_annonce');
  696.                 }
  697.             }
  698.             if (isset($filter['type_recherche']) && == $filter['type_recherche']) {
  699.                 $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution_initiale']);
  700.             } else {
  701.                 $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution']);
  702.             }
  703.             // $annonce['_set('date_parution', $date_parution);
  704.             $annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
  705.             $id_pays $annonce['id_pays'];
  706.             $id_region $annonce['id_region'];
  707.             $id_departement $annonce['id_departement'];
  708. //             if (null != $id_region) {
  709. //                 if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png')) {
  710. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png';
  711. //                     /* // Si le département n'est pas confidentiel, on affiche la carte de la région
  712. //                       if (substr($id_departement, -3) != "_99") {
  713. //                       $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_region.".png";
  714. //                       } else {
  715. //                       // Sinon on regarde si la carte confidentielle existe pour ce pays, si oui on l'affiche
  716. //                       if (Utils::url_exists($this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_99.png")) {
  717. //                       $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_99.png";
  718. //                       } else {
  719. //                       $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_blanc.png";
  720. //                       }
  721. //                       } */
  722. //                 } elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
  723. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
  724. //                 } else {
  725. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  726. //                 }
  727. //             } elseif (null != $id_pays) {
  728. //                 if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
  729. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
  730. //                 } else {
  731. //                     $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  732. //                 }
  733. //             }
  734.             $localisation = [];
  735.             if (null != $id_departement && preg_match('/[A-Za-z]/'$id_departement) == && substr($id_departement, -3) != "_99") {
  736.                 $localisation $this->lm->getNomLocalisationById($id_departement);
  737.             } elseif (null != $id_region && preg_match('/[A-Za-z]/'$id_region) == && substr($id_region, -3) != "_99") {
  738.                 $localisation $this->lm->getNomLocalisationById($id_region);
  739.             } elseif (null != $id_pays) {
  740.                 $localisation $this->lm->getNomLocalisationById($id_pays);
  741.             }
  742.             if ($localisation) {
  743.                 $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  744.             } else {
  745.                 $annonce['nom_localisation_slug'] = "localisation";
  746.             }
  747.             // On concatene toutes les loc recherchees
  748.             $idLocalisationsRecherchees $annonce['autres_localisations'];
  749.             if ($id_departement) {
  750.                 $idLocalisationsRecherchees .= "," $id_departement;
  751.             } elseif ($id_region) {
  752.                 $idLocalisationsRecherchees .= "," $id_region;
  753.             } elseif ($id_pays) {
  754.                 $idLocalisationsRecherchees .= "," $id_pays;
  755.             }
  756.             $idLocalisations array_filter(explode(','$idLocalisationsRecherchees));
  757.             $annonce['cartes']['id_localisation_by_country'] = [];
  758.             foreach ($idLocalisations as $idLocalisation) {
  759.                 // Si ce n'est pas un département confidentiel
  760.                 if (strpos($idLocalisation'_99') === false || substr_count($idLocalisation"_") < 2) {
  761.                     if (!in_array(Utils::getIdPaysFromIdLocalisation($idLocalisation), array_keys($annonce['cartes']['id_localisation_by_country']))) {
  762.                         $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = '';
  763.                     }
  764.                     if (!in_array($idLocalisation$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)])) {
  765.                         if ((string) $idLocalisation !== Utils::getIdPaysFromIdLocalisation($idLocalisation)) {
  766.                             $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation;
  767.                         } else {
  768.                             $nbRegions = (int) $this->lm->getCountRegionsByCountry($idLocalisation);
  769.                             $x 1;
  770.                             do {
  771.                                 $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation '_' str_pad((string) $x2'0'STR_PAD_LEFT);
  772.                                 ++$x;
  773.                             } while ($x <= $nbRegions);
  774.                         }
  775.                     }
  776.                     $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)] = array_filter(
  777.                             $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)]
  778.                     );
  779.                 } else {
  780.                     // Récupération du pays
  781.                     $idPays Utils::getIdPaysFromIdLocalisation($idLocalisation);
  782.                     
  783.                     // Récupération de la région parente (ex: 33_01_99 → 33_01)
  784.                     $idRegion substr($idLocalisation0strrpos($idLocalisation'_'));
  785.                     
  786.                     // Initialisation du tableau pays si nécessaire
  787.                     if (!isset($annonce['cartes']['id_localisation_by_country'][$idPays])) {
  788.                         $annonce['cartes']['id_localisation_by_country'][$idPays] = [];
  789.                     }
  790.                     
  791.                     // On ajoute la région si elle n'existe pas déjà
  792.                     if (!in_array($idRegion$annonce['cartes']['id_localisation_by_country'][$idPays], true)) {
  793.                         $annonce['cartes']['id_localisation_by_country'][$idPays][] = $idRegion;
  794.                     }
  795.                     
  796.                     // Nettoyage
  797.                     $annonce['cartes']['id_localisation_by_country'][$idPays] = array_filter(
  798.                         $annonce['cartes']['id_localisation_by_country'][$idPays]
  799.                     );
  800.                 }
  801.             }
  802.             /* if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0) {
  803.               $localisation = $this->lm->getNomLocalisationById($id_departement);
  804.               $nom_localisation = '';
  805.               for ($i = count($localisation) - 1; $i >= 0; --$i) {
  806.               $nom_localisation .= $localisation[$i]['nom_localisation'].', ';
  807.               }
  808.               $nom_localisation = substr($nom_localisation, 0, -2);
  809.               } elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0) {
  810.               $localisation = $this->lm->getNomLocalisationById($id_region);
  811.               $nom_localisation = '';
  812.               for ($i = count($localisation) - 1; $i >= 0; --$i) {
  813.               $nom_localisation .= $localisation[$i]['nom_localisation'].', ';
  814.               }
  815.               $nom_localisation = substr($nom_localisation, 0, -2);
  816.               } elseif (null != $id_pays) {
  817.               $localisation = $this->lm->getNomLocalisationById($id_pays);
  818.               $nom_localisation = $localisation[0]['nom_localisation'];
  819.               }
  820.               $annonce['nom_localisation'] = $nom_localisation; */
  821.             $annonce['localisations'] = $this->getLocalisationsWithUrlAnnonceAcheteur($annonce);
  822.             /* foreach ($localisation as $niveau => $loc) {
  823.               $nom_niveau = 'nom_localisation_niveau_'.$niveau;
  824.               $id_niveau = 'id_localisation_niveau_'.$niveau;
  825.               $annonce[$nom_niveau] = $loc['nom_localisation'];
  826.               $annonce[$id_niveau] = $loc['id_localisation'];
  827.               } */
  828.             if (!isset($annonce['nom_localisation_niveau_0'])) {
  829.                 $annonce['nom_localisation_niveau_0'] = '';
  830.                 $annonce['id_localisation_niveau_0'] = '';
  831.             }
  832.             if (!isset($annonce['nom_localisation_niveau_1'])) {
  833.                 $annonce['nom_localisation_niveau_1'] = '';
  834.                 $annonce['id_localisation_niveau_1'] = '';
  835.             }
  836.             if (!isset($annonce['nom_localisation_niveau_2'])) {
  837.                 $annonce['nom_localisation_niveau_2'] = '';
  838.                 $annonce['id_localisation_niveau_2'] = '';
  839.             }
  840.             $annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
  841.             $annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_acheteur'], "acheteur"$login_utilisateur);
  842.             $tab_annonces[] = $annonce;
  843.             //$this->em->detach($annonce);
  844.         }
  845.         $annoncesAcquisition->setItems($tab_annonces);
  846.         return $annoncesAcquisition;
  847.     }
  848.     /**
  849.      * @param $filter
  850.      * @param $mode
  851.      * @param $page
  852.      * @param $element_index
  853.      * @return
  854.      */
  855.     public function getIndexNAnnonceAcquisitionList(array $filter = [], $mode 'entreprise'$page$element_index) {
  856.         $index_in_list = ($page 1) * self::NB_ANNONCE_PAGINATION $element_index;
  857.         if ($page == && $index_in_list == -1) {
  858.             return null;
  859.         }
  860.         $sql $this->em->getRepository(AnnoncesAcheteur::class)->donne_requete_SQL_pour_tableau_annonces_acheteur_page_en_cours($filter$mode);
  861.         $params $this->em->getRepository(AnnoncesAcheteur::class)->prepareParameters($filter);
  862.         $query $this->em->createQuery($sql);
  863.         $query->setParameters($params);
  864.         $query->setFirstResult(max(0, (int) $index_in_list));
  865.         $query->setMaxResults(1);
  866.         $annonce $query->getOneOrNullResult();
  867.         if ($annonce) {
  868.             $localisation = [];
  869.             if (null != $annonce['id_departement'] && preg_match('/[A-Za-z]/'$annonce['id_departement']) == && substr($annonce['id_departement'], -3) != "_99") {
  870.                 $localisation $this->lm->getNomLocalisationById($annonce['id_departement']);
  871.             } elseif (null != $annonce['id_region'] && preg_match('/[A-Za-z]/'$annonce['id_region']) == && substr($annonce['id_region'], -3) != "_99") {
  872.                 $localisation $this->lm->getNomLocalisationById($annonce['id_region']);
  873.             } elseif (null != $annonce['id_pays']) {
  874.                 $localisation $this->lm->getNomLocalisationById($annonce['id_pays']);
  875.             }
  876.             if ($localisation) {
  877.                 $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  878.             } else {
  879.                 $annonce['nom_localisation_slug'] = "localisation";
  880.             }
  881.         }
  882.         return $annonce;
  883.     }
  884.     /**
  885.      * @return array $annonces
  886.      */
  887.     public function getShortVersionAnnoncesPrioritairesCessionEntreprise(array $filter = [], $lang "fr"$login_utilisateur null) {
  888.         $annonces_prioritaires $this->getAnnoncesPrioritairesCession($filter""$login_utilisateur);
  889.         $results = [];
  890.         $arrayVarsTrans = [
  891.             'type_annonce' => 'V',
  892.             'id_annonce' => ''
  893.         ];
  894.         foreach ($annonces_prioritaires as $annonce) {
  895.             $row = [];
  896.             $row['id_annonce_vendeur'] = $annonce['id_annonce_vendeur'];
  897.             $row['titre_annonce'] = $annonce['titre_annonce'];
  898.             $row['date_parution'] = $annonce['date_parution'];
  899.             $row['date_parution_formated'] = $annonce['date_parution_formated'];
  900.             $row['date_parution_initiale'] = $annonce['date_parution_initiale'];
  901.             $row['ca_n'] = number_format((float) $annonce['ca_n'], 0''' ');
  902.             $row['nom_localisation'] = $annonce['nom_localisation'];
  903.             $row['nom_localisation_slug'] = $annonce['nom_localisation_slug'];
  904.             $row['carte'] = $annonce['carte'];
  905.             $row['slug'] = Utils::slugify($annonce['titre_annonce']);
  906.             $row['etat'] = isset($annonce['etat']) ? $annonce['etat'] : "";
  907.             $row['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
  908.             $row['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
  909.             $row['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur"15);
  910.             $row['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution']);
  911.             $row['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution'], $annonce['id_annonce_vendeur']);
  912.             
  913.             // filtres liées à la recherche par profil ELITE
  914.             if(!empty($annonce['identifiant_profil'])){
  915.                $row['identifiant_profil']=$annonce['identifiant_profil'];
  916.             }
  917.              if(!empty($annonce['raison'])){
  918.                $row['raison']=$annonce['raison'];
  919.             }
  920.             if(!empty($annonce['pourcentage_matching'])){
  921.                $row['pourcentage_matching']=$annonce['pourcentage_matching'];
  922.             } // filtres liées à la recherche par profil ELITE
  923.             
  924.             
  925.             $arrayVarsTrans['id_annonce'] = $annonce['id_annonce_vendeur'];
  926.             $row['titre_modal'] = $this->translationExtension->translate('vous souhaitez envoyer</br>l\'annonce %$type_annonce%$%$id_annonce%$ a un ami'$lang"""M"""$arrayVarsTrans);
  927.             $row['is_favoris'] = $annonce['is_favoris'];
  928.             
  929.             if(!empty($annonce['identifiant_profil'])){
  930.                  $row['identifiant_profil'] = $annonce['identifiant_profil']??NULL;
  931.                  $row['pourcentage_matching'] = $annonce['pourcentage_matching']??NULL;
  932.                  $row['raison'] = $annonce['raison']??NULL;
  933.             }
  934.             $results[] = $row;
  935.         }
  936.         return $results;
  937.     }
  938.     /**
  939.      * @return array $annonces
  940.      */
  941.     public function getShortVersionAnnoncesPrioritairesCessionActif(array $filter = [], $lang "fr"$login_utilisateur null) {
  942.         $annonces_prioritaires $this->getAnnoncesPrioritairesCession($filter'actif'$login_utilisateur);
  943.         $results = [];
  944.         $arrayVarsTrans = [
  945.             'type_annonce' => 'V',
  946.             'id_annonce' => ''
  947.         ];
  948.         foreach ($annonces_prioritaires as $annonce) {
  949.             $row = [];
  950.             $row['id_annonce_vendeur'] = $annonce['id_annonce_vendeur'];
  951.             $row['titre_annonce'] = $annonce['titre_annonce'];
  952.             $row['date_parution'] = $annonce['date_parution'];
  953.             $row['date_parution_formated'] = $annonce['date_parution_formated'];
  954.             $row['date_parution_initiale'] = $annonce['date_parution_initiale'];
  955.             $row['ca_n'] = number_format((float) $annonce['ca_n'], 0''' ');
  956.             $row['nom_localisation'] = $annonce['nom_localisation'];
  957.             $row['nom_localisation_slug'] = $annonce['nom_localisation_slug'];
  958.             $row['carte'] = $annonce['carte'];
  959.             $row['slug'] = Utils::slugify($annonce['titre_annonce']);
  960.             $row['etat'] = isset($annonce['etat']) ? $annonce['etat'] : "";
  961.             $row['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
  962.             $row['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
  963.             $row['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur"15);
  964.             $row['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution']);
  965.             $row['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution'], $annonce['id_annonce_vendeur']);
  966.             $arrayVarsTrans['id_annonce'] = $annonce['id_annonce_vendeur'];
  967.             $row['titre_modal'] = $this->translationExtension->translate('vous souhaitez envoyer</br>l\'annonce %$type_annonce%$%$id_annonce%$ a un ami'$lang"""M"""$arrayVarsTrans);
  968.             $row['is_favoris'] = $annonce['is_favoris'];
  969.             $results[] = $row;
  970.         }
  971.         return $results;
  972.     }
  973.     /**
  974.      * @return array $annonces
  975.      */
  976.     public function getShortVersionAnnoncesPrioritairesAcquisition(array $filter = [], $lang "fr"$login_utilisateur null) {
  977.         $annonces_prioritaires $this->getAnnoncesPrioritairesAcquisition($filter''$login_utilisateur);
  978. //dd($annonces_prioritaires);
  979.         $results = [];
  980.         $arrayVarsTrans = [
  981.             'type_annonce' => 'A',
  982.             'id_annonce' => ''
  983.         ];
  984.         foreach ($annonces_prioritaires as $annonce) {
  985.             $row = [];
  986.             $row['id_annonce_acheteur'] = $annonce['id_annonce_acheteur'];
  987.             $row['titre_annonce'] = $annonce['titre_annonce'];
  988.             $row['date_parution'] = $annonce['date_parution'];
  989.             $row['date_parution_formated'] = $annonce['date_parution_formated'];
  990.             $row['date_parution_initiale'] = $annonce['date_parution_initiale'];
  991.             $row['ca_max'] = number_format((float) $annonce['ca_max'], 0''' ');
  992.             $row['apport_perso_repreneur'] = number_format((float) $annonce['apport_perso_repreneur'], 0''' ');
  993.             $nom_localisation "";
  994.             foreach ($annonce['localisations'] as $loc) {
  995.                 $nom_localisation .= $loc['nom_localisation'] . ", ";
  996.             }
  997.             $nom_localisation substr($nom_localisation0, -2);
  998.             $row['nom_localisation'] = $nom_localisation;
  999.             $row['nom_localisation_slug'] = $annonce['nom_localisation_slug'];
  1000.             $row['cartes'] = $annonce['cartes'];
  1001.             $row['slug'] = Utils::slugify($annonce['titre_annonce']);
  1002.             $row['type_acquereur'] = $annonce['type_acquereur'];
  1003.             $row['etat'] = isset($annonce['etat']) ? $annonce['etat'] : "";
  1004.             $arrayVarsTrans['id_annonce'] = $annonce['id_annonce_acheteur'];
  1005.             $row['titre_modal'] = $this->translationExtension->translate('vous souhaitez envoyer</br>l\'annonce %$type_annonce%$%$id_annonce%$ a un ami'$lang"""M"""$arrayVarsTrans);
  1006.             $row['is_favoris'] = $annonce['is_favoris'];
  1007.             $results[] = $row;
  1008.         }
  1009.         return $results;
  1010.     }
  1011.     /**
  1012.      * @param int $idAnnonce
  1013.      *
  1014.      * @return AnnoncesVendeur $annonce
  1015.      */
  1016.     public function getAnnonceVendeurById($idAnnonce$login_utilisateur null$publique true) {
  1017.         //$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $idAnnonce]);
  1018.         $sql $this->em->getRepository(AnnoncesVendeur::class)->donne_requete_SQL_pour_annonce_vendeur($idAnnonce$publique);
  1019.         $query $this->em->createQuery($sql);
  1020.         //$annonce = $query->getSingleResult();
  1021.         $annonce $query->getResult() ? $query->getResult()[0] : null;
  1022.         if (isset($annonce)) {
  1023.             // Si la langue n'est pas FR, on récupère la traduction
  1024.             if ($annonce['id_langue'] != null && $annonce['id_langue'] != 'FR') {
  1025.                 $translate_annonce $this->em->getRepository(TranslateAnnonceVendeur::class)->findOneBy(['id_annonce_vendeur' => $idAnnonce'code_langue' => $this->lang]);
  1026.                 if ($translate_annonce) {
  1027.                     $annonce['titre_annonce'] = $translate_annonce->_get('titre_annonce');
  1028.                     $annonce['description_activite'] = $translate_annonce->_get('description_activite');
  1029.                     $annonce['commentaires'] = $translate_annonce->_get('commentaires');
  1030.                     $annonce['mots_cle_recherche'] = $translate_annonce->_get('mots_cle_recherche');
  1031.                     $annonce['mots_cles'] = $translate_annonce->_get('mots_cles');
  1032.                     $annonce['points_forts'] = $translate_annonce->_get('points_forts');
  1033.                     $annonce['points_faibles'] = $translate_annonce->_get('points_faibles');
  1034.                     $annonce['raison_cession'] = $translate_annonce->_get('raison_cession');
  1035.                     $annonce['concurrence'] = $translate_annonce->_get('concurrence');
  1036.                     $annonce['positionnement_marche'] = $translate_annonce->_get('positionnement_marche');
  1037.                     $annonce['elements_complementaires'] = $translate_annonce->_get('elements_complementaires');
  1038.                     $annonce['profil_repreneur_recherche'] = $translate_annonce->_get('profil_repreneur_recherche');
  1039.                 }
  1040.             }
  1041.             if ( $annonce['mode_annonce']=="publique_elite" ) {
  1042.                 if (empty( $annonce['date_parution_elite'])) {
  1043.                     $annonce['date_parution_elite'] =  $annonce['date_parution'];
  1044.                 }
  1045.                 $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution_elite']);
  1046.                 // $annonce->_set('date_parution', $date_parution);
  1047.                 $annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
  1048.                 $date_parution_string $annonce['date_parution_elite'];
  1049.             }
  1050.             else{
  1051.                 $date_parution = \DateTime::createFromFormat('Ymd'$annonce['date_parution']);
  1052.                 // $annonce->_set('date_parution', $date_parution);
  1053.                 $annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
  1054.                 $date_parution_string $annonce['date_parution'];
  1055.                 
  1056.             }
  1057.             $id_pays $annonce['id_pays'];
  1058.             $id_region $annonce['id_region'];
  1059.             $id_departement $annonce['id_departement'];
  1060.             $zone_geographique $annonce['zone_geographique'];
  1061.             $nom_zone_geographique null;
  1062.             if (null != $id_region) {
  1063.                 if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
  1064.                     if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $zone_geographique '.png')) {
  1065.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $zone_geographique '.png';
  1066.                     } elseif (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  1067.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  1068.                     } else {
  1069.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1070.                     }
  1071.                 } else {
  1072.                     if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_region '.png')) {
  1073.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_region '.png';
  1074.                     } elseif (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  1075.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  1076.                     } else {
  1077.                         $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1078.                     }
  1079.                 }
  1080.             } elseif (null != $id_pays) {
  1081.                 if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  1082.                     $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  1083.                 } else {
  1084.                     $annonce['carte'] = $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1085.                 }
  1086.             }
  1087.             if (null != $id_departement && preg_match('/[A-Za-z]/'$id_departement) == 0) {
  1088.                 $localisation $this->lm->getNomLocalisationById($id_departement);
  1089.                 $nom_localisation '';
  1090.                 for ($i count($localisation) - 1$i >= 0; --$i) {
  1091.                     $nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
  1092.                 }
  1093.                 $nom_localisation substr($nom_localisation0, -2);
  1094.             } elseif (null != $id_region && preg_match('/[A-Za-z]/'$id_region) == 0) {
  1095.                 // Si région confidentielle et qu'on a une zone geographique
  1096.                 if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
  1097.                     switch ($zone_geographique) {
  1098.                         case '33_99_99':
  1099.                             $nom_zone_geographique "";
  1100.                             break;
  1101.                         case '33_99_15':
  1102.                             $nom_zone_geographique "Sud-Ouest";
  1103.                             break;
  1104.                         case '33_99_12':
  1105.                             $nom_zone_geographique "Nord-Ouest";
  1106.                             break;
  1107.                         case '33_99_11':
  1108.                             $nom_zone_geographique "Nord";
  1109.                             break;
  1110.                         case '33_99_14':
  1111.                             $nom_zone_geographique "Centre";
  1112.                             break;
  1113.                         case '33_99_13':
  1114.                             $nom_zone_geographique "Nord-Est";
  1115.                             break;
  1116.                         case '33_99_16':
  1117.                             $nom_zone_geographique "Sud-Est";
  1118.                             break;
  1119.                         default:
  1120.                             $nom_zone_geographique "";
  1121.                             break;
  1122.                     }
  1123.                     if (null != $id_pays) {
  1124.                         $localisation $this->lm->getNomLocalisationById($id_pays);
  1125.                         if ($nom_zone_geographique != "") {
  1126.                             $nom_localisation $nom_zone_geographique ', ' $localisation[0]['nom_localisation'];
  1127.                         } else {
  1128.                             $nom_localisation $localisation[0]['nom_localisation'];
  1129.                         }
  1130.                     } else {
  1131.                         $nom_localisation $nom_zone_geographique;
  1132.                     }
  1133.                 } else {
  1134.                     $localisation $this->lm->getNomLocalisationById($id_region);
  1135.                     $nom_localisation '';
  1136.                     for ($i count($localisation) - 1$i >= 0; --$i) {
  1137.                         $nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
  1138.                     }
  1139.                     $nom_localisation substr($nom_localisation0, -2);
  1140.                 }
  1141.             } elseif (null != $id_pays) {
  1142.                 $localisation $this->lm->getNomLocalisationById($id_pays);
  1143.                 $nom_localisation $localisation[0]['nom_localisation'];
  1144.             }
  1145.             $annonce['nom_localisation'] = $nom_localisation;
  1146.             if ($localisation) {
  1147.                 $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  1148.             } else {
  1149.                 $annonce['nom_localisation_slug'] = "localisation";
  1150.             }
  1151.             if ($nom_zone_geographique) {
  1152.                 $annonce['nom_zone_geographique'] = $nom_zone_geographique;
  1153.                 $annonce['nom_localisation_slug'] = Utils::slugify($nom_zone_geographique);
  1154.             } else {
  1155.                 $annonce['nom_zone_geographique'] = null;
  1156.             }
  1157.             foreach ($localisation as $niveau => $loc) {
  1158.                 $nom_niveau 'nom_localisation_niveau_' $niveau;
  1159.                 $id_niveau 'id_localisation_niveau_' $niveau;
  1160.                 $annonce[$nom_niveau] = $loc['nom_localisation'];
  1161.                 $annonce[$id_niveau] = $loc['id_localisation'];
  1162.             }
  1163.             if (!isset($annonce['nom_localisation_niveau_0'])) {
  1164.                 $annonce['nom_localisation_niveau_0'] = '';
  1165.                 $annonce['id_localisation_niveau_0'] = '';
  1166.             }
  1167.             if (!isset($annonce['nom_localisation_niveau_1'])) {
  1168.                 $annonce['nom_localisation_niveau_1'] = '';
  1169.                 $annonce['id_localisation_niveau_1'] = '';
  1170.             }
  1171.             if (!isset($annonce['nom_localisation_niveau_2'])) {
  1172.                 $annonce['nom_localisation_niveau_2'] = '';
  1173.                 $annonce['id_localisation_niveau_2'] = '';
  1174.             }
  1175.             $annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
  1176.             $annonce $this->affectation_nom_secteur_activite($annonce"vendeur");
  1177.             $annonce['tab_fil_ariane'] = $this->donne_tab_liens_noms_fil_arianne($annonce"vendeur");
  1178.             $annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_vendeur'], "vendeur"$login_utilisateur);
  1179.             
  1180.             
  1181.             // tag annonces
  1182.             $annonce['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
  1183.             $annonce['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
  1184.             $annonce['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur"15);
  1185.             $annonce['annonce_recente'] = $this->isAnnonceRecente($date_parution_string);
  1186.             $annonce['sous_radar'] = $this->isAnnonceVendeurSousRadar($date_parution_string$annonce['id_annonce_vendeur']);
  1187.             //$this->em->detach($annonce);
  1188.             return $annonce;
  1189.         } else {
  1190.             return null;
  1191.         }
  1192.     }
  1193.     /**
  1194.      * @param int $idAnnonce
  1195.      *
  1196.      * @return AnnoncesAcheteur $annonce
  1197.      */
  1198.     public function getAnnonceAcheteurById($idAnnonce$login_utilisateur null$from "acheteur"$publique true) {
  1199.         //$annonce = $this->em->getRepository(AnnoncesAcheteur::class)->findOneBy(['id_annonce_acheteur' => $idAnnonce]);
  1200.         $sql $this->em->getRepository(AnnoncesAcheteur::class)->donne_requete_SQL_pour_annonce_acheteur($idAnnonce$publique);
  1201.         $query $this->em->createQuery($sql);
  1202.         $annonce $query->getOneOrNullResult();
  1203.         if (isset($annonce)) {
  1204.             // Si la langue n'est pas FR, on récupère la traduction
  1205.             if ($annonce['id_langue'] != null && $annonce['id_langue'] != 'FR') {
  1206.                 $translate_annonce $this->em->getRepository(TranslateAnnonceAcheteur::class)->findOneBy(['id_annonce_acheteur' => $idAnnonce'code_langue' => $this->lang]);
  1207.                 if ($translate_annonce) {
  1208.                     $annonce['titre_annonce'] = $translate_annonce->_get('titre_annonce');
  1209.                     $annonce['description_activite'] = $translate_annonce->_get('description_activite');
  1210.                     $annonce['commentaires'] = $translate_annonce->_get('commentaires');
  1211.                     $annonce['mots_cle_recherche'] = $translate_annonce->_get('mots_cle_recherche');
  1212.                     $annonce['mots_cles'] = $translate_annonce->_get('mots_cles');
  1213.                     $annonce['description_activite_societe'] = $translate_annonce->_get('description_activite_societe');
  1214.                     $annonce['raison_achat'] = $translate_annonce->_get('raison_achat');
  1215.                     $annonce['elements_complementaires'] = $translate_annonce->_get('elements_complementaires');
  1216.                 }
  1217.             }
  1218.             //$annonce['carte'] = $this->getImgCarteAnnonceAcheteur($annonce);
  1219.             $id_pays $annonce['id_pays'];
  1220.             $id_region $annonce['id_region'];
  1221.             $id_departement $annonce['id_departement'];
  1222.             if (null != $id_departement && preg_match('/[A-Za-z]/'$id_departement) == 0) {
  1223.                 $localisation $this->lm->getNomLocalisationById($id_departement);
  1224.                 $nom_localisation '';
  1225.                 for ($i count($localisation) - 1$i >= 0; --$i) {
  1226.                     $nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
  1227.                 }
  1228.                 $nom_localisation substr($nom_localisation0, -2);
  1229.             } elseif (null != $id_region && preg_match('/[A-Za-z]/'$id_region) == 0) {
  1230.                 $localisation $this->lm->getNomLocalisationById($id_region);
  1231.                 $nom_localisation '';
  1232.                 for ($i count($localisation) - 1$i >= 0; --$i) {
  1233.                     $nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
  1234.                 }
  1235.                 $nom_localisation substr($nom_localisation0, -2);
  1236.             } elseif (null != $id_pays) {
  1237.                 $localisation $this->lm->getNomLocalisationById($id_pays);
  1238.                 $nom_localisation $localisation[0]['nom_localisation'];
  1239.             }
  1240.             if ($localisation) {
  1241.                 $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  1242.             } else {
  1243.                 $annonce['nom_localisation_slug'] = "localisation";
  1244.             }
  1245.             // On concatene toutes les loc recherchees
  1246.             $idLocalisationsRecherchees $annonce['autres_localisations'];
  1247.             if ($id_departement) {
  1248.                 $idLocalisationsRecherchees .= "," $id_departement;
  1249.             } elseif ($id_region) {
  1250.                 $idLocalisationsRecherchees .= "," $id_region;
  1251.             } elseif ($id_pays) {
  1252.                 $idLocalisationsRecherchees .= "," $id_pays;
  1253.             }
  1254.             $idLocalisations array_filter(explode(','$idLocalisationsRecherchees));
  1255.             $annonce['cartes']['id_localisation_by_country'] = [];
  1256.             foreach ($idLocalisations as $idLocalisation) {
  1257.                 // Si ce n'est pas un département confidentiel
  1258.                 if (strpos($idLocalisation'_99') === false || substr_count($idLocalisation"_") < 2) {
  1259.                     if (!in_array(Utils::getIdPaysFromIdLocalisation($idLocalisation), array_keys($annonce['cartes']['id_localisation_by_country']))) {
  1260.                         $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = '';
  1261.                     }
  1262.                     if (!in_array($idLocalisation$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)])) {
  1263.                         if ((string) $idLocalisation !== Utils::getIdPaysFromIdLocalisation($idLocalisation)) {
  1264.                             $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation;
  1265.                         } else {
  1266.                             $nbRegions = (int) $this->lm->getCountRegionsByCountry($idLocalisation);
  1267.                             $x 1;
  1268.                             do {
  1269.                                 $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation '_' str_pad((string) $x2'0'STR_PAD_LEFT);
  1270.                                 ++$x;
  1271.                             } while ($x <= $nbRegions);
  1272.                         }
  1273.                     }
  1274.                     $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)] = array_filter(
  1275.                             $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)]
  1276.                     );
  1277.                 } else {
  1278.                     // Récupération du pays
  1279.                     $idPays Utils::getIdPaysFromIdLocalisation($idLocalisation);
  1280.                     
  1281.                     // Récupération de la région parente (ex: 33_01_99 → 33_01)
  1282.                     $idRegion substr($idLocalisation0strrpos($idLocalisation'_'));
  1283.                     
  1284.                     // Initialisation du tableau pays si nécessaire
  1285.                     if (!isset($annonce['cartes']['id_localisation_by_country'][$idPays])) {
  1286.                         $annonce['cartes']['id_localisation_by_country'][$idPays] = [];
  1287.                     }
  1288.                     
  1289.                     // On ajoute la région si elle n'existe pas déjà
  1290.                     if (!in_array($idRegion$annonce['cartes']['id_localisation_by_country'][$idPays], true)) {
  1291.                         $annonce['cartes']['id_localisation_by_country'][$idPays][] = $idRegion;
  1292.                     }
  1293.                     
  1294.                     // Nettoyage
  1295.                     $annonce['cartes']['id_localisation_by_country'][$idPays] = array_filter(
  1296.                         $annonce['cartes']['id_localisation_by_country'][$idPays]
  1297.                     );
  1298.                 }
  1299.             }
  1300.             $localisations $this->getLocalisationsWithUrlAnnonceAcheteur($annonce$from);
  1301.             $annonce['localisations'] = $localisations;
  1302.             $nom_localisation "";
  1303.             foreach ($localisations as $loc) {
  1304.                 $nom_localisation .= $loc['nom_localisation'] . ', ';
  1305.             }
  1306.             $annonce['nom_localisation'] = substr($nom_localisation0, -2);
  1307.             $annonce['date_parution_object'] = Utils::getDateObjectFromFUSACQDate($annonce['date_parution']);
  1308.             $annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
  1309.             if ($from && $from == "ouvrir-capital") {
  1310.                 $annonce $this->affectation_nom_secteur_activite($annonce"acquereur_investisseur");
  1311.             } else {
  1312.                 $annonce $this->affectation_nom_secteur_activite($annonce"acheteur");
  1313.             }
  1314.             $annonce['tab_fil_ariane'] = $this->donne_tab_liens_noms_fil_arianne($annonce$from);
  1315.             $annonce['profil_deposant'] = $this->affectation_property_profil_deposant($annonce['login_utilisateur']);
  1316.             $annonce['ca_min_formated'] = null !== $annonce['ca_min'] ? substr($annonce['ca_min'], 0strpos($annonce['ca_min'], '.')) : null;
  1317.             $annonce['ca_max_formated'] = null !== $annonce['ca_max'] ? substr($annonce['ca_max'], 0strpos($annonce['ca_max'], '.')) : null;
  1318.             $annonce['ca_societe_formated'] = null !== $annonce['ca_societe'] ? substr($annonce['ca_societe'], 0strpos($annonce['ca_societe'], '.')) : null;
  1319.             $annonce['res_net_societe_formated'] = null !== $annonce['res_net_societe'] ? substr($annonce['res_net_societe'], 0strpos($annonce['res_net_societe'], '.')) : null;
  1320.             $annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_acheteur'], "acheteur"$login_utilisateur);
  1321.             if ($annonce['annee_naissance_repreneur'] != "") {
  1322.                 $annonce['age_repreneur'] = date('Y') - (int) $annonce['annee_naissance_repreneur'];
  1323.             } else {
  1324.                 $annonce['age_repreneur'] = null;
  1325.             }
  1326.             //$this->em->detach($annonce);
  1327.             return $annonce;
  1328.         } else {
  1329.             return null;
  1330.         }
  1331.     }
  1332.     public function donne_option_select_pays_annonce_vente($id_pays_connexion 33$lang "fr") {
  1333.         $pays $this->em->getRepository(AnnoncesVendeur::class)->donne_liste_pays_annonces_vente($id_pays_connexion);
  1334.         $texte_tous_les_pays $this->translationExtension->translate('tous les pays'$lang"""M""");
  1335.         $options = [$texte_tous_les_pays => 0];
  1336.         foreach ($pays as $p) {
  1337.             $options array_merge($options, [$p['nom_localisation'] => 'p' $p['id_localisation']]);
  1338.         }
  1339.         return $options;
  1340.     }
  1341.     /**
  1342.      * @return \Knp\Component\Pager\Pagination\PaginationInterface
  1343.      */
  1344.     public function getAnnoncesRecherchePartenariatList(Request $requestPaginatorInterface $paginator, array $filter = [], $mode ''$login_utilisateur null) {
  1345.         $sql $this->em->getRepository(AnnoncesAcheteur::class)->donne_requete_SQL_pour_tableau_annonces_acheteur_page_en_cours($filter$mode);
  1346.         $params $this->em->getRepository(AnnoncesAcheteur::class)->prepareParameters($filter);
  1347.         $query $this->em->createQuery($sql);
  1348.         $query->setParameters($params);
  1349.         $annoncesRecherchePartenariat $paginator->paginate(
  1350.                 $query// Requête contenant les données à paginer (ici nos annonces)
  1351.               max(1$request->query->getInt('page'1)),// Numéro de la page en cours, passé dans l'URL, 1 si aucune page
  1352.                 10 // Nombre de résultats par page
  1353.         );
  1354.         $tab_annonces = [];
  1355.         foreach ($annoncesRecherchePartenariat as $annonce) {
  1356.             //$annonce['carte'] = $this->getImgCarteAnnonceAcheteur($annonce);
  1357.             $id_pays $annonce['id_pays'];
  1358.             $id_region $annonce['id_region'];
  1359.             $id_departement $annonce['id_departement'];
  1360.             $localisation = [];
  1361.             if (null != $id_departement && preg_match('/[A-Za-z]/'$id_departement) == && substr($id_departement, -3) != "_99") {
  1362.                 $localisation $this->lm->getNomLocalisationById($id_departement);
  1363.             } elseif (null != $id_region && preg_match('/[A-Za-z]/'$id_region) == && substr($id_region, -3) != "_99") {
  1364.                 $localisation $this->lm->getNomLocalisationById($id_region);
  1365.             } elseif (null != $id_pays) {
  1366.                 $localisation $this->lm->getNomLocalisationById($id_pays);
  1367.             }
  1368.             if ($localisation) {
  1369.                 $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  1370.             } else {
  1371.                 $annonce['nom_localisation_slug'] = "localisation";
  1372.             }
  1373.             // On concatene toutes les loc recherchees
  1374.             $idLocalisationsRecherchees $annonce['autres_localisations'];
  1375.             if ($id_region) {
  1376.                 $idLocalisationsRecherchees .= "," $id_region;
  1377.             } elseif ($id_pays) {
  1378.                 $idLocalisationsRecherchees .= "," $id_pays;
  1379.             }
  1380.             $idLocalisations array_filter(explode(','$idLocalisationsRecherchees));
  1381.             $annonce['cartes']['id_localisation_by_country'] = [];
  1382.             foreach ($idLocalisations as $idLocalisation) {
  1383.                 // Si ce n'est pas un département confidentiel
  1384.                 if (strpos($idLocalisation'_99') === false || substr_count($idLocalisation"_") < 2) {
  1385.                     if (!in_array(Utils::getIdPaysFromIdLocalisation($idLocalisation), array_keys($annonce['cartes']['id_localisation_by_country']))) {
  1386.                         $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = '';
  1387.                     }
  1388.                     if (!in_array($idLocalisation$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)])) {
  1389.                         if ((string) $idLocalisation !== Utils::getIdPaysFromIdLocalisation($idLocalisation)) {
  1390.                             $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation;
  1391.                         } else {
  1392.                             $nbRegions = (int) $this->lm->getCountRegionsByCountry($idLocalisation);
  1393.                             $x 1;
  1394.                             do {
  1395.                                 $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation '_' str_pad((string) $x2'0'STR_PAD_LEFT);
  1396.                                 ++$x;
  1397.                             } while ($x <= $nbRegions);
  1398.                         }
  1399.                     }
  1400.                     $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)] = array_filter(
  1401.                             $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)]
  1402.                     );
  1403.                 } else {
  1404.                     // Récupération du pays
  1405.                     $idPays Utils::getIdPaysFromIdLocalisation($idLocalisation);
  1406.                     
  1407.                     // Récupération de la région parente (ex: 33_01_99 → 33_01)
  1408.                     $idRegion substr($idLocalisation0strrpos($idLocalisation'_'));
  1409.                     
  1410.                     // Initialisation du tableau pays si nécessaire
  1411.                     if (!isset($annonce['cartes']['id_localisation_by_country'][$idPays])) {
  1412.                         $annonce['cartes']['id_localisation_by_country'][$idPays] = [];
  1413.                     }
  1414.                     
  1415.                     // On ajoute la région si elle n'existe pas déjà
  1416.                     if (!in_array($idRegion$annonce['cartes']['id_localisation_by_country'][$idPays], true)) {
  1417.                         $annonce['cartes']['id_localisation_by_country'][$idPays][] = $idRegion;
  1418.                     }
  1419.                     
  1420.                     // Nettoyage
  1421.                     $annonce['cartes']['id_localisation_by_country'][$idPays] = array_filter(
  1422.                         $annonce['cartes']['id_localisation_by_country'][$idPays]
  1423.                     );
  1424.                 }
  1425.             }
  1426.             /* if (null != $id_region) {
  1427.               if (Utils::url_exists($this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_region.'.png')) {
  1428.               $annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_region.'.png';
  1429.               } elseif (Utils::url_exists($this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_pays.'.png')) {
  1430.               $annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_pays.'.png';
  1431.               } else {
  1432.               $annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1433.               }
  1434.               } elseif (null != $id_pays) {
  1435.               if (Utils::url_exists($this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_pays.'.png')) {
  1436.               $annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_pays.'.png';
  1437.               } else {
  1438.               $annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1439.               }
  1440.               } */
  1441.             $localisations $this->getLocalisationsWithUrlAnnonceAcheteur($annonce);
  1442.             $annonce['localisations'] = $localisations;
  1443.             $nom_localisation "";
  1444.             /* if (null != $id_departement) {
  1445.               $localisation = $this->lm->getNomLocalisationById($id_departement);
  1446.               $nom_localisation = '';
  1447.               for ($i = count($localisation) - 1; $i >= 0; --$i) {
  1448.               $nom_localisation .= $localisation[$i]['nom_localisation'].', ';
  1449.               }
  1450.               $nom_localisation = substr($nom_localisation, 0, -2);
  1451.               } elseif (null != $id_region) {
  1452.               $localisation = $this->lm->getNomLocalisationById($id_region);
  1453.               $nom_localisation = '';
  1454.               for ($i = count($localisation) - 1; $i >= 0; --$i) {
  1455.               $nom_localisation .= $localisation[$i]['nom_localisation'].', ';
  1456.               }
  1457.               $nom_localisation = substr($nom_localisation, 0, -2);
  1458.               } elseif (null != $id_pays) {
  1459.               $localisation = $this->lm->getNomLocalisationById($id_pays);
  1460.               $nom_localisation = $localisation[0]['nom_localisation'];
  1461.               } */
  1462.             foreach ($localisations as $loc) {
  1463.                 $nom_localisation .= $loc['nom_localisation'] . ', ';
  1464.             }
  1465.             $annonce['nom_localisation'] = substr($nom_localisation0, -2);
  1466.             /* foreach ($localisation as $niveau => $loc) {
  1467.               $nom_niveau = 'nom_localisation_niveau_'.$niveau;
  1468.               $id_niveau = 'id_localisation_niveau_'.$niveau;
  1469.               $annonce->$nom_niveau = $loc['nom_localisation'];
  1470.               $annonce->$id_niveau = $loc['id_localisation'];
  1471.               }
  1472.               if (!isset($annonce->nom_localisation_niveau_0)) {
  1473.               $annonce->nom_localisation_niveau_0 = '';
  1474.               $annonce->id_localisation_niveau_0 = '';
  1475.               }
  1476.               if (!isset($annonce->nom_localisation_niveau_1)) {
  1477.               $annonce->nom_localisation_niveau_1 = '';
  1478.               $annonce->id_localisation_niveau_1 = '';
  1479.               }
  1480.               if (!isset($annonce->nom_localisation_niveau_2)) {
  1481.               $annonce->nom_localisation_niveau_2 = '';
  1482.               $annonce->id_localisation_niveau_2 = '';
  1483.               } */
  1484.             $annonce['date_parution_object'] = Utils::getDateObjectFromFUSACQDate($annonce['date_parution']);
  1485.             $annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
  1486.             $annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_acheteur'], "acheteur"$login_utilisateur);
  1487.             $tab_annonces[] = $annonce;
  1488.             //$this->em->detach($annonce);
  1489.         }
  1490.         $annoncesRecherchePartenariat->setItems($tab_annonces);
  1491.         return $annoncesRecherchePartenariat;
  1492.     }
  1493.     /**
  1494.      * @param int $idAnnonce
  1495.      * @return array $tab_info_partenariat
  1496.      */
  1497.     public function get_tab_info_partenariat($idAnnonce) {
  1498.         $details $this->em->getRepository(AnnoncesAcheteur::class)->getDetailsAnnoncePartenariat($idAnnonce);
  1499.         $tab_info_partenariat = array();
  1500.         $tab_info_partenariat["id_details_annonce_partenariat"] = $details->_get('id_details_annonce_partenariat');
  1501.         if ($tab_info_partenariat["id_details_annonce_partenariat"] == null) {
  1502.             $tab_info_partenariat["id_details_annonce_partenariat"] = "";
  1503.         }
  1504.         $tab_info_partenariat["type_partenaire"] = $details->_get('type_partenaire');
  1505.         if ($tab_info_partenariat["type_partenaire"] == null) {
  1506.             $tab_info_partenariat["type_partenaire"] = "";
  1507.         }
  1508.         $tab_info_partenariat["stade_dev_deposant"] = $details->_get('stade_dev_deposant');
  1509.         if ($tab_info_partenariat["stade_dev_deposant"] == null) {
  1510.             $tab_info_partenariat["stade_dev_deposant"] = "";
  1511.         }
  1512.         $tab_info_partenariat["id_localisation_deposant"] = $details->_get('id_localisation_deposant');
  1513.         if ($tab_info_partenariat["id_localisation_deposant"] == null) {
  1514.             $tab_info_partenariat["id_localisation_deposant"] = "";
  1515.         }
  1516.         $tab_info_partenariat["id_annonce_acheteur"] = $details->_get('id_annonce_acheteur');
  1517.         if ($tab_info_partenariat["id_annonce_acheteur"] == null) {
  1518.             $tab_info_partenariat["id_annonce_acheteur"] = "";
  1519.         }
  1520.         $tab_info_partenariat["type_partenariat"] = $details->_get('type_partenariat');
  1521.         if ($tab_info_partenariat["type_partenariat"] == null) {
  1522.             $tab_info_partenariat["type_partenariat"] = "";
  1523.         }
  1524.         return $tab_info_partenariat;
  1525.     }
  1526.     public function isFavoris($id_annonce$type_annonce$login_utilisateur) {
  1527.         if (!$login_utilisateur) {
  1528.             return false;
  1529.         }
  1530.         $favoris $this->em->getRepository(Favoris::class)->findOneBy(['id_annonce' => $id_annonce'type_annonce' => $type_annonce'login_utilisateur' => $login_utilisateur]);
  1531.         return $favoris != null;
  1532.     }
  1533.     public function donne_tableau_nb_annonce_vendeur_par_region($type "entreprise"$id_pays 33) {
  1534.         $nb_annonces_par_region $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_par_region($type$id_pays);
  1535.         $array_annonce_region = [];
  1536.         foreach ($nb_annonces_par_region as $id_region => $nb) {
  1537.             $region $this->localisationsRepository->findOneBy(['id_localisation' => $id_region]);
  1538.             $row = [
  1539.                 'nb' => $nb,
  1540.                 'nom' => $region->__get('nom_localisation'),
  1541.                 'prefixe' => $region->__get('prefixe')
  1542.             ];
  1543.             $array_annonce_region[$id_region] = $row;
  1544.         }
  1545.         uasort($array_annonce_region, function ($a$b) {
  1546.             return $a['nom'] < $b['nom'] ? -1;
  1547.         });
  1548.         return $array_annonce_region;
  1549.     }
  1550.     public function donne_tableau_nb_annonce_acheteur_par_region($id_pays 33) {
  1551.         $nb_annonces_par_region $this->em->getRepository(AnnoncesAcheteur::class)->donne_nb_annonces_par_region(null$id_pays);
  1552.         $array_annonce_region = [];
  1553.         foreach ($nb_annonces_par_region as $id_region => $nb) {
  1554.             $region $this->localisationsRepository->findOneBy(['id_localisation' => $id_region]);
  1555.             $row = [
  1556.                 'nb' => $nb,
  1557.                 'nom' => $region->__get('nom_localisation'),
  1558.                 'prefixe' => $region->__get('prefixe')
  1559.             ];
  1560.             $array_annonce_region[$id_region] = $row;
  1561.         }
  1562.         uasort($array_annonce_region, function ($a$b) {
  1563.             return $a['nom'] < $b['nom'] ? -1;
  1564.         });
  1565.         return $array_annonce_region;
  1566.     }
  1567.     /**
  1568.      * @param array $annonce
  1569.      * @param array $tableau_associatif_localisation
  1570.      *
  1571.      * @return array
  1572.      */
  1573.     private function donne_tab_liens_noms_fil_arianne($annonce$mode) {
  1574.         $pagesRedirection = new PagesRedirection($this->container);
  1575.         $tab_liens_noms array_reverse($annonce['liste_secteurs_ariane']);
  1576.         if ($mode == "vendeur") {
  1577.             if ('99' == substr($annonce['statuts'], 02)) {
  1578.                 $type_page "recherche_vente_actif";
  1579.             } else {
  1580.                 $type_page "recherche_vente";
  1581.             }
  1582.         } elseif ($mode == "acheteur") {
  1583.             if ($annonce['type_raprochement'] == "partenaire") {
  1584.                 $type_page "recherche_achat_partenaire";
  1585.             } else {
  1586.                 $type_page "recherche_achat";
  1587.             }
  1588.         } elseif ($mode == "ouvrir-capital") {
  1589.             if ($annonce['type_raprochement'] == "partenaire") {
  1590.                 $type_page "recherche_ouvrir_capital_recherche_partenariat";
  1591.             } else {
  1592.                 $type_page "recherche_acquereur_investisseur";
  1593.             }
  1594.         } else {
  1595.             // aquereur_investisseur
  1596.             $type_page "recherche_acquereur_investisseur";
  1597.         }
  1598.         $parametres_lien['type_recherche'] = 7;
  1599.         $parametres_lien['id_secteur_activite'] = $annonce['id_secteur_activite'];
  1600.         $id_departement $annonce['id_departement'];
  1601.         $id_region $annonce['id_region'];
  1602.         $id_pays $annonce['id_pays'];
  1603.         if (isset($id_departement) && false === strpos($id_departement'_99') && '' != $id_departement && '0' != $id_departement && $id_departement 0) {
  1604.             $nom_region $this->localisationsRepository->getStringNomLocalisationById($id_region);
  1605.             $parametres_lien['id_region'] = $id_region;
  1606.             $parametres_lien['titre_recherche'] = Utils::slugify($annonce['nom_secteur_activite'] . ' ' $nom_region);
  1607.             $parametres_lien['nom_localisation'] = Utils::slugify($nom_region);
  1608.             $parametres_lien['nom_secteur_activite'] = Utils::slugify($annonce['nom_secteur_activite']);
  1609.             $lien $pagesRedirection->donne_page_redirection($type_page$parametres_lien);
  1610.             // $tab_liens_noms[] = $annonce->nom_secteur_activite.', '.$nom_region.'" href="'.$lien.'">'.$nom_region.'</a>';
  1611.             $tab_liens_noms[] = ['lien' => $lien'nom' => $nom_region'secteur_activite' => $annonce['nom_secteur_activite']];
  1612.             $nom_departement $this->localisationsRepository->getStringNomLocalisationById($id_departement);
  1613.             $parametres_lien['id_departement'] = $id_departement;
  1614.             $parametres_lien['titre_recherche'] = Utils::slugify($annonce['nom_secteur_activite'] . ' ' $nom_departement);
  1615.             $parametres_lien['nom_localisation'] = Utils::slugify($nom_departement);
  1616.             $parametres_lien['nom_secteur_activite'] = Utils::slugify($annonce['nom_secteur_activite']);
  1617.             $lien $pagesRedirection->donne_page_redirection($type_page$parametres_lien);
  1618.             // $tab_liens_noms[] = $annonce->nom_secteur_activite.', '.$nom_departement.'" href="'.$lien.'">'.$nom_departement.'</a>';
  1619.             $tab_liens_noms[] = ['lien' => $lien'nom' => $nom_departement'secteur_activite' => $annonce['nom_secteur_activite']];
  1620.         } elseif (isset($id_region) && false === strpos($id_region'_99') && '' != $id_region && '0' != $id_region && $id_region 0) {
  1621.             $nom_region $this->localisationsRepository->getStringNomLocalisationById($id_region);
  1622.             $parametres_lien['id_region'] = $id_region;
  1623.             $parametres_lien['titre_recherche'] = Utils::slugify($annonce['nom_secteur_activite'] . ' ' $nom_region);
  1624.             $parametres_lien['nom_localisation'] = Utils::slugify($nom_region);
  1625.             $parametres_lien['nom_secteur_activite'] = Utils::slugify($annonce['nom_secteur_activite']);
  1626.             $lien $pagesRedirection->donne_page_redirection($type_page$parametres_lien);
  1627.             // $tab_liens_noms[] .= $annonce->nom_secteur_activite.', '.$nom_region.'" href="'.$lien.'">'.$nom_region.'</a>';
  1628.             $tab_liens_noms[] = ['lien' => $lien'nom' => $nom_region'secteur_activite' => $annonce['nom_secteur_activite']];
  1629.         } elseif (isset($id_pays) && '' != $id_pays && '0' != $id_pays && $id_pays 0) {
  1630.             $nom_pays $this->localisationsRepository->getStringNomLocalisationById($id_pays);
  1631.             $parametres_lien['id_pays'] = $id_pays;
  1632.             $parametres_lien['titre_recherche'] = Utils::slugify($annonce['nom_secteur_activite'] . ' ' $nom_pays);
  1633.             $parametres_lien['nom_localisation'] = Utils::slugify($nom_pays);
  1634.             $parametres_lien['nom_secteur_activite'] = Utils::slugify($annonce['nom_secteur_activite']);
  1635.             $lien $pagesRedirection->donne_page_redirection($type_page$parametres_lien);
  1636.             // $tab_liens_noms[] .= $annonce->nom_secteur_activite.', '.$nom_region.'" href="'.$lien.'">'.$nom_region.'</a>';
  1637.             $tab_liens_noms[] = ['lien' => $lien'nom' => $nom_pays'secteur_activite' => $annonce['nom_secteur_activite']];
  1638.         } else {
  1639.             // $nom_pays = $this->localisationsRepository->getStringNomLocalisationById($id_pays);
  1640.             // $tab_liens_noms[] = $annonce->nom_localisation;
  1641.             $tab_liens_noms[] = ['lien' => null'nom' => $annonce['nom_localisation'], 'secteur_activite' => null];
  1642.         }
  1643.         //dd($tab_liens_noms);
  1644.         return $tab_liens_noms;
  1645.     }
  1646.     /**
  1647.      * @param array $annonce
  1648.      *
  1649.      * @return array $annonce
  1650.      */
  1651.     private function affectation_nom_secteur_activite($annonce$mode) {
  1652.         $pagesRedirection = new PagesRedirection($this->container);
  1653.         if ($mode == "vendeur") {
  1654.             if ('99' == substr($annonce['statuts'], 02)) {
  1655.                 $function_name "donne_page_redirection_recherche_annonce_vente_actif";
  1656.             } else {
  1657.                 $function_name "donne_page_redirection_recherche_annonce_vente";
  1658.             }
  1659.         } elseif ($mode == "acheteur") {
  1660.             if ($annonce['type_raprochement'] == "partenaire") {
  1661.                 $function_name "donne_page_redirection_recherche_annonce_achat_partenaire";
  1662.             } else {
  1663.                 $function_name "donne_page_redirection_recherche_annonce_achat";
  1664.             }
  1665.         } elseif ($mode == "acquereur_investisseur") {
  1666.             if ($annonce['type_raprochement'] == "partenaire") {
  1667.                 $function_name "donne_page_redirection_ouvrir_capital_recherches_partenariats";
  1668.             } else {
  1669.                 $function_name "donne_page_redirection_recherche_acquereur_investisseur";
  1670.             }
  1671.         }else {
  1672.             // aquereur_investisseur
  1673.             $function_name "donne_page_redirection_recherche_acquereur_investisseur";
  1674.         }
  1675.         $id_secteur_activite = (string) $annonce['id_secteur_activite'];
  1676.         $nom_secteur_activite $this->secteursActiviteRepo->getNomSecteurActivitieById($id_secteur_activite)[0];
  1677.         $annonce['nom_secteur_activite'] = $nom_secteur_activite['nomSecteurActivite'];
  1678.         $liste_secteurs_affichage $annonce['nom_secteur_activite'];
  1679.         $lien_secteur $pagesRedirection->$function_name(
  1680.                 ['type_recherche' => 6'titre_recherche' => Utils::slugify($annonce['nom_secteur_activite']), 'id_secteur_activite' => $id_secteur_activite]
  1681.         );
  1682.         $annonce['liste_secteurs_affichage'] = '<a title="Cession d\'entreprise ' $annonce['nom_secteur_activite'] . '" href="' $lien_secteur '">' $annonce['nom_secteur_activite'] . '</a>';
  1683.         $annonce['liste_secteurs_ariane'][] = ['lien' => $lien_secteur'nom' => $annonce['nom_secteur_activite']];
  1684.         $n strlen($id_secteur_activite);
  1685.         if ($n 1) {
  1686.             $id_secteur_activite_pere substr($id_secteur_activite0$n 2);
  1687.             $nom_secteur_activite_pere $this->secteursActiviteRepo->getNomSecteurActivitieById($id_secteur_activite_pere)[0];
  1688.             $annonce['nom_secteur_activite_pere'] = $nom_secteur_activite_pere['nomSecteurActivite'];
  1689.             $liste_secteurs_affichage $annonce['nom_secteur_activite_pere'] . ' > ' $liste_secteurs_affichage;
  1690.             $lien_secteur_pere $pagesRedirection->$function_name(
  1691.                     ['type_recherche' => 6'titre_recherche' => Utils::slugify($annonce['nom_secteur_activite_pere']), 'id_secteur_activite' => $id_secteur_activite_pere]
  1692.             );
  1693.             $annonce['liste_secteurs_affichage'] = '<a title="Cession d\'entreprise ' $annonce['nom_secteur_activite_pere'] . '" href="' $lien_secteur_pere '">' $annonce['nom_secteur_activite_pere'] . '</a> > ' $annonce['liste_secteurs_affichage'];
  1694.             $annonce['liste_secteurs_ariane'][] = ['lien' => $lien_secteur_pere'nom' => $annonce['nom_secteur_activite_pere']];
  1695.         }
  1696.         if ($n 3) {
  1697.             $id_secteur_activite_grand_pere substr($id_secteur_activite0$n 4);
  1698.             $nom_secteur_activite_grand_pere $this->secteursActiviteRepo->getNomSecteurActivitieById($id_secteur_activite_grand_pere)[0];
  1699.             $annonce['nom_secteur_activite_grand_pere'] = $nom_secteur_activite_grand_pere['nomSecteurActivite'];
  1700.             $liste_secteurs_affichage $annonce['nom_secteur_activite_grand_pere'] . ' > ' $liste_secteurs_affichage;
  1701.             $lien_secteur_grand_pere $pagesRedirection->$function_name(
  1702.                     ['type_recherche' => 6'titre_recherche' => Utils::slugify($annonce['nom_secteur_activite_grand_pere']), 'id_secteur_activite' => $id_secteur_activite_grand_pere]
  1703.             );
  1704.             $annonce['liste_secteurs_affichage'] = '<a title="Cession d\'entreprise ' $annonce['nom_secteur_activite_grand_pere'] . '" href="' $lien_secteur_grand_pere '">' $annonce['nom_secteur_activite_grand_pere'] . '</a> > ' $annonce['liste_secteurs_affichage'] . '';
  1705.             $annonce['liste_secteurs_ariane'][] = ['lien' => $lien_secteur_grand_pere'nom' => $annonce['nom_secteur_activite_grand_pere']];
  1706.         }
  1707.         // $annonce['liste_secteurs_ariane'] = $annonce['liste_secteurs_affichage'];
  1708.         // $annonce['liste_secteurs_ariane'] = $secteurs_affichage;
  1709.         // un petit test pour lque la liste de secteurs ne passe pas sur deux lignes.
  1710.         // en fait la variable $liste_secteurs_affichage ne sert pas pour l'affichage, elle sert juste � mesurer la taille de la chaine lorsqu'elle ne comporte pas de lien
  1711.         if (strlen($liste_secteurs_affichage) > 65 && $n 3) {
  1712.             // 1er cas, on met des ... � la place du second secteur d'activit�
  1713.             $liste_secteurs_affichage $annonce['nom_secteur_activite_grand_pere'] . ' > ... > ' $annonce['nom_secteur_activite'];
  1714.             $annonce['liste_secteurs_affichage'] = '<a href="' $lien_secteur_grand_pere '">' $annonce['nom_secteur_activite_grand_pere'] . '</a> > ... > <a href="' $lien_secteur '">' $annonce['nom_secteur_activite'] . '</a>';
  1715.             // si c'est toujours trop long on n'affiche que le secteur d'activite final
  1716.             if (strlen($liste_secteurs_affichage) > 65) {
  1717.                 $annonce['liste_secteurs_affichage'] = '<a href="' $lien_secteur '">' $annonce['nom_secteur_activite'] . '</a>';
  1718.             }
  1719.         }
  1720.         // $annonce['liste_secteurs_affichage']=''.$annonce['liste_secteurs_affichage'].'';
  1721.         $annonce['secteurs_affichage_2'] = '<a title="Cession d\'entreprise ' $annonce['nom_secteur_activite'] . '"  href="' $lien_secteur '">' $annonce['nom_secteur_activite'] . '</a>';
  1722.         return $annonce;
  1723.     }
  1724.     /**
  1725.      * @param AnnoncesAcheteur $annonce_acheteur
  1726.      * @return string $img
  1727.      */
  1728.     private function getImgCarteAnnonceAcheteur($annonce_acheteur) {
  1729.         $id_pays $annonce_acheteur['id_pays'];
  1730.         $id_region $annonce_acheteur['id_region'];
  1731.         if (strpos($id_region"_99") === false && $id_region != "") {
  1732.             $id_localisation_principale $id_region;
  1733.         } else {
  1734.             $id_localisation_principale $id_pays;
  1735.         }
  1736.         $ids_localisations $id_localisation_principale ',' $annonce_acheteur['autres_localisations'];
  1737.         $array_ids_localisations array_filter(explode(","$ids_localisations));
  1738.         $array_pays = [];
  1739.         $array_regions = [];
  1740.         foreach ($array_ids_localisations as $id_loc) {
  1741.             $count substr_count($id_loc'_');
  1742.             if ($count == 0) {
  1743.                 $array_pays[] = $id_loc;
  1744.             } elseif ($count == 1) {
  1745.                 $array_regions[] = $id_loc;
  1746.             }
  1747.         }
  1748.         if (count($array_pays) == 0) {
  1749.             if (count($array_regions) == 0) {
  1750.                 $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1751.             } elseif (count($array_regions) == 1) {
  1752.                 $id_pays substr($array_regions[0], 0, -3);
  1753.                 if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $array_regions[0] . '.png')) {
  1754.                     $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $array_regions[0] . '.png';
  1755.                 } elseif (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png')) {
  1756.                     $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $id_pays '/' $id_pays '.png';
  1757.                 } else {
  1758.                     $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1759.                 }
  1760.             } else {
  1761.                 $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1762.             }
  1763.         } elseif (count($array_pays) == 1) {
  1764.             if (count($array_regions) == 0) {
  1765.                 if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $array_pays[0] . '/' $array_pays[0] . '.png')) {
  1766.                     $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $array_pays[0] . '/' $array_pays[0] . '.png';
  1767.                 } else {
  1768.                     $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1769.                 }
  1770.             } elseif (count($array_regions) == 1) {
  1771.                 if (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $array_pays[0] . '/' $array_regions[0] . '.png')) {
  1772.                     $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $array_pays[0] . '/' $array_regions[0] . '.png';
  1773.                 } elseif (Utils::url_exists($this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $array_pays[0] . '/' $array_pays[0] . '.png')) {
  1774.                     $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/' $array_pays[0] . '/' $array_pays[0] . '.png';
  1775.                 } else {
  1776.                     $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1777.                 }
  1778.             } else {
  1779.                 $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1780.             }
  1781.         } else {
  1782.             $img $this->cdn_fusacq '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
  1783.         }
  1784.         return $img;
  1785.     }
  1786.     /**
  1787.      * @param AnnoncesAcheteur $annonce_acheteur
  1788.      * @return string $id_localisation_principale
  1789.      */
  1790.     private function getLocalisationPrincipaleAnnonceAcheteur($annonce) {
  1791.         $id_pays $annonce['id_pays'];
  1792.         $id_region $annonce['id_region'];
  1793.         $id_departement $annonce['id_departement'];
  1794.         if (isset($id_departement) && strpos($id_departement"_99") === false && $id_departement != "") {
  1795.             $id_localisation_principale $id_departement;
  1796.         } elseif (isset($id_region) && strpos($id_region"_99") === false && $id_region != "") {
  1797.             $id_localisation_principale $id_region;
  1798.         } else {
  1799.             $id_localisation_principale $id_pays;
  1800.         }
  1801.         return $id_localisation_principale;
  1802.     }
  1803.     /**
  1804.      * @param string $ids_localisations
  1805.      * @return array $localisations
  1806.      */
  1807.     private function getLocalisationsWithUrlAnnonceAcheteur($annonce$from null) {
  1808.         $pagesRedirection = new PagesRedirection($this->container);
  1809.         if ($from && $from == "ouvrir-capital") {
  1810.             if (isset($annonce['type_raprochement']) && $annonce['type_raprochement'] == "partenaire") {
  1811.                 $type_page "recherche_ouvrir_capital_recherche_partenariat";
  1812.             } else {
  1813.                 $type_page "recherche_acquereur_investisseur";
  1814.             }
  1815.         } elseif (isset($annonce['type_raprochement']) && $annonce['type_raprochement'] == "partenaire") {
  1816.             $type_page "recherche_achat_partenaire";
  1817.         } else {
  1818.             $type_page "recherche_achat";
  1819.         }
  1820.         $id_localisation_principale $this->getLocalisationPrincipaleAnnonceAcheteur($annonce);
  1821.         $ids_localisations $id_localisation_principale ',' $annonce['autres_localisations'];
  1822.         $array_localisations = [];
  1823.         $array_ids_localisations array_unique(array_filter(explode(","$ids_localisations)));
  1824.         //$array_ids_localisations = array_splice($array_ids_localisations, 1);
  1825.         foreach ($array_ids_localisations as $id_loc) {
  1826.             $localisations $this->lm->getNomLocalisationById($id_loc);
  1827.             if ($localisations) {
  1828.                 $localisation end($localisations);
  1829.                 $count substr_count($localisation['id_localisation'], '_');
  1830.                 if ($count == 0) {
  1831.                     //$type_localisation = "p";
  1832.                     $type_localisation "id_pays";
  1833.                 } elseif ($count == 1) {
  1834.                     //$type_localisation = "r";
  1835.                     $type_localisation "id_region";
  1836.                 } else {
  1837.                     //$type_localisation = "d";
  1838.                     $type_localisation "id_departement";
  1839.                 }
  1840.                 $parametres_lien = [];
  1841.                 $parametres_lien['type_recherche'] = 2;
  1842.                 $parametres_lien[$type_localisation] = $localisation['id_localisation'];
  1843.                 $parametres_lien['titre_recherche'] = Utils::slugify($localisation['nom_localisation']);
  1844.                 $row['nom_localisation'] = $localisation['nom_localisation'];
  1845.                 //$row['lien_localisation'] = "/reprise-entreprise-" . strtolower($localisation['nom_localisation']) . ',' . $type_localisation . $localisation['id_localisation'];
  1846.                 $row['lien_localisation'] = $pagesRedirection->donne_page_redirection($type_page$parametres_lien);
  1847.                 $array_localisations[] = $row;
  1848.             }
  1849.         }
  1850.         return $array_localisations;
  1851.     }
  1852.     private function affectation_property_profil_deposant($login_utilisateur) {
  1853.         $deposant $this->em->getRepository(Utilisateur::class)->findOneBy(['login_utilisateur' => $login_utilisateur]);
  1854.         return $deposant->_get("type_utilisateur");
  1855.     }
  1856.     /**
  1857.      * @param type $id_pays
  1858.      * @param type $limitV
  1859.      * @param type $limitA
  1860.      * @return type
  1861.      */
  1862.     public function getAnnoncesAlaUnePageAccueil($id_pays) {
  1863.         $annoncesV $this->em->getRepository(AnnoncesVendeur::class)->getAnnoncesAlaUnePageAccueil($id_pays);
  1864.         $annoncesA $this->em->getRepository(AnnoncesAcheteur::class)->getAnnoncesAlaUnePageAccueil($id_pays,);
  1865.         $result array_merge(Utils::getSomeRandomItemsFromArray(2$annoncesV), Utils::getSomeRandomItemsFromArray(1$annoncesA));
  1866.         return array_map(
  1867.                 function ($item) {
  1868.                     $item["id_localisation"] = Utils::getLocalisationPlusPrecisPossible($item["id_pays"], $item["id_region"], $item["id_departement"]);
  1869.                     $localisation Utils::lastValInArray($this->lm->getNomLocalisationById($item["id_localisation"]));
  1870.                     $item["nom_localisation_slug"] = Utils::slugify($localisation["nom_localisation"]);
  1871.                     return $item;
  1872.                 },
  1873.                 $result
  1874.         );
  1875.     }
  1876.     public function getAnnonceVendeurArrayByIdAnnonce($id_annonce_vendeur) {
  1877.         $annonce $this->em->getRepository(AnnoncesVendeur::class)->getAnnonceArrayByIdAnnonce($id_annonce_vendeur);
  1878.         $localisation = [];
  1879.         if (null != $annonce['id_departement'] && preg_match('/[A-Za-z]/'$annonce['id_departement']) == && substr($annonce['id_departement'], -3) != "_99") {
  1880.             $localisation $this->lm->getNomLocalisationById($annonce['id_departement']);
  1881.         } elseif (null != $annonce['id_region'] && preg_match('/[A-Za-z]/'$annonce['id_region']) == && substr($annonce['id_region'], -3) != "_99") {
  1882.             $localisation $this->lm->getNomLocalisationById($annonce['id_region']);
  1883.         } elseif (null != $annonce['id_pays']) {
  1884.             $localisation $this->lm->getNomLocalisationById($annonce['id_pays']);
  1885.         }
  1886.         if ($localisation) {
  1887.             $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  1888.         } else {
  1889.             $annonce['nom_localisation_slug'] = "localisation";
  1890.         }
  1891.         return $annonce;
  1892.     }
  1893.     public function getAnnonceAcheteurArrayByIdAnnonce($id_annonce_acheteur) {
  1894.         $annonce $this->em->getRepository(AnnoncesAcheteur::class)->getAnnonceArrayByIdAnnonce($id_annonce_acheteur);
  1895.         $localisation = [];
  1896.         if (null != $annonce['id_departement'] && preg_match('/[A-Za-z]/'$annonce['id_departement']) == && substr($annonce['id_departement'], -3) != "_99") {
  1897.             $localisation $this->lm->getNomLocalisationById($annonce['id_departement']);
  1898.         } elseif (null != $annonce['id_region'] && preg_match('/[A-Za-z]/'$annonce['id_region']) == && substr($annonce['id_region'], -3) != "_99") {
  1899.             $localisation $this->lm->getNomLocalisationById($annonce['id_region']);
  1900.         } elseif (null != $annonce['id_pays']) {
  1901.             $localisation $this->lm->getNomLocalisationById($annonce['id_pays']);
  1902.         }
  1903.         if ($localisation) {
  1904.             $annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
  1905.         } else {
  1906.             $annonce['nom_localisation_slug'] = "localisation";
  1907.         }
  1908.         return $annonce;
  1909.     }
  1910.     /* public function donne_option_select_pays_annonces_acheteur($mode = "entreprise", $id_pays_connexion = 33) {
  1911.       $pays = $this->em->getRepository(AnnoncesAcheteur::class)->donne_option_select_pays_annonces_acheteur($mode, $id_pays_connexion);
  1912.       $options = ['Tous' => 0];
  1913.       foreach ($pays as $p) {
  1914.       if ($p['nom_localisation'] != null) {
  1915.       $options = array_merge($options, [$p['nom_localisation'] => 'p' . $p['id_localisation']]);
  1916.       }
  1917.       }
  1918.       return $options;
  1919.       } */
  1920.     public function donne_option_select_pays_annonces_acheteur($mode "entreprise"$id_pays_connexion 33) {
  1921.         $localisations $this->em->getRepository(AnnoncesAcheteur::class)->getAnnoncesAcheteurLocalisationsRecherchees($mode);
  1922.         $array_pays = [];
  1923.         foreach ($localisations as $loc) {
  1924.             $string_loc $loc['id_pays'] . "," $loc['autres_localisations'];
  1925.             $array_loc explode(','$string_loc);
  1926.             $array_loc array_filter($array_loc);
  1927.             foreach ($array_loc as $id_loc) {
  1928.                 if (strpos($id_loc"_") === false && !in_array($id_loc$array_pays) && is_numeric($id_loc) && $id_loc != "00") {
  1929.                     $array_pays[] = $id_loc;
  1930.                 }
  1931.             }
  1932.         }
  1933.         $options = ['Tous' => 0];
  1934.         if ($array_pays) {
  1935.             // Si le pays de l'utilisateur fait partie de la liste des pays, on le met en haut de la liste
  1936.             for ($i 0$i count($array_pays); $i++) {
  1937.                 if ($array_pays[$i] == $id_pays_connexion) {
  1938.                     unset($array_pays[$i]);
  1939.                     array_unshift($array_pays$id_pays_connexion);
  1940.                     break;
  1941.                 }
  1942.             }
  1943.             foreach ($array_pays as $id_pays) {
  1944.                 $p $this->em->getRepository(Localisations::class)->getNomLocalisationById($id_pays)[0];
  1945.                 $options array_merge($options, [$p['nom_localisation'] => 'p' $p['id_localisation']]);
  1946.             }
  1947.         }
  1948.         return $options;
  1949.     }
  1950.     
  1951.     public function donne_annonces_avec_prix_cession_exploitables($id_secteur_activite$date_ref$nb_mois) {
  1952.         $annonces_avec_prix $this->em->getRepository(AnnoncesVendeur::class)->donne_annonces_avec_prix_cession($id_secteur_activite$date_ref$nb_mois);
  1953.         $annonces_avec_prix_exploitables = [];
  1954.         foreach ($annonces_avec_prix as $annonce) {
  1955.             // Si le prix de l'immobilier est inclus dans le prix de cession
  1956.             if ($annonce['immobilier_dans_prix_cession'] == "oui") {
  1957.                 // Si le prix de l'immobilier est renseigné, on le soustrait du prix de cession
  1958.                 if ($annonce['prix_immobilier'] !== null && $annonce['prix_immobilier'] !== "") {
  1959.                     $annonce['prix_cession'] = $annonce['prix_cession'] - $annonce['prix_immobilier'];
  1960.                     $annonces_avec_prix_exploitables[] = $annonce;
  1961.                 }
  1962.                 // S'il ne l'est pas, pas besoin de calculer
  1963.             } else {
  1964.                 $annonces_avec_prix_exploitables[] = $annonce;
  1965.             }
  1966.         }
  1967.         
  1968.         return $annonces_avec_prix_exploitables;
  1969.     }
  1970.     
  1971.     
  1972.     // Identique à donne_annonces_avec_prix_cession_exploitables, avec filtrage IQR (interquartile range)
  1973.     public function donne_annonces_avec_prix_cession_exploitables_IQR($id_secteur_activite$date_ref$nb_mois) {
  1974.         $annonces_avec_prix $this->em->getRepository(AnnoncesVendeur::class)->donne_annonces_avec_prix_cession($id_secteur_activite$date_ref$nb_mois);
  1975.         $tableau_prix = [];
  1976.         
  1977.         // On ajoute à $tableau_prix les prix exploitables
  1978.         foreach ($annonces_avec_prix as $annonce) {
  1979.             // Si le prix de l'immobilier est inclus dans le prix de cession
  1980.             if ($annonce['immobilier_dans_prix_cession'] == "oui") {
  1981.                 // Si le prix de l'immobilier est renseigné, on le soustrait du prix de cession
  1982.                 if ($annonce['prix_immobilier'] !== null && $annonce['prix_immobilier'] !== "") {
  1983.                     $prix_cession_sans_immobilier $annonce['prix_cession'] - $annonce['prix_immobilier'];
  1984.                     
  1985.                     $tableau_prix[] = $prix_cession_sans_immobilier;
  1986.                 }
  1987.                 // S'il ne l'est pas, pas besoin de calculer
  1988.             } else {
  1989.                 $tableau_prix[] = $annonce['prix_cession'];
  1990.             }
  1991.         }
  1992.         
  1993.         // On calcule les bornes min et max de l'IQR
  1994.         list($min$max) = Statistiques::calculerBornesIQR($tableau_prix);
  1995.         
  1996.         $annonces_avec_prix_exploitables = [];
  1997.         $exclusions = [];
  1998.         
  1999.         foreach ($annonces_avec_prix as $annonce) {
  2000.             // Si le prix de l'immobilier est inclus dans le prix de cession
  2001.             if ($annonce['immobilier_dans_prix_cession'] == "oui") {
  2002.                 // Si le prix de l'immobilier est renseigné, on le soustrait du prix de cession
  2003.                 if ($annonce['prix_immobilier'] !== null && $annonce['prix_immobilier'] !== "") {
  2004.                     if ($prix_cession_sans_immobilier >= $min && $prix_cession_sans_immobilier <= $max) {
  2005.                         $annonce['prix_cession'] = $annonce['prix_cession'] - $annonce['prix_immobilier'];
  2006.                         $annonces_avec_prix_exploitables[] = $annonce;
  2007.                     } else {
  2008.                         $exclusions[] = $annonce;
  2009.                     }
  2010.                 }
  2011.                 // S'il ne l'est pas, pas besoin de calculer
  2012.             } else {
  2013.                 if ($annonce['prix_cession'] >= $min && $annonce['prix_cession'] <= $max) {
  2014.                     $annonces_avec_prix_exploitables[] = $annonce;
  2015.                 } else {
  2016.                     $exclusions[] = $annonce;
  2017.                 }
  2018.             }
  2019.         }
  2020.         
  2021.         return $annonces_avec_prix_exploitables;
  2022.     }
  2023.     /**
  2024.      * Récupère les détails de synthèse du capital immatériel pour une annonce spécifique
  2025.      *
  2026.      * Cette méthode retourne les informations détaillées de la synthèse stratégique
  2027.      * liées au capital immatériel d'une annonce identifiée par son ID.
  2028.      *
  2029.      * @param int|string $id_annonce L'identifiant unique de l'annonce
  2030.      *
  2031.      * @return array|object|null Les données de synthèse du capital immatériel
  2032.      *
  2033.      *
  2034.      * @see \App\Entity\DetailAnnonceSyntheseStrategique
  2035.      * @see \App\Repository\DetailAnnonceSyntheseStrategiqueRepository::detailSynthese()
  2036.      */
  2037.     public function detailSyntheseCapitalImmaterielByIdAnnonce($id_annonce$accesElite false) { // FONCTION POUR GERER L'ONGLET  dans detail annonce
  2038.         if (!$id_annonce) {
  2039.             throw new MissingMandatoryParams();
  2040.         }
  2041.         $result $this->em->getRepository(\App\Entity\DetailAnnonceSyntheseStrategique::class)->detailSynthese($id_annonce);
  2042.         if (!$result) {
  2043.             return NULL;
  2044.         }
  2045.         if ($accesElite) { // acces possible en illimite// acces offre elite //acces payant
  2046.               return $result;
  2047.         }
  2048.         if (!empty($result)) {
  2049.             $result["date_debut_consult_gratuite"] = (Utils::isValidDate($result["date_debut_consult_gratuite"])) ? Utils::getDateObjectFromFUSACQDate($result["date_debut_consult_gratuite"] . "000000") : NULL;
  2050.             $result["date_fin_consult_gratuite"] = (Utils::isValidDate($result["date_fin_consult_gratuite"])) ? Utils::getDateObjectFromFUSACQDate($result["date_fin_consult_gratuite"] . "235959") : NULL;
  2051.             $now Utils::now();
  2052.             if ($result["date_fin_consult_gratuite"] == null || $result["date_debut_consult_gratuite"] == null) {
  2053.                 return []; // acces non autorisé
  2054.             }
  2055.             if (Utils::compareDateTime($result["date_debut_consult_gratuite"], $now) == 1) { // date debut apres  aujourd'hui
  2056.                 return []; // acces non autorisé
  2057.             }
  2058.             if (Utils::compareDateTime($now$result["date_fin_consult_gratuite"]) == 1) { // aujourd'hui depasse la date fin
  2059.                 return []; // acces non autorisé
  2060.             }
  2061.             $result["consult_gratuite"] = true;
  2062.         }
  2063.         return $result;
  2064.     }
  2065.     
  2066.     public function isRare($id_secteur_activite) {
  2067.         $is_rare false;
  2068.         
  2069.         $secteur_activite $this->em->getRepository(SecteursActivite::class)->findOneBy(['idSecteurActivite' => $id_secteur_activite]);
  2070.         
  2071.         if ($secteur_activite) {
  2072.             $is_rare $secteur_activite->_get('rare');
  2073.         }
  2074.         
  2075.         return $is_rare;
  2076.     }
  2077.     
  2078.     public function isRecherche($id_secteur_activite) {
  2079.         $is_recherche false;
  2080.         
  2081.         $secteur_activite $this->em->getRepository(SecteursActivite::class)->findOneBy(['idSecteurActivite' => $id_secteur_activite]);
  2082.         
  2083.         if ($secteur_activite) {
  2084.             $is_recherche $secteur_activite->_get('recherche');
  2085.         }
  2086.         
  2087.         return $is_recherche;
  2088.     }
  2089.     
  2090.     // Indique si une annonce date de moins de 15 jours (date_parution comme référence)
  2091.     public function isAnnonceRecente($date_parution) {
  2092.         $date = \DateTime::createFromFormat("Ymd"$date_parution);
  2093.         $today = new \DateTime();
  2094.         
  2095.         $interval $today->diff($date);
  2096.         
  2097.         return $interval->days <= 15;
  2098.     }
  2099.     
  2100.     // Indique si une annonce est sous les radars (= en ligne depuis plus d'un mois et avec 0 contact)
  2101.     public function isAnnonceVendeurSousRadar($date_parution$id_annonce_vendeur) {
  2102.         $is_sous_radar false;
  2103.         
  2104.         $date = \DateTime::createFromFormat("Ymd"$date_parution);
  2105.         $today = new \DateTime();
  2106.         
  2107.         $interval $today->diff($date);
  2108.         
  2109.         if ($interval->days 30) {
  2110.             $ordered $this->em->getRepository(Commandes::class)->hasBeenOrdered($id_annonce_vendeur"vendeur");
  2111.             
  2112.             if (!$ordered) {
  2113.                 $is_sous_radar true;
  2114.             }
  2115.         }
  2116.         
  2117.         return $is_sous_radar;
  2118.     }
  2119. }