src/Controller/Admin/DashboardController.php line 31

  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Tower;
  4. use App\Entity\City;
  5. use App\Entity\Company;
  6. use App\Entity\Rent;
  7. use App\Repository\CompanyRepository;
  8. use App\Repository\TowerRepository;
  9. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  10. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  11. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\HttpFoundation\Request;
  16. #[IsGranted('ROLE_ADMIN')]
  17. class DashboardController extends AbstractDashboardController
  18. {
  19.     private $towerRepository;
  20.     public function __construct(TowerRepository $towerRepository)
  21.     {
  22.         $this->towerRepository $towerRepository;
  23.     }
  24.     #[Route(path'/'name'admin')]
  25.     public function index(): Response
  26.     {
  27.         $request Request::createFromGlobals();
  28.         // ---
  29.         $endDate = new \DateTime($request->get("endDate")." 23:59:59");
  30.         if(!empty($request->get("startDate")))
  31.             $startDate = new \DateTime($request->get("startDate")." 00:00:00");
  32.         else
  33.             $startDate = (clone($endDate))->modify("-1 month");
  34.         // ---
  35.         // Gettting months between the dates
  36.         $interval \DateInterval::createFromDateString('1 month');
  37.         $period   = new \DatePeriod($startDate$interval$endDate);
  38.         $months = [];
  39.         foreach ($period as $dt) {
  40.             $months[] = intval($dt->format("m"));
  41.         }
  42.         if(empty($months))
  43.             $months[] = intval($period->current->format("m"));;
  44.         // ----
  45.         // Getting towers
  46.         $towers $this->towerRepository->findAll();
  47.         $towerNames = [];
  48.         foreach($towers as $tower){
  49.             $towerNames[] = $tower->getName();
  50.         }
  51.         // ----
  52.         $towerContractsValues = [];
  53.         foreach($towers as $tower){
  54.             $towerContractsValues[$tower->getName()] = 0;
  55.             $rentValue 0;
  56.             foreach($tower->getRents() as $rent){
  57.                 // get rent's month start and end
  58.                 $rentValue += $rent->getRentValue();
  59.             }
  60.             // convert rentValue from cents to reais
  61.             $rentValue $rentValue 100;
  62.             $towerContractsValues[$tower->getName()] = $rentValue;
  63.         }
  64.         $data = [
  65.             'startDate' => $startDate->format("Y-m-d"),
  66.             'endDate' => $endDate->format("Y-m-d"),
  67.             'months' => $months,
  68.             'towerNames' => $towerNames,
  69.             'contractValues' => $towerContractsValues
  70.         ];
  71.         return $this->render('admin/dashboard.html.twig'$data);
  72.     }
  73.     #[Route(path'/app'name'app')]
  74.     public function app(TowerRepository $towerRepositoryCompanyRepository $companyRepository): Response
  75.     {
  76.         $towerRepository $towerRepository->findAll();
  77.         $companies $companyRepository->findAll();
  78.         return $this->render('admin/status.html.twig', [
  79.             'towers' => $towerRepository,
  80.             'companies' => $companies,
  81.             'controller_name' => 'AppController',
  82.         ]);
  83.     }
  84.     public function configureDashboard(): Dashboard
  85.     {
  86.         return Dashboard::new()
  87.             ->setTitle('Aluguel de Torres - SCC')
  88.         ;
  89.     }
  90.     public function configureMenuItems(): iterable
  91.     {
  92.         yield MenuItem::linkToDashboard('Dashboard''fa fa-home');
  93.         yield MenuItem::linkToRoute('Status de uso''fa fa-list-check''app');
  94.         yield MenuItem::linkToCrud('Torres''fa-solid fa-tower-cell'Tower::class)
  95.             ->setDefaultSort(['city' => 'ASC'])
  96.         ;
  97.         
  98.         yield MenuItem::linkToCrud('Contratos''fa-solid fa-file-contract'Rent::class)
  99.             ->setDefaultSort(['finishAt' => 'ASC'])
  100.         ;
  101.         yield MenuItem::linkToCrud('Empresas''fas fa-building'Company::class)
  102.             ->setDefaultSort(['name' => 'ASC'])
  103.         ;
  104.         yield MenuItem::linkToCrud('Cidades''fa-solid fa-city'City::class)
  105.             ->setDefaultSort(['name' => 'ASC'])
  106.         ;
  107.         yield MenuItem::linkToCrud('Administradores''fas fa-user-cog'User::class)
  108.             ->setController(UserCrudController::class)
  109.             ->setPermission('ROLE_ADMIN')
  110.             ->setDefaultSort(['name' => 'ASC'])
  111.         ;
  112.     }
  113. }