src/Services/EquipementCommandeService.php line 55

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