<?php
namespace App\Controller;
use App\Entity\Operator;
use App\Entity\ServiceRequest;
use App\Form\ServiceRequestType;
use App\Repository\ServiceRequestRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Profiler\Profiler;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/service/request")
*/
class ServiceRequestController extends AbstractController
{
/**
* @Route("/", name="service_request_index", methods={"GET"})
*/
public function index(ServiceRequestRepository $serviceRequestRepository): Response
{
return $this->render(
'service_request/index.html.twig',
[
'service_requests' => $serviceRequestRepository->findAll(),
]
);
}
/**
* @Route("/new", name="service_request_new", methods={"GET","POST"})
*
* @param Request $request
* @param EntityManagerInterface $em
*
* @return Response
*/
public function new(Request $request, EntityManagerInterface $em): Response
{
$serviceRequest = new ServiceRequest();
$serviceRequest
->setOperator($em->find(Operator::class, 1))
->setRequestNumber($em->getRepository(ServiceRequest::class)->generateNewRequestNumber())
->setIsNewRequest(true);
$form = $this->createForm(ServiceRequestType::class, $serviceRequest);
$form->handleRequest($request);
if (!$serviceRequest->isLocked() && $form->isSubmitted() && $form->isValid()) {
$em->persist($serviceRequest);
$em->flush();
return $this->redirectToRoute('service_request_index');
}
return $this->render(
'service_request/new.html.twig',
[
'service_request' => $serviceRequest,
'form' => $form->createView(),
]
);
}
/**
* @Route(
* "/{id}.{format}",
* name="service_request_show",
* methods={"GET"},
* requirements={"format": "^(?:print)?$"}, defaults={"format": ""}
* )
*/
public function show(ServiceRequest $serviceRequest, Request $request, ?Profiler $profiler, string $format): Response
{
if ($format === 'print' && $profiler && !$request->query->getBoolean('enable-profiler')) {
$profiler->disable();
}
return $this->render(
$format === 'print' ? 'service_request/show_print.html.twig' : 'service_request/show.html.twig',
[
'service_request' => $serviceRequest,
]
);
}
/**
* @Route("/{id}/edit", name="service_request_edit", methods={"GET","POST"})
*/
public function edit(Request $request, ServiceRequest $serviceRequest): Response
{
$form = $this->createForm(ServiceRequestType::class, $serviceRequest);
$form->handleRequest($request);
if (!$serviceRequest->isLocked() && $form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('service_request_index');
}
return $this->render(
'service_request/edit.html.twig',
[
'service_request' => $serviceRequest,
'form' => $form->createView(),
]
);
}
/**
* @Route("/{id}", name="service_request_delete", methods={"DELETE"})
*/
public function delete(Request $request, ServiceRequest $serviceRequest): Response
{
if ($this->isCsrfTokenValid('delete' . $serviceRequest->getId(), $request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($serviceRequest);
$entityManager->flush();
}
return $this->redirectToRoute('service_request_index');
}
/**
* @Route("/lock/{id}", name="service_request_lock")
* @return Response
*/
public function lock(ServiceRequest $serviceRequest, EntityManagerInterface $entityManager): Response
{
$serviceRequest->setLocked(!$serviceRequest->isLocked());
$entityManager->flush();
return $this->redirectToRoute('service_request_index');
}
}