src/Controller/VehicleRevokeRequestsController.php line 41

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Activity;
  4. use App\Entity\Cities;
  5. use App\Entity\VehicleRevokeRequestDestination;
  6. use App\Entity\VehicleRevokeRequestSource;
  7. use App\Entity\VehicleRevokeRequests;
  8. use App\Entity\Vehicles;
  9. use App\Form\VehicleRevokeRequestsCancelType;
  10. use App\Form\VehicleRevokeRequestsType;
  11. use App\Service\FileHandler;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\Security\Http\Attribute\IsGranted;
  14. use Symfony\Component\ExpressionLanguage\Expression;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  17. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  18. use Symfony\Component\HttpFoundation\JsonResponse;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. use Doctrine\Persistence\ManagerRegistry;
  23. /**
  24.  * Class VehicleRevokeRequestsController
  25.  *
  26.  * @package App\Controller
  27.  */
  28. #[Route('revokeRequests')]
  29. #[IsGranted(new Expression("is_granted('ROLE_ADMIN') or is_granted('ROLE_BENEFICIARY_REP')"))]
  30. class VehicleRevokeRequestsController extends AbstractController
  31. {
  32.     /**
  33.      * Lists all vehicleRevokeRequest entities.
  34.      *
  35.      * @return \Symfony\Component\HttpFoundation\Response
  36.      */
  37.     #[Route('/{vehicleId}/'name'revokerequests_index'methods:["GET"])]
  38.     public function indexAction($vehicleIdRequest $requestAuthorizationCheckerInterface $authManagerRegistry $doctrine)
  39.     {
  40.         $locale $request->getLocale();
  41.         $em               $doctrine->getManager();
  42.         $vehicle          $em->getRepository(Vehicles::class)->find($vehicleId);
  43.         // select all revoke requests for a specific vehicle.
  44.         $repository $em->getRepository(VehicleRevokeRequests::class);
  45.         $query      $repository->createQueryBuilder('R');
  46.         $query->select('R');
  47.         $query->where('R.vehicle = :vehicleId')
  48.                 ->setParameter('vehicleId'$vehicleId)
  49.                 ->orderBy('R.createdAt''DESC');
  50.         $vehicleRevokeRequests $query->getQuery()->getResult();
  51.         $storageRepo  $em->getRepository(Activity::class);
  52.         $storageQuery $storageRepo->createQueryBuilder('A');
  53.         $storageQuery->select('A');
  54.         $storageQuery->where('A.vehicle = :vehicleId')
  55.                 ->setParameter('vehicleId'$vehicleId)
  56.                 ->orderBy('A.createdAt''DESC');
  57.         $vehicleDirectStoreActivities $storageQuery->getQuery()->getResult();
  58.         if ($auth->isGranted('ROLE_ADMIN')) {
  59.             $template 'vehiclerevokerequests/index.html.twig';
  60.         } elseif ($auth->isGranted('ROLE_BENEFICIARY_REP')) {
  61.             $template 'vehiclerevokerequests/beneficiary_index.html.twig';
  62.         } else {
  63.             $template 'vehiclerevokerequests/index.html.twig';
  64.         }
  65.         return $this->render($template, ['vehicleRevokeRequests' => $vehicleRevokeRequests'vehicleDirectStoreActivities' => $vehicleDirectStoreActivities'locale' => $locale'vehicle' => $vehicle]);
  66.     }
  67.     /**
  68.      * Creates a new vehicleRevokeRequest entity.
  69.      *
  70.      * @return \Symfony\Component\HttpFoundation\Response
  71.      */
  72.     #[Route('/{vehicleId}/new/'name'revokerequests_new'methods:["GET"])]
  73.     public function newAction(Request $request)
  74.     {
  75.         $locale               $request->getLocale();
  76.         $vehicleRevokeRequest = new VehicleRevokeRequests();
  77.         $form $this->createForm(VehicleRevokeRequestsType::class, $vehicleRevokeRequest, ['locale' => $locale]);
  78.         $form->handleRequest($request);
  79.         return $this->render('vehiclerevokerequests/new.html.twig', [
  80.             'vehicleRevokeRequest' => $vehicleRevokeRequest,
  81.             'form'                 => $form->createView()
  82.         ]);
  83.     }
  84.     /**
  85.      * Creates a new vehicleRevokeRequest entity.
  86.      *
  87.      * @return \Symfony\Component\HttpFoundation\RedirectResponse
  88.      */
  89.     #[Route('/{vehicleId}/new/'name'revokerequests_save'methods:["POST"])]
  90.     public function addNewAction(Request $request$vehicleIdTranslatorInterface $translatorManagerRegistry $doctrine)
  91.     {
  92.         $locale               $request->getLocale();
  93.         $vehicleRevokeRequest = new VehicleRevokeRequests();
  94.         $em      $doctrine->getManager();
  95.         $vehicle $em->getRepository(Vehicles::class)->find($vehicleId);
  96.         $this->getUser();
  97.         $postData    $request->request->all();
  98.         $requestType $postData["appbundle_vehiclerevokerequests"]["requestType"];
  99.         if ($requestType == 'Transport_And_Store' || $requestType == 'Transport_To_Distination') {
  100.             $vehicleRevokeRequestSource = new VehicleRevokeRequestSource();
  101.             $vehicleRevokeRequest->setVehicleRevokeRequestSource($vehicleRevokeRequestSource);
  102.             $vehicleRevokeRequestSource->setRequest($vehicleRevokeRequest);
  103.         }
  104.         if ($requestType == 'Transport_To_Distination') {
  105.             $vehicleRevokeRequestDestination = new VehicleRevokeRequestDestination();
  106.             $vehicleRevokeRequest->setVehicleRevokeRequestDestination($vehicleRevokeRequestDestination);
  107.             $vehicleRevokeRequestDestination->setRequest($vehicleRevokeRequest);
  108.         }
  109.         $form $this->createForm(VehicleRevokeRequestsType::class, $vehicleRevokeRequest, ['locale' => $locale]);
  110.         $form->handleRequest($request);
  111.         
  112.         if ($form->isValid()) {
  113.             $session $request->getSession();
  114.             $vehicleRevokeRequest->setVehicle($vehicle);
  115.             if ($requestType == 'Transport_And_Store') {
  116.                 $vehicleRevokeRequest->setVehicleRevokeRequestDestination(null);
  117.             } elseif ($requestType == 'Store_Only') {
  118.                 $vehicleRevokeRequest->setVehicleRevokeRequestSource(null);
  119.                 $vehicleRevokeRequest->setVehicleRevokeRequestDestination(null);
  120.             }
  121.             $fileHandler = new FileHandler();
  122.             $authImagePath   $vehicleRevokeRequest->getAuthImagePath();
  123.             $estimateImagePath   $vehicleRevokeRequest->getEstimateImagePath();
  124.             if ($authImagePath) {
  125.                 // Generate a unique name for the file before saving it
  126.                 $imagePathName md5(uniqid()). '.' $authImagePath->guessClientExtension();
  127.                 $vehicleRevokeRequest->setAuthImagePath($imagePathName);
  128.                 $imageRealPath $this->getParameter('web_dir_path') . $this->getParameter('vehicle_uploaded_files') . '/' $vehicleId'/';
  129.                 $fileHandler->save($authImagePath$imageRealPath$imagePathName);
  130.             }
  131.             if ($estimateImagePath) {
  132.                 // Generate a unique name for the file before saving it
  133.                 $imagePathName1 md5(uniqid()). '.' $estimateImagePath->guessClientExtension();
  134.                 $vehicleRevokeRequest->setEstimateImagePath($imagePathName1);
  135.                 $imageRealPath1 $this->getParameter('web_dir_path') . $this->getParameter('vehicle_uploaded_files') . '/' $vehicleId'/';
  136.                 $fileHandler->save($estimateImagePath$imageRealPath1$imagePathName1);
  137.             }
  138.             $em->persist($vehicleRevokeRequest);
  139.             if ($requestType == 'Transport_And_Store'  || $requestType == 'Transport_To_Distination') {
  140.                 $em->persist($vehicleRevokeRequestSource);
  141.             }
  142.             if ($requestType == 'Transport_To_Distination') {
  143.                 $em->persist($vehicleRevokeRequestDestination);
  144.             }
  145.             $em->flush();
  146.             $session->getFlashBag()->add('success',
  147.                 $translator->trans('add revokerequest successfully', [], 'vehicles')
  148.             );
  149.             return $this->redirectToRoute('revokerequests_index', ['vehicleId' => $vehicleId]);
  150.         }else{
  151.             return $this->render('vehiclerevokerequests/new.html.twig', [
  152.                 'vehicleRevokeRequest' => $vehicleRevokeRequest,
  153.                 'form'                 => $form->createView()
  154.             ]);
  155.         }
  156.     }
  157.     /**
  158.      * Displays a form to edit an existing vehicleRevokeRequest entity.
  159.      *
  160.      * @return \Symfony\Component\HttpFoundation\Response
  161.      */
  162.     #[Route('/{vehicleId}/{requestId}/edit'name'revokerequests_edit'methods:["GET"])]
  163.     public function editAction(Request $requestVehicleRevokeRequests $vehicleRevokeRequest$vehicleId$requestIdManagerRegistry $doctrine)
  164.     {
  165.         $locale     $request->getLocale();
  166.         $authImage   =  null ;
  167.         $estimateImage   =  null ;
  168.         if ($vehicleRevokeRequest->getAuthImagePath()){
  169.             $authImage $this->getParameter('vehicle_uploaded_files') . '/' $vehicleId '/' $vehicleRevokeRequest->getAuthImagePath();
  170.         }
  171.         if ($vehicleRevokeRequest->getEstimateImagePath()){
  172.             $estimateImage $this->getParameter('vehicle_uploaded_files') . '/' $vehicleId '/' $vehicleRevokeRequest->getEstimateImagePath();
  173.         }
  174.         $em      $doctrine->getManager();
  175.         $vehicleRepository $em->getRepository(Vehicles::class);
  176.         $vehicle $vehicleRepository->find($vehicleId);
  177.         // var formEdit to make check on VehicleRevokeRequestsType if this var existing show revokeCancellationReason & revokeCancellationNotes fields.
  178.         $editForm $this->createForm(VehicleRevokeRequestsType::class, $vehicleRevokeRequest, ['locale' => $locale'formEdit' => 'formEdit','vehicle'=>$vehicle]);
  179.         $editForm->handleRequest($request);
  180.         return $this->render('vehiclerevokerequests/edit.html.twig', [
  181.             'vehicleRevokeRequest' => $vehicleRevokeRequest,
  182.             'edit_form'            => $editForm->createView(),
  183.             'authImage'            => $authImage,
  184.             'estimateImage'        => $estimateImage,
  185.             'locale'              => $locale
  186.         ]);
  187.     }
  188.     /**
  189.      * Displays a form to edit an existing vehicleRevokeRequest entity.
  190.      *
  191.      * @return \Symfony\Component\HttpFoundation\RedirectResponse
  192.      */
  193.     #[Route('/{vehicleId}/{requestId}/edit'name'revokerequests_update'methods:["POST"])]
  194.     public function updateAction(Request $requestVehicleRevokeRequests $vehicleRevokeRequest$vehicleIdTranslatorInterface $translatorManagerRegistry $doctrine)
  195.     {
  196.         $this->getUser();
  197.         $postData    $request->request->all();
  198.         $requestType $postData["appbundle_vehiclerevokerequests"]["requestType"];
  199.         $clearImage $postData["appbundle_vehiclerevokerequests"]['clearImage'];
  200.         $clearImage1 $postData["appbundle_vehiclerevokerequests"]['clearImage1'];
  201.         $authImagePathDB $vehicleRevokeRequest->getAuthImagePath();
  202.         $estimatePathDB $vehicleRevokeRequest->getEstimateImagePath();
  203.         $vehicleRevokeRequest->getRevokeCancellationReason();
  204.         if ($requestType == 'Transport_And_Store' || $requestType == 'Transport_To_Distination') {
  205.             $vehicleRevokeRequestSource $vehicleRevokeRequest->getVehicleRevokeRequestSource();
  206.             $vehicleRevokeRequest->setVehicleRevokeRequestSource($vehicleRevokeRequestSource);
  207.             $vehicleRevokeRequestSource->setRequest($vehicleRevokeRequest);
  208.         }
  209.         if ($requestType == 'Transport_To_Distination') {
  210.             $vehicleRevokeRequestDestination $vehicleRevokeRequest->getVehicleRevokeRequestDestination();
  211.             $vehicleRevokeRequest->setVehicleRevokeRequestDestination($vehicleRevokeRequestDestination);
  212.             $vehicleRevokeRequestDestination->setRequest($vehicleRevokeRequest);
  213.         }
  214.         $em      $doctrine->getManager();
  215.         $vehicleRepository $em->getRepository(Vehicles::class);
  216.         $vehicle $vehicleRepository->find($vehicleId);
  217.         // we pass formEdit to make the form recognize revokeCancellationReason & revokeCancellationNotes fields and take values.
  218.         $editForm $this->createForm(VehicleRevokeRequestsType::class, $vehicleRevokeRequest, ['formEdit' => 'formEdit','vehicle'=>$vehicle]);
  219.         $editForm->handleRequest($request);
  220.         if ($editForm->isValid()) {
  221.             $session $request->getSession();
  222.             $fileHandler = new FileHandler();
  223.             $authImagePath   $vehicleRevokeRequest->getAuthImagePath();
  224.             $estimateImage   $vehicleRevokeRequest->getEstimateImagePath();
  225.             //auth image
  226.             if ($authImagePath) {
  227.                 // Generate a unique name for the file before saving it
  228.                 $imagePathName md5(uniqid()).'.' $authImagePath->guessClientExtension();
  229.                 $vehicleRevokeRequest->setAuthImagePath($imagePathName);
  230.                 $imageRealPath $this->getParameter('web_dir_path') . $this->getParameter('vehicle_uploaded_files') . '/' $vehicleId'/';
  231.                 $fileHandler->save($authImagePath$imageRealPath$imagePathName);
  232.             } elseif ($clearImage == "1") {
  233.                 $vehicleRevokeRequest->setAuthImagePath(null);
  234.             } else{
  235.                 $vehicleRevokeRequest->setAuthImagePath($authImagePathDB);
  236.             }
  237.             //estimate image
  238.             if ($estimateImage) {
  239.                 // Generate a unique name for the file before saving it
  240.                 $imagePathName1 md5(uniqid()).'.' $estimateImage->guessClientExtension();
  241.                 $vehicleRevokeRequest->setEstimateImagePath($imagePathName1);
  242.                 $imageRealPath1 $this->getParameter('web_dir_path') . $this->getParameter('vehicle_uploaded_files') . '/' $vehicleId'/';
  243.                 $fileHandler->save($estimateImage$imageRealPath1$imagePathName1);
  244.             } elseif ($clearImage1 == "1") {
  245.                 $vehicleRevokeRequest->setEstimateImagePath(null);
  246.             } else{
  247.                 $vehicleRevokeRequest->setEstimateImagePath($estimatePathDB);
  248.             }
  249.             $vehicleRevokeRequest->setVehicle($vehicle);
  250.             $requestId $vehicleRevokeRequest->getRequestId();
  251.             if ($requestType == 'Transport_And_Store') {
  252.                 $vehicleRevokeRequest->setVehicleRevokeRequestDestination(null);
  253.             } elseif ($requestType == 'Store_Only') {
  254.                 $vehicleRevokeRequest->setVehicleRevokeRequestSource(null);
  255.                 $vehicleRevokeRequest->setVehicleRevokeRequestDestination(null);
  256.             }
  257.             $em->flush();
  258.             $session->getFlashBag()->add('success',
  259.                 $translator->trans('update revokerequest successfully', [], 'vehicles')
  260.             );
  261.             return $this->redirectToRoute('revokerequests_edit', ['vehicleId' => $vehicleId'requestId' => $requestId]);
  262.         } else {
  263.             return $this->render('vehiclerevokerequests/edit.html.twig', [
  264.                 'vehicleRevokeRequest' => $vehicleRevokeRequest,
  265.                 'edit_form'            => $editForm->createView(),
  266.                 'authImage'            => $this->getParameter('vehicle_uploaded_files') . '/' $vehicleId '/' $authImagePathDB,
  267.                 'estimateImage'        => $this->getParameter('vehicle_uploaded_files') . '/' $vehicleId '/' $estimatePathDB
  268.             ]);
  269.         }
  270.     }
  271.     /**
  272.      * Displays a form to edit an existing vehicleRevokeRequest entity.
  273.      *
  274.      * @return \Symfony\Component\HttpFoundation\Response
  275.      */
  276.     #[Route('/{vehicleId}/{requestId}/cancel'name'revokerequests_cancel'methods:["GET""POST"])]
  277.     public function cancelRevokeRequest(Request $requestVehicleRevokeRequests $vehicleRevokeRequest$vehicleId
  278.             $requestIdTranslatorInterface $translatorManagerRegistry $doctrine){
  279.         $locale     $request->getLocale();
  280.         $em      $doctrine->getManager();
  281.         $vehicleRepository $em->getRepository(Vehicles::class);
  282.         $vehicle $vehicleRepository->find($vehicleId);
  283.         $session $request->getSession();
  284.         $vehicleRevokeRequestsRepository $em->getRepository(VehicleRevokeRequests::class);
  285.         $lastVehicleRevokeRequest $vehicleRevokeRequestsRepository->findOneBy(['vehicle'=>$vehicle],['requestId' => 'DESC']);
  286.         if($lastVehicleRevokeRequest->getRequestId()>$requestId){
  287.             return $this->render('vehiclerevokerequests/revoke_request_cancel.html.twig', [
  288.                 'vehicleRevokeRequest' => $vehicleRevokeRequest,
  289.                 'locale'               => $locale,
  290.                 'oldRevoke'                  => true
  291.             ]);
  292.         }
  293.         // var formEdit to make check on VehicleRevokeRequestsType if this var existing show revokeCancellationReason & revokeCancellationNotes fields.
  294.         $editForm $this->createForm(VehicleRevokeRequestsCancelType::class, $vehicleRevokeRequest, ['locale' => $locale'formEdit' => 'formEdit','vehicle'=>$vehicle]);
  295.         $editForm->handleRequest($request);
  296.         if ($editForm->isSubmitted() && $editForm->isValid()) {
  297.             $vehicleRevokeRequest->setVehicle($vehicle);
  298.             $em->flush();
  299.             $session->getFlashBag()->add('success',
  300.                 $translator->trans('update revokerequest successfully', [], 'vehicles')
  301.             );
  302.             return $this->redirectToRoute('revokerequests_cancel', ['vehicleId' => $vehicleId'requestId' => $requestId]);
  303.         }
  304.         return $this->render('vehiclerevokerequests/revoke_request_cancel.html.twig', [
  305.             'vehicleRevokeRequest' => $vehicleRevokeRequest,
  306.             'edit_form'            => $editForm->createView(),
  307.             'locale'              => $locale
  308.         ]);
  309.     }
  310.     /**
  311.      *
  312.      * @return \Symfony\Component\HttpFoundation\Response
  313.      */
  314.     #[Route('/{vehicleId}/{requestId}/addNewActivity'name'add_new_activity_to_revoke')]
  315.     public function addNewActivity($vehicleId$requestIdTranslatorInterface $translator)
  316.     {
  317.         $revokeActivityValidation $translator->trans('you should select a service', [], 'validators');
  318.         $activityForm $this->createFormBuilder()
  319.             ->setMethod('GET')
  320.             ->setAction($this->generateUrl('vehiclertsactivities_new', ['vehicleId' => $vehicleId'requestId' => $requestId]))
  321.             ->add('revokeInventory'CheckboxType::class, [
  322.                 'required'           => false,
  323.                 'label'              => 'Revoke(Inventory)',
  324.                 'translation_domain' => 'vehicles'
  325.             ])
  326.             ->add('revokeActivity'ChoiceType::class, [
  327.                 'choices'            => Activity::ACTIVITY_TYPES,
  328.                 'placeholder'        => 'Please Select',
  329.                 'translation_domain' => 'vehicles',
  330.                 'attr'               => ['validate-msg' => $revokeActivityValidation]
  331.             ])
  332.             ->getForm();
  333.         return $this->render('vehiclerevokerequests/new_activity_form.html.twig', [
  334.             'activityForm' => $activityForm->createView()
  335.         ]);
  336.     }
  337.     /**
  338.      * Deletes a vehicleRevokeRequest entity.
  339.      *
  340.      * @return \Symfony\Component\HttpFoundation\RedirectResponse
  341.      */
  342.     #[Route('/{requestId}'name'revokerequests_delete'methods:["DELETE"])]
  343.     public function deleteAction(Request $requestVehicleRevokeRequests $vehicleRevokeRequestManagerRegistry $doctrine)
  344.     {
  345.         $form $this->createDeleteForm($vehicleRevokeRequest);
  346.         $form->handleRequest($request);
  347.         if ($form->isSubmitted() && $form->isValid()) {
  348.             $em $doctrine->getManager();
  349.             $em->remove($vehicleRevokeRequest);
  350.             $em->flush();
  351.         }
  352.         return $this->redirectToRoute('revokerequests_index');
  353.     }
  354.     /**
  355.      * Creates a form to delete a vehicleRevokeRequest entity.
  356.      *
  357.      * @param VehicleRevokeRequests $vehicleRevokeRequest The vehicleRevokeRequest entity
  358.      *
  359.      * @return \Symfony\Component\Form\Form The form
  360.      */
  361.     private function createDeleteForm(VehicleRevokeRequests $vehicleRevokeRequest)
  362.     {
  363.         return $this->createFormBuilder()
  364.             ->setAction($this->generateUrl('revokerequests_delete', ['requestId' => $vehicleRevokeRequest->getRequestid()]))
  365.             ->setMethod('DELETE')
  366.             ->getForm()
  367.         ;
  368.     }
  369.     /**
  370.      * Return json array cities under specific region.
  371.      *
  372.      * @return Response|JsonResponse
  373.      */
  374.     #[Route('/getRegionCities'name'get_cities_ajax')]
  375.     public function getRegionCities(Request $requestManagerRegistry $doctrine)
  376.     {
  377.         if ($request->isXMLHttpRequest()) {
  378.             $regionID $request->request->get('regionID');
  379.             $locale   $request->getLocale();
  380.             $repository $doctrine
  381.                 ->getRepository(Cities::class);
  382.             $query $repository->createQueryBuilder('c')
  383.                 ->select('c.cityId''c.name'.ucfirst($locale).' name')
  384.                 ->where('c.region = :regionID')
  385.                 ->setParameter('regionID'$regionID)
  386.                 ->getQuery();
  387.             $cities $query->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  388.             return new JsonResponse(['cities' => $cities]);
  389.         }
  390.         return new Response('This is not ajax!'400);
  391.     }
  392. }