<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller;
use App\Services\Annonces\Elites\AbstractConstProfilsStrategiques as ProfilsConst;
use App\Entity\AnnoncesVendeur;
use App\Entity\Localisations;
use App\Entity\Alertes;
use App\Helper\Utils;
use App\Services\Mailer;
use App\Twig\TranslationExtension;
use App\Services\ManagerEntity\ServicesPrestataireManagers;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\AnnoncesAcheteur;
use App\Services\ManagerEntity\SecteursActiviteManagers;
use App\Services\ManagerEntity\AnnoncesManagers;
use Symfony\Component\Form\Extension\Core\Type\ButtonType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Forms;
use Doctrine\ORM\EntityManagerInterface;
use App\Services\ManagerEntity\AlertesManagers;
use App\Services\ManagerEntity\LocalisationsManagers;
use App\Services\Encryptage\AesEncrytageStrategy;
use App\Entity\AnnoncesVendeurComplementPrixCession;
use App\Form\Type\LaCoteFusacq\Etape1;
use App\Form\Type\LaCoteFusacq\Etape2;
use App\Form\Type\LaCoteFusacq\Etape3;
use App\Form\Type\LaCoteFusacq\Etape4;
use App\Form\Type\LaCoteFusacq\Etape5;
use App\Repository\StatistiquesSecteursActiviteRepository;
use App\Repository\HistoriqueStatsSecteursRepository;
use App\Repository\SecteursActiviteRepository;
use App\Services\PDFGenerator;
use App\Repository\CoteFusacqBonusRepository;
use App\Entity\CoteFusacqBonus;
use App\Services\Annonces\CoteFusacq\CalculBonus;
use App\Services\MetaTag;
use App\Services\ManagerEntity\DroitsAccesManagers;
use App\Services\Annonces\Elites\RechercheElite;
use App\Helper\Statistiques;
use App\Services\LogMarketingProvider;
class AnnoncesController extends EntityUsingController
{
/**
* @var Mailer
*/
private $mailer;
/**
* @var ParameterBagInterface
*/
private $params;
/**
* @var ServicesPrestataireManagers
*/
private $spm;
/**
* @var string
*/
private $dns_fusacq;
/**
* @var AnnoncesManagers
*/
private $am;
/**
* @var LocalisationsManagers
*/
private $lm;
/**
* @var SecteursActiviteManagers
*/
private $sm;
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @var LogMarketingProvider
*/
private $lmp;
public function __construct(Mailer $mailer, ParameterBagInterface $params, ServicesPrestataireManagers $spm, AnnoncesManagers $am, EntityManagerInterface $em, LocalisationsManagers $lm, SecteursActiviteManagers $sm,MetaTag $metaTag, DroitsAccesManagers $dam, LogMarketingProvider $lmp)
{
$this->mailer = $mailer;
$this->params = $params;
$this->spm = $spm;
$this->dns_fusacq = $params->get('app.DNS')['FUSACQ'];
$this->am = $am;
$this->em = $em;
$this->lm = $lm;
$this->sm = $sm;
$this->metaTag = $metaTag;
$this->dam = $dam;
$this->lmp = $lmp;
}
/**
* @param $lang
* @param $codePays
* @param $idAnnonce
*
* @return mixed
*/
public function partager(Request $request, TranslationExtension $translationExtension, $lang, $codePays, $idAnnonce, $typeAnnonce, $from)
{
if ($request->isMethod('post')) {
$currentUri = $request->headers->get('referer');
$currentUri = str_replace("partager=1", "", $currentUri);
$error = false;
$idAnnonce = $request->get('id_annonce');
if (!$idAnnonce) {
$this->addFlash('error', $translationExtension->translate("une erreur s'est produite, veuillez réessayer", $lang, '', 'M', ''));
$error = true;
}
$emailDestinataire = trim($request->get('email_destinataire'));
if (!$emailDestinataire) {
$this->addFlash('error', $translationExtension->translate("email du destinataire obligatoire", $lang, '', 'M', ''));
$error = true;
}
$emailExpediteur = trim($request->get('email_expediteur'));
if (!$emailExpediteur) {
$this->addFlash('error', $translationExtension->translate("email de l'expéditeur obligatoire", $lang, '', 'M', ''));
$error = true;
}
$nomPrenom = trim($request->get('nom_prenom'));
if (!$nomPrenom) {
$this->addFlash('error', $translationExtension->translate("nom et prénom obligatoires", $lang, '', 'M', ''));
$error = true;
}
$commentaire = $request->get('commentaire');
$captcha = $request->get('g-recaptcha-response');
if (!$captcha) {
$this->addFlash('error', $translationExtension->translate("validation captcha obligatoire", $lang, '', 'M', ''));
$error = true;
} else {
$secretKey = $this->getParameter('RECAPTCHA_PRIVATE_KEY');
$url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secretKey) . '&response=' . urlencode($captcha);
$response = file_get_contents($url);
$responseKeys = json_decode($response,true);
if (!$responseKeys["success"]) {
$this->addFlash('error', $translationExtension->translate("captcha invalide", $lang, '', 'M', ''));
$error = true;
}
}
if ($error) {
return $this->redirect($currentUri);
}
$subject = $translationExtension->translate('cette annonce sur Fusacq me semble intéressante', $lang, '', 'M', '');
if ('V' == $typeAnnonce) {
//$annonce = $this->getDoctrine()->getManager()->getRepository(AnnoncesVendeur::class)->getAnnonceArrayByIdAnnonce($idAnnonce);
$annonce = $this->am->getAnnonceVendeurArrayByIdAnnonce($idAnnonce);
$expertRandom = $this->spm->getAnnonceVendeurRandomByLocalisation(
Utils::getLocalisationPlusPrecisPossible($annonce['id_pays'], $annonce['id_region'])
);
$lienAnnonce = $this->generateUrl('reprendre_entreprise_details_annonce_vendeur', [
'slug' => Utils::slugify($annonce['titre_annonce']),
'nomLocalisation' => $annonce['nom_localisation_slug'],
'idAnnonce' => $idAnnonce,
'codePays' => $codePays
]);
} elseif ('A' == $typeAnnonce) {
//$annonce = $this->getDoctrine()->getManager()->getRepository(AnnoncesAcheteur::class)->getAnnonceArrayByIdAnnonce($idAnnonce);
$annonce = $this->am->getAnnonceAcheteurArrayByIdAnnonce($idAnnonce);
$expertRandom = $this->spm->getRandomExpertByAnnonceAcheteurLocalisation(
Utils::getLocalisationPlusPrecisPossible($annonce['id_pays'], $annonce['id_region']), 2
);
$lienAnnonce = $this->generateUrl('vendre_entreprise_annonce_acquisition_details', [
'slug' => Utils::slugify($annonce['titre_annonce']),
'nomLocalisation' => $annonce['nom_localisation_slug'],
'idAnnonce' => $idAnnonce,
'codePays' => $codePays
]);
}
$nomRegion = '';
$localisationsFromDB = $this->getDoctrine()->getManager()->getRepository(Localisations::class)
->getNomLocalisationById(Utils::getLocalisationPlusPrecisPossible($annonce['id_pays'], $annonce['id_region']));
if (2 == count($localisationsFromDB)) { // si localisation departement+localisation pays alors on combine les deux
$nomRegion = $localisationsFromDB[1]['nom_localisation'].', '.$localisationsFromDB[0]['nom_localisation'];
}
if (1 == count($localisationsFromDB)) {
$nomRegion = $localisationsFromDB[0]['nom_localisation'];
}
$varTemplate = [
'commentaire' => $commentaire,
'nomRegion' => ($nomRegion) ? $nomRegion : '',
'nomPrenom' => $nomPrenom,
'emailExpediteur' => $emailExpediteur,
'emailDestinataire' => $emailDestinataire,
'annonce' => (isset($annonce) ? $annonce : []),
'expertRandom' => (isset($expertRandom) ? $expertRandom : []),
'lang' => $lang,
'typeAnnonce' => $typeAnnonce,
'lienAnnonce' => $lienAnnonce,
'dns_fusacq' => $this->dns_fusacq
];
$this->mailer->sendmail(
Mailer::$senderAdress['notification'],
$emailDestinataire,
null,
null,
$subject,
null,
null,
'mails/templates/template_suggestion_FUSACQ.html.twig',
$varTemplate,
null
);
$this->addFlash('success', $translationExtension->translate("votre message a bien été envoyé", $lang, '', 'M', ''));
return $this->redirect($currentUri);
}
// Couleur selon template
if (1 == $from) { // reprendre une entreprise
$classColor1 = "bleu";
$classColor2 = "color_bleuclair";
$classColor3 = "btn-bleu";
} elseif (2 == $from) { // vendre une entreprise
$classColor1 = "vert";
$classColor2 = "vert";
$classColor3 = "btn-vert";
} elseif (3 == $from) { // ouvrir-capital
$classColor1 = "orange-new";
$classColor2 = "orange-new";
$classColor3 = "btn-orange-new";
} else {
$classColor1 = "bleu";
$classColor2 = "color_bleuclair";
$classColor3 = "btn-bleu";
}
$publicKey = $this->getParameter('RECAPTCHA_PUBLIC_KEY');
return $this->render(
'annonces/fragments/partager.html.twig',
[
'lang' => $lang,
'codePays' => $codePays,
'idAnnonce' => $idAnnonce,
'typeAnnonce' => $typeAnnonce,
'classColor1' => $classColor1,
'classColor2' => $classColor2,
'classColor3' => $classColor3,
'RECAPTCHA_PUBLIC_KEY' => $publicKey
]
);
}
public function alertes(Request $request, TranslationExtension $translationExtension, AlertesManagers $alm, $codePays)
{
$lang = $request->getSession()->get('lang');
$user = $this->getUser();
if (!$user) {
$this->addFlash('error', $translationExtension->translate("veuillez vous identifier pour consulter cette page", $lang, '', 'M', ''));
$uri = $request->server->get('HTTP_REFERER'); // redirect to some page
if (empty($uri)) {
return new RedirectResponse('/');
}
return new RedirectResponse($uri); // redirect to some page
}
$alertes = $alm->getUserAlertes($user->_get('login_utilisateur'), $lang);
$metaTag = $this->metaTag
->setTitle("Vos alertes")
->setDescription("Vos alertes");
return $this->render(
'annonces/alertes/alertes.html.twig',
[
'metaTag' => $metaTag,
'alertes' => $alertes
]
);
}
public function formAlerte(Request $request, TranslationExtension $translationExtension, SecteursActiviteManagers $secteursActiviteManager, $type, $idAlerte = null, $codePays)
{
$lang = $request->getSession()->get('lang');
$user = $this->getUser();
if (!$user) {
$this->addFlash('error', $translationExtension->translate("veuillez vous identifier pour consulter cette page", $lang, '', 'M', ''));
$uri = $request->server->get('HTTP_REFERER'); // redirect to some page
if (empty($uri)) {
return new RedirectResponse('/');
}
return new RedirectResponse($uri); // redirect to some page
}
if ($request->isMethod('post')) {
$parametres = $request->request->all();
if (trim($parametres['titre_alerte'])) {
$titre_alerte = trim($parametres['titre_alerte']);
} else {
$titre_alerte = "Alerte ";
if ($type == "vente") {
$titre_alerte .= "de cession";
} else {
$titre_alerte .= "d'acquisition";
}
}
// ========= SECTEUR D'ACTIVITE =========
$id_secteur_activite = $parametres['id_secteur'] ? $parametres['id_secteur'] : ",tous,";
// Si l'utilisateur a selectionné un secteur mais pas ajouté dans la liste, on le rajoute
if (isset($parametres['id_secteur_activite3']) && $parametres['id_secteur_activite3'] != "0" && $parametres['id_secteur_activite3'] != "") {
if ($id_secteur_activite == ",tous,") {
$id_secteur_activite = ',' . $parametres['id_secteur_activite3'] . ",";
} else {
$id_secteur_activite .= "," . $parametres['id_secteur_activite3'] . ",";
}
} elseif (isset($parametres['id_secteur_activite2']) && $parametres['id_secteur_activite2'] != "0" && $parametres['id_secteur_activite2'] != "") {
if ($id_secteur_activite == ",tous,") {
$id_secteur_activite = ',' . $parametres['id_secteur_activite2'] . ",";
} else {
$id_secteur_activite .= "," . $parametres['id_secteur_activite2'] . ",";
}
} elseif (isset($parametres['id_secteur_activite']) && $parametres['id_secteur_activite'] != "0" && $parametres['id_secteur_activite'] != "") {
if ($id_secteur_activite == ",tous,") {
$id_secteur_activite = ',' . $parametres['id_secteur_activite'] . ",";
} else {
$id_secteur_activite .= "," . $parametres['id_secteur_activite'] . ",";
}
}
// ========= FIN SECTEUR D'ACTIVITE =========
// ========= LOCALISATION =========
$id_localisations = $parametres['id_localisation'] ? $parametres['id_localisation'] : ",tous,";
// Si l'utilisateur a selectionné une localisation mais pas ajouté dans la liste, on le rajoute
if (isset($parametres['id_departement']) && $parametres['id_departement'] != "0" && $parametres['id_departement'] != "") {
if ($id_localisations == ",tous,") {
$id_localisations = ',' . $parametres['id_departement'] . ",";
} else {
$id_localisations .= "," . $parametres['id_departement'] . ",";
}
} elseif (isset($parametres['id_region']) && $parametres['id_region'] != "0" && $parametres['id_region'] != "") {
if ($id_localisations == ",tous,") {
$id_localisations = ',' . $parametres['id_region'] . ",";
} else {
$id_localisations .= "," . $parametres['id_region'] . ",";
}
} elseif (isset($parametres['id_pays']) && $parametres['id_pays'] != "0" && $parametres['id_pays'] != "") {
if ($id_localisations == ",tous,") {
$id_localisations = ',' . $parametres['id_pays'] . ",";
} else {
$id_localisations .= "," . $parametres['id_pays'] . ",";
}
}
// ========= FIN LOCALISATION =========
if ($type == "vente") {
// $nb_personnes = $parametres['nb_personnes'];
// switch ($nb_personnes) {
// case '1':
// $nb_personnes_min = null;
// $nb_personnes_max = "9";
// break;
// case '2':
// $nb_personnes_min = "10";
// $nb_personnes_max = "50";
// break;
// case '3':
// $nb_personnes_min = "50";
// $nb_personnes_max = "100";
// break;
// case '4':
// $nb_personnes_min = "100";
// $nb_personnes_max = "200";
// break;
// case '5':
// $nb_personnes_min = "200";
// $nb_personnes_max = null;
// break;
// default:
// $nb_personnes_min = null;
// $nb_personnes_max = null;
// break;
// }
$ca = explode(";", $parametres['ca']);
$ca_min = $ca[0] != "0" ? $ca[0].".0000" : null;
$ca_max = $ca[1] != "20000000" ? $ca[1].".0000" : null;
$nb_p = explode(";", $parametres['nb_p']);
$nb_personnes_min = ( $nb_p[0])??1;
$nb_personnes_max = ( $nb_p[1])??NULL;
$redressement_judiciaire = $parametres['redressement_judiciaire'] ? $parametres['redressement_judiciaire'] : "indifferent";
$type_cession = $parametres['type_cession'] ? strtolower($parametres['type_cession']) : "indifferent";
} else {
$nb_personnes_min = null;
$nb_personnes_max = null;
$ca_min = null;
$ca_max = null;
$redressement_judiciaire = null;
$type_cession = null;
}
if ($idAlerte) {
$alerte = $this->getDoctrine()->getRepository(Alertes::class)->findOneBy(['id_alerte' => $idAlerte]);
// On verifie que l'alerte existe et qu'elle appartient à l'utilisateur
if (!$alerte || $alerte->__get('login_utilisateur') != $user->_get('login_utilisateur')) {
$this->addFlash('error', $translationExtension->translate("une erreur s'est produite, veuillez réessayer", $lang, '', 'M', ''));
return $this->redirectToRoute('alertes', ['codePays' => $codePays]);
}
} else {
$alerte = new Alertes();
}
$alerte->__set("type_annonce_surveillee", $type);
$alerte->__set("titre_alerte", $titre_alerte);
$alerte->__set("id_secteur_activite", $id_secteur_activite);
$alerte->__set("id_localisations", $this->removeLocalisationLetter($id_localisations));
$alerte->__set("nb_personnes_min", $nb_personnes_min);
$alerte->__set("nb_personnes_max", $nb_personnes_max);
$alerte->__set("ca_min", $ca_min);
$alerte->__set("ca_max", $ca_max);
$alerte->__set("redressement_judiciaire", $redressement_judiciaire);
$alerte->__set("type_cession", $type_cession);
if (!$idAlerte) {
$alerte->__set("login_utilisateur", $user->_get('login_utilisateur'));
$alerte->__set("activation_sur_fusacqbuzz", "oui");
$alerte->__set("date_creation", date('Ymd'));
}
$identifiant_profil = $parametres['identifiant_profil']??NULL;
$alerte->__set("identifiant_profil", $identifiant_profil);
$this->em->persist ( $alerte );
$this->em->flush ( $alerte );
if ($alerte->__get('id_alerte')) {
if ($idAlerte) {
$this->addFlash('success', $translationExtension->translate("votre alerte a bien été mise à jour", $lang, '', 'M', ''));
} else {
$this->addFlash('success', $translationExtension->translate("votre alerte a bien été créée", $lang, '', 'M', ''));
}
} else {
$this->addFlash('error', $translationExtension->translate("une erreur s'est produite, veuillez réessayer", $lang, '', 'M', ''));
}
return $this->redirectToRoute('alertes', ['codePays' => $codePays]);
} else {
if ($idAlerte) {
$alerte = $this->getDoctrine()->getRepository(Alertes::class)->findOneBy(['id_alerte' => $idAlerte]);
// On verifie que l'alerte existe et qu'elle appartient à l'utilisateur
if (!$alerte || $alerte->__get('login_utilisateur') != $user->_get('login_utilisateur')) {
$this->addFlash('error', $translationExtension->translate("une erreur s'est produite, veuillez réessayer", $lang, '', 'M', ''));
return $this->redirectToRoute('alertes', ['codePays' => $codePays]);
}
$data = $alerte;
$action = "modifier_alerte";
$params = ['type' => $type, 'idAlerte' => $idAlerte, 'codePays' => $codePays];
} else {
$data = [];
$action = "creer_alerte";
$params = ['type' => $type, 'codePays' => $codePays];
}
$parametres = $this->prepareAlerteParameters($data);
$pays = $this->am->donne_option_select_pays_annonce_vente();
$regions = [];
$departements = [];
$type_cession = [
$translationExtension->translate('indifferent', $lang, '', 'M', '') => '',
$translationExtension->translate('majoritaire', $lang, '', 'M', '') => 'majoritaire',
$translationExtension->translate('minoritaire', $lang, '', 'M', '') => 'minoritaire',
];
$secteurs_activite1 = $secteursActiviteManager->donne_option_select_secteurs_activite_niveau_1();
$secteurs_activite2 = [];
$secteurs_activite3 = [];
/*if (isset($parametres['id_secteur_activite'])) {
$secteurs_activite2 = $secteursActiviteManager->donne_option_select_secteurs_activite_enfant_by_secteur_activite_parent($parametres['id_secteur_activite']);
$show_secteur_niveau_2 = true;
} else {
$secteurs_activite2 = [];
$show_secteur_niveau_2 = false;
}
if (isset($parametres['id_secteur_activite2'])) {
$secteurs_activite3 = $secteursActiviteManager->donne_option_select_secteurs_activite_enfant_by_secteur_activite_parent($parametres['id_secteur_activite2']);
$show_secteur_niveau_3 = true;
} else {
$secteurs_activite3 = [];
$show_secteur_niveau_3 = false;
}*/
$show_secteur_niveau_2 = false;
$show_secteur_niveau_3 = false;
/*$nb_personnes = [
$translationExtension->translate('indifferent', $lang, '', 'M', '') => '',
$translationExtension->translate('< 10 personnes', $lang, '', 'M', '') => '1',
$translationExtension->translate('10 - 50 personnes', $lang, '', 'M', '') => '2',
$translationExtension->translate('50 - 100 personnes', $lang, '', 'M', '') => '3',
$translationExtension->translate('100 - 200 personnes', $lang, '', 'M', '') => '4',
$translationExtension->translate('> 200 personnes', $lang, '', 'M', '') => '5',
];*/
$redressement_judiciaire = [
$translationExtension->translate('indifferent', $lang, '', 'M', '') => '', // value = indifferent
$translationExtension->translate('non', $lang, '', 'M', '') => 'non',
$translationExtension->translate('oui', $lang, '', 'M', '') => 'oui',
];
if (!$parametres['titre_alerte']) {
if ($type == "achat") {
$parametres['titre_alerte'] = "Alerte d’acquisition";
} else {
$parametres['titre_alerte'] = "Alerte de cession";
}
}
$formFactory = Forms::createFormFactoryBuilder()->getFormFactory();
$form = $formFactory->createNamedBuilder('')
->add('titre_alerte', TextType::class, [
'required' => true,
'data' => $parametres['titre_alerte']
])
->add('id_pays', ChoiceType::class, [
'choices' => $pays,
])
->add('id_region', ChoiceType::class, [
'choices' => $regions,
])
->add('id_departement', ChoiceType::class, [
'choices' => $departements,
])
->add('id_localisation', HiddenType::class, [
'data' => $parametres['id_localisations'],
])
->add('ajouter_localisation', ButtonType::class)
->add('id_secteur_activite', ChoiceType::class, [
'choices' => $secteurs_activite1,
'data' => ''
])
->add('id_secteur_activite2', ChoiceType::class, [
'choices' => $secteurs_activite2,
'data' => ''
])
->add('id_secteur_activite3', ChoiceType::class, [
'choices' => $secteurs_activite3,
'data' => ''
])
->add('id_secteur', HiddenType::class, [
'data' => $parametres['id_secteur_activite'],
])
->add('ajouter_secteur_activite', ButtonType::class);
if ($type == "vente") {
$form
->add('ca', TextType::class, ['required' => false])
// ->add('nb_personnes', ChoiceType::class, [
// 'choices' => $nb_personnes,
// 'required' => false,
// 'data' => $parametres['nb_personnes']
// ])
->add('nb_p', TextType::class, ['required' => false])
->add('redressement_judiciaire', ChoiceType::class, [
'required' => false,
'choices' => $redressement_judiciaire,
'choice_attr' => function ($choice) {
return ['class' => 'form-check-input'];
},
'expanded' => true,
'multiple' => false,
'data' => $parametres['redressement_judiciaire']
])
->add('type_cession', ChoiceType::class, [
'required' => false,
'choices' => $type_cession,
'choice_attr' => function ($choice) {
return ['class' => 'form-check-input'];
},
'expanded' => true,
'multiple' => false,
'data' => $parametres['type_cession']
])
->add('identifiant_profil', HiddenType::class,
[
'attr' =>[
"multi-value" => $parametres['identifiant_profil']??null
],
'data'=>$parametres['identifiant_profil']??null
]
)
;
$form ->add('ajouter_identifiant_profil', ButtonType::class);
}
$form = $form->add('enregistrer', SubmitType::class)
->setAction($this->generateUrl($action, $params))
->setMethod('POST')
->getForm();
$profils = ProfilsConst::listProfilsStrategiquesByCategory();
$metaTag = ($action =='modifier_alerte')? $this->metaTag ->setTitle("Modifier alerte") ->setDescription("Modifier alerte"):$this->metaTag ->setTitle("Créer alerte") ->setDescription("Créer alerte");
$accesElite = $this->dam->checkIfThisUserHasDroitService($this->getUser(), RechercheElite::CODE_SERVICE); // ELITE
return $this->render(
"annonces/alertes/form_alerte_$type.html.twig",
[
'type' => $type,
'parametres' => $parametres,
'show_secteur_niveau_2' => $show_secteur_niveau_2,
'show_secteur_niveau_3' => $show_secteur_niveau_3,
'idAlerte' => $idAlerte,
"profils" => $profils,
"alerte"=>$alerte??NULL,
"data" => [
"elite"=>$accesElite,
"action"=>$action??NULL
],
'metaTag' => $metaTag,
'form' => $form->createView()
]
);
}
}
public function complementAnnonceVendeurSuiteRetraitEtape1(Request $request, AesEncrytageStrategy $aes, StatistiquesSecteursActiviteRepository $statistiquesRepo, HistoriqueStatsSecteursRepository $historiquesStatsRepo, SecteursActiviteRepository $secteursRepo, CoteFusacqBonusRepository $cfr, $codePays) {
$code = $request->query->get('ref');
$version = $request->query->get('version');
// Si pas de code
if (!$code) {
return $this->redirectToRoute('index');
}
$id_annonce_vendeur = $aes->decryptage($code);
// Si $id_annonce_vendeur pas conforme
if (!is_numeric($id_annonce_vendeur)) {
return $this->redirectToRoute('index');
}
$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
// Si annonce introuvable
if (!$annonce) {
return $this->redirectToRoute('index');
}
$user = $this->getUser();
// Si pas authentifié
if (!$user) {
$this->addFlash("error", "Veuillez-vous authentifier");
return $this->redirectToRoute('index');
}
// Si l'annonce n'appartient pas à l'utilisateur
if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
return $this->redirectToRoute('index');
}
// On met la relance cote_fusacq à traité
$annonce->_set('relance_cote_fusacq', 'traité');
$this->em->persist($annonce);
$this->em->flush();
$prix_cession = number_format((int) $annonce->_get('prix_cession'), 0, ",", " ");
$annoncesVendeurComplementPrixCession = $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
if (!$annoncesVendeurComplementPrixCession) {
$annoncesVendeurComplementPrixCession = new AnnoncesVendeurComplementPrixCession();
$annoncesVendeurComplementPrixCession->__set('dateCreation', date('Ymd'));
$annoncesVendeurComplementPrixCession->__set('idAnnonceVendeur', $id_annonce_vendeur);
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// On ajoute un log action pour la création d'un AnnoncesVendeurComplementPrixCession (Transaction de référence)
// LOG ID 132 = Création Transaction de référence (La cote FUSACQ)
$this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(132), $user->_get('type_utilisateur'), $id_annonce_vendeur);
} elseif ($annoncesVendeurComplementPrixCession->__get('statut') == "en_cours" || $annoncesVendeurComplementPrixCession->__get('statut') == "abandon") {
// On met à jour la dateCreation pour actualiser les bonus à Ymd
$annoncesVendeurComplementPrixCession->__set('dateCreation', date('Ymd'));
// LOG ID 132 = Création Transaction de référence (La cote FUSACQ)
$this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(132), $user->_get('type_utilisateur'), $id_annonce_vendeur);
}
if ($annoncesVendeurComplementPrixCession->__get('statut') != "vendue") {
// On enregistre le statut "vendue" car l'utilisateur a cliqué sur "oui" dans le mail
$annoncesVendeurComplementPrixCession->__set('statut', "vendue");
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
}
// Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
/*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
}*/
$form = $this->createFormForStep(1, $annoncesVendeurComplementPrixCession);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// Redirection vers l'étape 2
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_2', ['codePays' => $codePays, 'ref' => $code]);
} elseif ($form->isSubmitted()) {
// Annule les changements trackés par Doctrine
$this->em->refresh($annoncesVendeurComplementPrixCession);
}
// ===================== ELEMENTS POUR LE BONUS =====================
// On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
$bonus = $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
$update_bonus = false;
if (!$bonus) {
$bonus = new CoteFusacqBonus();
$bonus->__set('idAnnonceVendeur', $id_annonce_vendeur);
$bonus->__set('dateCreation', date('Ymd'));
$update_bonus = true;
}
if (!$bonus->__get('idSecteurActivite')) {
$bonus->__set('idSecteurActivite', $annonce->_get('id_secteur_activite'));
$update_bonus = true;
}
if ($bonus->__get('nomSecteurActivite')) {
$nom_secteur_activite = $bonus->__get('nomSecteurActivite');
} else {
$nom_secteur_activite = $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
$bonus->__set('nomSecteurActivite', $nom_secteur_activite);
$update_bonus = true;
}
if ($bonus->__get('anneeVente')) {
$annee_vente = $bonus->__get('anneeVente');
} else {
$annee_vente = $annoncesVendeurComplementPrixCession->__get('dateCreation') ? substr($annoncesVendeurComplementPrixCession->__get('dateCreation'), 0, 4) : date('Y');
$bonus->__set('anneeVente', $annee_vente);
$update_bonus = true;
}
if ($bonus->__get('classementAnnee')) {
$classement_annee = $bonus->__get('classementAnnee');
} else {
$nb_annonces_vendues = $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("annee", $annoncesVendeurComplementPrixCession->__get('dateCreation'));
$classement_annee = $nb_annonces_vendues + 1;
$bonus->__set('classementAnnee', $classement_annee);
$update_bonus = true;
}
if ($bonus->__get('classement1an')) {
$classement_1an = $bonus->__get('classement1an');
} else {
$nb_annonces_vendues = $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("12mois", $annoncesVendeurComplementPrixCession->__get('dateCreation'));
$classement_1an = $nb_annonces_vendues + 1;
$bonus->__set('classement1an', $classement_1an);
$update_bonus = true;
}
if ($bonus->__get('classement10ans')) {
$classement_10ans = $bonus->__get('classement10ans');
} else {
$nb_annonces_vendues = $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("120mois", $annoncesVendeurComplementPrixCession->__get('dateCreation'));
$classement_10ans = $nb_annonces_vendues + 1;
$bonus->__set('classement10ans', $classement_10ans);
$update_bonus = true;
}
if ($bonus->__get('nbAnnonce12mois') !== null) {
$nb_annonce_12mois = $bonus->__get('nbAnnonce12mois');
} else {
$stats_12mois = $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 12]);
$nb_annonce_12mois = $stats_12mois->getNb_annonces_deposees();
$bonus->__set('nbAnnonce12mois', $nb_annonce_12mois);
$update_bonus = true;
}
$reference_nb_annonces_diffusees = $nb_annonce_12mois;
if ($bonus->__get('nbAnnonce24mois') !== null) {
$nb_annonce_24mois = $bonus->__get('nbAnnonce24mois');
} else {
$stats_24mois = $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 24]);
$nb_annonce_24mois = $stats_24mois->getNb_annonces_deposees();
$bonus->__set('nbAnnonce24mois', $nb_annonce_24mois);
$update_bonus = true;
}
// Si nb_annonce identique à reference, on n'affiche pas la donnée
if ($nb_annonce_24mois == $reference_nb_annonces_diffusees) {
$show_nb_annonce_24mois = false;
} else {
$show_nb_annonce_24mois = true;
$reference_nb_annonces_diffusees = $nb_annonce_24mois;
}
if ($bonus->__get('nbAnnonce60mois') !== null) {
$nb_annonce_60mois = $bonus->__get('nbAnnonce60mois');
} else {
$stats_60mois = $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 60]);
$nb_annonce_60mois = $stats_60mois->getNb_annonces_deposees();
$bonus->__set('nbAnnonce60mois', $nb_annonce_60mois);
$update_bonus = true;
}
// Si nb_annonce identique à reference, on n'affiche pas la donnée
if ($nb_annonce_60mois == $reference_nb_annonces_diffusees) {
$show_nb_annonce_60mois = false;
} else {
$show_nb_annonce_60mois = true;
$reference_nb_annonces_diffusees = $nb_annonce_60mois;
}
if ($bonus->__get('nbAnnonce120mois') !== null) {
$nb_annonce_120mois = $bonus->__get('nbAnnonce120mois');
} else {
$stats_120mois = $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 120]);
$nb_annonce_120mois = $stats_120mois->getNb_annonces_deposees();
$bonus->__set('nbAnnonce120mois', $nb_annonce_120mois);
$update_bonus = true;
}
// Si nb_annonce identique à reference, on n'affiche pas la donnée
if ($nb_annonce_120mois == $reference_nb_annonces_diffusees) {
$show_nb_annonce_120mois = false;
} else {
$show_nb_annonce_120mois = true;
$reference_nb_annonces_diffusees = $nb_annonce_120mois;
}
if ($bonus->__get('classementSecteurActivite')) {
$classement_secteur_activite = $bonus->__get('classementSecteurActivite');
} else {
if (!$stats_60mois) {
$stats_60mois = $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 60]);
}
$classement_secteur_activite = $stats_60mois->getRang_secteur_nb_annonces_deposees();
$bonus->__set('classementSecteurActivite', $classement_secteur_activite);
$update_bonus = true;
}
if ($bonus->__get('nbSecteurs3') !== null) {
$nb_secteurs_3 = $bonus->__get('nbSecteurs3');
} else {
$nb_secteurs_3 = $secteursRepo->donneNbSecteursParNiveau(3);
$bonus->__set('nbSecteurs3', $nb_secteurs_3);
$update_bonus = true;
}
if ($bonus->__get('nomSecteurActivite2')) {
$nom_secteur_activite_2 = $bonus->__get('nomSecteurActivite2');
} else {
$nom_secteur_activite_2 = $this->sm->getStringNomSecteurActiviteById(substr((string) $annonce->_get('id_secteur_activite'), 0, 3));
$bonus->__set('nomSecteurActivite2', $nom_secteur_activite_2);
$update_bonus = true;
}
if ($bonus->__get('classementSecteurActivite2')) {
$classement_secteur_activite_2 = $bonus->__get('classementSecteurActivite2');
} else {
$stats_60mois_secteur_2 = $statistiquesRepo->findOneBy(['id_secteur_activite' => substr((string) $annonce->_get('id_secteur_activite'), 0, 3), 'nb_mois' => 60]);
$classement_secteur_activite_2 = $stats_60mois_secteur_2->getRang_secteur_nb_annonces_deposees();
$bonus->__set('classementSecteurActivite2', $classement_secteur_activite_2);
$update_bonus = true;
}
if ($bonus->__get('nbSecteurs2') !== null) {
$nb_secteurs_2 = $bonus->__get('nbSecteurs2');
} else {
$nb_secteurs_2 = $secteursRepo->donneNbSecteursParNiveau(2);
$bonus->__set('nbSecteurs2', $nb_secteurs_2);
$update_bonus = true;
}
if ($bonus->__get('nbAnnoncesSecteurActivite2') !== null) {
$nb_annonces_secteur_activite_2 = $bonus->__get('nbAnnoncesSecteurActivite2');
} else {
$nb_annonces_secteur_activite_2 = $stats_60mois_secteur_2->getNb_annonces_deposees();
$bonus->__set('nbAnnoncesSecteurActivite2', $nb_annonces_secteur_activite_2);
$update_bonus = true;
}
if ($bonus->__get('anneesHistorique') && $bonus->__get('historiqueNbAnnoncesDeposees')) {
$historique = unserialize($bonus->__get('historiqueNbAnnoncesDeposees'));
$annees_historique = explode(",", $bonus->__get('anneesHistorique'));
} else {
$historique = [];
$annees_historique = [];
// On génère la date de début à 10 ans avant et 1 mois (car on veut 10 ans d'historique, et les stats du mois en cours ne sont pas encore disponibles)
$date = \DateTime::createFromFormat('Ym', substr($annoncesVendeurComplementPrixCession->__get('dateCreation'), 0, 6));
$mois = $date->format('m');
// Si pas Janvier, on retire 10 ans et 1 mois
if ($mois != "01") {
$date->sub(new \DateInterval('P10Y1M'));
// Sinon on retire 10 ans
} else {
$date->sub(new \DateInterval('P10Y'));
}
// Date au format YYYY-MM-DD
$date_calcul = $date->format('Y-m-01');
for ($i = 0; $i < 10; $i++) {
// On stock l'année
$annees_historique[] = substr($date_calcul, 0, 4);
$historique[$i] = $historiquesStatsRepo->getStatsBy($annonce->_get('id_secteur_activite'), 'nb_annonces_deposees', 12, $date_calcul);
// Ajoute 1 an
$date->add(new \DateInterval('P1Y'));
// Date au format YYYY-MM-DD
$date_calcul = $date->format('Y-m-01');
}
$bonus->__set('anneesHistorique', implode(",", $annees_historique));
$bonus->__set('historiqueNbAnnoncesDeposees', serialize($historique));
$update_bonus = true;
}
if ($update_bonus) {
$this->em->persist($bonus);
$this->em->flush();
}
// ==================== FIN ELEMENTS POUR LE BONUS ===================
return $this->render('annonces/complement-annonce-vendeur/etape1.html.twig', [
'id_annonce_vendeur' => $id_annonce_vendeur,
'prix_cession' => $prix_cession,
'form' => $form->createView(),
'nom_secteur_activite' => $nom_secteur_activite,
'annee_vente' => $annee_vente,
'classement_annee' => $classement_annee,
'classement_1an' => $classement_1an,
'classement_10ans' => $classement_10ans,
'nb_annonce_12mois' => $nb_annonce_12mois,
'nb_annonce_24mois' => $nb_annonce_24mois,
'nb_annonce_60mois' => $nb_annonce_60mois,
'nb_annonce_120mois' => $nb_annonce_120mois,
'show_nb_annonce_24mois' => $show_nb_annonce_24mois,
'show_nb_annonce_60mois' => $show_nb_annonce_60mois,
'show_nb_annonce_120mois' => $show_nb_annonce_120mois,
'classement_secteur_activite' => $classement_secteur_activite,
'nb_secteurs_3' => $nb_secteurs_3,
'nom_secteur_activite_2' => $nom_secteur_activite_2,
'classement_secteur_activite_2' => $classement_secteur_activite_2,
'nb_secteurs_2' => $nb_secteurs_2,
'nb_annonces_secteur_activite_2' => $nb_annonces_secteur_activite_2,
'historique' => $historique,
'annees_historique' => $annees_historique,
'version' => $version
]);
}
public function complementAnnonceVendeurSuiteRetraitEtape1bis(Request $request, AesEncrytageStrategy $aes, StatistiquesSecteursActiviteRepository $statistiquesRepo, HistoriqueStatsSecteursRepository $historiquesStatsRepo, SecteursActiviteRepository $secteursRepo, $codePays) {
$code = $request->query->get('ref');
// Si pas de code
if (!$code) {
return $this->redirectToRoute('index');
}
$id_annonce_vendeur = $aes->decryptage($code);
// Si $id_annonce_vendeur pas conforme
if (!is_numeric($id_annonce_vendeur)) {
return $this->redirectToRoute('index');
}
$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
// Si annonce introuvable
if (!$annonce) {
return $this->redirectToRoute('index');
}
$user = $this->getUser();
// Si pas authentifié
if (!$user) {
$this->addFlash("error", "Veuillez-vous authentifier");
return $this->redirectToRoute('index');
}
// Si l'annonce n'appartient pas à l'utilisateur
if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
return $this->redirectToRoute('index');
}
$annoncesVendeurComplementPrixCession = $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
// Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
if ($annoncesVendeurComplementPrixCession && $annoncesVendeurComplementPrixCession->isFullyCompleted()) {
return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
}
if (!$annoncesVendeurComplementPrixCession) {
$annoncesVendeurComplementPrixCession = new AnnoncesVendeurComplementPrixCession();
$annoncesVendeurComplementPrixCession->__set('dateCreation', date('Ymd'));
$annoncesVendeurComplementPrixCession->__set('idAnnonceVendeur', $id_annonce_vendeur);
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// On ajoute un log action pour la création d'un AnnoncesVendeurComplementPrixCession (Transaction de référence)
// LOG ID 134 = Clic Vente en cours Transaction de référence (La Cote FUSACQ)
$this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(134), $user->_get('type_utilisateur'), $id_annonce_vendeur);
}
// On enregistre le statut "en_cours" car l'utilisateur a cliqué sur "en cours" dans le mail
$annoncesVendeurComplementPrixCession->__set('statut', "en_cours");
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// On remet à zéro la relance cote_fusacq
//$annonce->_set('date_relance_cote_fusacq', null);
//$annonce->_set('relance_cote_fusacq', null);
//$this->em->persist($annonce);
//$this->em->flush();
// ===================== ELEMENTS POUR LE BONUS =====================
$nom_secteur_activite = $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
// statistiques secteurs activite
$nb_annonces_vendues = $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("annee", date('Ymd'));
$classement_annee = $nb_annonces_vendues + 1;
$stats_12mois = $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 12]);
$stats_24mois = $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 24]);
$stats_60mois = $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 60]);
$stats_120mois = $statistiquesRepo->findOneBy(['id_secteur_activite' => $annonce->_get('id_secteur_activite'), 'nb_mois' => 120]);
$classement_secteur_activite = $stats_60mois->getRang_secteur_nb_annonces_deposees();
$nb_secteurs_3 = $secteursRepo->donneNbSecteursParNiveau(3);
$nom_secteur_activite_2 = $this->sm->getStringNomSecteurActiviteById(substr((string) $annonce->_get('id_secteur_activite'), 0, 3));
$stats_60mois_secteur_2 = $statistiquesRepo->findOneBy(['id_secteur_activite' => substr((string) $annonce->_get('id_secteur_activite'), 0, 3), 'nb_mois' => 60]);
$classement_secteur_activite_2 = $stats_60mois_secteur_2->getRang_secteur_nb_annonces_deposees();
$nb_secteurs_2 = $secteursRepo->donneNbSecteursParNiveau(2);
$nb_annonces_secteur_activite_2 = $stats_60mois_secteur_2->getNb_annonces_deposees();
// ==================== FIN ELEMENTS POUR LE BONUS ===================
return $this->render('annonces/complement-annonce-vendeur/etape1bis.html.twig', [
'id_annonce_vendeur' => $id_annonce_vendeur,
'nom_secteur_activite' => $nom_secteur_activite,
'classement_annee' => $classement_annee,
'stats_12mois' => $stats_12mois,
'stats_24mois' => $stats_24mois,
'stats_60mois' => $stats_60mois,
'stats_120mois' => $stats_120mois,
'classement_secteur_activite' => $classement_secteur_activite,
'nb_secteurs_3' => $nb_secteurs_3,
'nom_secteur_activite_2' => $nom_secteur_activite_2,
'classement_secteur_activite_2' => $classement_secteur_activite_2,
'nb_secteurs_2' => $nb_secteurs_2,
'nb_annonces_secteur_activite_2' => $nb_annonces_secteur_activite_2,
]);
}
public function complementAnnonceVendeurSuiteRetraitEtape1ter(Request $request, AesEncrytageStrategy $aes, $codePays) {
$code = $request->query->get('ref');
// Si pas de code
if (!$code) {
return $this->redirectToRoute('index');
}
$id_annonce_vendeur = $aes->decryptage($code);
// Si $id_annonce_vendeur pas conforme
if (!is_numeric($id_annonce_vendeur)) {
return $this->redirectToRoute('index');
}
$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
// Si annonce introuvable
if (!$annonce) {
return $this->redirectToRoute('index');
}
$user = $this->getUser();
// Si pas authentifié
if (!$user) {
$this->addFlash("error", "Veuillez-vous authentifier");
return $this->redirectToRoute('index');
}
// Si l'annonce n'appartient pas à l'utilisateur
if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
return $this->redirectToRoute('index');
}
$annoncesVendeurComplementPrixCession = $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
// Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
if ($annoncesVendeurComplementPrixCession && $annoncesVendeurComplementPrixCession->isFullyCompleted()) {
return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
}
if (!$annoncesVendeurComplementPrixCession) {
$annoncesVendeurComplementPrixCession = new AnnoncesVendeurComplementPrixCession();
$annoncesVendeurComplementPrixCession->__set('dateCreation', date('Ymd'));
$annoncesVendeurComplementPrixCession->__set('idAnnonceVendeur', $id_annonce_vendeur);
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// On ajoute un log action pour la création d'un AnnoncesVendeurComplementPrixCession (Transaction de référence)
// LOG ID 135 = Clic Opération Abandonnée Transaction de référence (La Cote FUSACQ)
$this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(135), $user->_get('type_utilisateur'), $id_annonce_vendeur);
}
// On enregistre le statut "abandon" car l'utilisateur a cliqué sur "abandon" dans le mail
$annoncesVendeurComplementPrixCession->__set('statut', "abandon");
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// On abandonne la relance cote_fusacq
$annonce->_set('relance_cote_fusacq', 'abandon');
$this->em->persist($annonce);
$this->em->flush();
$nb_annonces_vendues = $this->em->getRepository(AnnoncesVendeur::class)->donne_nb_annonces_vendues_par_periode("annee", date('Ymd'));
$classement_annee = $nb_annonces_vendues + 1;
return $this->render('annonces/complement-annonce-vendeur/etape1ter.html.twig', [
'id_annonce_vendeur' => $id_annonce_vendeur,
'classement_annee' => $classement_annee
]);
}
public function complementAnnonceVendeurSuiteRetraitEtape2(Request $request, AesEncrytageStrategy $aes, StatistiquesSecteursActiviteRepository $statistiquesRepo, HistoriqueStatsSecteursRepository $historiquesStatsRepo, SecteursActiviteRepository $secteursRepo, CoteFusacqBonusRepository $cfr, CalculBonus $cb, $codePays) {
$code = $request->query->get('ref');
// Si pas de code
if (!$code) {
return $this->redirectToRoute('index');
}
$id_annonce_vendeur = $aes->decryptage($code);
// Si $id_annonce_vendeur pas conforme
if (!is_numeric($id_annonce_vendeur)) {
return $this->redirectToRoute('index');
}
$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
// Si annonce introuvable
if (!$annonce) {
return $this->redirectToRoute('index');
}
$user = $this->getUser();
// Si pas authentifié
if (!$user) {
$this->addFlash("error", "Veuillez-vous authentifier");
return $this->redirectToRoute('index');
}
// Si l'annonce n'appartient pas à l'utilisateur
if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
return $this->redirectToRoute('index');
}
$annoncesVendeurComplementPrixCession = $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
if (!$annoncesVendeurComplementPrixCession) {
$this->addFlash('error', "Une erreur s'est produite, veuillez réessayer");
// Redirection vers l'étape 1
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays, 'ref' => $code]);
}
// On vérifie que les champs de l'etape 1 sont bien remplis
if (!$annoncesVendeurComplementPrixCession->isEtape1Completed()) {
$this->addFlash('error', "Une erreur s'est produite, veuillez réessayer");
// Redirection vers l'étape 1
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays, 'ref' => $code]);
}
// Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
/*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
}*/
$prix_cession_final = number_format((int) $annoncesVendeurComplementPrixCession->__get('prixCession'), 0, ",", " ");
$nom_secteur_activite = $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
$annee_n = intval(str_replace(' ', '', $annonce->_get('annee_n')));
$annee_nmoinsun = $annee_n - 1;
$annee_nmoinsdeux = $annee_n - 2;
$ca_n = $annonce->_get('ca_n') !== null ? (int) $annonce->_get('ca_n') : null;
$ebe_n = $annonce->_get('EBE_n') !== null ? (int) $annonce->_get('EBE_n') : null;
$rex_n = $annonce->_get('resultat_exploitation_n') !== null ? (int) $annonce->_get('resultat_exploitation_n') : null;
$rn_n = $annonce->_get('resultat_net_n') !== null ? (int) $annonce->_get('resultat_net_n') : null;
$nb_personnes_n = $annonce->_get('nb_personnes_n') !== null ? (int) $annonce->_get('nb_personnes_n') : null;
$tresorerie_nette = $annonce->_get('tresorerie_nette') !== null ? (int) $annonce->_get('tresorerie_nette') : null;
$dettes_financieres = $annonce->_get('dettes_financieres') !== null ? (int) $annonce->_get('dettes_financieres') : null;
$ca_nmoinsun = $annonce->_get('ca_nmoinsun') !== null ? (int) $annonce->_get('ca_nmoinsun') : null;
$ebe_nmoinsun = $annonce->_get('EBE_nmoinsun') !== null ? (int) $annonce->_get('EBE_nmoinsun') : null;
$rex_nmoinsun = $annonce->_get('resultat_exploitation_nmoinsun') !== null ? (int) $annonce->_get('resultat_exploitation_nmoinsun') : null;
$rn_nmoinsun = $annonce->_get('resultat_net_nmoinsun') !== null ? (int) $annonce->_get('resultat_net_nmoinsun') : null;
$nb_personnes_nmoinsun = $annonce->_get('nb_personnes_nmoinsun') !== null ? (int) $annonce->_get('nb_personnes_nmoinsun') : null;
$ca_nmoinsdeux = $annonce->_get('ca_nmoinsdeux') !== null ? (int) $annonce->_get('ca_nmoinsdeux') : null;
$ebe_nmoinsdeux = $annonce->_get('EBE_nmoinsdeux') !== null ? (int) $annonce->_get('EBE_nmoinsdeux') : null;
$rex_nmoinsdeux = $annonce->_get('resultat_exploitation_nmoinsdeux') !== null ? (int) $annonce->_get('resultat_exploitation_nmoinsdeux') : null;
$rn_nmoinsdeux = $annonce->_get('resultat_net_nmoinsdeux') !== null ? (int) $annonce->_get('resultat_net_nmoinsdeux') : null;
$nb_personnes_nmoinsdeux = $annonce->_get('nb_personnes_nmoinsdeux') !== null ? (int) $annonce->_get('nb_personnes_nmoinsdeux') : null;
// Si les éléments retraités ne sont pas renseignés, on préremplie par ceux de l'annonce
if ($annoncesVendeurComplementPrixCession->__get('ca') === null) {
$annoncesVendeurComplementPrixCession->__set('ca', $ca_n);
}
if ($annoncesVendeurComplementPrixCession->__get('ebe') === null) {
$annoncesVendeurComplementPrixCession->__set('ebe', $ebe_n);
}
if ($annoncesVendeurComplementPrixCession->__get('resultatExploitation') === null) {
$annoncesVendeurComplementPrixCession->__set('resultatExploitation', $rex_n);
}
if ($annoncesVendeurComplementPrixCession->__get('resultatNet') === null) {
$annoncesVendeurComplementPrixCession->__set('resultatNet', $rn_n);
}
if ($annoncesVendeurComplementPrixCession->__get('nbPersonnes') === null) {
$annoncesVendeurComplementPrixCession->__set('nbPersonnes', $nb_personnes_n);
}
if ($annoncesVendeurComplementPrixCession->__get('tresorerieExcedentaire') === null) {
$annoncesVendeurComplementPrixCession->__set('tresorerieExcedentaire', $tresorerie_nette);
}
if ($annoncesVendeurComplementPrixCession->__get('dettesMoyenLongTerme') === null) {
$annoncesVendeurComplementPrixCession->__set('dettesMoyenLongTerme', $dettes_financieres);
}
$options = [];
$options['annonce'] = $annonce;
$options['diff_map'] = [
'ca' => 'ca_n',
'ebe' => 'EBE_n',
'resultatExploitation' => 'resultat_exploitation_n',
'resultatNet' => 'resultat_net_n',
'nbPersonnes' => 'nb_personnes_n',
'tresorerieExcedentaire' => 'tresorerie_nette',
'dettesMoyenLongTerme' => 'dettes_financieres'
];
$form = $this->createFormForStep(2, $annoncesVendeurComplementPrixCession, $options);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// Redirection vers l'étape 2
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_3', ['codePays' => $codePays, 'ref' => $code]);
}
// ===================== ELEMENTS POUR LE BONUS =====================
// On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
$bonus = $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
$update_bonus = false;
if ($bonus->__get('prixAnnonceMoyen12mois')) {
$prix_annonce_moyen_12mois = $bonus->__get('prixAnnonceMoyen12mois');
} else {
$moyenne12mois = $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12);
$prix_annonce_moyen_12mois = $moyenne12mois['prix_annonce_moyen'] ? number_format($moyenne12mois['prix_annonce_moyen'], 0, ",", " ") : "";
$bonus->__set('prixAnnonceMoyen12mois', $prix_annonce_moyen_12mois);
$update_bonus = true;
}
if ($bonus->__get('caMoyenAvecPrix12mois')) {
$ca_moyen_avec_prix_12mois = $bonus->__get('caMoyenAvecPrix12mois');
} else {
if (!$moyenne12mois) {
$moyenne12mois = $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12);
}
$ca_moyen_avec_prix_12mois = $moyenne12mois['ca_moyen_avec_prix'] ? number_format($moyenne12mois['ca_moyen_avec_prix'], 0, ",", " ") : "";
$bonus->__set('caMoyenAvecPrix12mois', $ca_moyen_avec_prix_12mois);
$update_bonus = true;
}
// Si $prix_annonce_moyen_12mois ou $ca_moyen_avec_prix_12mois vide
if ($prix_annonce_moyen_12mois === "" || $ca_moyen_avec_prix_12mois === "") {
$show_prix_annonce_moyen_12mois = false;
} else {
$show_prix_annonce_moyen_12mois = true;
}
$reference_prix_annonce_moyen = $prix_annonce_moyen_12mois;
$reference_ca_moyen = $ca_moyen_avec_prix_12mois;
if ($bonus->__get('prixAnnonceMoyen24mois')) {
$prix_annonce_moyen_24mois = $bonus->__get('prixAnnonceMoyen24mois');
} else {
$moyenne24mois = $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 24);
$prix_annonce_moyen_24mois = $moyenne24mois['prix_annonce_moyen'] ? number_format($moyenne24mois['prix_annonce_moyen'], 0, ",", " ") : "";
$bonus->__set('prixAnnonceMoyen24mois', $prix_annonce_moyen_24mois);
$update_bonus = true;
}
if ($bonus->__get('caMoyenAvecPrix24mois')) {
$ca_moyen_avec_prix_24mois = $bonus->__get('caMoyenAvecPrix24mois');
} else {
if (!$moyenne24mois) {
$moyenne24mois = $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 24);
}
$ca_moyen_avec_prix_24mois = $moyenne24mois['ca_moyen_avec_prix'] ? number_format($moyenne24mois['ca_moyen_avec_prix'], 0, ",", " ") : "";
$bonus->__set('caMoyenAvecPrix24mois', $ca_moyen_avec_prix_24mois);
$update_bonus = true;
}
// Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
if ($prix_annonce_moyen_24mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_24mois == $reference_ca_moyen) {
$show_prix_annonce_moyen_24mois = false;
} else {
$show_prix_annonce_moyen_24mois = true;
$reference_prix_annonce_moyen = $prix_annonce_moyen_24mois;
$reference_ca_moyen = $ca_moyen_avec_prix_24mois;
}
if ($bonus->__get('prixAnnonceMoyen60mois')) {
$prix_annonce_moyen_60mois = $bonus->__get('prixAnnonceMoyen60mois');
} else {
$moyenne60mois = $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 60);
$prix_annonce_moyen_60mois = $moyenne60mois['prix_annonce_moyen'] ? number_format($moyenne60mois['prix_annonce_moyen'], 0, ",", " ") : "";
$bonus->__set('prixAnnonceMoyen60mois', $prix_annonce_moyen_60mois);
$update_bonus = true;
}
if ($bonus->__get('caMoyenAvecPrix60mois')) {
$ca_moyen_avec_prix_60mois = $bonus->__get('caMoyenAvecPrix60mois');
} else {
if (!$moyenne60mois) {
$moyenne60mois = $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 60);
}
$ca_moyen_avec_prix_60mois = $moyenne60mois['ca_moyen_avec_prix'] ? number_format($moyenne60mois['ca_moyen_avec_prix'], 0, ",", " ") : "";
$bonus->__set('caMoyenAvecPrix60mois', $ca_moyen_avec_prix_60mois);
$update_bonus = true;
}
// Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
if ($prix_annonce_moyen_60mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_60mois == $reference_ca_moyen) {
$show_prix_annonce_moyen_60mois = false;
} else {
$show_prix_annonce_moyen_60mois = true;
$reference_prix_annonce_moyen = $prix_annonce_moyen_60mois;
$reference_ca_moyen = $ca_moyen_avec_prix_60mois;
}
if ($bonus->__get('prixAnnonceMoyen120mois')) {
$prix_annonce_moyen_120mois = $bonus->__get('prixAnnonceMoyen120mois');
} else {
$moyenne120mois = $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
$prix_annonce_moyen_120mois = $moyenne120mois['prix_annonce_moyen'] ? number_format($moyenne120mois['prix_annonce_moyen'], 0, ",", " ") : "";
$bonus->__set('prixAnnonceMoyen120mois', $prix_annonce_moyen_120mois);
$update_bonus = true;
}
if ($bonus->__get('caMoyenAvecPrix120mois')) {
$ca_moyen_avec_prix_120mois = $bonus->__get('caMoyenAvecPrix120mois');
} else {
if (!$moyenne120mois) {
$moyenne120mois = $cb->getPrixCaNbPersonneMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
}
$ca_moyen_avec_prix_120mois = $moyenne120mois['ca_moyen_avec_prix'] ? number_format($moyenne120mois['ca_moyen_avec_prix'], 0, ",", " ") : "";
$bonus->__set('caMoyenAvecPrix120mois', $ca_moyen_avec_prix_120mois);
$update_bonus = true;
}
// Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
if ($prix_annonce_moyen_120mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_120mois == $reference_ca_moyen) {
$show_prix_annonce_moyen_120mois = false;
} else {
$show_prix_annonce_moyen_120mois = true;
$reference_prix_annonce_moyen = $prix_annonce_moyen_120mois;
$reference_ca_moyen = $ca_moyen_avec_prix_120mois;
}
if ($bonus->__get('anneesHistorique') && $bonus->__get('historiquePrixMoyen') && $bonus->__get('historiqueRatioMoyenPrixNbPers') && $bonus->__get('historiqueRatioMoyenPrixCa')) {
$historique1 = unserialize($bonus->__get('historiquePrixMoyen'));
$historique2 = unserialize($bonus->__get('historiqueRatioMoyenPrixNbPers'));
$annees_historique = explode(",", $bonus->__get('anneesHistorique'));
$data_null_historique1 = false;
$data_null_historique2 = false;
foreach ($historique1 as $h) {
if ($h['y'] == null) {
$data_null_historique1 = true;
break;
}
}
foreach ($historique2 as $h) {
if ($h['y'] == null) {
$data_null_historique2 = true;
break;
}
}
} else {
$histo1 = $cb->getHistoriquePrixMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12, 10);
$annees_historique = $histo1['annees_historique'];
$historique1 = $histo1['historique'];
$data_null_historique1 = $histo1['data_null'];
$histo2 = $cb->getHistoriqueMultiplePrixNbPersMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12, 10);
$historique2 = $histo2['historique'];
$data_null_historique2 = $histo2['data_null'];
$bonus->__set('anneesHistorique', implode(",", $annees_historique));
$bonus->__set('historiquePrixMoyen', serialize($historique1));
$bonus->__set('historiqueRatioMoyenPrixNbPers', serialize($historique2));
$update_bonus = true;
}
if ($update_bonus) {
$this->em->persist($bonus);
$this->em->flush();
}
// ==================== FIN ELEMENTS POUR LE BONUS ===================
return $this->render('annonces/complement-annonce-vendeur/etape2.html.twig', [
'id_annonce_vendeur' => $id_annonce_vendeur,
'prix_cession_final' => $prix_cession_final,
'annonce' => $annonce,
'annee_n' => $annee_n,
'annee_nmoinsun' => $annee_nmoinsun,
'annee_nmoinsdeux' => $annee_nmoinsdeux,
'ca_n' => $ca_n,
'ebe_n' => $ebe_n,
'rex_n' => $rex_n,
'rn_n' => $rn_n,
'nb_personnes_n' => $nb_personnes_n,
'ca_nmoinsun' => $ca_nmoinsun,
'ebe_nmoinsun' => $ebe_nmoinsun,
'rex_nmoinsun' => $rex_nmoinsun,
'rn_nmoinsun' => $rn_nmoinsun,
'nb_personnes_nmoinsun' => $nb_personnes_nmoinsun,
'ca_nmoinsdeux' => $ca_nmoinsdeux,
'ebe_nmoinsdeux' => $ebe_nmoinsdeux,
'rex_nmoinsdeux' => $rex_nmoinsdeux,
'rn_nmoinsdeux' => $rn_nmoinsdeux,
'nb_personnes_nmoinsdeux' => $nb_personnes_nmoinsdeux,
'tresorerie_nette' => $tresorerie_nette,
'dettes_financieres' => $dettes_financieres,
'nom_secteur_activite' => $nom_secteur_activite,
'form' => $form->createView(),
'code' => $code,
'prix_annonce_moyen_12mois' => $prix_annonce_moyen_12mois,
'ca_moyen_avec_prix_12mois' => $ca_moyen_avec_prix_12mois,
'show_prix_annonce_moyen_12mois' => $show_prix_annonce_moyen_12mois,
'prix_annonce_moyen_24mois' => $prix_annonce_moyen_24mois,
'ca_moyen_avec_prix_24mois' => $ca_moyen_avec_prix_24mois,
'show_prix_annonce_moyen_24mois' => $show_prix_annonce_moyen_24mois,
'prix_annonce_moyen_60mois' => $prix_annonce_moyen_60mois,
'ca_moyen_avec_prix_60mois' => $ca_moyen_avec_prix_60mois,
'show_prix_annonce_moyen_60mois' => $show_prix_annonce_moyen_60mois,
'prix_annonce_moyen_120mois' => $prix_annonce_moyen_120mois,
'ca_moyen_avec_prix_120mois' => $ca_moyen_avec_prix_120mois,
'show_prix_annonce_moyen_120mois' => $show_prix_annonce_moyen_120mois,
'historique1' => $historique1,
'data_null_historique1' => $data_null_historique1,
'historique2' => $historique2,
'data_null_historique2' => $data_null_historique2,
'annees_historique' => $annees_historique,
]);
}
public function complementAnnonceVendeurSuiteRetraitEtape3(Request $request, AesEncrytageStrategy $aes, StatistiquesSecteursActiviteRepository $statistiquesRepo, HistoriqueStatsSecteursRepository $historiquesStatsRepo, SecteursActiviteRepository $secteursRepo, CoteFusacqBonusRepository $cfr, CalculBonus $cb, $codePays) {
$code = $request->query->get('ref');
// Si pas de code
if (!$code) {
return $this->redirectToRoute('index');
}
$id_annonce_vendeur = $aes->decryptage($code);
// Si $id_annonce_vendeur pas conforme
if (!is_numeric($id_annonce_vendeur)) {
return $this->redirectToRoute('index');
}
$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
// Si annonce introuvable
if (!$annonce) {
return $this->redirectToRoute('index');
}
$user = $this->getUser();
// Si pas authentifié
if (!$user) {
$this->addFlash("error", "Veuillez-vous authentifier");
return $this->redirectToRoute('index');
}
// Si l'annonce n'appartient pas à l'utilisateur
if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
return $this->redirectToRoute('index');
}
$annoncesVendeurComplementPrixCession = $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
if (!$annoncesVendeurComplementPrixCession) {
$this->addFlash('error', "Une erreur s'est produite, veuillez réessayer");
// Redirection vers l'étape 1
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays, 'ref' => $code]);
}
// On vérifie que les champs de l'etape 2 sont bien remplis
if (!$annoncesVendeurComplementPrixCession->isEtape2Completed()) {
$this->addFlash('error', "Une erreur s'est produite, veuillez réessayer");
// Redirection vers l'étape 2
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_2', ['codePays' => $codePays, 'ref' => $code]);
}
// Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
/*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
}*/
$prix_cession_final = (int) $annoncesVendeurComplementPrixCession->__get('prixCession');
$tresorerie_nette_final = (int) $annoncesVendeurComplementPrixCession->__get('tresorerieExcedentaire');
$dettes_financieres_final = (int) $annoncesVendeurComplementPrixCession->__get('dettesMoyenLongTerme');
$ca_final = (int) $annoncesVendeurComplementPrixCession->__get('ca');
$ebe_final = (int) $annoncesVendeurComplementPrixCession->__get('ebe');
$rex_final = (int) $annoncesVendeurComplementPrixCession->__get('resultatExploitation');
$rn_final = (int) $annoncesVendeurComplementPrixCession->__get('resultatNet');
$nom_secteur_activite = $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
$options = [];
// Calcul des multiples
if ($ca_final != 0) {
$multiple_ca = ($prix_cession_final - $tresorerie_nette_final + $dettes_financieres_final) / $ca_final;
} else {
$multiple_ca = 0;
}
if (is_float($multiple_ca)) {
$multiple_ca = number_format($multiple_ca, 2);
}
// Si multiple CA compris entre 0.1 et 5, on l'affiche dans le formulaire
if ($multiple_ca >= 0.1 && $multiple_ca <= 5) {
$options['affichage_multiple_ca'] = true;
} else {
$options['affichage_multiple_ca'] = false;
}
if ($ebe_final != 0) {
$multiple_ebe = ($prix_cession_final - $tresorerie_nette_final + $dettes_financieres_final) / $ebe_final;
} else {
$multiple_ebe = 0;
}
if (is_float($multiple_ebe)) {
$multiple_ebe = number_format($multiple_ebe, 2);
}
// Si multiple EBE compris entre 1 et 10, on l'affiche dans le formulaire
if ($multiple_ebe >= 1 && $multiple_ebe <= 10) {
$options['affichage_multiple_ebe'] = true;
} else {
$options['affichage_multiple_ebe'] = false;
}
if ($rex_final != 0) {
$multiple_rex = ($prix_cession_final - $tresorerie_nette_final + $dettes_financieres_final) / $rex_final;
} else {
$multiple_rex = 0;
}
if (is_float($multiple_rex)) {
$multiple_rex = number_format($multiple_rex, 2);
}
// Si multiple REX compris entre 1 et 12, on l'affiche dans le formulaire
if ($multiple_rex >= 1 && $multiple_rex <= 12) {
$options['affichage_multiple_rex'] = true;
} else {
$options['affichage_multiple_rex'] = false;
}
if ($rn_final != 0) {
$multiple_rn = ($prix_cession_final - $tresorerie_nette_final + $dettes_financieres_final) / $rn_final;
} else {
$multiple_rn = 0;
}
if (is_float($multiple_rn)) {
$multiple_rn = number_format($multiple_rn, 2);
}
// Si multiple RN compris entre 2 et 15, on l'affiche dans le formulaire
if ($multiple_rn >= 2 && $multiple_rn <= 15) {
$options['affichage_multiple_rn'] = true;
} else {
$options['affichage_multiple_rn'] = false;
}
// MaJ des multiples
$annoncesVendeurComplementPrixCession->__set('multipleCa', $multiple_ca);
$annoncesVendeurComplementPrixCession->__set('multipleEbe', $multiple_ebe);
$annoncesVendeurComplementPrixCession->__set('multipleResultatExploitation', $multiple_rex);
$annoncesVendeurComplementPrixCession->__set('multipleResultatNet', $multiple_rn);
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
$nb_personnes_n = (int) $annonce->_get('nb_personnes_n');
$tresorerie_nette = (int) $annonce->_get('tresorerie_nette');
$dettes_financieres = (int) $annonce->_get('dettes_financieres');
$form = $this->createFormForStep(3, $annoncesVendeurComplementPrixCession, $options);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
// Si les multiples sont ok, on efface la precision
if ($data->__get('multipleCaOk') == 1) {
$annoncesVendeurComplementPrixCession->__set('precisionsCa', null);
}
if ($data->__get('multipleEbeOk') == 1) {
$annoncesVendeurComplementPrixCession->__set('precisionsEbe', null);
}
if ($data->__get('multipleResultatExploitationOk') == 1) {
$annoncesVendeurComplementPrixCession->__set('precisionsResultatExploitation', null);
}
if ($data->__get('multipleResultatNetOk') == 1) {
$annoncesVendeurComplementPrixCession->__set('precisionsResultatNet', null);
}
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// A l'étape 3 on considère qu'on a déjà quasiment toutes les informations nécessaires à la Cote Fusacq
// On ajoute un log action pour la finalisation d'un AnnoncesVendeurComplementPrixCession (Transaction de référence)
// LOG ID 133 = Finalisation Transaction de référence (la Cote FUSACQ)
$this->lmp->ajouterActionLogsActions($user->_get('id_utilisateur'), intval(133), $user->_get('type_utilisateur'), $id_annonce_vendeur);
// Redirection vers l'étape 4
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_4', ['codePays' => $codePays, 'ref' => $code]);
}
// ===================== ELEMENTS POUR LE BONUS =====================
// On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
$bonus = $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
$update_bonus = false;
if ($bonus->__get('multiple12mois')) {
$multiple_12mois = $bonus->__get('multiple12mois');
} else {
$multiplePrixCaMoyen12mois = $cb->getMultiplePrixCaMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12);
$multiple_12mois = $multiplePrixCaMoyen12mois['multiple_prix_ca'] ? number_format($multiplePrixCaMoyen12mois['multiple_prix_ca'], 2, '.', ' ') : "";
$bonus->__set('multiple12mois', $multiple_12mois);
$update_bonus = true;
}
// Si $multiple_12mois vide
if ($multiple_12mois === "") {
$show_multiple_ca_12mois = false;
} else {
$show_multiple_ca_12mois = true;
}
$reference_multiple_ca = $multiple_12mois;
if ($bonus->__get('multiple24mois')) {
$multiple_24mois = $bonus->__get('multiple24mois');
} else {
$multiplePrixCaMoyen24mois = $cb->getMultiplePrixCaMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 24);
$multiple_24mois = $multiplePrixCaMoyen24mois['multiple_prix_ca'] ? number_format($multiplePrixCaMoyen24mois['multiple_prix_ca'], 2, '.', ' ') : "";
$bonus->__set('multiple24mois', $multiple_24mois);
$update_bonus = true;
}
// Si multiple identique à reference, on n'affiche pas la donnée
if ($multiple_24mois == $reference_multiple_ca) {
$show_multiple_ca_24mois = false;
} else {
$show_multiple_ca_24mois = true;
$reference_multiple_ca = $multiple_24mois;
}
if ($bonus->__get('multiple60mois')) {
$multiple_60mois = $bonus->__get('multiple60mois');
} else {
$multiplePrixCaMoyen60mois = $cb->getMultiplePrixCaMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 60);
$multiple_60mois = $multiplePrixCaMoyen60mois['multiple_prix_ca'] ? number_format($multiplePrixCaMoyen60mois['multiple_prix_ca'], 2, '.', ' ') : "";
$bonus->__set('multiple60mois', $multiple_60mois);
$update_bonus = true;
}
// Si multiple identique à reference, on n'affiche pas la donnée
if ($multiple_60mois == $reference_multiple_ca) {
$show_multiple_ca_60mois = false;
} else {
$show_multiple_ca_60mois = true;
$reference_multiple_ca = $multiple_60mois;
}
if ($bonus->__get('multiple120mois')) {
$multiple_120mois = $bonus->__get('multiple120mois');
} else {
$multiplePrixCaMoyen120mois = $cb->getMultiplePrixCaMoyen($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
$multiple_120mois = $multiplePrixCaMoyen120mois['multiple_prix_ca'] ? number_format($multiplePrixCaMoyen120mois['multiple_prix_ca'], 2, '.', ' ') : "";
$bonus->__set('multiple120mois', $multiple_120mois);
$update_bonus = true;
}
// Si multiple identique à reference, on n'affiche pas la donnée
if ($multiple_120mois == $reference_multiple_ca) {
$show_multiple_ca_120mois = false;
} else {
$show_multiple_ca_120mois = true;
$reference_multiple_ca = $multiple_120mois;
}
if ($bonus->__get('anneesHistorique') && $bonus->__get('historiqueRatioMoyenPrixCa')) {
$historique = unserialize($bonus->__get('historiqueRatioMoyenPrixCa'));
$annees_historique = explode(",", $bonus->__get('anneesHistorique'));
$data_null_historique = false;
foreach ($historique as $h) {
if ($h['y'] == null) {
$data_null_historique = true;
break;
}
}
} else {
$histo = $cb->getHistoriqueMultiplePrixCa($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12, 10);
$annees_historique = $histo['annees_historique'];
$historique = $histo['historique'];
$data_null_historique = $histo['data_null'];
$bonus->__set('anneesHistorique', implode(",", $annees_historique));
$bonus->__set('historiqueRatioMoyenPrixCa', serialize($historique));
$update_bonus = true;
}
if ($update_bonus) {
$this->em->persist($bonus);
$this->em->flush();
}
// ==================== FIN ELEMENTS POUR LE BONUS ===================
return $this->render('annonces/complement-annonce-vendeur/etape3.html.twig', [
'id_annonce_vendeur' => $id_annonce_vendeur,
'prix_cession_final' => $prix_cession_final,
'multiple_ca' => $multiple_ca,
'multiple_ebe' => $multiple_ebe,
'multiple_rex' => $multiple_rex,
'multiple_rn' => $multiple_rn,
'nb_personnes_n' => $nb_personnes_n,
'tresorerie_nette' => $tresorerie_nette,
'dettes_financieres' => $dettes_financieres,
'nom_secteur_activite' => $nom_secteur_activite,
'form' => $form->createView(),
'code' => $code,
'multiple_12mois' => $multiple_12mois,
'multiple_24mois' => $multiple_24mois,
'multiple_60mois' => $multiple_60mois,
'multiple_120mois' => $multiple_120mois,
'show_multiple_ca_12mois' => $show_multiple_ca_12mois,
'show_multiple_ca_24mois' => $show_multiple_ca_24mois,
'show_multiple_ca_60mois' => $show_multiple_ca_60mois,
'show_multiple_ca_120mois' => $show_multiple_ca_120mois,
'historique' => $historique,
'data_null_historique' => $data_null_historique,
'annees_historique' => $annees_historique,
'options' => $options
]);
}
public function complementAnnonceVendeurSuiteRetraitEtape4(Request $request, AesEncrytageStrategy $aes, StatistiquesSecteursActiviteRepository $statistiquesRepo, HistoriqueStatsSecteursRepository $historiquesStatsRepo, SecteursActiviteRepository $secteursRepo, CoteFusacqBonusRepository $cfr, CalculBonus $cb, $codePays) {
$code = $request->query->get('ref');
// Si pas de code
if (!$code) {
return $this->redirectToRoute('index');
}
$id_annonce_vendeur = $aes->decryptage($code);
// Si $id_annonce_vendeur pas conforme
if (!is_numeric($id_annonce_vendeur)) {
return $this->redirectToRoute('index');
}
$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
// Si annonce introuvable
if (!$annonce) {
return $this->redirectToRoute('index');
}
$user = $this->getUser();
// Si pas authentifié
if (!$user) {
$this->addFlash("error", "Veuillez-vous authentifier");
return $this->redirectToRoute('index');
}
// Si l'annonce n'appartient pas à l'utilisateur
if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
return $this->redirectToRoute('index');
}
$annoncesVendeurComplementPrixCession = $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
if (!$annoncesVendeurComplementPrixCession) {
$this->addFlash('error', "Une erreur s'est produite, veuillez réessayer");
// Redirection vers l'étape 1
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays, 'ref' => $code]);
}
// On vérifie que les champs de l'etape 3 sont bien remplis
if (!$annoncesVendeurComplementPrixCession->isEtape3Completed()) {
$this->addFlash('error', "Une erreur s'est produite, veuillez réessayer");
// Redirection vers l'étape 3
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_3', ['codePays' => $codePays, 'ref' => $code]);
}
// Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
/*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
}*/
$prix_cession_final = (int) $annoncesVendeurComplementPrixCession->__get('prixCession');
$nom_secteur_activite = $this->sm->getStringNomSecteurActiviteById($annonce->_get('id_secteur_activite'));
$options = [];
$options['id_pays'] = $annonce->_get('id_pays');
$form = $this->createFormForStep(4, $annoncesVendeurComplementPrixCession, $options);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
if (strpos($data->__get('idBanqueFinancement'), "0") === false) {
$annoncesVendeurComplementPrixCession->__set('autreBanque', null);
}
$annoncesVendeurComplementPrixCession->__set('isComplete', 1);
// Si on n'a pas encore offert de CRO
if ($annoncesVendeurComplementPrixCession->__get('croOffert') == false) {
// 35 = compte rendu d'opération
$this->dam->traitementDroitAccessCommande($user, 35);
$annoncesVendeurComplementPrixCession->__set('croOffert', 1);
}
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// Redirection vers l'étape 5
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_5', ['codePays' => $codePays, 'ref' => $code]);
}
// ===================== ELEMENTS POUR LE BONUS =====================
// On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
$bonus = $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
$update_bonus = false;
// On récupère les annonces avec prix exploitables sur 10 ans pour calculer les bornes min et max pour l'ensemble des multiples
$annonces_avec_prix_120mois = $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
if ($annonces_avec_prix_120mois) {
$multiple_ebe = [];
$multiple_rex = [];
$multiple_rn = [];
foreach ($annonces_avec_prix_120mois as $a) {
if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
$multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
}
if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
$multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
}
if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
$multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
}
}
list($min_ebe, $max_ebe, $q1_ebe, $q3_ebe, $iqr_ebe) = Statistiques::calculerBornesIQR($multiple_ebe, true);
list($min_rex, $max_rex, $q1_rex, $q3_rex, $iqr_rex) = Statistiques::calculerBornesIQR($multiple_rex, true);
list($min_rn, $max_rn, $q1_rn, $q3_rn, $iqr_rn) = Statistiques::calculerBornesIQR($multiple_rn, true);
} else {
$min_ebe = $max_ebe = $q1_ebe = $q3_ebe = $iqr_ebe = null;
$min_rex = $max_rex = $q1_rex = $q3_rex = $iqr_rex = null;
$min_rn = $max_rn = $q1_rn = $q3_rn = $iqr_rn = null;
}
if ($bonus->__get('multipleEbe12mois') && $bonus->__get('multipleRex12mois') && $bonus->__get('multipleRn12mois')) {
$multiple_ebe_12mois = $bonus->__get('multipleEbe12mois');
$multiple_rex_12mois = $bonus->__get('multipleRex12mois');
$multiple_rn_12mois = $bonus->__get('multipleRn12mois');
} else {
$annonces_avec_prix_12mois = $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12);
$multiple_ebe = [];
$multiple_rex = [];
$multiple_rn = [];
$annonces_ebe_12mois = [];
$annonces_rex_12mois = [];
$annonces_rn_12mois = [];
foreach ($annonces_avec_prix_12mois as $a) {
if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
if ($a['prix_cession'] / $a['EBE_n'] >= $min_ebe && $a['prix_cession'] / $a['EBE_n'] <= $max_ebe) {
$multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
$annonces_ebe_12mois[] = $a;
}
}
if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
if ($a['prix_cession'] / $a['resultat_exploitation_n'] >= $min_rex && $a['prix_cession'] / $a['resultat_exploitation_n'] <= $max_rex) {
$multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
$annonces_rex_12mois[] = $a;
}
}
if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
if ($a['prix_cession'] / $a['resultat_net_n'] >= $min_rn && $a['prix_cession'] / $a['resultat_net_n'] <= $max_rn) {
$multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
$annonces_rn_12mois[] = $a;
}
}
}
/*$multiple_ebe_12mois_IQR = Statistiques::filtreIQR($multiple_ebe);
$multiple_rex_12mois_IQR = Statistiques::filtreIQR($multiple_rex);
$multiple_rn_12mois_IQR = Statistiques::filtreIQR($multiple_rn);*/
$multiple_ebe_12mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_ebe, $min_ebe, $max_ebe, $q1_ebe, $q3_ebe, $iqr_ebe);
$multiple_rex_12mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_rex, $min_rex, $max_rex, $q1_rex, $q3_rex, $iqr_rex);
$multiple_rn_12mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_rn, $min_rn, $max_rn, $q1_rn, $q3_rn, $iqr_rn);
/*$somme_multiple_ebe_12mois = array_sum($multiple_ebe_12mois_IQR['valeurs']);
if (count($multiple_ebe_12mois_IQR['valeurs']) > 0) {
$multiple_ebe_12mois = number_format(array_sum($multiple_ebe_12mois_IQR['valeurs']) / count($multiple_ebe_12mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_ebe_12mois = null;
}*/
$somme_multiple_ebe_12mois = array_sum(array_values($multiple_ebe));
if (count($multiple_ebe) > 0) {
$multiple_ebe_12mois = number_format(array_sum(array_values($multiple_ebe)) / count($multiple_ebe), 2, '.', ' ');
} else {
$multiple_ebe_12mois = null;
}
/*$somme_multiple_rex_12mois = array_sum($multiple_rex_12mois_IQR['valeurs']);
if (count($multiple_rex_12mois_IQR['valeurs']) > 0) {
$multiple_rex_12mois = number_format(array_sum($multiple_rex_12mois_IQR['valeurs']) / count($multiple_rex_12mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_rex_12mois = null;
}*/
$somme_multiple_rex_12mois = array_sum(array_values($multiple_rex));
if (count($multiple_rex) > 0) {
$multiple_rex_12mois = number_format(array_sum(array_values($multiple_rex)) / count($multiple_rex), 2, '.', ' ');
} else {
$multiple_rex_12mois = null;
}
/*$somme_multiple_rn_12mois = array_sum($multiple_rn_12mois_IQR['valeurs']);
if (count($multiple_rn_12mois_IQR['valeurs']) > 0) {
$multiple_rn_12mois = number_format(array_sum($multiple_rn_12mois_IQR['valeurs']) / count($multiple_rn_12mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_rn_12mois = null;
}*/
$somme_multiple_rn_12mois = array_sum(array_values($multiple_rn));
if (count($multiple_rn) > 0) {
$multiple_rn_12mois = number_format(array_sum(array_values($multiple_rn)) / count($multiple_rn), 2, '.', ' ');
} else {
$multiple_rn_12mois = null;
}
$bonus->__set('multipleEbe12mois', $multiple_ebe_12mois);
$bonus->__set('multipleRex12mois', $multiple_rex_12mois);
$bonus->__set('multipleRn12mois', $multiple_rn_12mois);
$update_bonus = true;
}
// Si multiple_ebe, multiple_rex et multiple_rn vide
if ($multiple_ebe_12mois == "" && $multiple_rex_12mois == "" && $multiple_rn_12mois == "") {
$show_multiple_12mois = false;
} else {
$show_multiple_12mois = true;
}
$reference_multiple_ebe = $multiple_ebe_12mois;
$reference_multiple_rex = $multiple_rex_12mois;
$reference_multiple_rn = $multiple_rn_12mois;
if ($bonus->__get('multipleEbe24mois') && $bonus->__get('multipleRex24mois') && $bonus->__get('multipleRn24mois')) {
$multiple_ebe_24mois = $bonus->__get('multipleEbe24mois');
$multiple_rex_24mois = $bonus->__get('multipleRex24mois');
$multiple_rn_24mois = $bonus->__get('multipleRn24mois');
} else {
$annonces_avec_prix_24mois = $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 24);
$multiple_ebe = [];
$multiple_rex = [];
$multiple_rn = [];
$annonces_ebe_24mois = [];
$annonces_rex_24mois = [];
$annonces_rn_24mois = [];
foreach ($annonces_avec_prix_24mois as $a) {
if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
if ($a['prix_cession'] / $a['EBE_n'] >= $min_ebe && $a['prix_cession'] / $a['EBE_n'] <= $max_ebe) {
$multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
$annonces_ebe_24mois[] = $a;
}
}
if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
if ($a['prix_cession'] / $a['resultat_exploitation_n'] >= $min_rex && $a['prix_cession'] / $a['resultat_exploitation_n'] <= $max_rex) {
$multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
$annonces_rex_24mois[] = $a;
}
}
if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
if ($a['prix_cession'] / $a['resultat_net_n'] >= $min_rn && $a['prix_cession'] / $a['resultat_net_n'] <= $max_rn) {
$multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
$annonces_rn_24mois[] = $a;
}
}
}
/*$multiple_ebe_24mois_IQR = Statistiques::filtreIQR($multiple_ebe);
$multiple_rex_24mois_IQR = Statistiques::filtreIQR($multiple_rex);
$multiple_rn_24mois_IQR = Statistiques::filtreIQR($multiple_rn);*/
$multiple_ebe_24mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_ebe, $min_ebe, $max_ebe, $q1_ebe, $q3_ebe, $iqr_ebe);
$multiple_rex_24mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_rex, $min_rex, $max_rex, $q1_rex, $q3_rex, $iqr_rex);
$multiple_rn_24mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_rn, $min_rn, $max_rn, $q1_rn, $q3_rn, $iqr_rn);
/*$somme_multiple_ebe_24mois = array_sum($multiple_ebe_24mois_IQR['valeurs']);
if (count($multiple_ebe_24mois_IQR['valeurs']) > 0) {
$multiple_ebe_24mois = number_format(array_sum($multiple_ebe_24mois_IQR['valeurs']) / count($multiple_ebe_24mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_ebe_24mois = null;
}*/
$somme_multiple_ebe_24mois = array_sum(array_values($multiple_ebe));
if (count($multiple_ebe) > 0) {
$multiple_ebe_24mois = number_format(array_sum(array_values($multiple_ebe)) / count($multiple_ebe), 2, '.', ' ');
} else {
$multiple_ebe_24mois = null;
}
/*$somme_multiple_rex_24mois = array_sum($multiple_rex_24mois_IQR['valeurs']);
if (count($multiple_rex_24mois_IQR['valeurs']) > 0) {
$multiple_rex_24mois = number_format(array_sum($multiple_rex_24mois_IQR['valeurs']) / count($multiple_rex_24mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_rex_24mois = null;
}*/
$somme_multiple_rex_24mois = array_sum(array_values($multiple_rex));
if (count($multiple_rex) > 0) {
$multiple_rex_24mois = number_format(array_sum(array_values($multiple_rex)) / count($multiple_rex), 2, '.', ' ');
} else {
$multiple_rex_24mois = null;
}
/*$somme_multiple_rn_24mois = array_sum($multiple_rn_24mois_IQR['valeurs']);
if (count($multiple_rn_24mois_IQR['valeurs']) > 0) {
$multiple_rn_24mois = number_format(array_sum($multiple_rn_24mois_IQR['valeurs']) / count($multiple_rn_24mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_rn_24mois = null;
}*/
$somme_multiple_rn_24mois = array_sum(array_values($multiple_rn));
if (count($multiple_rn) > 0) {
$multiple_rn_24mois = number_format(array_sum(array_values($multiple_rn)) / count($multiple_rn), 2, '.', ' ');
} else {
$multiple_rn_24mois = null;
}
$bonus->__set('multipleEbe24mois', $multiple_ebe_24mois);
$bonus->__set('multipleRex24mois', $multiple_rex_24mois);
$bonus->__set('multipleRn24mois', $multiple_rn_24mois);
$update_bonus = true;
}
// Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
if ($multiple_ebe_24mois == $reference_multiple_ebe && $multiple_rex_24mois == $reference_multiple_rex && $multiple_rn_24mois == $reference_multiple_rn) {
$show_multiple_24mois = false;
} else {
$show_multiple_24mois = true;
$reference_multiple_ebe = $multiple_ebe_24mois;
$reference_multiple_rex = $multiple_rex_24mois;
$reference_multiple_rn = $multiple_rn_24mois;
}
if ($bonus->__get('multipleEbe60mois') && $bonus->__get('multipleRex60mois') && $bonus->__get('multipleRn60mois')) {
$multiple_ebe_60mois = $bonus->__get('multipleEbe60mois');
$multiple_rex_60mois = $bonus->__get('multipleRex60mois');
$multiple_rn_60mois = $bonus->__get('multipleRn60mois');
} else {
$annonces_avec_prix_60mois = $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 60);
$multiple_ebe = [];
$multiple_rex = [];
$multiple_rn = [];
$annonces_ebe_60mois = [];
$annonces_rex_60mois = [];
$annonces_rn_60mois = [];
foreach ($annonces_avec_prix_60mois as $a) {
if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
if ($a['prix_cession'] / $a['EBE_n'] >= $min_ebe && $a['prix_cession'] / $a['EBE_n'] <= $max_ebe) {
$multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
$annonces_ebe_60mois[] = $a;
}
}
if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
if ($a['prix_cession'] / $a['resultat_exploitation_n'] >= $min_rex && $a['prix_cession'] / $a['resultat_exploitation_n'] <= $max_rex) {
$multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
$annonces_rex_60mois[] = $a;
}
}
if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
if ($a['prix_cession'] / $a['resultat_net_n'] >= $min_rn && $a['prix_cession'] / $a['resultat_net_n'] <= $max_rn) {
$multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
$annonces_rn_60mois[] = $a;
}
}
}
/*$multiple_ebe_60mois_IQR = Statistiques::filtreIQR($multiple_ebe);
$multiple_rex_60mois_IQR = Statistiques::filtreIQR($multiple_rex);
$multiple_rn_60mois_IQR = Statistiques::filtreIQR($multiple_rn);*/
$multiple_ebe_60mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_ebe, $min_ebe, $max_ebe, $q1_ebe, $q3_ebe, $iqr_ebe);
$multiple_rex_60mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_rex, $min_rex, $max_rex, $q1_rex, $q3_rex, $iqr_rex);
$multiple_rn_60mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_rn, $min_rn, $max_rn, $q1_rn, $q3_rn, $iqr_rn);
/*$somme_multiple_ebe_60mois = array_sum($multiple_ebe_60mois_IQR['valeurs']);
if (count($multiple_ebe_60mois_IQR['valeurs']) > 0) {
$multiple_ebe_60mois = number_format(array_sum($multiple_ebe_60mois_IQR['valeurs']) / count($multiple_ebe_60mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_ebe_60mois = null;
}*/
$somme_multiple_ebe_60mois = array_sum(array_values($multiple_ebe));
if (count($multiple_ebe) > 0) {
$multiple_ebe_60mois = number_format(array_sum(array_values($multiple_ebe)) / count($multiple_ebe), 2, '.', ' ');
} else {
$multiple_ebe_60mois = null;
}
/*$somme_multiple_rex_60mois = array_sum($multiple_rex_60mois_IQR['valeurs']);
if (count($multiple_rex_60mois_IQR['valeurs']) > 0) {
$multiple_rex_60mois = number_format(array_sum($multiple_rex_60mois_IQR['valeurs']) / count($multiple_rex_60mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_rex_60mois = null;
}*/
$somme_multiple_rex_60mois = array_sum(array_values($multiple_rex));
if (count($multiple_rex) > 0) {
$multiple_rex_60mois = number_format(array_sum(array_values($multiple_rex)) / count($multiple_rex), 2, '.', ' ');
} else {
$multiple_rex_60mois = null;
}
/*$somme_multiple_rn_60mois = array_sum($multiple_rn_60mois_IQR['valeurs']);
if (count($multiple_rn_60mois_IQR['valeurs']) > 0) {
$multiple_rn_60mois = number_format(array_sum($multiple_rn_60mois_IQR['valeurs']) / count($multiple_rn_60mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_rn_60mois = null;
}*/
$somme_multiple_rn_60mois = array_sum(array_values($multiple_rn));
if (count($multiple_rn) > 0) {
$multiple_rn_60mois = number_format(array_sum(array_values($multiple_rn)) / count($multiple_rn), 2, '.', ' ');
} else {
$multiple_rn_60mois = null;
}
$bonus->__set('multipleEbe60mois', $multiple_ebe_60mois);
$bonus->__set('multipleRex60mois', $multiple_rex_60mois);
$bonus->__set('multipleRn60mois', $multiple_rn_60mois);
$update_bonus = true;
}
// Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
if ($multiple_ebe_60mois == $reference_multiple_ebe && $multiple_rex_60mois == $reference_multiple_rex && $multiple_rn_60mois == $reference_multiple_rn) {
$show_multiple_60mois = false;
} else {
$show_multiple_60mois = true;
$reference_multiple_ebe = $multiple_ebe_60mois;
$reference_multiple_rex = $multiple_rex_60mois;
$reference_multiple_rn = $multiple_rn_60mois;
}
if ($bonus->__get('multipleEbe120mois') && $bonus->__get('multipleRex120mois') && $bonus->__get('multipleRn120mois')) {
$multiple_ebe_120mois = $bonus->__get('multipleEbe120mois');
$multiple_rex_120mois = $bonus->__get('multipleRex120mois');
$multiple_rn_120mois = $bonus->__get('multipleRn120mois');
} else {
$annonces_avec_prix_120mois = $this->am->donne_annonces_avec_prix_cession_exploitables($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 120);
$multiple_ebe = [];
$multiple_rex = [];
$multiple_rn = [];
$annonces_ebe_120mois = [];
$annonces_rex_120mois = [];
$annonces_rn_120mois = [];
foreach ($annonces_avec_prix_120mois as $a) {
if ($a['EBE_n'] !== null && $a['EBE_n'] > 0) {
if ($a['prix_cession'] / $a['EBE_n'] >= $min_ebe && $a['prix_cession'] / $a['EBE_n'] <= $max_ebe) {
$multiple_ebe[] = $a['prix_cession'] / $a['EBE_n'];
$annonces_ebe_120mois[] = $a;
}
}
if ($a['resultat_exploitation_n'] !== null && $a['resultat_exploitation_n'] > 0) {
if ($a['prix_cession'] / $a['resultat_exploitation_n'] >= $min_rex && $a['prix_cession'] / $a['resultat_exploitation_n'] <= $max_rex) {
$multiple_rex[] = $a['prix_cession'] / $a['resultat_exploitation_n'];
$annonces_rex_120mois[] = $a;
}
}
if ($a['resultat_net_n'] !== null && $a['resultat_net_n'] > 0) {
if ($a['prix_cession'] / $a['resultat_net_n'] >= $min_rn && $a['prix_cession'] / $a['resultat_net_n'] <= $max_rn) {
$multiple_rn[] = $a['prix_cession'] / $a['resultat_net_n'];
$annonces_rn_120mois[] = $a;
}
}
}
/*$multiple_ebe_120mois_IQR = Statistiques::filtreIQR($multiple_ebe);
$multiple_rex_120mois_IQR = Statistiques::filtreIQR($multiple_rex);
$multiple_rn_120mois_IQR = Statistiques::filtreIQR($multiple_rn);*/
$multiple_ebe_120mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_ebe, $min_ebe, $max_ebe, $q1_ebe, $q3_ebe, $iqr_ebe);
$multiple_rex_120mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_rex, $min_rex, $max_rex, $q1_rex, $q3_rex, $iqr_rex);
$multiple_rn_120mois_IQR = Statistiques::filtreIQRAvecDonnees($multiple_rn, $min_rn, $max_rn, $q1_rn, $q3_rn, $iqr_rn);
/*$somme_multiple_ebe_120mois = array_sum($multiple_ebe_120mois_IQR['valeurs']);
if (count($multiple_ebe_120mois_IQR['valeurs']) > 0) {
$multiple_ebe_120mois = number_format(array_sum($multiple_ebe_120mois_IQR['valeurs']) / count($multiple_ebe_120mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_ebe_120mois = null;
}*/
$somme_multiple_ebe_120mois = array_sum(array_values($multiple_ebe));
if (count($multiple_ebe) > 0) {
$multiple_ebe_120mois = number_format(array_sum(array_values($multiple_ebe)) / count($multiple_ebe), 2, '.', ' ');
} else {
$multiple_ebe_120mois = null;
}
/*$somme_multiple_rex_120mois = array_sum($multiple_rex_120mois_IQR['valeurs']);
if (count($multiple_rex_120mois_IQR['valeurs']) > 0) {
$multiple_rex_120mois = number_format(array_sum($multiple_rex_120mois_IQR['valeurs']) / count($multiple_rex_120mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_rex_120mois = null;
}*/
$somme_multiple_rex_120mois = array_sum(array_values($multiple_rex));
if (count($multiple_rex) > 0) {
$multiple_rex_120mois = number_format(array_sum(array_values($multiple_rex)) / count($multiple_rex), 2, '.', ' ');
} else {
$multiple_rex_120mois = null;
}
/*$somme_multiple_rn_120mois = array_sum($multiple_rn_120mois_IQR['valeurs']);
if (count($multiple_rn_120mois_IQR['valeurs']) > 0) {
$multiple_rn_120mois = number_format(array_sum($multiple_rn_120mois_IQR['valeurs']) / count($multiple_rn_120mois_IQR['valeurs']), 2, '.', ' ');
} else {
$multiple_rn_120mois = null;
}*/
$somme_multiple_rn_120mois = array_sum(array_values($multiple_rn));
if (count($multiple_rn) > 0) {
$multiple_rn_120mois = number_format(array_sum(array_values($multiple_rn)) / count($multiple_rn), 2, '.', ' ');
} else {
$multiple_rn_120mois = null;
}
$bonus->__set('multipleEbe120mois', $multiple_ebe_120mois);
$bonus->__set('multipleRex120mois', $multiple_rex_120mois);
$bonus->__set('multipleRn120mois', $multiple_rn_120mois);
$update_bonus = true;
}
// Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
if ($multiple_ebe_120mois == $reference_multiple_ebe && $multiple_rex_120mois == $reference_multiple_rex && $multiple_rn_120mois == $reference_multiple_rn) {
$show_multiple_120mois = false;
} else {
$show_multiple_120mois = true;
$reference_multiple_ebe = $multiple_ebe_120mois;
$reference_multiple_rex = $multiple_rex_120mois;
$reference_multiple_rn = $multiple_rn_120mois;
}
if ($bonus->__get('anneesHistorique') && $bonus->__get('historiqueEbe') && $bonus->__get('historiqueRex') && $bonus->__get('historiqueRn')) {
$historique_ebe = unserialize($bonus->__get('historiqueEbe'));
$historique_rex = unserialize($bonus->__get('historiqueRex'));
$historique_rn = unserialize($bonus->__get('historiqueRn'));
$annees_historique = explode(",", $bonus->__get('anneesHistorique'));
$data_null_historique_ebe = false;
$data_null_historique_rex = false;
$data_null_historique_rn = false;
foreach ($historique_ebe as $h) {
if ($h['y'] == null) {
$data_null_historique_ebe = true;
break;
}
}
foreach ($historique_rex as $h) {
if ($h['y'] == null) {
$data_null_historique_rex = true;
break;
}
}
foreach ($historique_rn as $h) {
if ($h['y'] == null) {
$data_null_historique_rn = true;
break;
}
}
} else {
$histoEbe = $cb->getHistoriqueMultiplePrixEBE($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12, 10);
$annees_historique = $histoEbe['annees_historique'];
$historique_ebe = $histoEbe['historique'];
$data_null_historique_ebe = $histoEbe['data_null'];
$histoRex = $cb->getHistoriqueMultiplePrixREX($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12, 10);
$historique_rex = $histoRex['historique'];
$data_null_historique_rex = $histoRex['data_null'];
$histoRN = $cb->getHistoriqueMultiplePrixRN($annonce->_get('id_secteur_activite'), $annoncesVendeurComplementPrixCession->__get('dateCreation'), 12, 10);
$historique_rn = $histoRN['historique'];
$data_null_historique_rn = $histoRN['data_null'];
$bonus->__set('anneesHistorique', implode(",", $annees_historique));
$bonus->__set('historiqueEbe', serialize($historique_ebe));
$bonus->__set('historiqueRex', serialize($historique_rex));
$bonus->__set('historiqueRn', serialize($historique_rn));
$update_bonus = true;
}
if ($update_bonus) {
$this->em->persist($bonus);
$this->em->flush();
}
// ==================== FIN ELEMENTS POUR LE BONUS ===================
return $this->render('annonces/complement-annonce-vendeur/etape4.html.twig', [
'id_annonce_vendeur' => $id_annonce_vendeur,
'prix_cession_final' => $prix_cession_final,
'nom_secteur_activite' => $nom_secteur_activite,
'form' => $form->createView(),
'code' => $code,
'multiple_ebe_12mois' => $multiple_ebe_12mois,
'multiple_rex_12mois' => $multiple_rex_12mois,
'multiple_rn_12mois' => $multiple_rn_12mois,
'multiple_ebe_24mois' => $multiple_ebe_24mois,
'multiple_rex_24mois' => $multiple_rex_24mois,
'multiple_rn_24mois' => $multiple_rn_24mois,
'multiple_ebe_60mois' => $multiple_ebe_60mois,
'multiple_rex_60mois' => $multiple_rex_60mois,
'multiple_rn_60mois' => $multiple_rn_60mois,
'multiple_ebe_120mois' => $multiple_ebe_120mois,
'multiple_rex_120mois' => $multiple_rex_120mois,
'multiple_rn_120mois' => $multiple_rn_120mois,
'show_multiple_12mois' => $show_multiple_12mois,
'show_multiple_24mois' => $show_multiple_24mois,
'show_multiple_60mois' => $show_multiple_60mois,
'show_multiple_120mois' => $show_multiple_120mois,
'historique_ebe' => $historique_ebe,
'data_null_historique_ebe' => $data_null_historique_ebe,
'historique_rex' => $historique_rex,
'data_null_historique_rex' => $data_null_historique_rex,
'historique_rn' => $historique_rn,
'data_null_historique_rn' => $data_null_historique_rn,
'annees_historique' => $annees_historique,
]);
}
public function complementAnnonceVendeurSuiteRetraitEtape5(Request $request, AesEncrytageStrategy $aes, CoteFusacqBonusRepository $cfr, $codePays) {
$code = $request->query->get('ref');
// Si pas de code
if (!$code) {
return $this->redirectToRoute('index');
}
$id_annonce_vendeur = $aes->decryptage($code);
// Si $id_annonce_vendeur pas conforme
if (!is_numeric($id_annonce_vendeur)) {
return $this->redirectToRoute('index');
}
$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
// Si annonce introuvable
if (!$annonce) {
return $this->redirectToRoute('index');
}
$user = $this->getUser();
// Si pas authentifié
if (!$user) {
$this->addFlash("error", "Veuillez-vous authentifier");
return $this->redirectToRoute('index');
}
// Si l'annonce n'appartient pas à l'utilisateur
if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
return $this->redirectToRoute('index');
}
$annoncesVendeurComplementPrixCession = $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
if (!$annoncesVendeurComplementPrixCession) {
$this->addFlash('error', "Une erreur s'est produite, veuillez réessayer");
// Redirection vers l'étape 1
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays, 'ref' => $code]);
}
// On vérifie que les champs de l'etape 4 sont bien remplis
if (!$annoncesVendeurComplementPrixCession->isEtape4Completed()) {
$this->addFlash('error', "Une erreur s'est produite, veuillez réessayer");
// Redirection vers l'étape 4
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_4', ['codePays' => $codePays, 'ref' => $code]);
}
// Si le formulaire a été rempli intégralement, on redirige vers le Bonus PDF
/*if ($annoncesVendeurComplementPrixCession->isFullyCompleted()) {
return $this->redirectToRoute('la_cote_fusacq_bonus_pdf', ['codePays' => $codePays, 'ref' => $code]);
}*/
$form = $this->createFormForStep(5, $annoncesVendeurComplementPrixCession);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$annoncesVendeurComplementPrixCession->__set('isComplete', 1);
$this->em->persist($annoncesVendeurComplementPrixCession);
$this->em->flush();
// Redirection vers l'accueil
return $this->redirectToRoute('index', ['codePays' => substr($codePays, 1, 2), 'ref' => $code]);
}
return $this->render('annonces/complement-annonce-vendeur/etape5.html.twig', [
'id_annonce_vendeur' => $id_annonce_vendeur,
'form' => $form->createView(),
'code' => $code
]);
}
public function deleteAlerte(Request $request, TranslationExtension $translationExtension, $idAlerte, $codePays) {
$lang = $request->getSession()->get('lang');
$user = $this->getUser();
if (!$user) {
$this->addFlash('error', $translationExtension->translate("veuillez vous identifier pour consulter cette page", $lang, '', 'M', ''));
$uri = $request->server->get('HTTP_REFERER'); // redirect to some page
if (empty($uri)) {
return new RedirectResponse('/');
}
return new RedirectResponse($uri); // redirect to some page
}
$alerte = $this->getDoctrine()->getRepository(Alertes::class)->findOneBy(['id_alerte' => $idAlerte]);
// On verifie que l'alerte existe et qu'elle appartient à l'utilisateur
if (!$alerte || $alerte->__get('login_utilisateur') != $user->_get('login_utilisateur')) {
$this->addFlash('error', $translationExtension->translate("une erreur s'est produite, veuillez réessayer", $lang, '', 'M', ''));
} else {
$this->getDoctrine()->getManager()->remove($alerte);
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', $translationExtension->translate("votre alerte a bien ete supprimee", $lang, '', 'M', ''));
}
return $this->redirectToRoute('alertes', ['codePays' => $codePays]);
}
private function prepareAlerteParameters($alerte = null) {
$parameters = [];
if ($alerte) {
$parameters['id_alerte'] = $alerte->__get('id_alerte');
$parameters['type_annonce_surveillee'] = $alerte->__get('type_annonce_surveillee');
$parameters['titre_alerte'] = $alerte->__get('titre_alerte');
$parameters['id_secteur_activite'] = $alerte->__get('id_secteur_activite');
$parameters['id_localisations'] = $alerte->__get('id_localisations') != ",tous," ? $alerte->__get('id_localisations') : null;
$parameters['identifiant_profil'] =$alerte->__get('identifiant_profil')??NULL;
if ($parameters['id_localisations']) {
$array_id_localisation = array_values(array_filter(explode(',', $parameters['id_localisations'])));
if ($array_id_localisation) {
$array_localisations = [];
for ($i = 0; $i < count($array_id_localisation); $i++) {
if ($array_id_localisation[$i] != "tous") {
$idLocalisation = $array_id_localisation[$i];
$nom_localisation = $this->lm->getStringNomLocalisationById($idLocalisation);
$array_localisations[$array_id_localisation[$i]] = $nom_localisation;
}
}
$parameters['array_localisation'] = $array_localisations;
}
}
if ($parameters['id_secteur_activite']) {
$array_id_secteur_activite = array_values(array_filter(explode(',', $parameters['id_secteur_activite'])));
if ($array_id_secteur_activite) {
$array_secteur_activite = [];
for ($i = 0; $i < count($array_id_secteur_activite); $i++) {
$idSecteurActivite = $array_id_secteur_activite[$i];
if ($idSecteurActivite != "tous") {
$nom_secteur_activite = $this->sm->getStringNomSecteurActiviteById($idSecteurActivite);
$array_secteur_activite[$array_id_secteur_activite[$i]] = $nom_secteur_activite;
}
}
$parameters['array_secteur_activite'] = $array_secteur_activite;
}
}
// $nb_personnes_min = $alerte->__get('nb_personnes_min');
// $nb_personnes_max = $alerte->__get('nb_personnes_max');
// if ($nb_personnes_min == null && $nb_personnes_max == 9) {
// $nb_personnes = 1;
// } elseif($nb_personnes_min == 10 && $nb_personnes_max == 50) {
// $nb_personnes = 2;
// } elseif($nb_personnes_min == 50 && $nb_personnes_max == 100) {
// $nb_personnes = 3;
// } elseif($nb_personnes_min == 100 && $nb_personnes_max == 200) {
// $nb_personnes = 4;
// } elseif($nb_personnes_min == 200 && $nb_personnes_max == null) {
// $nb_personnes = 5;
// } else {
// $nb_personnes = null;
// }
// $parameters['nb_personnes'] = $nb_personnes;
$parameters['ca_min'] = $alerte->__get('ca_min') ? $alerte->__get('ca_min') : 0;
$parameters['ca_max'] = $alerte->__get('ca_max') ? $alerte->__get('ca_max') : 20000000;
$parameters['nb_personnes_min']= $alerte->__get('nb_personnes_min') ? $alerte->__get('nb_personnes_min') : 0;
$parameters['nb_personnes_max']= $alerte->__get('nb_personnes_max') ? $alerte->__get('nb_personnes_max') : 200;
$parameters['redressement_judiciaire'] = $alerte->__get('redressement_judiciaire');
$parameters['type_cession'] = $alerte->__get('type_cession');
} else {
$parameters['id_alerte'] = null;
$parameters['type_annonce_surveillee'] = null;
$parameters['titre_alerte'] = null;
$parameters['id_secteur_activite'] = null;
$parameters['id_localisations'] = null;
$parameters['nb_personnes'] = null;
$parameters['ca_min'] = null;
$parameters['ca_max'] = 20000000;
$parameters['nb_personnes_min'] = 0;
$parameters['nb_personnes_max'] = 200;
$parameters['redressement_judiciaire'] = null;
$parameters['type_cession'] = null;
}
return $parameters;
}
function bonusPdf(Request $request, AesEncrytageStrategy $aes, TranslationExtension $translationExtension, StatistiquesSecteursActiviteRepository $statistiquesRepo, HistoriqueStatsSecteursRepository $historiquesStatsRepo, SecteursActiviteRepository $secteursRepo, PDFGenerator $pf, CoteFusacqBonusRepository $cfr, $codePays) {
$code = $request->query->get('ref');
// Si pas de code
if (!$code) {
return $this->redirectToRoute('index');
}
$id_annonce_vendeur = $aes->decryptage($code);
// Si $id_annonce_vendeur pas conforme
if (!is_numeric($id_annonce_vendeur)) {
return $this->redirectToRoute('index');
}
$annonce = $this->em->getRepository(AnnoncesVendeur::class)->findOneBy(['id_annonce_vendeur' => $id_annonce_vendeur]);
// Si annonce introuvable
if (!$annonce) {
return $this->redirectToRoute('index');
}
$user = $this->getUser();
// Si pas authentifié
if (!$user) {
$this->addFlash("error", "Veuillez-vous authentifier");
return $this->redirectToRoute('index');
}
// Si l'annonce n'appartient pas à l'utilisateur
if ($annonce->_get('login_utilisateur') != $user->login_utilisateur) {
return $this->redirectToRoute('index');
}
$annoncesVendeurComplementPrixCession = $this->em->getRepository(AnnoncesVendeurComplementPrixCession::class)->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
// Si le formulaire n'a pas été complété entièrement, on redirige vers celui-ci
if (!$annoncesVendeurComplementPrixCession->isCompleted()) {
// Redirection vers l'étape 1
$lang = $request->getSession()->get('lang', 'fr');
$this->addFlash('error', $translationExtension->translate("veuillez compléter toutes les étapes afin d'accéder à la synthèse PDF", $lang, '', 'M', ''));
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays, 'ref' => $code]);
}
// ===================== ELEMENTS POUR LE BONUS 1 =====================
// On récupère le bonus enregistré s'il existe, plutôt que de relancer les requêtes de calcul
$bonus = $cfr->findOneBy(['idAnnonceVendeur' => $id_annonce_vendeur]);
// Si le bonus n'existe pas, on redirige vers le formulaire
if (!$bonus) {
// Redirection vers l'étape 1
$lang = $request->getSession()->get('lang', 'fr');
$this->addFlash('error', $translationExtension->translate("veuillez compléter toutes les étapes afin d'accéder à la synthèse PDF", $lang, '', 'M', ''));
return $this->redirectToRoute('complement_annonce_vendeur_suite_retrait_etape_1', ['codePays' => $codePays, 'ref' => $code]);
}
$nom_secteur_activite = $bonus->__get('nomSecteurActivite');
$annee_vente = $bonus->__get('anneeVente');
$classement_annee = $bonus->__get('classementAnnee');
$classement_1an = $bonus->__get('classement1an');
$classement_10ans = $bonus->__get('classement10ans');
$classement_secteur_activite = $bonus->__get('classementSecteurActivite');
$nb_secteurs_3 = $bonus->__get('nbSecteurs3');
$nom_secteur_activite_2 = $bonus->__get('nomSecteurActivite2');
$classement_secteur_activite_2 = $bonus->__get('classementSecteurActivite2');
$nb_secteurs_2 = $bonus->__get('nbSecteurs2');
$nb_annonces_secteur_activite_2 = $bonus->__get('nbAnnoncesSecteurActivite2');
$nb_annonce_12mois = $bonus->__get('nbAnnonce12mois');
$nb_annonce_24mois = $bonus->__get('nbAnnonce24mois');
$nb_annonce_60mois = $bonus->__get('nbAnnonce60mois');
$nb_annonce_120mois = $bonus->__get('nbAnnonce120mois');
$historique = unserialize($bonus->__get('historiqueNbAnnoncesDeposees'));
$annees_historique = explode(",", $bonus->__get('anneesHistorique'));
$graph1_data = [
'type' => 'line',
'data' => [
'labels' => $annees_historique,
'datasets' => [
[
'label' => "Nombre d'annonces déposées",
'data' => $historique,
'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
'borderColor' => 'rgba(48, 128, 208, 1)',
'borderWidth' => 2,
'fill' => false
]
]
],
'options' => [
'scales' => [
'y' => [
'beginAtZero' => true
]
]
]
];
$graph1 = $this->renderPngBase64($graph1_data);
// ===================== ELEMENTS POUR LE BONUS 2 =====================
$prix_annonce_moyen_12mois = $bonus->__get('prixAnnonceMoyen12mois');
$ca_moyen_avec_prix_12mois = $bonus->__get('caMoyenAvecPrix12mois');
// Si $prix_annonce_moyen_12mois ou $ca_moyen_avec_prix_12mois vide
if ($prix_annonce_moyen_12mois === "" || $ca_moyen_avec_prix_12mois === "") {
$show_prix_annonce_moyen_12mois = false;
} else {
$show_prix_annonce_moyen_12mois = true;
}
$reference_prix_annonce_moyen = $prix_annonce_moyen_12mois;
$reference_ca_moyen = $ca_moyen_avec_prix_12mois;
$prix_annonce_moyen_24mois = $bonus->__get('prixAnnonceMoyen24mois');
$ca_moyen_avec_prix_24mois = $bonus->__get('caMoyenAvecPrix24mois');
// Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
if ($prix_annonce_moyen_24mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_24mois == $reference_ca_moyen) {
$show_prix_annonce_moyen_24mois = false;
} else {
$show_prix_annonce_moyen_24mois = true;
$reference_prix_annonce_moyen = $prix_annonce_moyen_24mois;
$reference_ca_moyen = $ca_moyen_avec_prix_24mois;
}
$prix_annonce_moyen_60mois = $bonus->__get('prixAnnonceMoyen60mois');
$ca_moyen_avec_prix_60mois = $bonus->__get('caMoyenAvecPrix60mois');
// Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
if ($prix_annonce_moyen_60mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_60mois == $reference_ca_moyen) {
$show_prix_annonce_moyen_60mois = false;
} else {
$show_prix_annonce_moyen_60mois = true;
$reference_prix_annonce_moyen = $prix_annonce_moyen_60mois;
$reference_ca_moyen = $ca_moyen_avec_prix_60mois;
}
$prix_annonce_moyen_120mois = $bonus->__get('prixAnnonceMoyen120mois');
$ca_moyen_avec_prix_120mois = $bonus->__get('caMoyenAvecPrix120mois');
// Si prix_annonce_moyen et ca_moyen identique à reference, on n'affiche pas la donnée
if ($prix_annonce_moyen_120mois == $reference_prix_annonce_moyen && $ca_moyen_avec_prix_120mois == $reference_ca_moyen) {
$show_prix_annonce_moyen_120mois = false;
} else {
$show_prix_annonce_moyen_120mois = true;
$reference_prix_annonce_moyen = $prix_annonce_moyen_120mois;
$reference_ca_moyen = $ca_moyen_avec_prix_120mois;
}
$historique1 = unserialize($bonus->__get('historiquePrixMoyen'));
$historique2 = unserialize($bonus->__get('historiqueRatioMoyenPrixNbPers'));
$historique3 = unserialize($bonus->__get('historiqueRatioMoyenPrixCa'));
$data_null_historique1 = false;
$data_null_historique2 = false;
$data_null_historique3 = false;
foreach ($historique1 as $h) {
if ($h['y'] == null) {
$data_null_historique1 = true;
break;
}
}
foreach ($historique2 as $h) {
if ($h['y'] == null) {
$data_null_historique2 = true;
break;
}
}
foreach ($historique3 as $h) {
if ($h['y'] == null) {
$data_null_historique3 = true;
break;
}
}
$graph2_data = [
'type' => 'line',
'data' => [
'labels' => $annees_historique,
'datasets' => [
[
'label' => "Prix moyen (en k€)",
'data' => $historique1,
'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
'borderColor' => 'rgba(48, 128, 208, 1)',
'borderWidth' => 2,
'fill' => false
]
]
],
'options' => [
'scales' => [
'y' => [
'beginAtZero' => true
]
]
]
];
$graph2 = $this->renderPngBase64($graph2_data);
$graph3_data = [
'type' => 'line',
'data' => [
'labels' => $annees_historique,
'datasets' => [
[
'label' => "Prix moyen / collaborateur (en k€)",
'data' => $historique2,
'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
'borderColor' => 'rgba(48, 128, 208, 1)',
'borderWidth' => 2,
'fill' => false
]
]
],
'options' => [
'scales' => [
'y' => [
'beginAtZero' => true
]
]
]
];
$graph3 = $this->renderPngBase64($graph3_data);
$graph4_data = [
'type' => 'line',
'data' => [
'labels' => $annees_historique,
'datasets' => [
[
'label' => "Prix moyen / CA",
'data' => $historique3,
'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
'borderColor' => 'rgba(48, 128, 208, 1)',
'borderWidth' => 2,
'fill' => false
]
]
],
'options' => [
'scales' => [
'y' => [
'beginAtZero' => true
]
]
]
];
$graph4 = $this->renderPngBase64($graph4_data);
// ===================== ELEMENTS POUR LE BONUS 3 =====================
$multiple_12mois = $bonus->__get('multiple12mois');
// Si $multiple_12mois vide
if ($multiple_12mois === "") {
$show_multiple_ca_12mois = false;
} else {
$show_multiple_ca_12mois = true;
}
$reference_multiple_ca = $multiple_12mois;
$multiple_24mois = $bonus->__get('multiple24mois');
// Si multiple identique à reference, on n'affiche pas la donnée
if ($multiple_24mois == $reference_multiple_ca) {
$show_multiple_ca_24mois = false;
} else {
$show_multiple_ca_24mois = true;
$reference_multiple_ca = $multiple_24mois;
}
$multiple_60mois = $bonus->__get('multiple60mois');
// Si multiple identique à reference, on n'affiche pas la donnée
if ($multiple_60mois == $reference_multiple_ca) {
$show_multiple_ca_60mois = false;
} else {
$show_multiple_ca_60mois = true;
$reference_multiple_ca = $multiple_60mois;
}
$multiple_120mois = $bonus->__get('multiple120mois');
// Si multiple identique à reference, on n'affiche pas la donnée
if ($multiple_120mois == $reference_multiple_ca) {
$show_multiple_ca_120mois = false;
} else {
$show_multiple_ca_120mois = true;
$reference_multiple_ca = $multiple_120mois;
}
$historique = unserialize($bonus->__get('historiqueRatioMoyenPrixCa'));
// ===================== ELEMENTS POUR LE BONUS 4 =====================
$multiple_ebe_12mois = $bonus->__get('multipleEbe12mois');
$multiple_rex_12mois = $bonus->__get('multipleRex12mois');
$multiple_rn_12mois = $bonus->__get('multipleRn12mois');
// Si multiple_ebe, multiple_rex et multiple_rn vide
if ($multiple_ebe_12mois == "" && $multiple_rex_12mois == "" && $multiple_rn_12mois == "") {
$show_multiple_12mois = false;
} else {
$show_multiple_12mois = true;
}
$reference_multiple_ebe = $multiple_ebe_12mois;
$reference_multiple_rex = $multiple_rex_12mois;
$reference_multiple_rn = $multiple_rn_12mois;
$multiple_ebe_24mois = $bonus->__get('multipleEbe24mois');
$multiple_rex_24mois = $bonus->__get('multipleRex24mois');
$multiple_rn_24mois = $bonus->__get('multipleRn24mois');
// Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
if ($multiple_ebe_24mois == $reference_multiple_ebe && $multiple_rex_24mois == $reference_multiple_rex && $multiple_rn_24mois == $reference_multiple_rn) {
$show_multiple_24mois = false;
} else {
$show_multiple_24mois = true;
$reference_multiple_ebe = $multiple_ebe_24mois;
$reference_multiple_rex = $multiple_rex_24mois;
$reference_multiple_rn = $multiple_rn_24mois;
}
$multiple_ebe_60mois = $bonus->__get('multipleEbe60mois');
$multiple_rex_60mois = $bonus->__get('multipleRex60mois');
$multiple_rn_60mois = $bonus->__get('multipleRn60mois');
// Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
if ($multiple_ebe_60mois == $reference_multiple_ebe && $multiple_rex_60mois == $reference_multiple_rex && $multiple_rn_60mois == $reference_multiple_rn) {
$show_multiple_60mois = false;
} else {
$show_multiple_60mois = true;
$reference_multiple_ebe = $multiple_ebe_60mois;
$reference_multiple_rex = $multiple_rex_60mois;
$reference_multiple_rn = $multiple_rn_60mois;
}
$multiple_ebe_120mois = $bonus->__get('multipleEbe120mois');
$multiple_rex_120mois = $bonus->__get('multipleRex120mois');
$multiple_rn_120mois = $bonus->__get('multipleRn120mois');
// Si multiple_ebe, multiple_rex et multiple_rn identique à reference, on n'affiche pas la donnée
if ($multiple_ebe_120mois == $reference_multiple_ebe && $multiple_rex_120mois == $reference_multiple_rex && $multiple_rn_120mois == $reference_multiple_rn) {
$show_multiple_120mois = false;
} else {
$show_multiple_120mois = true;
$reference_multiple_ebe = $multiple_ebe_120mois;
$reference_multiple_rex = $multiple_rex_120mois;
$reference_multiple_rn = $multiple_rn_120mois;
}
$historique_ebe = unserialize($bonus->__get('historiqueEbe'));
$historique_rex = unserialize($bonus->__get('historiqueRex'));
$historique_rn = unserialize($bonus->__get('historiqueRn'));
$data_null_historique_ebe = false;
$data_null_historique_rex = false;
$data_null_historique_rn = false;
foreach ($historique_ebe as $h) {
if ($h['y'] == null) {
$data_null_historique_ebe = true;
break;
}
}
foreach ($historique_rex as $h) {
if ($h['y'] == null) {
$data_null_historique_rex = true;
break;
}
}
foreach ($historique_rn as $h) {
if ($h['y'] == null) {
$data_null_historique_rn = true;
break;
}
}
$graph5_data = [
'type' => 'line',
'data' => [
'labels' => $annees_historique,
'datasets' => [
[
'label' => "Multiple Prix demandé / EBE",
'data' => $historique_ebe,
'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
'borderColor' => 'rgba(48, 128, 208, 1)',
'borderWidth' => 2,
'fill' => false
]
]
],
'options' => [
'scales' => [
'y' => [
'beginAtZero' => true
]
]
]
];
$graph5 = $this->renderPngBase64($graph5_data);
$graph6_data = [
'type' => 'line',
'data' => [
'labels' => $annees_historique,
'datasets' => [
[
'label' => "Multiple Prix demandé / REX",
'data' => $historique_rex,
'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
'borderColor' => 'rgba(48, 128, 208, 1)',
'borderWidth' => 2,
'fill' => false
]
]
],
'options' => [
'scales' => [
'y' => [
'beginAtZero' => true
]
]
]
];
$graph6 = $this->renderPngBase64($graph6_data);
$graph7_data = [
'type' => 'line',
'data' => [
'labels' => $annees_historique,
'datasets' => [
[
'label' => "Multiple Prix demandé / RN",
'data' => $historique_rn,
'backgroundColor' => 'rgba(0, 51, 102, 0.8)',
'borderColor' => 'rgba(48, 128, 208, 1)',
'borderWidth' => 2,
'fill' => false
]
]
],
'options' => [
'scales' => [
'y' => [
'beginAtZero' => true
]
]
]
];
$graph7 = $this->renderPngBase64($graph7_data);
if ($data_null_historique_rex && $data_null_historique_rn) {
$page_count = 4;
} else {
$page_count = 5;
}
return $pf->generatePDFviewBrowser(
'templates_pdf/compte/la_cote_fusacq/pdf_bonus.html.twig',
[
'lang' => 'fr',
'id_annonce_vendeur' => $id_annonce_vendeur,
'nom_secteur_activite' => $nom_secteur_activite,
'annee_vente' => $annee_vente,
'classement_annee' => $classement_annee,
'classement_1an' => $classement_1an,
'classement_10ans' => $classement_10ans,
'nb_annonce_12mois' => $nb_annonce_12mois,
'nb_annonce_24mois' => $nb_annonce_24mois,
'nb_annonce_60mois' => $nb_annonce_60mois,
'nb_annonce_120mois' => $nb_annonce_120mois,
'prix_annonce_moyen_12mois' => $prix_annonce_moyen_12mois,
'ca_moyen_avec_prix_12mois' => $ca_moyen_avec_prix_12mois,
'show_prix_annonce_moyen_12mois' => $show_prix_annonce_moyen_12mois,
'prix_annonce_moyen_24mois' => $prix_annonce_moyen_24mois,
'ca_moyen_avec_prix_24mois' => $ca_moyen_avec_prix_24mois,
'show_prix_annonce_moyen_24mois' => $show_prix_annonce_moyen_24mois,
'prix_annonce_moyen_60mois' => $prix_annonce_moyen_60mois,
'ca_moyen_avec_prix_60mois' => $ca_moyen_avec_prix_60mois,
'show_prix_annonce_moyen_60mois' => $show_prix_annonce_moyen_60mois,
'prix_annonce_moyen_120mois' => $prix_annonce_moyen_120mois,
'ca_moyen_avec_prix_120mois' => $ca_moyen_avec_prix_120mois,
'show_prix_annonce_moyen_120mois' => $show_prix_annonce_moyen_120mois,
'data_null_historique1' => $data_null_historique1,
'data_null_historique2' => $data_null_historique2,
'data_null_historique3' => $data_null_historique3,
'classement_secteur_activite' => $classement_secteur_activite,
'nb_secteurs_3' => $nb_secteurs_3,
'nom_secteur_activite_2' => $nom_secteur_activite_2,
'classement_secteur_activite_2' => $classement_secteur_activite_2,
'nb_secteurs_2' => $nb_secteurs_2,
'nb_annonces_secteur_activite_2' => $nb_annonces_secteur_activite_2,
'graph1' => $graph1,
'graph2' => $graph2,
'graph3' => $graph3,
'graph4' => $graph4,
'multiple_12mois' => $multiple_12mois,
'multiple_24mois' => $multiple_24mois,
'multiple_60mois' => $multiple_60mois,
'multiple_120mois' => $multiple_120mois,
'show_multiple_ca_12mois' => $show_multiple_ca_12mois,
'show_multiple_ca_24mois' => $show_multiple_ca_24mois,
'show_multiple_ca_60mois' => $show_multiple_ca_60mois,
'show_multiple_ca_120mois' => $show_multiple_ca_120mois,
'multiple_ebe_12mois' => $multiple_ebe_12mois,
'multiple_rex_12mois' => $multiple_rex_12mois,
'multiple_rn_12mois' => $multiple_rn_12mois,
'multiple_ebe_24mois' => $multiple_ebe_24mois,
'multiple_rex_24mois' => $multiple_rex_24mois,
'multiple_rn_24mois' => $multiple_rn_24mois,
'multiple_ebe_60mois' => $multiple_ebe_60mois,
'multiple_rex_60mois' => $multiple_rex_60mois,
'multiple_rn_60mois' => $multiple_rn_60mois,
'multiple_ebe_120mois' => $multiple_ebe_120mois,
'multiple_rex_120mois' => $multiple_rex_120mois,
'multiple_rn_120mois' => $multiple_rn_120mois,
'show_multiple_12mois' => $show_multiple_12mois,
'show_multiple_24mois' => $show_multiple_24mois,
'show_multiple_60mois' => $show_multiple_60mois,
'show_multiple_120mois' => $show_multiple_120mois,
'graph5' => $graph5,
'graph6' => $graph6,
'graph7' => $graph7,
'data_null_historique_ebe' => $data_null_historique_ebe,
'data_null_historique_rex' => $data_null_historique_rex,
'data_null_historique_rn' => $data_null_historique_rn,
'page_count' => $page_count
],
'Synthèse des bonus - Annonce V'.$annonce->_get('id_annonce_vendeur'),
'synthese_bonus'
);
}
private function renderPngBase64(array $chartConfig, int $width = 599, int $height = 327, float $dpr = 1.0, float $version = 4.0): string
{
// VERSION FILE_GET_CONTENTS
/*
// 1) JSON Chart.js
$json = json_encode($chartConfig, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
// 2) Encodage pour URL
$url = 'https://quickchart.io/chart?c=' . urlencode($json)
. '&width=' . $width
. '&height=' . $height
. '&devicePixelRatio=' . $dpr
. '&version=' .$version;
// 3) Récupération image
$png = file_get_contents($url);
if ($png === false) {
throw new \RuntimeException("Impossible de récupérer l'image du graphe");
}
*/
// VERSION CURL
$url = 'https://quickchart.io/chart';
$payload = json_encode([
'c' => $chartConfig,
'width' => $width,
'height' => $height,
'devicePixelRatio' => $dpr,
'version' => $version
]);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
]);
$png = curl_exec($ch);
if ($png === false) {
throw new \RuntimeException('Erreur cURL : ' . curl_error($ch));
}
curl_close($ch);
return 'data:image/png;base64,' . base64_encode($png);
}
private function removeLocalisationLetter($id_localisation)
{
// On retire les lettres p, r et d (pays / region / departement)
return preg_replace('/[prd]/', "", $id_localisation);
}
private function createFormForStep(int $step, AnnoncesVendeurComplementPrixCession $data, $options = null)
{
switch ($step) {
case 1:
return $this->createForm(Etape1::class, $data);
case 2:
return $this->createForm(Etape2::class, $data, $options);
case 3:
return $this->createForm(Etape3::class, $data, $options);
case 4:
return $this->createForm(Etape4::class, $data, $options);
case 5:
return $this->createForm(Etape5::class, $data);
default:
throw new \InvalidArgumentException('Étape invalide');
}
}
}