src/Controller/Dashboard/DashboardController.php line 72

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Dashboard;
  3. use App\Entity\ApiLog;
  4. use App\Entity\BookingTime;
  5. use App\Entity\CarrierSMSDomain;
  6. use App\Entity\Course;
  7. use App\Entity\Customer;
  8. use App\Entity\Document;
  9. use App\Entity\EmailTemplate;
  10. use App\Entity\Event;
  11. use App\Entity\Housekeeping;
  12. use App\Entity\Invoice;
  13. use App\Entity\InvoicePayment;
  14. use App\Entity\InvoiceStatement;
  15. use App\Entity\MaintenanceEquipment;
  16. use App\Entity\MaintenanceInvoice;
  17. use App\Entity\MaintenanceRequest;
  18. use App\Entity\Membership;
  19. use App\Entity\MembershipPrice;
  20. use App\Entity\MembershipType;
  21. use App\Entity\News;
  22. use App\Entity\Newsletter;
  23. use App\Entity\Order;
  24. use App\Entity\OrderStatus;
  25. use App\Entity\Package;
  26. use App\Entity\PackageOption;
  27. use App\Entity\PackagePrice;
  28. use App\Entity\Promotion;
  29. use App\Entity\Property;
  30. use App\Entity\Request;
  31. use App\Entity\Reseller;
  32. use App\Entity\TeeTime;
  33. use App\Entity\Transaction;
  34. use App\Entity\User;
  35. use App\Entity\Voucher;
  36. use App\Form\User\UserProfileEditFormType;
  37. use App\Form\Reseller\ResellerProfileEditFormType;
  38. use App\Service\PDF\PdfConnector;
  39. use Doctrine\ORM\EntityManagerInterface;
  40. use Dukecity\CommandSchedulerBundle\Entity\ScheduledCommand;
  41. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  42. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  43. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  44. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  45. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  46. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  47. use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
  48. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  49. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  50. use Symfony\Component\Form\FormView;
  51. use Symfony\Component\HttpFoundation\Response;
  52. use Symfony\Component\HttpFoundation\Request as HttpRequest;
  53. use Symfony\Component\Routing\Annotation\Route;
  54. use Symfony\Component\Security\Core\User\UserInterface;
  55. class DashboardController extends AbstractDashboardController
  56. {
  57.     private $em;
  58.     private $pdf;
  59.     private $easyUrl;
  60.     public function __construct(EntityManagerInterface $emPdfConnector $pdfAdminUrlGenerator $easyUrl)
  61.     {
  62.         $this->em $em;
  63.         $this->pdf $pdf;
  64.         $this->easyUrl $easyUrl;
  65.     }
  66.     #[Route('/'name'dashboard')]
  67.     public function index(): Response
  68.     {
  69.         $usersDefaultDashboardUrl null;
  70.         $redirectUrl null;
  71.         if ($this->isGranted('ROLE_HOUSEKEEPING') && !$this->isGranted('ROLE_ADMIN') && !$this->isGranted('ROLE_MAINTENANCE')) {
  72.             $redirectUrl $this->easyUrl->setRoute('housekeepingdashboard')->generateUrl();
  73.         } elseif ($this->isGranted('ROLE_MAINTENANCE') && !$this->isGranted('ROLE_PROSHOP') && !$this->isGranted('ROLE_ADMIN')) {
  74.             $redirectUrl $this->easyUrl->setRoute('maintenancedashboard')->generateUrl();
  75.         } elseif ($this->isGranted('ROLE_RESELLER') && !$this->isGranted('ROLE_ADMIN')) {
  76.             $redirectUrl $this->easyUrl->setRoute('resellerdashboard')->generateUrl();
  77.         } elseif ($this->isGranted('ROLE_PROSHOP') && !$this->isGranted('ROLE_ADMIN')) {
  78.             $redirectUrl $this->easyUrl->setRoute('proshopdashboard')->generateUrl();
  79.         } elseif ($this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_SUPER_ADMIN')) {
  80.             $redirectUrl $this->easyUrl->setRoute('admindashboard')->generateUrl();
  81.         } else {
  82.             $redirectUrl $this->easyUrl->setController(OrderCrudController::class)->generateUrl();
  83.         }
  84.         return $this->redirect($redirectUrl);
  85.     }
  86.     #[Route('/dashboard/viewPrintableInvoice/{invoiceid}'name'viewprintableinvoice')]
  87.     public function viewPrintableInvoice($invoiceid): Response
  88.     {
  89.         $invoice $this->em->getRepository(Invoice::class)->find($invoiceid);
  90.         $pdfvars = [
  91.             'no-background' => true,
  92.             'margin-left' => '10',
  93.             'margin-right' => '10',
  94.             'margin-top' => '10',
  95.             'margin-bottom' => '10',
  96.         ];
  97.         return $this->pdf->generatePdfFromTwig('/dashboard/invoice/print.html.twig', array('invoice' => $invoice), $invoice->getReference(), $pdfvars);
  98.     }
  99.     #[Route('profile'name:'profile')]
  100.     public function profile(HttpRequest $request): Response
  101.     {
  102.         $user $this->getUser();
  103.         return $this->render('user/profile.html.twig', [
  104.             'user' => $user,
  105.         ]);
  106.     }
  107.     #[Route('editprofile'name:'editprofile')]
  108.     public function editprofile(HttpRequest $request): Response
  109.     {
  110.         $user                        $this->getUser();
  111.         $reseller                    null;
  112.         $userprofileeditform         null;
  113.         $userprofileeditformdata     null;
  114.         $userprofileeditformview     null;
  115.         $resellerprofileeditform     null;
  116.         $resellerprofileeditformdata null;
  117.         $resellerprofileeditformview null;
  118.         // if (!$user->getReseller()) {
  119.             $userprofileeditform $this->createForm(UserProfileEditFormType::class);
  120.             $userprofileeditform->handleRequest($request);
  121.             if ($userprofileeditform->isSubmitted() && $userprofileeditform->isValid()) {
  122.                 $userprofileeditformdata $userprofileeditform->getData();
  123.                 $user->setFirstName($userprofileeditformdata['firstName']);
  124.                 $user->setLastName($userprofileeditformdata['lastName']);
  125.                 $user->setEmail($userprofileeditformdata['email']);
  126.                 if (!is_null($userprofileeditformdata['password']) && $userprofileeditformdata['password'] != '') {
  127.                     $user->setPassword(password_hash($userprofileeditformdata['password'], PASSWORD_DEFAULT));
  128.                 }
  129.                 // $user->setUsername($userprofileeditformdata['username']);
  130.                 $this->em->persist($user);
  131.                 $this->em->flush();
  132.                 return $this->redirectToRoute('profile');
  133.             }
  134.             $userprofileeditform->get('firstName')->setData($user->getFirstName());
  135.             $userprofileeditform->get('lastName')->setData($user->getLastName());
  136.             $userprofileeditform->get('email')->setData($user->getEmail());
  137.         // } else  {
  138.         //     $reseller = $user->getReseller();
  139.         //     $resellerprofileeditform = $this->createForm(ResellerProfileEditFormType::class);
  140.         //     $resellerprofileeditform->handleRequest($request);
  141.         //     if ($resellerprofileeditform->isSubmitted() && $resellerprofileeditform->isValid()) {
  142.         //         $resellerprofileeditformdata = $resellerprofileeditform->getData();
  143.         //         $user->setFirstName($resellerprofileeditformdata['firstName']);
  144.         //         $user->setLastName($resellerprofileeditformdata['lastName']);
  145.         //         $user->setEmail($resellerprofileeditformdata['email']);
  146.         //         // $user->setUsername($resellerprofileeditformdata['username']);
  147.         //         $this->em->persist($user);
  148.         //         $reseller->setCompany($resellerprofileeditformdata['company']);
  149.         //         $reseller->setAddress($resellerprofileeditformdata['address']);
  150.         //         $reseller->setSuite($resellerprofileeditformdata['suite']);
  151.         //         $reseller->setCity($resellerprofileeditformdata['city']);
  152.         //         $reseller->setState($resellerprofileeditformdata['state']);
  153.         //         $reseller->setZipcode($resellerprofileeditformdata['zipcode']);
  154.         //         $reseller->setPhone($resellerprofileeditformdata['phone']);
  155.         //         $this->em->persist($reseller);
  156.         //         $this->em->flush();
  157.         //         return $this->redirectToRoute('profile');
  158.         //     }
  159.         // }
  160.         // if (!is_null($userprofileeditform)) {
  161.             // $userprofileeditform->get('id')->setData($user->getId());
  162.             // $userprofileeditform->get('firstName')->setData($user->getFirstName());
  163.             // $userprofileeditform->get('lastName')->setData($user->getLastName());
  164.             // $userprofileeditform->get('email')->setData($user->getEmail());
  165.             // // $userprofileeditform->get('username')->setData($user->getUsername());
  166.             $userprofileeditformview $userprofileeditform->createView();
  167.         // }
  168.         // if (!is_null($resellerprofileeditform) && !is_null($reseller)) {
  169.         //     $resellerprofileeditform->get('userid')->setData($user->getId());
  170.         //     $resellerprofileeditform->get('firstName')->setData($user->getFirstName());
  171.         //     $resellerprofileeditform->get('lastName')->setData($user->getLastName());
  172.         //     $resellerprofileeditform->get('email')->setData($user->getEmail());
  173.         //     // $resellerprofileeditform->get('username')->setData($user->getUsername());
  174.         //     $resellerprofileeditform->get('resellerid')->setData($reseller->getId());
  175.         //     $resellerprofileeditform->get('company')->setData($reseller->getCompany());
  176.         //     $resellerprofileeditform->get('address')->setData($reseller->getAddress());
  177.         //     $resellerprofileeditform->get('suite')->setData($reseller->getSuite());
  178.         //     $resellerprofileeditform->get('city')->setData($reseller->getCity());
  179.         //     $resellerprofileeditform->get('state')->setData($reseller->getState());
  180.         //     $resellerprofileeditform->get('zipcode')->setData($reseller->getZipcode());
  181.         //     $resellerprofileeditform->get('phone')->setData($reseller->getPhone());
  182.         //     $resellerprofileeditformview = $resellerprofileeditform->createView(); 
  183.         // }
  184.         return $this->render('user/profile-edit.html.twig', [
  185.             'user' => $user,
  186.             'userprofileeditform' => $userprofileeditformview,
  187.             // 'resellerprofileeditform' => $resellerprofileeditformview,
  188.         ]);
  189.     }
  190.     public function configureDashboard(): Dashboard
  191.     {
  192.         return Dashboard::new()
  193.             ->setTitle('Greens <br/>Concierge')
  194.             ->disableDarkMode()
  195.         ;
  196.     }
  197.     public function configureCrud(): Crud
  198.     {
  199.         return Crud::new()
  200.             ->setDateTimeFormat('medium''short')
  201.             ->showEntityActionsInlined()
  202.             ->setPaginatorPageSize(30)
  203.             ->overrideTemplate('label/null''dashboard/fields/null.html.twig')
  204.         ;
  205.     }
  206.  
  207.     public function configureActions(): Actions
  208.     {
  209.         return Actions::new()
  210.             ->addBatchAction(Action::BATCH_DELETE)
  211.             ->add(Crud::PAGE_INDEXAction::NEW)
  212.             ->add(Crud::PAGE_INDEXAction::EDIT)
  213.             ->add(Crud::PAGE_INDEXAction::DELETE)
  214.             ->add(Crud::PAGE_DETAILAction::EDIT)
  215.             ->add(Crud::PAGE_DETAILAction::INDEX)
  216.             ->add(Crud::PAGE_DETAILAction::DELETE)
  217.             ->add(Crud::PAGE_EDITAction::SAVE_AND_RETURN)
  218.             ->add(Crud::PAGE_EDITAction::SAVE_AND_CONTINUE)
  219.             ->add(Crud::PAGE_NEWAction::SAVE_AND_RETURN)
  220.             ->add(Crud::PAGE_NEWAction::SAVE_AND_ADD_ANOTHER)
  221.             ->remove(Crud::PAGE_INDEXAction::BATCH_DELETE)
  222.             ->remove(Crud::PAGE_INDEXAction::DELETE)
  223.             ->add(Crud::PAGE_INDEXAction::DETAIL)
  224.             ->add(Crud::PAGE_EDITAction::SAVE_AND_ADD_ANOTHER)
  225.         ;
  226.     }
  227.     public function configureAssets(): Assets
  228.     {
  229.         return Assets::new()
  230.             ->addWebpackEncoreEntry('base')
  231.         ;
  232.     }
  233.     public function configureUserMenu(UserInterface $user): UserMenu
  234.     {
  235.         return parent::configureUserMenu($user)
  236.             ->setName($user->getFullName())
  237.             ->addMenuItems([
  238.                 MenuItem::linkToRoute('Profile''fa fa-id-card''profile'),
  239.             ]);            
  240.         ;
  241.     }
  242.     public function configureMenuItems(): iterable
  243.     {
  244.         $orderCount 0;
  245.         if ($this->getUser()->getReseller()) {
  246.             $orderCount count($this->getUser()->getReseller()->getOrders());
  247.         }
  248.         yield MenuItem::linkToDashboard('Dashboard''fa fa-home');
  249.         if ($this->isGranted('ROLE_SUPER_ADMIN') || $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_RESELLER') || $this->isGranted('ROLE_PROSHOP_MANAGER') || $this->isGranted('ROLE_PROSHOP')) {
  250.             if ($orderCount 0) {
  251.                 yield MenuItem::linkToCrud('Orders''fa fa-clipboard-list'Order::class)
  252.                     ->setBadge($orderCount'secondary');
  253.             } else {
  254.                 yield MenuItem::linkToCrud('Orders''fa fa-clipboard-list'Order::class);
  255.             }
  256.         }
  257.         if ($this->isGranted('ROLE_SUPER_ADMIN') || $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_PROSHOP_MANAGER') || $this->isGranted('ROLE_PROSHOP')) {
  258.             yield MenuItem::linkToCrud('Requests''fa fa-comment-dollar'Request::class);
  259.             yield MenuItem::linkToCrud('Tee Times''fa fa-golf-ball-tee'TeeTime::class);
  260.             yield MenuItem::linkToCrud('Bookings''fa fa-calendar-check'BookingTime::class);
  261.             yield MenuItem::section('Service');
  262.             yield MenuItem::linkToCrud('Customers''fa fa-users-rectangle'Customer::class);
  263.             yield MenuItem::linkToCrud('Memberships''fa fa-address-card'Membership::class);
  264.             yield MenuItem::linkToCrud('Newsletter''fa fa-envelope'Newsletter::class);
  265.         }
  266.         if ($this->isGranted('ROLE_SUPER_ADMIN') || $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_PROSHOP_MANAGER') || $this->isGranted('ROLE_PROSHOP') || $this->isGranted('ROLE_HOUSEKEEPING')) {
  267.             yield MenuItem::linkToCrud('Housekeeping''fa fa-hand-sparkles'Housekeeping::class);
  268.         }
  269.         if ($this->isGranted('ROLE_PROSHOP') || $this->isGranted('ROLE_MAINTENANCE')) {
  270.             if ($this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_MAINTENANCE')) {
  271.                 yield MenuItem::subMenu('Maintenance''fa fa-screwdriver-wrench')->setSubItems([
  272.                     MenuItem::linkToCrud('Requests''fa fa-box'MaintenanceRequest::class),
  273.                     MenuItem::linkToCrud('Equipment''fa fa-box'MaintenanceEquipment::class),
  274.                     MenuItem::linkToCrud('Invoices''fa fa-box'MaintenanceInvoice::class),
  275.                 ]);
  276.             } else {
  277.                 yield MenuItem::subMenu('Maintenance''fa fa-screwdriver-wrench')->setSubItems([
  278.                     MenuItem::linkToCrud('Requests''fa fa-box'MaintenanceRequest::class),
  279.                 ]);
  280.             }
  281.         }
  282.         yield MenuItem::section('');
  283.         if ($this->isGranted('ROLE_PROSHOP_MANAGER') && !$this->isGranted('ROLE_ADMIN')) {
  284.             yield MenuItem::subMenu('Management''fa fa-desktop')->setSubItems([
  285.                 MenuItem::linkToCrud('Documents''fa fa-file'Document::class),
  286.             ]);
  287.         }
  288.         if ($this->isGranted('ROLE_SUPER_ADMIN') || $this->isGranted('ROLE_ADMIN')) {
  289.             yield MenuItem::subMenu('Management''fa fa-desktop')->setSubItems([
  290.                 MenuItem::linkToCrud('Packages''fa fa-box'Package::class),
  291.                 MenuItem::linkToCrud('Package Options''fa fa-box'PackageOption::class),
  292.                 MenuItem::linkToCrud('Package Prices''fa fa-comment-dollar'PackagePrice::class),
  293.                 MenuItem::linkToCrud('Promotions''fa fa-tags'Promotion::class),
  294.                 MenuItem::linkToCrud('Vouchers''fa fa-ticket'Voucher::class),
  295.                 MenuItem::linkToCrud('Properties''fa fa-building'Property::class),
  296.                 MenuItem::linkToCrud('Golf Courses''fa fa-flag'Course::class),
  297.                 MenuItem::linkToCrud('Documents''fa fa-file'Document::class),
  298.                 MenuItem::linkToCrud('Membership Types''fa fa-flag'MembershipType::class),
  299.                 MenuItem::linkToCrud('Membership Prices''fa fa-comment-dollar'MembershipPrice::class),
  300.             ]);
  301.             yield MenuItem::linkToCrud('Invoices''fa fa-chart-line'Invoice::class);
  302.             yield MenuItem::subMenu('Reports''fa fa-magnifying-glass-chart')->setSubItems([
  303.                 MenuItem::linkToCrud('Transactions''fa fa-chart-line'Transaction::class),
  304.                 MenuItem::linkToCrud('Tee Sales''fa fa-chart-line'Order::class)
  305.                     ->setBadge('Soon''info')
  306.                     ->setCssClass('disabled'),
  307.                 MenuItem::linkToCrud('Package Sales''fa fa-chart-line'Order::class)
  308.                     ->setBadge('Soon''info')
  309.                     ->setCssClass('disabled'),
  310.                 MenuItem::linkToCrud('Proshop Sales''fa fa-chart-line'Order::class)
  311.                     ->setBadge('Soon''info')
  312.                     ->setCssClass('disabled'),
  313.             ]);
  314.             yield MenuItem::section('');
  315.             yield MenuItem::linkToCrud('Users''fa fa-users'User::class);
  316.             yield MenuItem::linkToCrud('Packagers/Reseller''fa fa-user-tie'Reseller::class);
  317.             yield MenuItem::section('');
  318.             yield MenuItem::linkToCrud('News''fa fa-newspaper'News::class);
  319.             yield MenuItem::linkToCrud('Events''fa fa-calendar-alt'Event::class);
  320.         }
  321.         if ($this->isGranted('ROLE_SUPER_ADMIN')) {
  322.             yield MenuItem::section('Dev Systems');
  323.             yield MenuItem::subMenu('Email System''fas fa-envelope')->setSubItems([
  324.                 MenuItem::linkToCrud('Templates''fas fa-envelope'EmailTemplate::class),
  325.             ]);
  326.             yield MenuItem::linkToCrud('Order Status''fa fa-check'OrderStatus::class);
  327.             yield MenuItem::linkToCrud('Api Logs''fa fa-archive'ApiLog::class);
  328.             yield MenuItem::linkToCrud('Scheduled Commands''fas fa-calendar-times'ScheduledCommand::class);
  329.             yield MenuItem::linkToCrud('Carrier SMS Domains''fas fa-phone'CarrierSMSDomain::class);
  330.         }
  331.     }
  332. }