src/Controller/Clients/ClientController.php line 897

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Clients;
  3. use App\Entity\Adresses\Adresse;
  4. use App\Entity\Articles\Article;
  5. use App\Entity\Articles\Compta;
  6. use App\Entity\Clients\Categorie;
  7. use App\Entity\Clients\Client;
  8. use App\Entity\Clients\HistoriqueClient;
  9. use App\Entity\Clients\Type;
  10. use App\Entity\Ged\Fichier;
  11. use App\Entity\GestionComerciale\ArticleCommande;
  12. use App\Entity\GestionComerciale\Commande;
  13. use App\Entity\Localisation\Zone;
  14. use App\Entity\Notes\Note;
  15. use App\Entity\Remises\Remise;
  16. use App\Entity\Vehicules\VehiculeClient;
  17. use App\Form\Clients\Client2Type;
  18. use App\Form\Clients\ClientType;
  19. use App\Form\Clients\SupprimerClientType;
  20. use App\Library\Datatable\Util\Datatable;
  21. use App\Model\GestionCommerciale\TypeDocumentCommercial;
  22. use App\Security\Voter\EntityVoter;
  23. use App\Service\Clients\ClientCategorieRemiseClientService;
  24. use App\Service\Clients\ClientCategorieService;
  25. use App\Service\Clients\ClientService;
  26. use App\Service\Clients\DocumentClient;
  27. use App\Service\FO\Logo;
  28. use App\Service\GestionComerciale\AcompteService;
  29. use App\Service\GestionComerciale\EmailService;
  30. use App\Service\GestionComerciale\NumerotationDocumentService;
  31. use App\Service\Localisation\ZoneService;
  32. use App\Service\Utilisateur\ColonneTableauService;
  33. use Doctrine\ORM\EntityManagerInterface;
  34. use JMS\Serializer\SerializerBuilder;
  35. use Knp\Component\Pager\PaginatorInterface;
  36. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  37. use Symfony\Component\Form\FormError;
  38. use Symfony\Component\HttpFoundation\JsonResponse;
  39. use Symfony\Component\HttpFoundation\Request;
  40. use Symfony\Component\HttpFoundation\Response;
  41. use Symfony\Component\Routing\Annotation\Route;
  42. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  43. use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
  44. use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
  45. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  46. use Symfony\Component\Serializer\Serializer;
  47. use Symfony\Component\Validator\Validator\ValidatorInterface;
  48. use Symfony\Contracts\Translation\TranslatorInterface;
  49. class ClientController extends AbstractController
  50. {
  51.     /**
  52.      * @Route("/debugsolde/{id}", name="dtc_debug_solde")
  53.      */
  54.     public function debugSoldeAction()
  55.     {
  56.         //echo "<div>TEST</div>";
  57.         //$acompteService = $this->get('dtc.acompte');
  58.         //$soldeClient = $acompteService->getSoldeClientTest($client);
  59.     }
  60.     /**
  61.      * @Route("/client/dupliquer/{id}", name="dtc_client_dupliquer")
  62.      */
  63.     public function dupliquerAction(Request $requestClient $clientEntityManagerInterface $emNumerotationDocumentService $numerotationServiceTranslatorInterface $translator)
  64.     {
  65.         $repoClient $em->getRepository(Client::class);
  66.         $derclient  $repoClient->getDernierClient();
  67.         $derclient  $derclient 1;
  68.         $client_duplique = clone $client;
  69.         //$article_duplique->setId(null);
  70.         $client_duplique->setNom("COPIE ".$client_duplique->getNom());
  71.         $codeCompta "411{$derclient}";
  72.         $codeCompta "C".str_pad($derclient5'0'STR_PAD_LEFT);
  73.         $client->setReference($numerotationService->generer($client));
  74.         $client->setNumeroReference($derclient);
  75.         $client_duplique->setCodeComptable($codeCompta);
  76.         $adresse = new Adresse();
  77.         $adresse->setLibelle('Adresse par défaut');
  78.         $adresse->setLivraisonDefaut(true);
  79.         $adresse->setFacturationDefaut(true);
  80.         $adresse->setFacturationExpeditionDefaut(true);
  81.         $client_duplique->addAdress($adresse);
  82.         $em->persist($client_duplique);
  83.         $em->flush();
  84.         $em->refresh($client_duplique);
  85.         $this->addFlash(
  86.             'notice',
  87.             $translator->trans('Client dupliqué avec succès !')
  88.         );
  89.         return $this->redirectToRoute('dtc_client_modifier', ["id" => $client_duplique->getId()]);
  90.         //return $this->redirectToRoute($url);
  91.         //return $this->redirectToRoute('dtc_client_liste');
  92.     }
  93.     /**
  94.      * @Route("/client/modal/nouveau", name="dtc_client_ajouter_modal")
  95.      */
  96.     public function ajouterModalSimplifieAction(Request                $requestEntityManagerInterface $emNumerotationDocumentService $numerotationService,
  97.                                                 ClientCategorieService $clientCategorieServiceClientCategorieRemiseClientService $clientCategorieRemiseClientService,
  98.                                                 TranslatorInterface    $translatorValidatorInterface $validator
  99.     ) {
  100.         $titre_modal $translator->trans("Nouveau client");
  101.         $client      = new Client;
  102.         $client->setTypeClient($em->getRepository(Type::class)->find(1));
  103.         $france_obj $em->getRepository(Zone::class)->find(370095);
  104.         $user       $this->getUser();
  105.         $client->setUtilisateur($user);
  106.         $adresse = new Adresse();
  107.         $adresse->setLibelle('Adresse par défaut');
  108.         $adresse->setLivraisonDefaut(true);
  109.         $adresse->setFacturationDefaut(true);
  110.         $adresse->setFacturationExpeditionDefaut(true);
  111.         $adresse->setPays($france_obj);
  112.         $client->addAdress($adresse);
  113.         $categories_remise        $request->request->get('categories_remise');
  114.         $categorie_client_enfants $request->request->get('categorie_client_enfants');
  115.         $form      $this->createForm(Client2Type::class, $client);
  116.         $errors    "";
  117.         $errorsSup = [];
  118.         $form->handleRequest($request);
  119.         if ($form->isSubmitted()) {
  120.             if ( ! is_object($adresse->getVille()) or $adresse->getNumero() == "" or $adresse->getRue() == "") {
  121.                 $error = new FormError("Adresse obligatoire (Numéro,Rue,Ville)");
  122.                 $form->get('prenom')->addError($error);
  123.             }
  124.             //if ($form->isValid() && count($categories_remise)>0 && count($categorie_client_enfants)>0) {
  125.             if ($form->isValid()) {
  126.                 $em         $em;
  127.                 $repoClient $em->getRepository(Client::class);
  128.                 $derclient  $repoClient->getDernierClient();
  129.                 $derclient  $derclient 1;
  130.                 $codeCompta "411{$derclient}";
  131.                 $codeCompta "C".str_pad($derclient5'0'STR_PAD_LEFT);
  132.                 $libelle_adresse trim($client->getNom()." ".$client->getPrenom());
  133.                 $adresse->setLibelle($libelle_adresse);
  134.                 $client->setReference($numerotationService->generer($client));
  135.                 $client->setNumeroReference($derclient);
  136.                 $client->setCodeComptable($codeCompta);
  137.                 $client->setPays($adresse->getPays());
  138.                 $client->setCodePostal($adresse->getCodePostal());
  139.                 $client->setVille($adresse->getVille());
  140.                 if ( ! empty($request->request->get('liste_categorie_client_racine'))) {
  141.                     $categorie $em->getRepository(Categorie::class)->find($request->request->get('liste_categorie_client_racine'));
  142.                     if (is_object($categorie)) {
  143.                         $client->setCompta($categorie->getCompta());
  144.                     }
  145.                 }
  146.                 $url '#';
  147.                 $em  $em;
  148.                 $em->persist($client);
  149.                 $em->flush();
  150.                 //$clientCategorieService->sauvegarder($client,$request->request->get('categories'));
  151.                 $clientCategorieService->sauvegarder($client$request->request->get('liste_categorie_client_racine'), $categorie_client_enfants);
  152.                 $clientCategorieRemiseClientService->sauvegarder($client$request->request->get('categories_remise'));
  153.                 $libelle $client->getNom()." ".$client->getPrenom();
  154.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'client''libelle' => $libelle'id_client' => $client->getId()],
  155.                     200,
  156.                     ['Content-Type' => 'application/json']);
  157.             } else {
  158.                 $errors $validator->validate($client);
  159.                 //if(count($categories_remise) == 0) $errorsSup[] = 'Le client n\'a pas de catégorie de remise définie! ';
  160.                 //if(count($categorie_client_enfants) == 0) $errorsSup[] = 'Le client n\'a pas de catégorie définie! ';
  161.                 $rendu $this->renderView(
  162.                     'Clients/Client/ajouter_modal_simplifie.html.twig',
  163.                     ['form' => $form->createView(), 'errors' => $errors'errorsSup' => $errorsSup'client' => $client]
  164.                 );
  165.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  166.             }
  167.         } else {
  168.         }
  169.         $rendu $this->renderView(
  170.             'Clients/Client/ajouter_modal_simplifie.html.twig',
  171.             ['form' => $form->createView(), 'errors' => $errors'errorsSup' => $errorsSup'client' => $client]
  172.         );
  173.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  174.     }
  175.     /**
  176.      * @Route("/client/modal/{id}", name="dtc_client_afficher_modal")
  177.      */
  178.     public function afficherModalAction(Request$requestClient $clientEntityManagerInterface $em,
  179.                                         ClientService $clientService,ClientCategorieRemiseClientService $clientCategorieRemiseClientService,
  180.                                         ClientCategorieService $clientCategorieService,ValidatorInterface $validator,Datatable $datatableTranslatorInterface $translator
  181.     )
  182.     {
  183.         $url $this->generateUrl('dtc_client_modifier', ["id" => $client->getId()]);
  184.         $titre_modal "<a href='" $url "' target='_blank'>" $client->getNom() . "</a>";
  185.         $user $this->getUser();
  186.         //$form = $this->createForm(new ClientType($em), $client);
  187.         $form $this->createForm(Client2Type::class, $client);
  188.         $errors "";
  189.         $form->handleRequest($request);
  190.         if ($form->isSubmitted()) {
  191.             //vérifier quel champs a été modifié pour l'historique
  192.             $clientService->verifierChampsModifier($client);
  193.             $clientCategorieRemiseClientService->sauvegarder($client$request->request->get('categories_remise'));
  194.             if ($form->isValid()) {
  195.                 $url '#';
  196.                 $em->persist($client);
  197.                 $em->flush();
  198.                 //$clientCategorieService->sauvegarder($client,$request->request->get('categories'));
  199.                 $clientCategorieService->sauvegarder($client$request->request->get('liste_categorie_client_racine'), $request->request->get('categorie_client_enfants'));
  200.                 $libelle $client->getPrenom() . " " $client->getNomAvecAdresse();
  201.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'client_modifier''libelle' => $libelle'id_client' => $client->getId()],
  202.                     200,
  203.                     ['Content-Type' => 'application/json']);
  204.             } else {
  205.                 $errors $validator->validate($client);
  206.                 //$rendu = $this->renderView('Clients/Client/afficher_modal.html.twig', array('client'=>$client,'form' => $form->createView(),'errors'=>$errors));
  207.                 $rendu $this->renderView('Clients/Client/ajouter_modal_simplifie.html.twig', ['client' => $client'form' => $form->createView(), 'errors' => $errors]);
  208.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  209.             }
  210.         }
  211.         $param = [];
  212.         $dateDebut = new \DateTime();
  213.         $dateDebut->sub(new \DateInterval('P1Y'));
  214.         $dateFin = new \DateTime();
  215.         $param['date_debut'] = $dateDebut->format("m/Y");
  216.         $param['date_fin'] = $dateFin->format("m/Y");
  217.         $repoCommande $em->getRepository(Commande::class);
  218.         //$valeurs =  $repoCommande->suiviConsommation($param);
  219.         $param['client'] = $client->getId();
  220.         $caMois $repoCommande->caMois($param);
  221.         $this->datatableNotes($client$datatable$translator);
  222.         $this->datatableCommandes($client$datatable$translator);
  223.         //$rendu = $this->renderView('Clients/Client/afficher_modal.html.twig', array("parametres"=>$param,"caMois"=>$caMois,'client'=>$client,'form' => $form->createView(),'errors'=>$errors));
  224.         $rendu $this->renderView(
  225.             'Clients/Client/ajouter_modal_simplifie.html.twig',
  226.             ["parametres" => $param"caMois" => $caMois'client' => $client'form' => $form->createView(), 'errors' => $errors]
  227.         );
  228.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  229.     }
  230.     /**
  231.      * @Route("", name="")
  232.      */
  233.     public function ajouterModalAction(Request                $requestEntityManagerInterface $emNumerotationDocumentService $numerotationService,
  234.                                        ClientCategorieService $clientCategorieServiceClientCategorieRemiseClientService $clientCategorieRemiseClientService,
  235.                                        TranslatorInterface    $translatorValidatorInterface $validator
  236.     ) {
  237.         $titre_modal $translator->trans("Nouveau client");
  238.         $client      = new Client;
  239.         $client->setTypeClient($em->getRepository(Type::class)->find(1));
  240.         $user $this->getUser();
  241.         $client->setUtilisateur($user);
  242.         $adresse = new Adresse();
  243.         $adresse->setLibelle('Adresse par défaut');
  244.         $adresse->setLivraisonDefaut(true);
  245.         $adresse->setFacturationDefaut(true);
  246.         $adresse->setFacturationExpeditionDefaut(true);
  247.         $client->addAdress($adresse);
  248.         $categories_remise        $request->request->get('categories_remise');
  249.         $categorie_client_enfants $request->request->get('categorie_client_enfants');
  250.         $form      $this->createForm(Client2Type::class, $client);
  251.         $errors    "";
  252.         $errorsSup = [];
  253.         $form->handleRequest($request);
  254.         if ($form->isSubmitted()) {
  255.             //if ($form->isValid() && count($categories_remise)>0 && count($categorie_client_enfants)>0) {
  256.             if ($form->isValid()) {
  257.                 $repoClient $em->getRepository(Client::class);
  258.                 $derclient  $repoClient->getDernierClient();
  259.                 $derclient  $derclient 1;
  260.                 $codeCompta "411{$derclient}";
  261.                 $codeCompta "C".str_pad($derclient5'0'STR_PAD_LEFT);
  262.                 $client->setReference($numerotationService->generer($client));
  263.                 $client->setNumeroReference($derclient);
  264.                 $client->setCodeComptable($codeCompta);
  265.                 $client->setPays($adresse->getPays());
  266.                 $client->setCodePostal($adresse->getCodePostal());
  267.                 $client->setVille($adresse->getVille());
  268.                 $url '#';
  269.                 $em  $em;
  270.                 $em->persist($client);
  271.                 $em->flush();
  272.                 //$clientCategorieService->sauvegarder($client,$request->request->get('categories'));
  273.                 $clientCategorieService->sauvegarder($client$request->request->get('liste_categorie_client_racine'), $categorie_client_enfants);
  274.                 $clientCategorieRemiseClientService->sauvegarder($client$request->request->get('categories_remise'));
  275.                 $libelle $client->getNom()." ".$client->getPrenom();
  276.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url'type' => 'client''libelle' => $libelle'id_client' => $client->getId()],
  277.                                         200,
  278.                                         ['Content-Type' => 'application/json']);
  279.             } else {
  280.                 $errors $validator->validate($client);
  281.                 //if(count($categories_remise) == 0) $errorsSup[] = 'Le client n\'a pas de catégorie de remise définie! ';
  282.                 //if(count($categorie_client_enfants) == 0) $errorsSup[] = 'Le client n\'a pas de catégorie définie! ';
  283.                 $rendu $this->renderView('Clients/Client/ajouter_modal.html.twig', ['form' => $form->createView(), 'errors' => $errors'errorsSup' => $errorsSup'client' => $client]
  284.                 );
  285.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  286.             }
  287.         } else {
  288.         }
  289.         $rendu $this->renderView('Clients/Client/ajouter_modal.html.twig', ['form' => $form->createView(), 'errors' => $errors'errorsSup' => $errorsSup'client' => $client]);
  290.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  291.     }
  292.     /**
  293.      * @Route("/client/nouveau", name="dtc_client_ajouter")
  294.      */
  295.     public function ajouterAction(Request                $requestEntityManagerInterface $emNumerotationDocumentService $numerotationServiceLogo $logoDocumentClient $documentClient,
  296.                                   ClientCategorieService $clientCategorieServiceClientCategorieRemiseClientService $clientCategorieRemiseClientServiceClientService $clientService,
  297.                                   TranslatorInterface    $translatorValidatorInterface $validator
  298.     ) {
  299.         $user   $this->getUser();
  300.         $client = new Client;
  301.         $repo_client $em->getRepository(Client::class);
  302.         $client->setTypeClient($em->getRepository(Type::class)->find(1));
  303.         $client->setCompta($em->getRepository(Compta::class)->find(42));
  304.         $client->setUtilisateur($user);
  305.         $adresse = new Adresse();
  306.         $adresse->setLibelle('Adresse par défaut');
  307.         $adresse->setLivraisonDefaut(true);
  308.         $adresse->setFacturationDefaut(true);
  309.         $client->addAdress($adresse);
  310.         $categories_remise        $request->request->get('categories_remise');
  311.         $categorie_client_enfants $request->request->get('categorie_client_enfants');
  312.         $form      $this->createForm(Client2Type::class, $client);
  313.         $errors    "";
  314.         $errorsSup = [];
  315.         $form->handleRequest($request);
  316.         if ($form->isSubmitted()) {
  317.             $tokenP $request->request->get('tokenPicture');
  318.             $email_existe false;
  319.             $client_email $repo_client->findOneBy(["email" => $client->getEmail()]);
  320.             if (is_object($client_email)) {
  321.                 $email_existe true;
  322.             }
  323.             if ($client->getEmail() == "") {
  324.                 $email_existe false;
  325.             }
  326.             //if ($form->isValid() && !$email_existe && count($categories_remise)>0 && count($categorie_client_enfants) > 0 ) {
  327.             if ($form->isValid() && ! $email_existe) {
  328.                 $repoClient $em->getRepository(Client::class);
  329.                 $derclient  $repoClient->getDernierClient();
  330.                 $derclient  $derclient 1;
  331.                 $codeCompta "411{$derclient}";
  332.                 $codeCompta "C".str_pad($derclient5'0'STR_PAD_LEFT);
  333.                 $client->setReference($numerotationService->generer($client));
  334.                 $client->setNumeroReference($derclient);
  335.                 //$client->setReference($derclient);
  336.                 $client->setCodeComptable($codeCompta);
  337.                 $post $request->request->all();
  338.                 if (array_key_exists('joursLivraison'$post)) {
  339.                     $serialize_jours_livraison serialize($post["joursLivraison"]);
  340.                     $client->setJoursLivraison($serialize_jours_livraison);
  341.                 }
  342.                 $adresses $client->getAdresses();
  343.                 foreach ($adresses as $adresse) {
  344.                     if ( ! is_object($adresse->getPays())) {
  345.                         //echo "ERREUR PAYS";
  346.                         if (array_key_exists('paysSelect'$post) && $post["paysSelect"] != '') {
  347.                             $post["paysSelect"] = substr($post["paysSelect"], 1, -1);
  348.                             $typePays $em->getRepository(\App\Entity\Localisation\Type::class)->find(1);
  349.                             $pays     = new Zone();
  350.                             $pays->setTitre($post["paysSelect"]);
  351.                             $pays->setTitreFormat($post["paysSelect"]);
  352.                             $pays->setType($typePays);
  353.                             $pays->setUtilisateur($user);
  354.                             $em->persist($pays);
  355.                             $adresse->setPays($pays);
  356.                             $post $request->request->all();
  357.                         } else {
  358.                             $adresse->setPays(null);
  359.                         }
  360.                     } else {
  361.                         $pays $adresse->getPays();
  362.                     }
  363.                     if ( ! is_object($adresse->getVille())) {
  364.                         if (array_key_exists('villeSelectaj'$post) && $post["villeSelect"] != '') {
  365.                             $post["villeSelect"]      = substr($post["villeSelect"], 1, -1);
  366.                             $post["codePostalSelect"] = substr($post["codePostalSelect"], 1, -1);
  367.                             $typeVille $em->getRepository(Type::class)->find(4);
  368.                             $ville     = new Zone();
  369.                             $ville->setTitre($post["villeSelect"]);
  370.                             $ville->setTitreFormat($post["villeSelect"]);
  371.                             $ville->setCodePostal($post["codePostalSelect"]);
  372.                             $ville->setType($typeVille);
  373.                             $ville->setUtilisateur($user);
  374.                             $em->persist($ville);
  375.                             $adresse->setVille($ville);
  376.                             $adresse->setCodePostal($ville);
  377.                             $post $request->request->all();
  378.                         } else {
  379.                             $adresse->setVille(null);
  380.                             $adresse->setCodePostal(null);
  381.                         }
  382.                     } else {
  383.                         $ville $adresse->getVille();
  384.                     }
  385.                 }
  386.                 $em->persist($client);
  387.                 $em->flush();
  388.                 $em->refresh($client);
  389.                 //$clientCategorieService->sauvegarder($client,$request->request->get('categories'));
  390.                 $clientCategorieService->sauvegarder($client$request->request->get('liste_categorie_client_racine'), $categorie_client_enfants);
  391.                 $clientCategorieRemiseClientService->sauvegarder($client$request->request->get('categories_remise'));
  392.                 $logo->sauvegarder($client'client'$tokenP);
  393.                 $documentClient->sauvegarder($client'documents'$tokenP);
  394.                 $this->addFlash(
  395.                     'notice',
  396.                     $translator->trans('Client ajouté avec succès !')
  397.                 );
  398.                 $message_historique            = [];
  399.                 $message_historique["titre"]   = "Création d'un client";
  400.                 $message_historique["message"] = trim($client->getPrenom()." ".$client->getNom());
  401.                 $clientService->creerHistorique($client'defaut'$message_historique);
  402.                 if ($client->getEmail() != "") {
  403.                     if ($this->getParameter('domaine_prestashop') != '') {
  404.                         @fopen('http://'.$this->getParameter('domaine_prestashop').'/67PHEAuaps4P4h3/clients.php?id_client='.$client->getId(), 'r');
  405.                     }
  406.                 }
  407.                 return $this->redirectToRoute('dtc_client_modifier', ["id" => $client->getId()]);
  408.                 //return $this->redirectToRoute('dtc_client_liste');
  409.             } else {
  410.                 $errors $validator->validate($client);
  411.                 if ($email_existe) {
  412.                     $errorsSup[] = 'Adresse email non disponible car elle appartient à '.$client_email->getNom()." ".$client_email->getPrenom()." (".$client_email->getReference().")";
  413.                 }
  414.                 //if(count($categories_remise) == 0) $errorsSup[] = 'Le client n\'a pas de catégorie de remise définie! ';
  415.                 //if(count($categorie_client_enfants) == 0) $errorsSup[] = 'Le client n\'a pas de catégorie définie! ';
  416.             }
  417.         }
  418.         return $this->render('Clients/Client/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors'errorsSup' => $errorsSup]);
  419.     }
  420.     /**
  421.      * @Route("/client/supprimer/multiple", name="dtc_client_liste_supprimer")
  422.      */
  423.     public function supprimerMultipleAction(Request $requestEntityManagerInterface $emTranslatorInterface $translator)
  424.     {
  425.         $url $this->generateUrl('dtc_client_liste', []);
  426.         return new JsonResponse(['url' => $url'valide' => '1']);
  427.         $data $request->get('dataTables');
  428.         $ids  $data['actions'];
  429.         $em   $em;
  430.         $repo $em->getRepository(Client::class);
  431.         for ($i 0$i count($ids); $i++) {
  432.             $v $repo->find($ids[$i]);
  433.             if (is_object($v)) {
  434.                 $em->remove($v);
  435.             }
  436.         }
  437.         $em->flush();
  438.         $this->addFlash(
  439.             'notice',
  440.             $translator->trans('Clients supprimés avec succès !')
  441.         );
  442.         $url $this->generateUrl('dtc_client_liste', []);
  443.         return new JsonResponse(['url' => $url'valide' => '1']);
  444.     }
  445.     /**
  446.      * @Route("/client/supprimer/{id}", name="dtc_client_supprimer")
  447.      */
  448.     public function supprimerAction(Request $requestClient $clientEntityManagerInterface $emTranslatorInterface $translatorValidatorInterface $validator)
  449.     {
  450.         $titre_modal $translator->trans("Demande de confirmation");
  451.         $user        $this->getUser();
  452.         $form   $this->createForm(SupprimerClientType::class, $client);
  453.         $errors "";
  454.         $form->handleRequest($request);
  455.         if ($form->isSubmitted()) {
  456.             if ($form->isValid()) {
  457.                 $chaine "XXXXXXX";
  458.                 $client->setNom($chaine);
  459.                 $client->setPrenom($chaine);
  460.                 //$client->setRaisonSociale($chaine);
  461.                 $client->setTelephone($chaine);
  462.                 $client->setTelephone2($chaine);
  463.                 $client->setEmail($chaine);
  464.                 $client->setNumTva($chaine);
  465.                 $client->setCommentaire($chaine);
  466.                 $client->setLogo(null);
  467.                 $client->setPays(null);
  468.                 $client->setVille(null);
  469.                 $client->setCodePostal(null);
  470.                 $client->setSiren($chaine);
  471.                 $client->setSiret($chaine);
  472.                 $client->setIban($chaine);
  473.                 $client->setBic($chaine);
  474.                 $client->setBanque($chaine);
  475.                 $client->setNCpteBanque($chaine);
  476.                 $client->setTva(null);
  477.                 $client->setCivilite(null);
  478.                 $client->setDateSuppression(new \Datetime());
  479.                 $em->persist($client);
  480.                 //$em->remove($client);
  481.                 $em->flush();
  482.                 $this->addFlash('notice'$translator->trans('Client supprimé avec succès !'));
  483.                 $url $this->generateUrl('dtc_client_liste', []);
  484.                 return new JsonResponse(['rendu' => '''valide' => '1''url' => $url]);
  485.             } else {
  486.                 $errors $validator->validate($client);
  487.                 $rendu  $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors'id' => $client->getId(), 'type' => '']);
  488.                 return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  489.             }
  490.         }
  491.         $rendu $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $client->getId(), 'type' => '''errors' => $errors]);
  492.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  493.     }
  494.     /**
  495.      * @Route("/client/modifier/{id}", name="dtc_client_modifier")
  496.      * @Route("/client/voir/{id}", name="dtc_client_voir")
  497.      */
  498.     public function modifierAction(Request            $requestClient $clientEntityManagerInterface $emClientService $clientServiceClientCategorieService $clientCategorieService,
  499.                                    ClientCategorieRemiseClientService $clientCategorieRemiseClientServiceTranslatorInterface $translator,
  500.                                    ValidatorInterface $validatorZoneService $zoneServiceLogo $logoServiceDocumentClient $documentServiceDatatable $datatableEmailService $emailService
  501.     ) {
  502.         $user $this->getUser();
  503.         $client->setUtilisateur($user);
  504.         $form      $this->createForm(ClientType::class, $client);
  505.         $errors    "";
  506.         $errorsSup = [];
  507.         $form->handleRequest($request);
  508.         $categories_remise        $request->request->get('categories_remise');
  509.         $categorie_client_enfants $request->request->get('categorie_client_enfants');
  510.         $repoDossier $em->getRepository(Fichier::class);
  511.         $parent      $repoDossier->find(2);
  512.         $fichier     $repoDossier->findOneBy(["client" => $client"type" => "dossier""parent" => $parent]);
  513.         if ( ! is_object($fichier)) {
  514.             $fichier = new Fichier();
  515.             $fichier->setUtilisateur($user);
  516.             $fichier->setType("dossier");
  517.             $fichier->setRenomme(true);
  518.             $fichier->setSupprimable(false);
  519.             $fichier->setModifiable(false);
  520.             $fichier->setClient($client);
  521.             $fichier->setParent($parent);
  522.             $libelle_ged trim($client->getReference());
  523.             $fichier->setLIbelle($libelle_ged);
  524.             $em->persist($fichier);
  525.             $enfant2 = new Fichier();
  526.             $enfant2->setUtilisateur($user);
  527.             $enfant2->setType("dossier");
  528.             $enfant2->setRenomme(true);
  529.             $enfant2->setSupprimable(false);
  530.             $enfant2->setModifiable(false);
  531.             $enfant2->setClient($client);
  532.             $enfant2->setParent($fichier);
  533.             $enfant2->setLibelle("Documents");
  534.             $em->persist($enfant2);
  535.             $enfant3 = new Fichier();
  536.             $enfant3->setUtilisateur($user);
  537.             $enfant3->setType("dossier");
  538.             $enfant3->setRenomme(true);
  539.             $enfant3->setSupprimable(false);
  540.             $enfant3->setModifiable(false);
  541.             $enfant3->setClient($client);
  542.             $enfant3->setParent($fichier);
  543.             $enfant3->setLibelle("Divers");
  544.             $em->persist($enfant3);
  545.             $em->flush();
  546.         }
  547.         /*
  548.         $repo_categorie_remise = $em->getRepository('DTCRemisesBundle:CategorieRemiseClient');
  549.         //$categories = $repo_categorie_remise->getCategorieRemiseClient();
  550.         *
  551.         */
  552.         if ($form->isSubmitted()) {
  553.             //vérifier quel champs a été modifié pour l'historique
  554.             $clientService->verifierChampsModifier($client);
  555.             $repo_client $em->getRepository(Client::class);
  556.             $clientCategorieService->sauvegarder($client$request->request->get('liste_categorie_client_racine'), $request->request->get('categorie_client_enfants'));
  557.             $clientCategorieRemiseClientService->sauvegarder($client$categories_remise);
  558.             $email_existe false;
  559.             $client_email $repo_client->emailExiste($client);
  560.             if (is_object($client_email)) {
  561.                 $email_existe true;
  562.             } else {
  563.                 $email_existe false;
  564.             }
  565.             if ($client->getEmail() == "") {
  566.                 $email_existe false;
  567.             }
  568.             $a_des_enfants false;
  569.             if ( ! $client->getGroupe()) {
  570.                 $repo_client   $em->getRepository(Client::class);
  571.                 $total_enfants $repo_client->getTotalEnfantClient($client);
  572.                 if ($total_enfants["total"] > 0) {
  573.                     $a_des_enfants true;
  574.                     $client->setGroupe(true);
  575.                 }
  576.             }
  577.             //if ($form->isValid() && !$email_existe && count($categories_remise)>0 && count($categorie_client_enfants) > 0 ) {
  578.             if ($form->isValid() && ! $email_existe && ! $a_des_enfants) {
  579.                 //if ($form->isValid() && count($categories_remise)>0 && count($categorie_client_enfants)>0 ) {
  580.                 $droit $this->isGranted(EntityVoter::UPDATEClient::class);
  581.                 if ( ! $droit) {
  582.                     return $this->redirectToRoute('dtc_client_modifier', ["id" => $client->getId()]);
  583.                 }
  584.                 if ($client->getPrenom() == "") {
  585.                     $client->setPrenom("  ");
  586.                 }
  587.                 if ($client->getNom() == "") {
  588.                     $client->setNom("  ");
  589.                 }
  590.                 $post $request->request->all();
  591.                 if (array_key_exists('joursLivraison'$post)) {
  592.                     $serialize_jours_livraison serialize($post["joursLivraison"]);
  593.                     $client->setJoursLivraison($serialize_jours_livraison);
  594.                 }
  595.                 $em->persist($client);
  596.                 $em->flush();
  597.                 //echo    count($client->getCategorieRemiseClientClient());
  598.                 /*
  599.                 $clientCategorieService = $this->container->get('dtc.clientcategorie');
  600.                 $clientCategorieService->sauvegarder($client,$request->request->get('liste_categorie_client_racine'),$request->request->get('categorie_client_enfants'));
  601.                 $clientCategorieRemiseClientService = $this->container->get('dtc.clientcategorieremiseclient');
  602.                 $clientCategorieRemiseClientService->sauvegarder($client,$categories_remise);
  603.                 */
  604.                 $villeSelect      $request->request->get('villeSelect');
  605.                 $codePostalSelect $request->request->get('codePostalSelect');
  606.                 //echo $villeSelect.' - '.$codePostalSelect;
  607.                 $zoneService->sauvegarder($client'client', ['ville' => $request->request->get('villeSelect'), 'codePostal' => $request->request->get('codePostalSelect')]);
  608.                 $logoService->sauvegarder($client'client');
  609.                 $documentService->sauvegarder($client'documents');
  610.                 $this->addFlash('notice'$translator->trans('Client sauvegardé avec succès !!'));
  611.                 $message_historique            = [];
  612.                 $message_historique["titre"]   = "Modification du client";
  613.                 $message_historique["message"] = trim($client->getPrenom()." ".$client->getNom());
  614.                 $clientService->creerHistorique($client'defaut'$message_historique);
  615.                 if ($client->getEmail() != "") {
  616.                     if ($this->getParameter('domaine_prestashop') != '') {
  617.                         @fopen('http://'.$this->getParameter('domaine_prestashop').'/67PHEAuaps4P4h3/clients.php?id_client='.$client->getId(), 'r');
  618.                     }
  619.                 }
  620.                 return $this->redirectToRoute('dtc_client_modifier', ["id" => $client->getId()]);
  621.             } else {
  622.                 //$errors = array();
  623.                 $errors $validator->validate($client);
  624.                 if ($email_existe) {
  625.                     $errorsSup[] = 'Adresse email non disponible car elle appartient à '.$client_email->getNom()." ".$client_email->getPrenom()." (".$client_email->getReference().")";
  626.                 }
  627.                 if ($a_des_enfants) {
  628.                     $errorsSup[] = 'Le client a encore des enfants, il est obligatoirement un groupe';
  629.                 }
  630.                 //if(count($categorie_client_enfants) == 0) $errorsSup[] = 'Le client n\'a pas de catégorie définie! ';
  631.             }
  632.         }
  633.         $this->datatableVehicules($client$datatable$translator);
  634.         $this->datatableCommandes($client$datatable$translator);
  635.         $this->datatableRemises($client$datatable$translator);
  636.         $this->datatableNotes($client$datatable$translator);
  637.         $modal $request->query->get('modal');
  638.         $caMois = [];
  639.         $param  $request->query->all();
  640.         if ($request->isMethod('GET') and array_key_exists('operation'$param) and $param["operation"] == "stats") {
  641.         } else {
  642.             $param     = [];
  643.             $dateDebut = new \DateTime();
  644.             $dateDebut->sub(new \DateInterval('P1Y'));
  645.             $dateFin = new \DateTime();
  646.             $param['date_debut'] = $dateDebut->format("m/Y");
  647.             $param['date_fin']   = $dateFin->format("m/Y");
  648.             $param['n1']         = 0;
  649.         }
  650.         $repoCommande $em->getRepository(Commande::class);
  651.         //$valeurs =  $repoCommande->suiviConsommation($param);
  652.         $param['client'] = $client->getId();
  653.         $caMois          $repoCommande->caMois($param);
  654.         //print_r($caMois);
  655.         $caAnnee          $repoCommande->caAnnee($client);
  656.         $caAnneeN1        $repoCommande->caAnneeN1($client);
  657.         $date1ereCommande $repoCommande->getDate1ereCommandeClient($client);
  658.         if ($modal != 1) {
  659.             return $this->render('Clients/Client/modifier.html.twig', [
  660.                 'form'             => $form->createView(),
  661.                 'errors'           => $errors,
  662.                 'client'           => $client,
  663.                 "parametres"       => $param,
  664.                 "caMois"           => $caMois,
  665.                 'errorsSup'        => $errorsSup,
  666.                 'caAnnee'          => $caAnnee,
  667.                 'caAnneeN1'        => $caAnneeN1,
  668.                 'date1ereCommande' => $date1ereCommande,
  669.                 //'connexionSmtp' => $emailService->getConnexionSmtpClient($client)
  670.             ]);
  671.         } else {
  672.             $titre_modal 'Client '.$client->getPrenom().' '.$client->getNom();
  673.             $rendu       $this->renderView('Clients/Client/ajouter_modal2.html.twig', [
  674.                 'form'             => $form->createView(),
  675.                 'errors'           => $errors,
  676.                 'client'           => $client,
  677.                 'errorsSup'        => $errorsSup,
  678.                 'caAnnee'          => $caAnnee,
  679.                 'caAnneeN1'        => $caAnneeN1,
  680.                 'date1ereCommande' => $date1ereCommande,
  681.             ]);
  682.             return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal]);
  683.         }
  684.     }
  685.     /**
  686.      * @Route("/client", name="dtc_client_liste")
  687.      * @Route("/parc-materiel/{id}/{type}", name="dtc_parc_materiel_liste")
  688.      * @Route("/frais-port-fournisseur/{id}/{type}", name="dtc_fournisseur_frais_port_liste")
  689.      * @Route("/contact/{id}/{type}", name="dtc_contact_liste")
  690.      */
  691.     public function listerAction(Request $requestEntityManagerInterface $emColonneTableauService $serviceColonneTableauDatatable $datatableTranslatorInterface $translator)
  692.     {
  693.         $tableau_class_cellule[] = ["className" => " colonne_id""targets" => [0], "visible" => false"orderable" => false"searchable" => false];
  694.         $tableau_class_cellule[] = [
  695.             "className" => "visible_export colonne_id",
  696.             "targets"   => [1],
  697.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "id"),
  698.         ];
  699.         $tableau_class_cellule[] = [
  700.             "className" => "visible_export colonne_id",
  701.             "targets"   => [2],
  702.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "logo"),
  703.         ];
  704.         $tableau_class_cellule[] = [
  705.             "className" => "visible_export colonne_id",
  706.             "targets"   => [3],
  707.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "reference"),
  708.         ];
  709.         $tableau_class_cellule[] = [
  710.             "className" => "visible_export colonne_id",
  711.             "targets"   => [4],
  712.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "nom"),
  713.         ];
  714.         $tableau_class_cellule[] = [
  715.             "className" => "visible_export colonne_id",
  716.             "targets"   => [5],
  717.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "prenom"),
  718.         ];
  719.         $tableau_class_cellule[] = [
  720.             "className" => "visible_export colonne_id",
  721.             "targets"   => [6],
  722.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "ville"),
  723.         ];
  724.         $tableau_class_cellule[] = [
  725.             "className" => "visible_export colonne_id",
  726.             "targets"   => [7],
  727.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "codePostal"),
  728.         ];
  729.         $tableau_class_cellule[] = [
  730.             "className" => "visible_export colonne_id",
  731.             "targets"   => [8],
  732.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "pays"),
  733.         ];
  734.         $tableau_class_cellule[] = [
  735.             "className" => "visible_export colonne_id",
  736.             "targets"   => [9],
  737.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "telephone"),
  738.         ];
  739.         $tableau_class_cellule[] = [
  740.             "className" => "visible_export colonne_id",
  741.             "targets"   => [10],
  742.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "telephone2"),
  743.         ];
  744.         $tableau_class_cellule[] = [
  745.             "className" => "visible_export colonne_id",
  746.             "targets"   => [11],
  747.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "email"),
  748.         ];
  749.         $tableau_class_cellule[] = [
  750.             "className" => "visible_export colonne_id",
  751.             "targets"   => [12],
  752.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Client::class, "tva"),
  753.         ];
  754.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [13], "visible" => true];
  755.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id text-center""targets" => [14], "visible" => true];
  756.         $this->datatable($request$datatable$translator);
  757.         $categorie_enfants       = [];
  758.         $repo_categorie_client   $em->getRepository(Categorie::class);
  759.         $categorie_client_racine $repo_categorie_client->findBy(["modifiable" => 0]);
  760.         $param $request->query->all();
  761.         if (array_key_exists('categorie_client'$param) and $param["categorie_client"] > 0) {
  762.             $parent $repo_categorie_client->find($param["categorie_client"]);
  763.             if (is_object($parent)) {
  764.                 $categorie_enfants $repo_categorie_client->findBy(["categorieParent" => $parent]);
  765.             }
  766.         }
  767.         $parametres = [];
  768.         //$parametres["parametres"] = $param;
  769.         return $this->render('Clients/Client/lister.html.twig', [
  770.             'parametres'            => $param,
  771.             "categorie_client"      => $categorie_client_racine,
  772.             "sous_categorie_client" => $categorie_enfants,
  773.             'tableauClassColonne'   => $tableau_class_cellule,
  774.         ]);
  775.     }
  776.     /**
  777.      * set datatable configs
  778.      *
  779.      * @return \App\Library\Datatable\Util\Datatable
  780.      */
  781.     private function datatable(Request $requestDatatable $datatableTranslatorInterface $translator)
  782.     {
  783.         $param $request->query->all();
  784.         $datatable->setEntity(Client::class, "x")
  785.                   ->setFields(
  786.                       [
  787.                           $translator->trans("ID")          => 'x.id',
  788.                           $translator->trans("Logo")        => 'x.logo',
  789.                           $translator->trans("Réf")         => 'x.reference',
  790.                           $translator->trans("Nom")         => 'x.nom',
  791.                           $translator->trans("Prénom")      => 'x.prenom',
  792.                           $translator->trans("Ville")       => 'v.titre',
  793.                           $translator->trans("CP")          => 'cp.codePostal',
  794.                           $translator->trans("Pays")        => 'p.titre',
  795.                           $translator->trans("Téléphone")   => 'x.telephone',
  796.                           $translator->trans("Téléphone 2") => 'x.telephone2',
  797.                           $translator->trans("Email")       => 'x.email',
  798.                           $translator->trans("TVA")         => 'x.numTva',
  799.                           $translator->trans("Catégorie")   => 'x.id',
  800.                           $translator->trans("Actions") => 'x.id',
  801.                           "_identifier_"                => 'x.id',
  802.                       ]
  803.                   )
  804.                   ->addJoin('x.ville''v'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  805.                   ->addJoin('x.pays''p'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  806.                   ->addJoin('x.codePostal''cp'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  807.                   ->addJoin('x.typeClient''tp'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  808.                   ->setRenderers(
  809.                       [
  810.                           => [
  811.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  812.                               'params' => [
  813.                                   'edit_route' => 'dtc_client_modifier',
  814.                               ],
  815.                           ],
  816.                           => [
  817.                               'view'   => 'FO/DataTable/logo.html.twig',
  818.                               'params' => [
  819.                                   'edit_route' => 'dtc_client_modifier',
  820.                               ],
  821.                           ],
  822.                           => [
  823.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  824.                               'params' => [
  825.                                   'edit_route' => 'dtc_client_modifier',
  826.                               ],
  827.                           ],
  828.                           12 => [
  829.                               'view'   => 'FO/DataTable/categorie_client.html.twig',
  830.                               'params' => [],
  831.                           ],
  832.                           13 => [
  833.                               'view'   => 'FO/DataTable/actions.html.twig',
  834.                               'params' => [
  835.                                   'edit_route'           => 'dtc_client_modifier',
  836.                                   'dupliquer_route'      => 'dtc_client_dupliquer',
  837.                                   'supprimer_route'      => 'dtc_client_supprimer',
  838.                                   'objet'                => Client::class,
  839.                                   'afficher_route_popin' => 'dtc_client_afficher_modal',
  840.                               ],
  841.                           ],
  842.                       ]
  843.                   )
  844.                   ->setMultiple(
  845.                       [
  846.                           'delete' => [
  847.                               'title' => 'Non disponible',
  848.                               'route' => 'dtc_client_liste_supprimer',
  849.                           ],
  850.                       ]
  851.                   )
  852.             //->setFilteringType(array(6 => 'e',5 => 'e'))
  853.                   ->setFilteringType([=> 'e'=> 'e'=> 'e'])
  854.                   ->setOrder("x.nom""asc")
  855.                   ->setSearch(true)
  856.                   ->setSearchFields([2345678910]);
  857.         /*
  858.            ->setWhere(
  859.                          'x.commande = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial',
  860.                          array('objet' => $objet,'typeDocumentCommercial' => TypeDocumentCommercial::ORDREREPARATION)
  861.                     )
  862.          */
  863.         $where      "";
  864.         $parameters = [];
  865.         if (array_key_exists('parametres'$param)) {
  866.             if (array_key_exists('categorie_client'$param["parametres"]) and $param["parametres"]["categorie_client"] > 0) {
  867.                 //echo "AZERTYUI";
  868.                 $datatable->addJoin('x.clientCategorie''cc'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  869.                 $datatable->addJoin('cc.categorie''catC'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  870.                 $parameters["categorie"] = $param["parametres"]["categorie_client"];
  871.                 $where                   .= "catC = :categorie";
  872.                 if (array_key_exists('sous_categorie_client'$param["parametres"]) and $param["parametres"]["sous_categorie_client"] > 0) {
  873.                     $datatable->addJoin('x.clientCategorie''cc2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  874.                     $datatable->addJoin('cc2.categorie''catC2'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
  875.                     $parameters["sous_categorie"] = $param["parametres"]["sous_categorie_client"];
  876.                     $where                        .= " and catC2 = :sous_categorie";
  877.                 }
  878.             }
  879.             if (array_key_exists('doublons'$param["parametres"])) {
  880.                 $this->creerDoublons();
  881.                 if ($where != '') {
  882.                     $where .= ' and ';
  883.                 }
  884.                 $where .= 'x.doublon = 1';
  885.             }
  886.             if (array_key_exists('archive'$param["parametres"])) {
  887.                 if ($where != '') {
  888.                     $where .= ' and ';
  889.                 }
  890.                 $where                 .= '(x.archive = :archive)';
  891.                 $parameters["archive"] = 1;
  892.             }
  893.         } else {
  894.             if ($where != '') {
  895.                 $where .= ' and ';
  896.             }
  897.             $where                 .= '(x.archive = :archive or x.archive is NULL)';
  898.             $parameters["archive"] = 0;
  899.         }
  900.         if ($where != '') {
  901.             //echo $where;
  902.             $datatable->setWhere($where$parameters);
  903.         }
  904.         //$datatable->setSearchFields(array(0,2));
  905.         return $datatable;
  906.     }
  907.     private function creerDoublons(EntityManagerInterface $em)
  908.     {
  909.         $repo_client $em->getRepository(Client::class);
  910.         $conn        $em->getConnection();
  911.         $sql         'UPDATE client__client SET doublon = NULL WHERE doublon = 1';
  912.         $tmp         $conn->prepare($sql);
  913.         $tmp->executeQuery();
  914.         $sql 'SELECT count(id) as total, id, nom, prenom FROM `client__client` WHERE 1 GROUP BY nom, prenom having total > 1';
  915.         $tmp $conn->prepare($sql);
  916.         $tmp $tmp->executeQuery();
  917.         foreach ($tmp->fetchAllAssociative() as $res) {
  918.             $clients $repo_client->findBy(['nom' => $res['nom'], 'prenom' => $res['prenom']]);
  919.             foreach ($clients as $client) {
  920.                 $client->setDoublon(true);
  921.                 $em->persist($client);
  922.             }
  923.         }
  924.         $em->flush();
  925.     }
  926.     /**
  927.      * Grid action
  928.      * @return Response
  929.      */
  930.     /**
  931.      * @Route("/client/grid", name="dtc_client_liste_grid")
  932.      */
  933.     public function gridAction(Request $requestDatatable $datatableTranslatorInterface $translator)
  934.     {
  935.         return $this->datatable($request$datatable$translator)->execute();
  936.     }
  937.     /**
  938.      * @Route("/client/recherche", name="dtc_client_recherche")
  939.      */
  940.     public function rechercheAction(Request $requestEntityManagerInterface $emPaginatorInterface $paginatorAcompteService $serviceAcompte)
  941.     {
  942.         $q            $request->query->get('q');
  943.         $parent       $request->query->get('parent');
  944.         $repo         $em->getRepository(Client::class);
  945.         $repo_adresse $em->getRepository(Adresse::class);
  946.         $results      $repo->getRechercheClient(trim($q), $parent);
  947.         $tabClient    = [];
  948.         for ($i 0$i count($results); $i++) {
  949.             if (is_null($results[$i]["cmp_id"]) or $results[$i]["cmp_id"] == 0) {
  950.                 $c $repo->find($results[$i]["id"]);
  951.                 //$montant = $serviceAcompte->getMontantRembousement($c);
  952.                 $montant $serviceAcompte->getSoldeClient($c);
  953.                 //$montant = str_replace("-","",$montant);
  954.                 //echo "JJJJ ".$results[$i]["reference"];
  955.             } else {
  956.                 $montant 0;
  957.             }
  958.             $results[$i]["avoir"] = round($montant2);
  959.             //print_r($results[$i]);
  960.             //echo "<div><hr/></div>";
  961.         }
  962.         $pagination $paginator->paginate(
  963.             $results/* query NOT result */
  964.             $request->query->getInt('page'1)/*page number*/,
  965.             10/*limit per page*/
  966.         );
  967.         $pagination_results $pagination->getItems();
  968.         if (count($pagination_results) > 0) {
  969.             for ($i 0$i count($pagination_results); $i++) {
  970.                 $client_obj $repo->find($pagination_results[$i]["id"]);
  971.                 if (is_object($client_obj)) {
  972.                     $adresse         $repo_adresse->findOneBy(['client' => $client_obj'visible' => 1'facturationDefaut' => 1]);
  973.                     $libelle_adresse "";
  974.                     if (is_object($adresse)) {
  975.                         if (is_object($adresse->getCodePostal())) {
  976.                             $libelle_adresse .= " ".$adresse->getCodePostal()->getCodePostal();
  977.                         }
  978.                         if (is_object($adresse->getVille())) {
  979.                             $libelle_adresse .= " ".$adresse->getVille()->getTitre();
  980.                         }
  981.                     } else {
  982.                         $adresse $repo_adresse->findOneBy(['client' => $client_obj'visible' => 1]);
  983.                         if (is_object($adresse) && is_object($adresse->getCodePostal())) {
  984.                             $libelle_adresse .= " ".$adresse->getCodePostal()->getCodePostal();
  985.                         }
  986.                         if (is_object($adresse) && is_object($adresse->getVille())) {
  987.                             $libelle_adresse .= " ".$adresse->getVille()->getTitre();
  988.                         }
  989.                     }
  990.                     $pagination_results[$i]["libelle"] = trim($pagination_results[$i]["libelle"]." (".$pagination_results[$i]["reference"]." ".trim($libelle_adresse).")");
  991.                 }
  992.             }
  993.         }
  994.         $option_placeholde = ["libelle" => "Sélectionnez""id" => ""];
  995.         if ($request->query->getInt('page'1) == 1) {
  996.             array_unshift($pagination_results$option_placeholde);
  997.         }
  998.         $pagination->setItems($pagination_results);
  999.         $serializer SerializerBuilder::create()->build();
  1000.         return JsonResponse::fromJsonString($serializer->serialize($pagination'json'));
  1001.     }
  1002.     /**
  1003.      * set datatable configs
  1004.      *
  1005.      * @return \App\Library\Datatable\Util\Datatable
  1006.      */
  1007.     private function datatableVehicules($clientDatatable $datatableTranslatorInterface $translator)
  1008.     {
  1009.         $datatable->setDatatableId('dta-vehicules')
  1010.                   ->setEntity(VehiculeClient::class, "x")
  1011.                   ->setFields(
  1012.                       [
  1013.                           $translator->trans("ID")        => 'x.id',
  1014.                           $translator->trans("Image")     => 'x.id',
  1015.                           $translator->trans("Libellé")   => 'x.libelle',
  1016.                           $translator->trans("Marque")    => 'm.libelle',
  1017.                           $translator->trans("Modèle")    => 'mod.libelle',
  1018.                           $translator->trans("Type")      => 't.libelle',
  1019.                           $translator->trans("Clt")       => 'c.nom',
  1020.                           $translator->trans("Km")        => 'x.kilometrage',
  1021.                           $translator->trans("Puissance") => 'x.puissance',
  1022.                           $translator->trans("Immat")     => 'x.immatriculation',
  1023.                           $translator->trans("Num série") => 'x.numSerie',
  1024.                           $translator->trans("Date CT")   => 'x.dateControleTechnique',
  1025.                           $translator->trans("Actions")   => 'x.id',
  1026.                           "_identifier_"                  => 'x.id',
  1027.                       ]
  1028.                   )
  1029.                   ->addJoin('x.marque''m'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1030.                   ->addJoin('x.modele''mod'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1031.                   ->addJoin('x.type''t'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1032.                   ->addJoin('x.client''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1033.                   ->setWhere(
  1034.                       'x.client = :client',
  1035.                       ['client' => $client]
  1036.                   )
  1037.                   ->setRenderers(
  1038.                       [
  1039.                           => [
  1040.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1041.                               'params' => [
  1042.                                   'edit_route' => 'dtc_vehicule_client_modifier',
  1043.                               ],
  1044.                           ],
  1045.                           => [
  1046.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1047.                               'params' => [
  1048.                                   'edit_route' => 'dtc_vehicule_client_modifier',
  1049.                               ],
  1050.                           ],
  1051.                           => [
  1052.                               'view'   => 'FO/DataTable/image.html.twig',
  1053.                               'params' => [
  1054.                                   'edit_route' => 'dtc_vehicule_client_modifier',
  1055.                               ],
  1056.                           ],
  1057.                           3  => [
  1058.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1059.                               'params' => [
  1060.                                   'edit_route'   => 'dtc_vehicule_marque_modifier',
  1061.                                   'typeDocument' => 'marqueVehicule',
  1062.                               ],
  1063.                           ],
  1064.                           4  => [
  1065.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1066.                               'params' => [
  1067.                                   'edit_route'   => 'dtc_vehicule_modele_modifier',
  1068.                                   'typeDocument' => 'modeleVehicule',
  1069.                               ],
  1070.                           ],
  1071.                           11 => [
  1072.                               'view' => 'FO/DataTable/date.html.twig',
  1073.                           ],
  1074.                           12 => [
  1075.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  1076.                               'params' => [
  1077.                                   'edit_route'      => 'dtc_vehicule_client_modifier',
  1078.                                   'type'            => '',
  1079.                                   //'dupliquer_route'    => 'dtc_vehicule_client_dupliquer',
  1080.                                   'supprimer_route' => 'dtc_vehicule_client_supprimer',
  1081.                                   'objet'           => VehiculeClient::class,
  1082.                                   'table'           => 'dta-vehicules',
  1083.                               ],
  1084.                           ],
  1085.                       ]
  1086.                   )
  1087.                   ->setOrder("x.id""desc")
  1088.                   ->setSearch(true)
  1089.                   ->setSearchFields([23456]);
  1090.         return $datatable;
  1091.     }
  1092.     /**
  1093.      * Grid action
  1094.      * @return Response
  1095.      */
  1096.     /**
  1097.      * @Route("/client/vehicule/grid/{id}", name="dtc_client_vehicule_liste_grid")
  1098.      */
  1099.     public function gridVehiculesAction(Request $requestClient $clientDatatable $datatableTranslatorInterface $translator)
  1100.     {
  1101.         return $this->datatableVehicules($client$datatable$translator)->execute();
  1102.     }
  1103.     /**
  1104.      * @Route("/commande/charger-tableau/{id}", name="dtc_client_commande_charger_tableau")
  1105.      */
  1106.     public function chargerTableauAction(Request $requestClient $client)
  1107.     {
  1108.         $rendu $this->renderView('GestionComerciale/Commande/charger_tableau.html.twig', ["client" => $client]);
  1109.         return new JsonResponse(['rendu' => $rendu]);
  1110.     }
  1111.     /**
  1112.      * @Route("", name="")
  1113.      */
  1114.     public function listerCommandeClientAction(Request $requestClient $clientDatatable $datatableTranslatorInterface $translator)
  1115.     {
  1116.         $tableau_class_cellule = [];
  1117.         //$tableau_class_cellule[]=array("className"=>" colonne_id","targets"=>array(0),"visible"=>false,"orderable"=>false,"searchable"=> false);
  1118.         $this->datatableCommandes($client$datatable$translator);
  1119.         return $this->render('GestionComerciale/Commande/lister-client.html.twig', ['tableauClassColonne' => $tableau_class_cellule'client' => $client]);
  1120.     }
  1121.     /**
  1122.      * set datatable configs
  1123.      *
  1124.      * @return \App\Library\Datatable\Util\Datatable
  1125.      */
  1126.     private function datatableCommandes($clientDatatable $datatableTranslatorInterface $translator)
  1127.     {
  1128.         $datatable->setDatatableId('dta-commandes')
  1129.                   ->setEntity(Commande::class, "x")
  1130.                   ->setFields(
  1131.                       [
  1132.                           //$translator->trans("ID") =>  'x.id',
  1133.                           $translator->trans("Date")      => 'x.date',
  1134.                           $translator->trans("Réf")       => 'x.reference',
  1135.                           $translator->trans("Type")      => 'x.id',
  1136.                           $translator->trans("Total HT")  => 'x.total',
  1137.                           $translator->trans("Total TTC") => 'x.totalTtc',
  1138.                           $translator->trans("Payé ?")    => 'x.id',
  1139.                           $translator->trans("Actions")   => 'x.id',
  1140.                           "_identifier_"                  => 'x.id',
  1141.                       ]
  1142.                   )
  1143.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1144.                   //->addJoin('x.typeDocumentCommercial', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1145.             //->addJoin('x.blsCommande', 'bl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1146.             //->addJoin('x.bps', 'bp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1147.             //->addJoin('x.docEnfantsDevis', 'ded', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1148.             //->addJoin('x.docEnfantsCommande', 'dec', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1149.             //->addJoin('dec.typeDocumentCommercial', 'dect', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1150.             //->addJoin('x.docEnfantsBP', 'debp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1151.             //->addJoin('x.docEnfantsBL', 'debl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1152.                   ->setRenderers(
  1153.                 [
  1154.                     => [
  1155.                         'view'   => 'FO/DataTable/heure.html.twig',
  1156.                         'params' => [],
  1157.                     ],
  1158.                     => [
  1159.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1160.                         'params' => [
  1161.                             'edit_route'   => 'auto',
  1162.                             'typeDocument' => "",
  1163.                         ],
  1164.                     ],
  1165.                     => [
  1166.                         'view' => 'FO/DataTable/total_ht_commande.html.twig',
  1167.                     ],
  1168.                     => [
  1169.                         'view' => 'FO/DataTable/prix.html.twig',
  1170.                     ],
  1171.                     => [
  1172.                         'view' => 'FO/DataTable/facture_est_paye_solde.html.twig',
  1173.                     ],
  1174.                     => [
  1175.                         'view'   => 'FO/DataTable/actions.html.twig',
  1176.                         'params' => [
  1177.                             'edit_route' => 'auto',
  1178.                             'pdf_route'  => 'auto',
  1179.                             'objet'      => Commande::class,
  1180.                             'deplier'    => 'true',
  1181.                         ],
  1182.                     ],
  1183.                 ]
  1184.             )
  1185.                   ->setOrder("x.id""desc")
  1186.                   ->setSearch(true)
  1187.                   ->setSearchFields([12]);
  1188.         /*
  1189.         $where = "x.typeDocumentCommercial = :typeDocumentCommercial and x.origineSaisie IN (:origineSaisie) AND x.visible=:visible";
  1190.         $parameters = array('typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE,"visible"=>"1",'origineSaisie'=>array("commande","devis","bp"));
  1191.         */
  1192.         //$where = "x.client = :client AND x.typeDocumentCommercial IN (:typeDocumentCommercial) and x.origineSaisie IN (:origineSaisie) AND x.visible=:visible";
  1193.         //$parameters = array('client' => $client,"typeDocumentCommercial"=>array("2","1","3","6","10","7"),"visible"=>"1",'origineSaisie'=>array("commande","devis","bp"));
  1194.         /*
  1195.     $where = "x.client = :client AND x.typeDocumentCommercial IN (:typeDocumentCommercial) and x.origineSaisie IN (:origineSaisie)";
  1196.     $parameters = array('client' => $client,"typeDocumentCommercial"=>array("2","1","3","6","10","7"),'origineSaisie'=>array("commande","devis","bp"));
  1197.     $typeCmde = array("2");
  1198.     $typeDoc = array("1","3","6","10","7");
  1199.          *
  1200.          */
  1201.         /*
  1202.             13     Ordre de fabrication multiple
  1203.             12     Facture fournisseur
  1204.             11     Bon de préparation atelier
  1205.             10     Devis OR
  1206.             9     Ordre de fabrication
  1207.             8     Commande fournisseur
  1208.             7     Avoir
  1209.             6     Facture
  1210.             5     Bon de livraison
  1211.             4     Bon de préparation
  1212.             3     Ordre de réparation
  1213.             2     Commande
  1214.             1     Devis
  1215.         */
  1216.         //$typeDoc = ["1", "2", "3", "4", "5", "6", "7", "10"];
  1217.         $typeDoc = array(
  1218.             TypeDocumentCommercial::DEVIS,
  1219.             TypeDocumentCommercial::COMMANDE,
  1220.             TypeDocumentCommercial::ORDREREPARATION,
  1221.             TypeDocumentCommercial::BP,
  1222.             TypeDocumentCommercial::BL,
  1223.             TypeDocumentCommercial::FACTURE,
  1224.             TypeDocumentCommercial::AVOIR,
  1225.             TypeDocumentCommercial::DEVISOR
  1226.         );
  1227. //$typeDoc = array(3);
  1228.         $where      "    x.client = :client
  1229.                     AND
  1230.                     x.dateSuppression IS NULL
  1231.                     AND
  1232.                     (s.ordre != :ordreStatutDoc or (x.typeDocumentCommercial = 1))
  1233.                 ";
  1234.         $parameters = ['client' => $client"typeDocumentCommercial" => $typeDoc'ordreStatutDoc' => '0'];
  1235.         $parameters = ['client' => $client'ordreStatutDoc' => '0'];
  1236.         $where      "    x.client = :client
  1237.                     AND x.dateSuppression IS NULL
  1238.                     AND (s.ordre != :ordreStatutDoc or (x.typeDocumentCommercial = 1))";
  1239.         $where      .= " AND (";
  1240.         //AND t.id IN (:typeDocumentCommercial)
  1241.         //$where .= " ded.id IS NULL AND (dec.id IS NULL OR dect.id IN (11)) AND debp.id IS NULL AND debl.id IS NULL";
  1242.         //$where .= " OR (t.id IN (:typeDocumentCommercial))";//dect.id NOT IN (11)
  1243.         $where .= " (x.typeDocumentCommercial = ".TypeDocumentCommercial::ORDREREPARATION." AND x.statutCommande IN (14,15))";//Ordre de réparation
  1244.         $where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::DEVIS." AND x.visible = 1 AND x.commande IS NULL)";//Devis
  1245.         $where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::DEVISOR." AND x.visible = 1 AND x.commande IS NULL)";//Devis OR
  1246.         $where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::COMMANDE." AND x.visible= 1 )";//Commande
  1247.         //$where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::BL." AND x.visible= 1 AND x.facture IS NULL)";//BL
  1248.         $where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::BL." AND x.visible= 1)";//BL
  1249.         $where .= " OR (x.typeDocumentCommercial IN (4, 6, 7) AND x.visible= 1)";//bp, facture, avoir
  1250.         //$where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::COMMANDE.")";
  1251.         $where .= ")";
  1252.         $datatable->setWhere($where$parameters);
  1253.         //echo $where;
  1254.         //print_r($parameters);
  1255.         //exit;
  1256.         return $datatable;
  1257.     }
  1258.     /**
  1259.      * Grid action
  1260.      * @return Response
  1261.      */
  1262.     /**
  1263.      * @Route("/client/commande/grid/{id}", name="dtc_client_commande_liste_grid")
  1264.      */
  1265.     public function gridCommandesAction(Request $requestClient $clientDatatable $datatableTranslatorInterface $translator)
  1266.     {
  1267.         return $this->datatableCommandes($client$datatable$translator)->execute();
  1268.     }
  1269.     /**
  1270.      * @Route("", name="")
  1271.      */
  1272.     public function listerPiecesAction(Request $requestClient $clientColonneTableauService $serviceColonneTableauDatatable $datatableTranslatorInterface $translator)
  1273.     {
  1274.         $tableau_class_cellule[] = ["className" => "visible_export colonne_id""targets" => [0], "visible" => false];
  1275.         $tableau_class_cellule[] = [
  1276.             "className" => "visible_export colonne_id",
  1277.             "targets"   => [1],
  1278.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Article::class, "reference"),
  1279.         ];
  1280.         $tableau_class_cellule[] = [
  1281.             "className" => "visible_export colonne_id",
  1282.             "targets"   => [2],
  1283.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(ArticleCommande::class, "libelle"),
  1284.         ];
  1285.         $tableau_class_cellule[] = [
  1286.             "className" => "visible_export colonne_id text-center",
  1287.             "targets"   => [3],
  1288.             "visible"   => $serviceColonneTableau->getColonneUtilisateur("TCClientsBundle:ArticleCommande""date"),
  1289.         ];
  1290.         $tableau_class_cellule[] = [
  1291.             "className" => "visible_export colonne_id",
  1292.             "targets"   => [4],
  1293.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(Commande::class, "reference"),
  1294.         ];
  1295.         $tableau_class_cellule[] = [
  1296.             "className" => "visible_export colonne_id text-center",
  1297.             "targets"   => [5],
  1298.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(ArticleCommande::class, "quantite"),
  1299.         ];
  1300.         $tableau_class_cellule[] = [
  1301.             "className" => "visible_export colonne_id text-right",
  1302.             "targets"   => [6],
  1303.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(ArticleCommande::class, "prixBase"),
  1304.         ];
  1305.         $tableau_class_cellule[] = [
  1306.             "className" => "visible_export colonne_id text-center",
  1307.             "targets"   => [7],
  1308.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(ArticleCommande::class, "remise"),
  1309.         ];
  1310.         $tableau_class_cellule[] = [
  1311.             "className" => "visible_export colonne_id text-right",
  1312.             "targets"   => [8],
  1313.             "visible"   => $serviceColonneTableau->getColonneUtilisateur(ArticleCommande::class, "totalHT"),
  1314.         ];
  1315.         $tableau_class_cellule[] = ["orderable" => false"className" => "colonne_id""targets" => [9], "visible" => true];
  1316.         $this->datatablePieces($client$datatable$translator);
  1317.         return $this->render(
  1318.             'Clients/Client/lister-pieces.html.twig',
  1319.             ['tableauClassColonnePieces' => $tableau_class_cellule'route' => 'dtc_client_piece_liste_grid''clientId' => $client->getId()]
  1320.         );
  1321.     }
  1322.     /**
  1323.      * set datatable configs
  1324.      *
  1325.      * @return \App\Library\Datatable\Util\Datatable
  1326.      */
  1327.     private function datatablePieces($clientDatatable $datatableTranslatorInterface $translator)
  1328.     {
  1329.         $datatable->setDatatableId('dta-pieces')
  1330.                   ->setEntity(ArticleCommande::class, "x")
  1331.                   ->setFields(
  1332.                       [
  1333.                           $translator->trans("ID")               => 'x.id',
  1334.                           $translator->trans("Réf")              => 'a.reference',
  1335.                           $translator->trans("Libellé")          => 'x.libelle',
  1336.                           $translator->trans("Date")             => 'x.date',
  1337.                           $translator->trans("Commande")         => 'c.reference',
  1338.                           $translator->trans("Qté")              => "x.quantite",
  1339.                           $translator->trans("Prix unitaire HT") => 'x.prixBase',
  1340.                           $translator->trans("Remise")           => 'x.remise',
  1341.                           $translator->trans("Total HT")         => "x.totalHt",
  1342.                           $translator->trans("Actions")          => 'x.id',
  1343.                           "_identifier_"                         => 'x.id',
  1344.                       ]
  1345.                   )
  1346.                   ->setWhere(
  1347.                       'c.client = :client and t.id = 2 and s.ordre != 0',
  1348.                       ['client' => $client]
  1349.                   )
  1350.                   ->addJoin('x.article''a'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1351.                   ->addJoin('x.commande''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1352.                   //->addJoin('c.typeDocumentCommercial', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1353.                   ->addJoin('c.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1354.                   ->setRenderers(
  1355.                       [
  1356.                           => [
  1357.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1358.                               'params' => [
  1359.                                   'edit_route'   => 'dtc_article_modifier',
  1360.                                   'typeDocument' => 'article',
  1361.                               ],
  1362.                           ],
  1363.                           => [
  1364.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1365.                               'params' => [
  1366.                                   'edit_route'   => 'dtc_article_modifier',
  1367.                                   'typeDocument' => 'article',
  1368.                               ],
  1369.                           ],
  1370.                           => [
  1371.                               'view' => 'FO/DataTable/heure.html.twig',
  1372.                           ],
  1373.                           => [
  1374.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1375.                               'params' => [
  1376.                                   'edit_route'   => 'dtc_commande_modifier',
  1377.                                   'typeDocument' => 'commande',
  1378.                               ],
  1379.                           ],
  1380.                           => [
  1381.                               'view' => 'FO/DataTable/prix.html.twig',
  1382.                           ],
  1383.                           => [
  1384.                               'view' => 'FO/DataTable/prix.html.twig',
  1385.                           ],
  1386.                           => [
  1387.                               'view'   => 'FO/DataTable/actions.html.twig',
  1388.                               'params' => [
  1389.                                   'edit_route' => 'dtc_commande_modifier',
  1390.                                   'objet'      => Commande::class,
  1391.                               ],
  1392.                           ],
  1393.                       ]
  1394.                   )
  1395.                   ->setOrder("x.id""desc")
  1396.                   ->setSearch(true)
  1397.                   ->setSearchFields([124]);
  1398.         return $datatable;
  1399.     }
  1400.     /**
  1401.      * Grid action
  1402.      * @return Response
  1403.      */
  1404.     /**
  1405.      * @Route("/client/piece/grid/{id}", name="dtc_client_piece_liste_grid")
  1406.      */
  1407.     public function gridPiecesAction(Request $requestClient $clientDatatable $datatableTranslatorInterface $translator)
  1408.     {
  1409.         return $this->datatablePieces($client$datatable$translator)->execute();
  1410.     }
  1411.     /**
  1412.      * set datatable configs
  1413.      *
  1414.      * @return \App\Library\Datatable\Util\Datatable
  1415.      */
  1416.     private function datatableNotes($clientDatatable $datatableTranslatorInterface $translator)
  1417.     {
  1418.         $user $this->getUser();
  1419.         $datatable->setDatatableId('dta-notes-clients')
  1420.                   ->setEntity(Note::class, "x")
  1421.                   ->setFields(
  1422.                       [
  1423.                           //$translator->trans("ID") =>  'x.id',
  1424.                           $translator->trans("Message") => 'x.message',
  1425.                           $translator->trans("Cat")     => 'cn.libelle',
  1426.                           $translator->trans("Contact") => 'c.nom',
  1427.                           $translator->trans("Date")    => 'x.dateSaisie',
  1428.                           $translator->trans("Actions") => 'x.id',
  1429.                           "_identifier_"                => 'x.id',
  1430.                       ]
  1431.                   )
  1432.                   ->addJoin('x.categorie''cn'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1433.                   ->addJoin('x.contact''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1434.                   ->setWhere(
  1435.                         'x.client = :client'
  1436.                       , ['client' => $client]
  1437.                   )
  1438.                   ->setGroupBy('x.id')
  1439.                   ->setRenderers(
  1440.                       [
  1441.                           => [
  1442.                               'view'   => 'FO/DataTable/titre_note.html.twig',
  1443.                               'params' => [],
  1444.                           ],
  1445.                           => [
  1446.                               'view'   => 'FO/DataTable/contact.html.twig',
  1447.                               'params' => [],
  1448.                           ],
  1449.                           => [
  1450.                               'view'   => 'FO/DataTable/heure.html.twig',
  1451.                               'params' => [],
  1452.                           ],
  1453.                           => [
  1454.                               'view'   => 'FO/DataTable/actions_modal.html.twig',
  1455.                               'params' => [
  1456.                                   'edit_route'      => 'dtc_note_modifier',
  1457.                                   'supprimer_route' => 'dtc_note_supprimer',
  1458.                                   'id'              => $client->getId(),
  1459.                                   'type'            => "client",
  1460.                                   'objet'           => Note::class,
  1461.                                   'width_modal'     => 900,
  1462.                               ],
  1463.                           ],
  1464.                       ]
  1465.                   )
  1466.                   ->setOrder("x.dateSaisie""desc")
  1467.                   ->setSearch(true)
  1468.                   ->setSearchFields([1]);
  1469.         $where      "x.client = :client AND (x.prive = :prive OR x.prive IS NULL or x.utilisateur = :utilisateur)";
  1470.         $parameters = ["prive" => 0"utilisateur" => $user'client' => $client];
  1471.         $datatable->setWhere($where$parameters);
  1472.         return $datatable;
  1473.     }
  1474.     /**
  1475.      * set datatable configs
  1476.      *
  1477.      * @return \App\Library\Datatable\Util\Datatable
  1478.      */
  1479.     private function datatableRemises($clientDatatable $datatableTranslatorInterface $translator)
  1480.     {
  1481.         $categorieRemiseClient = [];
  1482.         foreach ($client->getCategorieRemiseClientClient() as $crcc) {
  1483.             $categorieRemiseClient[] = $crcc->getCategorieRemiseClient();
  1484.         }
  1485.         $categorieClient = [];
  1486.         foreach ($client->getClientCategorie() as $crcc) {
  1487.             //echo "<div>".$crcc->getCategorie()->getLibelle()."</div>";
  1488.             $categorieClient[] = $crcc->getCategorie();
  1489.         }
  1490.         $datatable->setDatatableId('dta-remises-clients')
  1491.                   ->setEntity(Remise::class, "x")
  1492.                   ->setFields(
  1493.                       [
  1494.                           $translator->trans("ID")      => 'x.id',
  1495.                           $translator->trans("Libellé") => 'x.libelle',
  1496.                           $translator->trans("Taux")    => 'x.montant',
  1497.                           $translator->trans("Actions") => 'x.id',
  1498.                           "_identifier_"                => 'x.id',
  1499.                       ]
  1500.                   )
  1501.                   ->addJoin('x.client''c'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1502.                   ->addJoin('x.categorieRemiseClientRemise''a'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1503.                   ->addJoin('x.remiseCategorieClient''b'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1504.                   ->setWhere(
  1505.                         '
  1506.                              x.parent is null
  1507.                              AND
  1508.                              (
  1509.                              x.client = :client
  1510.                              OR
  1511.                              (a.categorieRemiseClient IN (:categorieRemiseClient) and (x.client IS NULL OR x.client = :client))
  1512.                              OR
  1513.                              (b.categorie IN (:categorieClient) and (x.client IS NULL OR x.client = :client))
  1514.                              )
  1515.                              '
  1516.                       , ['client' => $client'categorieRemiseClient' => $categorieRemiseClient'categorieClient' => $categorieClient]
  1517.                   )
  1518.                   ->setGroupBy('x.id')
  1519.                   ->setRenderers(
  1520.                       [
  1521.                           => [
  1522.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1523.                               'params' => [
  1524.                                   'edit_route'   => 'dtc_remise_modifier',
  1525.                                   'typeDocument' => '',
  1526.                               ],
  1527.                           ],
  1528.                           => [
  1529.                               'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1530.                               'params' => [
  1531.                                   'edit_route' => 'dtc_remise_modifier',
  1532.                               ],
  1533.                           ],
  1534.                           => [
  1535.                               'view'   => 'FO/DataTable/actions.html.twig',
  1536.                               'params' => [
  1537.                                   'edit_route'      => 'dtc_remise_modifier',
  1538.                                   'supprimer_route' => 'dtc_remise_client_supprimer',
  1539.                                   'objet'           => Remise::class,
  1540.                                   'deplier'         => false,
  1541.                               ],
  1542.                           ],
  1543.                       ]
  1544.                   )
  1545.                   ->setOrder("x.id""desc")
  1546.                   ->setSearch(true)
  1547.                   ->setSearchFields([1]);
  1548.         return $datatable;
  1549.     }
  1550.     /*
  1551.     private function datatableRemises($client)
  1552.     {
  1553.         $datatable = $this->get('datatable');
  1554.         $datatable  ->setDatatableId('dta-remises-clients')
  1555.                     ->setEntity("DTCRemisesBundle:Remise", "x")
  1556.                     ->setFields(
  1557.                         array(
  1558.                            $translator->trans("ID") =>  'x.id',
  1559.                            $translator->trans("Libellé") =>  'x.libelle',
  1560.                            $translator->trans("Taux") =>  'x.montant',
  1561.                            $translator->trans("Actions") =>  'x.id',
  1562.                                "_identifier_" => 'x.id'
  1563.                                )
  1564.                         )
  1565.                      ->addJoin('x.client', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1566.                      ->setWhere(
  1567.                              'x.client = :client',
  1568.                              array('client' => $client)
  1569.                         )
  1570.                      ->setRenderers(
  1571.                         array(
  1572.                             0 => array(
  1573.                                 'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1574.                                  'params' => array(
  1575.                                         'edit_route'    => 'dtc_remise_modifier'
  1576.                                     ),
  1577.                             ),
  1578.                         )
  1579.                     )
  1580.                     ->setOrder("x.id", "desc")
  1581.                     ->setSearch(true)
  1582.                     ->setSearchFields(array(1))
  1583.                     ;
  1584.         return $datatable;
  1585.     }
  1586.     */
  1587.     /**
  1588.      * Grid action
  1589.      * @return Response
  1590.      */
  1591.     /**
  1592.      * @Route("/client/remise/grid/{id}", name="dtc_client_remise_liste_grid")
  1593.      */
  1594.     public function gridRemisesAction(Request $requestClient $clientDatatable $datatableTranslatorInterface $translator)
  1595.     {
  1596.         return $this->datatableRemises($client$datatable$translator)->execute();
  1597.     }
  1598.     /**
  1599.      * @Route("/client/note/grid/{id}", name="dtc_client_note_liste_grid")
  1600.      */
  1601.     public function gridNotesAction(Request $requestClient $clientDatatable $datatableTranslatorInterface $translator)
  1602.     {
  1603.         return $this->datatableNotes($client$datatable$translator)->execute();
  1604.     }
  1605.     /**
  1606.      * @Route("/client/search/", name="dtc_client_search")
  1607.      */
  1608.     public function searchAction(Request $requestEntityManagerInterface $em)
  1609.     {
  1610.         $query   $request->query->get('q');
  1611.         $results $em->getRepository(Client::class)->findByRefOrName($query);
  1612.         $datas = [];
  1613.         foreach ($results as $result) {
  1614.             $datas[] = $result;
  1615.         }
  1616.         $response = new JsonResponse();
  1617.         $response->setData([
  1618.                                'items' => $datas,
  1619.                            ]);
  1620.         return $response;
  1621.     }
  1622.     /**
  1623.      * set datatable configs
  1624.      *
  1625.      * @return \App\Library\Datatable\Util\Datatable
  1626.      */
  1627.     private function datatableFactures($clientDatatable $datatableTranslatorInterface $translator)
  1628.     {
  1629.         $datatable->setDatatableId('dta-factures-avoirs')
  1630.                   ->setEntity(Commande::class, "x")
  1631.                   ->setFields(
  1632.                       [
  1633.                           //$translator->trans("ID") =>  'x.id',
  1634.                           $translator->trans("Date")      => 'x.date',
  1635.                           $translator->trans("Réf")       => 'x.reference',
  1636.                           $translator->trans("Type")      => 't.libelle',
  1637.                           $translator->trans("Total HT")  => 'x.total',
  1638.                           $translator->trans("Total TTC") => 'x.totalTtc',
  1639.                           $translator->trans("Payé ?")    => 'x.id',
  1640.                           $translator->trans("Actions")   => 'x.id',
  1641.                           "_identifier_"                  => 'x.id',
  1642.                       ]
  1643.                   )
  1644.                   ->addJoin('x.statutCommande''s'\Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1645.                   //->addJoin('x.typeDocumentCommercial', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1646.             //->addJoin('x.blsCommande', 'bl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1647.             //->addJoin('x.bps', 'bp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1648.             //->addJoin('x.docEnfantsDevis', 'ded', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1649.             //->addJoin('x.docEnfantsCommande', 'dec', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1650.             //->addJoin('dec.typeDocumentCommercial', 'dect', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1651.             //->addJoin('x.docEnfantsBP', 'debp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1652.             //->addJoin('x.docEnfantsBL', 'debl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
  1653.                   ->setRenderers(
  1654.                 [
  1655.                     => [
  1656.                         'view'   => 'FO/DataTable/heure.html.twig',
  1657.                         'params' => [],
  1658.                     ],
  1659.                     => [
  1660.                         'view'   => 'FO/DataTable/avec_lien_edit_route.html.twig',
  1661.                         'params' => [
  1662.                             'edit_route'   => 'auto',
  1663.                             'typeDocument' => "",
  1664.                         ],
  1665.                     ],
  1666.                     => [
  1667.                         'view' => 'FO/DataTable/prix.html.twig',
  1668.                     ],
  1669.                     => [
  1670.                         'view' => 'FO/DataTable/prix.html.twig',
  1671.                     ],
  1672.                     => [
  1673.                         'view' => 'FO/DataTable/facture_est_paye_solde.html.twig',
  1674.                     ],
  1675.                     => [
  1676.                         'view'   => 'FO/DataTable/actions.html.twig',
  1677.                         'params' => [
  1678.                             'edit_route' => 'auto',
  1679.                             'pdf_route'  => 'auto',
  1680.                             'objet'      => Commande::class,
  1681.                             'deplier'    => 'true',
  1682.                         ],
  1683.                     ],
  1684.                 ]
  1685.             )
  1686.                   ->setOrder("x.id""desc")
  1687.                   ->setSearch(true)
  1688.                   ->setSearchFields([123]);
  1689.         /*
  1690.             13     Ordre de fabrication multiple
  1691.             12     Facture fournisseur
  1692.             11     Bon de préparation atelier
  1693.             10     Devis OR
  1694.             9     Ordre de fabrication
  1695.             8     Commande fournisseur
  1696.             7     Avoir
  1697.             6     Facture
  1698.             5     Bon de livraison
  1699.             4     Bon de préparation
  1700.             3     Ordre de réparation
  1701.             2     Commande
  1702.             1     Devis
  1703.         */
  1704.         $typeDoc = ["1""2""3""4""5""6""7""10"];
  1705.         $typeDoc = array(
  1706.             TypeDocumentCommercial::DEVIS,
  1707.             TypeDocumentCommercial::COMMANDE,
  1708.             TypeDocumentCommercial::ORDREREPARATION,
  1709.             TypeDocumentCommercial::BP,
  1710.             TypeDocumentCommercial::BL,
  1711.             TypeDocumentCommercial::FACTURE,
  1712.             TypeDocumentCommercial::AVOIR,
  1713.             TypeDocumentCommercial::DEVISOR
  1714.         );
  1715. //$typeDoc = array(3);
  1716.         $where      "    x.client = :client
  1717.                     AND
  1718.                     x.dateSuppression IS NULL
  1719.                     AND
  1720.                     (s.ordre != :ordreStatutDoc or (x.typeDocumentCommercial = 1))
  1721.                 ";
  1722.         $parameters = ['client' => $client"typeDocumentCommercial" => $typeDoc'ordreStatutDoc' => '0'];
  1723.         $parameters = ['client' => $client'ordreStatutDoc' => '0'];
  1724.         $where      "    x.client = :client
  1725.                     AND x.dateSuppression IS NULL
  1726.                     AND (s.ordre != :ordreStatutDoc or (x.typeDocumentCommercial = 1))";
  1727.         $where      .= " AND (";
  1728.         /*
  1729.         $where .= " (x.typeDocumentCommercial = TypeDocumentCommercial::ORDREREPARATION AND x.statutCommande IN (14,15))";//Ordre de réparation
  1730.         $where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::DEVIS." AND x.visible = 1 AND x.commande IS NULL)";//Devis
  1731.         $where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::DEVISOR." AND x.visible = 1 AND x.commande IS NULL)";//Devis OR
  1732.         $where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::COMMANDE." AND x.visible= 1 AND x.origineSaisie IN ('devis', 'commande', 'bp'))";//Commande
  1733.         $where .= " OR (x.typeDocumentCommercial = ".TypeDocumentCommercial::BL." AND x.visible= 1 AND x.facture IS NULL)";//BL
  1734.         $where .= " OR (x.typeDocumentCommercial IN (4, 6, 7) AND x.visible= 1)";//bp, facture, avoir
  1735.          *
  1736.          */
  1737.         $where .= " x.typeDocumentCommercial IN (6, 7) AND x.visible= 1";//bp, facture, avoir
  1738.         $where .= ")";
  1739.         $datatable->setWhere($where$parameters);
  1740.         return $datatable;
  1741.     }
  1742.     /**
  1743.      * Grid action
  1744.      * @return Response
  1745.      */
  1746.     /**
  1747.      * @Route("/client/facture/grid/{id}", name="dtc_client_facture_liste_grid")
  1748.      */
  1749.     public function gridFacturesAction(Request $requestClient $clientDatatable $datatableTranslatorInterface $translator)
  1750.     {
  1751.         return $this->datatableFactures($client$datatable$translator)->execute();
  1752.     }
  1753.     /**
  1754.      * @Route("/client/historique/{client}", name="dtc_client_historique")
  1755.      */
  1756.     public function historiqueAction(Request $requestClient $clientEntityManagerInterface $emTranslatorInterface $translator)
  1757.     {
  1758.         $titre_modal $translator->trans("Historique du client");
  1759.         $clients   = [];
  1760.         $clients[] = $client;
  1761.         //dump($commandes);
  1762.         $historiques $em->getRepository(HistoriqueClient::class)->findBy(['client' => $clients], ['date' => 'DESC']);
  1763.         $rendu $this->renderView('Clients/Client/historique.html.twig', ['historiques' => $historiques]);
  1764.         return new JsonResponse(['rendu' => $rendu'valide' => '0''url' => '''titre' => $titre_modal'width' => 900]);
  1765.     }
  1766.     /**
  1767.      * @Route("/client/email/is-connected", name="clients__client_is_connected")
  1768.      */
  1769.     public function clientIsConnectedAction(Request $requestEmailService $emailService)
  1770.     {
  1771.         $client = new Client();
  1772.         $client->setMailerUser($request->request->get('mailerUser'));
  1773.         $client->setMailerPassword($request->request->get('mailerPassword'));
  1774.         $client->setMailerHost($request->request->get('mailerHost'));
  1775.         $client->setMailerPort($request->request->get('mailerPort'));
  1776.         return new JsonResponse(['isConnected'=>$emailService->getConnexionImapClient($client)]);
  1777.     }
  1778. }