src/Controller/FactureController.php line 109

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Vehicule;
  4. use App\Entity\Facture;
  5. use App\Form\FactureType;
  6. use App\Repository\FactureRepository;
  7. use App\Repository\VehiculeRepository;
  8. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  9. use Symfony\Component\HttpFoundation\File\UploadedFile;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\String\Slugger\SluggerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  16. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  17. /**
  18.  * @Route("/vehicule")
  19.  */
  20. class FactureController extends AbstractController
  21. {
  22.     /**
  23.      * @Route("/facture/{vehicule_id}", name="app_facture", methods={"GET", "POST"})
  24.      */
  25.     public function index(Request $requestFactureRepository $factureRepositoryint $vehicule_idSluggerInterface $sluggerVehiculeRepository $vehiculeRepository): Response
  26.     {
  27.         $facture = new Facture();
  28.         $repository $this->getDoctrine()->getRepository(Vehicule::class);
  29.         $vehicule $repository->findOneById($vehicule_id);
  30.         $factures $vehicule->getFactures();
  31.         
  32.         // dir de stockage
  33.         $factures_vehicules $this->getParameter('factures_vehicules');
  34.         // types de factures
  35.         $factures_types $this->getParameter('types_factures');
  36.         $types_factures array_flip($factures_types);
  37.         array_splice($types_factures01);
  38.         $form $this->createForm(FactureType::class, $facture, [
  39.            'typesFactures' => $types_factures,
  40.         ]);
  41.         $form->handleRequest($request);
  42.         if ($form->isSubmitted() && $form->isValid()) {
  43.             //$datas = $form->getData();
  44.             $facture $form->get('filename')->getData(); 
  45.             $originalFilename pathinfo($facture->getClientOriginalName(), PATHINFO_FILENAME);
  46.                 
  47.             // this is needed to safely include the file name as part of the URL
  48.             // slugger nettoie le nom et enleve l unicode
  49.             $safeFilename $slugger->slug($originalFilename);
  50.             $newFilename $safeFilename.'-'.uniqid().'.'.$facture->guessExtension();
  51.             // Move the file to the directory where factures are stored
  52.             try {
  53.                 $facture->move($this->getParameter('factures_vehicules'), $newFilename);
  54.             } catch (FileException $e) {
  55.                 // ... handle exception if something happens during file upload
  56.                 $this->addFlash('warning''Impossible de copier le fichier : ' $e->getMessage()); 
  57.                 return $this->redirectToRoute('app_facture', array(
  58.                     'vehicule_id' => $vehicule_id,
  59.                     )
  60.                 );
  61.             }
  62.             $facture = new Facture();
  63.             $facture->setFilename($newFilename);
  64.             $facture->setDate($form->get('date')->getData());
  65.             $facture->setObservations($form->get('observations')->getData());
  66.             $facture->setGarage($form->get('garage')->getData());
  67.             $facture->setMontant($form->get('montant')->getData());
  68.             $facture->setTypeFacture($form->get('type_facture')->getData());
  69.             $facture->setVehicule($vehicule); 
  70.             $facture->setFiletype("");
  71.             
  72.             try {         
  73.                 $factureRepository->add($facturetrue);
  74.                 $vehicule->setDateUpdate(new \DateTime());
  75.                 $vehicule->setUser($this->getUser());
  76.                 $vehiculeRepository->add($vehiculetrue);                
  77.                 $this->addFlash('success''Facture correctement ajoutée');   
  78.             } catch (\Exception $e) {
  79.                 $this->addFlash('warning''Le téléchargement de la facture a échoué : ' $e->getMessage()); 
  80.             }                       
  81.             return $this->redirectToRoute('app_facture', ['vehicule_id' => $vehicule_id], Response::HTTP_SEE_OTHER);
  82.         }
  83.         return $this->renderForm('facture/index.html.twig', [
  84.             'facture' => $facture,
  85.             'vehicule_id' => $vehicule_id,
  86.             'form' => $form,
  87.             'vehicule' => $vehicule,
  88.             'controller_name' => 'facture',
  89.             'title' => 'Facture / Document',
  90.             'factures' => $factures,
  91.             'factures_types' => $factures_types,
  92.         ]);
  93.     }
  94.     
  95.     /**
  96.     * @Route("/pdf/{filePath}", name="app_show_facture")
  97.     */
  98.     public function showFacture(string $filePath): BinaryFileResponse
  99.     {
  100.         $response = new BinaryFileResponse(
  101.             $this->getParameter('factures_vehicules'// related to project root dir
  102.             '/'
  103.             urldecode($filePath)
  104.         );
  105.         $response->setContentDisposition(
  106.             ResponseHeaderBag::DISPOSITION_INLINE
  107.         );
  108.         return $response;
  109.     }
  110.     
  111.     /**
  112.      * @Route("/facture/delete/{vehicule_id}/{id}", name="app_facture_delete", methods={"POST"})
  113.      */
  114.     public function delete(Request $requestFacture $factureint $vehicule_idFactureRepository $factureRepository): Response
  115.     {
  116.         if ($this->isCsrfTokenValid('delete'.$facture->getId(), $request->request->get('_token'))) {
  117.             unlink($this->getParameter('factures_vehicules') . "/" $facture->getFilename());
  118.             $factureRepository->remove($facturetrue);
  119.         }
  120.         return $this->redirectToRoute('app_facture', ['vehicule_id' => $vehicule_id], Response::HTTP_SEE_OTHER);
  121.     }
  122.     
  123. }