src/Controller/Adresses/AdresseController.php line 41

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