src/Nolimit/Project/Controller/ProjectController.php line 128

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Nolimit\Project\Controller;
  4. use App\Entity\CompanyType;
  5. use App\Entity\Currency;
  6. use App\Nolimit\Project\Provider\ProjectDatatableProvider;
  7. use App\Nolimit\Project\Manager\ProjectManager;
  8. use App\Repository\CompanyRepository;
  9. use App\Repository\ProjectRepository;
  10. use App\Repository\ProjectStatusRepository;
  11. use App\Repository\ProjectTypeRepository;
  12. use App\Repository\UserRepository;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  14. use Sonata\AdminBundle\Controller\CRUDController;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use App\Entity\Company;
  17. use App\Entity\Contract;
  18. use App\Entity\ProjectType;
  19. use App\Entity\Settings;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Knp\Snappy\Pdf;
  22. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  26. use Symfony\Contracts\Translation\TranslatorInterface;
  27. class ProjectController extends CRUDController
  28. {
  29.     private EntityManagerInterface $em;
  30.     private ProjectDatatableProvider $projectDatatableProvider;
  31.     private ProjectManager $projectManager;
  32.     private ProjectRepository $projectRepository;
  33.     private CompanyRepository $companyRepository;
  34.     private ProjectTypeRepository $projectTypeRepository;
  35.     private ProjectStatusRepository $projectStatusRepository;
  36.     private UserRepository $userRepository;
  37.     private TokenStorageInterface $tokenStorage;
  38.     public function __construct(EntityManagerInterface $em,
  39.                                 ProjectRepository $projectRepository,
  40.                                 ProjectDatatableProvider $projectDatatableProvider,
  41.                                 ProjectManager $projectManager,
  42.                                 CompanyRepository $companyRepository,
  43.                                 ProjectTypeRepository $projectTypeRepository,
  44.                                 ProjectStatusRepository $projectStatusRepository,
  45.                                 UserRepository $userRepository,
  46.                                 TokenStorageInterface $tokenStorage
  47.     )
  48.     {
  49.         $this->em $em;
  50.         $this->projectDatatableProvider $projectDatatableProvider;
  51.         $this->projectManager $projectManager;
  52.         $this->projectRepository $projectRepository;
  53.         $this->companyRepository $companyRepository;
  54.         $this->projectTypeRepository $projectTypeRepository;
  55.         $this->projectStatusRepository $projectStatusRepository;
  56.         $this->userRepository $userRepository;
  57.         $this->tokenStorage $tokenStorage;
  58.     }
  59.     public function listAction(Request $request): Response
  60.     {
  61.         $companies $this->companyRepository->findBy(array("deleted"=>false,"companyType"=>CompanyType::COMPANY_TYPE_K));
  62.         $projectType $this->projectTypeRepository->findAll();
  63.         $projectStatus $this->projectStatusRepository->findAll();
  64.         $user $this->tokenStorage->getToken()->getUser();
  65.         $isSuperAdmin in_array("ROLE_SUPER_ADMIN"$user->getRoles());
  66.         return $this->renderWithExtraParams('/project/project_view.html.twig', array (
  67.             'companies' => $companies,
  68.             'projectType' => $projectType,
  69.             'projectStatus' => $projectStatus,
  70.             'is_super_admin' => $isSuperAdmin
  71.         ));
  72.     }
  73.     /**
  74.      * @Route("/admin/project/project/project_filter", name="project_filter", methods={"POST"} )
  75.      */
  76.     public function projectFilterAction(): Response
  77.     {
  78. //        $status=$this->em->getRepository(ProjectStatus::class)->findAll();
  79. //        $data['selected_status']=array();
  80. //        foreach ($status as $item)
  81. //        {
  82. //            $data['status'][$item->getId()]=$item->getName();
  83. //            if($item->getId()!=ProjectStatus::APV_STATUS_INCHIS)
  84. //            {
  85. //                array_push($data['selected_status'],$item->getId());
  86. //            }
  87. //        }
  88. //        $treatment=$this->em->getRepository(ApvTreatment::class)->findAll();
  89. //        foreach ($treatment as $item2)
  90. //        {
  91. //            $data['treatment'][$item2->getId()]=$item2->getName();
  92. //        }
  93. //        $up=$this->em->getRepository(UnitateProductie::class)->findAll();
  94. //        foreach ($up as $item3)
  95. //        {
  96. //            $data['up'][$item3->getId()]=$item3->getCod().' - '.$item3->getName();
  97. //        }
  98. //        $contract=$this->em->getRepository(ProjectType::class)->findAll();
  99. //        foreach ($contract as $item4)
  100. //        {
  101. //            $data['contract'][$item4->getId()]=$item4->getName();
  102. //        }
  103. //
  104.         $data="";
  105.         return new JsonResponse($data200);
  106.     }
  107.     /**
  108.      * @Route("/admin/app/project/project_filtered", name="project_filtered", methods={"POST"} )
  109.      */
  110.     public function projectFilteredAction(Request $request): Response
  111.     {
  112.         $adata['adata'] = $this->projectManager->getFilteredData($request);
  113.         return $this->json($adata);
  114.     }
  115.     /**
  116.      * @Route("/admin/app/project/project_list", name="project_list", methods={"POST"} )
  117.      */
  118.     public function projectListAction(TranslatorInterface $translator)
  119.     {
  120.         $adata['data'] = $this->projectDatatableProvider->datatableRows();
  121.         return $this->json($adata);
  122.     }
  123.     /**
  124.      * @Route("/admin/project/project_new", name="project_new", methods={"POST"} )
  125.      */
  126.     public function projectNewAction(): Response
  127.     {
  128.         $companies $this->companyRepository->findBy(array("deleted"=>false,"companyType"=>CompanyType::COMPANY_TYPE_K));
  129.         $projectTypes $this->em->getRepository(ProjectType::class)->findBy(array ('deleted'=>0));
  130.         $currencies $this->em->getRepository(Currency::class)->findAll();
  131.         $users $this->userRepository->findBy(array ('enabled'=>1));
  132.         $projectStatuses $this->projectStatusRepository->findAll();
  133.         return $this->renderWithExtraParams('/project/project_add_edit.html.twig', array (
  134.             'companies' => $companies,
  135.             'projectTypes' => $projectTypes,
  136.             'currencies' => $currencies,
  137.             'users' => $users,
  138.             'projectStatuses' => $projectStatuses
  139.         ));
  140.     }
  141.     /**
  142.      * @Route("/admin/project/project_save", name="project_save", methods={"POST"} )
  143.      */
  144.     public function projectSaveAction(Request $request): Response
  145.     {
  146.         $user $this->tokenStorage->getToken()->getUser();
  147.         $isSuperAdmin in_array("ROLE_SUPER_ADMIN"$user->getRoles());
  148.         $projectId = (int)$request->get('projectId');
  149.         // Meglévő projekt módosítása csak Super Admin számára engedélyezett
  150.         if ($projectId && !$isSuperAdmin) {
  151.             return new JsonResponse(['error' => 'Csak Super Admin módosíthat projektet.'], 403);
  152.         }
  153.         $project $this->projectManager->saveUpdateProject($request);
  154.         //viewnak szukseges adatok. A datatable megjeleniteshez szukseges adatokat adja
  155.         $data[] = $this->projectDatatableProvider->datatableRow($project);
  156.         return new JsonResponse(array ('msg' => true'datatableRow' => $data[0]), 200);
  157.     }
  158.     /**
  159.      * @Route("/admin/project/project_edit", name="project_edit", methods={"GET","POST"} )
  160.      */
  161.     public function projectEditAction(Request $request): ?Response
  162.     {
  163.         $user $this->tokenStorage->getToken()->getUser();
  164.         $isSuperAdmin in_array("ROLE_SUPER_ADMIN"$user->getRoles());
  165.         if (!$isSuperAdmin) {
  166.             return new JsonResponse(['error' => 'Csak Super Admin szerkeszthet projektet.'], 403);
  167.         }
  168.         $projectId = (int)$request->request->get("id");
  169.         $project $this->projectRepository->find($projectId);
  170.         if (!$project) {
  171.             return null;
  172.         }
  173.         $companies $this->companyRepository->findBy(array("deleted"=>false,"companyType"=>CompanyType::COMPANY_TYPE_K));
  174.         $projectTypes $this->em->getRepository(ProjectType::class)->findBy(array ('deleted'=>0));
  175.         $currencies $this->em->getRepository(Currency::class)->findAll();
  176.         $users $this->userRepository->findBy(array ('enabled'=>1));
  177.         $projectStatuses $this->projectStatusRepository->findAll();
  178.         return $this->renderWithExtraParams('/project/project_add_edit.html.twig', array (
  179.             'project' => $project,
  180.             'companies' => $companies,
  181.             'projectTypes' => $projectTypes,
  182.              'currencies' => $currencies,
  183.             'users' => $users,
  184.             'projectStatuses' => $projectStatuses
  185.         ));
  186.     }
  187.     /**
  188.      * @Route("/admin/project/project_delete", name="project_delete", methods={"POST"} )
  189.      */
  190.     public function projectDeleteAction(Request $request): Response
  191.     {
  192.         $user $this->tokenStorage->getToken()->getUser();
  193.         $isSuperAdmin in_array("ROLE_SUPER_ADMIN"$user->getRoles());
  194.         if (!$isSuperAdmin) {
  195.             return new JsonResponse(['msg' => false'error' => 'Csak Super Admin törölhet projektet.'], 403);
  196.         }
  197.         $projectId = (int)$request->get('id');
  198.         $project $this->projectRepository->find($projectId);
  199.         if (!$project) {
  200.             return new JsonResponse(['msg' => false'error' => 'A projekt nem található.'], 404);
  201.         }
  202.         // Ha van szerződés csatolva, nem lehet törölni
  203.         if ($project->getContracts()->count() > 0) {
  204.             return new JsonResponse(['msg' => false'error' => 'A projekt nem törölhető, mert szerződés van hozzá csatolva.'], 400);
  205.         }
  206.         try {
  207.             $this->em->remove($project);
  208.             $this->em->flush();
  209.             return new JsonResponse(['msg' => true], 200);
  210.         } catch (\Exception $e) {
  211.             return new JsonResponse(['msg' => false'error' => 'Hiba történt a törlés során.'], 500);
  212.         }
  213.     }
  214.     /**
  215.      * @Route("/admin/project/project_get_selected_company_data", name="project_get_selected_company_data", methods={"POST"} )
  216.      */
  217.     public function projectGetSelectedCompanyDataAction(Request $request): Response
  218.     {
  219.         $company $this->companyRepository->find((int)$request->get('companyId'));
  220.         return new JsonResponse(array("contactPerson"=>$company->getContactPerson(),"tel"=>$company->getTel(), "email"=>$company->getEmail()), 200);
  221.     }
  222. }