src/Controller/DevisCommandeController.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Aspect;
  4. use App\Entity\Combinaison;
  5. use App\Entity\Epaisseur;
  6. use App\Entity\Forme;
  7. use App\Entity\Piece;
  8. use App\Entity\Vente;
  9. use App\Form\DevisCommandeType;
  10. use App\Form\PiecePublicType;
  11. use App\Repository\AspectRepository;
  12. use App\Repository\CategorieDeFormeRepository;
  13. use App\Repository\CombinaisonRepository;
  14. use App\Repository\EpaisseurRepository;
  15. use App\Repository\FormeRepository;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Doctrine\Persistence\ManagerRegistry;
  21. class DevisCommandeController extends AbstractController
  22. {
  23.     #[Route('/devis-commande'name'app_devis_commande')]
  24.     public function index(Request $requestManagerRegistry $doctrine): Response
  25.     {
  26.         $devisCommande = new Vente();
  27.         $form $this->createForm(DevisCommandeType::class, $devisCommande);
  28.         //on gère le retour du formulaire
  29.         $form->handleRequest($request);
  30.         if ($form->isSubmitted() && $form->isValid()) {
  31.             $entityManager $doctrine->getManager();
  32.             //on récupère les pièces
  33.             $pieces $request->get('pieces');
  34.             //on boucle et on décompose le json pour chaque pièce
  35.             $nbFichier 0;
  36.             foreach ($pieces as $piece) {
  37.                 $piece json_decode($piece);
  38.                 //on crée une nouvelle pièce
  39.                 $newPiece = new Piece();
  40.                 $newPiece->setVente($devisCommande);
  41.                 $newPiece->setQuantite($piece->Quantite);
  42.                 $newPiece->setRAL($piece->Ral);
  43.                 $newPiece->setCoteFinition($piece->CoteFinition);
  44.                 $combinaison $doctrine->getRepository(Combinaison::class)->find($piece->Matiere->Id);
  45.                 $epaisseur $doctrine->getRepository(Epaisseur::class)->find($piece->Epaisseur->Id);
  46.                 $aspect $doctrine->getRepository(Aspect::class)->find($piece->Aspect->Id);
  47.                 $newPiece->setCombinaison($combinaison);
  48.                 $newPiece->setEpaisseur($epaisseur);
  49.                 $newPiece->setAspect($aspect);
  50.                 $newPiece->setStatut("Nouveau");
  51.                 //si on a un fichier
  52.                 if (isset($piece->Fichier)) {
  53.                     //on récupère le fichier associé dans le file input
  54.                     $fichier $request->files->get('fichier')[$nbFichier];
  55.                     //on crée un nom unique pour le dossier
  56.                     $nomDossier "uploads/pieces/" md5(uniqid());
  57.                     //on crée le dossier dans public/uploads/pieces/
  58.                     mkdir($nomDossier);
  59.                     //on enregistre le fichier dans le dossier
  60.                     $fichier->move($nomDossier$fichier->getClientOriginalName());
  61.                     //on enregistre le nom du fichier dans la base
  62.                     $newPiece->setPlan($nomDossier "/" $fichier->getClientOriginalName());
  63.                     $nbFichier++;
  64.                 } else {
  65.                     //on récupère la forme
  66.                     $forme $doctrine->getRepository(Forme::class)->find($piece->Forme->Id);
  67.                     $newPiece->setForme($forme);
  68.                     $newPiece->setCotes($piece->Cotes);
  69.                     $newPiece->setAngles($piece->Angles);
  70.                     $newPiece->setLongueurTotale($piece->Longueur);
  71.                 }
  72.                 $devisCommande->addPiece($newPiece);
  73.                 $entityManager->persist($newPiece);
  74.             }
  75.             $devisCommande->setStatut("Nouveau");
  76.             $entityManager->persist($devisCommande);
  77.             $entityManager->flush();
  78.         }
  79.         return $this->render('devis_commande/index.html.twig', [
  80.             "form" => $form->createView(),
  81.         ]);
  82.     }
  83.     //retourne les catégories de forme pour le formulaire
  84.     #[Route('/devis-commande/_categoriesDeForme'name'app_devis_commande__categoriesDeForme')]
  85.     public function formPiece(CategorieDeFormeRepository $categorieDeFormeRepositoryCombinaisonRepository $combinaisonRepositoryEpaisseurRepository $epaisseurRepositoryAspectRepository $aspectRepository): Response
  86.     {
  87.         //on récupère la liste des catégories de forme
  88.         $categories $categorieDeFormeRepository->findBy(["Actif" => true], ["Titre" => "ASC"]);
  89.         //on récupère la liste des combinaisons actives pour les pièces
  90.         $combinaisons $combinaisonRepository->findBy(["Actif" => true], ["Titre" => "ASC"]);
  91.         //on récupère les épaisseurs
  92.         $epaisseurs $epaisseurRepository->findBy(["Actif" => true], ["Titre" => "ASC"]);
  93.         //on récupère les aspects
  94.         $aspects $aspectRepository->findBy(["Actif" => true], ["Titre" => "ASC"]);
  95.         //première étape du formulaire pour ajouter les pièces
  96.         //on va chercher toutes les catégories de forme
  97.         return $this->render('devis_commande/_categoriesDeForme.html.twig', [
  98.             'categories' => $categories,
  99.             "combinaisons" => $combinaisons,
  100.             "epaisseurs" => $epaisseurs,
  101.             "aspects" => $aspects,
  102.         ]);
  103.     }
  104.     //les formes pour la catégorie de forme sélectionnée
  105.     #[Route('/devis-commande/_formes/{id}'name'app_devis_commande__formes')]
  106.     public function formForme($idCategorieDeFormeRepository $categorieDeFormeRepository): Response
  107.     {
  108.         $categorie $categorieDeFormeRepository->find($id);
  109.         //deuxième étape du formulaire pour ajouter les pièces
  110.         //on va chercher les formes pour la catégorie de forme sélectionnée
  111.         if (!$categorie)
  112.             return $this->render('devis_commande/_formes.html.twig', [
  113.                 "fichier" => true,//si on veut afficher le champ "fichier
  114.             ]);
  115.         else {
  116.             //on prend les formes actives de la catégorie
  117.             $formes $categorie->getFormes()->filter(function ($forme) {
  118.                 return $forme->isActif();
  119.             });
  120.             return $this->render('devis_commande/_formes.html.twig', [
  121.                 "fichier" => false,
  122.                 "categorie" => $categorie,
  123.                 "formes" => $formes,
  124.             ]);
  125.         }
  126.     }
  127.     //les infos de la forme
  128.     #[Route('/devis-commande/_forme_infos/{id}'name'app_devis_commande__forme_infos'methods: ['GET'])]
  129.     public function infosForme($idFormeRepository $formeRepository): Response
  130.     {
  131.         //on appelle le controller FormeController pour récupérer les infos de la forme
  132.         //l'action existe déjà mais non accessible anonymement
  133.         $controller = new FormeController();
  134.         return $controller->infos($id$formeRepository);
  135.     }
  136.     #[Route('/devis-commande/_combinaison/{id}'name'app_devis_commande__combinaison'methods: ['GET'])]
  137.     public function infos($idCombinaisonRepository $combinaisonRepository): Response
  138.     {
  139.         //on appelle le controller CombinaisonController pour récupérer les infos de la combinaison
  140.         //l'action existe déjà mais non accessible anonymement
  141.         $controller = new CombinaisonController();
  142.         return $controller->infos($id$combinaisonRepository);
  143.     }
  144. }