src/Controller/RapportController.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Precommission;
  4. use App\Form\ReportFilterType;
  5. use App\Repository\CommissionRepository;
  6. use App\Repository\NouvelleorderRepository;
  7. use App\Repository\OrdersRepository;
  8. use App\Repository\PrecommissionRepository;
  9. use App\Repository\UserRepository;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Core\Security;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use \DateTime;
  16. class RapportController extends AbstractController
  17. {
  18.     private $security;
  19.     private $orderRepository;
  20.     private  $nouvelleorderRepository;
  21.     public function __construct(Security $securityOrdersRepository $orderRepository NouvelleorderRepository  $nouvelleorderRepository)
  22.     {
  23.         $this->security $security;
  24.         $this->orderRepository $orderRepository;
  25.         $this->nouvelleordersRepository $nouvelleorderRepository;
  26.     }
  27.     /**
  28.      * @Route("/reports", name="user_reports")
  29.      */
  30.     public function reports(Request $requestCommissionRepository $commissionRepo): Response
  31.     {
  32.         $user $this->security->getUser();
  33.         $isAdmin in_array('ROLE_ADMIN'$user->getRoles());
  34.        // $generations = range(1, 5); // Générations de G1 à G5
  35.         $generations range(14); // Générations de G1 à G5
  36.         // Calculer le premier jour du mois en cours et le jour actuel
  37.         $startOfMonth = new DateTime('first day of this month');
  38.         $endOfMonth = new DateTime(); // Pour le jour actuel
  39.         // Initialiser les valeurs par défaut du formulaire
  40.         $defaultData = ['startDate' => $startOfMonth'endDate' => $endOfMonth];
  41.         $form $this->createForm(ReportFilterType::class, $defaultData, ['is_admin' => $isAdmin]);
  42.         $form->handleRequest($request);
  43.         $formatter = new \IntlDateFormatter('fr_FR'\IntlDateFormatter::LONG\IntlDateFormatter::NONEnull\IntlDateFormatter::GREGORIAN);
  44.         // Déterminez le nom du mois pour l'affichage, basé sur la startDate ou le mois actuel par défaut
  45.         if ($form->isSubmitted() && $form->isValid()) {
  46.             $data $form->getData();
  47.             $selectedUser $isAdmin && $data['user'] ? $data['user'] : $user;
  48.             $startDate $data['startDate'] ?: $startOfMonth;
  49.             $endDate $data['endDate'] ?: $endOfMonth;
  50.             $startMonthName $formatter->format($startDate);
  51.             $endMonthName $endDate $formatter->format($endDate) : $startMonthName;
  52.             // Gérer le cas où la plage de dates s'étend sur plus d'un mois
  53.             $monthName $startMonthName === $endMonthName $startMonthName $startMonthName ' à ' $endMonthName;
  54.             // Utilisez la méthode personnalisée du repository pour filtrer les commandes
  55.             $orders $this->orderRepository->findOrdersByUserAndDateRange($selectedUser$startDate$endDate);
  56.             $totalAmount $this->orderRepository->findTotalAmountByUserAndDateRange($selectedUser$startDate$endDate);
  57.             $commissionsByLevel $commissionRepo->getTotalCommissionsByLevel($selectedUser$startDate$endDate);
  58.             // Créez un tableau pour garder les totaux des commandes par niveau
  59.             $totalOrdersByLevel = [];
  60.             // Obtenez les ID de commande par niveau pour les commissions
  61.             $orderIdsByLevel $commissionRepo->getOrderIdsByLevel($selectedUser$startDate$endDate);
  62.             // Groupez les ID de commande par niveau
  63.             $groupedOrderIds = [];
  64.             foreach ($orderIdsByLevel as $item) {
  65.                 $groupedOrderIds[$item['level']][] = $item['orderId'];
  66.             }
  67.             // Pour chaque niveau, obtenez le montant total des commandes
  68.             foreach ($groupedOrderIds as $level => $orderIds) {
  69.                 $totalOrdersByLevel[$level] = $this->orderRepository->getTotalAmountForOrderIds($orderIds);
  70.             }
  71.             $detailsByGeneration = [];
  72.             foreach ($generations as $generation) {
  73.                 $detailsByGeneration['G' $generation] = $commissionRepo->getDetailsByGeneration($selectedUser$generation$startDate$endDate);
  74.             }
  75.             $totalOrdersAmount $this->orderRepository->getTotalOrdersAmountBetweenDates($startDate$endDate);
  76.             $totalCommissionsAmount $commissionRepo->getTotalCommissionsAmountBetweenDates($startDate$endDate);
  77.         } else {
  78.             // Affichez les commandes du mois en cours par défaut
  79.             $orders $this->orderRepository->findOrdersByUserAndDateRange($user$startOfMonth$endOfMonth);
  80.             $totalAmount $this->orderRepository->findTotalAmountByUserAndDateRange($user$startOfMonth$endOfMonth);
  81.             $monthName $formatter->format(new \DateTime());
  82.             $commissionsByLevel $commissionRepo->getTotalCommissionsByLevel($user$startOfMonth$endOfMonth);
  83.             $totalOrdersByLevel = [];
  84.             $orderIdsByLevel $commissionRepo->getOrderIdsByLevel($user$startOfMonth$endOfMonth);
  85.             $groupedOrderIds = [];
  86.             foreach ($orderIdsByLevel as $item) {
  87.                 $groupedOrderIds[$item['level']][] = $item['orderId'];
  88.             }
  89.             foreach ($groupedOrderIds as $level => $orderIds) {
  90.                 $totalOrdersByLevel[$level] = $this->orderRepository->getTotalAmountForOrderIds($orderIds);
  91.             }
  92.             $detailsByGeneration = [];
  93.             foreach ($generations as $generation) {
  94.                 $detailsByGeneration['G' $generation] = $commissionRepo->getDetailsByGeneration($user$generation$startOfMonth$endOfMonth);
  95.             }
  96.             $totalOrdersAmount $this->orderRepository->getTotalOrdersAmountBetweenDates($startOfMonth$endOfMonth);
  97.             $totalCommissionsAmount $commissionRepo->getTotalCommissionsAmountBetweenDates($startOfMonth$endOfMonth);
  98.         }
  99.         return $this->render('rapport/index.html.twig', [
  100.             'filterForm' => $form->createView(),
  101.             'orders' => $orders,
  102.             'monthName' => ucfirst($monthName), // Assurez-vous que le nom du mois commence par une majuscule
  103.             'totalAmount' => $totalAmount// Ajoutez cette ligne
  104.             'commissionsByLevel' => $commissionsByLevel,
  105.             'totalOrdersByLevel' => $totalOrdersByLevel,
  106.             'detailsByGeneration' => $detailsByGeneration,
  107.             'totalOrdersAmount' => $totalOrdersAmount,
  108.             'totalCommissionsAmount' => $totalCommissionsAmount,
  109.         ]);
  110.     }
  111.     /**
  112.      * @Route("/non-actif", name="user_reports_non")
  113.      */
  114.     public function indexnonactif(UserRepository $userRepository): Response
  115.     {
  116.         $user $this->getUser(); // Supposons que ceci retourne l'utilisateur connecté
  117.         $userId $user->getId();
  118.         $formatter = new \IntlDateFormatter('fr_FR'\IntlDateFormatter::LONG\IntlDateFormatter::NONEnull\IntlDateFormatter::GREGORIAN'MMMM');
  119.         $currentMonthName $formatter->format(new \DateTime());
  120.         $usersWithoutOrders $userRepository->findReferredUsersWithoutOrdersThisMonth();
  121.         return $this->render('rapport/nonactif.html.twig', [
  122.             'usersWithoutOrders' => $usersWithoutOrders,
  123.             'month'=>$currentMonthName
  124.         ]);
  125.     }
  126.     /**
  127.      * @Route("/reports/neworders", name="user_reports_new_orders")
  128.      */
  129.     public function reportsnewOrders(Request $requestPrecommissionRepository $precommissionRepository): Response
  130.     {
  131.         $user $this->security->getUser();
  132.         $isAdmin in_array('ROLE_ADMIN'$user->getRoles());
  133.         // $generations = range(1, 5); // Générations de G1 à G5
  134.         $generations range(14); // Générations de G1 à G5
  135.         // Calculer le premier jour du mois en cours et le jour actuel
  136.         $startOfMonth = new DateTime('first day of this month');
  137.         $endOfMonth = new DateTime(); // Pour le jour actuel
  138.         // Initialiser les valeurs par défaut du formulaire
  139.         $defaultData = ['startDate' => $startOfMonth'endDate' => $endOfMonth];
  140.         $form $this->createForm(ReportFilterType::class, $defaultData, ['is_admin' => $isAdmin]);
  141.         $form->handleRequest($request);
  142.         $formatter = new \IntlDateFormatter('fr_FR'\IntlDateFormatter::LONG\IntlDateFormatter::NONEnull\IntlDateFormatter::GREGORIAN);
  143.         // Déterminez le nom du mois pour l'affichage, basé sur la startDate ou le mois actuel par défaut
  144.         if ($form->isSubmitted() && $form->isValid()) {
  145.             $data $form->getData();
  146.             $selectedUser $isAdmin && $data['user'] ? $data['user'] : $user;
  147.             $startDate $data['startDate'] ?: $startOfMonth;
  148.             $endDate $data['endDate'] ?: $endOfMonth;
  149.             $startMonthName $formatter->format($startDate);
  150.             $endMonthName $endDate $formatter->format($endDate) : $startMonthName;
  151.             // Gérer le cas où la plage de dates s'étend sur plus d'un mois
  152.             $monthName $startMonthName === $endMonthName $startMonthName $startMonthName ' à ' $endMonthName;
  153.             // Utilisez la méthode personnalisée du repository pour filtrer les commandes
  154.             $ordersnew $this->nouvelleordersRepository->findOrdersByUserAndDateRangenouvelleorders($selectedUser$startDate$endDate);
  155.             $totalAmount $this->nouvelleordersRepository->findTotalAmountByUserAndDateRangenouvelleorders($selectedUser$startDate$endDate);
  156.             $commissionsByLevelnew $precommissionRepository->getTotalpreCommissionsByLevel($selectedUser$startDate$endDate);
  157.             // Créez un tableau pour garder les totaux des commandes par niveau
  158.             $totalOrdersByLevel = [];
  159.             // Obtenez les ID de commande par niveau pour les commissions
  160.             $orderIdsByLevel $precommissionRepository->getPrOrderIdsByLevel($selectedUser$startDate$endDate);
  161.             // Groupez les ID de commande par niveau
  162.             $groupedOrderIds = [];
  163.             foreach ($orderIdsByLevel as $item) {
  164.                 $groupedOrderIds[$item['level']][] = $item['orderId'];
  165.             }
  166.             // Pour chaque niveau, obtenez le montant total des commandes
  167.             foreach ($groupedOrderIds as $level => $orderIds) {
  168.                 $totalOrdersByLevel[$level] = $this->nouvelleordersRepository->getTotalAmountFornewOrderIds($orderIds);
  169.             }
  170.             $detailsByGeneration = [];
  171.             foreach ($generations as $generation) {
  172.                 $detailsByGeneration['G' $generation] = $precommissionRepository->getDetailsByGenerationneworders($selectedUser$generation$startDate$endDate);
  173.             }
  174.             $totalOrdersAmount $this->nouvelleordersRepository->getTotalOrdersAmountBetweenDatesnew($startDate$endDate);
  175.             $totalCommissionsAmount $precommissionRepository->getTotalCommissionsAmountBetweenDatesnew($startDate$endDate);
  176.         } else {
  177.             // Affichez les commandes du mois en cours par défaut
  178.             $ordersnew $this->nouvelleordersRepository->findOrdersByUserAndDateRangenouvelleorders($user$startOfMonth$endOfMonth);
  179.             $totalAmount $this->nouvelleordersRepository->findTotalAmountByUserAndDateRangenouvelleorders($user$startOfMonth$endOfMonth);
  180.             $monthName $formatter->format(new \DateTime());
  181.             $commissionsByLevelnew $precommissionRepository->getTotalpreCommissionsByLevel($user$startOfMonth$endOfMonth);
  182.             $totalOrdersByLevel = [];
  183.             $orderIdsByLevel $precommissionRepository->getPrOrderIdsByLevel($user$startOfMonth$endOfMonth);
  184.             $groupedOrderIds = [];
  185.             foreach ($orderIdsByLevel as $item) {
  186.                 $groupedOrderIds[$item['level']][] = $item['orderId'];
  187.             }
  188.             foreach ($groupedOrderIds as $level => $orderIds) {
  189.                 $totalOrdersByLevel[$level] = $this->nouvelleordersRepository->getTotalAmountFornewOrderIds($orderIds);
  190.             }
  191.             $detailsByGeneration = [];
  192.             foreach ($generations as $generation) {
  193.                 $detailsByGeneration['G' $generation] = $precommissionRepository->getDetailsByGenerationneworders($user$generation$startOfMonth$endOfMonth);
  194.             }
  195.             $totalOrdersAmount $this->nouvelleordersRepository->getTotalOrdersAmountBetweenDatesnew($startOfMonth$endOfMonth);
  196.             $totalCommissionsAmount $precommissionRepository->getTotalCommissionsAmountBetweenDatesnew($startOfMonth$endOfMonth);
  197.         }
  198.         return $this->render('rapport/Rapportprecommande.html.twig', [
  199.             'filterForm' => $form->createView(),
  200.             'orders' => $ordersnew,
  201.             'monthName' => ucfirst($monthName), // Assurez-vous que le nom du mois commence par une majuscule
  202.             'totalAmount' => $totalAmount// Ajoutez cette ligne
  203.             'commissionsByLevel' => $commissionsByLevelnew,
  204.             'totalOrdersByLevel' => $totalOrdersByLevel,
  205.             'detailsByGeneration' => $detailsByGeneration,
  206.             'totalOrdersAmount' => $totalOrdersAmount,
  207.             'totalCommissionsAmount' => $totalCommissionsAmount,
  208.         ]);
  209.     }
  210. }