src/Controller/DefaultController.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\CarrossPageConfig;
  4. use App\Entity\Contrat;
  5. use App\Entity\MaZonePageConfig;
  6. use App\Entity\Metier;
  7. use App\Entity\Modele;
  8. use App\Entity\PhotoPageConfig;
  9. use App\Entity\Reservation;
  10. use App\Entity\TransfoPageConfig;
  11. use App\Entity\TypeTransformation;
  12. use App\Entity\User;
  13. use App\Form\EmailProduitType;
  14. use Proxies\__CG__\App\Entity\Concession;
  15. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  18. use Symfony\Component\Form\Extension\Core\Type\TextType;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Mailer\MailerInterface;
  23. use Symfony\Component\Mime\Address;
  24. use Symfony\Component\Mime\Email;
  25. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  28. use App\Entity\FicheProduit;
  29. use App\Entity\Carrossier;
  30. use Doctrine\Persistence\ManagerRegistry;
  31. use Knp\Component\Pager\PaginatorInterface;
  32. class DefaultController extends AbstractController
  33. {
  34.     private $passwordHasher;
  35.     public function __construct(UserPasswordHasherInterface $passwordHasher)
  36.     {
  37.         $this->passwordHasher $passwordHasher;
  38.     }
  39.     /**
  40.      * @Route("/", name="homepage")
  41.      */
  42.     public function index(Request $requestManagerRegistry $registryPaginatorInterface $paginator)
  43.     {
  44.         if (!$this->getUser()->getValidPassword()) {
  45.             return $this->redirectToRoute('change_password');
  46.         }
  47.         $produitsPage $registry->getRepository(FicheProduit::class)->findBy(['hide' => false]); // TT-386
  48.         $produitsPage $paginator->paginate($produitsPage$request->query->getInt('page'1), 12);
  49.         $produitsPage->setCustomParameters(['align' => 'center','size' => 'small',]);
  50.         $modelesId $typeTransfosId $metierId $carrossiersId null;
  51.         $pageConfig $registry->getRepository(TransfoPageConfig::class)->findAll();
  52.         $form $this->createFormBuilder()
  53.             ->add('modele'EntityType::class, [
  54.                 'class' => Modele::class,
  55.                 'choice_label' => 'name',
  56.                 'placeholder' => 'Modèles',
  57.                 'label' => false,
  58.                 'required' => false,
  59.                 'multiple' => true,
  60.                 'attr' => ['data-placeholder' => 'Modèles']
  61.             ])
  62.             ->add('carrossier'EntityType::class, [
  63.                 'class' => Carrossier::class,
  64.                 'choice_label' => 'name',
  65.                 'placeholder' => 'Carrossiers',
  66.                 'label' => false,
  67.                 'required' => false,
  68.                 'multiple' => true,
  69.                 'attr' => ['data-placeholder' => 'Carrossiers']
  70.             ])
  71.             ->add('type'EntityType::class, [
  72.                 'class' => TypeTransformation::class,
  73.                 'choice_label' => 'name',
  74.                 'placeholder' => 'Type de transformations',
  75.                 'label' => false,
  76.                 'required' => false,
  77.                 'multiple' => true,
  78.                 'attr' => ['data-placeholder' => 'Type de transformations']
  79.             ])
  80.             ->add('metier'EntityType::class, [
  81.                 'class' => Metier::class,
  82.                 'choice_label' => 'name',
  83.                 'placeholder' => 'Métiers',
  84.                 'label' => false,
  85.                 'required' => false,
  86.                 'multiple' => true,
  87.                 'attr' => ['data-placeholder' => 'Métiers']
  88.             ])
  89.             /*->add('submit', SubmitType::class, [
  90.                 'label' => 'Rechercher',
  91.             ])*/
  92.             ->getForm()
  93.             ->handleRequest($request);
  94.         $search $this->createFormBuilder()
  95.             ->add('query'TextType::class, [
  96.                 'label' => false,
  97.                 'attr' => [
  98.                     'class' => 'form-control',
  99.                     'placeholder' => 'Rechercher'
  100.                 ]
  101.             ])
  102.             ->getForm();
  103.         $search->handleRequest($request);
  104.         if ($search->isSubmitted() && $search->isValid())
  105.         {
  106.             $query $search->getData()['query'];
  107.             if($query) {
  108.                 $produitsPage $registry->getRepository(FicheProduit::class)->findByTitle($query);
  109.                 $produitsPage $paginator->paginate($produitsPage$request->query->getInt('page'1), 12);
  110.                 $produitsPage->setCustomParameters(['align' => 'center','size' => 'small',]);
  111.             }
  112.             return $this->render('default/index.html.twig', [
  113.                 'produitsPage' => $produitsPage,
  114.                 'form' => $form->createView(),
  115.                 'pageConfig' => $pageConfig,
  116.                 'search' => $search->createView(),
  117.                 'modelesId' => $modelesId,
  118.                 'carrossiersId' => $carrossiersId,
  119.                 'typeTransfosId' => $typeTransfosId,
  120.                 'metierId' => $metierId,
  121.             ]);
  122.         }
  123.         if ($request->getMethod() == 'POST')
  124.         {
  125.             $query $request->request->get('query');
  126.             if($query !== "") {
  127.                 $produitsPage $registry->getRepository(FicheProduit::class)->findByTitle($query);
  128.                 $produitsPage $paginator->paginate($produitsPage$request->query->getInt('page'1), 12);
  129.                 $produitsPage->setCustomParameters(['align' => 'center','size' => 'small',]);
  130.                 return new JsonResponse([ 'view' =>  $this->renderView('default/dynamic.html.twig',
  131.                     [
  132.                         'produitsPage' => $produitsPage,
  133.                         'search' => $search->createView(),
  134.                         'form' => $form->createView(),
  135.                         'pageConfig' => $pageConfig,
  136.                         'modelesId' => "",
  137.                         'carrossiersId' => "",
  138.                         'typeTransfosId' => "",
  139.                         'metierId' => ""
  140.                     ]
  141.                 )]);
  142.             }
  143.             $modelesId explode(','$request->request->get('form_modele'));;
  144.             $carrossiersId =  explode(','$request->request->get('form_carrossier'));;
  145.             $typeTransfosId explode(','$request->request->get('form_type'));;
  146.             $metierId =  explode(','$request->request->get('form_metier'));
  147.             $modelesIds $registry->getRepository(Modele::class)->findById($modelesId);
  148.             $carrossiersIds$registry->getRepository(Carrossier::class)->findById($carrossiersId);
  149.             $typeTransfosIds $registry->getRepository(TypeTransformation::class)->findById($typeTransfosId);
  150.             $metiersIds $registry->getRepository(Metier::class)->findById($metierId);
  151.             $modeles $registry->getRepository(FicheProduit::class)->findByModele($modelesId);
  152.             $carrossiers $registry->getRepository(FicheProduit::class)->findByCarrossier($carrossiersId);
  153.             $typeTransfos $registry->getRepository(FicheProduit::class)->findByType($typeTransfosId);
  154.             $metiers $registry->getRepository(FicheProduit::class)->findByMetier($metierId);
  155.             $produitsPage array_unique(array_merge($modeles$carrossiers$typeTransfos$metiers));
  156.             if (!$modelesId[0] && !$carrossiersId[0] && !$typeTransfosId[0] && !$metierId[0]){
  157.                 $produitsPage $registry->getRepository(FicheProduit::class)->findBy(['hide' => false]); // TT-386
  158.             }
  159.             $produitsPage $paginator->paginate($produitsPage$request->query->getInt('page'1), 12);
  160.             $produitsPage->setCustomParameters(['align' => 'center','size' => 'small',]);
  161.             return new JsonResponse([ 'view' =>  $this->renderView('default/dynamic.html.twig',
  162.                 [
  163.                 'produitsPage' => $produitsPage,
  164.                 'search' => $search->createView(),
  165.                 'form' => $form->createView(),
  166.                 'pageConfig' => $pageConfig,
  167.                 'modelesId' => $modelesIds,
  168.                 'carrossiersId' => $carrossiersIds,
  169.                 'typeTransfosId' => $typeTransfosIds,
  170.                 'metierId' => $metiersIds
  171.                 ]
  172.             )]);
  173.         }
  174.         return $this->render('default/index.html.twig', [
  175.             'produitsPage' => $produitsPage,
  176.             'form' => $form->createView(),
  177.             'pageConfig' => $pageConfig,
  178.             'search' => $search->createView(),
  179.             'modelesId' => $modelesId,
  180.             'carrossiersId' => $carrossiersId,
  181.             'typeTransfosId' => $typeTransfosId,
  182.             'metierId' => $metierId,
  183.         ]);
  184.     }
  185.     /**
  186.      * @Route("/phototheque", name="phototheque")
  187.      */
  188.     public function indexPhoto(Request $requestManagerRegistry $registryPaginatorInterface $paginator): Response
  189.     {
  190.         $photosPage $registry->getRepository(FicheProduit::class)->findAll();
  191.         $pageConfig $registry->getRepository(PhotoPageConfig::class)->findAll();
  192.         $modelesId $typeTransfosId $metierId $carrossiersId null;
  193.         $countPhotos 0;
  194.         foreach ($photosPage as $produit){
  195.             $photos $produit->getPhototheques();
  196.             foreach ($photos as $photo){
  197.                 $countPhotos+=1;
  198.             }
  199.         }
  200.         $nbChoice ceil($countPhotos 12);
  201.         if($nbChoice 3){
  202.             $nbChoice 3;
  203.         }
  204.         $photos = [];
  205.         for($i 1$i <= $nbChoice$i++){
  206.            $photos[$i 12] = $i 12;
  207.         }
  208.         $form $this->createFormBuilder()
  209.             ->add('modele'EntityType::class, [
  210.                 'class' => Modele::class,
  211.                 'choice_label' => 'name',
  212.                 'placeholder' => 'Modèles',
  213.                 'label' => false,
  214.                 'required' => false,
  215.                 'multiple' => true,
  216.                 'attr' => ['data-placeholder' => 'Modèles']
  217.             ])
  218.             ->add('carrossier'EntityType::class, [
  219.                 'class' => Carrossier::class,
  220.                 'choice_label' => 'name',
  221.                 'placeholder' => 'Carrossiers',
  222.                 'label' => false,
  223.                 'required' => false,
  224.                 'multiple' => true,
  225.                 'attr' => ['data-placeholder' => 'Carrossiers']
  226.             ])
  227.             ->add('type'EntityType::class, [
  228.                 'class' => TypeTransformation::class,
  229.                 'choice_label' => 'name',
  230.                 'placeholder' => 'Type de transformations',
  231.                 'label' => false,
  232.                 'required' => false,
  233.                 'multiple' => true,
  234.                 'attr' => ['data-placeholder' => 'Type de transformations']
  235.             ])
  236.             ->add('metier'EntityType::class, [
  237.                 'class' => Metier::class,
  238.                 'choice_label' => 'name',
  239.                 'placeholder' => 'Métiers',
  240.                 'label' => false,
  241.                 'required' => false,
  242.                 'multiple' => true,
  243.                 'attr' => ['data-placeholder' => 'Métiers']
  244.             ])
  245.             /*->add('submit', SubmitType::class, [
  246.                 'label' => 'Rechercher',
  247.             ])*/
  248.             ->getForm()
  249.             ->handleRequest($request);
  250.         $visuelForm $this->createFormBuilder()
  251.         ->add('visuel'ChoiceType::class, [
  252.             'choices'  => $photos,
  253.             'placeholder' => 'Visuels par page',
  254.             'label' => false,
  255.         ])
  256.         ->getForm();
  257.         $visuelForm->handleRequest($request);
  258.         if ($visuelForm->isSubmitted() && $visuelForm->isValid())
  259.         {
  260.             $id $visuelForm->get('visuel')->getData();
  261.             $photoResult = [];
  262.             foreach ($photosPage as $produit){
  263.                 $photos $produit->getPhototheques();
  264.                 foreach ($photos as $photo){
  265.                     array_push($photoResult$photo);
  266.                 }
  267.             }
  268.             if ($id === null){
  269.                 $photoResult $paginator->paginate($photoResult$request->query->getInt('page'1), 12);
  270.             }else{
  271.                 $photoResult $paginator->paginate($photoResult$request->query->getInt('page'1), $id);
  272.             }
  273.             $photoResult->setCustomParameters(['align' => 'center','size' => 'small',]);
  274.             return $this->render('default/phototheque.html.twig', [
  275.                 'photosPage' => $photoResult,
  276.                 'form' => $form->createView(),
  277.                 'visuelForm' => $visuelForm->createView(),
  278.                 'pageConfig' => $pageConfig,
  279.                 'modelesId' => $modelesId,
  280.                 'carrossiersId' => $carrossiersId,
  281.                 'typeTransfosId' => $typeTransfosId,
  282.                 'metierId' => $metierId
  283.             ]);
  284.         }
  285.         if ($request->getMethod() == 'POST')
  286.         {
  287.             $id = (int)$request->request->get('form_visuel');
  288.             $photoResult = [];
  289.             foreach ($photosPage as $produit){
  290.                 $photos $produit->getPhototheques();
  291.                 foreach ($photos as $photo){
  292.                     array_push($photoResult$photo);
  293.                 }
  294.             }
  295.             $modelesId explode(','$request->request->get('form_modele'));;
  296.             $carrossiersId =  explode(','$request->request->get('form_carrossier'));;
  297.             $typeTransfosId explode(','$request->request->get('form_type'));;
  298.             $metierId =  explode(','$request->request->get('form_metier'));
  299.             $modelesIds $registry->getRepository(Modele::class)->findById($modelesId);
  300.             $carrossiersIds$registry->getRepository(Carrossier::class)->findById($carrossiersId);
  301.             $typeTransfosIds $registry->getRepository(TypeTransformation::class)->findById($typeTransfosId);
  302.             $metiersIds $registry->getRepository(Metier::class)->findById($metierId);
  303.             $modeles $registry->getRepository(FicheProduit::class)->findByModele($modelesId);
  304.             $carrossiers $registry->getRepository(FicheProduit::class)->findByCarrossier($carrossiersId);
  305.             $typeTransfos $registry->getRepository(FicheProduit::class)->findByType($typeTransfosId);
  306.             $metiers $registry->getRepository(FicheProduit::class)->findByMetier($metierId);
  307.             $photosPage array_unique(array_merge($modeles$carrossiers$typeTransfos$metiers));
  308.             if (!$modelesId[0] && !$carrossiersId[0] && !$typeTransfosId[0] && !$metierId[0]){
  309.                 $photosPage $registry->getRepository(FicheProduit::class)->findAll();
  310.             }
  311.             $photoResult = [];
  312.             foreach ($photosPage as $produit){
  313.                 $photos $produit->getPhototheques();
  314.                 foreach ($photos as $photo){
  315.                     array_push($photoResult$photo);
  316.                 }
  317.             }
  318.             if ($id === 0){
  319.                 $photoResult $paginator->paginate($photoResult$request->query->getInt('page'1), 12);
  320.             }else{
  321.                 $photoResult $paginator->paginate($photoResult$request->query->getInt('page'1), (int)$id);
  322.             }
  323.             $photoResult->setCustomParameters(['align' => 'center','size' => 'small',]);
  324.             return new JsonResponse([ 'view' =>  $this->renderView('default/dynamicPhoto.html.twig',
  325.                 [
  326.                     'photosPage' => $photoResult,
  327.                     'visuelForm' => $visuelForm->createView(),
  328.                     'form' => $form->createView(),
  329.                     'pageConfig' => $pageConfig,
  330.                     'modelesId' => $modelesIds,
  331.                     'carrossiersId' => $carrossiersIds,
  332.                     'typeTransfosId' => $typeTransfosIds,
  333.                     'metierId' => $metiersIds
  334.                 ]
  335.             )]);
  336.         }
  337.         $photoResult = [];
  338.         foreach ($photosPage as $produit){
  339.             $photos $produit->getPhototheques();
  340.             foreach ($photos as $photo){
  341.                 array_push($photoResult$photo);
  342.             }
  343.         }
  344.         $photoResult $paginator->paginate($photoResult$request->query->getInt('page'1), 12);
  345.         $photoResult->setCustomParameters(['align' => 'center','size' => 'small',]);
  346.         return $this->render('default/phototheque.html.twig', [
  347.             'photosPage' => $photoResult,
  348.             'form' => $form->createView(),
  349.             'visuelForm' => $visuelForm->createView(),
  350.             'pageConfig' => $pageConfig,
  351.             'modelesId' => $modelesId,
  352.             'carrossiersId' => $carrossiersId,
  353.             'typeTransfosId' => $typeTransfosId,
  354.             'metierId' => $metierId
  355.         ]);
  356.     }
  357.     /**
  358.      * @Route("/carrossiers", name="carrossiers")
  359.      */
  360.     public function indexCarrossiers(ManagerRegistry $registry): Response
  361.     {
  362.         $repository $registry->getRepository(Carrossier::class);
  363.         $carrossiers $repository->findAll();
  364.         $pageConfig $registry->getRepository(CarrossPageConfig::class)->findAll();
  365.         return $this->render('default/carrossiers.html.twig', [
  366.             'carrossiers' => $carrossiers,
  367.             'pageConfig' => $pageConfig,
  368.         ]);
  369.     }
  370.     /**
  371.      * @Route("/ma-zone", name="maZone")
  372.      * @IsGranted("ROLE_CDR")
  373.      */
  374.     public function indexMaZone(ManagerRegistry $registry): Response
  375.     {
  376.         $concession $this->getUser()->getConcession();
  377.         $zone $concession->getZone();
  378.         $contrats $registry->getRepository(Contrat::class)->findBy(array('zone' => $zone'status' => 'A'));
  379.         $pageConfig $registry->getRepository(MaZonePageConfig::class)->findAll();
  380.         return $this->render('default/maZone.html.twig', [
  381.             'pageConfig' => $pageConfig,
  382.             'contrats' => $contrats,
  383.             'zone' => $zone
  384.         ]);
  385.     }
  386.     /**
  387.      * @Route("/fiche-produit/{id}", name="ficheProduit")
  388.      */
  389.     public function indexFicheProduit(Request $requestint $idManagerRegistry $registryMailerInterface $mailer): Response
  390.     {
  391.         $produit $registry->getRepository(FicheProduit::class)->find($id);
  392.         $activites $produit->getActiviteProduits();
  393.         $form $this->createForm(EmailProduitType::class);
  394.         $form->handleRequest($request);
  395.         if ($form->isSubmitted() && $form->isValid()) {
  396.             $data $form->getData();
  397.             $email = (new Email());
  398.             $email
  399.                 ->from(new Address('info@resacaravanevu.fr''L’INTÉGRALE VÉHICULES CARROSSES'))
  400.                 ->to($data['email'])
  401.                 ->subject('Toyota Professional - Véhicules transformés - Votre fiche produit')
  402.                 ->html(nl2br($data['body']));
  403.             $mailer->send($email);
  404.             $this->addFlash('success''Votre message a bien été envoyé');
  405.             return $this->render('default/ficheProduit.html.twig', [
  406.                 'produit' => $produit,
  407.                 'activites' => $activites,
  408.                 'form' => $form->createView()
  409.             ]);
  410.         }
  411.         return $this->render('default/ficheProduit.html.twig', [
  412.             'produit' => $produit,
  413.             'activites' => $activites,
  414.             'form' => $form->createView()
  415.         ]);
  416.     }
  417.     /**
  418.      * @Route("/import", name="import_users")
  419.      */
  420.     public function importUser(Request $request): Response
  421.     {
  422.         if ($request->files->get('file') === null) {
  423.             $this->addFlash('danger''Fichier invalide');
  424.             return $this->redirectToRoute('admin');
  425.         }
  426.         $em $this->getDoctrine()->getManager();
  427.         //Creation Des Concessions
  428.         $count 1;
  429.         if (($fp fopen($request->files->get('file'), "r")) !== FALSE) {
  430.             while (($row fgetcsv($fp1000",")) !== FALSE) {
  431.                 if ($count ) {
  432.                     $data explode(';'$row[0]);
  433.                     $concession $em->getRepository(Concession::class)->findOneByCode($data['4']);
  434.                     if (!$concession) {
  435.                         $concession = new Concession();
  436.                     }
  437.                     $concession->setCode(trim($data['4']));
  438.                     $concession->setName(trim($data['5']));
  439.                     $concession->setZone($data['8'] == 'NORD' 'N' 'S');
  440.                     $em->persist($concession);
  441.                 }
  442.                 $count++;
  443.             }
  444.             fclose($fp);
  445.         }
  446.         $em->flush();
  447.         //Creation Des user
  448.         $count 1;
  449.         if (($fp fopen($request->files->get('file'), "r")) !== FALSE) {
  450.             while (($row fgetcsv($fp1000",")) !== FALSE) {
  451.                 if ($count ) {
  452.                     $data explode(';'$row[0]);
  453.                     $user $em->getRepository(User::class)->findOneByEmail($data['7']);
  454.                     $concession $em->getRepository(Concession::class)->findOneByCode($data['4']);
  455.                     if (!$user) {
  456.                         $user = new User();
  457.                         $password uniqid();
  458.                         $user->setFirstPassword($password);
  459.                         $user->setPassword($this->passwordHasher->hashPassword($user$password));
  460.                         $user->setRoles(["ROLE_USER"]);
  461.                     }
  462.                     $user->setEmail($data['7']);
  463.                     $user->setConcession($concession);
  464.                     $user->setNom($data['2']);
  465.                     $user->setPrenom($data['1']);
  466.                     $user->setCivilite($data['0'] ?? 'M.' 'H' 'F');
  467.                     $user->setSite($data['6']);
  468.                     $user->setMetier($data['3']);
  469.                     $em->persist($user);
  470.                     $em->flush();
  471.                 }
  472.                 $count++;
  473.             }
  474.             fclose($fp);
  475.         }
  476.         $this->addFlash('success''Import effectué avec succès');
  477.         return $this->redirectToRoute('admin');
  478.     }
  479.     /**
  480.      * @Route("/export", name="export_users")
  481.      */
  482.     public function exportUser(Request $request)
  483.     {
  484.         $em $this->getDoctrine()->getManager();
  485.         $users $em->getRepository(User::class)->findAll();
  486.         $handle tmpfile();
  487.         $data = [
  488.             'Civilité',
  489.             'Prénom',
  490.             'Nom',
  491.             'Métier',
  492.             'Code CE',
  493.             'Raison Sociale',
  494.             'Site de Travail : Entreprise mère',
  495.             'Adresse e-mail',
  496.             'ZONE'
  497.         ];
  498.         fputcsv($handlearray_map('utf8_decode',$data), ';');
  499.         $data = [];
  500.         foreach ($users as $user) {
  501.             $data['Civilité'] = $user->getCivilite() == 'H' 'M.' 'MME.';
  502.             $data['Prénom'] = $user->getPrenom();
  503.             $data['Nom'] = $user->getNom();
  504.             $data['Métier']= $user->getMetier();
  505.             $data['Code CE'] = $user->getConcession()->getCode();
  506.             $data['Raison Sociale'] = trim($user->getConcession()->getName());
  507.             $data['Site de Travail : Entreprise mère'] = $user->getSite();
  508.             $data['Adresse e-mail'] = $user->getEmail();
  509.             $data['ZONE']= $user->getConcession()->getZone();
  510.             fputcsv($handlearray_map('utf8_decode',$data), ';'chr(0));
  511.         }
  512.         rewind($handle);
  513.         return new Response(stream_get_contents($handle), 200, array(
  514.             'Content-Type' => 'application/csv',
  515.             'Content-Disposition' => 'attachment; filename=users.csv'
  516.         ));
  517.     }
  518.     /**
  519.      * @Route("/export-contract-accepted", name="export_contract_accepted")
  520.      */
  521.     public function exportContractAccepted(Request $requestManagerRegistry $registry)
  522.     {
  523.         $contrats $registry->getRepository(Contrat::class)->findContractAccepted();
  524.         $handle tmpfile();
  525.         $data = [
  526.             'Concession',
  527.             'Code Concession',
  528.             'ZONE',
  529.             'Civilité',
  530.             'Nom et Prénom',
  531.             'Adresse e-mail',
  532.             'Téléphone',
  533.             'Date de début',
  534.             'Date de fin'
  535.         ];
  536.         fputcsv($handlearray_map('utf8_decode',$data), ';');
  537.         $data = [];
  538.         foreach ($contrats as $contrat) {
  539.             $data['Concession'] = $contrat->getCreatedBy()->getConcession()->getName();
  540.             $data['Code Concession'] = $contrat->getCreatedBy()->getConcession()->getCode();
  541.             $data['ZONE']= $contrat->getZone() === 'N' 'NORD' 'SUD';
  542.             $data['Civilité'] = $contrat->getCivilite() == 'H' 'M.' 'MME.';;
  543.             $data['Nom et Prénom']= $contrat->getNomContactLivraison();
  544.             $data['Adresse e-mail'] = $contrat->getEmailLivraison();
  545.             $data['Téléphone'] = $contrat->getPhoneLivraison();
  546.             $data['Date de début'] = $contrat->getReservation()->getStartDate()->format('d-m-Y');
  547.             $data['Date de fin'] = $contrat->getReservation()->getEndDate()->format('d-m-Y');
  548.             fputcsv($handlearray_map('utf8_decode',$data), ';'chr(0));
  549.         }
  550.         rewind($handle);
  551.         return new Response(stream_get_contents($handle), 200, array(
  552.             'Content-Type' => 'application/csv',
  553.             'Content-Disposition' => 'attachment; filename=contracts_accepted.csv'
  554.         ));
  555.     }
  556.     /**
  557.      * @Route("/export-dateblocked/{zone}", name="export_dateblocked")
  558.      */
  559.     public function exportBlockedDateZoneN(Request $requestManagerRegistry $registry$zone)
  560.     {
  561.         $blockedDates $registry->getRepository(Reservation::class)->findBlockedDate($zone);
  562.         $handle tmpfile();
  563.         $data = [
  564.             'Code CE',
  565.             'Créé par',
  566.             'ZONE',
  567.             'Date de début',
  568.             'Date de fin'
  569.         ];
  570.         fputcsv($handlearray_map('utf8_decode',$data), ';');
  571.         $data = [];
  572.         foreach ($blockedDates as $blockedDate) {
  573.             $data['Code CE'] = $blockedDate->getCreatedBy()->getConcession()->getCode();
  574.             $data['Concession'] = $blockedDate->getCreatedBy()->getEmail();
  575.             $data['ZONE']= $zone;
  576.             $data['Date de début'] = $blockedDate->getStartDate()->format('d-m-Y');
  577.             $data['Date de fin'] = $blockedDate->getEndDate()->format('d-m-Y');
  578.             fputcsv($handlearray_map('utf8_decode',$data), ';'chr(0));
  579.         }
  580.         rewind($handle);
  581.         return new Response(stream_get_contents($handle), 200, array(
  582.             'Content-Type' => 'application/csv',
  583.             'Content-Disposition' => 'attachment; filename=dates_bloquées_zone_'$zone .'.csv'
  584.         ));
  585.     }
  586. }