<?php
namespace App\Services;
use App\Entity\EquipementCategorie;
use App\Entity\EquipementCommande;
use App\Entity\EquipementCommandeComment;
use App\Entity\EquipementCommandeFile;
use App\Entity\EquipementCommandeProduitPrix;
use App\Entity\EquipementCommandeProduitPrixDetail;
use App\Entity\EquipementFournisseur;
use App\Entity\EquipementHistoriqueImport;
use App\Entity\EquipementLogisticienReference;
use App\Entity\EquipementLogisticienReferenceHistorique;
use App\Entity\EquipementMarque;
use App\Entity\EquipementReference;
use App\Entity\EquipementSousCommande;
use App\Entity\EquipementSousCommandeProduitPrix;
use App\Form\EquipementCategorieType;
use App\Form\EquipementMarqueType;
use App\Form\EquipementReferenceType;
use Doctrine\ORM\EntityManagerInterface;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Shared\Date;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use PhpOffice\PhpSpreadsheet\Writer\Csv;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Twig\Environment;
class EquipementCommandeService
{
private $em;
private $trans;
private $twig;
public function __construct(
Environment $twig,
EntityManagerInterface $em,
TranslatorInterface $trans,
FlashBagInterface $flashBag,
ParameterBagInterface $params,
FormFactoryInterface $form
) {
$this->em = $em;
$this->trans = $trans;
$this->twig = $twig;
$this->form = $form;
$this->flashBag = $flashBag;
$this->params = $params;
}
public function paginate($request){
$length = $request->get('length');
$length = $length && ($length!=-1)?$length:0;
$start = $request->get('start');
$start = $length?($start && ($start!=-1)?$start:0)/$length:0;
$column = $request->get('columns');
$order = $request->get('order')[0];
$columnOrder = $order['column'];
$dirOrder = $order['dir'];
$columNameOrder = $column[$columnOrder]['data'];
$search = $request->get('search');
$commandeDate1 = $request->get('commandeDate1');
$commandeDate2 = $request->get('commandeDate2');
$filters = [
'query' => trim(@$search['value']),
'status' => $request->get('status'),
'commandeDate1' => $commandeDate1,
'commandeDate2' => $commandeDate2,
'fournisseur' => $request->get('fournisseur')
];
$commandes = $this->em->getRepository(EquipementCommande::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
$recordsFiltered = $this->em->getRepository(EquipementCommande::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
$recordsTotal = $this->em->getRepository(EquipementCommande::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
$output = array(
'data' => array(),
'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
);
foreach ($commandes as $commande) {
$action = $this->twig->render('admin/equipement/commande/default/action.html.twig', [
'commande' => $commande
]);
$action2 = $this->twig->render('admin/equipement/commande/default/action2.html.twig', [
'commande' => $commande
]);
$checkbox = $this->twig->render('admin/equipement/commande/default/checkbox.html.twig', [
'commande' => $commande
]);
$status = $this->twig->render('admin/equipement/commande/default/statut-label.html.twig', [
'commande' => $commande
]);
$output['data'][] = [
'responsive_id' => '',
'id' => $commande->getId(),
'btnSelect' => $checkbox,
'numero' => $commande->getId(),
'status' => $status,
'dateLivresonPrevu' => $commande->getDateLivresonPrevu(),
'fournisseur' => $commande->getFournisseur() ? $commande->getFournisseur()->getName() : null,
'action1' => $action,
'action2' => $action2
];
}
return $output;
}
public function getEquipementPalettesWithCommande($commande){
if($commande){
$sousCommandes = $commande->getEquipementSousCommande();
$tab = [];
if($sousCommandes){
foreach ($sousCommandes as $sousCommande){
$series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbySousCommande($sousCommande);
if($series){
foreach ($series as $serie){
$tab[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
$tab[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
}
}
}
$nbrPalette = count($tab);
$nbrSerie = 0;
foreach ($tab as $value) {
$nbrSerie = $nbrSerie + count($value['detail']);
}
return [
'nbrPalette' => $nbrPalette,
'nbrSerie' => $nbrSerie,
];
}
}
return [
'nbrPalette' => 0,
'nbrSerie' => 0,
];
}
public function getEquipementProduitSousCommande($souCommande){
if($souCommande){
$series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbySousCommande($souCommande);
if($series){
$tab2 = [];
foreach ($series as $serie){
$tab2[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
$tab2[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
}
$nbrPalette = count($tab2);
$nbrSerie = 0;
foreach ($tab2 as $value) {
$nbrSerie = $nbrSerie + count($value['detail']);
}
}
return [
'nbrPalette' => $nbrPalette,
'nbrSerie' => $nbrSerie,
];
}
return [
'nbrPalette' => 0,
'nbrSerie' => 0,
];
}
public function getEquipementProduitCommande($commande){
if($commande){
$sousCommandes = $commande->getEquipementSousCommande();
$tab = [];
if($sousCommandes){
foreach ($sousCommandes as $sousCommande){
$equipementSousCommandesPrix = $this->em->getRepository(EquipementSousCommandeProduitPrix::class)->findBy(['equipementSousCommande'=>$sousCommande->getId()]);
if($equipementSousCommandesPrix){
foreach ($equipementSousCommandesPrix as $equipementSousCommandesPrix){
$produitPrix = $equipementSousCommandesPrix->getEquipementCommandeProduitPrix();
$tab[$produitPrix->getEquipementReference()->getId()]['reference']= $produitPrix->getEquipementReference()->getReference();
$tab[$produitPrix->getEquipementReference()->getId()]['prix']= $produitPrix->getPrixUnitaire();
$nbrPalette = 0;
$nbrSerie = 0;
$series = $equipementSousCommandesPrix->getEquipementCommandeProduitPrixDetail();
if(count($series)>0){
$tab2 = [];
foreach ($series as $serie){
$tab2[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
$tab2[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
}
$nbrPalette = count($tab2);
$nbrSerie = 0;
foreach ($tab2 as $value) {
$nbrSerie = $nbrSerie + count($value['detail']);
}
}
if(isset($tab[$produitPrix->getEquipementReference()->getId()]['palette'])){
$tab[$produitPrix->getEquipementReference()->getId()]['palette']= $tab[$produitPrix->getEquipementReference()->getId()]['palette'] + $nbrPalette;
}else{
$tab[$produitPrix->getEquipementReference()->getId()]['palette']= $nbrPalette;
}
if(isset($tab[$produitPrix->getEquipementReference()->getId()]['unite'])){
$tab[$produitPrix->getEquipementReference()->getId()]['unite']= $tab[$produitPrix->getEquipementReference()->getId()]['unite'] + $nbrSerie;
}else{
$tab[$produitPrix->getEquipementReference()->getId()]['unite']= $nbrSerie;
}
}
}
}
}
return $tab;
}
return false;
}
public function getEquipementProduitTabSousCommande($sousCommande){
if($sousCommande){
$tab = [];
$equipementSousCommandesPrix = $this->em->getRepository(EquipementSousCommandeProduitPrix::class)->findBy(['equipementSousCommande'=>$sousCommande->getId()]);
if($equipementSousCommandesPrix){
foreach ($equipementSousCommandesPrix as $equipementSousCommandesPrix){
$produitPrix = $equipementSousCommandesPrix->getEquipementCommandeProduitPrix();
$tab[$produitPrix->getEquipementReference()->getId()]['reference']= $produitPrix->getEquipementReference()->getReference();
$tab[$produitPrix->getEquipementReference()->getId()]['prix']= $produitPrix->getPrixUnitaire();
$nbrPalette = 0;
$nbrSerie = 0;
$series = $equipementSousCommandesPrix->getEquipementCommandeProduitPrixDetail();
if(count($series)>0){
$tab2 = [];
foreach ($series as $serie){
$tab2[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
$tab2[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
}
$nbrPalette = count($tab2);
$nbrSerie = 0;
foreach ($tab2 as $value) {
$nbrSerie = $nbrSerie + count($value['detail']);
}
}
if(isset($tab[$produitPrix->getEquipementReference()->getId()]['palette'])){
$tab[$produitPrix->getEquipementReference()->getId()]['palette']= $tab[$produitPrix->getEquipementReference()->getId()]['palette'] + $nbrPalette;
}else{
$tab[$produitPrix->getEquipementReference()->getId()]['palette']= $nbrPalette;
}
if(isset($tab[$produitPrix->getEquipementReference()->getId()]['unite'])){
$tab[$produitPrix->getEquipementReference()->getId()]['unite']= $tab[$produitPrix->getEquipementReference()->getId()]['unite'] + $nbrSerie;
}else{
$tab[$produitPrix->getEquipementReference()->getId()]['unite']= $nbrSerie;
}
}
}
return $tab;
}
return false;
}
public function addComment($request,$user)
{
$comment = $request->get('comment');
$token = $request->get('token');
if($comment and $token){
$equipementCommande = $this->em->getRepository(EquipementCommande::class)->findOneBy(['token'=>$token]);
if($equipementCommande && $user){
$commentEntity = new EquipementCommandeComment();
$commentEntity->setEquipementCommande($equipementCommande);
$commentEntity->setUser($user);
$commentEntity->setComment($comment);
$this->em->persist($commentEntity);
$this->em->flush();
return [
'commentEntity' => $commentEntity,
'success' => true
];
}
}
return [
'success' => false
];
}
public function addCommentSousCommande($request,$user)
{
$comment = $request->get('comment');
$token = $request->get('token');
if($comment and $token){
$equipementCommande = $this->em->getRepository(EquipementSousCommande::class)->findOneBy(['token'=>$token]);
if($equipementCommande && $user){
$commentEntity = new EquipementCommandeComment();
$commentEntity->setEquipementSousCommande($equipementCommande);
$commentEntity->setUser($user);
$commentEntity->setComment($comment);
$this->em->persist($commentEntity);
$this->em->flush();
return [
'commentEntity' => $commentEntity,
'success' => true
];
}
}
return [
'success' => false
];
}
public function getEquipementCommandeFile($commande){
$filesIds = $this->em->getRepository(EquipementCommandeFile::class)->getEquipementCommandeFileDistinct($commande);
$tab = [];
if($filesIds){
foreach ($filesIds as $id){
$tab[] = $this->em->getRepository(EquipementHistoriqueImport::class)->find($id[1]);
}
}
return $tab;
}
public function paginateSousCommande($request){
$length = $request->get('length');
$length = $length && ($length!=-1)?$length:0;
$start = $request->get('start');
$start = $length?($start && ($start!=-1)?$start:0)/$length:0;
$column = $request->get('columns');
$order = $request->get('order')[0];
$columnOrder = $order['column'];
$dirOrder = $order['dir'];
$columNameOrder = $column[$columnOrder]['data'];
$search = $request->get('search');
$commandeDate1 = $request->get('commandeDate1');
$commandeDate2 = $request->get('commandeDate2');
$filters = [
'query' => trim(@$search['value']),
'status' => $request->get('status'),
'commandeDate1' => $commandeDate1,
'commandeDate2' => $commandeDate2,
'fournisseur' => $request->get('fournisseur')
];
$commandes = $this->em->getRepository(EquipementSousCommande::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
$recordsFiltered = $this->em->getRepository(EquipementSousCommande::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
$recordsTotal = $this->em->getRepository(EquipementSousCommande::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
$output = array(
'data' => array(),
'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
);
foreach ($commandes as $commande) {
$action = $this->twig->render('admin/equipement/sous-commande/default/action.html.twig', [
'commande' => $commande
]);
$action2 = $this->twig->render('admin/equipement/sous-commande/default/action2.html.twig', [
'commande' => $commande
]);
$checkbox = $this->twig->render('admin/equipement/sous-commande/default/checkbox.html.twig', [
'commande' => $commande
]);
$status = $this->twig->render('admin/equipement/sous-commande/default/statut-label.html.twig', [
'commande' => $commande
]);
$output['data'][] = [
'responsive_id' => '',
'id' => $commande->getId(),
'btnSelect' => $checkbox,
'numero' => $commande->getId(),
'status' => $status,
'nbPalette' => $commande->getNbPalette(),
'nbUnite' => $commande->getNbUnite(),
'dateLivresonPrevu' => $commande->getDateLivresonPrevu(),
'fournisseur' => $commande->getFournisseur() ? $commande->getFournisseur()->getName() : null,
'action1' => $action,
'action2' => $action2
];
}
return $output;
}
public function paginateStock($request){
$length = $request->get('length');
$length = $length && ($length!=-1)?$length:0;
$start = $request->get('start');
$start = $length?($start && ($start!=-1)?$start:0)/$length:0;
$column = $request->get('columns');
$order = $request->get('order')[0];
$columnOrder = $order['column'];
$dirOrder = $order['dir'];
$columNameOrder = $column[$columnOrder]['data'];
$search = $request->get('search');
$filters = [
'query' => trim(@$search['value']),
'category' => $request->get('category'),
'logiticien' => $request->get('logiticien'),
'marque' => $request->get('marque'),
];
$stocks = $this->em->getRepository(EquipementLogisticienReference::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder);
$recordsFiltered = $this->em->getRepository(EquipementLogisticienReference::class)->search($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
$recordsTotal = $this->em->getRepository(EquipementLogisticienReference::class)->search(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
$output = array(
'data' => array(),
'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
);
foreach ($stocks as $stock) {
$action = $this->twig->render('admin/equipement/stock/default/action.html.twig', [
'stock' => $stock
]);
$checkbox = $this->twig->render('admin/equipement/stock/default/checkbox.html.twig', [
'stock' => $stock
]);
$tabStock = $this->getTabEquipementBylogisticionReference($stock);
$totalUnite = $tabStock['nbrSerie'];
$totalPalette = $tabStock['nbrPalette'];
$output['data'][] = [
'responsive_id' => '',
'id' => $stock->getId(),
'btnSelect' => $checkbox,
'reference' => $stock->getEquipementReference()?$stock->getEquipementReference()->getReference():'',
'category' => $stock->getEquipementReference() && $stock->getEquipementReference()->getEquipementCategorie() ? $stock->getEquipementReference()->getEquipementCategorie()->getName() : '',
'designation' => $stock->getEquipementReference()?$stock->getEquipementReference()->getDesignation():'',
'logisticien' => $stock->getLogisticien() ? $stock->getLogisticien()->getName() : null,
'totalUnite' =>$totalUnite,
'totalPalette' =>$totalPalette ,
'action' => $action,
];
}
return $output;
}
public function paginateStockMateriel($request,$id){
$length = $request->get('length');
$length = $length && ($length!=-1)?$length:0;
$start = $request->get('start');
$start = $length?($start && ($start!=-1)?$start:0)/$length:0;
$column = $request->get('columns');
$order = $request->get('order')[0];
$columnOrder = $order['column'];
$dirOrder = $order['dir'];
$columNameOrder = $column[$columnOrder]['data'];
$search = $request->get('search');
$filters = [
'query' => trim(@$search['value']),
'dateFabrication' => $request->get('dateFabrication'),
'idLogisticienReference' => $id
];
$stocks = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->searchStockMateriel($filters, $start, $length, true,$columNameOrder, $dirOrder);
$recordsFiltered = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->searchStockMateriel($filters, $start, $length, true,$columNameOrder, $dirOrder,true);
$recordsTotal = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->searchStockMateriel(array(), $start, $length, true,$columNameOrder, $dirOrder,true);
$output = array(
'data' => array(),
'recordsFiltered' => isset($recordsFiltered['result']) ? $recordsFiltered['result'] : 0,
'recordsTotal' => isset($recordsTotal['result']) ? $recordsTotal['result'] : 0,
);
foreach ($stocks as $stock) {
$checkbox = $this->twig->render('admin/equipement/stock/default/checkboxMateriel.html.twig', [
'stock' => $stock
]);
$output['data'][] = [
'responsive_id' => '',
'id' => $stock->getId(),
'btnSelect' => $checkbox,
'numPalette' => $stock->getNumPalette(),
'numSerie' => $stock->getNumSerie() ,
'adresseDepot' => $stock->getEquipementLogisticienReception()?$stock->getEquipementLogisticienReception()->getAdresseDepot():'',
'dateFabrication' =>'-',
];
}
return $output;
}
public function getStockMaterielByRequestSelectAll($request,$id){
$search = $request->get('search');
$filters = [
'query' => trim(@$search['value']),
'dateFabrication' => $request->get('dateFabrication'),
'idLogisticienReference' => $id
];
$materiels = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->searchStockMateriel($filters);
return $materiels ;
}
public function extractStockMateriel($materiels,$request){
$file= $this->params->get('zips_directory')."/extraire_materiel.xlsx";
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// Head 2
$tableHead2 = [
'font'=>[
'color'=>[
'rgb'=>'0071c1'
],
'bold'=>true,
'size'=>12
],
'fill'=>[
'fillType' => Fill::FILL_SOLID,
'startColor' => [
'rgb' => 'dcebf4'
]
],
];
$sheet->setCellValue('A1',"N° palette")
->setCellValue('B1',"N° série")
->setCellValue('C1',"Localisation")
->setCellValue('D1',"Date de fabrication");
// Borders a2 z2
$spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
$spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
$spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
$spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
//width
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
$spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(30);
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(30);
$spreadsheet->getActiveSheet()->getStyle('A1:D1')->applyFromArray($tableHead2);
$row=2;
foreach($materiels as $materiel){
$spreadsheet->getActiveSheet()
->setCellValue('A'.$row , (string)$materiel->getNumPalette())
->setCellValue('B'.$row , $materiel->getNumSerie())
->setCellValue('C'.$row , $materiel->getEquipementLogisticienReception()?$materiel->getEquipementLogisticienReception()->getAdresseDepot():'')
->setCellValue('D'.$row , '-')
;
//increment row
$row++;
}
$firstRow=1;
$lastRow=$row-1;
$spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":D".$lastRow);
$writer = new Xlsx($spreadsheet);
$writer->save($file);
return $file;
}
public function extractStockHisorique($historiques,$request){
$file= $this->params->get('zips_directory')."/extraire_historique.xlsx";
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// Head 2
$tableHead2 = [
'font'=>[
'color'=>[
'rgb'=>'0071c1'
],
'bold'=>true,
'size'=>12
],
'fill'=>[
'fillType' => Fill::FILL_SOLID,
'startColor' => [
'rgb' => 'dcebf4'
]
],
];
$sheet->setCellValue('A1',"Date")
->setCellValue('B1',"Action")
->setCellValue('C1',"Palettes")
->setCellValue('D1',"Unités");
// Borders a2 z2
$spreadsheet->getActiveSheet()->getStyle('A1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
$spreadsheet->getActiveSheet()->getStyle('B1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
$spreadsheet->getActiveSheet()->getStyle('C1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
$spreadsheet->getActiveSheet()->getStyle('D1')->getBorders()->getRight()->setBorderStyle(Border::BORDER_MEDIUM)->setColor(new Color('FFFFFF'));
//width
$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(20);
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$spreadsheet->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(15);
$spreadsheet->getActiveSheet()->getStyle('A1:D1')->applyFromArray($tableHead2);
$row=2;
foreach($historiques as $historique){
$spreadsheet->getActiveSheet()
->setCellValue('A'.$row , $historique->getCreatedAt()->format('d/m/Y'))
->setCellValue('C'.$row , $historique->getNbrPalette())
->setCellValue('D'.$row , $historique->getNbrUnite())
;
if($historique->getTypeAction() == EquipementLogisticienReferenceHistorique::entrant){
$spreadsheet->getActiveSheet() ->setCellValue('B'.$row , 'Entrée');
}else{
$spreadsheet->getActiveSheet() ->setCellValue('B'.$row , 'Sortie');
}
//increment row
$row++;
}
$firstRow=1;
$lastRow=$row-1;
$spreadsheet->getActiveSheet()->setAutoFilter("A".$firstRow.":D".$lastRow);
$writer = new Xlsx($spreadsheet);
$writer->save($file);
return $file;
}
private function formatTableStock($series){
$nbrPalette = 0;
$nbrSerie = 0;
$nbrSeriePerPalette = 0;
$seriesPrix = 0;
$seriePrix = 0;
$nbrSerieSepare = 0;
if($series){
$tab2 = [];
foreach ($series as $serie){
if($serie->getNumPalette()){
$tab2[$serie->getNumPalette()]['num_palette'] = $serie->getNumPalette() ;
$tab2[$serie->getNumPalette()]['detail'][] = $serie->getNumSerie() ;
}else{
$tab2['separe']['detail'][] = $serie->getNumSerie() ;
}
$seriesPrix = $seriesPrix + $serie->getEquipementSousCommandeProduitPrix()->getEquipementCommandeProduitPrix()->getPrixUnitaire();
}
if(isset($tab2['separe'])){
$nbrPalette = count($tab2) - 1 ;
$nbrSerieSepare = count($tab2['separe']['detail']);
}else{
$nbrPalette = count($tab2) ;
}
$nbrSerie = 0;
$nbrSeriePerPalette = 0;
foreach ($tab2 as $key => $value) {
$nbrSerie = $nbrSerie + count($value['detail']);
if($key == 'separe'){
}else{
if($nbrSeriePerPalette <= count($value['detail'])){
$nbrSeriePerPalette = count($value['detail']);
}
}
}
if($series && $seriesPrix){
$seriePrix = $seriesPrix/ count($series);
}
return [
'nbrPalette' => $nbrPalette,
'nbrSerie' => $nbrSerie,
'nbrSeriePerPalette' => $nbrSeriePerPalette,
'nbrSerieTotal' => count($series),
'seriePrix' => $seriePrix,
'nbrSerieSepare' => $nbrSerieSepare,
];
}
return [
'nbrPalette' => 0,
'nbrSerie' => 0,
'nbrSeriePerPalette' => 0,
'nbrSerieTotal' => 0,
'seriePrix' => 0,
'nbrSerieSepare' => 0,
];
}
public function getTabEquipementBylogisticionReference($logisticienReference){
$series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyLogisticienReferenceAndStatus($logisticienReference,[EquipementCommandeProduitPrixDetail::status_serie_entrant,EquipementCommandeProduitPrixDetail::status_serie_previsionnel_sortant]);
return $this->formatTableStock($series);
}
public function getTabEquipementByStatus($status){
$series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyStatus($status);
return $this->formatTableStock($series);
}
public function getTabEquipementBylogisticionReferenceAndStatus($logisticienReference,$status){
$series = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyLogisticienReferenceAndStatus($logisticienReference,$status);
return $this->formatTableStock($series);
}
public function getTabEquipementLogisticienByReference($referenceId){
$logisticienReference = $this->em->getRepository(EquipementLogisticienReference::class)->findBy(['equipementReference'=>$referenceId]);
$tabLogiticien = [];
if($logisticienReference){
foreach ($logisticienReference as $item){
$tabLogiticien[$item->getLogisticien()->getId()]['logiticien'] = $item->getLogisticien();
$tabLogiticien[$item->getLogisticien()->getId()]['id'] = $item->getId();
$tabLogiticien[$item->getLogisticien()->getId()]['disponible'] = $this->getTabEquipementBylogisticionReferenceAndStatus($item,[EquipementCommandeProduitPrixDetail::status_serie_entrant]);
$tabLogiticien[$item->getLogisticien()->getId()]['entrant'] = $this->getTabEquipementBylogisticionReferenceAndStatus($item,[EquipementCommandeProduitPrixDetail::status_serie_previsionnel_entrant]);
$tabLogiticien[$item->getLogisticien()->getId()]['sortant'] = $this->getTabEquipementBylogisticionReferenceAndStatus($item,[EquipementCommandeProduitPrixDetail::status_serie_sortant,EquipementCommandeProduitPrixDetail::status_serie_previsionnel_sortant]);
}
}
return $tabLogiticien;
}
public function getTabEquipementTotalByReference($referenceId){
$reference = $this->em->getRepository(EquipementReference::class)->find($referenceId);
$serieDispo = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyReferenceAndStatus($reference,[EquipementCommandeProduitPrixDetail::status_serie_entrant]);
$serieEntrant = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyReferenceAndStatus($reference,[EquipementCommandeProduitPrixDetail::status_serie_previsionnel_entrant]);
$serieSortant = $this->em->getRepository(EquipementCommandeProduitPrixDetail::class)->findbyReferenceAndStatus($reference,[EquipementCommandeProduitPrixDetail::status_serie_sortant,EquipementCommandeProduitPrixDetail::status_serie_previsionnel_sortant]);
$tab = [];
$tab['disponible'] = $this->formatTableStock($serieDispo);
$tab['entrant'] = $this->formatTableStock($serieEntrant);
$tab['sortant'] = $this->formatTableStock($serieSortant);
return $tab;
}
}