<?php
namespace App\Controller\Dashboard;
use App\Entity\ApiLog;
use App\Entity\BookingTime;
use App\Entity\CarrierSMSDomain;
use App\Entity\Course;
use App\Entity\Customer;
use App\Entity\Document;
use App\Entity\EmailTemplate;
use App\Entity\Event;
use App\Entity\Housekeeping;
use App\Entity\Invoice;
use App\Entity\InvoicePayment;
use App\Entity\InvoiceStatement;
use App\Entity\MaintenanceEquipment;
use App\Entity\MaintenanceInvoice;
use App\Entity\MaintenanceRequest;
use App\Entity\Membership;
use App\Entity\MembershipPrice;
use App\Entity\MembershipType;
use App\Entity\News;
use App\Entity\Newsletter;
use App\Entity\Order;
use App\Entity\OrderStatus;
use App\Entity\Package;
use App\Entity\PackageOption;
use App\Entity\PackagePrice;
use App\Entity\Promotion;
use App\Entity\Property;
use App\Entity\Request;
use App\Entity\Reseller;
use App\Entity\TeeTime;
use App\Entity\Transaction;
use App\Entity\User;
use App\Entity\Voucher;
use App\Form\User\UserProfileEditFormType;
use App\Form\Reseller\ResellerProfileEditFormType;
use App\Service\PDF\PdfConnector;
use Doctrine\ORM\EntityManagerInterface;
use Dukecity\CommandSchedulerBundle\Entity\ScheduledCommand;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
use Symfony\Component\Form\FormView;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request as HttpRequest;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;
class DashboardController extends AbstractDashboardController
{
private $em;
private $pdf;
private $easyUrl;
public function __construct(EntityManagerInterface $em, PdfConnector $pdf, AdminUrlGenerator $easyUrl)
{
$this->em = $em;
$this->pdf = $pdf;
$this->easyUrl = $easyUrl;
}
#[Route('/', name: 'dashboard')]
public function index(): Response
{
$usersDefaultDashboardUrl = null;
$redirectUrl = null;
if ($this->isGranted('ROLE_HOUSEKEEPING') && !$this->isGranted('ROLE_ADMIN') && !$this->isGranted('ROLE_MAINTENANCE')) {
$redirectUrl = $this->easyUrl->setRoute('housekeepingdashboard')->generateUrl();
} elseif ($this->isGranted('ROLE_MAINTENANCE') && !$this->isGranted('ROLE_PROSHOP') && !$this->isGranted('ROLE_ADMIN')) {
$redirectUrl = $this->easyUrl->setRoute('maintenancedashboard')->generateUrl();
} elseif ($this->isGranted('ROLE_RESELLER') && !$this->isGranted('ROLE_ADMIN')) {
$redirectUrl = $this->easyUrl->setRoute('resellerdashboard')->generateUrl();
} elseif ($this->isGranted('ROLE_PROSHOP') && !$this->isGranted('ROLE_ADMIN')) {
$redirectUrl = $this->easyUrl->setRoute('proshopdashboard')->generateUrl();
} elseif ($this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_SUPER_ADMIN')) {
$redirectUrl = $this->easyUrl->setRoute('admindashboard')->generateUrl();
} else {
$redirectUrl = $this->easyUrl->setController(OrderCrudController::class)->generateUrl();
}
return $this->redirect($redirectUrl);
}
#[Route('/dashboard/viewPrintableInvoice/{invoiceid}', name: 'viewprintableinvoice')]
public function viewPrintableInvoice($invoiceid): Response
{
$invoice = $this->em->getRepository(Invoice::class)->find($invoiceid);
$pdfvars = [
'no-background' => true,
'margin-left' => '10',
'margin-right' => '10',
'margin-top' => '10',
'margin-bottom' => '10',
];
return $this->pdf->generatePdfFromTwig('/dashboard/invoice/print.html.twig', array('invoice' => $invoice), $invoice->getReference(), $pdfvars);
}
#[Route('profile', name:'profile')]
public function profile(HttpRequest $request): Response
{
$user = $this->getUser();
return $this->render('user/profile.html.twig', [
'user' => $user,
]);
}
#[Route('editprofile', name:'editprofile')]
public function editprofile(HttpRequest $request): Response
{
$user = $this->getUser();
$reseller = null;
$userprofileeditform = null;
$userprofileeditformdata = null;
$userprofileeditformview = null;
$resellerprofileeditform = null;
$resellerprofileeditformdata = null;
$resellerprofileeditformview = null;
// if (!$user->getReseller()) {
$userprofileeditform = $this->createForm(UserProfileEditFormType::class);
$userprofileeditform->handleRequest($request);
if ($userprofileeditform->isSubmitted() && $userprofileeditform->isValid()) {
$userprofileeditformdata = $userprofileeditform->getData();
$user->setFirstName($userprofileeditformdata['firstName']);
$user->setLastName($userprofileeditformdata['lastName']);
$user->setEmail($userprofileeditformdata['email']);
if (!is_null($userprofileeditformdata['password']) && $userprofileeditformdata['password'] != '') {
$user->setPassword(password_hash($userprofileeditformdata['password'], PASSWORD_DEFAULT));
}
// $user->setUsername($userprofileeditformdata['username']);
$this->em->persist($user);
$this->em->flush();
return $this->redirectToRoute('profile');
}
$userprofileeditform->get('firstName')->setData($user->getFirstName());
$userprofileeditform->get('lastName')->setData($user->getLastName());
$userprofileeditform->get('email')->setData($user->getEmail());
// } else {
// $reseller = $user->getReseller();
// $resellerprofileeditform = $this->createForm(ResellerProfileEditFormType::class);
// $resellerprofileeditform->handleRequest($request);
// if ($resellerprofileeditform->isSubmitted() && $resellerprofileeditform->isValid()) {
// $resellerprofileeditformdata = $resellerprofileeditform->getData();
// $user->setFirstName($resellerprofileeditformdata['firstName']);
// $user->setLastName($resellerprofileeditformdata['lastName']);
// $user->setEmail($resellerprofileeditformdata['email']);
// // $user->setUsername($resellerprofileeditformdata['username']);
// $this->em->persist($user);
// $reseller->setCompany($resellerprofileeditformdata['company']);
// $reseller->setAddress($resellerprofileeditformdata['address']);
// $reseller->setSuite($resellerprofileeditformdata['suite']);
// $reseller->setCity($resellerprofileeditformdata['city']);
// $reseller->setState($resellerprofileeditformdata['state']);
// $reseller->setZipcode($resellerprofileeditformdata['zipcode']);
// $reseller->setPhone($resellerprofileeditformdata['phone']);
// $this->em->persist($reseller);
// $this->em->flush();
// return $this->redirectToRoute('profile');
// }
// }
// if (!is_null($userprofileeditform)) {
// $userprofileeditform->get('id')->setData($user->getId());
// $userprofileeditform->get('firstName')->setData($user->getFirstName());
// $userprofileeditform->get('lastName')->setData($user->getLastName());
// $userprofileeditform->get('email')->setData($user->getEmail());
// // $userprofileeditform->get('username')->setData($user->getUsername());
$userprofileeditformview = $userprofileeditform->createView();
// }
// if (!is_null($resellerprofileeditform) && !is_null($reseller)) {
// $resellerprofileeditform->get('userid')->setData($user->getId());
// $resellerprofileeditform->get('firstName')->setData($user->getFirstName());
// $resellerprofileeditform->get('lastName')->setData($user->getLastName());
// $resellerprofileeditform->get('email')->setData($user->getEmail());
// // $resellerprofileeditform->get('username')->setData($user->getUsername());
// $resellerprofileeditform->get('resellerid')->setData($reseller->getId());
// $resellerprofileeditform->get('company')->setData($reseller->getCompany());
// $resellerprofileeditform->get('address')->setData($reseller->getAddress());
// $resellerprofileeditform->get('suite')->setData($reseller->getSuite());
// $resellerprofileeditform->get('city')->setData($reseller->getCity());
// $resellerprofileeditform->get('state')->setData($reseller->getState());
// $resellerprofileeditform->get('zipcode')->setData($reseller->getZipcode());
// $resellerprofileeditform->get('phone')->setData($reseller->getPhone());
// $resellerprofileeditformview = $resellerprofileeditform->createView();
// }
return $this->render('user/profile-edit.html.twig', [
'user' => $user,
'userprofileeditform' => $userprofileeditformview,
// 'resellerprofileeditform' => $resellerprofileeditformview,
]);
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->setTitle('Greens <br/>Concierge')
->disableDarkMode()
;
}
public function configureCrud(): Crud
{
return Crud::new()
->setDateTimeFormat('medium', 'short')
->showEntityActionsInlined()
->setPaginatorPageSize(30)
->overrideTemplate('label/null', 'dashboard/fields/null.html.twig')
;
}
public function configureActions(): Actions
{
return Actions::new()
->addBatchAction(Action::BATCH_DELETE)
->add(Crud::PAGE_INDEX, Action::NEW)
->add(Crud::PAGE_INDEX, Action::EDIT)
->add(Crud::PAGE_INDEX, Action::DELETE)
->add(Crud::PAGE_DETAIL, Action::EDIT)
->add(Crud::PAGE_DETAIL, Action::INDEX)
->add(Crud::PAGE_DETAIL, Action::DELETE)
->add(Crud::PAGE_EDIT, Action::SAVE_AND_RETURN)
->add(Crud::PAGE_EDIT, Action::SAVE_AND_CONTINUE)
->add(Crud::PAGE_NEW, Action::SAVE_AND_RETURN)
->add(Crud::PAGE_NEW, Action::SAVE_AND_ADD_ANOTHER)
->remove(Crud::PAGE_INDEX, Action::BATCH_DELETE)
->remove(Crud::PAGE_INDEX, Action::DELETE)
->add(Crud::PAGE_INDEX, Action::DETAIL)
->add(Crud::PAGE_EDIT, Action::SAVE_AND_ADD_ANOTHER)
;
}
public function configureAssets(): Assets
{
return Assets::new()
->addWebpackEncoreEntry('base')
;
}
public function configureUserMenu(UserInterface $user): UserMenu
{
return parent::configureUserMenu($user)
->setName($user->getFullName())
->addMenuItems([
MenuItem::linkToRoute('Profile', 'fa fa-id-card', 'profile'),
]);
;
}
public function configureMenuItems(): iterable
{
$orderCount = 0;
if ($this->getUser()->getReseller()) {
$orderCount = count($this->getUser()->getReseller()->getOrders());
}
yield MenuItem::linkToDashboard('Dashboard', 'fa fa-home');
if ($this->isGranted('ROLE_SUPER_ADMIN') || $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_RESELLER') || $this->isGranted('ROLE_PROSHOP_MANAGER') || $this->isGranted('ROLE_PROSHOP')) {
if ($orderCount > 0) {
yield MenuItem::linkToCrud('Orders', 'fa fa-clipboard-list', Order::class)
->setBadge($orderCount, 'secondary');
} else {
yield MenuItem::linkToCrud('Orders', 'fa fa-clipboard-list', Order::class);
}
}
if ($this->isGranted('ROLE_SUPER_ADMIN') || $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_PROSHOP_MANAGER') || $this->isGranted('ROLE_PROSHOP')) {
yield MenuItem::linkToCrud('Requests', 'fa fa-comment-dollar', Request::class);
yield MenuItem::linkToCrud('Tee Times', 'fa fa-golf-ball-tee', TeeTime::class);
yield MenuItem::linkToCrud('Bookings', 'fa fa-calendar-check', BookingTime::class);
yield MenuItem::section('Service');
yield MenuItem::linkToCrud('Customers', 'fa fa-users-rectangle', Customer::class);
yield MenuItem::linkToCrud('Memberships', 'fa fa-address-card', Membership::class);
yield MenuItem::linkToCrud('Newsletter', 'fa fa-envelope', Newsletter::class);
}
if ($this->isGranted('ROLE_SUPER_ADMIN') || $this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_PROSHOP_MANAGER') || $this->isGranted('ROLE_PROSHOP') || $this->isGranted('ROLE_HOUSEKEEPING')) {
yield MenuItem::linkToCrud('Housekeeping', 'fa fa-hand-sparkles', Housekeeping::class);
}
if ($this->isGranted('ROLE_PROSHOP') || $this->isGranted('ROLE_MAINTENANCE')) {
if ($this->isGranted('ROLE_ADMIN') || $this->isGranted('ROLE_MAINTENANCE')) {
yield MenuItem::subMenu('Maintenance', 'fa fa-screwdriver-wrench')->setSubItems([
MenuItem::linkToCrud('Requests', 'fa fa-box', MaintenanceRequest::class),
MenuItem::linkToCrud('Equipment', 'fa fa-box', MaintenanceEquipment::class),
MenuItem::linkToCrud('Invoices', 'fa fa-box', MaintenanceInvoice::class),
]);
} else {
yield MenuItem::subMenu('Maintenance', 'fa fa-screwdriver-wrench')->setSubItems([
MenuItem::linkToCrud('Requests', 'fa fa-box', MaintenanceRequest::class),
]);
}
}
yield MenuItem::section('');
if ($this->isGranted('ROLE_PROSHOP_MANAGER') && !$this->isGranted('ROLE_ADMIN')) {
yield MenuItem::subMenu('Management', 'fa fa-desktop')->setSubItems([
MenuItem::linkToCrud('Documents', 'fa fa-file', Document::class),
]);
}
if ($this->isGranted('ROLE_SUPER_ADMIN') || $this->isGranted('ROLE_ADMIN')) {
yield MenuItem::subMenu('Management', 'fa fa-desktop')->setSubItems([
MenuItem::linkToCrud('Packages', 'fa fa-box', Package::class),
MenuItem::linkToCrud('Package Options', 'fa fa-box', PackageOption::class),
MenuItem::linkToCrud('Package Prices', 'fa fa-comment-dollar', PackagePrice::class),
MenuItem::linkToCrud('Promotions', 'fa fa-tags', Promotion::class),
MenuItem::linkToCrud('Vouchers', 'fa fa-ticket', Voucher::class),
MenuItem::linkToCrud('Properties', 'fa fa-building', Property::class),
MenuItem::linkToCrud('Golf Courses', 'fa fa-flag', Course::class),
MenuItem::linkToCrud('Documents', 'fa fa-file', Document::class),
MenuItem::linkToCrud('Membership Types', 'fa fa-flag', MembershipType::class),
MenuItem::linkToCrud('Membership Prices', 'fa fa-comment-dollar', MembershipPrice::class),
]);
yield MenuItem::linkToCrud('Invoices', 'fa fa-chart-line', Invoice::class);
yield MenuItem::subMenu('Reports', 'fa fa-magnifying-glass-chart')->setSubItems([
MenuItem::linkToCrud('Transactions', 'fa fa-chart-line', Transaction::class),
MenuItem::linkToCrud('Tee Sales', 'fa fa-chart-line', Order::class)
->setBadge('Soon', 'info')
->setCssClass('disabled'),
MenuItem::linkToCrud('Package Sales', 'fa fa-chart-line', Order::class)
->setBadge('Soon', 'info')
->setCssClass('disabled'),
MenuItem::linkToCrud('Proshop Sales', 'fa fa-chart-line', Order::class)
->setBadge('Soon', 'info')
->setCssClass('disabled'),
]);
yield MenuItem::section('');
yield MenuItem::linkToCrud('Users', 'fa fa-users', User::class);
yield MenuItem::linkToCrud('Packagers/Reseller', 'fa fa-user-tie', Reseller::class);
yield MenuItem::section('');
yield MenuItem::linkToCrud('News', 'fa fa-newspaper', News::class);
yield MenuItem::linkToCrud('Events', 'fa fa-calendar-alt', Event::class);
}
if ($this->isGranted('ROLE_SUPER_ADMIN')) {
yield MenuItem::section('Dev Systems');
yield MenuItem::subMenu('Email System', 'fas fa-envelope')->setSubItems([
MenuItem::linkToCrud('Templates', 'fas fa-envelope', EmailTemplate::class),
]);
yield MenuItem::linkToCrud('Order Status', 'fa fa-check', OrderStatus::class);
yield MenuItem::linkToCrud('Api Logs', 'fa fa-archive', ApiLog::class);
yield MenuItem::linkToCrud('Scheduled Commands', 'fas fa-calendar-times', ScheduledCommand::class);
yield MenuItem::linkToCrud('Carrier SMS Domains', 'fas fa-phone', CarrierSMSDomain::class);
}
}
}