<?php
declare(strict_types=1);
/**
* @author Raymond
*/
namespace App\Services\ManagerEntity;
use App\Entity\{
AnnoncesVendeur,
AnnoncesAcheteur,
DetailsAnnoncePartenariat,
Utilisateur,
Favoris,
TranslateAnnonceVendeur,
TranslateAnnonceAcheteur,
Commandes
};
use App\Helper\PagesRedirection;
use App\Helper\Utils;
use App\Helper\Statistiques;
use App\Repository\{
LocalisationsRepository,
SecteursActiviteRepository
};
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\HttpFoundation\Request;
use App\Twig\TranslationExtension;
use App\Helper\DateProvider;
use Psr\Container\ContainerInterface;
use App\Entity\Localisations;
use App\Exception\MissingMandatoryParams;
use App\Entity\SecteursActivite;
class AnnoncesManagers {
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @var LocalisationsManagers
*/
private $lm;
/**
* @var string
*/
private $cdn_fusacq;
/**
* @var SecteursActiviteRepository
*/
private $secteursActiviteRepo;
/**
* @var LocalisationsRepository
*/
private $localisationsRepository;
/**
* @var TranslationExtension
*/
private $translationExtension;
/**
* @var ContainerInterface
*/
private $container;
/**
* @var string
*/
private $lang;
public const NB_ANNONCE_PAGINATION = 10;
public function __construct(EntityManagerInterface $em, LocalisationsManagers $lm, ContainerBagInterface $params, SecteursActiviteRepository $secteursActiviteRepo, LocalisationsRepository $localisationsRepository, TranslationExtension $translationExtension, ContainerInterface $container) {
$this->em = $em;
$this->lm = $lm;
$this->cdn_fusacq = $params->get('app.CDN')['CDN_FUSACQ'];
$this->directory_cache_txt = $params->get('directory_cache_txt');
$this->secteursActiviteRepo = $secteursActiviteRepo;
$this->localisationsRepository = $localisationsRepository;
$this->translationExtension = $translationExtension;
$this->container = $container;
$this->lang = "FR"; // Pour l'instant on met FR en dur
}
/**
* @return array
*/
public function getDernieresAnnoncesCessions($nb = 5, $mode = "entreprise", $lang = "FR", $id_pays = null) {
$annonces = $this->em->getRepository(AnnoncesVendeur::class)->donne_tableau_dernieres_annonces_vendeur($nb, $mode, $id_pays);
for ($i = 0; $i < count($annonces); $i++) {
$annonces[$i]['nom_localisation'] = $this->lm->getStringNomLocalisationById($annonces[$i]['id_region']);
$annonces[$i]['date_parution_initiale_formated'] = DateProvider::donne_format_jour_mois_by_YMD($annonces[$i]['date_parution_initiale']);
$annonces[$i]['date_fin_publique_elite_formated'] = "";
if ($mode=="entreprise_publique_elite"&&!empty( $annonces[$i]['date_fin_publique_elite'])) {
$annonces[$i]['date_fin_publique_elite_formated'] = DateProvider::donne_format_jour_mois_by_YMD($annonces[$i]['date_fin_publique_elite']);
}
$translation = $this->em->getRepository(AnnoncesVendeur::class)->getTranslationAnnonceVendeur($annonces[$i]['id_annonce_vendeur'], strtoupper($lang));
if ($translation) {
$annonces[$i]['titre_annonce'] = $translation->_get('titre_annonce');
}
$localisation = [];
if (null != $annonces[$i]['id_departement'] && preg_match('/[A-Za-z]/', $annonces[$i]['id_departement']) == 0 && substr($annonces[$i]['id_departement'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonces[$i]['id_departement']);
} elseif (null != $annonces[$i]['id_region'] && preg_match('/[A-Za-z]/', $annonces[$i]['id_region']) == 0 && substr($annonces[$i]['id_region'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonces[$i]['id_region']);
} elseif (null != $annonces[$i]['id_pays']) {
$localisation = $this->lm->getNomLocalisationById($annonces[$i]['id_pays']);
}
// Exception pour nom trop long
if ($annonces[$i]['id_region'] == "33_21") {
$annonces[$i]['nom_localisation'] = "PACA";
}
if ($localisation) {
$annonces[$i]['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonces[$i]['nom_localisation_slug'] = "localisation";
}
}
return $annonces;
}
/**
* @return array
*/
public function getDernieresAnnoncesAcquisitions($nb = 5, $mode = "entreprise", $from = null, $lang = "FR", $id_pays = null) {
$annonces = $this->em->getRepository(AnnoncesAcheteur::class)->donne_tableau_dernieres_annonces_acheteur($nb, $mode, $from, $id_pays);
for ($i = 0; $i < count($annonces); $i++) {
if (trim($annonces[$i]['id_region']) != "") {
$annonces[$i]['nom_localisation'] = $this->lm->getStringNomLocalisationById($annonces[$i]['id_region']);
} else {
$annonces[$i]['nom_localisation'] = $this->lm->getStringNomLocalisationById($annonces[$i]['id_pays']);
}
$annonces[$i]['date_parution_initiale_formated'] = DateProvider::donne_format_jour_mois_by_YMD($annonces[$i]['date_parution_initiale']);
$translation = $this->em->getRepository(AnnoncesAcheteur::class)->getTranslationAnnonceAcheteur($annonces[$i]['id_annonce_acheteur'], strtoupper($lang));
if ($translation) {
$annonces[$i]['titre_annonce'] = $translation->_get('titre_annonce');
}
$localisation = [];
if (null != $annonces[$i]['id_departement'] && preg_match('/[A-Za-z]/', $annonces[$i]['id_departement']) == 0 && substr($annonces[$i]['id_departement'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonces[$i]['id_departement']);
} elseif (null != $annonces[$i]['id_region'] && preg_match('/[A-Za-z]/', $annonces[$i]['id_region']) == 0 && substr($annonces[$i]['id_region'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonces[$i]['id_region']);
} elseif (null != $annonces[$i]['id_pays']) {
$localisation = $this->lm->getNomLocalisationById($annonces[$i]['id_pays']);
}
// Exception pour nom trop long
if ($annonces[$i]['id_region'] == "33_21") {
$annonces[$i]['nom_localisation'] = "PACA";
}
if ($localisation) {
$annonces[$i]['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonces[$i]['nom_localisation_slug'] = "localisation";
}
}
return $annonces;
}
/**
* @return \Knp\Component\Pager\Pagination\PaginationInterface
*/
public function getAnnoncesCessionList(Request $request, PaginatorInterface $paginator, array $filter = [], $mode = '', $login_utilisateur = null) {
$sql = $this->em->getRepository(AnnoncesVendeur::class)->donne_requete_SQL_pour_tableau_annonces_vendeur_page_en_cours($filter, $mode);
$params = $this->em->getRepository(AnnoncesVendeur::class)->prepareParameters($filter);
$query = $this->em->createQuery($sql);
$query->setParameters($params);
$annoncesCession = $paginator->paginate(
$query, // Requête contenant les données à paginer (ici nos annonces)
max(1, $request->query->getInt('page', 1)),// Numéro de la page en cours, passé dans l'URL, 1 si aucune page
10 // Nombre de résultats par page
);
$tab_annonces = [];
foreach ($annoncesCession as $annonce) {
// Si la langue n'est pas FR, on récupère la traduction
if ($annonce['id_langue'] != null && $annonce['id_langue'] != 'FR') {
$translate_annonce = $this->em->getRepository(TranslateAnnonceVendeur::class)->findOneBy(['id_annonce_vendeur' => $annonce['id_annonce_vendeur'], 'code_langue' => $this->lang]);
if ($translate_annonce) {
$annonce['titre_annonce'] = $translate_annonce->_get('titre_annonce');
}
}
if (isset($filter['type_recherche']) && 1 == $filter['type_recherche']) {
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution_initiale']);
} else {
if (empty($annonce['date_parution_initiale'])) {
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution_elite']);
}
else{
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution']);
}
}
// $annonce->_set('date_parution', $date_parution);
$annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
$id_pays = $annonce['id_pays'];
$id_region = $annonce['id_region'];
$id_departement = $annonce['id_departement'];
$zone_geographique = $annonce['zone_geographique'];
$nom_zone_geographique = null;
if (null != $id_region) {
if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $zone_geographique . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $zone_geographique . '.png';
} elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} else {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png';
} elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
}
} elseif (null != $id_pays) {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
}
$localisation = [];
if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0 && substr($id_departement, -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($id_departement);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0) {
// Si région confidentielle et qu'on a une zone geographique
if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
switch ($zone_geographique) {
case '33_99_99':
$nom_zone_geographique = "";
break;
case '33_99_15':
$nom_zone_geographique = "Sud-Ouest";
break;
case '33_99_12':
$nom_zone_geographique = "Nord-Ouest";
break;
case '33_99_11':
$nom_zone_geographique = "Nord";
break;
case '33_99_14':
$nom_zone_geographique = "Centre";
break;
case '33_99_13':
$nom_zone_geographique = "Nord-Est";
break;
case '33_99_16':
$nom_zone_geographique = "Sud-Est";
break;
default:
$nom_zone_geographique = "";
break;
}
if (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
if ($nom_zone_geographique != "") {
$nom_localisation = $nom_zone_geographique . ', ' . $localisation[0]['nom_localisation'];
} else {
$nom_localisation = $localisation[0]['nom_localisation'];
}
} else {
$nom_localisation = $nom_zone_geographique;
}
} else {
$localisation = $this->lm->getNomLocalisationById($id_region);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
}
} elseif (null != $id_pays) {
$nom_localisation = '';
$localisation = $this->lm->getNomLocalisationById($id_pays);
if (isset($localisation[0])) {
$nom_localisation = $localisation[0]['nom_localisation'];
}
}
$annonce['nom_localisation'] = $nom_localisation;
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
if ($nom_zone_geographique) {
$annonce['nom_zone_geographique'] = $nom_zone_geographique;
$annonce['nom_localisation_slug'] = Utils::slugify($nom_zone_geographique);
} else {
$annonce['nom_zone_geographique'] = null;
}
if (is_array($localisation)) {
foreach ($localisation as $niveau => $loc) {
$nom_niveau = 'nom_localisation_niveau_' . $niveau;
$id_niveau = 'id_localisation_niveau_' . $niveau;
$annonce[$nom_niveau] = $loc['nom_localisation'];
$annonce[$id_niveau] = $loc['id_localisation'];
}
}
if (!isset($annonce['nom_localisation_niveau_0'])) {
$annonce['nom_localisation_niveau_0'] = '';
$annonce['id_localisation_niveau_0'] = '';
}
if (!isset($annonce['nom_localisation_niveau_1'])) {
$annonce['nom_localisation_niveau_1'] = '';
$annonce['id_localisation_niveau_1'] = '';
}
if (!isset($annonce['nom_localisation_niveau_2'])) {
$annonce['nom_localisation_niveau_2'] = '';
$annonce['id_localisation_niveau_2'] = '';
}
$annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
$annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_vendeur'], "vendeur", $login_utilisateur);
// tag annonces
$annonce['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
$annonce['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
$annonce['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur", 15);
if (empty($annonce['date_parution'])) {
$annonce['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution_elite']);
$annonce['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution_elite'], $annonce['id_annonce_vendeur']);
}
else{
$annonce['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution']);
$annonce['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution'], $annonce['id_annonce_vendeur']);
}
$annonce['publique_elite'] = (isset($annonce['mode_annonce']) && $annonce['mode_annonce'] === 'publique_elite');
//$this->em->detach($annonce);
$tab_annonces[] = $annonce;
}
$annoncesCession->setItems($tab_annonces);
return $annoncesCession;
}
/**
* @param $filter
* @param $mode
* @param $page
* @param $element_index
* @return
*/
public function getIndexNAnnonceFromCessionList(array $filter = [], $mode = '', $page, $element_index) {
$index_in_list = ($page - 1) * self::NB_ANNONCE_PAGINATION + $element_index;
if ($page == 1 && $index_in_list == -1) {
return null;
}
$sql = $this->em->getRepository(AnnoncesVendeur::class)->donne_requete_SQL_pour_tableau_annonces_vendeur_page_en_cours($filter, $mode);
$params = $this->em->getRepository(AnnoncesVendeur::class)->prepareParameters($filter);
$query = $this->em->createQuery($sql);
$query->setParameters($params);
$query->setFirstResult(max(0, (int) $index_in_list));
$query->setMaxResults(1);
$annonce = $query->getOneOrNullResult();
if ($annonce) {
$localisation = [];
if (null != $annonce['id_departement'] && preg_match('/[A-Za-z]/', $annonce['id_departement']) == 0 && substr($annonce['id_departement'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonce['id_departement']);
} elseif (null != $annonce['id_region'] && preg_match('/[A-Za-z]/', $annonce['id_region']) == 0 && substr($annonce['id_region'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonce['id_region']);
} elseif (null != $annonce['id_pays']) {
$localisation = $this->lm->getNomLocalisationById($annonce['id_pays']);
}
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
}
return $annonce;
}
/**
* @return array $annonces
*/
public function getAnnoncesPrioritairesCession(array $filter = [], $mode = '', $login_utilisateur = null) {
$annonces_prioritaires = $this->em->getRepository(AnnoncesVendeur::class)->donne_tableau_dernieres_annonces_vendeur_prioritaire($filter, $mode);
$tab_annonces = [];
foreach ($annonces_prioritaires as $annonce) {
if (isset($filter['type_recherche']) && 1 == $filter['type_recherche']) {
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution_initiale']);
} else {
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution']);
}
// $annonce->_set('date_parution', $date_parution);
$annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
$id_pays = $annonce['id_pays'];
$id_region = $annonce['id_region'];
$id_departement = $annonce['id_departement'];
$zone_geographique = $annonce['zone_geographique'];
$nom_zone_geographique = null;
if (null != $id_region) {
if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $zone_geographique . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $zone_geographique . '.png';
} elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} else {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png';
} elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
}
} elseif (null != $id_pays) {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
}
$localisation = [];
if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0 && substr($id_departement, -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($id_departement);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0) {
// Si région confidentielle et qu'on a une zone geographique
if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
switch ($zone_geographique) {
case '33_99_99':
$nom_zone_geographique = "";
break;
case '33_99_15':
$nom_zone_geographique = "Sud-Ouest";
break;
case '33_99_12':
$nom_zone_geographique = "Nord-Ouest";
break;
case '33_99_11':
$nom_zone_geographique = "Nord";
break;
case '33_99_14':
$nom_zone_geographique = "Centre";
break;
case '33_99_13':
$nom_zone_geographique = "Nord-Est";
break;
case '33_99_16':
$nom_zone_geographique = "Sud-Est";
break;
default:
$nom_zone_geographique = "";
break;
}
if (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
if ($nom_zone_geographique != "") {
$nom_localisation = $nom_zone_geographique . ', ' . $localisation[0]['nom_localisation'];
} else {
$nom_localisation = $localisation[0]['nom_localisation'];
}
} else {
$nom_localisation = $nom_zone_geographique;
}
} else {
$localisation = $this->lm->getNomLocalisationById($id_region);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
}
} elseif (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
$nom_localisation = $localisation[0]['nom_localisation'];
}
$annonce['nom_localisation'] = $nom_localisation;
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
if ($nom_zone_geographique) {
$annonce['nom_zone_geographique'] = $nom_zone_geographique;
$annonce['nom_localisation_slug'] = Utils::slugify($nom_zone_geographique);
} else {
$annonce['nom_zone_geographique'] = null;
}
foreach ($localisation as $niveau => $loc) {
$nom_niveau = 'nom_localisation_niveau_' . $niveau;
$id_niveau = 'id_localisation_niveau_' . $niveau;
$annonce[$nom_niveau] = $loc['nom_localisation'];
$annonce[$id_niveau] = $loc['id_localisation'];
}
if (!isset($annonce['nom_localisation_niveau_0'])) {
$annonce['nom_localisation_niveau_0'] = '';
$annonce['id_localisation_niveau_0'] = '';
}
if (!isset($annonce['nom_localisation_niveau_1'])) {
$annonce['nom_localisation_niveau_1'] = '';
$annonce['id_localisation_niveau_1'] = '';
}
if (!isset($annonce['nom_localisation_niveau_2'])) {
$annonce['nom_localisation_niveau_2'] = '';
$annonce['id_localisation_niveau_2'] = '';
}
$annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
$annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_vendeur'], "vendeur", $login_utilisateur);
$annonce['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
$annonce['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
$annonce['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur", 15);
$annonce['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution']);
$annonce['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution'], $annonce['id_annonce_vendeur']);
$annonce['publique_elite'] = (isset($annonce['mode_annonce']) && $annonce['mode_annonce'] === 'publique_elite');
$tab_annonces[] = $annonce;
//$this->em->detach($annonce);
}
//return $annonces_prioritaires;
return $tab_annonces;
}
/**
* @return array $annonces
*/
public function getAnnoncesPrioritairesAcquisition(array $filter = [], $mode = '', $login_utilisateur = null) {
$annonces_prioritaires = $this->em->getRepository(AnnoncesAcheteur::class)->donne_tableau_dernieres_annonces_acheteur_prioritaire($filter, $mode);
$tab_annonces = [];
foreach ($annonces_prioritaires as $annonce) {
if (isset($filter['type_recherche']) && 1 == $filter['type_recherche']) {
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution_initiale']);
} else {
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution']);
}
// $annonce['_set('date_parution', $date_parution);
$annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
$id_pays = $annonce['id_pays'];
$id_region = $annonce['id_region'];
$id_departement = $annonce['id_departement'];
// if (null != $id_region) {
// if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png')) {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png';
// /* // Si le département n'est pas confidentiel, on affiche la carte de la région
// if (substr($id_departement, -3) != "_99") {
// $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_region.".png";
// } else {
// // Sinon on regarde si la carte confidentielle existe pour ce pays, si oui on l'affiche
// if (Utils::url_exists($this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_99.png")) {
// $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_99.png";
// } else {
// $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_blanc.png";
// }
// } */
// } elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
// } else {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
// }
// } elseif (null != $id_pays) {
// if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
// } else {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
// }
// }
$localisation = [];
if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0 && substr($id_departement, -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($id_departement);
} elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0 && substr($id_region, -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($id_region);
} elseif (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
}
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
// On concatene toutes les loc recherchees
$idLocalisationsRecherchees = $annonce['autres_localisations'];
if ($id_departement) {
$idLocalisationsRecherchees .= "," . $id_departement;
} elseif ($id_region) {
$idLocalisationsRecherchees .= "," . $id_region;
} elseif ($id_pays) {
$idLocalisationsRecherchees .= "," . $id_pays;
}
$idLocalisations = array_filter(explode(',', $idLocalisationsRecherchees));
$annonce['cartes']['id_localisation_by_country'] = [];
foreach ($idLocalisations as $idLocalisation) {
// Si ce n'est pas un département confidentiel
if (strpos($idLocalisation, '_99') === false || substr_count($idLocalisation, "_") < 2) {
if (!in_array(Utils::getIdPaysFromIdLocalisation($idLocalisation), array_keys($annonce['cartes']['id_localisation_by_country']))) {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = '';
}
if (!in_array($idLocalisation, $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)])) {
if ((string) $idLocalisation !== Utils::getIdPaysFromIdLocalisation($idLocalisation)) {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation;
} else {
$nbRegions = (int) $this->lm->getCountRegionsByCountry($idLocalisation);
$x = 1;
do {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation . '_' . str_pad((string) $x, 2, '0', STR_PAD_LEFT);
++$x;
} while ($x <= $nbRegions);
}
}
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)] = array_filter(
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)]
);
} else {
// Récupération du pays
$idPays = Utils::getIdPaysFromIdLocalisation($idLocalisation);
// Récupération de la région parente (ex: 33_01_99 → 33_01)
$idRegion = substr($idLocalisation, 0, strrpos($idLocalisation, '_'));
// Initialisation du tableau pays si nécessaire
if (!isset($annonce['cartes']['id_localisation_by_country'][$idPays])) {
$annonce['cartes']['id_localisation_by_country'][$idPays] = [];
}
// On ajoute la région si elle n'existe pas déjà
if (!in_array($idRegion, $annonce['cartes']['id_localisation_by_country'][$idPays], true)) {
$annonce['cartes']['id_localisation_by_country'][$idPays][] = $idRegion;
}
// Nettoyage
$annonce['cartes']['id_localisation_by_country'][$idPays] = array_filter(
$annonce['cartes']['id_localisation_by_country'][$idPays]
);
}
}
/* if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0) {
$localisation = $this->lm->getNomLocalisationById($id_departement);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'].', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0) {
$localisation = $this->lm->getNomLocalisationById($id_region);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'].', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
$nom_localisation = $localisation[0]['nom_localisation'];
}
$annonce['nom_localisation'] = $nom_localisation; */
$annonce['localisations'] = $this->getLocalisationsWithUrlAnnonceAcheteur($annonce);
//dd($annonce);
/* foreach ($localisation as $niveau => $loc) {
$nom_niveau = 'nom_localisation_niveau_'.$niveau;
$id_niveau = 'id_localisation_niveau_'.$niveau;
$annonce[$nom_niveau] = $loc['nom_localisation'];
$annonce[$id_niveau] = $loc['id_localisation'];
} */
if (!isset($annonce['nom_localisation_niveau_0'])) {
$annonce['nom_localisation_niveau_0'] = '';
$annonce['id_localisation_niveau_0'] = '';
}
if (!isset($annonce['nom_localisation_niveau_1'])) {
$annonce['nom_localisation_niveau_1'] = '';
$annonce['id_localisation_niveau_1'] = '';
}
if (!isset($annonce['nom_localisation_niveau_2'])) {
$annonce['nom_localisation_niveau_2'] = '';
$annonce['id_localisation_niveau_2'] = '';
}
$annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
$annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_acheteur'], "acheteur", $login_utilisateur);
$tab_annonces[] = $annonce;
//$this->em->detach($annonce);
}
return $tab_annonces;
}
/**
* @return \Knp\Component\Pager\Pagination\PaginationInterface
*/
public function getAnnoncesAcquisitionList(Request $request, PaginatorInterface $paginator, array $filter = [], $mode = 'entreprise', $login_utilisateur = null) {
$sql = $this->em->getRepository(AnnoncesAcheteur::class)->donne_requete_SQL_pour_tableau_annonces_acheteur_page_en_cours($filter, $mode);
$params = $this->em->getRepository(AnnoncesAcheteur::class)->prepareParameters($filter);
$query = $this->em->createQuery($sql);
$query->setParameters($params);
$annoncesAcquisition = $paginator->paginate(
$query, // Requête contenant les données à paginer (ici nos annonces)
max(1, $request->query->getInt('page', 1)), // Numéro de la page en cours, passé dans l'URL, 1 si aucune page
10 // Nombre de résultats par page
);
$tab_annonces = [];
foreach ($annoncesAcquisition as $annonce) {
// Si la langue n'est pas FR, on récupère la traduction
if ($annonce['id_langue'] != null && $annonce['id_langue'] != 'FR') {
$translate_annonce = $this->em->getRepository(TranslateAnnonceAcheteur::class)->findOneBy(['id_annonce_acheteur' => $annonce['id_annonce_acheteur'], 'code_langue' => $this->lang]);
if ($translate_annonce) {
$annonce['titre_annonce'] = $translate_annonce->_get('titre_annonce');
}
}
if (isset($filter['type_recherche']) && 1 == $filter['type_recherche']) {
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution_initiale']);
} else {
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution']);
}
// $annonce['_set('date_parution', $date_parution);
$annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
$id_pays = $annonce['id_pays'];
$id_region = $annonce['id_region'];
$id_departement = $annonce['id_departement'];
// if (null != $id_region) {
// if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png')) {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png';
// /* // Si le département n'est pas confidentiel, on affiche la carte de la région
// if (substr($id_departement, -3) != "_99") {
// $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_region.".png";
// } else {
// // Sinon on regarde si la carte confidentielle existe pour ce pays, si oui on l'affiche
// if (Utils::url_exists($this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_99.png")) {
// $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_99.png";
// } else {
// $annonce['carte'] = $this->dns_pdc."/images/cartes/pays/".$id_pays."/".$id_pays."_blanc.png";
// }
// } */
// } elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
// } else {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
// }
// } elseif (null != $id_pays) {
// if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
// } else {
// $annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
// }
// }
$localisation = [];
if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0 && substr($id_departement, -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($id_departement);
} elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0 && substr($id_region, -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($id_region);
} elseif (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
}
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
// On concatene toutes les loc recherchees
$idLocalisationsRecherchees = $annonce['autres_localisations'];
if ($id_departement) {
$idLocalisationsRecherchees .= "," . $id_departement;
} elseif ($id_region) {
$idLocalisationsRecherchees .= "," . $id_region;
} elseif ($id_pays) {
$idLocalisationsRecherchees .= "," . $id_pays;
}
$idLocalisations = array_filter(explode(',', $idLocalisationsRecherchees));
$annonce['cartes']['id_localisation_by_country'] = [];
foreach ($idLocalisations as $idLocalisation) {
// Si ce n'est pas un département confidentiel
if (strpos($idLocalisation, '_99') === false || substr_count($idLocalisation, "_") < 2) {
if (!in_array(Utils::getIdPaysFromIdLocalisation($idLocalisation), array_keys($annonce['cartes']['id_localisation_by_country']))) {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = '';
}
if (!in_array($idLocalisation, $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)])) {
if ((string) $idLocalisation !== Utils::getIdPaysFromIdLocalisation($idLocalisation)) {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation;
} else {
$nbRegions = (int) $this->lm->getCountRegionsByCountry($idLocalisation);
$x = 1;
do {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation . '_' . str_pad((string) $x, 2, '0', STR_PAD_LEFT);
++$x;
} while ($x <= $nbRegions);
}
}
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)] = array_filter(
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)]
);
} else {
// Récupération du pays
$idPays = Utils::getIdPaysFromIdLocalisation($idLocalisation);
// Récupération de la région parente (ex: 33_01_99 → 33_01)
$idRegion = substr($idLocalisation, 0, strrpos($idLocalisation, '_'));
// Initialisation du tableau pays si nécessaire
if (!isset($annonce['cartes']['id_localisation_by_country'][$idPays])) {
$annonce['cartes']['id_localisation_by_country'][$idPays] = [];
}
// On ajoute la région si elle n'existe pas déjà
if (!in_array($idRegion, $annonce['cartes']['id_localisation_by_country'][$idPays], true)) {
$annonce['cartes']['id_localisation_by_country'][$idPays][] = $idRegion;
}
// Nettoyage
$annonce['cartes']['id_localisation_by_country'][$idPays] = array_filter(
$annonce['cartes']['id_localisation_by_country'][$idPays]
);
}
}
/* if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0) {
$localisation = $this->lm->getNomLocalisationById($id_departement);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'].', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0) {
$localisation = $this->lm->getNomLocalisationById($id_region);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'].', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
$nom_localisation = $localisation[0]['nom_localisation'];
}
$annonce['nom_localisation'] = $nom_localisation; */
$annonce['localisations'] = $this->getLocalisationsWithUrlAnnonceAcheteur($annonce);
/* foreach ($localisation as $niveau => $loc) {
$nom_niveau = 'nom_localisation_niveau_'.$niveau;
$id_niveau = 'id_localisation_niveau_'.$niveau;
$annonce[$nom_niveau] = $loc['nom_localisation'];
$annonce[$id_niveau] = $loc['id_localisation'];
} */
if (!isset($annonce['nom_localisation_niveau_0'])) {
$annonce['nom_localisation_niveau_0'] = '';
$annonce['id_localisation_niveau_0'] = '';
}
if (!isset($annonce['nom_localisation_niveau_1'])) {
$annonce['nom_localisation_niveau_1'] = '';
$annonce['id_localisation_niveau_1'] = '';
}
if (!isset($annonce['nom_localisation_niveau_2'])) {
$annonce['nom_localisation_niveau_2'] = '';
$annonce['id_localisation_niveau_2'] = '';
}
$annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
$annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_acheteur'], "acheteur", $login_utilisateur);
$tab_annonces[] = $annonce;
//$this->em->detach($annonce);
}
$annoncesAcquisition->setItems($tab_annonces);
return $annoncesAcquisition;
}
/**
* @param $filter
* @param $mode
* @param $page
* @param $element_index
* @return
*/
public function getIndexNAnnonceAcquisitionList(array $filter = [], $mode = 'entreprise', $page, $element_index) {
$index_in_list = ($page - 1) * self::NB_ANNONCE_PAGINATION + $element_index;
if ($page == 1 && $index_in_list == -1) {
return null;
}
$sql = $this->em->getRepository(AnnoncesAcheteur::class)->donne_requete_SQL_pour_tableau_annonces_acheteur_page_en_cours($filter, $mode);
$params = $this->em->getRepository(AnnoncesAcheteur::class)->prepareParameters($filter);
$query = $this->em->createQuery($sql);
$query->setParameters($params);
$query->setFirstResult(max(0, (int) $index_in_list));
$query->setMaxResults(1);
$annonce = $query->getOneOrNullResult();
if ($annonce) {
$localisation = [];
if (null != $annonce['id_departement'] && preg_match('/[A-Za-z]/', $annonce['id_departement']) == 0 && substr($annonce['id_departement'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonce['id_departement']);
} elseif (null != $annonce['id_region'] && preg_match('/[A-Za-z]/', $annonce['id_region']) == 0 && substr($annonce['id_region'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonce['id_region']);
} elseif (null != $annonce['id_pays']) {
$localisation = $this->lm->getNomLocalisationById($annonce['id_pays']);
}
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
}
return $annonce;
}
/**
* @return array $annonces
*/
public function getShortVersionAnnoncesPrioritairesCessionEntreprise(array $filter = [], $lang = "fr", $login_utilisateur = null) {
$annonces_prioritaires = $this->getAnnoncesPrioritairesCession($filter, "", $login_utilisateur);
$results = [];
$arrayVarsTrans = [
'type_annonce' => 'V',
'id_annonce' => ''
];
foreach ($annonces_prioritaires as $annonce) {
$row = [];
$row['id_annonce_vendeur'] = $annonce['id_annonce_vendeur'];
$row['titre_annonce'] = $annonce['titre_annonce'];
$row['date_parution'] = $annonce['date_parution'];
$row['date_parution_formated'] = $annonce['date_parution_formated'];
$row['date_parution_initiale'] = $annonce['date_parution_initiale'];
$row['ca_n'] = number_format((float) $annonce['ca_n'], 0, '', ' ');
$row['nom_localisation'] = $annonce['nom_localisation'];
$row['nom_localisation_slug'] = $annonce['nom_localisation_slug'];
$row['carte'] = $annonce['carte'];
$row['slug'] = Utils::slugify($annonce['titre_annonce']);
$row['etat'] = isset($annonce['etat']) ? $annonce['etat'] : "";
$row['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
$row['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
$row['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur", 15);
$row['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution']);
$row['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution'], $annonce['id_annonce_vendeur']);
// filtres liées à la recherche par profil ELITE
if(!empty($annonce['identifiant_profil'])){
$row['identifiant_profil']=$annonce['identifiant_profil'];
}
if(!empty($annonce['raison'])){
$row['raison']=$annonce['raison'];
}
if(!empty($annonce['pourcentage_matching'])){
$row['pourcentage_matching']=$annonce['pourcentage_matching'];
} // filtres liées à la recherche par profil ELITE
$arrayVarsTrans['id_annonce'] = $annonce['id_annonce_vendeur'];
$row['titre_modal'] = $this->translationExtension->translate('vous souhaitez envoyer</br>l\'annonce %$type_annonce%$%$id_annonce%$ a un ami', $lang, "", "M", "", $arrayVarsTrans);
$row['is_favoris'] = $annonce['is_favoris'];
if(!empty($annonce['identifiant_profil'])){
$row['identifiant_profil'] = $annonce['identifiant_profil']??NULL;
$row['pourcentage_matching'] = $annonce['pourcentage_matching']??NULL;
$row['raison'] = $annonce['raison']??NULL;
}
$results[] = $row;
}
return $results;
}
/**
* @return array $annonces
*/
public function getShortVersionAnnoncesPrioritairesCessionActif(array $filter = [], $lang = "fr", $login_utilisateur = null) {
$annonces_prioritaires = $this->getAnnoncesPrioritairesCession($filter, 'actif', $login_utilisateur);
$results = [];
$arrayVarsTrans = [
'type_annonce' => 'V',
'id_annonce' => ''
];
foreach ($annonces_prioritaires as $annonce) {
$row = [];
$row['id_annonce_vendeur'] = $annonce['id_annonce_vendeur'];
$row['titre_annonce'] = $annonce['titre_annonce'];
$row['date_parution'] = $annonce['date_parution'];
$row['date_parution_formated'] = $annonce['date_parution_formated'];
$row['date_parution_initiale'] = $annonce['date_parution_initiale'];
$row['ca_n'] = number_format((float) $annonce['ca_n'], 0, '', ' ');
$row['nom_localisation'] = $annonce['nom_localisation'];
$row['nom_localisation_slug'] = $annonce['nom_localisation_slug'];
$row['carte'] = $annonce['carte'];
$row['slug'] = Utils::slugify($annonce['titre_annonce']);
$row['etat'] = isset($annonce['etat']) ? $annonce['etat'] : "";
$row['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
$row['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
$row['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur", 15);
$row['annonce_recente'] = $this->isAnnonceRecente($annonce['date_parution']);
$row['sous_radar'] = $this->isAnnonceVendeurSousRadar($annonce['date_parution'], $annonce['id_annonce_vendeur']);
$arrayVarsTrans['id_annonce'] = $annonce['id_annonce_vendeur'];
$row['titre_modal'] = $this->translationExtension->translate('vous souhaitez envoyer</br>l\'annonce %$type_annonce%$%$id_annonce%$ a un ami', $lang, "", "M", "", $arrayVarsTrans);
$row['is_favoris'] = $annonce['is_favoris'];
$results[] = $row;
}
return $results;
}
/**
* @return array $annonces
*/
public function getShortVersionAnnoncesPrioritairesAcquisition(array $filter = [], $lang = "fr", $login_utilisateur = null) {
$annonces_prioritaires = $this->getAnnoncesPrioritairesAcquisition($filter, '', $login_utilisateur);
//dd($annonces_prioritaires);
$results = [];
$arrayVarsTrans = [
'type_annonce' => 'A',
'id_annonce' => ''
];
foreach ($annonces_prioritaires as $annonce) {
$row = [];
$row['id_annonce_acheteur'] = $annonce['id_annonce_acheteur'];
$row['titre_annonce'] = $annonce['titre_annonce'];
$row['date_parution'] = $annonce['date_parution'];
$row['date_parution_formated'] = $annonce['date_parution_formated'];
$row['date_parution_initiale'] = $annonce['date_parution_initiale'];
$row['ca_max'] = number_format((float) $annonce['ca_max'], 0, '', ' ');
$row['apport_perso_repreneur'] = number_format((float) $annonce['apport_perso_repreneur'], 0, '', ' ');
$nom_localisation = "";
foreach ($annonce['localisations'] as $loc) {
$nom_localisation .= $loc['nom_localisation'] . ", ";
}
$nom_localisation = substr($nom_localisation, 0, -2);
$row['nom_localisation'] = $nom_localisation;
$row['nom_localisation_slug'] = $annonce['nom_localisation_slug'];
$row['cartes'] = $annonce['cartes'];
$row['slug'] = Utils::slugify($annonce['titre_annonce']);
$row['type_acquereur'] = $annonce['type_acquereur'];
$row['etat'] = isset($annonce['etat']) ? $annonce['etat'] : "";
$arrayVarsTrans['id_annonce'] = $annonce['id_annonce_acheteur'];
$row['titre_modal'] = $this->translationExtension->translate('vous souhaitez envoyer</br>l\'annonce %$type_annonce%$%$id_annonce%$ a un ami', $lang, "", "M", "", $arrayVarsTrans);
$row['is_favoris'] = $annonce['is_favoris'];
$results[] = $row;
}
return $results;
}
/**
* @param int $idAnnonce
*
* @return AnnoncesVendeur $annonce
*/
public function getAnnonceVendeurById($idAnnonce, $login_utilisateur = null, $publique = true) {
//$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $idAnnonce]);
$sql = $this->em->getRepository(AnnoncesVendeur::class)->donne_requete_SQL_pour_annonce_vendeur($idAnnonce, $publique);
$query = $this->em->createQuery($sql);
//$annonce = $query->getSingleResult();
$annonce = $query->getResult() ? $query->getResult()[0] : null;
if (isset($annonce)) {
// Si la langue n'est pas FR, on récupère la traduction
if ($annonce['id_langue'] != null && $annonce['id_langue'] != 'FR') {
$translate_annonce = $this->em->getRepository(TranslateAnnonceVendeur::class)->findOneBy(['id_annonce_vendeur' => $idAnnonce, 'code_langue' => $this->lang]);
if ($translate_annonce) {
$annonce['titre_annonce'] = $translate_annonce->_get('titre_annonce');
$annonce['description_activite'] = $translate_annonce->_get('description_activite');
$annonce['commentaires'] = $translate_annonce->_get('commentaires');
$annonce['mots_cle_recherche'] = $translate_annonce->_get('mots_cle_recherche');
$annonce['mots_cles'] = $translate_annonce->_get('mots_cles');
$annonce['points_forts'] = $translate_annonce->_get('points_forts');
$annonce['points_faibles'] = $translate_annonce->_get('points_faibles');
$annonce['raison_cession'] = $translate_annonce->_get('raison_cession');
$annonce['concurrence'] = $translate_annonce->_get('concurrence');
$annonce['positionnement_marche'] = $translate_annonce->_get('positionnement_marche');
$annonce['elements_complementaires'] = $translate_annonce->_get('elements_complementaires');
$annonce['profil_repreneur_recherche'] = $translate_annonce->_get('profil_repreneur_recherche');
}
}
if ( $annonce['mode_annonce']=="publique_elite" ) {
if (empty( $annonce['date_parution_elite'])) {
$annonce['date_parution_elite'] = $annonce['date_parution'];
}
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution_elite']);
// $annonce->_set('date_parution', $date_parution);
$annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
$date_parution_string = $annonce['date_parution_elite'];
}
else{
$date_parution = \DateTime::createFromFormat('Ymd', $annonce['date_parution']);
// $annonce->_set('date_parution', $date_parution);
$annonce['date_parution_formated'] = $date_parution->format('d/m/Y');
$date_parution_string = $annonce['date_parution'];
}
$id_pays = $annonce['id_pays'];
$id_region = $annonce['id_region'];
$id_departement = $annonce['id_departement'];
$zone_geographique = $annonce['zone_geographique'];
$nom_zone_geographique = null;
if (null != $id_region) {
if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $zone_geographique . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $zone_geographique . '.png';
} elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} else {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_region . '.png';
} elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
}
} elseif (null != $id_pays) {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$annonce['carte'] = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
}
if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0) {
$localisation = $this->lm->getNomLocalisationById($id_departement);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0) {
// Si région confidentielle et qu'on a une zone geographique
if (substr($id_region, -3) == "_99" && null != $zone_geographique) {
switch ($zone_geographique) {
case '33_99_99':
$nom_zone_geographique = "";
break;
case '33_99_15':
$nom_zone_geographique = "Sud-Ouest";
break;
case '33_99_12':
$nom_zone_geographique = "Nord-Ouest";
break;
case '33_99_11':
$nom_zone_geographique = "Nord";
break;
case '33_99_14':
$nom_zone_geographique = "Centre";
break;
case '33_99_13':
$nom_zone_geographique = "Nord-Est";
break;
case '33_99_16':
$nom_zone_geographique = "Sud-Est";
break;
default:
$nom_zone_geographique = "";
break;
}
if (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
if ($nom_zone_geographique != "") {
$nom_localisation = $nom_zone_geographique . ', ' . $localisation[0]['nom_localisation'];
} else {
$nom_localisation = $localisation[0]['nom_localisation'];
}
} else {
$nom_localisation = $nom_zone_geographique;
}
} else {
$localisation = $this->lm->getNomLocalisationById($id_region);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
}
} elseif (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
$nom_localisation = $localisation[0]['nom_localisation'];
}
$annonce['nom_localisation'] = $nom_localisation;
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
if ($nom_zone_geographique) {
$annonce['nom_zone_geographique'] = $nom_zone_geographique;
$annonce['nom_localisation_slug'] = Utils::slugify($nom_zone_geographique);
} else {
$annonce['nom_zone_geographique'] = null;
}
foreach ($localisation as $niveau => $loc) {
$nom_niveau = 'nom_localisation_niveau_' . $niveau;
$id_niveau = 'id_localisation_niveau_' . $niveau;
$annonce[$nom_niveau] = $loc['nom_localisation'];
$annonce[$id_niveau] = $loc['id_localisation'];
}
if (!isset($annonce['nom_localisation_niveau_0'])) {
$annonce['nom_localisation_niveau_0'] = '';
$annonce['id_localisation_niveau_0'] = '';
}
if (!isset($annonce['nom_localisation_niveau_1'])) {
$annonce['nom_localisation_niveau_1'] = '';
$annonce['id_localisation_niveau_1'] = '';
}
if (!isset($annonce['nom_localisation_niveau_2'])) {
$annonce['nom_localisation_niveau_2'] = '';
$annonce['id_localisation_niveau_2'] = '';
}
$annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
$annonce = $this->affectation_nom_secteur_activite($annonce, "vendeur");
$annonce['tab_fil_ariane'] = $this->donne_tab_liens_noms_fil_arianne($annonce, "vendeur");
$annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_vendeur'], "vendeur", $login_utilisateur);
// tag annonces
$annonce['is_rare'] = $this->isRare($annonce['id_secteur_activite']);
$annonce['is_recherche'] = $this->isRecherche($annonce['id_secteur_activite']);
$annonce['contact_recent'] = $this->em->getRepository(Commandes::class)->hasBeenOrderedWithinThePastXDays($annonce['id_annonce_vendeur'], "vendeur", 15);
$annonce['annonce_recente'] = $this->isAnnonceRecente($date_parution_string);
$annonce['sous_radar'] = $this->isAnnonceVendeurSousRadar($date_parution_string, $annonce['id_annonce_vendeur']);
//$this->em->detach($annonce);
return $annonce;
} else {
return null;
}
}
/**
* @param int $idAnnonce
*
* @return AnnoncesAcheteur $annonce
*/
public function getAnnonceAcheteurById($idAnnonce, $login_utilisateur = null, $from = "acheteur", $publique = true) {
//$annonce = $this->em->getRepository(AnnoncesAcheteur::class)->findOneBy(['id_annonce_acheteur' => $idAnnonce]);
$sql = $this->em->getRepository(AnnoncesAcheteur::class)->donne_requete_SQL_pour_annonce_acheteur($idAnnonce, $publique);
$query = $this->em->createQuery($sql);
$annonce = $query->getOneOrNullResult();
if (isset($annonce)) {
// Si la langue n'est pas FR, on récupère la traduction
if ($annonce['id_langue'] != null && $annonce['id_langue'] != 'FR') {
$translate_annonce = $this->em->getRepository(TranslateAnnonceAcheteur::class)->findOneBy(['id_annonce_acheteur' => $idAnnonce, 'code_langue' => $this->lang]);
if ($translate_annonce) {
$annonce['titre_annonce'] = $translate_annonce->_get('titre_annonce');
$annonce['description_activite'] = $translate_annonce->_get('description_activite');
$annonce['commentaires'] = $translate_annonce->_get('commentaires');
$annonce['mots_cle_recherche'] = $translate_annonce->_get('mots_cle_recherche');
$annonce['mots_cles'] = $translate_annonce->_get('mots_cles');
$annonce['description_activite_societe'] = $translate_annonce->_get('description_activite_societe');
$annonce['raison_achat'] = $translate_annonce->_get('raison_achat');
$annonce['elements_complementaires'] = $translate_annonce->_get('elements_complementaires');
}
}
//$annonce['carte'] = $this->getImgCarteAnnonceAcheteur($annonce);
$id_pays = $annonce['id_pays'];
$id_region = $annonce['id_region'];
$id_departement = $annonce['id_departement'];
if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0) {
$localisation = $this->lm->getNomLocalisationById($id_departement);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0) {
$localisation = $this->lm->getNomLocalisationById($id_region);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'] . ', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
$nom_localisation = $localisation[0]['nom_localisation'];
}
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
// On concatene toutes les loc recherchees
$idLocalisationsRecherchees = $annonce['autres_localisations'];
if ($id_departement) {
$idLocalisationsRecherchees .= "," . $id_departement;
} elseif ($id_region) {
$idLocalisationsRecherchees .= "," . $id_region;
} elseif ($id_pays) {
$idLocalisationsRecherchees .= "," . $id_pays;
}
$idLocalisations = array_filter(explode(',', $idLocalisationsRecherchees));
$annonce['cartes']['id_localisation_by_country'] = [];
foreach ($idLocalisations as $idLocalisation) {
// Si ce n'est pas un département confidentiel
if (strpos($idLocalisation, '_99') === false || substr_count($idLocalisation, "_") < 2) {
if (!in_array(Utils::getIdPaysFromIdLocalisation($idLocalisation), array_keys($annonce['cartes']['id_localisation_by_country']))) {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = '';
}
if (!in_array($idLocalisation, $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)])) {
if ((string) $idLocalisation !== Utils::getIdPaysFromIdLocalisation($idLocalisation)) {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation;
} else {
$nbRegions = (int) $this->lm->getCountRegionsByCountry($idLocalisation);
$x = 1;
do {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation . '_' . str_pad((string) $x, 2, '0', STR_PAD_LEFT);
++$x;
} while ($x <= $nbRegions);
}
}
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)] = array_filter(
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)]
);
} else {
// Récupération du pays
$idPays = Utils::getIdPaysFromIdLocalisation($idLocalisation);
// Récupération de la région parente (ex: 33_01_99 → 33_01)
$idRegion = substr($idLocalisation, 0, strrpos($idLocalisation, '_'));
// Initialisation du tableau pays si nécessaire
if (!isset($annonce['cartes']['id_localisation_by_country'][$idPays])) {
$annonce['cartes']['id_localisation_by_country'][$idPays] = [];
}
// On ajoute la région si elle n'existe pas déjà
if (!in_array($idRegion, $annonce['cartes']['id_localisation_by_country'][$idPays], true)) {
$annonce['cartes']['id_localisation_by_country'][$idPays][] = $idRegion;
}
// Nettoyage
$annonce['cartes']['id_localisation_by_country'][$idPays] = array_filter(
$annonce['cartes']['id_localisation_by_country'][$idPays]
);
}
}
$localisations = $this->getLocalisationsWithUrlAnnonceAcheteur($annonce, $from);
$annonce['localisations'] = $localisations;
$nom_localisation = "";
foreach ($localisations as $loc) {
$nom_localisation .= $loc['nom_localisation'] . ', ';
}
$annonce['nom_localisation'] = substr($nom_localisation, 0, -2);
$annonce['date_parution_object'] = Utils::getDateObjectFromFUSACQDate($annonce['date_parution']);
$annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
if ($from && $from == "ouvrir-capital") {
$annonce = $this->affectation_nom_secteur_activite($annonce, "acquereur_investisseur");
} else {
$annonce = $this->affectation_nom_secteur_activite($annonce, "acheteur");
}
$annonce['tab_fil_ariane'] = $this->donne_tab_liens_noms_fil_arianne($annonce, $from);
$annonce['profil_deposant'] = $this->affectation_property_profil_deposant($annonce['login_utilisateur']);
$annonce['ca_min_formated'] = null !== $annonce['ca_min'] ? substr($annonce['ca_min'], 0, strpos($annonce['ca_min'], '.')) : null;
$annonce['ca_max_formated'] = null !== $annonce['ca_max'] ? substr($annonce['ca_max'], 0, strpos($annonce['ca_max'], '.')) : null;
$annonce['ca_societe_formated'] = null !== $annonce['ca_societe'] ? substr($annonce['ca_societe'], 0, strpos($annonce['ca_societe'], '.')) : null;
$annonce['res_net_societe_formated'] = null !== $annonce['res_net_societe'] ? substr($annonce['res_net_societe'], 0, strpos($annonce['res_net_societe'], '.')) : null;
$annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_acheteur'], "acheteur", $login_utilisateur);
if ($annonce['annee_naissance_repreneur'] != "") {
$annonce['age_repreneur'] = date('Y') - (int) $annonce['annee_naissance_repreneur'];
} else {
$annonce['age_repreneur'] = null;
}
//$this->em->detach($annonce);
return $annonce;
} else {
return null;
}
}
public function donne_option_select_pays_annonce_vente($id_pays_connexion = 33, $lang = "fr") {
$pays = $this->em->getRepository(AnnoncesVendeur::class)->donne_liste_pays_annonces_vente($id_pays_connexion);
$texte_tous_les_pays = $this->translationExtension->translate('tous les pays', $lang, "", "M", "");
$options = [$texte_tous_les_pays => 0];
foreach ($pays as $p) {
$options = array_merge($options, [$p['nom_localisation'] => 'p' . $p['id_localisation']]);
}
return $options;
}
/**
* @return \Knp\Component\Pager\Pagination\PaginationInterface
*/
public function getAnnoncesRecherchePartenariatList(Request $request, PaginatorInterface $paginator, array $filter = [], $mode = '', $login_utilisateur = null) {
$sql = $this->em->getRepository(AnnoncesAcheteur::class)->donne_requete_SQL_pour_tableau_annonces_acheteur_page_en_cours($filter, $mode);
$params = $this->em->getRepository(AnnoncesAcheteur::class)->prepareParameters($filter);
$query = $this->em->createQuery($sql);
$query->setParameters($params);
$annoncesRecherchePartenariat = $paginator->paginate(
$query, // Requête contenant les données à paginer (ici nos annonces)
max(1, $request->query->getInt('page', 1)),// Numéro de la page en cours, passé dans l'URL, 1 si aucune page
10 // Nombre de résultats par page
);
$tab_annonces = [];
foreach ($annoncesRecherchePartenariat as $annonce) {
//$annonce['carte'] = $this->getImgCarteAnnonceAcheteur($annonce);
$id_pays = $annonce['id_pays'];
$id_region = $annonce['id_region'];
$id_departement = $annonce['id_departement'];
$localisation = [];
if (null != $id_departement && preg_match('/[A-Za-z]/', $id_departement) == 0 && substr($id_departement, -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($id_departement);
} elseif (null != $id_region && preg_match('/[A-Za-z]/', $id_region) == 0 && substr($id_region, -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($id_region);
} elseif (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
}
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
// On concatene toutes les loc recherchees
$idLocalisationsRecherchees = $annonce['autres_localisations'];
if ($id_region) {
$idLocalisationsRecherchees .= "," . $id_region;
} elseif ($id_pays) {
$idLocalisationsRecherchees .= "," . $id_pays;
}
$idLocalisations = array_filter(explode(',', $idLocalisationsRecherchees));
$annonce['cartes']['id_localisation_by_country'] = [];
foreach ($idLocalisations as $idLocalisation) {
// Si ce n'est pas un département confidentiel
if (strpos($idLocalisation, '_99') === false || substr_count($idLocalisation, "_") < 2) {
if (!in_array(Utils::getIdPaysFromIdLocalisation($idLocalisation), array_keys($annonce['cartes']['id_localisation_by_country']))) {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = '';
}
if (!in_array($idLocalisation, $annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)])) {
if ((string) $idLocalisation !== Utils::getIdPaysFromIdLocalisation($idLocalisation)) {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation;
} else {
$nbRegions = (int) $this->lm->getCountRegionsByCountry($idLocalisation);
$x = 1;
do {
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)][] = $idLocalisation . '_' . str_pad((string) $x, 2, '0', STR_PAD_LEFT);
++$x;
} while ($x <= $nbRegions);
}
}
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)] = array_filter(
$annonce['cartes']['id_localisation_by_country'][Utils::getIdPaysFromIdLocalisation($idLocalisation)]
);
} else {
// Récupération du pays
$idPays = Utils::getIdPaysFromIdLocalisation($idLocalisation);
// Récupération de la région parente (ex: 33_01_99 → 33_01)
$idRegion = substr($idLocalisation, 0, strrpos($idLocalisation, '_'));
// Initialisation du tableau pays si nécessaire
if (!isset($annonce['cartes']['id_localisation_by_country'][$idPays])) {
$annonce['cartes']['id_localisation_by_country'][$idPays] = [];
}
// On ajoute la région si elle n'existe pas déjà
if (!in_array($idRegion, $annonce['cartes']['id_localisation_by_country'][$idPays], true)) {
$annonce['cartes']['id_localisation_by_country'][$idPays][] = $idRegion;
}
// Nettoyage
$annonce['cartes']['id_localisation_by_country'][$idPays] = array_filter(
$annonce['cartes']['id_localisation_by_country'][$idPays]
);
}
}
/* if (null != $id_region) {
if (Utils::url_exists($this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_region.'.png')) {
$annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_region.'.png';
} elseif (Utils::url_exists($this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_pays.'.png')) {
$annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_pays.'.png';
} else {
$annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} elseif (null != $id_pays) {
if (Utils::url_exists($this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_pays.'.png')) {
$annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/'.$id_pays.'/'.$id_pays.'.png';
} else {
$annonce->carte = $this->cdn_fusacq.'/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} */
$localisations = $this->getLocalisationsWithUrlAnnonceAcheteur($annonce);
$annonce['localisations'] = $localisations;
$nom_localisation = "";
/* if (null != $id_departement) {
$localisation = $this->lm->getNomLocalisationById($id_departement);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'].', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_region) {
$localisation = $this->lm->getNomLocalisationById($id_region);
$nom_localisation = '';
for ($i = count($localisation) - 1; $i >= 0; --$i) {
$nom_localisation .= $localisation[$i]['nom_localisation'].', ';
}
$nom_localisation = substr($nom_localisation, 0, -2);
} elseif (null != $id_pays) {
$localisation = $this->lm->getNomLocalisationById($id_pays);
$nom_localisation = $localisation[0]['nom_localisation'];
} */
foreach ($localisations as $loc) {
$nom_localisation .= $loc['nom_localisation'] . ', ';
}
$annonce['nom_localisation'] = substr($nom_localisation, 0, -2);
/* foreach ($localisation as $niveau => $loc) {
$nom_niveau = 'nom_localisation_niveau_'.$niveau;
$id_niveau = 'id_localisation_niveau_'.$niveau;
$annonce->$nom_niveau = $loc['nom_localisation'];
$annonce->$id_niveau = $loc['id_localisation'];
}
if (!isset($annonce->nom_localisation_niveau_0)) {
$annonce->nom_localisation_niveau_0 = '';
$annonce->id_localisation_niveau_0 = '';
}
if (!isset($annonce->nom_localisation_niveau_1)) {
$annonce->nom_localisation_niveau_1 = '';
$annonce->id_localisation_niveau_1 = '';
}
if (!isset($annonce->nom_localisation_niveau_2)) {
$annonce->nom_localisation_niveau_2 = '';
$annonce->id_localisation_niveau_2 = '';
} */
$annonce['date_parution_object'] = Utils::getDateObjectFromFUSACQDate($annonce['date_parution']);
$annonce['slug'] = Utils::slugify($annonce['titre_annonce']);
$annonce['is_favoris'] = $this->isFavoris($annonce['id_annonce_acheteur'], "acheteur", $login_utilisateur);
$tab_annonces[] = $annonce;
//$this->em->detach($annonce);
}
$annoncesRecherchePartenariat->setItems($tab_annonces);
return $annoncesRecherchePartenariat;
}
/**
* @param int $idAnnonce
* @return array $tab_info_partenariat
*/
public function get_tab_info_partenariat($idAnnonce) {
$details = $this->em->getRepository(AnnoncesAcheteur::class)->getDetailsAnnoncePartenariat($idAnnonce);
$tab_info_partenariat = array();
$tab_info_partenariat["id_details_annonce_partenariat"] = $details->_get('id_details_annonce_partenariat');
if ($tab_info_partenariat["id_details_annonce_partenariat"] == null) {
$tab_info_partenariat["id_details_annonce_partenariat"] = "";
}
$tab_info_partenariat["type_partenaire"] = $details->_get('type_partenaire');
if ($tab_info_partenariat["type_partenaire"] == null) {
$tab_info_partenariat["type_partenaire"] = "";
}
$tab_info_partenariat["stade_dev_deposant"] = $details->_get('stade_dev_deposant');
if ($tab_info_partenariat["stade_dev_deposant"] == null) {
$tab_info_partenariat["stade_dev_deposant"] = "";
}
$tab_info_partenariat["id_localisation_deposant"] = $details->_get('id_localisation_deposant');
if ($tab_info_partenariat["id_localisation_deposant"] == null) {
$tab_info_partenariat["id_localisation_deposant"] = "";
}
$tab_info_partenariat["id_annonce_acheteur"] = $details->_get('id_annonce_acheteur');
if ($tab_info_partenariat["id_annonce_acheteur"] == null) {
$tab_info_partenariat["id_annonce_acheteur"] = "";
}
$tab_info_partenariat["type_partenariat"] = $details->_get('type_partenariat');
if ($tab_info_partenariat["type_partenariat"] == null) {
$tab_info_partenariat["type_partenariat"] = "";
}
return $tab_info_partenariat;
}
public function isFavoris($id_annonce, $type_annonce, $login_utilisateur) {
if (!$login_utilisateur) {
return false;
}
$favoris = $this->em->getRepository(Favoris::class)->findOneBy(['id_annonce' => $id_annonce, 'type_annonce' => $type_annonce, 'login_utilisateur' => $login_utilisateur]);
return $favoris != null;
}
public function donne_tableau_nb_annonce_vendeur_par_region($type = "entreprise", $id_pays = 33) {
$nb_annonces_par_region = $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_par_region($type, $id_pays);
$array_annonce_region = [];
foreach ($nb_annonces_par_region as $id_region => $nb) {
$region = $this->localisationsRepository->findOneBy(['id_localisation' => $id_region]);
$row = [
'nb' => $nb,
'nom' => $region->__get('nom_localisation'),
'prefixe' => $region->__get('prefixe')
];
$array_annonce_region[$id_region] = $row;
}
uasort($array_annonce_region, function ($a, $b) {
return $a['nom'] < $b['nom'] ? -1 : 1;
});
return $array_annonce_region;
}
public function donne_tableau_nb_annonce_acheteur_par_region($id_pays = 33) {
$nb_annonces_par_region = $this->em->getRepository(AnnoncesAcheteur::class)->donne_nb_annonces_par_region(null, $id_pays);
$array_annonce_region = [];
foreach ($nb_annonces_par_region as $id_region => $nb) {
$region = $this->localisationsRepository->findOneBy(['id_localisation' => $id_region]);
$row = [
'nb' => $nb,
'nom' => $region->__get('nom_localisation'),
'prefixe' => $region->__get('prefixe')
];
$array_annonce_region[$id_region] = $row;
}
uasort($array_annonce_region, function ($a, $b) {
return $a['nom'] < $b['nom'] ? -1 : 1;
});
return $array_annonce_region;
}
/**
* @param array $annonce
* @param array $tableau_associatif_localisation
*
* @return array
*/
private function donne_tab_liens_noms_fil_arianne($annonce, $mode) {
$pagesRedirection = new PagesRedirection($this->container);
$tab_liens_noms = array_reverse($annonce['liste_secteurs_ariane']);
if ($mode == "vendeur") {
if ('99' == substr($annonce['statuts'], 0, 2)) {
$type_page = "recherche_vente_actif";
} else {
$type_page = "recherche_vente";
}
} elseif ($mode == "acheteur") {
if ($annonce['type_raprochement'] == "partenaire") {
$type_page = "recherche_achat_partenaire";
} else {
$type_page = "recherche_achat";
}
} elseif ($mode == "ouvrir-capital") {
if ($annonce['type_raprochement'] == "partenaire") {
$type_page = "recherche_ouvrir_capital_recherche_partenariat";
} else {
$type_page = "recherche_acquereur_investisseur";
}
} else {
// aquereur_investisseur
$type_page = "recherche_acquereur_investisseur";
}
$parametres_lien['type_recherche'] = 7;
$parametres_lien['id_secteur_activite'] = $annonce['id_secteur_activite'];
$id_departement = $annonce['id_departement'];
$id_region = $annonce['id_region'];
$id_pays = $annonce['id_pays'];
if (isset($id_departement) && false === strpos($id_departement, '_99') && '' != $id_departement && '0' != $id_departement && $id_departement > 0) {
$nom_region = $this->localisationsRepository->getStringNomLocalisationById($id_region);
$parametres_lien['id_region'] = $id_region;
$parametres_lien['titre_recherche'] = Utils::slugify($annonce['nom_secteur_activite'] . ' ' . $nom_region);
$parametres_lien['nom_localisation'] = Utils::slugify($nom_region);
$parametres_lien['nom_secteur_activite'] = Utils::slugify($annonce['nom_secteur_activite']);
$lien = $pagesRedirection->donne_page_redirection($type_page, $parametres_lien);
// $tab_liens_noms[] = $annonce->nom_secteur_activite.', '.$nom_region.'" href="'.$lien.'">'.$nom_region.'</a>';
$tab_liens_noms[] = ['lien' => $lien, 'nom' => $nom_region, 'secteur_activite' => $annonce['nom_secteur_activite']];
$nom_departement = $this->localisationsRepository->getStringNomLocalisationById($id_departement);
$parametres_lien['id_departement'] = $id_departement;
$parametres_lien['titre_recherche'] = Utils::slugify($annonce['nom_secteur_activite'] . ' ' . $nom_departement);
$parametres_lien['nom_localisation'] = Utils::slugify($nom_departement);
$parametres_lien['nom_secteur_activite'] = Utils::slugify($annonce['nom_secteur_activite']);
$lien = $pagesRedirection->donne_page_redirection($type_page, $parametres_lien);
// $tab_liens_noms[] = $annonce->nom_secteur_activite.', '.$nom_departement.'" href="'.$lien.'">'.$nom_departement.'</a>';
$tab_liens_noms[] = ['lien' => $lien, 'nom' => $nom_departement, 'secteur_activite' => $annonce['nom_secteur_activite']];
} elseif (isset($id_region) && false === strpos($id_region, '_99') && '' != $id_region && '0' != $id_region && $id_region > 0) {
$nom_region = $this->localisationsRepository->getStringNomLocalisationById($id_region);
$parametres_lien['id_region'] = $id_region;
$parametres_lien['titre_recherche'] = Utils::slugify($annonce['nom_secteur_activite'] . ' ' . $nom_region);
$parametres_lien['nom_localisation'] = Utils::slugify($nom_region);
$parametres_lien['nom_secteur_activite'] = Utils::slugify($annonce['nom_secteur_activite']);
$lien = $pagesRedirection->donne_page_redirection($type_page, $parametres_lien);
// $tab_liens_noms[] .= $annonce->nom_secteur_activite.', '.$nom_region.'" href="'.$lien.'">'.$nom_region.'</a>';
$tab_liens_noms[] = ['lien' => $lien, 'nom' => $nom_region, 'secteur_activite' => $annonce['nom_secteur_activite']];
} elseif (isset($id_pays) && '' != $id_pays && '0' != $id_pays && $id_pays > 0) {
$nom_pays = $this->localisationsRepository->getStringNomLocalisationById($id_pays);
$parametres_lien['id_pays'] = $id_pays;
$parametres_lien['titre_recherche'] = Utils::slugify($annonce['nom_secteur_activite'] . ' ' . $nom_pays);
$parametres_lien['nom_localisation'] = Utils::slugify($nom_pays);
$parametres_lien['nom_secteur_activite'] = Utils::slugify($annonce['nom_secteur_activite']);
$lien = $pagesRedirection->donne_page_redirection($type_page, $parametres_lien);
// $tab_liens_noms[] .= $annonce->nom_secteur_activite.', '.$nom_region.'" href="'.$lien.'">'.$nom_region.'</a>';
$tab_liens_noms[] = ['lien' => $lien, 'nom' => $nom_pays, 'secteur_activite' => $annonce['nom_secteur_activite']];
} else {
// $nom_pays = $this->localisationsRepository->getStringNomLocalisationById($id_pays);
// $tab_liens_noms[] = $annonce->nom_localisation;
$tab_liens_noms[] = ['lien' => null, 'nom' => $annonce['nom_localisation'], 'secteur_activite' => null];
}
//dd($tab_liens_noms);
return $tab_liens_noms;
}
/**
* @param array $annonce
*
* @return array $annonce
*/
private function affectation_nom_secteur_activite($annonce, $mode) {
$pagesRedirection = new PagesRedirection($this->container);
if ($mode == "vendeur") {
if ('99' == substr($annonce['statuts'], 0, 2)) {
$function_name = "donne_page_redirection_recherche_annonce_vente_actif";
} else {
$function_name = "donne_page_redirection_recherche_annonce_vente";
}
} elseif ($mode == "acheteur") {
if ($annonce['type_raprochement'] == "partenaire") {
$function_name = "donne_page_redirection_recherche_annonce_achat_partenaire";
} else {
$function_name = "donne_page_redirection_recherche_annonce_achat";
}
} elseif ($mode == "acquereur_investisseur") {
if ($annonce['type_raprochement'] == "partenaire") {
$function_name = "donne_page_redirection_ouvrir_capital_recherches_partenariats";
} else {
$function_name = "donne_page_redirection_recherche_acquereur_investisseur";
}
}else {
// aquereur_investisseur
$function_name = "donne_page_redirection_recherche_acquereur_investisseur";
}
$id_secteur_activite = (string) $annonce['id_secteur_activite'];
$nom_secteur_activite = $this->secteursActiviteRepo->getNomSecteurActivitieById($id_secteur_activite)[0];
$annonce['nom_secteur_activite'] = $nom_secteur_activite['nomSecteurActivite'];
$liste_secteurs_affichage = $annonce['nom_secteur_activite'];
$lien_secteur = $pagesRedirection->$function_name(
['type_recherche' => 6, 'titre_recherche' => Utils::slugify($annonce['nom_secteur_activite']), 'id_secteur_activite' => $id_secteur_activite]
);
$annonce['liste_secteurs_affichage'] = '<a title="Cession d\'entreprise ' . $annonce['nom_secteur_activite'] . '" href="' . $lien_secteur . '">' . $annonce['nom_secteur_activite'] . '</a>';
$annonce['liste_secteurs_ariane'][] = ['lien' => $lien_secteur, 'nom' => $annonce['nom_secteur_activite']];
$n = strlen($id_secteur_activite);
if ($n > 1) {
$id_secteur_activite_pere = substr($id_secteur_activite, 0, $n - 2);
$nom_secteur_activite_pere = $this->secteursActiviteRepo->getNomSecteurActivitieById($id_secteur_activite_pere)[0];
$annonce['nom_secteur_activite_pere'] = $nom_secteur_activite_pere['nomSecteurActivite'];
$liste_secteurs_affichage = $annonce['nom_secteur_activite_pere'] . ' > ' . $liste_secteurs_affichage;
$lien_secteur_pere = $pagesRedirection->$function_name(
['type_recherche' => 6, 'titre_recherche' => Utils::slugify($annonce['nom_secteur_activite_pere']), 'id_secteur_activite' => $id_secteur_activite_pere]
);
$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'];
$annonce['liste_secteurs_ariane'][] = ['lien' => $lien_secteur_pere, 'nom' => $annonce['nom_secteur_activite_pere']];
}
if ($n > 3) {
$id_secteur_activite_grand_pere = substr($id_secteur_activite, 0, $n - 4);
$nom_secteur_activite_grand_pere = $this->secteursActiviteRepo->getNomSecteurActivitieById($id_secteur_activite_grand_pere)[0];
$annonce['nom_secteur_activite_grand_pere'] = $nom_secteur_activite_grand_pere['nomSecteurActivite'];
$liste_secteurs_affichage = $annonce['nom_secteur_activite_grand_pere'] . ' > ' . $liste_secteurs_affichage;
$lien_secteur_grand_pere = $pagesRedirection->$function_name(
['type_recherche' => 6, 'titre_recherche' => Utils::slugify($annonce['nom_secteur_activite_grand_pere']), 'id_secteur_activite' => $id_secteur_activite_grand_pere]
);
$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'] . '';
$annonce['liste_secteurs_ariane'][] = ['lien' => $lien_secteur_grand_pere, 'nom' => $annonce['nom_secteur_activite_grand_pere']];
}
// $annonce['liste_secteurs_ariane'] = $annonce['liste_secteurs_affichage'];
// $annonce['liste_secteurs_ariane'] = $secteurs_affichage;
// un petit test pour lque la liste de secteurs ne passe pas sur deux lignes.
// 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
if (strlen($liste_secteurs_affichage) > 65 && $n > 3) {
// 1er cas, on met des ... � la place du second secteur d'activit�
$liste_secteurs_affichage = $annonce['nom_secteur_activite_grand_pere'] . ' > ... > ' . $annonce['nom_secteur_activite'];
$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>';
// si c'est toujours trop long on n'affiche que le secteur d'activite final
if (strlen($liste_secteurs_affichage) > 65) {
$annonce['liste_secteurs_affichage'] = '<a href="' . $lien_secteur . '">' . $annonce['nom_secteur_activite'] . '</a>';
}
}
// $annonce['liste_secteurs_affichage']=''.$annonce['liste_secteurs_affichage'].'';
$annonce['secteurs_affichage_2'] = '<a title="Cession d\'entreprise ' . $annonce['nom_secteur_activite'] . '" href="' . $lien_secteur . '">' . $annonce['nom_secteur_activite'] . '</a>';
return $annonce;
}
/**
* @param AnnoncesAcheteur $annonce_acheteur
* @return string $img
*/
private function getImgCarteAnnonceAcheteur($annonce_acheteur) {
$id_pays = $annonce_acheteur['id_pays'];
$id_region = $annonce_acheteur['id_region'];
if (strpos($id_region, "_99") === false && $id_region != "") {
$id_localisation_principale = $id_region;
} else {
$id_localisation_principale = $id_pays;
}
$ids_localisations = $id_localisation_principale . ',' . $annonce_acheteur['autres_localisations'];
$array_ids_localisations = array_filter(explode(",", $ids_localisations));
$array_pays = [];
$array_regions = [];
foreach ($array_ids_localisations as $id_loc) {
$count = substr_count($id_loc, '_');
if ($count == 0) {
$array_pays[] = $id_loc;
} elseif ($count == 1) {
$array_regions[] = $id_loc;
}
}
if (count($array_pays) == 0) {
if (count($array_regions) == 0) {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
} elseif (count($array_regions) == 1) {
$id_pays = substr($array_regions[0], 0, -3);
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $array_regions[0] . '.png')) {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $array_regions[0] . '.png';
} elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png')) {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $id_pays . '/' . $id_pays . '.png';
} else {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} else {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} elseif (count($array_pays) == 1) {
if (count($array_regions) == 0) {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $array_pays[0] . '/' . $array_pays[0] . '.png')) {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $array_pays[0] . '/' . $array_pays[0] . '.png';
} else {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} elseif (count($array_regions) == 1) {
if (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $array_pays[0] . '/' . $array_regions[0] . '.png')) {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $array_pays[0] . '/' . $array_regions[0] . '.png';
} elseif (Utils::url_exists($this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $array_pays[0] . '/' . $array_pays[0] . '.png')) {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/' . $array_pays[0] . '/' . $array_pays[0] . '.png';
} else {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} else {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
} else {
$img = $this->cdn_fusacq . '/static/help-fusacq/fr/images/cartes/pays/monde_transparent.png';
}
return $img;
}
/**
* @param AnnoncesAcheteur $annonce_acheteur
* @return string $id_localisation_principale
*/
private function getLocalisationPrincipaleAnnonceAcheteur($annonce) {
$id_pays = $annonce['id_pays'];
$id_region = $annonce['id_region'];
$id_departement = $annonce['id_departement'];
if (isset($id_departement) && strpos($id_departement, "_99") === false && $id_departement != "") {
$id_localisation_principale = $id_departement;
} elseif (isset($id_region) && strpos($id_region, "_99") === false && $id_region != "") {
$id_localisation_principale = $id_region;
} else {
$id_localisation_principale = $id_pays;
}
return $id_localisation_principale;
}
/**
* @param string $ids_localisations
* @return array $localisations
*/
private function getLocalisationsWithUrlAnnonceAcheteur($annonce, $from = null) {
$pagesRedirection = new PagesRedirection($this->container);
if ($from && $from == "ouvrir-capital") {
if (isset($annonce['type_raprochement']) && $annonce['type_raprochement'] == "partenaire") {
$type_page = "recherche_ouvrir_capital_recherche_partenariat";
} else {
$type_page = "recherche_acquereur_investisseur";
}
} elseif (isset($annonce['type_raprochement']) && $annonce['type_raprochement'] == "partenaire") {
$type_page = "recherche_achat_partenaire";
} else {
$type_page = "recherche_achat";
}
$id_localisation_principale = $this->getLocalisationPrincipaleAnnonceAcheteur($annonce);
$ids_localisations = $id_localisation_principale . ',' . $annonce['autres_localisations'];
$array_localisations = [];
$array_ids_localisations = array_unique(array_filter(explode(",", $ids_localisations)));
//$array_ids_localisations = array_splice($array_ids_localisations, 1);
foreach ($array_ids_localisations as $id_loc) {
$localisations = $this->lm->getNomLocalisationById($id_loc);
if ($localisations) {
$localisation = end($localisations);
$count = substr_count($localisation['id_localisation'], '_');
if ($count == 0) {
//$type_localisation = "p";
$type_localisation = "id_pays";
} elseif ($count == 1) {
//$type_localisation = "r";
$type_localisation = "id_region";
} else {
//$type_localisation = "d";
$type_localisation = "id_departement";
}
$parametres_lien = [];
$parametres_lien['type_recherche'] = 2;
$parametres_lien[$type_localisation] = $localisation['id_localisation'];
$parametres_lien['titre_recherche'] = Utils::slugify($localisation['nom_localisation']);
$row['nom_localisation'] = $localisation['nom_localisation'];
//$row['lien_localisation'] = "/reprise-entreprise-" . strtolower($localisation['nom_localisation']) . ',' . $type_localisation . $localisation['id_localisation'];
$row['lien_localisation'] = $pagesRedirection->donne_page_redirection($type_page, $parametres_lien);
$array_localisations[] = $row;
}
}
return $array_localisations;
}
private function affectation_property_profil_deposant($login_utilisateur) {
$deposant = $this->em->getRepository(Utilisateur::class)->findOneBy(['login_utilisateur' => $login_utilisateur]);
return $deposant->_get("type_utilisateur");
}
/**
* @param type $id_pays
* @param type $limitV
* @param type $limitA
* @return type
*/
public function getAnnoncesAlaUnePageAccueil($id_pays) {
$annoncesV = $this->em->getRepository(AnnoncesVendeur::class)->getAnnoncesAlaUnePageAccueil($id_pays);
$annoncesA = $this->em->getRepository(AnnoncesAcheteur::class)->getAnnoncesAlaUnePageAccueil($id_pays,);
$result = array_merge(Utils::getSomeRandomItemsFromArray(2, $annoncesV), Utils::getSomeRandomItemsFromArray(1, $annoncesA));
return array_map(
function ($item) {
$item["id_localisation"] = Utils::getLocalisationPlusPrecisPossible($item["id_pays"], $item["id_region"], $item["id_departement"]);
$localisation = Utils::lastValInArray($this->lm->getNomLocalisationById($item["id_localisation"]));
$item["nom_localisation_slug"] = Utils::slugify($localisation["nom_localisation"]);
return $item;
},
$result
);
}
public function getAnnonceVendeurArrayByIdAnnonce($id_annonce_vendeur) {
$annonce = $this->em->getRepository(AnnoncesVendeur::class)->getAnnonceArrayByIdAnnonce($id_annonce_vendeur);
$localisation = [];
if (null != $annonce['id_departement'] && preg_match('/[A-Za-z]/', $annonce['id_departement']) == 0 && substr($annonce['id_departement'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonce['id_departement']);
} elseif (null != $annonce['id_region'] && preg_match('/[A-Za-z]/', $annonce['id_region']) == 0 && substr($annonce['id_region'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonce['id_region']);
} elseif (null != $annonce['id_pays']) {
$localisation = $this->lm->getNomLocalisationById($annonce['id_pays']);
}
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
return $annonce;
}
public function getAnnonceAcheteurArrayByIdAnnonce($id_annonce_acheteur) {
$annonce = $this->em->getRepository(AnnoncesAcheteur::class)->getAnnonceArrayByIdAnnonce($id_annonce_acheteur);
$localisation = [];
if (null != $annonce['id_departement'] && preg_match('/[A-Za-z]/', $annonce['id_departement']) == 0 && substr($annonce['id_departement'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonce['id_departement']);
} elseif (null != $annonce['id_region'] && preg_match('/[A-Za-z]/', $annonce['id_region']) == 0 && substr($annonce['id_region'], -3) != "_99") {
$localisation = $this->lm->getNomLocalisationById($annonce['id_region']);
} elseif (null != $annonce['id_pays']) {
$localisation = $this->lm->getNomLocalisationById($annonce['id_pays']);
}
if ($localisation) {
$annonce['nom_localisation_slug'] = Utils::slugify($localisation[count($localisation) - 1]['nom_localisation']);
} else {
$annonce['nom_localisation_slug'] = "localisation";
}
return $annonce;
}
/* public function donne_option_select_pays_annonces_acheteur($mode = "entreprise", $id_pays_connexion = 33) {
$pays = $this->em->getRepository(AnnoncesAcheteur::class)->donne_option_select_pays_annonces_acheteur($mode, $id_pays_connexion);
$options = ['Tous' => 0];
foreach ($pays as $p) {
if ($p['nom_localisation'] != null) {
$options = array_merge($options, [$p['nom_localisation'] => 'p' . $p['id_localisation']]);
}
}
return $options;
} */
public function donne_option_select_pays_annonces_acheteur($mode = "entreprise", $id_pays_connexion = 33) {
$localisations = $this->em->getRepository(AnnoncesAcheteur::class)->getAnnoncesAcheteurLocalisationsRecherchees($mode);
$array_pays = [];
foreach ($localisations as $loc) {
$string_loc = $loc['id_pays'] . "," . $loc['autres_localisations'];
$array_loc = explode(',', $string_loc);
$array_loc = array_filter($array_loc);
foreach ($array_loc as $id_loc) {
if (strpos($id_loc, "_") === false && !in_array($id_loc, $array_pays) && is_numeric($id_loc) && $id_loc != "00") {
$array_pays[] = $id_loc;
}
}
}
$options = ['Tous' => 0];
if ($array_pays) {
// Si le pays de l'utilisateur fait partie de la liste des pays, on le met en haut de la liste
for ($i = 0; $i < count($array_pays); $i++) {
if ($array_pays[$i] == $id_pays_connexion) {
unset($array_pays[$i]);
array_unshift($array_pays, $id_pays_connexion);
break;
}
}
foreach ($array_pays as $id_pays) {
$p = $this->em->getRepository(Localisations::class)->getNomLocalisationById($id_pays)[0];
$options = array_merge($options, [$p['nom_localisation'] => 'p' . $p['id_localisation']]);
}
}
return $options;
}
public function donne_annonces_avec_prix_cession_exploitables($id_secteur_activite, $date_ref, $nb_mois) {
$annonces_avec_prix = $this->em->getRepository(AnnoncesVendeur::class)->donne_annonces_avec_prix_cession($id_secteur_activite, $date_ref, $nb_mois);
$annonces_avec_prix_exploitables = [];
foreach ($annonces_avec_prix as $annonce) {
// Si le prix de l'immobilier est inclus dans le prix de cession
if ($annonce['immobilier_dans_prix_cession'] == "oui") {
// Si le prix de l'immobilier est renseigné, on le soustrait du prix de cession
if ($annonce['prix_immobilier'] !== null && $annonce['prix_immobilier'] !== "") {
$annonce['prix_cession'] = $annonce['prix_cession'] - $annonce['prix_immobilier'];
$annonces_avec_prix_exploitables[] = $annonce;
}
// S'il ne l'est pas, pas besoin de calculer
} else {
$annonces_avec_prix_exploitables[] = $annonce;
}
}
return $annonces_avec_prix_exploitables;
}
// Identique à donne_annonces_avec_prix_cession_exploitables, avec filtrage IQR (interquartile range)
public function donne_annonces_avec_prix_cession_exploitables_IQR($id_secteur_activite, $date_ref, $nb_mois) {
$annonces_avec_prix = $this->em->getRepository(AnnoncesVendeur::class)->donne_annonces_avec_prix_cession($id_secteur_activite, $date_ref, $nb_mois);
$tableau_prix = [];
// On ajoute à $tableau_prix les prix exploitables
foreach ($annonces_avec_prix as $annonce) {
// Si le prix de l'immobilier est inclus dans le prix de cession
if ($annonce['immobilier_dans_prix_cession'] == "oui") {
// Si le prix de l'immobilier est renseigné, on le soustrait du prix de cession
if ($annonce['prix_immobilier'] !== null && $annonce['prix_immobilier'] !== "") {
$prix_cession_sans_immobilier = $annonce['prix_cession'] - $annonce['prix_immobilier'];
$tableau_prix[] = $prix_cession_sans_immobilier;
}
// S'il ne l'est pas, pas besoin de calculer
} else {
$tableau_prix[] = $annonce['prix_cession'];
}
}
// On calcule les bornes min et max de l'IQR
list($min, $max) = Statistiques::calculerBornesIQR($tableau_prix);
$annonces_avec_prix_exploitables = [];
$exclusions = [];
foreach ($annonces_avec_prix as $annonce) {
// Si le prix de l'immobilier est inclus dans le prix de cession
if ($annonce['immobilier_dans_prix_cession'] == "oui") {
// Si le prix de l'immobilier est renseigné, on le soustrait du prix de cession
if ($annonce['prix_immobilier'] !== null && $annonce['prix_immobilier'] !== "") {
if ($prix_cession_sans_immobilier >= $min && $prix_cession_sans_immobilier <= $max) {
$annonce['prix_cession'] = $annonce['prix_cession'] - $annonce['prix_immobilier'];
$annonces_avec_prix_exploitables[] = $annonce;
} else {
$exclusions[] = $annonce;
}
}
// S'il ne l'est pas, pas besoin de calculer
} else {
if ($annonce['prix_cession'] >= $min && $annonce['prix_cession'] <= $max) {
$annonces_avec_prix_exploitables[] = $annonce;
} else {
$exclusions[] = $annonce;
}
}
}
return $annonces_avec_prix_exploitables;
}
/**
* Récupère les détails de synthèse du capital immatériel pour une annonce spécifique
*
* Cette méthode retourne les informations détaillées de la synthèse stratégique
* liées au capital immatériel d'une annonce identifiée par son ID.
*
* @param int|string $id_annonce L'identifiant unique de l'annonce
*
* @return array|object|null Les données de synthèse du capital immatériel
*
*
* @see \App\Entity\DetailAnnonceSyntheseStrategique
* @see \App\Repository\DetailAnnonceSyntheseStrategiqueRepository::detailSynthese()
*/
public function detailSyntheseCapitalImmaterielByIdAnnonce($id_annonce, $accesElite = false) { // FONCTION POUR GERER L'ONGLET dans detail annonce
if (!$id_annonce) {
throw new MissingMandatoryParams();
}
$result = $this->em->getRepository(\App\Entity\DetailAnnonceSyntheseStrategique::class)->detailSynthese($id_annonce);
if (!$result) {
return NULL;
}
if ($accesElite) { // acces possible en illimite// acces offre elite //acces payant
return $result;
}
if (!empty($result)) {
$result["date_debut_consult_gratuite"] = (Utils::isValidDate($result["date_debut_consult_gratuite"])) ? Utils::getDateObjectFromFUSACQDate($result["date_debut_consult_gratuite"] . "000000") : NULL;
$result["date_fin_consult_gratuite"] = (Utils::isValidDate($result["date_fin_consult_gratuite"])) ? Utils::getDateObjectFromFUSACQDate($result["date_fin_consult_gratuite"] . "235959") : NULL;
$now = Utils::now();
if ($result["date_fin_consult_gratuite"] == null || $result["date_debut_consult_gratuite"] == null) {
return []; // acces non autorisé
}
if (Utils::compareDateTime($result["date_debut_consult_gratuite"], $now) == 1) { // date debut apres aujourd'hui
return []; // acces non autorisé
}
if (Utils::compareDateTime($now, $result["date_fin_consult_gratuite"]) == 1) { // aujourd'hui depasse la date fin
return []; // acces non autorisé
}
$result["consult_gratuite"] = true;
}
return $result;
}
public function isRare($id_secteur_activite) {
$is_rare = false;
$secteur_activite = $this->em->getRepository(SecteursActivite::class)->findOneBy(['idSecteurActivite' => $id_secteur_activite]);
if ($secteur_activite) {
$is_rare = $secteur_activite->_get('rare');
}
return $is_rare;
}
public function isRecherche($id_secteur_activite) {
$is_recherche = false;
$secteur_activite = $this->em->getRepository(SecteursActivite::class)->findOneBy(['idSecteurActivite' => $id_secteur_activite]);
if ($secteur_activite) {
$is_recherche = $secteur_activite->_get('recherche');
}
return $is_recherche;
}
// Indique si une annonce date de moins de 15 jours (date_parution comme référence)
public function isAnnonceRecente($date_parution) {
$date = \DateTime::createFromFormat("Ymd", $date_parution);
$today = new \DateTime();
$interval = $today->diff($date);
return $interval->days <= 15;
}
// Indique si une annonce est sous les radars (= en ligne depuis plus d'un mois et avec 0 contact)
public function isAnnonceVendeurSousRadar($date_parution, $id_annonce_vendeur) {
$is_sous_radar = false;
$date = \DateTime::createFromFormat("Ymd", $date_parution);
$today = new \DateTime();
$interval = $today->diff($date);
if ($interval->days > 30) {
$ordered = $this->em->getRepository(Commandes::class)->hasBeenOrdered($id_annonce_vendeur, "vendeur");
if (!$ordered) {
$is_sous_radar = true;
}
}
return $is_sous_radar;
}
}