src/Controller/Admin/DashboardController.php line 50

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