src/Controller/PlanController.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Colonne;
  4. use App\Form\CultureType;
  5. use App\Entity\Parcelle;
  6. use App\Entity\Legume;
  7. use App\Entity\Partie;
  8. use App\Entity\HistoriquePlan;
  9. use App\Entity\HistoriqueDonnee;
  10. use Exception;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Doctrine\Persistence\ManagerRegistry;
  16. use App\Repository\PartieRepository;
  17. use App\Repository\TypeRepository;
  18. use App\Repository\ParcelleRepository;
  19. use App\Repository\LegumeRepository;
  20. use App\Repository\HistoriquePlanRepository;
  21. use App\Repository\HistoriqueDonneeRepository;
  22. use App\Repository\ColonneRepository;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. class PlanController extends AbstractController
  25. {
  26.     #[Route('/'name'index_redirect')]
  27.     public function indexRedirect(): Response
  28.     {
  29.         $annee date('Y');
  30.         return $this->redirectToRoute('index', ['annee' => $annee]);
  31.     }
  32.     #[Route('/plan/{annee}'name'index')]
  33.     public function index(int $anneeParcelleRepository $parcelleRepositoryHistoriquePlanRepository $historiqueRepositoryTypeRepository $typeRepository): Response
  34.     {
  35.         $annees $historiqueRepository->findAllYears();
  36.         $view in_array($annee,$annees) ? 'plan/index.html.twig' 'plan/nouveau.html.twig';
  37.         $parcelles $parcelleRepository->findAll();
  38.         $types $typeRepository->findAll();
  39.         return $this->render($view, [
  40.             'parcelles' => $parcelles,
  41.             'annee' => $annee,
  42.             'types' => $types
  43.         ]);
  44.     }
  45.     #[Route('/parcelle/{annee}/{id}'name'parcelle')]
  46.     public function detailParcelle(Request $reqParcelle $parcelleint $anneeTypeRepository $typeRepositoryColonneRepository $colonneRepositoryHistoriqueDonneeRepository $historiqueRepository): Response
  47.     {
  48.         $form $this->createForm(CultureType::class, null, [
  49.             'method' => 'POST',
  50.             'action' => $this->generateUrl('update_parcelle')
  51.         ]);
  52.         $form->handleRequest($req);
  53.         $enregistrements $historiqueRepository->findAllSorted($parcelle->getId());
  54.         $colonnes $colonneRepository->findAll();
  55.         $types $typeRepository->findAll();
  56.         return $this->render('plan/parcelle.html.twig', [
  57.             'parcelle' => $parcelle,
  58.             'annee' => $annee,
  59.             'form' => $form->createView(),
  60.             'types' => $types,
  61.             'colonnes' => $colonnes,
  62.             'enregistrements' => $enregistrements,
  63.             'error' => $req->query->has('error') ? $req->query->get('error') : null
  64.         ]);
  65.     }
  66.     #[Route('/updateParcelle'name'update_parcelle')]
  67.     public function updateParcelle(
  68.         Request $req,
  69.         PartieRepository $partieRepository,
  70.         HistoriquePlanRepository $historiqueRepository,
  71.         LegumeRepository $legumeRepository,
  72.         ManagerRegistry $doctrine)
  73.     {
  74.         try {
  75.             $parcelle $req->request->get('parcelle');
  76.             if (empty($req->get('parties'))) {
  77.                 throw new Exception('Aucune partie n\'a été sélectionnée.');
  78.             }
  79.             $isEngrais false;
  80.             if ($req->get('engrais') !== null) {
  81.                 $isEngrais true;
  82.             }
  83.             $historiques = [];
  84.             foreach($req->get('parties') as $idPartie) {
  85.                 $historiques[] = $partieRepository->find($idPartie)->getHistoriqueForPartieByYear($req->request->get('annee'));
  86.             }
  87.             $manager $doctrine->getManager();
  88.             foreach ($historiques as $historique) {
  89.                 $h $historiqueRepository->findOneBy(['annee' => $req->request->get('annee'), 'partie' => $historique->getPartie()->getId()]);
  90.                 $h->setLegume($legumeRepository->find($req->get('culture')['legume']));
  91.                 $h->setEngrais($isEngrais);
  92.                 $manager->persist($h);
  93.             }
  94.             $manager->flush();
  95.             return $this->redirectToRoute('parcelle', [
  96.                 'annee' => $req->request->get('annee'),
  97.                 'id' => $parcelle,
  98.                 'error' => false
  99.             ]);
  100.         } catch (Exception $e) {
  101.             return $this->redirectToRoute('parcelle', [
  102.                 'annee' => $req->request->get('annee'),
  103.                 'id' => $parcelle,
  104.                 'error' => true
  105.             ]);
  106.         }
  107.     }
  108.     #[Route('/plan/nouveau/{annee}'name'nouveau_plan')]
  109.     public function newParcelle(int $anneePartieRepository $partieRepositoryLegumeRepository $legumeRepositoryManagerRegistry $doctrine): Response
  110.     {
  111.         $parties $partieRepository->findAll();
  112.         $manager $doctrine->getManager();
  113.         foreach ($parties as $partie) {
  114.             $historique = new HistoriquePlan();
  115.             $historique->setPartie($partie);
  116.             $historique->setAnnee($annee);
  117.             $historique->setEngrais(0);
  118.             $historique->setLegume($legumeRepository->find(57));
  119.             $manager->persist($historique);
  120.         }
  121.         $manager->flush();
  122.         return $this->redirectToRoute('index', ['annee' => $annee]);
  123.     }
  124.     #[Route('/parcelle/{annee}/{id}/enregistrement'name'nouveau_enregistrement')]
  125.     public function newSave(Request $reqParcelle $parcelleint $anneeLegumeRepository $legumeRepositoryColonneRepository $colonneRepositoryHistoriqueDonneeRepository $historiqueRepositoryManagerRegistry $doctrine): Response
  126.     {
  127.         $colonnes $colonneRepository->findAll();
  128.         $id $historiqueRepository->findLastId($parcelle->getId()) ? $historiqueRepository->findLastId($parcelle->getId())->getId() + 1;
  129.         $manager $doctrine->getManager();
  130.         foreach ($colonnes as $colonne) {
  131.             $enregistrement = new HistoriqueDonnee();
  132.             $enregistrement->setId($id);
  133.             $enregistrement->setParcelle($parcelle);
  134.             $enregistrement->setAnnee($annee);
  135.             $enregistrement->setColonne($colonne);
  136.             $enregistrement->setValeur($req->request->get('colonne'.$colonne->getId()));
  137.             $manager->persist($enregistrement);
  138.         }
  139.         $manager->flush();
  140.         return $this->redirectToRoute('parcelle', ['annee' => $annee'id' => $parcelle->getId()]);
  141.     }
  142.     #[Route('/colonne/nouveau'name'nouveau_colonne'methods'POST')]
  143.     public function newColumn(Request $reqManagerRegistry $doctrineHistoriqueDonneeRepository $historiqueDonneeRepository): Response
  144.     {
  145.         $column = new Colonne();
  146.         $column->setNom($req->request->get('name'));
  147.         $manager $doctrine->getManager();
  148.         $manager->persist($column);
  149.         $manager->flush();
  150.         $lines $historiqueDonneeRepository->findAllDistinct();
  151.         /** @var HistoriqueDonnee $line */
  152.         foreach ($lines as $line) {
  153.             $newLine = new HistoriqueDonnee();
  154.             $newLine->setId($line->getId());
  155.             $newLine->setAnnee($line->getAnnee());
  156.             $newLine->setParcelle($line->getParcelle());
  157.             $newLine->setValeur('');
  158.             $newLine->setColonne($column);
  159.             $manager->persist($newLine);
  160.             $manager->flush();
  161.         }
  162.         $annee $req->request->get('annee');
  163.         $parcelle $req->request->get('parcelle');
  164.         return $this->redirectToRoute('parcelle', ['annee' => $annee'id' => $parcelle]);
  165.     }
  166.     #[Route('/parcelle/{annee}/{parcelle}/ligne/supprimer/{id}'name'supprimer_ligne'methods'GET')]
  167.     public function removeLine(Request $reqManagerRegistry $doctrineint $anneestring $parcelleint $idHistoriqueDonneeRepository $historiqueDonneeRepository): Response
  168.     {
  169.         $lines $historiqueDonneeRepository->findBy(['id' => $id]);
  170.         $manager $doctrine->getManager();
  171.         foreach ($lines as $line) {
  172.             $manager->remove($line);
  173.         }
  174.         $manager->flush();
  175.         return $this->redirectToRoute('parcelle', ['annee' => $annee'id' => $parcelle]);
  176.     }
  177. }