src/Controller/Adresses/AdresseController.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Adresses;
  3. use App\Entity\Adresses\Adresse;
  4. use App\Entity\Localisation\Zone;
  5. use App\Form\Adresse\AdresseType;
  6. use App\Form\Adresse\SupprimerAdresseType;
  7. use App\Library\Datatable\Util\Datatable;
  8. use App\Library\Uploader\Services\FileUploader;
  9. use App\Security\Voter\EntityVoter;
  10. use App\Service\GestionComerciale\EmailService;
  11. use App\Service\Utilisateur\ColonneTableauService;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use JMS\Serializer\SerializerBuilder;
  14. use Knp\Component\Pager\PaginatorInterface;
  15. use Knp\Snappy\Pdf;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\DependencyInjection\Container;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  23. use Symfony\Component\HttpFoundation\Cookie;
  24. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  25. use Symfony\Component\Validator\Validator\ValidatorInterface;
  26. use Symfony\Contracts\Translation\TranslatorInterface;
  27. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  28. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  29. use JMS\Serializer\SerializationContext;
  30. class AdresseController extends AbstractController
  31. {
  32.     /**
  33.      * @Route("/compte/adresse", name="dtc_adresse_liste")
  34.      */
  35.     public function listerAction(Request $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translatorColonneTableauService $serviceColonneTableau)
  36.     {
  37.         $tableau_class_cellule = array();
  38.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center""targets" => [0], "visible" => false"orderable" => false];
  39.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-left""targets" => [1], "visible" => true"orderable" => false];
  40.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id text-left""targets" => [2], "visible" => false"orderable" => false];
  41.         $response = new Response();
  42.         $this->datatable($request$em$datatable$translator$response);
  43.         $param $request->query->all();
  44.         return $this->render('Adresses/Adresse/lister.html.twig',
  45.             [
  46.                 'tableauClassColonne' => $tableau_class_cellule,
  47.                 'parametres'=> $param,
  48.             ]
  49.             ,$response);
  50.     }
  51.     /**
  52.      * set datatable configs
  53.      *
  54.      * @return \App\Library\Datatable\Util\Datatable
  55.      */
  56.     private function datatable(Request $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  57.     {
  58.         $user $this->getUser();
  59.         $param $request->query->all();
  60.         $datatable
  61.             ->setDatatableId('liste_adresses')
  62.             ->setEntity(Adresse::class, "x")
  63.             ->setFields(
  64.                 [
  65.                     $translator->trans("Date")            => 'x.date',
  66.                     $translator->trans("Adresses")             => 'x.libelle',
  67.                     $translator->trans("Actions")      => 'x.id',
  68.                     "_identifier_"                     => 'x.id',
  69.                 ]
  70.             )
  71.             //->addJoin('x.transporteur', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  72.             ->setRenderers(
  73.                 [
  74.                     => [
  75.                         'view' => 'FO/DataTable/heure.html.twig',
  76.                     ],
  77.                     => [
  78.                         'view'   => 'FO/DataTable/adresse.html.twig',
  79.                         'params' => [
  80.                             'edit_route' => 'dtc_commande_liste',
  81.                         ],
  82.                     ],
  83.                     => [
  84.                         'view'   => 'FO/DataTable/actions.html.twig',
  85.                         'params' => [
  86.                             'edit_route'                  => 'dtc_adresse_modifier',
  87.                             //'supprimer_route'    => 'dtc_commande_supprimer',
  88.                             'objet'                       => Adresse::class,
  89.                             'deplier'                     => false,
  90.                             'table'                       => "liste_adresse",
  91.                         ],
  92.                     ],
  93.                 ]
  94.             )
  95.             ->setMultiple([])
  96.             ->setOrder("x.date""desc")
  97.             ->setSearch(true)
  98.             ->setSearchFields([]);
  99.         $where "";
  100.         //$where = "x.typeDocumentCommercial = :typeDocumentCommercial and x.utilisateur = :utilisateur";
  101.         //$parameters = ['typeDocumentCommercial' => TypeDocumentCommercial::FACTURE,'utilisateur'=>$user->getId()];
  102.         $client_id 10000000000000;
  103.         if($user->getClient())  $client_id $user->getClient()->getId();
  104.         $param["parametres"]["client"] = $client_id;
  105.         if (array_key_exists('parametres'$param)) {
  106.             $response = new Response();
  107.             if (array_key_exists('client'$param["parametres"]) and $param["parametres"]["client"] > 0) {
  108.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  109.                 $parameters["client"] = $param["parametres"]["client"];
  110.                 if ($where != "") {
  111.                     $where .= " AND ";
  112.                 }
  113.                 $where .= "x.client = :client";
  114.             }
  115.             if (array_key_exists('date_debut'$param["parametres"]) and $param["parametres"]["date_debut"] != "") {
  116.                 $param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_debut"]);
  117.                 $param["parametres"]["date_debut"]->setTime(000000);
  118.                 $parameters["date_debut"] = $param["parametres"]["date_debut"];
  119.                 if ($where != "") {
  120.                     $where .= " AND ";
  121.                 }
  122.                 $where .= "x.date >= :date_debut";
  123.             }
  124.             if (array_key_exists('transporteur'$param["parametres"]) and $param["parametres"]["transporteur"] > 0) {
  125.                 //$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  126.                 $parameters["transporteur"] = $param["parametres"]["transporteur"];
  127.                 if ($where != "") {
  128.                     $where .= " AND ";
  129.                 }
  130.                 $where .= "t.id = :transporteur";
  131.             }
  132.             if (array_key_exists('date_fin'$param["parametres"]) and $param["parametres"]["date_fin"] != "") {
  133.                 $param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y'$param["parametres"]["date_fin"]);
  134.                 $param["parametres"]["date_fin"]->setTime(235959);
  135.                 $parameters["date_fin"] = $param["parametres"]["date_fin"];
  136.                 if ($where != "") {
  137.                     $where .= " AND ";
  138.                 }
  139.                 $where .= "x.date <= :date_fin";
  140.             }
  141.         }
  142.         if ($where != "") {
  143.             $where .= " AND ";
  144.         }
  145.         $where .= "x.visible = :visible";
  146.         $parameters["visible"]=1;
  147.         if ($where != '') {
  148.             $datatable->setWhere($where$parameters);
  149.             $qb $datatable->getQueryBuilder()->getDoctrineQueryBuilder();
  150.         }
  151.         return $datatable;
  152.     }
  153.     /**
  154.      * @Route("/compte/adresse/grid", name="dtc_adresse_liste_grid")
  155.      */
  156.     public function gridAction(Request $requestEntityManagerInterface $emDatatable $datatableTranslatorInterface $translator)
  157.     {
  158.         return $this->datatable($request$em$datatable$translator)->execute();
  159.     }
  160.     /**
  161.      * @Route("/adresse/recherche", name="dtc_adresse_recherche")
  162.      */
  163.     public function rechercheAction(Request $requestEntityManagerInterface $emPaginatorInterface $paginator)
  164.     {
  165.         $q      $request->query->get('q');
  166.         $client $request->query->get('client');
  167.         $client $user $this->getUser()->getClient()->getid();
  168.         $repo $em->getRepository(Adresse::class);
  169.         if (empty($client)) {
  170.             $results = [];
  171.         } else {
  172.             $results $repo->getRechercheAdresse($q25, ['client' => $client]);
  173.         }
  174.         $pagination $paginator->paginate(
  175.             $results/* query NOT result */
  176.             $request->query->getInt('page'1)/*page number*/,
  177.             10
  178.         );
  179.         $pagination_results $pagination->getItems();
  180.         $pagination_results_array $pagination->getItems();
  181.         $option_placeholde  = ["libelle" => "Sélectionnez""id" => "0"];
  182.         if ($request->query->getInt('page'1) == 1) {
  183.             array_unshift($pagination_results_array$option_placeholde);
  184.         }
  185.         $pagination->setItems($pagination_results);
  186.         $serializer SerializerBuilder::create()->build();
  187.         $context SerializationContext::create()->setSerializeNull(true);
  188.         return JsonResponse::fromJsonString($serializer->serialize($pagination'json'$context));
  189.     }
  190.     /**
  191.      * @Route("/adresse/ajouter", name="dtc_adresse_ajouter")
  192.      */
  193.     public function ajouterAction(Request$requestEntityManagerInterface $em,TranslatorInterface $translator,ValidatorInterface $validator)
  194.     {
  195.         $titre_modal "Nouvelle adresse de livraison";
  196.         $user $this->getUser();
  197.         $adresse = new Adresse();
  198.         $adresse->setLibelle("Adresse de livraison");
  199.         $adresse->setClient($user->getClient());
  200.         $france $em->getRepository(Zone::class)->findOneBy(["type"=>"1","titre"=>"FRANCE"]);
  201.         $adresse->setPays($france);
  202.         $form   $this->createForm(AdresseType::class, $adresse);
  203.         $errors = [];
  204.         $form->handleRequest($request);
  205.         if ($form->isSubmitted()) {
  206.             if ($form->isValid()) {
  207.                 $em->persist($adresse);
  208.                 $em->flush();
  209.                 $em->refresh($adresse);
  210.                 $villeTxt "";
  211.                 $cpTxt "";
  212.                 $paysTxt "";
  213.                 if(is_object($adresse->getVille())) $villeTxt $adresse->getVille()->getTitre();
  214.                 if(is_object($adresse->getCodePostal())) $cpTxt $adresse->getCodePostal()->getCodePostal();
  215.                 if(is_object($adresse->getPays())) $paysTxt $adresse->getPays()->getTitre();
  216.                 $dataAdresse = [
  217.                     'id' => $adresse->getId(),
  218.                     'libelle' => $adresse->getLibelle(),
  219.                     'prenom' => $adresse->getPrenom(),
  220.                     'nom' => $adresse->getNom(),
  221.                     'numero' => $adresse->getNumero(),
  222.                     'rue' => $adresse->getRue(),
  223.                     'complement' => $adresse->getComplement(),
  224.                     'complement2' => $adresse->getComplement2(),
  225.                     'codePostal' => $cpTxt,
  226.                     'ville' => $villeTxt,
  227.                     'pays' => $paysTxt,
  228.                     'email' => $adresse->getEmail(),
  229.                     'telephone' => $adresse->getTelephone(),
  230.                 ];
  231.                 return new Response(
  232.                     json_encode(['adresse' => $dataAdresse'valide' => '1''url' => '''type' => 'callBackAddAdresse']),
  233.                     200,
  234.                     ['Content-Type' => 'application/json']
  235.                 );
  236.             }
  237.             else {
  238.                 $errors $validator->validate($adresse);
  239.             }
  240.         }
  241.         $rendu     $this->renderView('Adresses/Adresse/ajouter.html.twig',['form' => $form->createView(),  'errors' => $errors,'adresse'=>$adresse]);
  242.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  243.     }
  244.     /**
  245.      * @Route("/adresse/modifier/{page}/{id}", name="dtc_adresse_modifier")
  246.      */
  247.     public function modifierAction($page,Adresse $adresse,Request$requestEntityManagerInterface $em,TranslatorInterface $translator,ValidatorInterface $validator)
  248.     {
  249.         $titre_modal "Modifier adresse de livraison ";
  250.         $user $this->getUser();
  251.         $form   $this->createForm(AdresseType::class, $adresse);
  252.         $errors = [];
  253.         $form->handleRequest($request);
  254.         if ($form->isSubmitted()) {
  255.             if ($form->isValid()) {
  256.                 $em->persist($adresse);
  257.                 $em->flush();
  258.                 $em->refresh($adresse);
  259.                 $villeTxt "";
  260.                 $cpTxt "";
  261.                 $paysTxt "";
  262.                 if(is_object($adresse->getVille())) $villeTxt $adresse->getVille()->getTitre();
  263.                 if(is_object($adresse->getCodePostal())) $cpTxt $adresse->getCodePostal()->getCodePostal();
  264.                 if(is_object($adresse->getPays())) $paysTxt $adresse->getPays()->getTitre();
  265.                 $dataAdresse = [
  266.                     'id' => $adresse->getId(),
  267.                     'libelle' => $adresse->getLibelle(),
  268.                     'prenom' => $adresse->getPrenom(),
  269.                     'nom' => $adresse->getNom(),
  270.                     'numero' => $adresse->getNumero(),
  271.                     'rue' => $adresse->getRue(),
  272.                     'complement' => $adresse->getComplement(),
  273.                     'complement2' => $adresse->getComplement2(),
  274.                     'codePostal' => $cpTxt,
  275.                     'ville' => $villeTxt,
  276.                     'pays' => $paysTxt,
  277.                     'email' => $adresse->getEmail(),
  278.                     'telephone' => $adresse->getTelephone(),
  279.                 ];
  280.                 $callBack "callBackAddAdresse";
  281.                 if($page == "adresses"$callBack "callBackEditAdresse";
  282.                 return new Response(
  283.                     json_encode(['adresse' => $dataAdresse'valide' => '1''url' => '''type' => $callBack]),
  284.                     200,
  285.                     ['Content-Type' => 'application/json']
  286.                 );
  287.             }
  288.             else {
  289.                 $errors $validator->validate($adresse);
  290.             }
  291.         }
  292.         $rendu     $this->renderView('Adresses/Adresse/ajouter.html.twig',['form' => $form->createView(),  'errors' => $errors,'adresse'=>$adresse]);
  293.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  294.     }
  295.     /**
  296.      * @Route("/adresse/supprimer/{page}/{id}", name="dtc_adresse_supprimer")
  297.      */
  298.     public function supprimerAction($page,Adresse $adresse,Request$requestEntityManagerInterface $em,TranslatorInterface $translator,ValidatorInterface $validator)
  299.     {
  300.         $titre_modal $translator->trans("Demande de confirmation");
  301.         $user        $this->getUser();
  302.         if($user->getClient()->getId() != $adresse->getClient()->getId() ) {
  303.             return false;
  304.         }
  305.         $get         $request->query->all();
  306.         $form        $this->createForm(SupprimerAdresseType::class, $adresse);
  307.         $errors      "";
  308.         $form->handleRequest($request);
  309.         if ($form->isSubmitted()) {
  310.             if ($form->isValid()) {
  311.                 $adresse->setVisible(0);
  312.                 $em->persist($adresse);
  313.                 $em->flush();
  314.                 $url "";
  315.                 $callBack "callBackEditAdresse";
  316.                 return new Response(json_encode([ 'valide' => '1''url' => '''type' => $callBack]),200,['Content-Type' => 'application/json']);
  317.             }
  318.             else {
  319.                 $errors $validator->validate($adresse);
  320.                 $rendu  $this->renderView(
  321.                     'FO/Supprimer/supprimer.html.twig',
  322.                     ['form' => $form->createView(), 'errors' => $errors'id' => $id'type' => $type'objet' => $adresse]
  323.                 );
  324.                 return new Response(json_encode(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]));
  325.             }
  326.         }
  327.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'objet' => $adresse]);
  328.         return new Response(json_encode(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]));
  329.     }
  330. }