src/Controller/VehicleRevokeRequestsController.php line 41
<?php
namespace App\Controller;
use App\Entity\Activity;
use App\Entity\Cities;
use App\Entity\VehicleRevokeRequestDestination;
use App\Entity\VehicleRevokeRequestSource;
use App\Entity\VehicleRevokeRequests;
use App\Entity\Vehicles;
use App\Form\VehicleRevokeRequestsCancelType;
use App\Form\VehicleRevokeRequestsType;
use App\Service\FileHandler;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Attribute\IsGranted;
use Symfony\Component\ExpressionLanguage\Expression;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Doctrine\Persistence\ManagerRegistry;
/**
* Class VehicleRevokeRequestsController
*
* @package App\Controller
*/
#[Route('revokeRequests')]
#[IsGranted(new Expression("is_granted('ROLE_ADMIN') or is_granted('ROLE_BENEFICIARY_REP')"))]
class VehicleRevokeRequestsController extends AbstractController
{
/**
* Lists all vehicleRevokeRequest entities.
*
* @return \Symfony\Component\HttpFoundation\Response
*/
#[Route('/{vehicleId}/', name: 'revokerequests_index', methods:["GET"])]
public function indexAction($vehicleId, Request $request, AuthorizationCheckerInterface $auth, ManagerRegistry $doctrine)
{
$locale = $request->getLocale();
$em = $doctrine->getManager();
$vehicle = $em->getRepository(Vehicles::class)->find($vehicleId);
// select all revoke requests for a specific vehicle.
$repository = $em->getRepository(VehicleRevokeRequests::class);
$query = $repository->createQueryBuilder('R');
$query->select('R');
$query->where('R.vehicle = :vehicleId')
->setParameter('vehicleId', $vehicleId)
->orderBy('R.createdAt', 'DESC');
$vehicleRevokeRequests = $query->getQuery()->getResult();
$storageRepo = $em->getRepository(Activity::class);
$storageQuery = $storageRepo->createQueryBuilder('A');
$storageQuery->select('A');
$storageQuery->where('A.vehicle = :vehicleId')
->setParameter('vehicleId', $vehicleId)
->orderBy('A.createdAt', 'DESC');
$vehicleDirectStoreActivities = $storageQuery->getQuery()->getResult();
if ($auth->isGranted('ROLE_ADMIN')) {
$template = 'vehiclerevokerequests/index.html.twig';
} elseif ($auth->isGranted('ROLE_BENEFICIARY_REP')) {
$template = 'vehiclerevokerequests/beneficiary_index.html.twig';
} else {
$template = 'vehiclerevokerequests/index.html.twig';
}
return $this->render($template, ['vehicleRevokeRequests' => $vehicleRevokeRequests, 'vehicleDirectStoreActivities' => $vehicleDirectStoreActivities, 'locale' => $locale, 'vehicle' => $vehicle]);
}
/**
* Creates a new vehicleRevokeRequest entity.
*
* @return \Symfony\Component\HttpFoundation\Response
*/
#[Route('/{vehicleId}/new/', name: 'revokerequests_new', methods:["GET"])]
public function newAction(Request $request)
{
$locale = $request->getLocale();
$vehicleRevokeRequest = new VehicleRevokeRequests();
$form = $this->createForm(VehicleRevokeRequestsType::class, $vehicleRevokeRequest, ['locale' => $locale]);
$form->handleRequest($request);
return $this->render('vehiclerevokerequests/new.html.twig', [
'vehicleRevokeRequest' => $vehicleRevokeRequest,
'form' => $form->createView()
]);
}
/**
* Creates a new vehicleRevokeRequest entity.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
#[Route('/{vehicleId}/new/', name: 'revokerequests_save', methods:["POST"])]
public function addNewAction(Request $request, $vehicleId, TranslatorInterface $translator, ManagerRegistry $doctrine)
{
$locale = $request->getLocale();
$vehicleRevokeRequest = new VehicleRevokeRequests();
$em = $doctrine->getManager();
$vehicle = $em->getRepository(Vehicles::class)->find($vehicleId);
$this->getUser();
$postData = $request->request->all();
$requestType = $postData["appbundle_vehiclerevokerequests"]["requestType"];
if ($requestType == 'Transport_And_Store' || $requestType == 'Transport_To_Distination') {
$vehicleRevokeRequestSource = new VehicleRevokeRequestSource();
$vehicleRevokeRequest->setVehicleRevokeRequestSource($vehicleRevokeRequestSource);
$vehicleRevokeRequestSource->setRequest($vehicleRevokeRequest);
}
if ($requestType == 'Transport_To_Distination') {
$vehicleRevokeRequestDestination = new VehicleRevokeRequestDestination();
$vehicleRevokeRequest->setVehicleRevokeRequestDestination($vehicleRevokeRequestDestination);
$vehicleRevokeRequestDestination->setRequest($vehicleRevokeRequest);
}
$form = $this->createForm(VehicleRevokeRequestsType::class, $vehicleRevokeRequest, ['locale' => $locale]);
$form->handleRequest($request);
if ($form->isValid()) {
$session = $request->getSession();
$vehicleRevokeRequest->setVehicle($vehicle);
if ($requestType == 'Transport_And_Store') {
$vehicleRevokeRequest->setVehicleRevokeRequestDestination(null);
} elseif ($requestType == 'Store_Only') {
$vehicleRevokeRequest->setVehicleRevokeRequestSource(null);
$vehicleRevokeRequest->setVehicleRevokeRequestDestination(null);
}
$fileHandler = new FileHandler();
$authImagePath = $vehicleRevokeRequest->getAuthImagePath();
$estimateImagePath = $vehicleRevokeRequest->getEstimateImagePath();
if ($authImagePath) {
// Generate a unique name for the file before saving it
$imagePathName = md5(uniqid()). '.' . $authImagePath->guessClientExtension();
$vehicleRevokeRequest->setAuthImagePath($imagePathName);
$imageRealPath = $this->getParameter('web_dir_path') . $this->getParameter('vehicle_uploaded_files') . '/' . $vehicleId. '/';
$fileHandler->save($authImagePath, $imageRealPath, $imagePathName);
}
if ($estimateImagePath) {
// Generate a unique name for the file before saving it
$imagePathName1 = md5(uniqid()). '.' . $estimateImagePath->guessClientExtension();
$vehicleRevokeRequest->setEstimateImagePath($imagePathName1);
$imageRealPath1 = $this->getParameter('web_dir_path') . $this->getParameter('vehicle_uploaded_files') . '/' . $vehicleId. '/';
$fileHandler->save($estimateImagePath, $imageRealPath1, $imagePathName1);
}
$em->persist($vehicleRevokeRequest);
if ($requestType == 'Transport_And_Store' || $requestType == 'Transport_To_Distination') {
$em->persist($vehicleRevokeRequestSource);
}
if ($requestType == 'Transport_To_Distination') {
$em->persist($vehicleRevokeRequestDestination);
}
$em->flush();
$session->getFlashBag()->add('success',
$translator->trans('add revokerequest successfully', [], 'vehicles')
);
return $this->redirectToRoute('revokerequests_index', ['vehicleId' => $vehicleId]);
}else{
return $this->render('vehiclerevokerequests/new.html.twig', [
'vehicleRevokeRequest' => $vehicleRevokeRequest,
'form' => $form->createView()
]);
}
}
/**
* Displays a form to edit an existing vehicleRevokeRequest entity.
*
* @return \Symfony\Component\HttpFoundation\Response
*/
#[Route('/{vehicleId}/{requestId}/edit', name: 'revokerequests_edit', methods:["GET"])]
public function editAction(Request $request, VehicleRevokeRequests $vehicleRevokeRequest, $vehicleId, $requestId, ManagerRegistry $doctrine)
{
$locale = $request->getLocale();
$authImage = null ;
$estimateImage = null ;
if ($vehicleRevokeRequest->getAuthImagePath()){
$authImage = $this->getParameter('vehicle_uploaded_files') . '/' . $vehicleId . '/' . $vehicleRevokeRequest->getAuthImagePath();
}
if ($vehicleRevokeRequest->getEstimateImagePath()){
$estimateImage = $this->getParameter('vehicle_uploaded_files') . '/' . $vehicleId . '/' . $vehicleRevokeRequest->getEstimateImagePath();
}
$em = $doctrine->getManager();
$vehicleRepository = $em->getRepository(Vehicles::class);
$vehicle = $vehicleRepository->find($vehicleId);
// var formEdit to make check on VehicleRevokeRequestsType if this var existing show revokeCancellationReason & revokeCancellationNotes fields.
$editForm = $this->createForm(VehicleRevokeRequestsType::class, $vehicleRevokeRequest, ['locale' => $locale, 'formEdit' => 'formEdit','vehicle'=>$vehicle]);
$editForm->handleRequest($request);
return $this->render('vehiclerevokerequests/edit.html.twig', [
'vehicleRevokeRequest' => $vehicleRevokeRequest,
'edit_form' => $editForm->createView(),
'authImage' => $authImage,
'estimateImage' => $estimateImage,
'locale' => $locale
]);
}
/**
* Displays a form to edit an existing vehicleRevokeRequest entity.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
#[Route('/{vehicleId}/{requestId}/edit', name: 'revokerequests_update', methods:["POST"])]
public function updateAction(Request $request, VehicleRevokeRequests $vehicleRevokeRequest, $vehicleId, TranslatorInterface $translator, ManagerRegistry $doctrine)
{
$this->getUser();
$postData = $request->request->all();
$requestType = $postData["appbundle_vehiclerevokerequests"]["requestType"];
$clearImage = $postData["appbundle_vehiclerevokerequests"]['clearImage'];
$clearImage1 = $postData["appbundle_vehiclerevokerequests"]['clearImage1'];
$authImagePathDB = $vehicleRevokeRequest->getAuthImagePath();
$estimatePathDB = $vehicleRevokeRequest->getEstimateImagePath();
$vehicleRevokeRequest->getRevokeCancellationReason();
if ($requestType == 'Transport_And_Store' || $requestType == 'Transport_To_Distination') {
$vehicleRevokeRequestSource = $vehicleRevokeRequest->getVehicleRevokeRequestSource();
$vehicleRevokeRequest->setVehicleRevokeRequestSource($vehicleRevokeRequestSource);
$vehicleRevokeRequestSource->setRequest($vehicleRevokeRequest);
}
if ($requestType == 'Transport_To_Distination') {
$vehicleRevokeRequestDestination = $vehicleRevokeRequest->getVehicleRevokeRequestDestination();
$vehicleRevokeRequest->setVehicleRevokeRequestDestination($vehicleRevokeRequestDestination);
$vehicleRevokeRequestDestination->setRequest($vehicleRevokeRequest);
}
$em = $doctrine->getManager();
$vehicleRepository = $em->getRepository(Vehicles::class);
$vehicle = $vehicleRepository->find($vehicleId);
// we pass formEdit to make the form recognize revokeCancellationReason & revokeCancellationNotes fields and take values.
$editForm = $this->createForm(VehicleRevokeRequestsType::class, $vehicleRevokeRequest, ['formEdit' => 'formEdit','vehicle'=>$vehicle]);
$editForm->handleRequest($request);
if ($editForm->isValid()) {
$session = $request->getSession();
$fileHandler = new FileHandler();
$authImagePath = $vehicleRevokeRequest->getAuthImagePath();
$estimateImage = $vehicleRevokeRequest->getEstimateImagePath();
//auth image
if ($authImagePath) {
// Generate a unique name for the file before saving it
$imagePathName = md5(uniqid()).'.' . $authImagePath->guessClientExtension();
$vehicleRevokeRequest->setAuthImagePath($imagePathName);
$imageRealPath = $this->getParameter('web_dir_path') . $this->getParameter('vehicle_uploaded_files') . '/' . $vehicleId. '/';
$fileHandler->save($authImagePath, $imageRealPath, $imagePathName);
} elseif ($clearImage == "1") {
$vehicleRevokeRequest->setAuthImagePath(null);
} else{
$vehicleRevokeRequest->setAuthImagePath($authImagePathDB);
}
//estimate image
if ($estimateImage) {
// Generate a unique name for the file before saving it
$imagePathName1 = md5(uniqid()).'.' . $estimateImage->guessClientExtension();
$vehicleRevokeRequest->setEstimateImagePath($imagePathName1);
$imageRealPath1 = $this->getParameter('web_dir_path') . $this->getParameter('vehicle_uploaded_files') . '/' . $vehicleId. '/';
$fileHandler->save($estimateImage, $imageRealPath1, $imagePathName1);
} elseif ($clearImage1 == "1") {
$vehicleRevokeRequest->setEstimateImagePath(null);
} else{
$vehicleRevokeRequest->setEstimateImagePath($estimatePathDB);
}
$vehicleRevokeRequest->setVehicle($vehicle);
$requestId = $vehicleRevokeRequest->getRequestId();
if ($requestType == 'Transport_And_Store') {
$vehicleRevokeRequest->setVehicleRevokeRequestDestination(null);
} elseif ($requestType == 'Store_Only') {
$vehicleRevokeRequest->setVehicleRevokeRequestSource(null);
$vehicleRevokeRequest->setVehicleRevokeRequestDestination(null);
}
$em->flush();
$session->getFlashBag()->add('success',
$translator->trans('update revokerequest successfully', [], 'vehicles')
);
return $this->redirectToRoute('revokerequests_edit', ['vehicleId' => $vehicleId, 'requestId' => $requestId]);
} else {
return $this->render('vehiclerevokerequests/edit.html.twig', [
'vehicleRevokeRequest' => $vehicleRevokeRequest,
'edit_form' => $editForm->createView(),
'authImage' => $this->getParameter('vehicle_uploaded_files') . '/' . $vehicleId . '/' . $authImagePathDB,
'estimateImage' => $this->getParameter('vehicle_uploaded_files') . '/' . $vehicleId . '/' . $estimatePathDB
]);
}
}
/**
* Displays a form to edit an existing vehicleRevokeRequest entity.
*
* @return \Symfony\Component\HttpFoundation\Response
*/
#[Route('/{vehicleId}/{requestId}/cancel', name: 'revokerequests_cancel', methods:["GET", "POST"])]
public function cancelRevokeRequest(Request $request, VehicleRevokeRequests $vehicleRevokeRequest, $vehicleId,
$requestId, TranslatorInterface $translator, ManagerRegistry $doctrine){
$locale = $request->getLocale();
$em = $doctrine->getManager();
$vehicleRepository = $em->getRepository(Vehicles::class);
$vehicle = $vehicleRepository->find($vehicleId);
$session = $request->getSession();
$vehicleRevokeRequestsRepository = $em->getRepository(VehicleRevokeRequests::class);
$lastVehicleRevokeRequest = $vehicleRevokeRequestsRepository->findOneBy(['vehicle'=>$vehicle],['requestId' => 'DESC']);
if($lastVehicleRevokeRequest->getRequestId()>$requestId){
return $this->render('vehiclerevokerequests/revoke_request_cancel.html.twig', [
'vehicleRevokeRequest' => $vehicleRevokeRequest,
'locale' => $locale,
'oldRevoke' => true
]);
}
// var formEdit to make check on VehicleRevokeRequestsType if this var existing show revokeCancellationReason & revokeCancellationNotes fields.
$editForm = $this->createForm(VehicleRevokeRequestsCancelType::class, $vehicleRevokeRequest, ['locale' => $locale, 'formEdit' => 'formEdit','vehicle'=>$vehicle]);
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
$vehicleRevokeRequest->setVehicle($vehicle);
$em->flush();
$session->getFlashBag()->add('success',
$translator->trans('update revokerequest successfully', [], 'vehicles')
);
return $this->redirectToRoute('revokerequests_cancel', ['vehicleId' => $vehicleId, 'requestId' => $requestId]);
}
return $this->render('vehiclerevokerequests/revoke_request_cancel.html.twig', [
'vehicleRevokeRequest' => $vehicleRevokeRequest,
'edit_form' => $editForm->createView(),
'locale' => $locale
]);
}
/**
*
* @return \Symfony\Component\HttpFoundation\Response
*/
#[Route('/{vehicleId}/{requestId}/addNewActivity', name: 'add_new_activity_to_revoke')]
public function addNewActivity($vehicleId, $requestId, TranslatorInterface $translator)
{
$revokeActivityValidation = $translator->trans('you should select a service', [], 'validators');
$activityForm = $this->createFormBuilder()
->setMethod('GET')
->setAction($this->generateUrl('vehiclertsactivities_new', ['vehicleId' => $vehicleId, 'requestId' => $requestId]))
->add('revokeInventory', CheckboxType::class, [
'required' => false,
'label' => 'Revoke(Inventory)',
'translation_domain' => 'vehicles'
])
->add('revokeActivity', ChoiceType::class, [
'choices' => Activity::ACTIVITY_TYPES,
'placeholder' => 'Please Select',
'translation_domain' => 'vehicles',
'attr' => ['validate-msg' => $revokeActivityValidation]
])
->getForm();
return $this->render('vehiclerevokerequests/new_activity_form.html.twig', [
'activityForm' => $activityForm->createView()
]);
}
/**
* Deletes a vehicleRevokeRequest entity.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
#[Route('/{requestId}', name: 'revokerequests_delete', methods:["DELETE"])]
public function deleteAction(Request $request, VehicleRevokeRequests $vehicleRevokeRequest, ManagerRegistry $doctrine)
{
$form = $this->createDeleteForm($vehicleRevokeRequest);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $doctrine->getManager();
$em->remove($vehicleRevokeRequest);
$em->flush();
}
return $this->redirectToRoute('revokerequests_index');
}
/**
* Creates a form to delete a vehicleRevokeRequest entity.
*
* @param VehicleRevokeRequests $vehicleRevokeRequest The vehicleRevokeRequest entity
*
* @return \Symfony\Component\Form\Form The form
*/
private function createDeleteForm(VehicleRevokeRequests $vehicleRevokeRequest)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('revokerequests_delete', ['requestId' => $vehicleRevokeRequest->getRequestid()]))
->setMethod('DELETE')
->getForm()
;
}
/**
* Return json array cities under specific region.
*
* @return Response|JsonResponse
*/
#[Route('/getRegionCities', name: 'get_cities_ajax')]
public function getRegionCities(Request $request, ManagerRegistry $doctrine)
{
if ($request->isXMLHttpRequest()) {
$regionID = $request->request->get('regionID');
$locale = $request->getLocale();
$repository = $doctrine
->getRepository(Cities::class);
$query = $repository->createQueryBuilder('c')
->select('c.cityId', 'c.name'.ucfirst($locale).' name')
->where('c.region = :regionID')
->setParameter('regionID', $regionID)
->getQuery();
$cities = $query->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
return new JsonResponse(['cities' => $cities]);
}
return new Response('This is not ajax!', 400);
}
}