src/Controller/Admin/DashboardController.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  4. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  5. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  9. use App\Entity\Cars;
  10. use App\Entity\CarOwner;
  11. use App\Entity\Repairs;
  12. use App\Entity\Quotes;
  13. use App\Entity\Settings;
  14. use App\Entity\User;
  15. use App\Entity\Events;
  16. use App\Entity\AttachmentTags;
  17. use App\Entity\Group;
  18. use App\Entity\InventoryProduct;
  19. use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
  20. use Symfony\Component\Security\Core\User\UserInterface;
  21. use App\Controller\Admin\UserCrudController;
  22. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  23. use App\Service\Settings as SettingsService;
  24. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  25. use EasyCorp\Bundle\EasyAdminBundle\Attribute\AdminDashboard;
  26. use Symfony\Contracts\Translation\TranslatorInterface;
  27. #[AdminDashboard(routePath: '/admin/{_locale}', routeName: 'admin')]
  28. class DashboardController extends AbstractDashboardController
  29. {
  30.     private $settings;
  31.     private $params;
  32.     private $translator;
  33.     public function __construct(ContainerBagInterface $params, SettingsService $settings, TranslatorInterface $translator)
  34.     {
  35.         $this->settings = $settings;
  36.         $this->params = $params;
  37.         $this->translator = $translator;
  38.     }
  39.     public function index(): Response
  40.     {
  41.        if ($this->getUser() == null) {
  42.             return $this->redirect('login');
  43.         }
  44.         return $this->render('page/dashboard.html.twig');
  45.     }
  46.     /**
  47.      * @Route("/{_locale}/show-events", name="show-events")
  48.      */
  49.     public function showEvents(): Response
  50.     {
  51.         $em = $this->getDoctrine()->getManager();
  52.         $qb = $em->createQueryBuilder();
  53.         $events = $qb->select("DATE_FORMAT(e.due, '%Y-%m-%d') as start, CONCAT_WS(' ', c.plateNumber, e.title) as title, e.id, 'event' as type")
  54.             ->from(Events::class, 'e')
  55.             ->leftJoin(Cars::class, 'c', 'WITH', 'c.id = e.car')
  56.             // ->where('p.id= :id')
  57.             // ->setParameter('id', 2)
  58.             ->getQuery()
  59.             ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  60.         $content = json_encode($events);
  61.         $response = new Response();
  62.         $response->headers->set('Content-Type', 'application/json');
  63.         $response->setContent($content);
  64.         $response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT : Response::HTTP_OK);
  65.         //return parent::index();
  66.         return $response;
  67.     }
  68.     /**
  69.      * @Route("/{_locale}/show-technical-dates", name="show-technical-dates")
  70.      */
  71.     public function showTechnicalDates(): Response
  72.     {
  73.         $em = $this->getDoctrine()->getManager();
  74.         $qb = $em->createQueryBuilder();
  75.         $events = $qb->select("DATE_FORMAT(c.technicalDate, '%Y-%m-%d') as start, CONCAT_WS(' ', c.plateNumber, '".$this->translator->trans('Vehicle inspection expiration')."') as title, c.id, 'car' as type")
  76.             ->from(Cars::class, 'c')
  77.             ->getQuery()
  78.             ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  79.         $content = json_encode($events);
  80.         $response = new Response();
  81.         $response->headers->set('Content-Type', 'application/json');
  82.         $response->setContent($content);
  83.         $response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT : Response::HTTP_OK);
  84.         // return parent::index();
  85.         return $response;
  86.     }
  87.      /**
  88.      * @Route("/{_locale}/show-insurance-dates", name="show-insurance-dates")
  89.      */
  90.     public function showInsuranceDates(): Response
  91.     {
  92.         $em = $this->getDoctrine()->getManager();
  93.         $qb = $em->createQueryBuilder();
  94.         $events = $qb->select("DATE_FORMAT(c.insurance_duedate, '%Y-%m-%d') as start, CONCAT_WS(' ', c.plateNumber, '".$this->translator->trans('Vehicle insurance expiration')."') as title, c.id, 'car' as type")
  95.             ->from(Cars::class, 'c')
  96.             ->getQuery()
  97.             ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  98.         $content = json_encode($events);
  99.         $response = new Response();
  100.         $response->headers->set('Content-Type', 'application/json');
  101.         $response->setContent($content);
  102.         $response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT : Response::HTTP_OK);
  103.         // return parent::index();
  104.         return $response;
  105.     }
  106.     public function configureDashboard(): Dashboard
  107.     {
  108.         return Dashboard::new()
  109.             ->setTitle($this->settings->get('siteTitle'))
  110.             ->setFaviconPath('favicon.png')
  111.             ->renderContentMaximized()
  112.             ->setTranslationDomain('admin')
  113.             ->setLocales([
  114.                 'en' => 'English',
  115.                 'hu' => 'Magyar',
  116.             ])
  117.             // ->renderSidebarMinimized()
  118.         ;
  119.     }
  120.     public function configureMenuItems(): iterable
  121.     {
  122.         if ($this->getUser() == null) {
  123.             return $this->redirect('login');
  124.         }
  125.         yield MenuItem::linkToDashboard('Dashboard', 'fa fa-home');
  126.         yield MenuItem::section('Data');
  127.         yield MenuItem::linkToCrud('Cars', 'fas fa-car', Cars::class);
  128.         yield MenuItem::linkToCrud('Customers', 'fas fa-users', CarOwner::class);
  129.         yield MenuItem::section('Events');
  130.         yield MenuItem::linkToCrud('Repairs', 'fas fa-tools', Repairs::class);
  131.         yield MenuItem::linkToCrud('Quotations', 'fas fa-file-alt', Quotes::class);
  132.         yield MenuItem::linkToCrud('Events', 'fas fa-clock', Events::class);
  133.         yield MenuItem::section('Inventory');
  134.         yield MenuItem::linkToCrud('Materials', 'fas fa-warehouse', InventoryProduct::class);
  135.         yield MenuItem::section('Profile');
  136.         yield MenuItem::linkToCrud('Profile', 'fas fa-user', User::class)->setController(UserCrudController::class)->setAction(Action::EDIT)->setEntityId($this->getUser()->getId());
  137.         yield MenuItem::section('System')->setPermission('ROLE_ADMIN');
  138.         yield MenuItem::linkToCrud('Attachment tags', 'fas fa-tag', AttachmentTags::class)->setPermission('ROLE_ADMIN');
  139.         yield MenuItem::linkToCrud('Groups', 'fas fa-layer-group', Group::class)->setQueryParameter('ownerId', $this->getUser()->getId())->setPermission('ROLE_ADMIN');
  140.         yield MenuItem::linkToCrud('Users', 'fas fa-address-book', User::class)->setPermission(User::ROLE_ADMIN);
  141.         if ($this->getUser()->hasRoles(User::ROLE_ADMIN)) {
  142.             yield MenuItem::linkToCrud('Settings', 'fas fa-cog', Settings::class)->setController(SettingsCrudController::class)->setAction(Action::EDIT)->setEntityId(1);
  143.         } else {
  144.             yield MenuItem::linkToCrud('Settings', 'fas fa-cog', Settings::class)->setController(SettingsCrudController::class)->setAction(Action::EDIT)->setEntityId(1)->setPermission(User::ROLE_SETTINGS);
  145.         }
  146.         yield MenuItem::section('Documents');
  147.         if ($this->getUser()->hasRoles(User::ROLE_ADMIN)) {
  148.             yield MenuItem::linkToCrud('GDPR document', 'fas fa-file-alt', Settings::class)->setController(SettingsCrudController::class)->setAction('printGDPR');
  149.         } else {
  150.             yield MenuItem::linkToCrud('GDPR document', 'fas fa-file-alt', Settings::class)->setController(SettingsCrudController::class)->setAction('printGDPR')->setPermission(User::ROLE_PRINT);
  151.         }
  152.         yield MenuItem::linkToCrud('User manual', 'fas fa-book', Settings::class)->setController(SettingsCrudController::class)->setAction('showUserManual');
  153.     }
  154.     public function configureUserMenu(UserInterface $user): UserMenu
  155.     {
  156.         // $adminUrlGenerator = $this->get(AdminUrlGenerator::class);
  157.         // $url = $adminUrlGenerator
  158.         //     ->setController(UserCrudController::class)
  159.         //     ->setAction(Action::EDIT)
  160.         //     ->set('entityId', $user->getId())
  161.         //     ->generateUrl();
  162.         return parent::configureUserMenu($user)
  163.             ->setName($user->getDisplayName() ? $user->getDisplayName() : $user->getUsername())
  164.             ->displayUserName(true)
  165.             ->displayUserAvatar(true)
  166.             ->setMenuItems([
  167.                 MenuItem::linkToCrud('Profile', 'fas fa-id-card', User::class)->setController(UserCrudController::class)->setAction(Action::EDIT)->setEntityId($this->getUser()->getId()),
  168.                 MenuItem::linkToLogout('Logout', 'fas fa-sign-out'),
  169.             ]);
  170.     }
  171.     public function configureCrud(): Crud
  172.     {
  173.         return Crud::new()
  174.             // the argument must be either one of these strings: 'short', 'medium', 'long', 'full', 'none'
  175.             // (the strings are also available as \EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField::FORMAT_* constants)
  176.             // or a valid ICU Datetime Pattern (see http://userguide.icu-project.org/formatparse/datetime)
  177.             ->setDateFormat('Y-MM-dd')
  178.             ->setTimeFormat('short')
  179.             // first argument = datetime pattern or date format; second optional argument = time format
  180.             // ->setDateTimeFormat('medium', 'medium')
  181.             ->setDateTimeFormat('Y-MM-dd H:mm:ss')
  182.             ->setDateIntervalFormat('%%y év %%m hónap %%d nap')
  183.             ->setTimezone('Europe/Budapest')
  184.             // used to format numbers before rendering them on templates
  185.             // ->setNumberFormat('%.3d')
  186.             ->setPageTitle('detail', '%entity_as_string%')
  187.             ->showEntityActionsInlined()
  188.             ->setThousandsSeparator(" ")
  189.         ;
  190.     }
  191. }