<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller;
use App\Services\MetaTag;
use App\Form\Type\AnnuaireRepreneursRechercheType;
use App\Entity\{
AnnuaireRepreneurs,
Utilisateur,
Panier
};
use App\Helper\{
Utils,
ParametersProvider
};
use App\Services\LogMarketingProvider as LogMarketingProviderService;
use App\Services\ManagerEntity\{
AnnuairesManagers,
DroitsAccesManagers,
ParametreSiteManagers,
CommandesManager
};
use App\Services\PDFGenerator;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Forms;
use Symfony\Component\HttpFoundation\{
Request,RedirectResponse,
Response
};
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use App\Services\ManagerEntity\LocalisationsManagers;
use Doctrine\ORM\EntityManagerInterface;
use App\Twig\TranslationExtension;
use App\Repository\CommandesRepository;
use App\Services\TelephoneInternational;
use App\Services\Compte\Commandes\CommandesManagers;
use App\Services\GoogleTag;
class AnnuairesRepreneursController extends EntityUsingController
{
/**
* @var AnnuairesManagers
*/
private $am;
/**
* @var PDFGenerator
*/
private $pf;
/**
* @var DroitsAccesManagers
*/
private $dam;
/**
* @var ParametreSiteManagers
*/
private $psm;
/**
* @var SessionInterface
*/
private $session;
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @var CommandesManager
*/
private $cm;
/**
* @var MetaTag
*/
private $metaTag;
public function __construct(AnnuairesManagers $am, PDFGenerator $pf, DroitsAccesManagers $dam, ParametreSiteManagers $psm,SessionInterface $session,EntityManagerInterface $em,CommandesManager $cm, MetaTag $metaTag)
{
$this->am = $am;
$this->pf = $pf;
$this->dam = $dam;
$this->psm = $psm;
$this->session = $session;
$this->em = $em;
$this->cm = $cm;
$this->metaTag = $metaTag;
}
public function repreneursRecherche(Request $request, PaginatorInterface $paginator, $codePays, LogMarketingProviderService $logMarketingProviderService, TranslationExtension $translationExtension): Response
{
$form = $this->createForm(AnnuaireRepreneursRechercheType::class, NULL,[ 'method' => 'GET']);
$form->handleRequest($request);
$filter =[];
if ($form->isSubmitted() && $form->isValid()) {
$listFields = [ "id_pays","id_region","id_departement",
"id_secteur_activite_recherche_1","id_secteur_activite_recherche_2","id_secteur_activite_recherche_3",
"type_reprise","apport_min","apport_max","reference_mots_cles","mots_cle_exact"
];
foreach ($listFields as $field){
$filter[$field] = $request->query->get($field) ?? NULL;
}
if(empty($filter["reference_mots_cles"])){ $filter["mots_cle_exact"]= false; }
if($filter['apport_max']== "2000p" ){ unset($filter['apport_max']); }
$metaTitle = 'liste des repreneurs d\'entreprise correspondant à votre recherche';
$metaDescription = 'consultez la liste des repreneurs d\'entreprise correspondant à votre recherche';
} else {
$metaTitle = 'annuaire des repreneurs d\'entreprise';
$metaDescription = 'consultez les derniers CV déposés par les repreneurs d\'entreprise sur FUSACQ';
}
$string_params = $this->serializeParams($filter);
$isResultatRecherche = $form->isSubmitted() && $form->isValid();
$CVsRepreneurs = $this->am->getCVsRepreneursList($request, $paginator, $filter); // CV repreneur avec pagination
$CVsRepreneursPrioritaire = ($isResultatRecherche)? $this->am->getCVsRepreneursListPrioritaires($filter ):NULL;
$user = $this->getUser();
if( $user ){
$logMarketingProviderService->ajouterActionLogsActions(
$user->_get('id_utilisateur')??$user['id_utilisateur'],
"96",
$user->_get('type_utilisateur')?? $user['type_utilisateur'],
'----') ;
}
$lang = $request->getSession()->get('lang');
$metaTag = $this->metaTag
->setTitle($translationExtension->translate($metaTitle, $lang, "", "M", ""))
->setDescription($translationExtension->translate($metaDescription, $lang, "", "M", ""));
return $this->render('annuaires/repreneurs/repreneurs_recherche.html.twig', [
'metaTag' => $metaTag,
'controller_name' => 'AnnuairesController', 'form' => $form->createView(),
'CVsRepreneurs' => $CVsRepreneurs, 'CVsRepreneursPrioritaire'=>$CVsRepreneursPrioritaire,
'isResultatRecherche' => $isResultatRecherche,
'string_params' => $string_params
]);
}
/**
* @param $idRepreneur
*
* @return Response
*/
public function repreneursCvDetails(Request $request, LocalisationsManagers $localisationManager, TranslationExtension $translationExtension, AnnuaireRepreneurs $repreneur, LogMarketingProviderService $logMarketingProviderService, GoogleTag $googleTag, $codePays)
{
if (!$repreneur) {
throw $this->createNotFoundException('No Repreneur found for id '.$repreneur);
}
// On efface les anciens parametres s'ils existent, puis on insert les nouveaux
$googleTag->removeParametresPub();
if ($repreneur->getIdLocalisationsRecherchees()) {
$id_localisations_recherchees = trim($repreneur->getIdLocalisationsRecherchees(), ',');
$array_id_localisations_recherchees = explode(",", $id_localisations_recherchees);
// On prend le premier id_localisation
if ($array_id_localisations_recherchees[0]) {
// Si c'est un département
if (substr_count($array_id_localisations_recherchees[0], "_") == 2) {
$googleTag->setIdDepartement($array_id_localisations_recherchees[0]);
$googleTag->setIdRegion(substr($array_id_localisations_recherchees[0], 0, -3));
$googleTag->setIdPays(substr($array_id_localisations_recherchees[0], 0, strpos($array_id_localisations_recherchees[0], "_")));
// Si c'est une region
} elseif (substr_count($array_id_localisations_recherchees[0], "_") == 1) {
$googleTag->setIdRegion($array_id_localisations_recherchees[0]);
$googleTag->setIdPays(substr($array_id_localisations_recherchees[0], 0, strpos($array_id_localisations_recherchees[0], "_")));
// Sinon c'est un pays
} else {
$googleTag->setIdPays($array_id_localisations_recherchees[0]);
}
}
}
if ($repreneur->getIdSecteurActiviteRecherche()) {
$id_secteur_activite_recherche = trim($repreneur->getIdSecteurActiviteRecherche(), ",");
$array_secteur_activite_recherche = explode(",", $id_secteur_activite_recherche);
// On prend le premier id_secteur_activite
if ($array_secteur_activite_recherche[0]) {
$googleTag->setIdSecteurActivite($array_secteur_activite_recherche[0]);
}
}
$session = $request->getSession();
$authorized = $this->isAuthorized($this->getUser(), $repreneur);
//parse_str($get, $tmpArray);
$idRepreneur = $repreneur->getIdRepreneur();
$from = $request->query->get('from');
$index = $request->query->get('index');
$page = (int) $request->query->get('page', 1);
$hasForfait = false;
$lignePanier = false;
$dejaCommande = false;
$forfaitAUtiliser = array();
if( $session ){
$userIdentity = $session->get('user');
if (!empty($userIdentity)) {
$lignePanier = $this->em->getRepository(Panier::class)->findOneBy(
['login_utilisateur' => $userIdentity->_get('login_utilisateur'),"type_object"=>'annonce_R',"id_object"=>$idRepreneur]
);
$dejaCommande = $this->cm->hasAnnonceCommande($userIdentity->_get('login_utilisateur'), $idRepreneur, 'repreneur');
$forfaitAUtiliser = $this->dam->getFrofaitAnnonceToUse($userIdentity);
if (!empty($forfaitAUtiliser)) {
$hasForfait = true;
}
$logMarketingProviderService->ajouterActionLogsActions(
$userIdentity->id_utilisateur,
"96",
$userIdentity->type_utilisateur,
'----') ;
}
}
if ($from == null) {
$filter = [];
$listFields = [ "id_pays","id_region","id_departement",
"id_secteur_activite_recherche_1","id_secteur_activite_recherche_2","id_secteur_activite_recherche_3",
"type_reprise","apport_min","apport_max","reference_mots_cles","mots_cle_exact"
];
foreach ($listFields as $field){
$filter[$field] = $request->query->get($field) ?? NULL;
}
if(empty($filter["reference_mots_cles"])){ $filter["mots_cle_exact"]= false; }
if($filter['apport_max']== "2000p" ){ unset($filter['apport_max']); }
$string_params = $this->serializeParams($filter);
$prevCVRepreneur = $this->am->getIndexNCVsRepreneursList($filter, $page, $index - 1);
$nextCVRepreneur = $this->am->getIndexNCVsRepreneursList($filter, $page, $index + 1);
$urlRetourList = "";
$complementUrl = "?".$string_params."&index=";
$colorClass = null;
$titleClass = null;
$btnClass = "button-rond-vert";
$metaTitle = 'CV de repreneur, %$titre_cv%$';
$metaDescription = 'Consultez le CV d\'un repreneur, %$titre_cv%$';
} else {
$filter = $request->query->all();
$filter = ParametersProvider::prepareRechercheAvanceeAnnonceAcheteurParameters($filter);
$string_params = $this->serializeParams($filter);
if ($page > 1) {
$string_params .= "&page=" . $page;
}
if ($from == "ouvrir-capital") {
$filter['from_list'] = "cv_repreneur_investisseur";
}
$prevCVRepreneur = $this->am->getIndexNCVsRepreneursListBis($filter, $page, $index - 1);
$nextCVRepreneur = $this->am->getIndexNCVsRepreneursListBis($filter, $page, $index + 1);
$urlList = $request->query->get('urlList');
$urlRetourList = $urlList ? $urlList . '?' . $string_params : null;
$complementUrl = "?urlList=" . $urlList . "&" . $string_params . '&from=' . $from . '&index=';
if ($from == "vendre-entreprise") {
$colorClass = "vert";
$titleClass = "titre_annonce_vert";
$btnClass = "button-rond-vert";
$metaTitle = 'CV de repreneur, %$titre_cv%$';
$metaDescription = 'Consultez le CV d\'un repreneur, %$titre_cv%$';
} else {
$colorClass = "orange-new";
$titleClass = "titre_annonce_orange";
$btnClass = "btn-orange-new";
$metaTitle = 'CV de repreneur investisseur, %$titre_cv%$';
$metaDescription = 'Consultez le CV d\'un repreneur investisseur, %$titre_cv%$';
}
}
$cvRepreneur = $this->am->getCVRepreneurDetail($repreneur->getIdRepreneur());
if ( (!empty($cvRepreneur["dateParution"]))
&& (!empty($cvRepreneur["dateParution"]))
&& (Utils::compareDateTime($cvRepreneur["dateParution"], $cvRepreneur["dateParutionInitiale"]->modify('+3 months') )==1 )
){
$mise_a_jour_le = true;
$poste_le=false;
}else{
$poste_le = true;
$mise_a_jour_le=false;
}
$lang = $request->getSession()->get('lang');
$dernieresAnnonces = $request->query->get('dernieresAnnonces');
$arrayVarsTrans['titre_cv'] = $cvRepreneur['titreSocieteRecherchee'];
$metaTitle = str_replace('%$titre_cv%$',$arrayVarsTrans['titre_cv'],$metaTitle);
$metaDescription = str_replace('%$titre_cv%$',$arrayVarsTrans['titre_cv'],$metaDescription);
$http_host = $request->server->get('HTTP_HOST');
$url = substr($request->server->get('REDIRECT_URL'), 0, -4);
$canonical = $http_host.$url;
$metaTag = $this->metaTag
->setTitle($metaTitle)
->setDescription($metaDescription)
->setCanonical($canonical);
$mot_cle_recherche = (isset($filter['reference_mots_cles'])) ? $filter['reference_mots_cles']:NULL;
return $this->render('annuaires/repreneurs/repreneurs_cv_details.html.twig', [
'metaTag' => $metaTag,
'controller_name' => 'AnnuairesController',
'cvRepreneur' => $cvRepreneur,
'nextCVRepreneur' => $nextCVRepreneur,
//'get'=>$get,
'mot_cle_recherche'=>$mot_cle_recherche,
'demarcheList'=>AnnuaireRepreneurs::getDemarcheList(),
'prevCVRepreneur' => $prevCVRepreneur, 'authorized' => $authorized,
'complementUrl' => $complementUrl,
'indexPrevious' => $index - 1,
'indexNext' => $index + 1,
'urlRetourList' => $urlRetourList,
'from' => $from,
'colorClass' => $colorClass,
'titleClass' => $titleClass,
'btnClass' => $btnClass,
'lignePanier'=>$lignePanier,
'dejaCommande'=>$dejaCommande,
'hasForfait'=>$hasForfait,
'forfaitAUtiliser'=>$forfaitAUtiliser,
'dernieresAnnonces' => $dernieresAnnonces,
"poste_le"=>$poste_le,
"mise_a_jour_le"=>$mise_a_jour_le,
'googleTag' => $googleTag
]);
}
/**
* @return false
*/
private function isAuthorized(?Utilisateur $utilisateur, AnnuaireRepreneurs $repreneur): bool
{
if(!$this->getUser()){ // non authentifié
return false;
}
return $this->dam->checkIfUtilisateurDroitAccesAnnuaireRepreneur( $this->getUser()->getId(),true);
}
public function imprimerRepreneursCv(AnnuaireRepreneurs $repreneur, CommandesRepository $cr, TelephoneInternational $ti, LocalisationsManagers $localisationManager, CommandesManagers $cm, $codePays, $lang)
{
if (!$repreneur) {
throw $this->createNotFoundException('No Repreneur found for id '.$repreneur);
}
$user = $this->getUser();
$cvRepreneur = $this->am->getCVRepreneurDetail($repreneur->getIdRepreneur());
$coordonnees = [];
$annee_passee = false; // Variable pour savoir si 1 an est passé depuis la commande, si oui, on n'affiche pas les coordonnées complètes (RGPD)
// Si l'utilisateur a déjà commandé ce repreneur
if ($user && $cr->hasAnnonceCommande($user->_get('login_utilisateur'), $repreneur->getIdRepreneur(), "repreneur")) {
$coordonnees['nom_contact'] = ucfirst($cvRepreneur['prenom']) . ' ' . strtoupper($cvRepreneur['nom']);
$coordonnees['adresse'] = $cvRepreneur['adresse'];
$coordonnees['code_postal'] = $cvRepreneur['codePostal'];
$coordonnees['ville'] = $cvRepreneur['ville'];
$coordonnees['pays'] = $localisationManager->getStringNomLocalisationById($cvRepreneur['idPays']);
$coordonnees['telephone'] = $cvRepreneur['telephone'] ? $ti->getInternationalPhone($cvRepreneur['telephone'], $cvRepreneur['indicatif_telephone'])['affichage'] : null;
$coordonnees['email'] = $cvRepreneur['email'];
$commande = $cm->getArrayCommandeByIdElement($repreneur->getIdRepreneur(), "repreneur");
if ($commande) {
$annee_passee = $commande['annee_passee'];
}
} elseif ('publique' != $cvRepreneur['modeProfil']) {
throw $this->createNotFoundException('Repreneur introuvable');
}
$demarche = $this->am->getDemarcheListByIds($cvRepreneur['demarche']);
return $this->pf->generatePDFviewBrowser(
'templates_pdf/annuaires/repreneurs/repreneurs_cv_details.html.twig',
[
'lang' => $lang,
'id' => $cvRepreneur['idRepreneur'],
'nom' => $cvRepreneur['nom'],
'prenom' => $cvRepreneur['prenom'],
'telephone' => $cvRepreneur['telephone'],
'email' => $cvRepreneur['email'],
'adresse' => $cvRepreneur['adresse'],
'ville' => $cvRepreneur['ville'],
'age' => $cvRepreneur['age'],
'formation' => $cvRepreneur['formation'],
'parcoursProfessionnel' => $cvRepreneur['parcoursProfessionnel'],
'competencesRecherchees' => $cvRepreneur['competencesRecherchees'],
'titreSocieteRecherchee' => $cvRepreneur['titreSocieteRecherchee'],
'secteurActiviteRecherche' => $cvRepreneur['secteurActiviteRecherche'],
'descriptionSocieteRecherchee' => $cvRepreneur['descriptionSocieteRecherchee'],
'idNomLocalisationsRecherchees' => $cvRepreneur['idNomLocalisationsRecherchees'],
'valeurMinEntreprise' => $cvRepreneur['valeurMinEntreprise'],
'valeurMaxEntreprise' => $cvRepreneur['valeurMaxEntreprise'],
'montantApport' => $cvRepreneur['montantApport'],
'demarche' => $demarche,
'coordonnees' => $coordonnees,
'annee_passee' => $annee_passee
],
'cv_repreneur',
'cv_repreneur_title'
);
}
private function serializeParams($parametres)
{
$string_params = "";
foreach ($parametres as $name => $value) {
if ($name != "rechercher" && $name != "type" && $name != "array_localisation") {
if ($string_params == "") {
$string_params .= $name."=".$value;
} else {
$string_params .= "&".$name."=".$value;
}
}
}
return $string_params;
}
/**
* @param Request $request
* @param type $codePays
* @return Response
*/
public function deposezProfil(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
return new RedirectResponse('/compte?module=compte&action=profil_repreneur');
}
/**
* @param Request $request
* @param type $codePays
* @return Response
*/
public function modifierProfil(Request $request, $codePays): Response {
if(!$this->getUser()){ // non authentifié
return new RedirectResponse('/?authFrom=modifier-profil-repreneur');
}
$cv = $this->em->getRepository(AnnuaireRepreneurs::class)->findOneBy(array("login"=>$this->getUser()->_get("login_utilisateur")));
if (!empty($cv)) {
return new RedirectResponse('compte/cv_repreneur/referencer');
}
return new RedirectResponse('/');
}
/**
* @param Request $request
* @param type $codePays
* @return Response
*/
public function conserverProfil(Request $request, $codePays): Response {
if(!$this->getUser()){ // non authentifié
return new RedirectResponse('/?authFrom=conserver-profil-repreneur');
}
$cv = $this->em->getRepository(AnnuaireRepreneurs::class)->findOneBy(array("login"=>$this->getUser()->_get("login_utilisateur")));
if (!empty($cv)) {
if ($cv->getModeProfil()!="publique") {
return new RedirectResponse('compte/referencer');
}
else{
$cv->setDateParution(date("Ymd"));
$cv->setDateMiseAJour(date("Ymd"));
$cv->setRelanceMiseAJour("");
$cv->setDateRelance("");
$this->em->persist($cv);
$this->em->flush();
}
return $this->render('annuaires/repreneurs/conserver_cv.html.twig', [
]);
}
return new RedirectResponse('/');
}
/**
* @param Request $request
* @param type $codePays
* @return Response
*/
public function supprimerProfil(Request $request, $codePays): Response {
if(!$this->getUser()){ // non authentifié
return new RedirectResponse('/?authFrom=supprimer-profil-repreneur');
}
$cv = $this->em->getRepository(AnnuaireRepreneurs::class)->findOneBy(array("login"=>$this->getUser()->_get("login_utilisateur")));
if (!empty($cv)) {
return $this->render('annuaires/repreneurs/supprimer_cv.html.twig', [
]);
}
return new RedirectResponse('/');
}
/**
* @param Request $request
* @param type $codePays
* @return Response
*/
public function confirmeSuppressionProfil(Request $request, $codePays): Response {
if(!$this->getUser()){ // non authentifié
return new RedirectResponse('/?authFrom=supprimer-profil-repreneur');
}
$cv = $this->em->getRepository(AnnuaireRepreneurs::class)->findOneBy(array("login"=>$this->getUser()->_get("login_utilisateur")));
if (!empty($cv)) {
$this->em->remove($cv);
$this->em->flush();
return $this->render('annuaires/repreneurs/confirme_uppression_cv.html.twig', [
]);
}
return new RedirectResponse('/');
}
}