src/Command/Export/exportCommand.php line 175

Open in your IDE?
  1. <?php
  2. namespace App\Command\Export;
  3. use App\Entity\Export\Export;
  4. use App\Entity\Notes\Note;
  5. use App\Service\Export\ComptabiliteService;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\Console\Command\Command;
  8. //use Symfony\Component\Console\Command\Command;
  9. use Symfony\Component\Console\Input\InputArgument;
  10. use Symfony\Component\Console\Input\InputInterface;
  11. use Symfony\Component\Console\Input\InputOption;
  12. use Symfony\Component\Console\Output\OutputInterface;
  13. use Symfony\Component\Console\Question\ConfirmationQuestion;
  14. use Symfony\Component\Console\Question\Question;
  15. use Symfony\Component\Console\Question\ChoiceQuestion;
  16. use Symfony\Component\Console\Input\ArrayInput;
  17. use Symfony\Component\Console\Helper\ProgressBar;
  18. use Symfony\Component\HttpFoundation\Response;
  19. class exportCommand extends Command
  20. {
  21.     protected static $defaultName 'export:creer';
  22.     private EntityManagerInterface $entityManager;
  23.     private ComptabiliteService $comptabiliteService;
  24.     private string $publicPath;
  25.     public function __constructEntityManagerInterface $entityManagerComptabiliteService $comptabiliteServicestring $publicPath)
  26.     {
  27.         parent::__construct();
  28.         $this->entityManager       $entityManager;
  29.         $this->comptabiliteService $comptabiliteService;
  30.         $this->publicPath          $publicPath;
  31.     }
  32.     private $regenerate false;
  33.     protected function configure()
  34.     {
  35.         $this
  36.             ->setDescription('creer un export')
  37.             ->addArgument('objetId'InputArgument::OPTIONAL'The id of the export.')
  38.             ->addArgument('regenerate'InputArgument::OPTIONAL'Regenerate ?');
  39.     }
  40.     /**
  41.      * @throws \Doctrine\DBAL\Exception
  42.      */
  43.     protected function execute(InputInterface $inputOutputInterface $output): int
  44.     {
  45.         set_time_limit(6000);
  46.         if ( ! empty($input->getArgument('regenerate'))) {
  47.             $this->regenerate true;
  48.         }
  49.         $conn $this->entityManager->getConnection();
  50.         $conn->getConfiguration()->setSQLLogger(null);
  51.         //$output->writeln('Mise à jour des pumps');
  52.         $repo_objet $this->entityManager->getRepository(Export::class);
  53.         $exportEncours $repo_objet->exportEnCours();
  54.         if (count($exportEncours)) {
  55.             foreach ($exportEncours as $ec) {
  56.                 //$output->writeln('EC:'.$ec->getPid());
  57.                 $pid $ec->getPid();
  58.                 if ( ! file_exists("/proc/$pid")) {
  59.                     $ec->setEchec(true);
  60.                     $this->entityManager->persist($ec);
  61.                     $this->entityManager->flush();
  62.                     //  $output->writeln('GGGG');
  63.                 }
  64.             }
  65.         }
  66.         $repo_note $this->entityManager->getRepository(Note::class);
  67.         //$imports = $repo_import->importEnAttente();
  68.         //$export_attente = $repo_objet->findBy(array("id"=>60));
  69.         //$objet = $repo_objet->find($input->getArgument('objetId'));
  70.         if (empty($input->getArgument('objetId'))) {
  71.             $export_attente $repo_objet->exportEnAttente();
  72.         } else {
  73.             $export_attente = [$repo_objet->find($input->getArgument('objetId'))];
  74.         }
  75.         if (count($export_attente) > 0) {
  76.             foreach ($export_attente as $objet) {
  77.                 $pid getmypid();
  78.                 $objet->setDateDebutExecution(new \Datetime());
  79.                 $date_debut_execution = new \Datetime();
  80.                 $cronId               $objet->getId();
  81.                 $conn->update('export__export', ['execute' => 1'pid' => $pid'date_debut_execution' => $date_debut_execution->format("Y-m-d H:i:s")], ['id' => $objet->getId()]);
  82.                 /*
  83.                 $note = new Note;
  84.                 $note->setMessage('Un export est en cours depuis plus de 5min!');
  85.                 if(is_object($objet->getUtilisateur())) $note->setUtilisateur($objet->getUtilisateur());
  86.                 $date = new \DateTime();
  87.                 $date->modify("+5 minutes");
  88.                 $note->setDateRappel($date);
  89.                 $note->setPrive(true);
  90.                 $this->entityManager->persist($note);
  91.                 $this->entityManager->flush();
  92.                 $noteId = $note->getId();
  93.                 */
  94.                 $count 0;
  95.                 $entityName $objet->getEntityName();
  96.                 $entity     $objet->getEntity();
  97.                 $format     $objet->getFormat();
  98.                 $champs     = [];
  99.                 foreach ($objet->getChampsAexporter() as $champsAexporter) {
  100.                     $champs[] = $champsAexporter->getName();
  101.                 }
  102.                 $a 'Export/'.$entityName.'/'.date("Y").'/'.date("m").'/'.date("d").'/export.'.$format;
  103.                 $dir $this->publicPath.'/Export/'.$entityName.'/'.date("Y").'/'.date("m").'/'.date("d");
  104.                 $output->writeln($dir);
  105.                 //$dir .= '/';
  106.                 if ( ! is_dir($dir)) {
  107.                     $output->writeln('creation du repertoire : '.$dir);
  108.                     mkdir($dir0775true);
  109.                     chown($dir'www-data');
  110.                     //chown($dir, 'www');
  111.                 }
  112.                 $dir realpath($dir);
  113.                 chown($dir'www-data');
  114.                 chmod($dir0775);
  115.                 //$file = $dir.'/export.'.$format;
  116.                 $file $dir.'/export_'.$objet->getId().'.'.$format;
  117.                 $output->writeln($file);
  118.                 $retour $this->ExportProcess($champs$entityName$entity$format$file$output$note ""$objet);
  119.                 $date_debut_execution = new \Datetime();
  120.                 $conn->update('export__export', ['execute' => 1'date_fin' => $date_debut_execution->format("Y-m-d H:i:s")], ['id' => $cronId]);
  121.                 //$url = $this->getContainer()->get('router')->generate('dtc_inventaire_modifier', array('id'=>$inventaire->getId()));
  122.                 /*
  123.                 $note = $repo_note->find($noteId);
  124.                 $note->setMessage('Votre export est terminé : <a href="/'.$a.'">'.$a.'</a>.');
  125.                 $date = new \DateTime();
  126.                 $date->modify("+1 minutes");
  127.                 $note->setDateRappel($date);
  128.                 $dateFin = new \Datetime();
  129.                 $objet->setDateFin($dateFin);
  130.                 $this->entityManager->persist($objet);
  131.                 $this->entityManager->persist($note);
  132.                 $this->entityManager->flush();
  133.                 */
  134.             }
  135.         }
  136.     return 1;
  137.     }
  138.     public function ExportProcess($champs$entityName 'article'$entity$format$file$output$note$objet)
  139.     {
  140.         set_time_limit(6000);
  141.         if ($entityName == 'comptabilite') {
  142.             $this->comptabiliteService->genererExport($objet$this->regenerate$output);
  143.             $output->writeln('fin comptabilite exportCommand');
  144.             return;
  145.         } elseif ($entityName == "equivalence") {
  146.             $where     '';
  147.             $resultats $this->getJoin($champs);
  148.             $select2   "";
  149.             foreach ($resultats[1] as $subSelect) {
  150.                 $select2 .= $subSelect.",";
  151.             }
  152.             $select2 .= ",";
  153.             $select2 trim($select2",,");
  154.             $requete = <<<DQL
  155.             SELECT $select2 FROM App\Entity\Articles\Article e
  156.                         JOIN e.refsEquivalentes re
  157.                         LEFT JOIN e.marque m
  158.                         LEFT JOIN re.marque mre
  159.             DQL;
  160.             //echo $requete;
  161.             $query $this->entityManager->createQuery($requete);
  162.         } elseif ($entityName == "emplacementLibre") {
  163.             $resultats $this->getJoin($champs);
  164.             $requete   = <<<DQL
  165.                     SELECT nt.id,e.libelle,sum(e.stock) as total
  166.                     FROM App\Entity\Rangements\Emplacement e
  167.                     JOIN e.niveauTrois nt
  168.                     WHERE e.dateSuppression is null and e.niveauTrois is not null
  169.                       and e.visibilite = 1
  170.                       group by nt.id
  171.                       having total = 0
  172.               DQL;
  173.             //$requete = "select n.codeBarres  FROM DTCRangementsBundle:NiveauTrois n where n.id NOT IN (select nt.id FROM DTCRangementsBundle:Emplacement e JOIN e.niveauTrois nt)";
  174.             //$requete = "select n.codeBarres  FROM DTCRangementsBundle:NiveauTrois n where n.id IN (select nt.id FROM DTCRangementsBundle:Emplacement e JOIN e.niveauTrois nt)";
  175.             $query $this->entityManager->createQuery($requete);
  176.             //$output->writeln($query->getSql());
  177.         } elseif ($entityName == "exportCorrectionPump") {
  178.             $where     '';
  179.             $resultats $this->getJoin($champs);
  180.             /*
  181.             $select = '';
  182.             foreach($resultats[2] as $res){
  183.                if($select != '') $select .= ', ';
  184.                $select .= $res;
  185.             }
  186.              *
  187.              */
  188.             //$requete = 'SELECT a.pump, ca.prix_achat_net FROM article__condition_achat ca'
  189.             $requete     'SELECT e.reference, e.pump, e.cpump as cump, ca.prixAchatNet as prixAchatNetDevise, ca.coefficientConditionnement, d.tauxChange 
  190.                             FROM App\Entity\Articles\ConditionAchat ca'
  191.                            //$requete = 'SELECT '.$select.' FROM App\Entity\Articles\ConditionAchat ca'
  192.                            //.' LEFT JOIN article__article a'
  193.                            //.' LEFT JOIN App\Entity\Articles\Article a WITH a.id = ca.article_id'
  194.                            .' JOIN ca.article e'
  195.                            .' JOIN ca.fournisseur f'
  196.                            .' JOIN f.devise d'
  197.                            .' WHERE ca.defaut = 1';
  198.             $fournisseur $objet->getFournisseur();
  199.             if (is_object($fournisseur)) {
  200.                 $requete .= ' AND ca.fournisseur = '.$fournisseur->getId();
  201.             }
  202.             $marque $objet->getMarque();
  203.             if (is_object($marque)) {
  204.                 $requete .= ' AND e.marque = '.$marque->getId();
  205.             }
  206.             if ($objet->getArticlesComposes()) {
  207.                 $requete .= ' AND e.produitInterne = 1';
  208.             }
  209.             if ( ! $objet->getArchive()) {
  210.                 $requete .= ' AND (e.archive = 0 or e.archive is null)';
  211.             }
  212.             $requete .= ' ORDER BY e.cpump DESC';
  213.             //$requete .= ' ORDER BY a.pump DESC';
  214.             //$resultats[2][] = 'tauxChange';
  215.             //$resultats[2][] = 'PrixAchatNetEuro';
  216.             $query $this->entityManager->createQuery($requete);
  217.         } elseif ($entityName == "CommandeFournisseur") {
  218.             $where     '';
  219.             $resultats $this->getJoin($champs);
  220.             $requete   '';
  221.             $requete   'SELECT id FROM export__export';
  222.             $query $this->entityManager->createQuery($requete);
  223.         } else {
  224.             $where      '';
  225.             $resultats  $this->getJoin($champs);
  226.             $entityJoin '';
  227.             foreach ($resultats[0] as $resultat) {
  228.                 $entityJoin .= ' LEFT JOIN '.$resultat;
  229.             }
  230.             foreach ($resultats[3] as $resultat) {
  231.                 if ($where != '') {
  232.                     $where .= ' AND ';
  233.                 }
  234.                 $where .= $resultat;
  235.             }
  236.             $select '';
  237.             foreach ($resultats[1] as $resultat) {
  238.                 if ($select != '') {
  239.                     $select .= ', ';
  240.                 }
  241.                 $select .= $resultat;
  242.             }
  243.             if ($entityName == 'Mouvements de stock') {
  244.                 if (is_object($objet->getDateFiltreDebut())) {
  245.                     if ($where != '') {
  246.                         $where .= ' AND ';
  247.                     }
  248.                     $where .= "e.dateMvt > '".$objet->getDateFiltreDebut()->format('Y-m-d H:i:s')."'";
  249.                 }
  250.                 if (is_object($objet->getDateFiltreFin())) {
  251.                     if ($where != '') {
  252.                         $where .= ' AND ';
  253.                     }
  254.                     $where .= "e.dateMvt < '".$objet->getDateFiltreFin()->format('Y-m-d H:i:s')."'";
  255.                 }
  256.             }
  257.             if ($entityName == "offres") {
  258.                 $compteMarketPlace $objet->getCompteMarketPlace();
  259.                 if (is_object($compteMarketPlace)) {
  260.                     if ($where != '') {
  261.                         $where .= ' AND ';
  262.                     }
  263.                     $where .= 'e.compteMarketPlace = '.$compteMarketPlace->getId();
  264.                     if ($where != '') {
  265.                         $where .= ' AND ';
  266.                     }
  267.                     $where .= 'e.idImport is not null';
  268.                 }
  269.             } elseif ($entityName == "article") {
  270.                 $calculDispo $this->getApplication()->find('articleModifierDispo:maj');
  271.                 $input       = new ArrayInput(['forcer' => 1]);
  272.                 $calculDispo->run($input$output);
  273.                 if ($where != '') {
  274.                     $where .= ' AND ';
  275.                 }
  276.                 $where .= 'e.temporaire IS NULL AND e.parent is null';
  277.                 if ($objet->getArticlesComposes()) {
  278.                     if ($where != '') {
  279.                         $where .= ' AND ';
  280.                     }
  281.                     $where .= 'e.produitInterne = 1';
  282.                 }
  283.                 if ( ! $objet->getArchive()) {
  284.                     if ($where != '') {
  285.                         $where .= ' AND ';
  286.                     }
  287.                     $where .= '(e.archive = 0 or e.archive is null)';
  288.                 }
  289.                 $marque $objet->getMarque();
  290.                 if (is_object($marque)) {
  291.                     if ($where != '') {
  292.                         $where .= ' AND ';
  293.                     }
  294.                     $where .= 'e.marque = '.$marque->getId();
  295.                 }
  296.             } elseif ($entityName == "prixNetAchat") {
  297.                 if ($where != '') {
  298.                     $where .= ' AND ';
  299.                 }
  300.                 $where .= 'e.prixNet = 1';
  301.             } elseif ($entityName == "conditionAchat") {
  302.                 $marque $objet->getMarque();
  303.                 if (is_object($marque)) {
  304.                     if ($where != '') {
  305.                         $where .= ' AND ';
  306.                     }
  307.                     $where .= 'article.marque = '.$marque->getId();
  308.                     $entityJoin .= " LEFT JOIN e.article article";
  309.                 }
  310.                 if ($objet->getArticlesComposes()) {
  311.                     if ($where != '') {
  312.                         $where .= ' AND ';
  313.                     }
  314.                     $where .= 'e.defaut = 1';
  315.                 }
  316.             } elseif ($entityName == "conditionVente") {
  317.                 $marque $objet->getMarque();
  318.                 if (is_object($marque)) {
  319.                     if ($where != '') {
  320.                         $where .= ' AND ';
  321.                     }
  322.                     $where .= 'article.marque = '.$marque->getId();
  323.                     $entityJoin .= " LEFT JOIN e.article article";
  324.                 }
  325.             }
  326.             //Requete
  327.             $requete 'SELECT '.$select.'
  328.                 FROM '.$entity.' e
  329.                 '.$entityJoin;
  330.             if ($where != '') {
  331.                 $requete .= ' WHERE '.$where;
  332.             }
  333.             $requete .= ' GROUP BY e.id';
  334.             $output->writeln($requete);
  335.             //echo $format;
  336.             $output->writeln($requete);
  337.             //$output->writeln("STOP");
  338.             //exit;
  339.             $query $this->entityManager->createQuery($requete);
  340.         }
  341.         switch ($format) {
  342.             case 'xml':
  343.                 $retour $this->exportXml($query$entityName);
  344.                 return $retour;
  345.                 break;
  346.             case 'csv':
  347.                 $iterate true;
  348.                 //if($entityName == "exportCorrectionPump") $iterate = false;
  349.                 $retour $this->exportCsv($requete$entityName$resultats[2], $file$output$note ""$iterate$objet);
  350.                 return $retour;
  351.                 break;
  352.             case 'json':
  353.                 $retour $this->exportJson($query$entityName);
  354.                 return $retour;
  355.                 break;
  356.         }
  357.     }
  358.     private function getJoin($champs)
  359.     {
  360.         $entityJoin = [];
  361.         //$entityJoin['autres']='';
  362.         $select = [];
  363.         //$select['autres']='';
  364.         $titresColonnes = [];
  365.         $where          = [];
  366.         foreach ($champs as $k => $champ) {
  367.             $result trim(preg_replace('#([A-Z])#''_$1'$champ));
  368.             $key    strtolower($result).'_id';
  369.             switch ($champ) {
  370.                 /*
  371.                    $requete = 'SELECT e.id FROM App\Entity\Articles\Article e'
  372.             .' JOIN e.refsEquivalentes re'
  373.                 */
  374.                 case 'marqueEquivalence':
  375.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  376.                     //$titresColonnes[] = $key;
  377.                     $select[$key] = 'mre.reference as '.$champ.'_marqueEquivalence';
  378.                     //$entityJoin[] = 'e.marque m';
  379.                     $titresColonnes[] = $champ;
  380.                     break;
  381.                 case 'marqueReference':
  382.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  383.                     //$titresColonnes[] = $key;
  384.                     $select[$key] = 'm.reference as '.$champ.'_marqueReference';
  385.                     //$entityJoin[] = 'e.marque m';
  386.                     $titresColonnes[] = $champ;
  387.                     break;
  388.                 case 'articleReference':
  389.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  390.                     //$titresColonnes[] = $key;
  391.                     $select[$key]     = 'e.reference as '.$champ.'_reference';
  392.                     $titresColonnes[] = $champ;
  393.                     break;
  394.                 case 'articleEquivalence':
  395.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  396.                     //$titresColonnes[] = $key;
  397.                     $select[$key]     = 're.reference as '.$champ.'_reference';
  398.                     $titresColonnes[] = $champ;
  399.                     break;
  400.                 case 'marque':
  401.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  402.                     //$titresColonnes[] = $key;
  403.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  404.                     $titresColonnes[] = $champ;
  405.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  406.                     break;
  407.                 case 'categorieParent':
  408.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  409.                     //$titresColonnes[] = $key;
  410.                     $select[$key] = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  411.                     //$entityJoin[] = 'e.marque m';
  412.                     $titresColonnes[] = $champ;
  413.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  414.                     break;
  415.                 case 'modele':
  416.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  417.                     //$titresColonnes[] = $key;
  418.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  419.                     $titresColonnes[] = $champ;
  420.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  421.                     break;
  422.                 case 'images':
  423.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  424.                     //$titresColonnes[] = $key;
  425.                     break;
  426.                 case 'categories' :
  427.                     $select[$key]     = 'e.id as categArticles';
  428.                     $titresColonnes[] = $champ;
  429.                     break;
  430.                 case 'uniteMesure':
  431.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  432.                     //$titresColonnes[] = $key;
  433.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  434.                     $titresColonnes[] = $champ;
  435.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  436.                     break;
  437.                 case 'article':
  438.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  439.                     //$titresColonnes[] = $key;
  440.                     $select[$key]     = 'a_'.$k.'.reference as '.$champ.'_reference';
  441.                     $titresColonnes[] = $champ.'_reference';
  442.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  443.                     break;
  444.                 case 'fournisseur':
  445.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  446.                     //$titresColonnes[] = $key;
  447.                     $select[$key]     = 'a_'.$k.'.reference as '.$champ.'_reference';
  448.                     $titresColonnes[] = $champ.'_reference';
  449.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  450.                     break;
  451.                 case 'client':
  452.                     $select[$key]     = 'a_'.$k.'.reference as '.$champ.'_reference, a_'.$k.'.id as '.$champ.'_id';
  453.                     $titresColonnes[] = $champ.'_reference';
  454.                     $titresColonnes[] = $champ.'_id';
  455.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  456.                     break;
  457.                 case 'familleCompta' :
  458.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  459.                     //$titresColonnes[] = $key;
  460.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  461.                     $titresColonnes[] = $champ;
  462.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  463.                     break;
  464.                 case 'type' :
  465.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  466.                     //$titresColonnes[] = $key;
  467.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  468.                     $titresColonnes[] = $champ;
  469.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  470.                     break;
  471.                 case 'regleTaxe' :
  472.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  473.                     //$titresColonnes[] = $key;
  474.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  475.                     $titresColonnes[] = $champ;
  476.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  477.                     break;
  478.                 case 'regleTaxeAchat' :
  479.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  480.                     //$titresColonnes[] = $key;
  481.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  482.                     $titresColonnes[] = $champ;
  483.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  484.                     break;
  485.                 case 'categorieRemiseArticle' :
  486.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  487.                     //$titresColonnes[] = $key;
  488.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  489.                     $titresColonnes[] = $champ;
  490.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  491.                     break;
  492.                 case 'categorie' :
  493.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  494.                     //$titresColonnes[] = $key;
  495.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  496.                     $titresColonnes[] = $champ;
  497.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  498.                     break;
  499.                 case 'delaiPaiement' :
  500.                     //$select[$key] = '(e.delaiPaiement) as delaiPaiement_id';
  501.                     //$titresColonnes[] = $key;
  502.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  503.                     $titresColonnes[] = $champ;
  504.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  505.                     break;
  506.                 case 'delaipaiement' :
  507.                     //$select[$key] = '(e.delaiPaiement) as delaiPaiement_id';
  508.                     //$titresColonnes[] = $key;
  509.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  510.                     $titresColonnes[] = $champ;
  511.                     $entityJoin[]     = 'e.delaiPaiement a_'.$k;
  512.                     break;
  513.                 case 'articleRemplacement' :
  514.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  515.                     //$titresColonnes[] = $key;
  516.                     $select[$key]     = 'a_'.$k.'.reference as '.$champ.'_reference';
  517.                     $titresColonnes[] = $champ;
  518.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  519.                     break;
  520.                 case 'emplacements' :
  521.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  522.                     //$titresColonnes[] = $key;
  523.                     break;
  524.                 case 'langue' :
  525.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  526.                     //$titresColonnes[] = $key;
  527.                     break;
  528.                 case 'modereglement' :
  529.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  530.                     //$titresColonnes[] = $key;
  531.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  532.                     $titresColonnes[] = $champ;
  533.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  534.                     break;
  535.                 case 'compta' :
  536.                     //$entityJoin[]=" e.compta as compta";
  537.                     //$select["compta.name"] = '(compta.name) as '.$champ.'_id';
  538.                     //$titresColonnes[] = $key;
  539.                     $select[$key]     = 'a_'.$k.'.name as '.$champ.'_name';
  540.                     $titresColonnes[] = $champ;
  541.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  542.                     break;
  543.                 case 'devise' :
  544.                     //$select[$key] = '(e.'.$champ.') as '.$champ.'_id';
  545.                     //$titresColonnes[] = $key;
  546.                     $select[$key]     = 'a_'.$k.'.name as '.$champ.'_name';
  547.                     $titresColonnes[] = $champ;
  548.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  549.                     break;
  550.                 case 'stockDispo' :
  551.                     $select[$key]     = '(e.stock - e.stockReserve) as stockDispo';
  552.                     $titresColonnes[] = $champ;
  553.                     break;
  554.                 case 'stockDispoOffre' :
  555.                     $entityJoin[]     = 'e.article a_'.$k;
  556.                     $select[$key]     = '(a_'.$k.'.stock - a_'.$k.'.stockReserve) as stockDispoOffre';
  557.                     $titresColonnes[] = $champ;
  558.                     break;
  559.                 case 'serviceObj' :
  560.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  561.                     $titresColonnes[] = $champ.'_libelle';
  562.                     $titresColonnes[] = $champ.'_id';
  563.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  564.                     break;
  565.                 case 'civilite' :
  566.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  567.                     $titresColonnes[] = $champ.'_libelle';
  568.                     $titresColonnes[] = $champ.'_id';
  569.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  570.                     break;
  571.                 case 'pays' :
  572.                     $select[$key]     = 'a_'.$k.'.titre as '.$champ.'_titre, a_'.$k.'.id as '.$champ.'_id';
  573.                     $titresColonnes[] = $champ.'_titre';
  574.                     $titresColonnes[] = $champ.'_id';
  575.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  576.                     break;
  577.                 case 'categorieClient' :
  578.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  579.                     $titresColonnes[] = $champ.'_libelle';
  580.                     //$titresColonnes[] = $champ.'_id';
  581.                     $entityJoin[] = 'e.'.$champ.' a_'.$k;
  582.                     break;
  583.                 case 'codePostal' :
  584.                     $select[$key]     = 'a_'.$k.'.titre as '.$champ.'_titre, a_'.$k.'.id as '.$champ.'_id';
  585.                     $titresColonnes[] = $champ.'_titre';
  586.                     $titresColonnes[] = $champ.'_id';
  587.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  588.                     break;
  589.                 case 'ville' :
  590.                     $select[$key]     = 'a_'.$k.'.titre as '.$champ.'_titre, a_'.$k.'.id as '.$champ.'_id';
  591.                     $titresColonnes[] = $champ.'_titre';
  592.                     $titresColonnes[] = $champ.'_id';
  593.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  594.                     break;
  595.                 case 'zoneLivraison' :
  596.                     $select[$key]     = 'a_'.$k.'.reference as '.$champ.'_reference, a_'.$k.'.id as '.$champ.'_id';
  597.                     $titresColonnes[] = $champ.'_reference';
  598.                     $titresColonnes[] = $champ.'_id';
  599.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  600.                     break;
  601.                 case 'niveauUn' :
  602.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  603.                     $titresColonnes[] = $champ.'_libelle';
  604.                     $titresColonnes[] = $champ.'_id';
  605.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  606.                     break;
  607.                 case 'niveauDeux' :
  608.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  609.                     $titresColonnes[] = $champ.'_libelle';
  610.                     $titresColonnes[] = $champ.'_id';
  611.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  612.                     break;
  613.                 case 'niveauTrois' :
  614.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  615.                     $titresColonnes[] = $champ.'_libelle';
  616.                     $titresColonnes[] = $champ.'_id';
  617.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  618.                     break;
  619.                 case 'niveauQuatre' :
  620.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  621.                     $titresColonnes[] = $champ.'_libelle';
  622.                     $titresColonnes[] = $champ.'_id';
  623.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  624.                     break;
  625.                 case 'debut' :
  626.                     $key              $champ;
  627.                     $select[$key]     = 'e.'.$champ;
  628.                     $titresColonnes[] = "qte_mini";
  629.                     break;
  630.                 case 'fin' :
  631.                     $key              $champ;
  632.                     $select[$key]     = 'e.'.$champ;
  633.                     $titresColonnes[] = "qte_maxi";
  634.                     break;
  635.                 case 'secteurGeographique' :
  636.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  637.                     $titresColonnes[] = $champ.'_libelle';
  638.                     $titresColonnes[] = $champ.'_id';
  639.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  640.                     break;
  641.                 case 'transporteur' :
  642.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  643.                     $titresColonnes[] = $champ;
  644.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  645.                     break;
  646.                 case 'formeJuridique' :
  647.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  648.                     $titresColonnes[] = $champ.'_libelle';
  649.                     $titresColonnes[] = $champ.'_id';
  650.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  651.                     break;
  652.                 case 'origine' :
  653.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  654.                     $titresColonnes[] = $champ;
  655.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  656.                     break;
  657.                 case 'classification' :
  658.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle';
  659.                     $titresColonnes[] = $champ;
  660.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  661.                     break;
  662.                 case 'civiliteObj' :
  663.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  664.                     $titresColonnes[] = $champ.'_libelle';
  665.                     $titresColonnes[] = $champ.'_id';
  666.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  667.                     break;
  668.                 /*
  669.                     case 'condionAchatPrixAchatNetEuro' :
  670.                         $entityJoin[]=" e.conditionsAchat as ca";
  671.                         $select[$key] = '(ca.prixAchatNet) as '.$key;
  672.                         $titresColonnes[] = $key;
  673.                         $where[] = 'ca.defaut = 1';
  674.                     break;
  675.                  *
  676.                  */
  677.                 case 'utilisateur' :
  678.                     $select[$key]     = 'a_'.$k.'.nom as '.$champ.'_nom, a_'.$k.'.id as '.$champ.'_id';
  679.                     $titresColonnes[] = $champ.'_libelle';
  680.                     $titresColonnes[] = $champ.'_id';
  681.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  682.                     break;
  683.                 case 'raisonMouvementStock' :
  684.                     $select[$key]     = 'a_'.$k.'.libelle as '.$champ.'_libelle, a_'.$k.'.id as '.$champ.'_id';
  685.                     $titresColonnes[] = $champ.'_libelle';
  686.                     $titresColonnes[] = $champ.'_id';
  687.                     $entityJoin[]     = 'e.'.$champ.' a_'.$k;
  688.                     break;
  689.                 default:
  690.                     $key              $champ;
  691.                     $select[$key]     = 'e.'.$champ;
  692.                     $titresColonnes[] = $key;
  693.             }
  694.         }
  695.         return [$entityJoin$select$titresColonnes$where];
  696.     }
  697.     private function exportXml($query$entity)
  698.     {
  699.         $results  $query->getResult();
  700.         $rootNode = new \SimpleXMLElement("<?xml version='1.0' encoding='UTF-8' standalone='yes'?><items></items>");
  701.         foreach ($results as $result) {
  702.             $itemNode $rootNode->addChild($entity);
  703.             foreach ($result as $key => $value) {
  704.                 $itemNode->addChild($key$value);
  705.             }
  706.         }
  707.         $date     = new \Datetime();
  708.         $filename date_format($date'Ymd_').$entity.'.xml';
  709.         return new Response($rootNode->asXML(), 200, [
  710.             'Content-Type'        => 'application/force-download',
  711.             'Content-Disposition' => 'attachment; filename="'.$filename.'"',
  712.         ]);
  713.     }
  714.     private function exportCsv($requete$entity$titresColonnes$file$output$note$iterate true$objet)
  715.     {
  716.         set_time_limit(600);
  717.         $output->writeln('$iterate : '.$iterate);
  718.         $handle fopen($file'w+');
  719.         $delimiter ';';
  720.         fputcsv($handle$titresColonnes$delimiter);
  721.         if (== && $entity != "equivalence") {
  722.             $query $this->entityManager->createQuery($requete);
  723.             //$output->writeln($query->getSql());
  724.             //exit;
  725.             //Pour tester avec un minimum de résultat
  726.             //$query->setMaxResults(5);
  727.             $results      $query->toIterable();
  728.             $total_lignes count($query->getResult());
  729.             $this->writeFile($results$entity$handle$delimiter$output$iterate$titresColonnes$objet$total_lignes);
  730.         } elseif (== && $entity != "equivalence") {
  731.             $nbResultChoice 1000;
  732.             $nbResult       $nbResultChoice;
  733.             $j              1;
  734.             while ($nbResultChoice == $nbResult) {
  735.                 $output->writeln('$j : '.$j);
  736.                 $query $this->entityManager->createQuery($requete);
  737.                 //$results = $query->setMaxResults($nbResultChoice)->setFirstResult($j)->getResult();
  738.                 $results  $query->setMaxResults($nbResultChoice)->setFirstResult($j)->iterate();
  739.                 $nbResult count($results);
  740.                 $output->writeln('$nbResult : '.$nbResult);
  741.                 if ($nbResult 0) {
  742.                     $this->writeFile($results$entity$handle$delimiter$output$iterate$titresColonnes$objet);
  743.                 }
  744.                 $j $j $nbResultChoice;
  745.                 //if($j > 10000) break;
  746.                 $output->writeln($j);
  747.                 $this->entityManager->clear();
  748.             }
  749.         } elseif (($iterate === true || == 1) && $entity != "equivalence") {
  750.             $results $query
  751.                 //->setMaxResults(50)
  752.                 ->iterate();
  753.         } else {
  754.             $query $this->entityManager->createQuery($requete);
  755.             $results $query
  756.                 //->setMaxResults(50)
  757.                 ->execute();
  758.             $total_lignes count($query->getResult());
  759.             $this->writeFile($results$entity$handle$delimiter$output$iterate false$titresColonnes$objet$total_lignes);
  760.         }
  761.         fclose($handle);
  762.     }
  763.     public function writeFile($results$entity$handle$delimiter$output$iterate$titresColonnes$objet$total_lignes 1)
  764.     {
  765.         $conn $this->entityManager->getConnection();
  766.         $total_result $total_lignes;
  767.         //$total_result = count($results);
  768.         $output->writeln('total_result '.$total_result);
  769.         if ($iterate) {
  770.             $i 0;
  771.             foreach ($results as $row) {
  772.                 if ($entity == "emplacementLibre" and == 1) {
  773.                     unset($row[$i]["id"]);
  774.                     unset($row[$i]["total"]);
  775.                     $result $row[$i];
  776.                 } elseif ($entity == "article") {
  777.                     if ( ! empty($row[$i]["categArticles"])) {
  778.                         $id_article $row[$i]["categArticles"];
  779.                         $req_article "SELECT date FROM article__article where id = ".$id_article;
  780.                         $stmt        $conn->executeQuery($req_article);
  781.                         $article_bdd $stmt->fetchAllAssociative();
  782.                         $date_obj    = new \DateTime($article_bdd[0]["date"]);
  783.                         //$date_obj->format('Y-m-d h:i:s')
  784.                         //$output->writeln($date_obj->format('dmY'));
  785.                         $req_cat_art  "SELECT c.libelle
  786.                             FROM article__article_categorie aac
  787.                             LEFT JOIN article__categorie c ON aac.categorie_id = c.id
  788.                             where c.id != 1 and article_id = ".$id_article;
  789.                         $stmt         $conn->executeQuery($req_cat_art);
  790.                         $categ_bdd    $stmt->fetchAllAssociative();
  791.                         $categ_string "";
  792.                         if (count($categ_bdd)) {
  793.                             foreach ($categ_bdd as $pic) {
  794.                                 $categ_string .= $pic["libelle"]."|||";
  795.                             }
  796.                         }
  797.                         $categ_string             trim($categ_string"|||");
  798.                         $row[$i]["categArticles"] = $categ_string;
  799.                     }
  800.                     if ( ! empty($row[$i]["img"])) {
  801.                         $id_article $row[$i]["img"];
  802.                         $req_article "SELECT date FROM article__article where id = ".$id_article;
  803.                         $stmt        $conn->executeQuery($req_article);
  804.                         $article_bdd $stmt->fetchAllAssociative();
  805.                         $date_obj    = new \Datetime($article_bdd[0]["date"]);
  806.                         //$date_obj->format('Y-m-d h:i:s')
  807.                         //$output->writeln($date_obj->format('dmY'));
  808.                         $req_img    "SELECT * FROM article__image where article_id = ".$id_article;
  809.                         $stmt       $conn->executeQuery($req_img);
  810.                         $images_bdd $stmt->fetchAllAssociative();
  811.                         $img_string "";
  812.                         if (count($images_bdd)) {
  813.                             foreach ($images_bdd as $pic) {
  814.                                 //http://lbdp.local.tl/uploads/articles/images/2017/07/01/730836/small/Logo-Boutique-du-Progres.jpg
  815.                                 $url_img "http://bdp.devweb.pro/uploads/articles/images/";
  816.                                 $url_img .= $date_obj->format('Y')."/".$date_obj->format('m')."/".$date_obj->format('d')."/";
  817.                                 $url_img .= $id_article."/originals/";
  818.                                 $url_img .= $pic["url"];
  819.                                 $img_string .= $url_img."|||";
  820.                             }
  821.                         }
  822.                         $img_string     trim($img_string"|||");
  823.                         $row[$i]["img"] = $img_string;
  824.                     }
  825.                     //print_r($row);
  826.                     $result $row;
  827.                 } elseif ($entity == "exportEquivalence" and != 1) {
  828.                 } elseif ($entity == "exportCorrectionPump") {
  829.                     $result = [];
  830.                     foreach ($titresColonnes as $col) {
  831.                         if (array_key_exists($col$row[$i])) {
  832.                             if (in_array($col, ['tauxChange''cump''pump''prixAchatNetDevise''coefficientConditionnement'])) {
  833.                                 $result[] = str_replace('.'','$row[$i][$col]);
  834.                             } else {
  835.                                 $result[] = $row[$i][$col];
  836.                             }
  837.                         }
  838.                         if ($col == 'prixAchatNetEuro') {
  839.                             $prixAchatNetEuro floatval($row[$i]['prixAchatNetDevise']) * floatval($row[$i]['tauxChange']);
  840.                             $result[]         = str_replace('.'','$prixAchatNetEuro);
  841.                         }
  842.                     }
  843.                 } elseif ($entity == "conditionVente") {
  844.                     foreach ($row as $k => $r) {
  845.                         if (is_object($r)) {
  846.                             $row[$k] = $r->format('Y-m-d h:i:s');
  847.                         }
  848.                     }
  849.                     $result $row;
  850.                 } elseif ($entity == "Mouvements de stock") {
  851.                     foreach ($row as $k => $r) {
  852.                         if (is_a($r'DateTime')) {
  853.                             $row[$k] = $r->format('Y-m-d h:i');
  854.                         }
  855.                     }
  856.                     $result $row;
  857.                 } else {
  858.                     $result $row;
  859.                 }
  860.                 fputcsv($handle$result$delimiter);
  861.                 if ($i 1000 == 0) {
  862.                     $output->writeln($i);
  863.                 }
  864.                 $i++;
  865.                 $progression 0;
  866.                 if ($total_result 0) {
  867.                     round($progression $i 100 $total_result);
  868.                 }
  869.                 $progression round($progression);
  870.                 //echo "<div>i ".$i."</div>\n";
  871.                 //echo "<div>total ".count($results)."</div>\n";
  872.                 //echo "<div>progression ".$progression."</div>\n";
  873.                 //exit;
  874.                 $conn->update('export__export', ['progression' => $progression], ['id' => $objet->getId()]);
  875.             }
  876.         } else {
  877.             $i 0;
  878.             foreach ($results as $key => $row) {
  879.                 if ($entity == "exportCorrectionPump") {
  880.                     $result = [];
  881.                     foreach ($titresColonnes as $col) {
  882.                         if (array_key_exists($col$row)) {
  883.                             if (in_array($col, ['tauxChange''cump''pump''prixAchatNetDevise''coefficientConditionnement'])) {
  884.                                 $result[] = str_replace('.'','$row[$col]);
  885.                             } else {
  886.                                 $result[] = $row[$col];
  887.                             }
  888.                         }
  889.                         if ($col == 'prixAchatNetEuro') {
  890.                             $prixAchatNetEuro floatval($row['prixAchatNetDevise']) * floatval($row['tauxChange']);
  891.                             $result[]         = str_replace('.'','$prixAchatNetEuro);
  892.                         }
  893.                     }
  894.                 } else {
  895.                     $result $row;
  896.                 }
  897.                 fputcsv($handle$result$delimiter);
  898.                 $i++;
  899.                 $progression 0;
  900.                 if ($total_result 0) {
  901.                     $progression round($i 100 $total_result);
  902.                 }
  903.                 $conn->update('export__export', ['progression' => ($progression)], ['id' => $objet->getId()]);
  904.             }
  905.         }
  906.     }
  907.     private function exportJson($query$entity)
  908.     {
  909.         $results  $query->getResult();
  910.         $date     = new \Datetime();
  911.         $filename date_format($date'Ymd_').$entity.'.json';
  912.         $response = new Response(json_encode(['Entity' => $results]));
  913.         //$response->headers->set('Content-Type', 'application/json');
  914.         $response->headers->set('Content-Type''application/force-download');
  915.         $response->headers->set('Content-Disposition''attachment; filename="'.$filename.'"');
  916.         return $response;
  917.     }
  918. }