<?php
namespace App\Controller;
use App\Entity\Permission;
use App\Entity\Service;
use App\Repository\PaysRepository;
use App\Repository\ServiceRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use App\Service\StatistiqueService;
use App\Entity\User;
use App\Repository\CommandeRepository;
use App\Repository\ServicePaysLivraisonRepository;
use Symfony\Component\HttpFoundation\Request;
class GSHomeController extends AbstractController
{
/**
* @Route("/gs", name="app_gs_home")
*/
public function index(
ServiceRepository $serviceRepository,
PaysRepository $paysRepository,
StatistiqueService $statistiqueService,
CommandeRepository $commandeRepository): Response
{
/** @var User $user */
$user = $this->getUser();
$fournisseur = $user->getFournisseur();
$servicesLibelle = $paysLivraisons = [];
if (!empty($fournisseur))
{
$services = $fournisseur->getServicePaysLivraisons();
$arr = [];
foreach ($services as $servicePays)
{
if (!$servicePays->isStatus())
{
continue;
}
$pays = $servicePays->getPays();
$service = $pays->getService();
$arr[] = $service;
$paysLivraisons[$pays->getId()] = $pays;
$servicesLibelle[] = $service->getNom();
}
// Verifier si le fournisseur a le droit de voir le service vente privée
if ($this->isGranted(Permission::ATTRIBUTE_VIEW, Permission::MODULE_VENTES_EMBALLAGE))
{
$service = $serviceRepository->findOneBy(['code' => Service::CODE_VENTE_PRIVEES]);
if (null !== $service)
{
$service->setNom(Permission::MODULE_VENTES_EMBALLAGE);
$listePays = $service->getPays();
foreach ($listePays as $pays)
{
if (!$pays->isActif())
{
continue;
}
$paysLivraisons[$pays->getId()] = $pays;
}
$servicesLibelle[] = $service->getNom();
$arr[] = $service;
}
}
$services = $arr;
$paysLivraisons = array_values($paysLivraisons);
}
else
{
$services = $serviceRepository->findBy([], ['position' => 'ASC']);
$arr = [];
/** @param Service $service */
foreach ($services as $service)
{
if (!$service->isStatut())
{
continue;
}
$listePays = $service->getPays();
foreach ($listePays as $pays)
{
if (!$pays->isActif())
{
continue;
}
$paysLivraisons[$pays->getId()] = $pays;
}
$servicesLibelle[] = $service->getNom();
}
$paysLivraisons = array_values($paysLivraisons);
}
// Récuperer les pays de livraison
if (count($paysLivraisons) < 1)
{
$paysLivraisons = $paysRepository->getPaysByServices($services, 'depart', true);
}
$arr = [];
foreach ($paysLivraisons as $pays)
{
$service = $pays->getService();
$arr[$service->getNom()][] = $pays;
}
$paysLivraisons = $arr;
$nombreVisiteurs = $nombreVisitByClient = [];
if (empty($fournisseur))
{
$nombreVisiteurs = $statistiqueService->getVisiteurStats('all', 'visiteur', null, null, $fournisseur);
$nombreVisitByClient = $statistiqueService->getVisiteurStats('all', 'client', null, null, $fournisseur);
}
$chiffreAffaireTotal = 0;
$evolutionVentes = [];
$startDate = $endDate = null;
if (count($services) > 0)
{
// par défault on prendra l'année en cours
$startDate = (new \DateTime('first day of january'))->format('Y-m-d');
$endDate = (new \DateTimeImmutable())->format('Y-m-d');
$searchEndDate = (new \DateTimeImmutable())->modify('+1 day')->format('Y-m-d');
$chiffreAffaireTotal = $commandeRepository->getChiffreAffaireTotal($servicesLibelle, [], $startDate, $searchEndDate, $fournisseur);
$evolutionVentes = $statistiqueService->getEvolutionVentes($servicesLibelle, [], $startDate, $endDate, $fournisseur);
}
$data = [];
foreach ($services as $service)
{
$data[$service->getNom()] = $service;
}
return $this->render('home/index.html.twig', [
'services' => $services,
'servicesFilter' => $data,
'paysLivraisons' => $paysLivraisons,
'nombreVisiteurs' => $nombreVisiteurs,
'nombreVisitByClient' => $nombreVisitByClient,
'chiffreAffaireTotal' => $chiffreAffaireTotal,
'evolutionsVentes' => $evolutionVentes,
'dateDebut' => $startDate,
'dateFin' => $endDate
]);
}
/**
* @Route("/", name="app_home")
*/
public function home(): Response
{
return $this->redirectToRoute('app_gs_home');
}
}