src/Controller/DashboardController.php line 20

Open in your IDE?
  1. <?php
  2. // src/Controller/DashboardController.php
  3. namespace App\Controller;
  4. use App\Repository\CardTransactionRepository;
  5. use App\Repository\PaiementRecetteRepository;
  6. use App\Repository\RecetteRepository;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use App\Repository\DashboardRepository;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. class DashboardController extends AbstractController
  15. {
  16.     #[Route('/admin/dashboard'name'app_dashboard')]
  17.     public function index(
  18.         RecetteRepository $recetteRepository,
  19.         PaiementRecetteRepository $paiementRepository
  20.     ): Response {
  21.         $this->denyAccessUnlessGranted('ROLE_SUPER_ADMIN'null'Accès non autorisé');
  22.         $currentYear date('Y');
  23.         $currentMonth date('m');
  24.         // Statistiques annuelles
  25.         $caAnnuel $recetteRepository->getCAByYear($currentYear);
  26.         // Statistiques du mois en cours
  27.         $caMoisEnCours $recetteRepository->getCAByMonth($currentYear$currentMonth);
  28.         // Répartition par type de paiement du mois
  29.         $paiementCB $paiementRepository->findPaiementsCBByMonth($currentYear$currentMonth);
  30.         $paiementEspeces $paiementRepository->findPaiementsEspecesByMonth($currentYear$currentMonth);
  31.         $acomptes $recetteRepository->findAcomptesByMonth($currentYear$currentMonth);
  32.         // Données pour le graphique d'évolution mensuelle
  33.         $evolutionMensuelle $recetteRepository->getMonthlyEvolution($currentYear);
  34.         // Comparaison avec le mois précédent (même période)
  35.         $comparaisonMois $recetteRepository->getComparaisonMemeJour();
  36.         // Meilleurs jours de la semaine
  37.         $bestDays $recetteRepository->getBestDaysOfWeek($currentYear$currentMonth);
  38.         // Meilleur jour du mois
  39.         $meilleurJour $recetteRepository->getMeilleurJourDuMois($currentYear$currentMonth);
  40.         return $this->render('admin/tresorerie.html.twig', [
  41.             'caAnnuel' => $caAnnuel,
  42.             'caMoisEnCours' => $caMoisEnCours,
  43.             'paiementCB' => $paiementCB,
  44.             'paiementEspeces' => $paiementEspeces,
  45.             'acomptes' => $acomptes,
  46.             'evolutionMensuelle' => $evolutionMensuelle,
  47.             'comparaisonMois' => $comparaisonMois,
  48.             'bestDays' => $bestDays,
  49.             'meilleurJour' => $meilleurJour
  50.         ]);
  51.     }
  52.     #[Route('/admin/dashboard/especes-details'name'app_dashboard_especes_details')]
  53.     public function especesDetails(PaiementRecetteRepository $paiementRepository): JsonResponse
  54.     {
  55.         $this->denyAccessUnlessGranted('ROLE_SUPER_ADMIN'null'Accès non autorisé');
  56.         $currentYear date('Y');
  57.         $currentMonth date('m');
  58.         $detailsPaiements $paiementRepository->findDetailsPaiementsEspeces($currentYear$currentMonth);
  59.         // Formater les données pour le JSON
  60.         $formattedData array_map(function($paiement) {
  61.             return [
  62.                 'id' => $paiement->getId(),
  63.                 'date' => $paiement->getRecette()->getDate()->format('d/m/Y H:i'),
  64.                 'client' => $paiement->getRecette()->getNomClient(),
  65.                 'montant' => number_format($paiement->getSommePayee(), 2','' '),
  66.                 'total' => number_format($paiement->getRecette()->getTotal(), 2','' '),
  67.                 'acompte' => number_format($paiement->getRecette()->getAcompte(), 2','' ')
  68.             ];
  69.         }, $detailsPaiements);
  70.         // Trier par date croissante (début du mois en premier)
  71.         usort($formattedData, function($a$b) {
  72.             $dateA \DateTime::createFromFormat('d/m/Y H:i'$a['date']);
  73.             $dateB \DateTime::createFromFormat('d/m/Y H:i'$b['date']);
  74.             return $dateA <=> $dateB;
  75.         });
  76.         return $this->json($formattedData);
  77.     }
  78.     #[Route('/admin/dashboard/cb-details'name'app_dashboard_cb_details')]
  79.     public function cbDetails(PaiementRecetteRepository $paiementRepository): JsonResponse
  80.     {
  81.         $this->denyAccessUnlessGranted('ROLE_SUPER_ADMIN'null'Accès non autorisé');
  82.         $currentYear date('Y');
  83.         $currentMonth date('m');
  84.         $detailsPaiements $paiementRepository->findDetailsPaiementsCB($currentYear$currentMonth);
  85.         return $this->json($this->formatPaiements($detailsPaiements));
  86.     }
  87.     #[Route('/admin/dashboard/acompte-details'name'app_dashboard_acompte_details')]
  88.     public function acompteDetails(RecetteRepository $recetteRepository): JsonResponse
  89.     {
  90.         $this->denyAccessUnlessGranted('ROLE_SUPER_ADMIN'null'Accès non autorisé');
  91.         $currentYear date('Y');
  92.         $currentMonth date('m');
  93.         $detailsAcomptes $recetteRepository->findDetailsAcomptes($currentYear$currentMonth);
  94.         return $this->json($this->formatAcomptes($detailsAcomptes));
  95.     }
  96.     private function formatPaiements($paiements): array
  97.     {
  98.         return array_map(function($paiement) {
  99.             return [
  100.                 'date' => $paiement->getRecette()->getDate()->format('d/m/Y H:i'),
  101.                 'client' => $paiement->getRecette()->getNomClient(),
  102.                 'montant' => number_format($paiement->getSommePayee(), 2','' ')
  103.             ];
  104.         }, $paiements);
  105.     }
  106.     private function formatAcomptes($recettes): array
  107.     {
  108.         return array_map(function($recette) {
  109.             return [
  110.                 'date' => $recette->getDate()->format('d/m/Y H:i'),
  111.                 'client' => $recette->getNomClient(),
  112.                 'montant' => number_format($recette->getAcompte(), 2','' ')
  113.             ];
  114.         }, $recettes);
  115.     }
  116. }