<?php
namespace App\Controller\Rangements;
use App\Entity\Articles\Article;
use App\Entity\FO\Cron;
use App\Entity\FO\Societe;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\CommandeNumeroSuivi;
use App\Entity\GestionComerciale\StatutCommande;
use App\Entity\Rangements\Caisse;
use App\Entity\Rangements\CommandeCaisse;
use App\Entity\Rangements\HistoriqueListePreparation;
use App\Entity\Rangements\ListePreparation;
use App\Entity\Rangements\ListePreparationCommande;
use App\Entity\Rangements\StatutListePreparation;
use App\Entity\Transporteurs\Transporteur;
use App\Form\Rangements\CaisseType;
use App\Form\Rangements\GenererListePreparationType;
use App\Form\Rangements\ListePreparationCsvType;
use App\Form\Rangements\SupprimerCaisseType;
use App\Library\Datatable\Util\Datatable;
use App\Library\Uploader\Services\FileUploader;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use App\Security\Voter\EntityVoter;
use App\Service\GestionComerciale\CommandeService;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Snappy\Pdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class ListePreparationController extends AbstractController
{
/**
* Grid action
* @return Response
*/
/**
* @Route("/liste-preparation/grid", name="dtc_liste_preparation_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($datatable, $translator)->execute();
}
/**
* @Route("/liste-preparation/modifier/{id}", name="dtc_liste_preparation_modifier")
*/
public function modifierAction(Request $request, Caisse $caisse, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$user = $this->getUser();
$caisse->setUtilisateur($user);
$form = $this->createForm(CaisseType::class, $caisse);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Caisse::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_caisse_modifier', ["id" => $caisse->getId()]);
}
if ($form->isValid()) {
$em->persist($caisse);
$em->flush();
$this->addFlash('notice', $translator->trans('Chariot modifiée avec succès !'));
return $this->redirectToRoute('dtc_caisse_modifier', ["id" => $caisse->getId()]);
} else {
$errors = $validator->validate($caisse);
}
}
return $this->render('Rangements/Caisse/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'caisse' => $caisse]);
}
/**
* @Route("/liste-preparation/nouveau", name="dtc_liste_preparation_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Nouvelle liste de préparation");
$repo_objet = $em->getRepository(Caisse::class);
$repo_liste_preparation = $em->getRepository(ListePreparation::class);
$repo_commande = $em->getRepository(Commande::class);
$get = $request->query->all();
$lp = new ListePreparation;
$user = $this->getUser();
$form = $this->createForm(GenererListePreparationType::class, $lp);
$errors = "";
$form->handleRequest($request);
$nonSupprimable = "";
$dernierCron = $em->getRepository(Cron::class)->findOneBy(["tacheCron" => 79], ["id" => "DESC"]);
if (is_object($dernierCron) && ! $dernierCron->getEchec() && $dernierCron->getDateFin() == "") {
$nonSupprimable = 1;
}
$tab_transporteurs = [];
$transporteurs_list = $em->getRepository(Transporteur::class)->findBy([], ["libelle" => "ASC"]);
if (count($transporteurs_list) > 0) {
foreach ($transporteurs_list as $transporteur_obj) {
//if(in_array($transporteur_obj->getId(), array(13))) continue;
$nb_cmdes = $repo_commande->getNbCommandesDisponiblesPourLpPourTransporteur($transporteur_obj);
if ($nb_cmdes > 0) {
$disponible_pour_lp = true;
$lp_attente_obj = $repo_liste_preparation->lpEncoursDeCreation($transporteur_obj);
if ($lp_attente_obj["total"] > 0) {
$disponible_pour_lp = false;
}
$tab_transporteurs[] = [
"disponible_pour_lp" => $disponible_pour_lp,
"transporteur" => $transporteur_obj,
"nb_commandes" => $nb_cmdes,
"transporteur_id" => $transporteur_obj->getId(),
];
}
}
}
if ($form->isSubmitted()) {
if ($form->isValid()) {
$post = $request->request->all();
$statut_lp_creation = $em->getRepository(StatutListePreparation::class)->find(9);
$transporteur_obj = $em->getRepository(Transporteur::class)->find($post["transporteur"]);
$lp->setTransporteur($transporteur_obj);
$lp->setStatutListePreparation($statut_lp_creation);
$lp->setForcer(true);
$em->persist($lp);
$em->flush();
/*
$builder = new ProcessBuilder();
$builder->setArguments(array('php', '../app/console', 'cron:creerListePreparation'));
sleep(1);
$builder->getProcess()->start();
sleep(3);
*/
$url = $this->generateUrl('dtc_liste_preparation_liste', []);
$this->addFlash('notice', $translator->trans('Création des listes de préparation en cours !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($lp);
$rendu = $this->renderView(
'Rangements/ListePreparation/ajouter_modal.html.twig',
[
'tab_transporteurs' => $tab_transporteurs,
'form' => $form->createView(),
'errors' => $errors,
'lp' => $lp,
'nonSupprimable' => $nonSupprimable,
'dernierCron' => $dernierCron,
]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'Rangements/ListePreparation/ajouter_modal.html.twig',
[
'tab_transporteurs' => $tab_transporteurs,
'form' => $form->createView(),
'errors' => $errors,
'lp' => $lp,
'nonSupprimable' => $nonSupprimable,
'dernierCron' => $dernierCron,
]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Rangements/Caisse/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("", name="")
*/
public function __ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$caisse = new Caisse;
$user = $this->getUser();
$form = $this->createForm(CaisseType::class, $caisse);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$tokenP = $request->request->get('tokenPicture');
if ($form->isValid()) {
$em->persist($caisse);
$em->flush();
$em->refresh($caisse);
$this->addFlash('notice', $translator->trans('Chariot ajouté avec succès !'));
return $this->redirectToRoute('dtc_caisse_liste');
} else {
$errors = $validator->validate($caisse);
}
}
return $this->render('Rangements/Caisse/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/liste-preparation/{page}", name="dtc_liste_preparation_liste", defaults={"page": 1})
*/
public function listerAction(Request $request, $page, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
//$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(1),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Caisse::class,"id"));
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [1], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [2], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id text-center", "targets" => [3], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id text-center", "targets" => [4], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id text-center", "targets" => [5], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [6], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [7], "visible" => true, "orderable" => false];
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [1], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id text-center", "targets" => [2], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id text-center", "targets" => [7], "visible" => true, "orderable" => false];
$dernierCron = $em->getRepository(Cron::class)->findOneBy(["tacheCron" => 79], ["id" => "DESC"]);
$this->datatable($datatable, $translator);
$datatables = [['id' => 'dta-liste-preparation', 'frequence' => 5000]];
return $this->render(
'Rangements/ListePreparation/lister.html.twig',
['datatables' => $datatables, 'name' => 'caisse', 'tableauClassColonne' => $tableau_class_cellule, "dernierCron" => $dernierCron]
);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setDatatableId('dta-caisse')
->setEntity(ListePreparation::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Référence") => 'x.reference',
$translator->trans("Transporteur") => 't.libelle',
$translator->trans("Chariot") => 'c.libelle',
$translator->trans("Statut") => 's.libelle',
$translator->trans("Nb commandes") => 'x.id',
$translator->trans("Forcer") => 'x.forcer',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.transporteur', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.caisse', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.statutListePreparation', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
/*
0 => array(
'view' => 'FO/DataTable/lien_modifier.html.twig',
'params' => array(
'edit_route' => 'dtc_caisse_modifier',
'supprimer_route' => 'dtc_caisse_supprimer',
'type'=>"",
'entite' => 'caisse',
'table'=>'dta-caisse',
'objet' => Caisse::class,
'width_modal'=>800
),
),
*/
1 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
6 => [
'view' => 'FO/DataTable/nb_commandes_lp.html.twig',
'params' => [],
],
7 => [
'view' => 'FO/DataTable/booleen.html.twig',
'params' => [],
],
8 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
//'edit_route' => 'dtc_caisse_modifier',
'pdf_route' => 'dtc_liste_preparation_pdf',
'historique_route' => 'dtc_liste_preparation_historique',
//'supprimer_route' => 'dtc_caisse_supprimer',
'type' => "",
'entite' => 'caisse',
'table' => 'dta-caisse',
'objet' => Caisse::class,
'width_modal' => 800,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => 'Non disponible',
'route' => 'dtc_caisse_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* @Route("/liste-preparation/supprimer/{id}", name="dtc_liste_preparation_supprimer")
*/
public function supprimerAction(Request $request, Caisse $objet, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$caisse = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$get = $request->query->all();
/*
if(is_object($caisse->getBp())) {
$erreur =$translator->trans("Cette caisse ne peut pas être supprimée, car elle est liée à un BP.");
$rendu = $this->renderView('FO/Supprimer/supprimer_impossible.html.twig', array('errors'=>$erreur));
return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
}
*/
$form = $this->createForm(SupprimerCaisseType::class, $caisse);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($caisse);
$em->flush();
$url = "";
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(
['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]
);
} else {
$this->addFlash('notice', $translator->trans('Modèle de colis supprimé avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($caisse);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/liste-preparation/scanner", name="dtc_liste_preparation_scanner")
*/
public function scannerAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator)
{
$caisse = '';
$rendu = '';
$errors = '';
$id = '';
$titreModal = '';
$ean = trim($request->request->get('scan'));
if ( ! empty($ean)) {
$caisse = $em->getRepository(Caisse::class)->findOneBy(['ean' => $ean]);
}
if (is_object($caisse)) {
$id = $caisse->getId();
//verifier si la caisse est libre
$commandeCaisses = $em->getRepository(CommandeCaisse::class)->getEnPreparation($caisse->getId());
if (count($commandeCaisses)) {
$rendu = $this->renderView(
'Rangements/CommandeCaisse/retour-scan-caisse.html.twig',
['commandeCaisses' => $commandeCaisses, 'caisse' => $caisse, 'errors' => $errors, 'ean' => $ean]
);
$titreModal = $translator->trans('Attention');
} else {
$rendu = $this->renderView('Rangements/Caisse/retour-scan-caisse.html.twig', ['caisse' => $caisse]);
}
} else {
$this->addFlash('warning', 'Caisse introuvable !'.$ean);
$errors = $this->renderView('layout-errors.html.twig');
}
return new JsonResponse(['id' => $id, 'rendu' => $rendu, 'errors' => $errors, 'titreModal' => $titreModal]);
}
/**
* @Route("/liste-preparations/pdf/{id}", name="dtc_liste_preparation_pdf")
*/
public function pdfAction(Request $request, ListePreparation $listePreparation, $retour = true, EntityManagerInterface $em, Pdf $snappy)
{
$societe = $em->getRepository(Societe::class)->find(1);
$date_Y = date("Y");
$date_M = date("m");
$date_D = date("d");
$date = $date_Y.'/'.$date_M.'/'.$date_D;
$chemin_pdf = 'PDF/LP/'.$date.'/LP-'.$listePreparation->getReference().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
//return $this->render('GestionComerciale/BonPreparation/template_pdf.html.twig',array('commande' => $bonPreparation,'societe' => $societe));
//$footer = $this->renderView('FO/PDF/footer_bp_pagination_pdf.html.twig', array('societe' => $societe,'commande' => $bonPreparation));
//$header = $this->renderView('FO/PDF/header_bp_pdf.html.twig', array('societe' => $societe,'commande' => $bonPreparation));
//$snappy->setOption('page-size', 'A4');
//$snappy->setOption('header-html',$header);
//$snappy->setOption('footer-html',$footer);
//$snappy->setOption('header-html',$footer);
$snappy->setOption('orientation', "landscape");
$snappy->setOption('header-spacing', "4");
$snappy->setOption('footer-spacing', "3");
$snappy->setOption('disable-smart-shrinking', true);
//$snappy->setOption('print-media-type', false );
$snappy->setOption('page-height', "297");
$snappy->setOption('page-width', "210");
$tab_articles_a_preparer = [];
$bpLp = $em->getRepository(ListePreparationCommande::class)->findBy(['listePreparation' => $listePreparation]);
if (count($bpLp) > 0) {
foreach ($bpLp as $bp) {
if (count($bp->getBp()->getArticleCommande()) > 0) {
foreach ($bp->getBp()->getArticleCommande() as $ac) {
$position_emplacement = 10000000000;
if (is_object($ac->getArticle()) && count($ac->getArticle()->getEmplacements()) > 0) {
foreach ($ac->getArticle()->getEmplacements() as $ae) {
if (is_object($ae->getNiveauUn())) {
$position_emplacement = $ae->getNiveauUn()->getPriorite();
}
if (is_object($ae->getNiveauDeux())) {
$position_emplacement += $ae->getNiveauDeux()->getPriorite();
}
if (is_object($ae->getNiveauTrois())) {
$position_emplacement += $ae->getNiveauTrois()->getPriorite();
}
break;
}
}
$tab_articles_a_preparer[] = [
"reference2" => $ac->getArticle()->getReference(),
"emplacement" => $position_emplacement,
"ac" => $ac,
"reference" => $ac->getArticle()->getId(),
];
}
}
}
}
// On trie une premiere fois par emplacement
$qte = [];
foreach ($tab_articles_a_preparer as $key => $row) {
$qte[$key] = floatVal($row['emplacement']);
}
array_multisort($qte, SORT_ASC, $tab_articles_a_preparer);
//echo "<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>";
$tab_articles_a_preparer_2 = [];
foreach ($tab_articles_a_preparer as $key => $row) {
if ( ! array_key_exists($row['emplacement'], $tab_articles_a_preparer_2)) {
$tab_articles_a_preparer_2[$row['emplacement']] = [];
}
$tab_articles_a_preparer_2[$row['emplacement']][] = $tab_articles_a_preparer[$key];
//echo "<div>REMP : ".$row['emplacement']."</div>";
}
//echo "<br/>************************<br/>";
//echo "<div>COUNT TAB ".count($tab_articles_a_preparer)."</div>";
//echo "<br/><br/>";
// On trie une seconde fois par reference
foreach ($tab_articles_a_preparer_2 as $key => $row) {
$qte = [];
foreach ($row as $key2 => $row2) {
$qte[$key2] = floatVal($row2['reference2']);
}
array_multisort($qte, SORT_ASC, $tab_articles_a_preparer_2[$key]);
//echo "<div>V2 KEY : ".$key."</div>";
}
//On remplace le tab du début par le tableau trier par emplacement et référence
$tab_articles_a_preparer = [];
foreach ($tab_articles_a_preparer_2 as $key3 => $value3) {
//echo "<div>TUTU:".$key3."</div>";
foreach ($value3 as $key4 => $value4) {
//echo "<div>TITI:".$value4["reference"]."</div>";
$tab_articles_a_preparer[] = $value4;
}
}
$snappy->generateFromHtml(
$this->renderView(
'Rangements/ListePreparation/template_pdf.html.twig',
[
'lp' => $listePreparation,
'tabArticlesAPreparer' => $tab_articles_a_preparer,
'societe' => $societe,
]
),
$chemin_pdf
);
if ($retour == true) {
return $this->render('FO/PDF/conteneur_pdf.html.twig', [
'objet' => $listePreparation,
'chemin_pdf' => '/'.$chemin_pdf,
'visualiser' => $request->query->get('visualiser'),
]);
//return new RedirectResponse("/".$chemin_pdf);
}
}
/**
* @Route("/liste-preparations/{id}/pourcentage-traitement", name="dtc_calcul_pourcentage_traitement_liste_preparation")
*/
public function pourcentageTraitementAction(Request $request, Cron $cron)
{
$pourcentageTraitement = $cron->getProgression();
$response = new JsonResponse();
$response->setData([
'pourcentageTraitement' => $pourcentageTraitement,
//'total' => 0,
//'traite' => $traite
]);
return $response;
}
/**
* @Route("/liste-preparations/historique/{id}", name="dtc_liste_preparation_historique")
*/
public function historiqueAction(Request $request, ListePreparation $liste, EntityManagerInterface $em, TranslatorInterface $translator)
{
$titre_modal = $translator->trans("Historique du document");
//dump($commandes);
$historiques = $em->getRepository(HistoriqueListePreparation::class)->findBy([
'listePreparation' => $liste,
], ['date' => 'DESC']);
$rendu = $this->renderView('Rangements/ListePreparation/historique.html.twig', [
'historiques' => $historiques,
]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal, 'width' => 900]);
}
/**
* @Route("/export/xls/liste-preparations/{id}", name="dtc_liste_preparation_xls")
*/
public function csvAction(Request $request, ListePreparation $liste, EntityManagerInterface $em)
{
$dir = 'Export/lp/'.date("Y/m/d/");
if ( ! is_dir($dir)) {
mkdir($dir, 755, true);
}
$filename = 'lp-'.$liste->getDate()->format("d-m-Y").'.csv';
$filename = str_replace(' ', '-', $filename);
$filename = str_replace('/', '-', $filename);
$filename = strtolower($filename);
$file = $dir.$filename;
if (is_file($file)) {
unlink($file);
}
$delimiter = ";";
$handle = fopen($file, 'w+');
$result = ["NumCommande", "Destinataire", "Rue", "Rue2", "Ville", "CodePostal", "Pays", "Poids", "BpId", "NumeroSuvi"];
fputcsv($handle, $result, $delimiter);
//listePreparationCommande
//$listePreparationCommandes = $liste->getListePreparationCommande();
$listePreparationCommandes = $em->getRepository(ListePreparationCommande::class)->getLPCommandBpsEmballe($liste);
if (count($listePreparationCommandes) > 0) {
foreach ($listePreparationCommandes as $cmde) {
if (is_object($cmde->getBp())) {
$numCommande = $cmde->getBp()->getReference();
if (is_object($cmde->getCommande())) {
$numCommande = $cmde->getCommande()->getReference();
if ($cmde->getCommande()->getReferenceMarketPlace()) {
$numCommande = $cmde->getCommande()->getReferenceMarketPlace();
}
}
$destinataire = $cmde->getBp()->getLibelleLivraison();
$rue_complet = trim(
$cmde->getBp()->getNumeroLivraison()." ".$cmde->getBp()->getRueLivraison()." ".$cmde->getBp()->getComplementLivraison()." ".$cmde->getBp()->getComplementLivraison2()
);
$rue_complet = $this->remove_accent($rue_complet);
$rue = substr($rue_complet, 0, 30);
$rue2 = substr($rue_complet, 30, 30);
$codePostal = $cmde->getBp()->getCodePostalLivraisonTxt();
$villeLivraisonTxt = $cmde->getBp()->getVilleLivraisonTxt();
$pays = $cmde->getBp()->getCodeIsoLivraison();
$poids = 0;
if (is_object($cmde->getBp()->getCommande())) {
$poids = $cmde->getBp()->getCommande()->getTotalPoids();
}//*1000;
$result = [$numCommande, $destinataire, $rue, $rue2, $villeLivraisonTxt, $codePostal, $pays, $poids, $cmde->getBp()->getId(), ""];
foreach ($result as $key => $res) {
$result[$key] = $this->remove_accent($res);
}
fputcsv($handle, $result, $delimiter);
}
}
}
rewind($handle);
$content = stream_get_contents($handle);
fclose($handle);
return new Response($content, 200, [
'Content-Type' => 'application/force-download; charset=ISO-8859-1',
'Content-Disposition' => 'attachment; filename="'.$filename.'"',
]);
}
/**
* @Route("/import/csv/liste-preparations/{id}", name="dtc_liste_preparation_import_csv")
*/
public function ImportcsvAction(Request $request, ListePreparation $lp, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator, FileUploader $fileUploader)
{
$type = "";
$titre_modal = $translator->trans("Importation des numéros de suivi de la LP");
$repo_objet = $em->getRepository(Article::class);
$get = $request->query->all();
$errors = [];
$documents = $fileUploader->getFiles(['folder' => 'lp/tmp/'.$lp->getId()]);
if (count($documents) > 0) {
foreach ($documents as $document) {
$url = 'uploads/lp/tmp/'.$lp->getId().'/originals/'.$document;
@unlink($url);
}
}
$user = $this->getUser();
$form = $this->createForm(ListePreparationCsvType::class, $lp);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$post = $request->request->all();
// print_r($post);
if ($form->isValid() and 1 != 1) {
$documents = $fileUploader->getFiles(['folder' => 'lp/tmp/'.$lp->getId()]);
foreach ($documents as $document) {
$url = 'uploads/lp/tmp/'.$lp->getId().'/originals/'.$document;
$ext = pathinfo($url, PATHINFO_EXTENSION);
//echo $url."\n";
//$errors .= ' / document : '.$url;
//if(strtolower($ext) != "jpg" and strtolower($ext) != "png" and strtolower($ext) != "gif" and strtolower($ext) != "jpeg") $message->attach(\Swift_Attachment::fromPath($url));
//echo "<div>URL:".$url."</div>";
}
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(
['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]
);
} else {
$this->addFlash('notice', $translator->trans('Ficier CSV importé avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($lp);
$rendu = $this->renderView(
'Rangements/ListePreparation/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'conditionVente' => $conditionVente]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('Rangements/ListePreparation/import_csv.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'type' => $type, 'lp' => $lp]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/lp/uploads/document/{id}/{type}", name="dtc_liste_preparation_document_upload")
*/
public function uploadDocumentAction(Request $request, $id, $type, FileUploader $fileUploader)
{
if ($type == "edit") {
$file = $request->request->get('file');
$fichier = $request->query->get('file');
$fileUploader->handleFileUpload([
'max_number_of_files' => 10,
'allowed_extensions' => ["csv"],
'folder' => 'lp/tmp/'.$id,
]);
} else {
$user = $this->getUser();
$fileUploader->handleFileUpload([
'max_number_of_files' => 10,
'folder' => 'tmp/documents/user/'.$user->getId().'/documents/'.$id,
]);
}
}
/**
* @Route("/lp/uploads/csv/lire", name="dtc_liste_preparation_lire_csv")
*/
public function lireCsvAction(Request $request)
{
$url = "";
$get = $request->query->all();
//print_r($get);
$tabLignes = [];
$dir = "";
//print_r($get);
$url = trim($get["url"], "/");
//$url = "uploads/lp/tmp/13/originals/lp-28-06-2021-3.csv";
$o = fopen($dir.$url, "r");
$l = fgets($o);
$explode_entete = explode(";", $l);
$explode_entete = array_slice($explode_entete, 0, 150);
//echo $l;
$contenu_fichier = file_get_contents($dir.$url);
$nbLignes = substr_count($contenu_fichier, "\n");
//$tabLignes[] = fgets($o);
//$tabLignes[] = fgets($o);
//$tabLignes[] = fgets($o);
while (($buffer = fgets($o, 4096)) !== false) {
$tabLignes[] = $buffer;
}
$rendu = $this->renderView('Rangements/ListePreparation/lire-csv.html.twig', ['url' => $url, 'explode_entete' => $explode_entete, "tabLignes" => $tabLignes]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '']);
}
/**
* @Route("/lp/uploads/csv/enregistrer", name="dtc_liste_preparation_enregistrer_numero_csv")
*/
public function enregistrerNumeroCsvAction(Request $request, EntityManagerInterface $em, CommandeService $commandeService)
{
$url = "";
$get = $request->query->all();
$repo_commande = $em->getRepository(Commande::class);
//print_r($get);
$tabLignes = [];
$dir = "";
//print_r($get);
$url = trim($get["url"], "/");
$o = fopen($dir.$url, "r");
$l = fgets($o);
$explode_entete = explode(";", $l);
$explode_entete = array_slice($explode_entete, 0, 150);
//echo $l;
$contenu_fichier = file_get_contents($dir.$url);
$nbLignes = substr_count($contenu_fichier, "\n");
$rendu = "";
$rendu_ok = [];
$rendu_erreurs = [];
while (($buffer = fgets($o, 4096)) !== false) {
$explode_ligne = explode(";", $buffer);
if ( ! empty($explode_ligne["0"])) {
$cmde_obj = $repo_commande->findOneBy(['typeDocumentCommercial' => TypeDocumentCommercial::COMMANDE, "referenceMarketPlace" => $explode_ligne["0"]]);
$bpIndice = count($explode_ligne) - 2;
$bp_obj = $repo_commande->findOneById(["id" => $explode_ligne[$bpIndice]]);
//echo "<div>bpIndice:".$explode_ligne[$bpIndice]."</div>";
$indice = count($explode_ligne) - 1;
//print_r($explode_ligne);
//echo "<div>NUM SUIVI:".$explode_ligne[$indice]."</div>";
if (is_object($cmde_obj)) {
if (trim($explode_ligne[$indice]) != "") {
$this->addFlash('notice', "Enregistrement du numéro de suivi : ".$explode_ligne[$indice]." pour la commande ".$explode_ligne["0"]." : réalisé avec succès !");
$CommandeNumeroSuivi = new CommandeNumeroSuivi();
$CommandeNumeroSuivi->setNumeroSuivi(trim($explode_ligne[$indice]));
$CommandeNumeroSuivi->setCommande($cmde_obj);
if (is_object($bp_obj)) {
$CommandeNumeroSuivi->setBp($bp_obj);
}
$em->persist($CommandeNumeroSuivi);
$commandeService->creerHistorique($cmde_obj, 30, ["message" => " : ".$explode_ligne[$indice]]);
if (is_object($cmde_obj->getCompteMarketPlace()) && is_object($cmde_obj->getStatutCommande()) && $cmde_obj->getStatutCommande()->getId() == 37) {
$statut = 36;
$tableau_donnee = ['statut_commande_id' => $statut];
$conn = $em->getConnection();
$conn->update('commerciale__commande', $tableau_donnee, ['id' => $cmde_obj->getId()]);
$ancienStatutCommande = "";
if (is_object($cmde_obj->getStatutCommande())) {
$ancienStatutCommande = $cmde_obj->getStatutCommande()->getLibelle();
}
$repoStatut = $em->getRepository(StatutCommande::class);
$nouveauStatutCommande = $repoStatut->find(36);
$commandeService->creerHistorique(
$cmde_obj,
12,
$donnees = [
"message" => "<br/>Mise à jour depuis : import de fichier csv",
"ancienStatutCommande" => $ancienStatutCommande,
"nouveauStatutCommande" => $nouveauStatutCommande->getLibelle(),
]
);
}
} else {
$this->addFlash('warning', "Numéro de suivi vide pour la commande ".$explode_ligne["0"]."");
}
} else {
$this->addFlash('warning', "Commande ".$explode_ligne["0"]." introuvable");
}
}
}
$em->flush();
$errors = $this->renderView('layout-errors.html.twig', []);
return new JsonResponse(['rendu' => $errors, 'valide' => '0', 'url' => '']);
}
private function remove_accent($str)
{
$a = [
'À',
'Á',
'Â',
'Ã',
'Ä',
'Å',
'Æ',
'Ç',
'È',
'É',
'Ê',
'Ë',
'Ì',
'Í',
'Î',
'Ï',
'Ð',
'Ñ',
'Ò',
'Ó',
'Ô',
'Õ',
'Ö',
'Ø',
'Ù',
'Ú',
'Û',
'Ü',
'Ý',
'ß',
'à',
'á',
'â',
'ã',
'ä',
'å',
'æ',
'ç',
'è',
'é',
'ê',
'ë',
'ì',
'í',
'î',
'ï',
'ñ',
'ò',
'ó',
'ô',
'õ',
'ö',
'ø',
'ù',
'ú',
'û',
'ü',
'ý',
'ÿ',
'Ā',
'ā',
'Ă',
'ă',
'Ą',
'ą',
'Ć',
'ć',
'Ĉ',
'ĉ',
'Ċ',
'ċ',
'Č',
'č',
'Ď',
'ď',
'Đ',
'đ',
'Ē',
'ē',
'Ĕ',
'ĕ',
'Ė',
'ė',
'Ę',
'ę',
'Ě',
'ě',
'Ĝ',
'ĝ',
'Ğ',
'ğ',
'Ġ',
'ġ',
'Ģ',
'ģ',
'Ĥ',
'ĥ',
'Ħ',
'ħ',
'Ĩ',
'ĩ',
'Ī',
'ī',
'Ĭ',
'ĭ',
'Į',
'į',
'İ',
'ı',
'IJ',
'ij',
'Ĵ',
'ĵ',
'Ķ',
'ķ',
'Ĺ',
'ĺ',
'Ļ',
'ļ',
'Ľ',
'ľ',
'Ŀ',
'ŀ',
'Ł',
'ł',
'Ń',
'ń',
'Ņ',
'ņ',
'Ň',
'ň',
'ʼn',
'Ō',
'ō',
'Ŏ',
'ŏ',
'Ő',
'ő',
'Œ',
'œ',
'Ŕ',
'ŕ',
'Ŗ',
'ŗ',
'Ř',
'ř',
'Ś',
'ś',
'Ŝ',
'ŝ',
'Ş',
'ş',
'Š',
'š',
'Ţ',
'ţ',
'Ť',
'ť',
'Ŧ',
'ŧ',
'Ũ',
'ũ',
'Ū',
'ū',
'Ŭ',
'ŭ',
'Ů',
'ů',
'Ű',
'ű',
'Ų',
'ų',
'Ŵ',
'ŵ',
'Ŷ',
'ŷ',
'Ÿ',
'Ź',
'ź',
'Ż',
'ż',
'Ž',
'ž',
'ſ',
'ƒ',
'Ơ',
'ơ',
'Ư',
'ư',
'Ǎ',
'ǎ',
'Ǐ',
'ǐ',
'Ǒ',
'ǒ',
'Ǔ',
'ǔ',
'Ǖ',
'ǖ',
'Ǘ',
'ǘ',
'Ǚ',
'ǚ',
'Ǜ',
'ǜ',
'Ǻ',
'ǻ',
'Ǽ',
'ǽ',
'Ǿ',
'ǿ',
];
$b = [
'A',
'A',
'A',
'A',
'A',
'A',
'AE',
'C',
'E',
'E',
'E',
'E',
'I',
'I',
'I',
'I',
'D',
'N',
'O',
'O',
'O',
'O',
'O',
'O',
'U',
'U',
'U',
'U',
'Y',
's',
'a',
'a',
'a',
'a',
'a',
'a',
'ae',
'c',
'e',
'e',
'e',
'e',
'i',
'i',
'i',
'i',
'n',
'o',
'o',
'o',
'o',
'o',
'o',
'u',
'u',
'u',
'u',
'y',
'y',
'A',
'a',
'A',
'a',
'A',
'a',
'C',
'c',
'C',
'c',
'C',
'c',
'C',
'c',
'D',
'd',
'D',
'd',
'E',
'e',
'E',
'e',
'E',
'e',
'E',
'e',
'E',
'e',
'G',
'g',
'G',
'g',
'G',
'g',
'G',
'g',
'H',
'h',
'H',
'h',
'I',
'i',
'I',
'i',
'I',
'i',
'I',
'i',
'I',
'i',
'IJ',
'ij',
'J',
'j',
'K',
'k',
'L',
'l',
'L',
'l',
'L',
'l',
'L',
'l',
'L',
'l',
'N',
'n',
'N',
'n',
'N',
'n',
'n',
'O',
'o',
'O',
'o',
'O',
'o',
'OE',
'oe',
'R',
'r',
'R',
'r',
'R',
'r',
'S',
's',
'S',
's',
'S',
's',
'S',
's',
'T',
't',
'T',
't',
'T',
't',
'U',
'u',
'U',
'u',
'U',
'u',
'U',
'u',
'U',
'u',
'U',
'u',
'W',
'w',
'Y',
'y',
'Y',
'Z',
'z',
'Z',
'z',
'Z',
'z',
's',
'f',
'O',
'o',
'U',
'u',
'A',
'a',
'I',
'i',
'O',
'o',
'U',
'u',
'U',
'u',
'U',
'u',
'U',
'u',
'U',
'u',
'A',
'a',
'AE',
'ae',
'O',
'o',
];
return str_replace($a, $b, $str);
}
}