<?php
namespace App\Controller\Admin;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use App\Entity\Projects;
use App\Entity\ProjectProducts;
use App\Entity\Customers;
use App\Entity\WorkHours;
use App\Entity\Workers;
use App\Entity\Quotes;
use App\Entity\Settings;
use App\Entity\User;
use App\Entity\Events;
use App\Entity\Contracts;
use App\Entity\Photo;
use EasyCorp\Bundle\EasyAdminBundle\Router\CrudUrlGenerator;
use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
use Symfony\Component\Security\Core\User\UserInterface;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
use App\Controller\Admin\UserCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use App\Controller\Admin\ProjectsCrudController;
use App\Controller\Admin\SettinsCrudController;
use App\Controller\Admin\EventsCrudController;
use App\Controller\Admin\WorkHoursCrudController;
use App\Form\Type\WorkhourType;
use App\Service\Settings as SettingsService;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
class DashboardController extends AbstractDashboardController
{
private $settings;
private $params;
public function __construct(ContainerBagInterface $params, SettingsService $settings){
$this->settings = $settings;
$this->params = $params;
}
/**
* @Route("/admin", name="admin")
*/
public function index(): Response
{
//return parent::index();
//$routeBuilder = $this->get(CrudUrlGenerator::class)->build();
//set regulation to main page
//return $this->redirect($routeBuilder->setController(CarsCrudController::class)->generateUrl());
if($this->getUser() == null){
return $this->redirect('login');
}
return $this->render('page/dashboard.html.twig');
}
/**
* @Route("/show-event/{entity}/{id}", name="show-event")
*/
public function showEvent($entity, $id): Response
{
$adminUrlGenerator = $this->get(AdminUrlGenerator::class);
if($entity == 'project'){
$url = $adminUrlGenerator
->setController(ProjectsCrudController::class)
->setAction(Action::DETAIL)
->set('entityId',$id)
->generateUrl();
}else
if($entity == 'workhours'){
$url = $adminUrlGenerator
->setController(WorkHoursCrudController::class)
->setAction(Action::DETAIL)
->set('entityId',$id)
->generateUrl();
}else{
$url = $adminUrlGenerator
->setController(EventsCrudController::class)
->setAction(Action::DETAIL)
->set('entityId',$id)
->generateUrl();
}
return $this->redirect($url);
}
/**
* @Route("/show-projects/due", name="show-projects")
*/
public function showProjects(): Response
{
$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
if (!$this->getUser()->hasRoles(User::ROLE_ADMIN)) {
$qb->andWhere('e.worker = (:worker)');
$qb->setParameter('worker', $this->getUser()->getWorker());
}
//$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")
// ->from('App:Events', 'e')
//->leftJoin('App:Cu', 'c', 'WITH', 'c.id = e.car')
// ->where('p.id= :id')
// ->setParameter('id', 2)
// ->getQuery()
// ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
$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")
->from('App:Projects', 'e')
->leftJoin('App:Customers', 'c', 'WITH', 'c.id = e.customer')
// ->where('p.id= :id')
// ->setParameter('id', 2)
->getQuery()
->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
// dump($events);die;
$content = json_encode($events);
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->setContent($content);
$response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT : Response::HTTP_OK); //return parent::index();
return $response;
//$routeBuilder = $this->get(CrudUrlGenerator::class)->build();
//set regulation to main page
//return $this->redirect($routeBuilder->setController(CarsCrudController::class)->generateUrl());
// return $this->render('page/dashboard.html.twig');
}
/**
* @Route("/show-events/due", name="show-events")
*/
public function showEvents(): Response
{
$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
if (!$this->getUser()->hasRoles(User::ROLE_ADMIN)) {
//$qb->andWhere('e.worker = (:worker)');
//$qb->setParameter('worker', $this->getUser()->getWorker());
$qb->orWhere('e.isPublic = true');
}
//$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")
// ->from('App:Events', 'e')
//->leftJoin('App:Cu', 'c', 'WITH', 'c.id = e.car')
// ->where('p.id= :id')
// ->setParameter('id', 2)
// ->getQuery()
// ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
$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")
->from('App:Events', 'e')
->leftJoin('App:ProjectProducts', 'pp', 'WITH', 'pp.id = e.product')
->leftJoin('App:Projects', 'p', 'WITH', 'p.id = pp.project')
->leftJoin('App:Customers', 'cu', 'WITH', 'cu.id = p.customer')
// ->where('p.id= :id')
// ->setParameter('id', 2)
->getQuery()
->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
// dump($events);die;
$content = json_encode($events);
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->setContent($content);
$response->setStatusCode(empty($content) ? Response::HTTP_NO_CONTENT : Response::HTTP_OK); //return parent::index();
return $response;
//$routeBuilder = $this->get(CrudUrlGenerator::class)->build();
//set regulation to main page
//return $this->redirect($routeBuilder->setController(CarsCrudController::class)->generateUrl());
// return $this->render('page/dashboard.html.twig');
}
/**
* @Route("/show-events/work/{type}", name="show-events-work-paid")
*/
public function showEventsWork($type): Response
{
$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$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")
->from('App:WorkHours', 'e')
->leftJoin('App:Workers', 'c', 'WITH', 'c.id = e.worker')
->leftJoin('App:Projects', 'p', 'WITH', 'p.id = e.project');
if (!$this->getUser()->hasRoles(User::ROLE_ADMIN)) {
$events->where('c.id = :worker');
$events->setParameter('worker', $this->getUser()->getWorker());
}
switch ($type) {
case 'payed':
$events->andwhere('e.payed is not null');
break;
case 'unpaid':
$events->andwhere('e.payed is null');
break;
default:
break;
}
//dump($events);die;
$events = $events->getQuery()
->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
$content = json_encode($events);
$response = new Response();
$response->headers->set('Content-Type', 'application/json');
$response->setContent($content);
return $response;
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->setTitle('Gortech')
->setFaviconPath('favicon.png')
->renderContentMaximized()
//->renderSidebarMinimized()
;
}
public function configureMenuItems(): iterable
{
if($this->getUser() == null){
return $this->redirect('login');
}
yield MenuItem::linkToDashboard('Főoldal', 'fas fa-home');
yield MenuItem::section('Munkák');
yield MenuItem::linkToCrud('Ügyfelek', 'fas fa-users', Customers::class)->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Projektek', 'fas fa-project-diagram', Projects::class)->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Projekteim', 'fas fa-warehouse', Projects::class)->setController(MyProjectsCrudController::class)->setPermission('ROLE_WORKER');
yield MenuItem::linkToCrud('Gyártás/Termék', 'fas fa-industry', ProjectProducts::class)->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Szerződések', 'fas fa-file-contract', Contracts::class)->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Fotók', 'fas fa-image', Photo::class)->setPermission('ROLE_ADMIN');
yield MenuItem::section('Munkavégzés');
yield MenuItem::linkToCrud('Óra rögzítés', 'fa fa-clock', Workhours::class)->setController(WorkhoursCrudController::class)->setAction(Action::NEW);
yield MenuItem::linkToCrud('Munkaórák', 'fas fa-user-clock', Workhours::class);
yield MenuItem::linkToCrud('Dolgozók', 'fas fa-address-card', Workers::class)->setPermission('ROLE_ADMIN');
if($this->getUser()->getWorker()){
yield MenuItem::linkToCrud('Kifizetetlen órák', 'fas fa-cog', Workers::class)->setPermission("ROLE_WORKER")->setController(WorkersCrudController::class)->setAction("actionBatch")->setEntityId($this->getUser()->getWorker()->getId());
}
yield MenuItem::section('Események')->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Időpontok', 'fas fa-clock', Events::class)->setPermission('ROLE_ADMIN');
yield MenuItem::section('Események')->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Ajánlatok', 'fas fa-file-alt', Quotes::class)->setPermission('ROLE_ADMIN');
yield MenuItem::section('Rendszer')->setPermission('ROLE_ADMIN')->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Profilom', 'fa fa-user', User::class)->setController(UserCrudController::class)->setAction(Action::EDIT)->setEntityId($this->getUser()->getId());
if($this->getUser()->hasRoles('ROLE_ADMIN')){
yield MenuItem::linkToCrud('Felhasználók', 'fas fa-user', User::class);
}
//->setPermission('ROLE_ADMIN');
yield MenuItem::linkToCrud('Beállítások', 'fas fa-cog', Settings::class)->setController(SettingsCrudController::class)->setAction(Action::EDIT)->setEntityId(1)->setPermission('ROLE_ADMIN');
}
public function configureUserMenu(UserInterface $user): UserMenu
{
$adminUrlGenerator = $this->get(AdminUrlGenerator::class);
$url = $adminUrlGenerator
->setController(UserCrudController::class)
->setAction(Action::EDIT)
->set('entityId',$user->getId())
->generateUrl();
//dump($adminUrlGenerator);die;
return parent::configureUserMenu($user)
->setName($user->getDisplayName()?$user->getDisplayName():$user->getUsername())
->displayUserName(true)
->displayUserAvatar(true)
->setMenuItems([
MenuItem::linkToCrud('Profilom', 'fa fa-id-card', User::class)->setController(UserCrudController::class)->setAction(Action::EDIT)->setEntityId($this->getUser()->getId()),
MenuItem::linkToLogout('Logout', 'fa fa-sign-out'),
]);
}
public function configureCrud(): Crud
{
return Crud::new()
// the argument must be either one of these strings: 'short', 'medium', 'long', 'full', 'none'
// (the strings are also available as \EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField::FORMAT_* constants)
// or a valid ICU Datetime Pattern (see http://userguide.icu-project.org/formatparse/datetime)
->setDateFormat('Y-MM-dd')
->setTimeFormat('short')
// first argument = datetime pattern or date format; second optional argument = time format
//->setDateTimeFormat('medium', 'medium')
->setDateTimeFormat('Y-MM-dd H:mm:ss')
->setDateIntervalFormat('%%y év %%m hónap %%d nap')
->setTimezone('Europe/Budapest')
// used to format numbers before rendering them on templates
->setNumberFormat('%.3d');
}
}