src/Controller/Admin/DashboardController.php line 53

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