src/Controller/Admin/MissionController.php line 102

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Missions;
  4. use App\Form\StatutType;
  5. use App\Form\MissionType;
  6. use App\Entity\Competences;
  7. use App\Form\CompetencesType;
  8. use App\Repository\MissionsRepository;
  9. use App\Repository\ReponsesAORepository;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Knp\Component\Pager\PaginatorInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\Security\Core\Security;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. class MissionController extends AbstractController
  18. {
  19.     #[Route('/admin/mission'name'app_admin_mission')]
  20.     public function listeMission(MissionsRepository $repoPaginatorInterface $paginatorRequest $request): Response
  21.     {
  22.         // Récupération des critères de filtrage depuis la requête
  23.         $titre $request->query->get('titre');
  24.         $budget_min $request->query->get('budget_min');
  25.         $budget_max $request->query->get('budget_max');
  26.         $ville $request->query->get('ville');
  27.         $duree $request->query->get('duree');
  28.         $entrepriseConcernee $request->query->get('entreprise_concernee');
  29.         // Création des critères de filtrage
  30.         $criteria = [];
  31.         if ($titre) {
  32.             $criteria['titre'] = $titre;
  33.         }
  34.         if ($budget_min) {
  35.             $criteria['budget_min'] = $budget_min;
  36.         }
  37.         if ($budget_max) {
  38.             $criteria['budget_max'] = $budget_max;
  39.         }
  40.         if ($ville) {
  41.             $criteria['ville'] = $ville;
  42.         }
  43.         if ($duree) {
  44.             $criteria['duree'] = $duree;
  45.         }
  46.         if ($entrepriseConcernee) { // Vérification et ajout du nouveau critère
  47.             $criteria['entreprise_concernee'] = $entrepriseConcernee;
  48.         }
  49.         // Pagination des résultats filtrés
  50.         $queryBuilder $repo->findByCriteria($criteria);
  51.         $Missions $paginator->paginate(
  52.             $queryBuilder,
  53.             $request->query->getInt('page'1), // Numéro de page
  54.             16 // Limite par page
  55.         );
  56.         return $this->render('admin/mission/listeMission.html.twig',
  57.     [
  58.         'lesMissions'=>$Missions
  59.     ]);
  60.     }
  61.     #[Route('/admin/mission/add'name'app_admin_mission_add'methods: ['POST','GET'] )]
  62.     public function ajoutMission(Request $requestEntityManagerInterface $manager,Security $security): Response
  63.     {
  64.         $mission = new Missions();
  65.         $user $security->getUser();
  66.         $form $this->createForm(MissionType::class, $mission, [
  67.             'user' => $user,
  68.         ]);
  69.         $form->handleRequest($request);
  70.         if ($form->isSubmitted() && $form->isValid()) {
  71.             // Générer une valeur auto-incrémentée pour `reference_mission`
  72.             $lastMission $manager->getRepository(Missions::class)->findOneBy([], ['reference_mission' => 'desc']);
  73.             $lastReference $lastMission $lastMission->getReferenceMission() : 0;
  74.             $mission->setReferenceMission($lastReference 1);
  75.             //Persister les compétences
  76.             foreach ($mission->getCompetence() as $competence) {
  77.             $manager->persist($competence);
  78.             }
  79.             
  80.             $manager->persist($mission);
  81.             $manager->flush();
  82.             return $this->redirectToRoute('app_admin_mission');
  83.         } 
  84.         return $this->render('admin/mission/formAjoutMission.html.twig', [
  85.             'formMissions' => $form->createView(),
  86.         ]);
  87.     }
  88.     
  89.     #[Route('/admin/mission/suppr/{id}'name'app_admin_mission_suppr'methods: ['GET'])]
  90.     public function supprMission(
  91.         Missions $mission
  92.         EntityManagerInterface $manager,
  93.         ReponsesAORepository $reponsesAORepository
  94.     ): Response {
  95.         // Récupérer toutes les réponses associées à la mission
  96.         $reponsesAOs $reponsesAORepository->findBy(['mission' => $mission]);
  97.         // Supprimer chaque réponse associée
  98.         foreach ($reponsesAOs as $reponseAO) {
  99.             $manager->remove($reponseAO);
  100.         }
  101.         // Supprimer la mission
  102.         $manager->remove($mission);
  103.         $manager->flush();
  104.         return $this->redirectToRoute('app_admin_mission');
  105.     }
  106.     #[Route('/admin/mission/{id}'name'app_admin_mission_details')]
  107.     public function detailMission(Missions $missionReponsesAORepository $reponsesAORepositoryRequest $requestEntityManagerInterface $entityManager): Response
  108.     {
  109.         
  110.         $form $this->createForm(StatutType::class, $mission);
  111.         $form->handleRequest($request);
  112.         if ($form->isSubmitted() && $form->isValid()) {
  113.             $entityManager->persist($mission);
  114.             $entityManager->flush();
  115.             $this->addFlash('success''Mission mise à jour avec succès.');
  116.             return $this->redirectToRoute('app_admin_mission_details', ['id' => $mission->getId()]);
  117.         }
  118.         // Récupère toutes les réponses d'appel d'offres pour cette mission
  119.         $reponsesAO $reponsesAORepository->findByMission($mission->getId());
  120.         // Optionnel : Extraire les consultants associés à ces réponses
  121.         $consultants array_map(fn($reponse) => $reponse->getConsultant(), $reponsesAO);
  122.         $competence $mission->getCompetence();
  123.         return $this->render('admin/mission/detailMission.html.twig', [
  124.             'laMission' => $mission,
  125.             'reponsesAO' => $reponsesAO,
  126.             'consultants' => $consultants,
  127.             'form' => $form->createView(),
  128.             'competences' => $competence,
  129.         ]);
  130.     }
  131.     #[Route('/admin/mission/modif/{id}'name'app_admin_mission_modif'methods: ['POST','GET'] )]
  132.     public function modifMission(Missions $missionRequest $requestEntityManagerInterface $manager): Response
  133.     {
  134.         $form=$this->createForm(MissionType::class,$mission);
  135.         $form->handleRequest($request);
  136.         
  137.         if ($form->isSubmitted() && $form->isValid()) 
  138.         { 
  139.             // Dans votre contrôleur ou service
  140.             foreach ($mission->getCompetence() as $competence) {
  141.                 $manager->persist($competence);
  142.             }
  143.             $manager->persist($mission);
  144.             $manager->flush();
  145.             return $this->redirectToRoute('app_admin_mission');
  146.         }
  147.         return $this->render('admin/mission/formModifMission.html.twig',
  148.     [
  149.         'formMissions'=>$form->createView()
  150.     ]);
  151.     }
  152. }