<?php
namespace App\Controller;
use App\Entity\Dashboard;
use App\Entity\Objectif;
use App\Form\DashboardType;
use App\Repository\LeadRepository;
use App\Repository\ObjectifRepository;
use App\Repository\UserRepository;
use DateTime;
use DateTimeImmutable;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
/**
*@Route("/performances")
*/
class DashboardController extends AbstractController
{
public $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
private function compareDate($start, $end, $value)
{
return ($value >= $start && $value <= $end);
}
/**
*@Route("/", name="dashboard.index", methods={"GET", "POST"})
*/
public function index(Request $request, EntityManagerInterface $entityManager, UserRepository $userRepository): Response
{
$filterDate = true;
if ($request->query->get('start_date')) {
$filterDate = true;
$date_start = DateTime::createFromFormat('m-d-Y', $request->query->get('start_date'));
$date_start->setTime(0, 0);
} else {
$date_start = new DateTime();
$date_start->setDate(date('Y'), date('m'), 1)->setTime(0, 0);
}
if ($request->query->get('end_date')) {
$filterDate = true;
$date_end = DateTime::createFromFormat('m-d-Y', $request->query->get('end_date'));
$date_end->setTime(0, 0)->modify("+1 days");
} else {
$date_end = DateTime::createFromFormat('m-d-Y', date('m-d-Y'));
$date_end = new DateTime();
$date_end->setDate(date('Y'), date('m') + 1, 1)->setTime(0, 0);
}
if ($request->getSession()->get('userPossess') == 'all') {
$users = $userRepository->getAllAgent($this->getUser()->getId());
} else {
$users[] = $userRepository->find($request->getSession()->get('userPossess')->getId());
}
$objectifs = $users[0]->getObjectifs();
$objectif = null;
if ($request->getSession()->get('userPossess') != "all") {
$nb_mandat_annuel_cumul = 0;
$nb_rdv_annuel_cumul = 0;
$ca_annuel_cumul = 0;
$currentYear = 0;
$avancement_terrain = 0;
$avancement_reseau = 0;
$avancement_digital = 0;
$avancement_digital_payant = 0;
foreach ($objectifs as $objectif) {
if ($currentYear != $objectif->getCreatedAt()->format('Y')) {
$currentYear = $objectif->getCreatedAt()->format('Y');
if ($currentYear >= $date_start->format('Y') && $currentYear <= $date_end->format('Y')) {
$objectif = $objectif->getObjectif();
if ($objectif != null) {
$nb_estimation = ceil(($objectif['taux_conversion_rdv_to_mandat'] / 100) * $objectif['objectif']['vente_annuel']);
$nb_contact_vendeur_acheteur = ($nb_estimation * 8);
$ca_annuel_cumul += $objectif['objectif']['ca_annuel'];
$nb_mandat_annuel_cumul += $objectif['objectif']['vente_annuel'];
$nb_rdv_annuel_cumul += $objectif['objectif']['nb_rdv_estimation_todo'];
$avancement_terrain = $this->progression('Actions_de_prospection_terrain');
$avancement_reseau = $this->progression('Actions_entretien_réseau');
$avancement_digital = $this->progression('Actions_digitales_gratuites');
$avancement_digital_payant = $this->progression('Actions_digitales_payantes');
}
}
}
}
}
$tasks_late = [];
$tasks_todo = [];
$automatisation = [];
$mandats = [];
$rdvs = [];
$leads = [];
$leads_lost = [];
$ca_potentiel = [];
$ca_previsionnel = [];
$ca_genere = [];
$lead_entrant = [];
$all_lead = [];
$lead_seller = [];
$lead_buyer = [];
$lead_partner = [];
$all_lead_buyer = [];
$all_lead_seller = [];
$all_lead_partner = [];
foreach ($users as $user) {
/**
* Recherche des tâches en retard
*/
foreach ($user->getTasksActor() as $task) {
if ($filterDate) {
if ($task->getArchive() == false || $task->getDateArchive() > $date_end) {
if ($this->compareDate($date_start, $date_end, $task->getDueDate())) {
$tasks_todo[] = $task;
}
if ($task->getDueDate() < $date_start) {
$tasks_late[] = $task;
}
}
} else {
if ($task->getDueDate() <= new DateTime('now')) {
$tasks_late[] = $task;
} else {
$tasks_todo[] = $task;
}
}
}
/**
* Récupération des leads de l'utilisateur
* Si l'argument "all" est passé, on récupère tout les leads qui ont l'id possessor = à l'id de l'utilisateur courant. (admin)
*/
$lead = $user->getLeads();
$lead_entrant = $user->getLeadsByPossessor();
/**
* If empty pour éviter les doublons dans le cas du "all"
*/
foreach ($lead as $l) {
if ($l->getAutomatisation() == 1) {
$automatisation[] = $l;
}
if ($l->getState() >= 5 && $l->getState() <= 7 && $l->isSeller()) {
if ($filterDate) {
if ($l->getMandat() != null && $this->compareDate($date_start, $date_end, new DateTime($l->getMandat()[$l->getState()]['update_at']['date']))) {
$mandats[] = $l;
switch ($l->getState()) {
case 5:
$ca_potentiel[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
// $ca_previsionnel[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
break;
case 6:
// $ca_potentiel[] = $l->getMandat()[$l->getState()]['amount_property'] ?? 0;
$ca_previsionnel[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
break;
case 7:
// $ca_potentiel[] = $l->getMandat()[$l->getState()]['amount_property'] ?? 0;
// $ca_previsionnel[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
$ca_genere[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
break;
}
if ($l->getState() >= 3 && $l->getState() <= 8 && $l->isSeller()) {
$rdvs[] = $l;
}
}
} else {
switch ($l->getState()) {
case 5:
$ca_potentiel[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
// $ca_previsionnel[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
break;
case 6:
// $ca_potentiel[] = $l->getMandat()[$l->getState()]['amount_property'] ?? 0;
$ca_previsionnel[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
break;
case 7:
// $ca_potentiel[] = $l->getMandat()[$l->getState()]['amount_property'] ?? 0;
// $ca_previsionnel[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
$ca_genere[] = $l->getMandat()[$l->getState()]['amount_fees'] ?? 0;
break;
}
if ($l->getState() >= 3 && $l->getState() <= 8 && $l->isSeller()) {
$rdvs[] = $l;
}
}
}
if ($filterDate) {
if ($this->compareDate($date_start, $date_end, $l->getCreatedAt())) {
$leads[] = $l;
if ($l->getIntention() == 0) $lead_buyer[] = $l;
if ($l->getIntention() == 1) $lead_seller[] = $l;
if ($l->getIntention() == 2) $lead_partner[] = $l;
if ($l->getState() == 9) {
$leads_lost[] = $l;
}
}
} else {
$leads[] = $l;
if ($l->getIntention() == 0) $lead_buyer[] = $l;
if ($l->getIntention() == 1) $lead_seller[] = $l;
if ($l->getIntention() == 2) $lead_partner[] = $l;
if ($l->getState() == 9) {
$leads_lost[] = $l;
}
}
}
}
foreach ($lead_entrant as $le) {
if ($filterDate) {
if ($this->compareDate($date_start, $date_end, $le->getCreatedAt())) {
$all_lead[] = $le;
if ($le->getIntention() == 0) $all_lead_buyer[] = $le;
if ($le->getIntention() == 1) $all_lead_seller[] = $le;
if ($le->getIntention() == 2) $all_lead_partner[] = $le;
}
} else {
$all_lead[] = $le;
if ($le->getIntention() == 0) $all_lead_buyer[] = $le;
if ($le->getIntention() == 1) $all_lead_seller[] = $le;
if ($le->getIntention() == 2) $all_lead_partner[] = $le;
}
}
$paramsRender = [
'ca_potentiel' => array_sum($ca_potentiel),
'ca_previsionnel' => array_sum($ca_previsionnel),
'ca_genere' => array_sum($ca_genere),
'current_page' => 'home',
'tasks_late' => count($tasks_late),
'tasks_todo' => count($tasks_todo),
'automatisation' => count($automatisation),
'mandats' => count($mandats),
'rdvs' => count($rdvs),
'leads' => count($leads),
'all_lead' => count($all_lead),
'leads_lost' => count($leads_lost),
'lead_buyer' => count($lead_buyer),
'lead_seller' => count($lead_seller),
'lead_partner' => count($lead_partner),
'all_lead_buyer' => count($all_lead_buyer),
'all_lead_seller' => count($all_lead_seller),
'all_lead_partner' => count($all_lead_partner),
];
if ($objectif != null) {
$paramsRender['avancement_terrain'] = $avancement_terrain;
$paramsRender['avancement_reseau'] = $avancement_reseau;
$paramsRender['avancement_digital'] = $avancement_digital;
$paramsRender['avancement_digital_payant'] = $avancement_digital_payant;
// $paramsRender['nb_contact_todo'] = $nb_contact_vendeur_acheteur; // Pas utilisé
// $paramsRender['objectifs'] = $objectif['objectif']; // à enlever
$paramsRender['ca_annuel_cumul'] = $ca_annuel_cumul;
$paramsRender['nb_mandat_annuel_cumul'] = $nb_mandat_annuel_cumul;
$paramsRender['nb_rdv_annuel_cumul'] = $nb_rdv_annuel_cumul;
}
if ($request->isXmlHttpRequest()) {
return new JsonResponse([
'perf' => $this->renderView('dashboard/perf.html.twig', $paramsRender),
]);
}
return $this->render('dashboard/index.html.twig', $paramsRender);
}
private function progression($action)
{
$currentValue = 0;
$maxValue = 0;
$plans = $this->getUser()->getObjectifs()[0]->getPlans();
for ($i = 0; $i < count($plans[$action]) - 1; $i++) {
if (isset($plans[$action][$i]['missions'])) {
for ($j = 0; $j < count($plans[$action][$i]['missions']) - 1; $j++) {
$currentValue += $plans[$action][$i]['missions'][$j]['value'];
$maxValue += $plans[$action][$i]['missions'][$j]['value_max'];
}
} else {
$currentValue += $plans[$action][$i]['value'];
$maxValue += $plans[$action][$i]['value_max'];
}
}
return ceil(($currentValue * 100) / $maxValue);
}
/**
*@Route("/actions/", name="dashboard.actions", methods={"GET"})
*/
public function actions(Request $request)
{
$objectif = $this->getUser()->getObjectifs()[0];
if ($objectif == null) {
return $this->redirectToRoute('objectif.index', [], Response::HTTP_SEE_OTHER);
}
$objectif = $objectif->getObjectif();
if ($objectif != null) {
$nb_estimation = ceil(($objectif['taux_conversion_rdv_to_mandat'] / 100) * $objectif['objectif']['vente_annuel']);
$nb_contact_vendeur_acheteur = ($nb_estimation * 8);
$avancement_terrain = $this->progression('Actions_de_prospection_terrain');
$avancement_reseau = $this->progression('Actions_entretien_réseau');
$avancement_digital = $this->progression('Actions_digitales_gratuites');
$avancement_digital_payant = $this->progression('Actions_digitales_payantes');
}
// if ($request->isXmlHttpRequest()) {
// return $content;
// }
return $this->render(
'dashboard/plan_actions.html.twig',
[
'current_page' => 'actions',
'avancement_terrain' => $avancement_terrain,
'avancement_reseau' => $avancement_reseau,
'avancement_digital' => $avancement_digital,
'avancement_digital_payant' => $avancement_digital_payant,
]
);
}
/**
*@Route("/action", name="dashboard.action", methods={"GET"})
*/
public function action(Request $request)
{
$objectifs = $this->getUser()->getObjectifs()[0];
if ($objectifs == null) {
return $this->redirectToRoute('objectif.index', [], Response::HTTP_SEE_OTHER);
}
if ($request->isXmlHttpRequest()) {
return new JsonResponse([
'action' => $this->renderView('dashboard/action_terrain.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_de_prospection_terrain']]),
'title' => 'Actions prospection terrain',
]);
}
return $this->render(
'dashboard/actions.html.twig',
[
'current_page' => 'actions',
'title' => 'Actions prospection terrain',
'data' => $this->renderView('dashboard/action_terrain.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_de_prospection_terrain']])
]
);
}
/**
*@Route("/action/action-terrain", name="dashboard.action_terrain", methods={"GET"})
*/
public function action_terrain(Request $request)
{
$objectifs = $this->getUser()->getObjectifs()[0];
if ($objectifs == null) {
return $this->redirectToRoute('objectif.index', [], Response::HTTP_SEE_OTHER);
}
if ($request->isXmlHttpRequest()) {
return new JsonResponse([
'action' => $this->renderView('dashboard/action_terrain.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_de_prospection_terrain']]),
'title' => 'Actions prospection terrain',
]);
}
return $this->render(
'dashboard/actions.html.twig',
[
'current_page' => 'actions',
'title' => 'Actions prospection terrain',
'data' => $this->renderView('dashboard/action_terrain.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_de_prospection_terrain']])
]
);
}
/**
*@Route("/action/action-entretien-reseau", name="dashboard.action_entretien_reseau", methods={"GET"})
*/
public function action_entretien_reseau(Request $request)
{
$objectifs = $this->getUser()->getObjectifs()[0];
if ($objectifs == null) {
return $this->redirectToRoute('objectif.index', [], Response::HTTP_SEE_OTHER);
}
if ($request->isXmlHttpRequest()) {
return new JsonResponse([
'action' => $this->renderView('dashboard/action_entretien_reseau.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_entretien_réseau']]),
'title' => 'Actions entretien réseau',
]);
}
return $this->render(
'dashboard/actions.html.twig',
[
'current_page' => 'actions',
'title' => 'Actions entretien réseau',
'data' => $this->renderView('dashboard/action_entretien_reseau.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_entretien_réseau']])
]
);
}
/**
*@Route("/action/action-prospection-digital", name="dashboard.action_prospection_digital", methods={"GET"})
*/
public function action_prospection_digital(Request $request)
{
$objectifs = $this->getUser()->getObjectifs()[0];
if ($objectifs == null) {
return $this->redirectToRoute('objectif.index', [], Response::HTTP_SEE_OTHER);
}
if ($request->isXmlHttpRequest()) {
return new JsonResponse([
'action' => $this->renderView('dashboard/action_prospection_digital.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_digitales_gratuites']]),
'title' => 'Actions prospection digital',
]);
}
return $this->render(
'dashboard/actions.html.twig',
[
'current_page' => 'actions',
'title' => 'Actions prospection digital',
'data' => $this->renderView('dashboard/action_prospection_digital.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_digitales_gratuites']])
]
);
}
/**
*@Route("/action/action-prospection-digital-payante", name="dashboard.action_prospection_digital_payante", methods={"GET"})
*/
public function action_prospection_digital_payante(Request $request)
{
$objectifs = $this->getUser()->getObjectifs()[0];
if ($request->isXmlHttpRequest()) {
return new JsonResponse([
'action' => $this->renderView('dashboard/action_prospection_digital_payante.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_digitales_payantes']]),
'title' => 'Actions prospection digital payante',
]);
}
return $this->render(
'dashboard/actions.html.twig',
[
'current_page' => 'actions',
'title' => 'Actions prospection digital payante',
'data' => $this->renderView('dashboard/action_prospection_digital_payante.html.twig', ['current_page' => 'actions', 'data' => $objectifs->getPlans()['Actions_digitales_payantes']])
]
);
}
/**
*@Route("/update-action", name="dashboard.update_action", methods={"POST"})
*/
public function update_action(Request $request, EntityManagerInterface $em)
{
$objectifs = $this->getUser()->getObjectifs()[0];
$actions = $objectifs->getPlans();
for ($i = 0; $i < count($actions[$request->request->get('action_name')]) - 1; $i++) {
if ($request->request->get('submission_name') != '') {
for ($j = 0; $j < count($actions[$request->request->get('action_name')][$i]['missions']); $j++) {
if ($actions[$request->request->get('action_name')][$i]['missions'][$j]['name'] == $request->request->get('submission_name')) {
$actions[$request->request->get('action_name')][$i]['missions'][$j]['value'] = $request->request->get('value');
break;
}
}
} else {
if ($actions[$request->request->get('action_name')][$i]['name'] == $request->request->get('mission_name')) {
$actions[$request->request->get('action_name')][$i]['value'] = $request->request->get('value');
break;
}
}
}
$objectifs->setPlans($actions);
$em->flush($objectifs);
if ($request->isXmlHttpRequest()) {
return new JsonResponse(true);
}
}
/**
*@Route("/comparaison", name="dashboard.compare", methods={"GET", "POST"})
*/
public function compare(Request $request, ObjectifRepository $objectifRepository)
{
return $this->comparaison($request, $objectifRepository, 'Actions_de_prospection_terrain', 'compare_action_terrain');
}
/**
*@Route("/comparaison/action-terrain", name="dashboard.compare_action_terrain", methods={"GET"})
*/
public function compare_action_terrain(Request $request, ObjectifRepository $objectifRepository)
{
return $this->comparaison($request, $objectifRepository, 'Actions_de_prospection_terrain', 'compare_action_terrain');
}
/**
*@Route("/comparaison/action-entretien-reseau", name="dashboard.compare_action_entretien_reseau", methods={"GET"})
*/
public function compare_action_entretien_reseau(Request $request, ObjectifRepository $objectifRepository)
{
return $this->comparaison($request, $objectifRepository, 'Actions_entretien_réseau', 'compare_action_entretien_reseau');
}
/**
*@Route("/comparaison/action-prospection-digital", name="dashboard.compare_action_prospection_digital", methods={"GET"})
*/
public function compare_action_prospection_digital(Request $request, ObjectifRepository $objectifRepository)
{
return $this->comparaison($request, $objectifRepository, 'Actions_digitales_gratuites', 'compare_action_prospection_digital');
}
/**
*@Route("/comparaison/action-prospection-digital-payantes", name="dashboard.compare_action_prospection_digital_payantes", methods={"GET"})
*/
public function compare_action_prospection_digital_payantes(Request $request, ObjectifRepository $objectifRepository)
{
return $this->comparaison($request, $objectifRepository, 'Actions_digitales_payantes', 'compare_action_prospection_digital_payante');
}
private function comparaison(Request $request, ObjectifRepository $objectifRepository, string $action, string $template)
{
foreach ($this->getUser()->getObjectifs() as $objectif) {
$selectObjectif[$objectif->getId()] = $objectif->getCreatedAt();
}
if ($request->query->get('dateSelect') || $request->query->get('dateSelect2')) {
$objectifs = $objectifRepository->find($request->query->get('dateSelect'));
if (empty($objectifs) || $objectifs->getUser() != $this->getUser()) $objectifs = $this->getUser()->getObjectifs()[0];
$objectifs2 = $objectifRepository->find($request->query->get('dateSelect2'));
if (empty($objectifs2) || $objectifs2->getUser() != $this->getUser()) $objectifs2 = $this->getUser()->getObjectifs()[1];
} else {
$objectifs = $this->getUser()->getObjectifs()[0];
$objectifs2 = $this->getUser()->getObjectifs()[1];
}
if ($objectifs == null) {
return $this->redirectToRoute('objectif.index', [], Response::HTTP_SEE_OTHER);
}
if ($objectifs2 == null) {
$objectifs2 = $objectifs;
}
$date1 = $objectifs->getId();
$date2 = $objectifs2->getId();
if ($request->isXmlHttpRequest()) {
return new JsonResponse([
'action' => $this->renderView('dashboard/' . $template . '.html.twig', ['current_page' => 'compare', 'data' => $objectifs->getPlans()[$action], 'data2' => $objectifs2->getPlans()[$action]]),
'title' => str_replace('_', ' ', $action),
]);
}
return $this->render(
'dashboard/compares.html.twig',
[
'date1' => $date1,
'date2' => $date2,
'selectDate' => $selectObjectif,
'current_page' => 'compare',
'title' => str_replace('_', ' ', $action),
'data' => $this->renderView('dashboard/' . $template . '.html.twig', ['current_page' => 'compare', 'data' => $objectifs->getPlans()[$action], 'data2' => $objectifs2->getPlans()[$action]])
]
);
}
/**
*@Route("/comparaison/contact-evolution", name="dashboard.contact_evolution", methods={"GET"})
*/
public function contact_evolution(Request $request, LeadRepository $leadRepository, ObjectifRepository $objectifRepository)
{
$monthFr = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'];
$monthEn = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
$year1 = new DateTimeImmutable("now");
$year1 = $year1->setDate(date('Y'), 1, 1);
$year1 = $year1->setTimestamp(strtotime('-3 month', $year1->getTimestamp()));
$year1 = new DateTimeImmutable($year1->format('d-m-Y'));
$year1->setTime(0, 0, 0);
$year2 = new DateTimeImmutable("now");
$year2 = $year2->setDate(date('Y'), 12, 31)->setTime(23, 59, 59);
$leads_unfiltered = $leadRepository->findLeadsBetweenDate($year1, $year2, $this->getUser());
$leads = [];
$mois = $year1->format('m');
$annee = $year1->format('Y');
for ($i = 0; $i < 15; $i++) {
if ($mois > 12) {
$mois = 1;
$annee += 1;
}
$leads['achat'][$monthFr[$mois - 1] . ' ' . $annee] = 0;
$leads['vente'][$monthFr[$mois - 1] . ' ' . $annee] = 0;
$leads['partenaire'][$monthFr[$mois - 1] . ' ' . $annee] = 0;
$leads['n/a'][$monthFr[$mois - 1] . ' ' . $annee] = 0;
$mois++;
}
foreach ($leads_unfiltered as $lead) {
$month = $monthFr[array_search($lead->getCreatedAt()->format('F'), $monthEn)] . ' ' . $lead->getCreatedAt()->format('Y');
if ($lead->getIntention() === 0) $leads['achat'][$month] = $leads['achat'][$month] + 1;
elseif ($lead->getIntention() == 1) $leads['vente'][$month] = $leads['vente'][$month] + 1;
elseif ($lead->getIntention() == 2) $leads['partenaire'][$month] = $leads['partenaire'][$month] + 1;
else $leads['n/a'][$month] = $leads['n/a'][$month] + 1;
}
foreach ($this->getUser()->getObjectifs() as $objectif) {
$selectObjectif[$objectif->getId()] = $objectif->getCreatedAt();
}
if ($request->query->get('dateSelect') || $request->query->get('dateSelect2')) {
$objectifs = $objectifRepository->find($request->query->get('dateSelect'));
if (empty($objectifs) || $objectifs->getUser() != $this->getUser()) $objectifs = $this->getUser()->getObjectifs()[0];
$objectifs2 = $objectifRepository->find($request->query->get('dateSelect2'));
if (empty($objectifs2) || $objectifs2->getUser() != $this->getUser()) $objectifs2 = $this->getUser()->getObjectifs()[1];
} else {
$objectifs = $this->getUser()->getObjectifs()[0];
$objectifs2 = $this->getUser()->getObjectifs()[1];
}
$date1 = $objectifs->getId();
$date2 = $objectifs2->getId();
if ($request->isXmlHttpRequest()) {
return new JsonResponse([
'action' => $this->renderView('dashboard/contact-evolution.html.twig', ['current_page' => 'compare', 'data' => $leads]),
'title' => 'Evolution nouveaux contacts',
]);
}
return $this->render(
'dashboard/compares.html.twig',
[
'date1' => $date1,
'date2' => $date2,
'selectDate' => $selectObjectif,
'current_page' => 'compare',
'title' => 'Evolution nouveaux contacts',
'data' => $this->renderView('dashboard/contact-evolution.html.twig', ['current_page' => 'compare', 'data' => $leads])
]
);
}
/**
*@Route("/comparaison/rdv-mandat-evolution", name="dashboard.rdv_mandat_evolution", methods={"GET"})
*/
public function rdv_mandat_evolution(Request $request, LeadRepository $leadRepository, ObjectifRepository $objectifRepository)
{
$monthFr = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'];
$monthEn = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
$year1 = new DateTimeImmutable("now");
$year1 = $year1->setDate(date('Y'), 1, 1);
$year1 = $year1->setTimestamp(strtotime('-3 month', $year1->getTimestamp()));
$year1 = new DateTimeImmutable($year1->format('d-m-Y'));
$year1->setTime(0, 0, 0);
$year2 = new DateTimeImmutable("now");
$year2 = $year2->setDate(date('Y'), 12, 31)->setTime(23, 59, 59);
$leads_unfiltered = $leadRepository->findLeadsWithMandat($this->getUser());
$leads = [];
$mois = $year1->format('m');
$annee = $year1->format('Y');
for ($i = 0; $i < 15; $i++) {
if ($mois > 12) {
$mois = 1;
$annee += 1;
}
$leads['nb_rdv_estimation'][$monthFr[$mois - 1] . ' ' . $annee] = 0;
$objectif = $objectifRepository->findByDate(date('Y-m-d', strtotime($annee.'-'.$mois.'-01')), $this->getUser());
if(!empty($objectif)){
$leads['nb_rdv_objectif'][$monthFr[$mois - 1] . ' ' . $annee] = ceil($objectif[0]->getObjectif()['objectif']['nb_rdv_estimation_todo'] / 12);
}else{
$leads['nb_rdv_objectif'][$monthFr[$mois - 1] . ' ' . $annee] = [];
}
$leads['mandat_signe'][$monthFr[$mois - 1] . ' ' . $annee] = 0;
if(!empty($objectif)){
$leads['mandat_objectif'][$monthFr[$mois - 1] . ' ' . $annee] = ceil(($objectif[0]->getObjectif()['objectif']['nb_unite_todo'] / 2) / 12);
}else{
$leads['mandat_objectif'][$monthFr[$mois - 1] . ' ' . $annee] = [];
}
$mois++;
}
foreach($leads_unfiltered as $lead){
$mandat = $lead->getMandat();
$month = $monthFr[array_search(date('F', strtotime($mandat[$lead->getState()]['update_at']['date'])), $monthEn)] . ' ' . date('Y', strtotime($mandat[$lead->getState()]['update_at']['date']));
if ($lead->getState() >= 3 && $lead->getState() <= 8 && $lead->isSeller()) {
// RENDEZ VOUS
$leads['nb_rdv_estimation'][$month] += 1;
}
if ($lead->getState() >= 5 && $lead->getState() <= 7 && $lead->isSeller()) {
// MANDATS
$leads['mandat_signe'][$month] += 1;
}
}
foreach ($this->getUser()->getObjectifs() as $objectif) {
$selectObjectif[$objectif->getId()] = $objectif->getCreatedAt();
}
if ($request->query->get('dateSelect') || $request->query->get('dateSelect2')) {
$objectifs = $objectifRepository->find($request->query->get('dateSelect'));
if (empty($objectifs) || $objectifs->getUser() != $this->getUser()) $objectifs = $this->getUser()->getObjectifs()[0];
$objectifs2 = $objectifRepository->find($request->query->get('dateSelect2'));
if (empty($objectifs2) || $objectifs2->getUser() != $this->getUser()) $objectifs2 = $this->getUser()->getObjectifs()[1];
} else {
$objectifs = $this->getUser()->getObjectifs()[0];
$objectifs2 = $this->getUser()->getObjectifs()[1];
}
$date1 = $objectifs->getId();
$date2 = $objectifs2->getId();
if ($request->isXmlHttpRequest()) {
return new JsonResponse([
'action' => $this->renderView('dashboard/contact-rdv-mandat.html.twig', ['current_page' => 'compare', 'data' => $leads]),
'title' => 'Evolution prise de rendez-vous et mandat',
]);
}
return $this->render(
'dashboard/compares.html.twig',
[
'date1' => $date1,
'date2' => $date2,
'selectDate' => $selectObjectif,
'current_page' => 'compare',
'title' => 'Evolution prise de rendez-vous et mandat',
'data' => $this->renderView('dashboard/contact-rdv-mandat.html.twig', ['current_page' => 'compare', 'data' => $leads])
]
);
}
}