src/Controller/MarchePublicController.php line 138

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\MarchePublic;
  4. use App\Form\MarchePublic\CreateType;
  5. use App\Form\MarchePublic\EditType;
  6. use App\Repository\MarchePublicRepository;
  7. use App\Repository\UserRepository;
  8. use App\Service\Converter\ConvertDataToJsonFile;
  9. use App\Service\DataGouvApi\SendToApi;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. class MarchePublicController extends AbstractController
  16. {
  17.     public function __construct(
  18.         private ConvertDataToJsonFile $jsonConverter,
  19.         private SendToApi $sendToApi,
  20.     ){}
  21.     #[Route('app/marche_public/creer'name'app_marche_public_create'methods: ['GET''POST'])]
  22.     public function create(Request $requestEntityManagerInterface $entityManagerUserRepository $userRepository): Response
  23.     {
  24.         $user $userRepository->findOneBy(['userName'=>$this->getUser()->getUserIdentifier()]);
  25.         if(empty($user->getSiret()) || empty($user->getName())){
  26.             $this->addFlash('error''Merci de remplir vos données professionnelles');
  27.             return $this->redirectToRoute('user_info_edit');
  28.         }
  29.         $marchePublic = new MarchePublic();
  30.         $form $this->createForm(CreateType::class, $marchePublic,[
  31.             'attr'=>['id'=>'marche_public_form']
  32.         ]);
  33.         $form->handleRequest($request);
  34.         if ($form->isSubmitted()){
  35.             if($form->isValid()) {
  36.                 foreach ($marchePublic->getTitulaire() as $titulaire) {
  37.                     $titulaire->setMarchePublic($marchePublic);
  38.                 }
  39.                 foreach ($marchePublic->getSousTraitance() as $sousTraitance) {
  40.                     $sousTraitance->setMarchePublic($marchePublic);
  41.                 }
  42.                 foreach ($marchePublic->getModificationActeSousTraitance() as $modificationActeSousTraitance) {
  43.                     $modificationActeSousTraitance->setMarchePublic($marchePublic);
  44.                 }
  45.                 foreach ($marchePublic->getModification()  as $modification) {
  46.                     $modification->setMarchePublic($marchePublic);
  47.                     foreach ($modification->getTitulaire() as $modificationTitulaire) {
  48.                         $modificationTitulaire->setModification($modification);
  49.                     }
  50.                 }
  51.                 $marchePublic->setUser($this->getUser());
  52.                 $entityManager->persist($marchePublic);
  53.                 $entityManager->flush();
  54.                 $jsonData $this->jsonConverter->convertMarchePublicToJsonData($marchePublic);
  55.                 $filePath $this->jsonConverter->convertJsonDataToJsonFile($jsonData$marchePublic->getId());
  56.                 $apiId=$this->sendToApi->sendFileToApiAndGetRemoteId($filePath);
  57.                 $marchePublic->setApiId($apiId);
  58.                 
  59.                 $entityManager->persist($marchePublic);
  60.                 $entityManager->flush();
  61.                 $this->addFlash('success''Le marché public a bien été publié sur data.gouv.fr');
  62.                 return $this->redirectToRoute('front_marche_public_show',[
  63.                     'id'=>$marchePublic->getId()
  64.                 ]);
  65.             }
  66.         }
  67.         return $this->render('marche_public/create.html.twig', [
  68.             'form' => $form->createView(),
  69.         ]);
  70.     }
  71.     #[Route('/app/marche_public/edit/{id}'name'app_marche_public_edit')]
  72.     public function edit(int $idRequest $requestMarchePublicRepository $mpRepositoryEntityManagerInterface $entityManager) : Response
  73.     {
  74.         $mp $mpRepository->find($id);
  75.         if(is_null($mp)){
  76.             $this->addFlash('error''Cette ressource n\'existe pas');
  77.             return $this->redirectToRoute('app_show_all_marches_and_concessions');
  78.         }
  79.         $form $this->createForm(EditType::class, $mp, [
  80.             'attr' => ['id' => 'marche_public_form']
  81.         ]);
  82.         if($this->getUser()!= $mp->getUser()){
  83.             $this->addFlash('error''Vous n\'avez pas accès à cette ressource');
  84.             return $this->redirectToRoute('app_show_all_marches_and_concessions');
  85.         }
  86.         $form->handleRequest($request);
  87.         if($form->isSubmitted() && $form->isValid()){
  88.             foreach ($mp->getTitulaire() as $titulaire) {
  89.                 $titulaire->setMarchePublic($mp);
  90.             }
  91.             foreach ($mp->getSousTraitance() as $sousTraitance) {
  92.                 $sousTraitance->setMarchePublic($mp);
  93.             }
  94.             foreach ($mp->getModificationActeSousTraitance() as $item) {
  95.                 $item->setMarchePublic($mp);
  96.                 $entityManager->persist($item);
  97.             }
  98.             foreach ($mp->getModification() as $modification) {
  99.                 $modification->setMarchePublic($mp);
  100.                 $entityManager->persist($modification);
  101.                 foreach ($modification->getTitulaire() as $titulaire) {
  102.                     $titulaire->setModification($modification);
  103.                     $entityManager->persist($titulaire);
  104.                 }
  105.             }
  106.             $entityManager->flush();
  107.             $entityManager->refresh($mp);
  108.             $jsonData =$this->jsonConverter->convertMarchePublicToJsonData($mp);
  109.             $filePath $this->jsonConverter->convertJsonDataToJsonFile($jsonData$mp->getId(), $mp->getDateMade());
  110.             
  111.             $this->sendToApi->updateDataSentToApi($filePath$mp);
  112.             $this->addFlash('success''Les données ont bien été modifiées sur data.gouv.fr');
  113.             return $this->redirectToRoute('front_marche_public_show',[
  114.                 'id'=>$mp->getId()
  115.             ]);
  116.         }
  117.         return $this->render('marche_public/edit.html.twig',[
  118.             'mp'=>$mp,
  119.             'form'=>$form->createView()
  120.         ]);
  121.     }
  122.     #[Route('/marche_public/voir/{id?1}'name'front_marche_public_show'methods: ['GET'])]
  123.     public function show(int $idMarchePublicRepository $mpRepository) : Response
  124.     {
  125.         $marchePublic $mpRepository->find($id);
  126.         return $this->render('marche_public/show.html.twig',[
  127.             'mp'=>$marchePublic
  128.         ]);
  129.     }
  130. }