src/Services/EquipementCommandeService.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\Services;
  3. use App\Entity\EquipementBonLivraison;
  4. use App\Entity\EquipementCategorie;
  5. use App\Entity\EquipementCommande;
  6. use App\Entity\EquipementCommandeComment;
  7. use App\Entity\EquipementCommandeFile;
  8. use App\Entity\EquipementCommandeProduitPrix;
  9. use App\Entity\EquipementCommandeProduitPrixDetail;
  10. use App\Entity\EquipementFournisseur;
  11. use App\Entity\EquipementHistoriqueImport;
  12. use App\Entity\EquipementLogisticienReference;
  13. use App\Entity\EquipementLogisticienReferenceHistorique;
  14. use App\Entity\EquipementMarque;
  15. use App\Entity\EquipementReference;
  16. use App\Entity\EquipementSousCommande;
  17. use App\Entity\EquipementSousCommandeProduitPrix;
  18. use App\Form\EquipementCategorieType;
  19. use App\Form\EquipementMarqueType;
  20. use App\Form\EquipementReferenceType;
  21. use Doctrine\ORM\EntityManagerInterface;
  22. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  23. use PhpOffice\PhpSpreadsheet\Shared\Date;
  24. use PhpOffice\PhpSpreadsheet\Style\Border;
  25. use PhpOffice\PhpSpreadsheet\Style\Color;
  26. use PhpOffice\PhpSpreadsheet\Style\Fill;
  27. use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  28. use PhpOffice\PhpSpreadsheet\Writer\Csv;
  29. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  30. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  31. use Symfony\Component\Form\FormFactoryInterface;
  32. use Symfony\Component\HttpFoundation\File\UploadedFile;
  33. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  34. use Symfony\Contracts\Translation\TranslatorInterface;
  35. use Twig\Environment;
  36. class EquipementCommandeService
  37. {
  38.     private $em;
  39.     private $trans;
  40.     private $twig;
  41.     public function __construct(
  42.         Environment $twig,
  43.         EntityManagerInterface $em,
  44.         TranslatorInterface $trans,
  45.         FlashBagInterface $flashBag,
  46.         ParameterBagInterface $params,
  47.         FormFactoryInterface $form
  48.     ) {
  49.         $this->em = $em;
  50.         $this->trans = $trans;
  51.         $this->twig = $twig;
  52.         $this->form = $form;
  53.         $this->flashBag = $flashBag;
  54.         $this->params = $params;
  55.     }
  56.     public function paginate($request){
  57.         $length = $request->get('length');
  58.         $length = $length && ($length!=-1)?$length:0;
  59.         $start = $request->get('start');
  60.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  61.         $column = $request->get('columns');
  62.         $order = $request->get('order')[0];
  63.         $columnOrder = $order['column'];
  64.         $dirOrder = $order['dir'];
  65.         $columNameOrder = $column[$columnOrder]['data'];
  66.         $search = $request->get('search');
  67.         $commandeDate1 = $request->get('commandeDate1');
  68.         $commandeDate2 = $request->get('commandeDate2');
  69.         $filters = [
  70.             'query' => trim(@$search['value']),
  71.             'status' => $request->get('status'),
  72.             'commandeDate1' => $commandeDate1,
  73.             'commandeDate2' => $commandeDate2,
  74.             'fournisseur' => $request->get('fournisseur')
  75.         ];
  76.         $commandes = $this->em->getRepository(EquipementCommande::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  77.         $recordsFiltered = $this->em->getRepository(EquipementCommande::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  78.         $recordsTotal = $this->em->getRepository(EquipementCommande::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  79.         $output = array(
  80.             'data' => array(),
  81.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  82.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  83.         );
  84.         foreach ($commandes as $commande) {
  85.             $action = $this->twig->render('admin/equipement/commande/default/action.html.twig', [
  86.                 'commande' => $commande
  87.             ]);
  88.             $action2 = $this->twig->render('admin/equipement/commande/default/action2.html.twig', [
  89.                 'commande' => $commande
  90.             ]);
  91.             $status = $this->twig->render('admin/equipement/commande/default/statut-label.html.twig', [
  92.                 'commande' => $commande
  93.             ]);
  94.             $output['data'][] = [
  95.                 'responsive_id' => '',
  96.                 'id' => $commande->getId(),
  97.                 'numero' => $commande->getId(),
  98.                 'numeroFacture' => $commande->getNumero(),
  99.                 'status' => $status,
  100.                 'dateLivresonPrevu' => $commande->getDateLivresonPrevu() ? $commande->getDateLivresonPrevu()->format('d/m/Y') : '',
  101.                 'fournisseur' => $commande->getFournisseur() ? $commande->getFournisseur()->getName() : null,
  102.                 'action1' => $action,
  103.                 'action2' => $action2
  104.             ];
  105.         }
  106.         return $output;
  107.     }
  108.     public function getEquipementPalettesWithCommande($commande){
  109.         if($commande){
  110.             $sousCommandes = $commande->getEquipementSousCommande();
  111.             $tab = [];
  112.             if($sousCommandes){
  113.                 foreach ($sousCommandes as $sousCommande){
  114.                     $series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbySousCommande($sousCommande);
  115.                     if($series){
  116.                         foreach ($series as $serie){
  117.                             $tab[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
  118.                             $tab[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
  119.                         }
  120.                     }
  121.                 }
  122.                 $nbrPalette = count($tab);
  123.                 $nbrSerie = 0;
  124.                 foreach ($tab as $value) {
  125.                     $nbrSerie = $nbrSerie + count($value['detail']);
  126.                 }
  127.                 return [
  128.                     'nbrPalette' => $nbrPalette,
  129.                     'nbrSerie' => $nbrSerie,
  130.                 ];
  131.             }
  132.         }
  133.         return [
  134.             'nbrPalette' => 0,
  135.             'nbrSerie' => 0,
  136.         ];
  137.     }
  138.     public function getEquipementProduitSousCommande($souCommande){
  139.         if($souCommande){
  140.             $series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbySousCommande($souCommande);
  141.             if($series){
  142.                 $tab2 = [];
  143.                 foreach ($series as $serie){
  144.                     $tab2[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
  145.                     $tab2[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
  146.                 }
  147.                 $nbrPalette = count($tab2);
  148.                 $nbrSerie = 0;
  149.                 foreach ($tab2 as $value) {
  150.                     $nbrSerie = $nbrSerie + count($value['detail']);
  151.                 }
  152.             }
  153.             return [
  154.                 'nbrPalette' => $nbrPalette,
  155.                 'nbrSerie' => $nbrSerie,
  156.             ];
  157.         }
  158.         return [
  159.             'nbrPalette' => 0,
  160.             'nbrSerie' => 0,
  161.         ];
  162.     }
  163.     public function getEquipementProduitCommande($commande){
  164.         if($commande){
  165.             $sousCommandes = $commande->getEquipementSousCommande();
  166.             $tab = [];
  167.             if($sousCommandes){
  168.                 foreach ($sousCommandes as $sousCommande){
  169.                     $equipementSousCommandesPrix = $this->em->getRepository(EquipementSousCommandeProduitPrix::class)->findBy(['equipementSousCommande'=>$sousCommande->getId()]);
  170.                     if($equipementSousCommandesPrix){
  171.                         foreach ($equipementSousCommandesPrix as $equipementSousCommandesPrix){
  172.                             $produitPrix = $equipementSousCommandesPrix->getEquipementCommandeProduitPrix();
  173.                             $tab[$produitPrix->getEquipementReference()->getId()]['reference']= $produitPrix->getEquipementReference()->getReference();
  174.                             $tab[$produitPrix->getEquipementReference()->getId()]['prix']= $produitPrix->getPrixUnitaire();
  175.                             $nbrPalette = 0;
  176.                             $nbrSerie = 0;
  177.                             $series = $equipementSousCommandesPrix->getEquipementCommandeProduitPrixDetail();
  178.                             if(count($series)>0){
  179.                                 $tab2 = [];
  180.                                 foreach ($series as $serie){
  181.                                     $tab2[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
  182.                                     $tab2[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
  183.                                 }
  184.                                 $nbrPalette = count($tab2);
  185.                                 $nbrSerie = 0;
  186.                                 foreach ($tab2 as $value) {
  187.                                     $nbrSerie = $nbrSerie + count($value['detail']);
  188.                                 }
  189.                             }
  190.                             if(isset($tab[$produitPrix->getEquipementReference()->getId()]['palette'])){
  191.                                 $tab[$produitPrix->getEquipementReference()->getId()]['palette']= $tab[$produitPrix->getEquipementReference()->getId()]['palette'] + $nbrPalette;
  192.                             }else{
  193.                                 $tab[$produitPrix->getEquipementReference()->getId()]['palette']= $nbrPalette;
  194.                             }
  195.                             if(isset($tab[$produitPrix->getEquipementReference()->getId()]['unite'])){
  196.                                 $tab[$produitPrix->getEquipementReference()->getId()]['unite']= $tab[$produitPrix->getEquipementReference()->getId()]['unite'] + $nbrSerie;
  197.                             }else{
  198.                                 $tab[$produitPrix->getEquipementReference()->getId()]['unite']= $nbrSerie;
  199.                             }
  200.                         }
  201.                     }
  202.                 }
  203.             }
  204.             return $tab;
  205.         }
  206.         return false;
  207.     }
  208.     public function getEquipementProduitTabSousCommande($sousCommande){
  209.         if($sousCommande){
  210.             $tab = [];
  211.             $equipementSousCommandesPrix = $this->em->getRepository(EquipementSousCommandeProduitPrix::class)->findBy(['equipementSousCommande'=>$sousCommande->getId()]);
  212.             if($equipementSousCommandesPrix){
  213.                 foreach ($equipementSousCommandesPrix as $equipementSousCommandesPrix){
  214.                     $produitPrix = $equipementSousCommandesPrix->getEquipementCommandeProduitPrix();
  215.                     $tab[$produitPrix->getEquipementReference()->getId()]['reference']= $produitPrix->getEquipementReference()->getReference();
  216.                     $tab[$produitPrix->getEquipementReference()->getId()]['prix']= $produitPrix->getPrixUnitaire();
  217.                     $nbrPalette = 0;
  218.                     $nbrSerie = 0;
  219.                     $series = $equipementSousCommandesPrix->getEquipementCommandeProduitPrixDetail();
  220.                     if(count($series)>0){
  221.                         $tab2 = [];
  222.                         foreach ($series as $serie){
  223.                             $tab2[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
  224.                             $tab2[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
  225.                         }
  226.                         $nbrPalette = count($tab2);
  227.                         $nbrSerie = 0;
  228.                         foreach ($tab2 as $value) {
  229.                             $nbrSerie = $nbrSerie + count($value['detail']);
  230.                         }
  231.                     }
  232.                     if(isset($tab[$produitPrix->getEquipementReference()->getId()]['palette'])){
  233.                         $tab[$produitPrix->getEquipementReference()->getId()]['palette']= $tab[$produitPrix->getEquipementReference()->getId()]['palette'] + $nbrPalette;
  234.                     }else{
  235.                         $tab[$produitPrix->getEquipementReference()->getId()]['palette']= $nbrPalette;
  236.                     }
  237.                     if(isset($tab[$produitPrix->getEquipementReference()->getId()]['unite'])){
  238.                         $tab[$produitPrix->getEquipementReference()->getId()]['unite']= $tab[$produitPrix->getEquipementReference()->getId()]['unite'] + $nbrSerie;
  239.                     }else{
  240.                         $tab[$produitPrix->getEquipementReference()->getId()]['unite']= $nbrSerie;
  241.                     }
  242.                 }
  243.             }
  244.             return $tab;
  245.         }
  246.         return false;
  247.     }
  248.     public function addComment($request,$user)
  249.     {
  250.         $comment = $request->get('comment');
  251.         $token = $request->get('token');
  252.         if($comment and $token){
  253.             $equipementCommande = $this->em->getRepository(EquipementCommande::class)->findOneBy(['token'=>$token]);
  254.             if($equipementCommande && $user){
  255.                 $commentEntity = new EquipementCommandeComment();
  256.                 $commentEntity->setEquipementCommande($equipementCommande);
  257.                 $commentEntity->setUser($user);
  258.                 $commentEntity->setComment($comment);
  259.                 $this->em->persist($commentEntity);
  260.                 $this->em->flush();
  261.                 return [
  262.                     'commentEntity' => $commentEntity,
  263.                     'success' => true
  264.                 ];
  265.             }
  266.         }
  267.         return [
  268.             'success' => false
  269.         ];
  270.     }
  271.     public function addCommentSousCommande($request,$user)
  272.     {
  273.         $comment = $request->get('comment');
  274.         $token = $request->get('token');
  275.         if($comment and $token){
  276.             $equipementCommande = $this->em->getRepository(EquipementSousCommande::class)->findOneBy(['token'=>$token]);
  277.             if($equipementCommande && $user){
  278.                 $commentEntity = new EquipementCommandeComment();
  279.                 $commentEntity->setEquipementSousCommande($equipementCommande);
  280.                 $commentEntity->setUser($user);
  281.                 $commentEntity->setComment($comment);
  282.                 $this->em->persist($commentEntity);
  283.                 $this->em->flush();
  284.                 return [
  285.                     'commentEntity' => $commentEntity,
  286.                     'success' => true
  287.                 ];
  288.             }
  289.         }
  290.         return [
  291.             'success' => false
  292.         ];
  293.     }
  294.     public function getEquipementCommandeFile($commande){
  295.         $filesIds = $this->em->getRepository(EquipementCommandeFile::class)->getEquipementCommandeFileDistinct($commande);
  296.         $tab = [];
  297.         if($filesIds){
  298.             foreach ($filesIds as $id){
  299.                 $tab[] = $this->em->getRepository(EquipementHistoriqueImport::class)->find($id[1]);
  300.             }
  301.         }
  302.         return $tab;
  303.     }
  304.     public function paginateSousCommande($request){
  305.         $length = $request->get('length');
  306.         $length = $length && ($length!=-1)?$length:0;
  307.         $start = $request->get('start');
  308.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  309.         $column = $request->get('columns');
  310.         $order = $request->get('order')[0];
  311.         $columnOrder = $order['column'];
  312.         $dirOrder = $order['dir'];
  313.         $columNameOrder = $column[$columnOrder]['data'];
  314.         $search = $request->get('search');
  315.         $commandeDate1 = $request->get('commandeDate1');
  316.         $commandeDate2 = $request->get('commandeDate2');
  317.         $filters = [
  318.             'query' => trim(@$search['value']),
  319.             'status' => $request->get('status'),
  320.             'commandeDate1' => $commandeDate1,
  321.             'commandeDate2' => $commandeDate2,
  322.             'fournisseur' => $request->get('fournisseur')
  323.         ];
  324.         $commandes = $this->em->getRepository(EquipementSousCommande::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  325.         $recordsFiltered = $this->em->getRepository(EquipementSousCommande::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  326.         $recordsTotal = $this->em->getRepository(EquipementSousCommande::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  327.         $output = array(
  328.             'data' => array(),
  329.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  330.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  331.         );
  332.         foreach ($commandes as $commande) {
  333.             $action = $this->twig->render('admin/equipement/sous-commande/default/action.html.twig', [
  334.                 'commande' => $commande
  335.             ]);
  336.             $action2 = $this->twig->render('admin/equipement/sous-commande/default/action2.html.twig', [
  337.                 'commande' => $commande
  338.             ]);
  339.             $status = $this->twig->render('admin/equipement/sous-commande/default/statut-label.html.twig', [
  340.                 'commande' => $commande
  341.             ]);
  342.             $fournisseur = '';
  343.             if($commande->getFournisseur()){
  344.                 $fournisseur = $commande->getFournisseur()->getName();
  345.             }elseif(($commande->getEquipementCommande()->getFournisseur())){
  346.                 $fournisseur = $commande->getEquipementCommande()->getFournisseur()->getName();
  347.             }
  348.             $output['data'][] = [
  349.                 'responsive_id' => '',
  350.                 'id' => $commande->getId(),
  351.                 'numero' => $commande->getId(),
  352.                 'numeroFacture' => $commande->getEquipementCommande() ? $commande->getEquipementCommande()->getNumero() : null,
  353.                 'numeroSousFacture' => $commande->getNumero(),
  354.                 'status' => $status,
  355.                 'nbPalette' => $commande->getNbPalette(),
  356.                 'nbUnite' => $commande->getNbUnite(),
  357.                 'dateLivresonPrevu' => $commande->getDateLivresonPrevu() ? $commande->getDateLivresonPrevu()->format('d/m/Y') : '',
  358.                 'fournisseur' => $fournisseur,
  359.                 'action1' => $action,
  360.                 'action2' => $action2
  361.             ];
  362.         }
  363.         return $output;
  364.     }
  365.     public function paginateStock($request){
  366.         $length = $request->get('length');
  367.         $length = $length && ($length!=-1)?$length:0;
  368.         $start = $request->get('start');
  369.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  370.         $column = $request->get('columns');
  371.         $order = $request->get('order')[0];
  372.         $columnOrder = $order['column'];
  373.         $dirOrder = $order['dir'];
  374.         $columNameOrder = $column[$columnOrder]['data'];
  375.         $search = $request->get('search');
  376.         $filters = [
  377.             'query' => trim(@$search['value']),
  378.             'category' => $request->get('category'),
  379.             'logiticien' => $request->get('logiticien'),
  380.             'marque' => $request->get('marque'),
  381.             'stockNotZero' => $request->get('stockNotZero'),
  382.             'stockIdsNotZero' => $this->getStockIdsNotZero(),
  383.         ];
  384.         $stocks = $this->em->getRepository(EquipementLogisticienReference::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
  385.         $recordsFiltered = $this->em->getRepository(EquipementLogisticienReference::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  386.         $recordsTotal = $this->em->getRepository(EquipementLogisticienReference::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  387.         $output = array(
  388.             'data' => array(),
  389.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  390.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  391.         );
  392.         foreach ($stocks as $stock) {
  393.             $action = $this->twig->render('admin/equipement/stock/default/action.html.twig', [
  394.                 'stock' => $stock
  395.             ]);
  396.             $checkbox = $this->twig->render('admin/equipement/stock/default/checkbox.html.twig', [
  397.                 'stock' => $stock
  398.             ]);
  399.             $tabStock = $this->getTabEquipementBylogisticionReference($stock);
  400.             $totalUnite = $tabStock['nbrSerie'];
  401.             $totalPalette = $tabStock['nbrPalette'];
  402.             $output['data'][] = [
  403.                 'responsive_id' => '',
  404.                 'id' => $stock->getId(),
  405.                 'btnSelect' => $checkbox,
  406.                 'reference' => $stock->getEquipementReference()?$stock->getEquipementReference()->getReference():'',
  407.                 'category' => $stock->getEquipementReference() && $stock->getEquipementReference()->getEquipementCategorie() ? $stock->getEquipementReference()->getEquipementCategorie()->getName() : '',
  408.                 'designation' => $stock->getEquipementReference()?$stock->getEquipementReference()->getDesignation():'',
  409.                 'logisticien' => $stock->getLogisticien() ? $stock->getLogisticien()->getName() : null,
  410.                 'totalUnite' =>$totalUnite,
  411.                 'totalPalette' =>$totalPalette ,
  412.                 'action' => $action,
  413.             ];
  414.         }
  415.         return $output;
  416.     }
  417.     public function getStockIdsNotZero(){
  418.         $stocks = $this->em->getRepository(EquipementLogisticienReference::class)->findAll();
  419.         $ids = [];
  420.         foreach ($stocks as $stock) {
  421.             $tabStock = $this->getTabEquipementBylogisticionReference($stock);
  422.             $totalUnite = $tabStock['nbrSerie'];
  423.             if((int)$totalUnite > 0){
  424.                 $ids[] = $stock->getId();
  425.             }
  426.         }
  427.         return $ids;
  428.     }
  429.     public function paginateStockMateriel($request,$id){
  430.         $length = $request->get('length');
  431.         $length = $length && ($length!=-1)?$length:0;
  432.         $start = $request->get('start');
  433.         $start = $length?($start && ($start!=-1)?$start:0)/$length:0;
  434.         $column = $request->get('columns');
  435.         $order = $request->get('order')[0];
  436.         $columnOrder = $order['column'];
  437.         $dirOrder = $order['dir'];
  438.         $columNameOrder = $column[$columnOrder]['data'];
  439.         $search = $request->get('search');
  440.         $filters = [
  441.             'query' => trim(@$search['value']),
  442.             'dateFabrication' => $request->get('dateFabrication'),
  443.             'idLogisticienReference' => $id
  444.         ];
  445.         $stocks = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->searchStockMateriel($filters, $start, $length, true,$columNameOrder, $dirOrder);
  446.         $recordsFiltered = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->searchStockMateriel($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
  447.         $recordsTotal = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->searchStockMateriel(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
  448.         $output = array(
  449.             'data' => array(),
  450.             'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
  451.             'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
  452.         );
  453.         foreach ($stocks as $stock) {
  454.             $checkbox = $this->twig->render('admin/equipement/stock/default/checkboxMateriel.html.twig', [
  455.                 'stock' => $stock
  456.             ]);
  457.             $output['data'][] = [
  458.                 'responsive_id' => '',
  459.                 'id' => $stock->getId(),
  460.                 'btnSelect' => $checkbox,
  461.                 'numPalette' => $stock->getNumPalette(),
  462.                 'numSerie' => $stock->getNumSerie() ,
  463.                 'adresseDepot' => $stock->getEquipementLogisticienReception()?$stock->getEquipementLogisticienReception()->getAdresseDepot():'',
  464.                 'dateFabrication' =>'-',
  465.             ];
  466.         }
  467.         return $output;
  468.     }
  469.     public function getStockMaterielByRequestSelectAll($request,$id){
  470.         $search = $request->get('search');
  471.        $filters = [
  472.             'query' => trim(@$search['value']),
  473.            'dateFabrication' => $request->get('dateFabrication'),
  474.            'idLogisticienReference' => $id
  475.         ];
  476.         $materiels = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->searchStockMateriel($filters);
  477.         return $materiels ;
  478.     }
  479.     public function extractStockMateriel($materiels,$request){
  480.         $file= $this->params->get('zips_directory')."/extraire_materiel.xlsx";
  481.         $spreadsheet = new Spreadsheet();
  482.         $sheet = $spreadsheet->getActiveSheet();
  483.         // Head 2
  484.         $tableHead2 = [
  485.             'font'=>[
  486.                 'color'=>[
  487.                     'rgb'=>'0071c1'
  488.                 ],
  489.                 'bold'=>true,
  490.                 'size'=>12
  491.             ],
  492.             'fill'=>[
  493.                 'fillType' => Fill::FILL_SOLID,
  494.                 'startColor' => [
  495.                     'rgb' => 'dcebf4'
  496.                 ]
  497.             ],
  498.         ];
  499.         $sheet->setCellValue('A1',"N° palette")
  500.             ->setCellValue('B1',"N° série")
  501.             ->setCellValue('C1',"Localisation")
  502.             ->setCellValue('D1',"Date de fabrication");
  503.         // Borders a2 z2
  504.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  505.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  506.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  507.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  508.         //width
  509.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
  510.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
  511.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
  512.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
  513.         $spreadsheet->getActiveSheet()->getStyle('A1:D1')->applyFromArray($tableHead2);
  514.         $row=2;
  515.         foreach($materiels as $materiel){
  516.             $spreadsheet->getActiveSheet()
  517.                 ->setCellValue('A'.$row , (string)$materiel->getNumPalette())
  518.                 ->setCellValue('B'.$row , $materiel->getNumSerie())
  519.                 ->setCellValue('C'.$row , $materiel->getEquipementLogisticienReception()?$materiel->getEquipementLogisticienReception()->getAdresseDepot():'')
  520.                 ->setCellValue('D'.$row , '-')
  521.             ;
  522.             //increment row
  523.             $row++;
  524.         }
  525.         $firstRow=1;
  526.         $lastRow=$row-1;
  527.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":D".$lastRow);
  528.         $writer = new Xlsx($spreadsheet);
  529.         $writer->save($file);
  530.         return $file;
  531.     }
  532.     public function extractStockHisorique($historiques,$request){
  533.         $file= $this->params->get('zips_directory')."/extraire_historique.xlsx";
  534.         $spreadsheet = new Spreadsheet();
  535.         $sheet = $spreadsheet->getActiveSheet();
  536.         // Head 2
  537.         $tableHead2 = [
  538.             'font'=>[
  539.                 'color'=>[
  540.                     'rgb'=>'0071c1'
  541.                 ],
  542.                 'bold'=>true,
  543.                 'size'=>12
  544.             ],
  545.             'fill'=>[
  546.                 'fillType' => Fill::FILL_SOLID,
  547.                 'startColor' => [
  548.                     'rgb' => 'dcebf4'
  549.                 ]
  550.             ],
  551.         ];
  552.         $sheet->setCellValue('A1',"Date")
  553.             ->setCellValue('B1',"Action")
  554.             ->setCellValue('C1',"Palettes")
  555.             ->setCellValue('D1',"Unités");
  556.         // Borders a2 z2
  557.         $spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  558.         $spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  559.         $spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  560.         $spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
  561.         //width
  562.         $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
  563.         $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(15);
  564.         $spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(15);
  565.         $spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
  566.         $spreadsheet->getActiveSheet()->getStyle('A1:D1')->applyFromArray($tableHead2);
  567.         $row=2;
  568.         foreach($historiques as $historique){
  569.             $spreadsheet->getActiveSheet()
  570.                 ->setCellValue('A'.$row , $historique->getCreatedAt()->format('d/m/Y'))
  571.                 ->setCellValue('C'.$row , $historique->getNbrPalette())
  572.                 ->setCellValue('D'.$row , $historique->getNbrUnite())
  573.             ;
  574.             if($historique->getTypeAction() == EquipementLogisticienReferenceHistorique::entrant){
  575.                 $spreadsheet->getActiveSheet() ->setCellValue('B'.$row , 'Entrée');
  576.             }else{
  577.                 $spreadsheet->getActiveSheet() ->setCellValue('B'.$row , 'Sortie');
  578.             }
  579.             //increment row
  580.             $row++;
  581.         }
  582.         $firstRow=1;
  583.         $lastRow=$row-1;
  584.         $spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":D".$lastRow);
  585.         $writer = new Xlsx($spreadsheet);
  586.         $writer->save($file);
  587.         return $file;
  588.     }
  589.     private function formatTableStock($series){
  590.         $nbrPalette = 0;
  591.         $nbrSerie = 0;
  592.         $nbrSeriePerPalette = 0;
  593.         $seriesPrix = 0;
  594.         $seriePrix = 0;
  595.         $nbrSerieSepare = 0;
  596.         if($series){
  597.             $tab2 = [];
  598.             foreach ($series as $serie){
  599.                 if($serie->getNumPalette()){
  600.                     $tab2[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
  601.                     $tab2[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
  602.                 }else{
  603.                     $tab2['separe']['detail'][] = $serie->getNumSerie() ;
  604.                 }
  605.                 // stock importé (origine inconnue) : pas de sous-commande/prix rattaché → prix nul
  606.                 $sousCommandeProduitPrix = $serie->getEquipementSousCommandeProduitPrix();
  607.                 if($sousCommandeProduitPrix && $sousCommandeProduitPrix->getEquipementCommandeProduitPrix()){
  608.                     $seriesPrix = $seriesPrix + $sousCommandeProduitPrix->getEquipementCommandeProduitPrix()->getPrixUnitaire();
  609.                 }
  610.             }
  611.             if(isset($tab2['separe'])){
  612.                 $nbrPalette = count($tab2) - 1 ;
  613.                 $nbrSerieSepare = count($tab2['separe']['detail']);
  614.             }else{
  615.                 $nbrPalette = count($tab2) ;
  616.             }
  617.             $tabNbrSeriesPerPalette = [];
  618.             $nbrSerie = 0;
  619.             $nbrSeriePerPalette = 0;
  620.             foreach ($tab2 as $key => $value) {
  621.                 $nbrSerie = $nbrSerie + count($value['detail']);
  622.                 if($key == 'separe'){
  623.                 }else{
  624.                     if(isset($tabNbrSeriesPerPalette[count($value['detail'])]['nbrPalette'])){
  625.                         $tabNbrSeriesPerPalette[count($value['detail'])]['nbrPalette'] = $tabNbrSeriesPerPalette[count($value['detail'])]['nbrPalette'] + 1;
  626.                         $tabNbrSeriesPerPalette[count($value['detail'])]['nbrSerie'] = $tabNbrSeriesPerPalette[count($value['detail'])]['nbrSerie'] + count($value['detail']);
  627.                         $tabNbrSeriesPerPalette[count($value['detail'])]['nbrSeriePerPalette'] = count($value['detail']);
  628.                     }else{
  629.                         $tabNbrSeriesPerPalette[count($value['detail'])]['nbrPalette'] = 1;
  630.                         $tabNbrSeriesPerPalette[count($value['detail'])]['nbrSerie'] = count($value['detail']);
  631.                         $tabNbrSeriesPerPalette[count($value['detail'])]['nbrSeriePerPalette'] = count($value['detail']);
  632.                     }
  633.                     if($nbrSeriePerPalette <=  count($value['detail'])){
  634.                         $nbrSeriePerPalette =  count($value['detail']);
  635.                     }
  636.                 }
  637.             }
  638.             if($series && $seriesPrix){
  639.                 $seriePrix = $seriesPrix/ count($series);
  640.             }
  641.             return [
  642.                 'nbrPalette' => $nbrPalette,
  643.                 'nbrSerie' => $nbrSerie,
  644.                 'nbrSeriePerPalette' => $nbrSeriePerPalette,
  645.                 'tabNbrSeriesPerPalette' => $tabNbrSeriesPerPalette,
  646.                 'nbrSerieTotal' => count($series),
  647.                 'seriePrix' => $seriePrix,
  648.                 'nbrSerieSepare' => $nbrSerieSepare,
  649.             ];
  650.         }
  651.         return [
  652.             'nbrPalette' => 0,
  653.             'nbrSerie' => 0,
  654.             'nbrSeriePerPalette' => 0,
  655.             'tabNbrSeriesPerPalette' => [],
  656.             'nbrSerieTotal' => 0,
  657.             'seriePrix' => 0,
  658.             'nbrSerieSepare' => 0,
  659.         ];
  660.     }
  661.     public function getTabEquipementBylogisticionReference($logisticienReference){
  662.         $series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyLogisticienReferenceAndStatus($logisticienReference,[EquipementCommandeProduitPrixDetail::status_serie_entrant,EquipementCommandeProduitPrixDetail::status_serie_previsionnel_sortant]);
  663.         return $this->formatTableStock($series);
  664.     }
  665.     public function getTabEquipementByStatus($status){
  666.         $series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyStatus($status);
  667.         return $this->formatTableStock($series);
  668.     }
  669.     public function getTabEquipementBylogisticionReferenceAndStatus($logisticienReference,$status){
  670.         $series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyLogisticienReferenceAndStatus($logisticienReference,$status);
  671.         return $this->formatTableStock($series);
  672.     }
  673.     public function getTabEquipementCommandesBylogisticionReferenceAndStatus($logisticienReference,$status){
  674.         $series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyLogisticienReferenceAndStatus($logisticienReference,$status);
  675.         $tab = [];
  676.         if($series) {
  677.             foreach ($series as $serie) {
  678.                 if ($serie->getEquipementSousCommandeProduitPrix() && $serie->getEquipementSousCommandeProduitPrix()->getEquipementSousCommande()) {
  679.                     $tab[$serie->getEquipementSousCommandeProduitPrix()->getEquipementSousCommande()->getId()] = $serie->getEquipementSousCommandeProduitPrix()->getEquipementSousCommande();
  680.                 }
  681.             }
  682.         }
  683.         return $tab;
  684.     }
  685.     public function getTabEquipementBonDeLivraisonBylogisticionReferenceAndStatus($logisticienReference,$status){
  686.         $series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyLogisticienReferenceAndStatus($logisticienReference,$status);
  687.         $tab = [];
  688.         if($series) {
  689.             foreach ($series as $serie) {
  690.                 if ($serie->getBonLivraisonLigne() && $serie->getBonLivraisonLigne()->getBonLivraison()) {
  691.                     $tab[$serie->getBonLivraisonLigne()->getBonLivraison()->getId()] = $serie->getBonLivraisonLigne()->getBonLivraison();
  692.                 }
  693.             }
  694.         }
  695.         return $tab;
  696.     }
  697.     public function getTabEquipementLogisticienByReference($referenceId){
  698.         $logisticienReference = $this->em->getRepository(EquipementLogisticienReference::class)->findBy(['equipementReference'=>$referenceId]);
  699.         $tabLogiticien = [];
  700.         if($logisticienReference){
  701.             foreach ($logisticienReference as $item){
  702.                 $tabLogiticien[$item->getLogisticien()->getId()]['logiticien'] = $item->getLogisticien();
  703.                 $tabLogiticien[$item->getLogisticien()->getId()]['id'] = $item->getId();
  704.                 $tabLogiticien[$item->getLogisticien()->getId()]['disponible'] = $this->getTabEquipementBylogisticionReferenceAndStatus($item,[EquipementCommandeProduitPrixDetail::status_serie_entrant]);
  705.                 $tabLogiticien[$item->getLogisticien()->getId()]['entrant'] = $this->getTabEquipementBylogisticionReferenceAndStatus($item,[EquipementCommandeProduitPrixDetail::status_serie_previsionnel_entrant]);
  706.                 $tabLogiticien[$item->getLogisticien()->getId()]['sortant'] = $this->getTabEquipementBylogisticionReferenceAndStatus($item,[EquipementCommandeProduitPrixDetail::status_serie_sortant,EquipementCommandeProduitPrixDetail::status_serie_previsionnel_sortant]);
  707.             }
  708.         }
  709.         return $tabLogiticien;
  710.     }
  711.     public function getTabEquipementTotalByReference($referenceId){
  712.         $reference = $this->em->getRepository(EquipementReference::class)->find($referenceId);
  713.         $serieDispo = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyReferenceAndStatus($reference,[EquipementCommandeProduitPrixDetail::status_serie_entrant]);
  714.         $serieEntrant = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyReferenceStatusEntrant($reference);
  715.         $serieSortant = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyReferenceAndStatus($reference,[EquipementCommandeProduitPrixDetail::status_serie_sortant,EquipementCommandeProduitPrixDetail::status_serie_previsionnel_sortant]);
  716.         $tab = [];
  717.         $tab['disponible'] = $this->formatTableStock($serieDispo);
  718.         $tab['entrant'] = $this->formatTableStock($serieEntrant);
  719.         $tab['sortant'] = $this->formatTableStock($serieSortant);
  720.         return $tab;
  721.     }
  722.     public function getProjectAssocciesByLogisticienReference($id){
  723.         $logisticienReference = $this->em->getRepository(EquipementLogisticienReference::class)->find($id);
  724.         if($logisticienReference){
  725.             $reference = $logisticienReference->getEquipementReference();
  726.             $logisticien = $logisticienReference->getLogisticien();
  727.             $bondeLivraisons = $this->em->getRepository(EquipementBonLivraison::class)->getBonDeLivraisonByReferenceAndLogisticien($reference,$logisticien);
  728.             return $bondeLivraisons;
  729.         }
  730.         return null;
  731.     }
  732.     public function getFournisseurByReference($id){
  733.         $commandeReference = $this->em->getRepository(EquipementCommande::class)->findFournissuerByReference($id);
  734.         return $commandeReference;
  735.     }
  736. }