src/Controller/Admin/DashboardController.php line 51

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\Projects;
  10. use App\Entity\ProjectProducts;
  11. use App\Entity\Customers;
  12. use App\Entity\WorkHours;
  13. use App\Entity\Workers;
  14. use App\Entity\Quotes;
  15. use App\Entity\Settings;
  16. use App\Entity\User;
  17. use App\Entity\Events;
  18. use App\Entity\Contracts;
  19. use App\Entity\Photo;
  20. use App\Entity\ProductWarranty;
  21. use EasyCorp\Bundle\EasyAdminBundle\Router\CrudUrlGenerator;
  22. use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
  23. use Symfony\Component\Security\Core\User\UserInterface;
  24. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  25. use App\Controller\Admin\UserCrudController;
  26. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  27. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  28. use App\Controller\Admin\ProjectsCrudController;
  29. use App\Controller\Admin\SettinsCrudController;
  30. use App\Controller\Admin\EventsCrudController;
  31. use App\Controller\Admin\WorkHoursCrudController;
  32. use App\Form\Type\WorkhourType;
  33. use App\Service\Settings as SettingsService;
  34. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  35. class DashboardController extends AbstractDashboardController
  36. {
  37. private $settings;
  38. private $params;
  39. public function __construct(ContainerBagInterface $params, SettingsService $settings){
  40. $this->settings = $settings;
  41. $this->params = $params;
  42. }
  43. /**
  44. * @Route("/admin", name="admin")
  45. */
  46. public function index(): Response
  47. {
  48. //return parent::index();
  49. //$routeBuilder = $this->get(CrudUrlGenerator::class)->build();
  50. //set regulation to main page
  51. //return $this->redirect($routeBuilder->setController(CarsCrudController::class)->generateUrl());
  52. if($this->getUser() == null){
  53. return $this->redirect('login');
  54. }
  55. return $this->render('page/dashboard.html.twig');
  56. }
  57. /**
  58. * @Route("/show-event/{entity}/{id}", name="show-event")
  59. */
  60. public function showEvent($entity, $id): Response
  61. {
  62. $adminUrlGenerator = $this->get(AdminUrlGenerator::class);
  63. if($entity == 'project'){
  64. $url = $adminUrlGenerator
  65. ->setController(ProjectsCrudController::class)
  66. ->setAction(Action::DETAIL)
  67. ->set('entityId',$id)
  68. ->generateUrl();
  69. }else
  70. if($entity == 'workhours'){
  71. $url = $adminUrlGenerator
  72. ->setController(WorkHoursCrudController::class)
  73. ->setAction(Action::DETAIL)
  74. ->set('entityId',$id)
  75. ->generateUrl();
  76. }else{
  77. $url = $adminUrlGenerator
  78. ->setController(EventsCrudController::class)
  79. ->setAction(Action::DETAIL)
  80. ->set('entityId',$id)
  81. ->generateUrl();
  82. }
  83. return $this->redirect($url);
  84. }
  85. /**
  86. * @Route("/show-projects/due", name="show-projects")
  87. */
  88. public function showProjects(): Response
  89. {
  90. $em = $this->getDoctrine()->getManager();
  91. $qb = $em->createQueryBuilder();
  92. if (!$this->getUser()->hasRoles(User::ROLE_ADMIN)) {
  93. $qb->andWhere('e.worker = (:worker)');
  94. $qb->setParameter('worker', $this->getUser()->getWorker());
  95. }
  96. //$events = $qb->select("DATE_FORMAT(e.due, '%Y-%m-%dT%H:%i:%s') as start, CONCAT_WS(' ',c.plateNumber,e.title) as title, e.id")
  97. // ->from('App:Events', 'e')
  98. //->leftJoin('App:Cu', 'c', 'WITH', 'c.id = e.car')
  99. // ->where('p.id= :id')
  100. // ->setParameter('id', 2)
  101. // ->getQuery()
  102. // ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  103. $events = $qb->select("DATE_FORMAT(e.deadline, '%Y-%m-%dT%H:%i:%s') as start, CONCAT_WS('-',e.name,c.name) as title, e.id, 'project' as entity")
  104. ->from('App:Projects', 'e')
  105. ->leftJoin('App:Customers', 'c', 'WITH', 'c.id = e.customer')
  106. // ->where('p.id= :id')
  107. // ->setParameter('id', 2)
  108. ->getQuery()
  109. ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  110. // dump($events);die;
  111. $content = json_encode($events);
  112. $response = new Response();
  113. $response->headers->set('Content-Type', 'application/json');
  114. $response->setContent($content);
  115. $response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT : Response::HTTP_OK); //return parent::index();
  116. return $response;
  117. //$routeBuilder = $this->get(CrudUrlGenerator::class)->build();
  118. //set regulation to main page
  119. //return $this->redirect($routeBuilder->setController(CarsCrudController::class)->generateUrl());
  120. // return $this->render('page/dashboard.html.twig');
  121. }
  122. /**
  123. * @Route("/show-events/due", name="show-events")
  124. */
  125. public function showEvents(): Response
  126. {
  127. $em = $this->getDoctrine()->getManager();
  128. $qb = $em->createQueryBuilder();
  129. if (!$this->getUser()->hasRoles(User::ROLE_ADMIN)) {
  130. //$qb->andWhere('e.worker = (:worker)');
  131. //$qb->setParameter('worker', $this->getUser()->getWorker());
  132. $qb->orWhere('e.isPublic = true');
  133. }
  134. //$events = $qb->select("DATE_FORMAT(e.due, '%Y-%m-%dT%H:%i:%s') as start, CONCAT_WS(' ',c.plateNumber,e.title) as title, e.id")
  135. // ->from('App:Events', 'e')
  136. //->leftJoin('App:Cu', 'c', 'WITH', 'c.id = e.car')
  137. // ->where('p.id= :id')
  138. // ->setParameter('id', 2)
  139. // ->getQuery()
  140. // ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  141. $events = $qb->select("DATE_FORMAT(e.due, '%Y-%m-%dT%H:%i:%s') as start, CONCAT_WS('-',e.title, pp.name, p.name, cu.name) as title, e.id, 'esemény' as entity, e.note as note, e.isPublic as isPublic")
  142. ->from('App:Events', 'e')
  143. ->leftJoin('App:ProjectProducts', 'pp', 'WITH', 'pp.id = e.product')
  144. ->leftJoin('App:Projects', 'p', 'WITH', 'p.id = pp.project')
  145. ->leftJoin('App:Customers', 'cu', 'WITH', 'cu.id = p.customer')
  146. // ->where('p.id= :id')
  147. // ->setParameter('id', 2)
  148. ->getQuery()
  149. ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  150. // dump($events);die;
  151. $content = json_encode($events);
  152. $response = new Response();
  153. $response->headers->set('Content-Type', 'application/json');
  154. $response->setContent($content);
  155. $response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT : Response::HTTP_OK); //return parent::index();
  156. return $response;
  157. //$routeBuilder = $this->get(CrudUrlGenerator::class)->build();
  158. //set regulation to main page
  159. //return $this->redirect($routeBuilder->setController(CarsCrudController::class)->generateUrl());
  160. // return $this->render('page/dashboard.html.twig');
  161. }
  162. /**
  163. * @Route("/show-events/work/{type}", name="show-events-work-paid")
  164. */
  165. public function showEventsWork($type): Response
  166. {
  167. $em = $this->getDoctrine()->getManager();
  168. $qb = $em->createQueryBuilder();
  169. $events = $qb->select("DATE_FORMAT(e.day, '%Y-%m-%dT%H:%i:%s') as start, CONCAT_WS('-',e.hours,c.full_name,p.name) as title, e.id, 'workhours' as entity, e.hours as hours, p.name as project_name, c.full_name as worker")
  170. ->from('App:WorkHours', 'e')
  171. ->leftJoin('App:Workers', 'c', 'WITH', 'c.id = e.worker')
  172. ->leftJoin('App:Projects', 'p', 'WITH', 'p.id = e.project');
  173. if (!$this->getUser()->hasRoles(User::ROLE_ADMIN)) {
  174. $events->where('c.id = :worker');
  175. $events->setParameter('worker', $this->getUser()->getWorker());
  176. }
  177. switch ($type) {
  178. case 'payed':
  179. $events->andwhere('e.payed is not null');
  180. break;
  181. case 'unpaid':
  182. $events->andwhere('e.payed is null');
  183. break;
  184. default:
  185. break;
  186. }
  187. //dump($events);die;
  188. $events = $events->getQuery()
  189. ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  190. $content = json_encode($events);
  191. $response = new Response();
  192. $response->headers->set('Content-Type', 'application/json');
  193. $response->setContent($content);
  194. return $response;
  195. }
  196. public function configureDashboard(): Dashboard
  197. {
  198. return Dashboard::new()
  199. ->setTitle('Gortech')
  200. ->setFaviconPath('favicon.png')
  201. ->renderContentMaximized()
  202. //->renderSidebarMinimized()
  203. ;
  204. }
  205. public function configureMenuItems(): iterable
  206. {
  207. if($this->getUser() == null){
  208. return $this->redirect('login');
  209. }
  210. yield MenuItem::linkToDashboard('Főoldal', 'fas fa-home');
  211. yield MenuItem::section('Munkák');
  212. yield MenuItem::linkToCrud('Ügyfelek', 'fas fa-users', Customers::class)->setPermission('ROLE_ADMIN');
  213. yield MenuItem::linkToCrud('Projektek', 'fas fa-project-diagram', Projects::class)->setPermission('ROLE_ADMIN');
  214. yield MenuItem::linkToCrud('Projekteim', 'fas fa-warehouse', Projects::class)->setController(MyProjectsCrudController::class)->setPermission('ROLE_WORKER');
  215. yield MenuItem::linkToCrud('Gyártás/Termék', 'fas fa-industry', ProjectProducts::class)->setPermission('ROLE_ADMIN');
  216. yield MenuItem::linkToCrud('Szerződések', 'fas fa-file-contract', Contracts::class)->setPermission('ROLE_ADMIN');
  217. yield MenuItem::linkToCrud('Jótállások', 'fas fa-file-signature', ProductWarranty::class)->setPermission('ROLE_ADMIN');
  218. yield MenuItem::linkToCrud('Fotók', 'fas fa-image', Photo::class)->setPermission('ROLE_ADMIN');
  219. yield MenuItem::section('Munkavégzés');
  220. yield MenuItem::linkToCrud('Óra rögzítés', 'fa fa-clock', Workhours::class)->setController(WorkhoursCrudController::class)->setAction(Action::NEW);
  221. yield MenuItem::linkToCrud('Munkaórák', 'fas fa-user-clock', Workhours::class);
  222. yield MenuItem::linkToCrud('Dolgozók', 'fas fa-address-card', Workers::class)->setPermission('ROLE_ADMIN');
  223. if($this->getUser()->getWorker()){
  224. yield MenuItem::linkToCrud('Kifizetetlen órák', 'fas fa-cog', Workers::class)->setPermission("ROLE_WORKER")->setController(WorkersCrudController::class)->setAction("actionBatch")->setEntityId($this->getUser()->getWorker()->getId());
  225. }
  226. yield MenuItem::section('Események')->setPermission('ROLE_ADMIN');
  227. yield MenuItem::linkToCrud('Időpontok', 'fas fa-clock', Events::class)->setPermission('ROLE_ADMIN');
  228. yield MenuItem::section('Események')->setPermission('ROLE_ADMIN');
  229. yield MenuItem::linkToCrud('Ajánlatok', 'fas fa-file-alt', Quotes::class)->setPermission('ROLE_ADMIN');
  230. yield MenuItem::section('Rendszer')->setPermission('ROLE_ADMIN')->setPermission('ROLE_ADMIN');
  231. yield MenuItem::linkToCrud('Profilom', 'fa fa-user', User::class)->setController(UserCrudController::class)->setAction(Action::EDIT)->setEntityId($this->getUser()->getId());
  232. if($this->getUser()->hasRoles('ROLE_ADMIN')){
  233. yield MenuItem::linkToCrud('Felhasználók', 'fas fa-user', User::class);
  234. }
  235. //->setPermission('ROLE_ADMIN');
  236. yield MenuItem::linkToCrud('Beállítások', 'fas fa-cog', Settings::class)->setController(SettingsCrudController::class)->setAction(Action::EDIT)->setEntityId(1)->setPermission('ROLE_ADMIN');
  237. }
  238. public function configureUserMenu(UserInterface $user): UserMenu
  239. {
  240. $menuItems = [
  241. MenuItem::linkToCrud('Profilom', 'fa fa-id-card', User::class)->setController(UserCrudController::class)->setAction(Action::EDIT)->setEntityId($this->getUser()->getId()),
  242. ];
  243. // Check if this user is impersonating another user (has ROLE_PREVIOUS_ADMIN)
  244. if (in_array('ROLE_PREVIOUS_ADMIN', $this->getUser()->getRoles())) {
  245. $menuItems[] = MenuItem::linkToRoute('Impersonáció vége', 'fa fa-sign-out-alt', 'exit_impersonation');
  246. }
  247. $menuItems[] = MenuItem::linkToLogout('Logout', 'fa fa-sign-out');
  248. return parent::configureUserMenu($user)
  249. ->setName($user->getDisplayName()?$user->getDisplayName():$user->getUsername())
  250. ->displayUserName(true)
  251. ->displayUserAvatar(true)
  252. ->setMenuItems($menuItems);
  253. }
  254. public function configureCrud(): Crud
  255. {
  256. return Crud::new()
  257. // the argument must be either one of these strings: 'short', 'medium', 'long', 'full', 'none'
  258. // (the strings are also available as \EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField::FORMAT_* constants)
  259. // or a valid ICU Datetime Pattern (see http://userguide.icu-project.org/formatparse/datetime)
  260. ->setDateFormat('Y-MM-dd')
  261. ->setTimeFormat('short')
  262. // first argument = datetime pattern or date format; second optional argument = time format
  263. //->setDateTimeFormat('medium', 'medium')
  264. ->setDateTimeFormat('Y-MM-dd H:mm:ss')
  265. ->setDateIntervalFormat('%%y év %%m hónap %%d nap')
  266. ->setTimezone('Europe/Budapest')
  267. // used to format numbers before rendering them on templates
  268. ->showEntityActionsInlined()
  269. ->setNumberFormat('%.3d');
  270. }
  271. }