<?php
namespace App\Controller;
use App\Entity\Concession;
use App\Form\Concession\CreateType;
use App\Form\Concession\EditType;
use App\Repository\ConcessionRepository;
use App\Service\Converter\ConvertDataToJsonFile;
use App\Service\DataGouvApi\SendToApi;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ConcessionController extends AbstractController
{
public function __construct(
private ConvertDataToJsonFile $jsonConverter,
private SendToApi $sendToApi
){
}
#[Route('app/concession/creer', name: 'app_concession_create', methods: ['GET', 'POST'])]
public function create(Request $request, EntityManagerInterface $entityManager): Response
{
$concession = new Concession();
$form = $this->createForm(CreateType::class, $concession, [
'attr' => ['id' => 'concession_form']
]);
$form->handleRequest($request);
if($form->isSubmitted()){
if($form->isValid()){
foreach ($concession->getDonneePerformance() as $donnePerformance) {
$donnePerformance->setConcession($concession);
foreach ($donnePerformance->getTarifUsager() as $tarifUsager) {
$tarifUsager->setDonneePerformance($donnePerformance);
}
}
foreach ($concession->getTitulaire() as $titulaire) {
$titulaire->setConcession($concession);
}
$concession->setUser($this->getUser());
$entityManager->persist($concession);
$entityManager->flush();
$jsonData =$this->jsonConverter->convertConcessionToJsonData($concession);
$filePath = $this->jsonConverter->convertJsonDataToJsonFile($jsonData, $concession->getId());
$idApi = $this->sendToApi->sendFileToApiAndGetRemoteId($filePath);
$concession->setApiId($idApi);
$entityManager->persist($concession);
$entityManager->flush();
$this->addFlash('success', 'Le marché public a bien été publié sur data.gouv.fr');
return $this->redirectToRoute('front_concession_show',[
'id'=>$concession->getId()
]);
}
}
return $this->render('concession/create.html.twig', [
'form' => $form->createView()
]);
}
#[Route('/concession/voir/{id?1}', name: 'front_concession_show', methods: ['GET'])]
public function show(int $id, ConcessionRepository $concessionRepository):Response
{
$concession = $concessionRepository->find($id);
return $this->render('concession/show.html.twig', [
'concession'=>$concession
]);
}
#[Route('/app/concession/edit/{id}', name: 'app_concession_edit')]
public function edit(int $id, Request $request, ConcessionRepository $concessionRepository, EntityManagerInterface $entityManager) : Response
{
$concession = $concessionRepository->find($id);
if(is_null($concession)){
$this->addFlash('error', 'Cette ressource n\'existe pas');
return $this->redirectToRoute('app_show_all_marches_and_concessions');
}
$form = $this->createForm(EditType::class, $concession, [
'attr' => ['id' => 'concession_form']
]);
if($this->getUser()!= $concession->getUser()){
$this->addFlash('error', 'Vous n\'avez pas accès à cette ressource');
return $this->redirectToRoute('app_show_all_marches_and_concessions');
}
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
foreach ($concession->getModificationConcession() as $modification) {
$modification->setConcession($concession);
$entityManager->persist($modification);
}
$entityManager->flush();
$entityManager->refresh($concession);
$jsonData =$this->jsonConverter->convertConcessionToJsonData($concession);
$filePath = $this->jsonConverter->convertJsonDataToJsonFile($jsonData, $concession->getId());
$this->sendToApi->updateDataSentToApi($filePath, $concession);
$this->addFlash('success', 'Les données ont bien été modifiées sur data.gouv.fr');
return $this->redirectToRoute('front_concession_show',[
'id'=>$concession->getId()
]);
}
return $this->render('concession/edit.html.twig',[
'concession'=>$concession,
'form'=>$form->createView()
]);
}
}