<?php
namespace App\Controller\GestionComerciale;
use App\Entity\Clients\Client;
use App\Entity\FO\Societe;
use App\Entity\GestionComerciale\ArticleCommande;
use App\Entity\GestionComerciale\BonLivraison;
use App\Entity\GestionComerciale\BonPreparation;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\StatutCommande;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use App\Form\GestionComerciale\BonPreparationType;
use App\Form\GestionComerciale\CommandeType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Etiquettes\TNTService;
use App\Service\GestionComerciale\AcompteService;
use App\Service\GestionComerciale\BonLivraisonService;
use App\Service\GestionComerciale\CommandeService;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Snappy\Pdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class BonLivraisonController extends AbstractController
{
/**
* @Route("/vente/bons-livraison/nouveau/{id}/{type}", name="dtc_bon_livraison_ajouter")
*/
public function ajouterAction(Request $request, $id, $type = "", EntityManagerInterface $em, BonLivraisonService $bonLivraisonService, TranslatorInterface $translator,
ValidatorInterface $validator
) {
$titre_modal = $translator->trans("Nouveau bon de livraison");
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$bonLiv = clone $objet;
$bonLiv->setDateBon(new \Datetime);
$bonLiv->setDate(new \Datetime);
$user = $this->getUser();
//$bonLiv->setUtilisateur($user);
if (is_object($bonLiv->getUtilisateur()) && ! empty($this->getParameter('utilisateur_site_internet')) && $bonLiv->getUtilisateur()->getId(
) == $this->getParameter('utilisateur_site_internet')) {
} else {
//$bonLiv->setUtilisateur($user);
}
$form = $this->createForm(BonPreparationType::class, $bonLiv);
$errors = "";
$form->handleRequest($request);
$idsArticleCommande = $request->query->get('choixArticles');
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$bonLiv->setBp($objet);
$bonLiv->setCommande($objet->getCommande());
$link = $this->generateUrl('dtc_bon_livraison_ajouter', ['id' => $objet->getId(), 'type' => 'commande']);
$articleCommande = $em->getRepository(ArticleCommande::class)->listeArticleCommandeSelectionne($idsArticleCommande);
if ($form->isSubmitted()) {
if ($form->isValid()) {
//$url = $this->generateUrl('dtc_commande_modifier', array('id' => $objet->getId(),'tab'=>'bonpreparations'));
/*
$articles = array('idArticleCommande'=>$request->request->get('idArticleCommande'),'quantiteInit'=>$request->request->get('quantiteInit'),'quantite'=>$request->request->get('quantite'));
$valeurs = array("articles"=>$articles);
$bonLivraisonService->sauvegarder($bonLiv,$valeurs);
*/
$em->persist($bonLiv);
$em->flush();
$em->refresh($bonLiv);
$operation = $request->request->get('operation');
$articles = [
'valider' => $request->request->get('valider'),
'ids' => $request->request->get('ids'),
'idArticleCommande' => $request->request->get('idArticleCommande'),
'idArticleCommandeOrigine' => $request->request->get('idArticleCommandeOrigine'),
'montantRemise' => $request->request->get('montantRemise'),
'remiseCalcule' => $request->request->get('remiseCalcule'),
'remise' => $request->request->get('remise'),
'commentaire' => $request->request->get('commentaire'),
'commentairePrive' => $request->request->get('commentairePrive'),
'remiseSuppl' => $request->request->get('remiseSuppl'),
'ecocontribution' => $request->request->get('ecocontribution'),
'prix' => $request->request->get('prix'),
//'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
'libellesSecondaires' => $request->request->get('libellesSecondaires'),
'libelles' => $request->request->get('libelles'),
'tva' => $request->request->get('tva'),
'qte' => $request->request->get('qte'),
'commentaireSuppl' => $request->request->get('commentaireSuppl'),
'emplacement' => $request->request->get('emplacement'),
'nbEmplacement' => $request->request->get('nbEmplacement'),
'position' => $request->request->get('position'),
'articlesCommandeRepris' => $request->request->get('articlesCommandeRepris'),
'transporteurs' => $request->request->get('transporteurs'),
'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
];
$valeurs = ["articles" => $articles, 'typeDocument' => 'commande', 'operation' => 'commande', 'action' => 'nouveau'];
$bonLivraisonService->sauvegarderBon($bonLiv, $valeurs);
$url = $this->generateUrl('dtc_bon_livraison_modifier', ['id' => $bonLiv->getId()]);
$this->addFlash('notice', $translator->trans('Bon de livraison ajouté avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url], 200, ['Content-Type' => 'application/json']);
} else {
$errors = $validator->validate($bonLiv);
$rendu = $this->renderView(
'GestionComerciale/BonLivraison/ajouter.html.twig',
[
'form' => $form->createView(),
'errors' => $errors,
'id' => $id,
'type' => $type,
'articleCommande' => $articleCommande,
'commande' => $objet,
]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'GestionComerciale/BonLivraison/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'articleCommande' => $articleCommande, 'commande' => $objet]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'link' => $link, 'titre' => $titre_modal]);
}
/**
* @Route("/vente/bons-livraison/nouveau-v2/{id}/{type}", name="dtc_bon_livraison_ajouter_v2")
*/
public function ajouterV2Action(Request $request, $id, $type = "", EntityManagerInterface $em, BonLivraisonService $bonLivraisonService, CommandeService $commandeService,
TranslatorInterface $translator
) {
$idArticleColis = $request->request->get('colis_idArticleColis');
$quantiteColis = $request->request->get('colis_quantiteColis');
$idColis = $request->request->get('colis_idColis');
/*
print_r($idArticleCommandeColis);
print_r($quantiteColis);
print_r($idColis);
echo "TEST";
exit;
*/
$user = $this->getUser();
$idsArticleCommande = $request->request->get('choixArticles');
//$idsArticleCommande = $request->request->all();
//$qtesArticleCommande = $request->request->get('qteDispo');
if (count($idsArticleCommande) > 0) {
$repo_objet = $em->getRepository(Commande::class);
$repo_statut_commande = $em->getRepository(StatutCommande::class);
$user = $this->getUser();
$errors = "";
//$articleCommande = $em->getRepository(ArticleCommande::class)->listeArticleCommandeSelectionne($idsArticleCommande);
$objet = $repo_objet->find($id);
$statutAccepte = $repo_statut_commande->find(42);
$bonLiv = clone $objet;
$bonLiv->setStatutCommande($statutAccepte);
$bonLiv->setCreateur($user);
$bonLiv->setDateBon(new \Datetime);
$bonLiv->setDate(new \Datetime);
$bonLiv->setBp($objet);
$bonLiv->setCommande($objet->getCommande());
//$bonLiv->setUtilisateur($user);
if (is_object($bonLiv->getUtilisateur()) && ! empty($this->getParameter('utilisateur_site_internet')) && $bonLiv->getUtilisateur()->getId(
) == $this->getParameter('utilisateur_site_internet')) {
} else {
$bonLiv->setUtilisateur($user);
}
$em->persist($bonLiv);
$em->flush();
$em->refresh($bonLiv);
$operation = "commande";
//$operation = $request->request->get('operation');
$articles = [
'valider' => $request->request->get('valider'),
'ids' => $request->request->get('ids'),
'idArticleCommande' => $request->request->get('idArticleCommande'),
//'idArticleCommandeOrigine'=>$request->request->get('idArticleCommandeOrigine'),
'idArticleCommandeOrigine' => [],
'idArticleCommandeParent' => $request->request->get('idArticleCommandeOrigine'),
'montantRemise' => $request->request->get('montantRemise'),
'remiseCalcule' => $request->request->get('remiseCalcule'),
'remise' => $request->request->get('remise'),
'commentaire' => $request->request->get('commentaire'),
'commentairePrive' => $request->request->get('commentairePrive'),
'remiseSuppl' => $request->request->get('remiseSuppl'),
'ecocontribution' => $request->request->get('ecocontribution'),
'prix' => $request->request->get('prix'),
//'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
'libellesSecondaires' => $request->request->get('libellesSecondaires'),
'libelles' => $request->request->get('libelles'),
'tva' => $request->request->get('tva'),
'qte' => $request->request->get('qte'),
'qteDispo' => $request->request->get('qteDispo'),
'commentaireSuppl' => $request->request->get('commentaireSuppl'),
'emplacement' => $request->request->get('emplacement'),
'nbEmplacement' => $request->request->get('nbEmplacement'),
'position' => $request->request->get('position'),
'articlesCommandeRepris' => $request->request->get('articlesCommandeRepris'),
'transporteurs' => $request->request->get('transporteurs'),
'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
'idArticleColis' => $request->request->get('colis_idArticleColis'),
'quantiteColis' => $request->request->get('colis_quantiteColis'),
'idColis' => $request->request->get('colis_idColis'),
'tabPrixAchatNetEuros' => $request->request->get('tabPrixAchatNetEuros'),
'societe_livraison_txt' => $request->request->get('societe_livraison_txt'),
'numero_livraison_txt' => $request->request->get('numero_livraison_txt'),
'rue_livraison_txt' => $request->request->get('rue_livraison_txt'),
'complement_livraison_txt' => $request->request->get('complement_livraison_txt'),
'complement2_livraison_txt' => $request->request->get('complement2_livraison_txt'),
'cp_livraison_txt' => $request->request->get('cp_livraison_txt'),
'ville_livraison_txt' => $request->request->get('ville_livraison_txt'),
'pays_livraison_txt' => $request->request->get('pays_livraison_txt'),
'societe_facturation_txt' => $request->request->get('societe_facturation_txt'),
'numero_facturation_txt' => $request->request->get('numero_facturation_txt'),
'rue_facturation_txt' => $request->request->get('rue_facturation_txt'),
'complement_facturation_txt' => $request->request->get('complement_facturation_txt'),
'complement2_facturation_txt' => $request->request->get('complement2_facturation_txt'),
'cp_facturation_txt' => $request->request->get('cp_facturation_txt'),
'ville_facturation_txt' => $request->request->get('ville_facturation_txt'),
'pays_facturation_txt' => $request->request->get('pays_facturation_txt'),
];
$valeurs = ["articles" => $articles, 'typeDocument' => 'commande', 'operation' => 'commande', 'action' => 'nouveau'];
$bonLivraisonService->sauvegarderBon($bonLiv, $valeurs);
$url = $this->generateUrl('dtc_bon_livraison_modifier', ['id' => $bonLiv->getId(), 'forceQteDispo' => true]);
$this->addFlash('notice', $translator->trans('Bon de livraison ajouté avec succès !'));
$commandeService->creerHistorique($bonLiv, 1);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
return new JsonResponse(
[
'rendu' => '',
'valide' => '0',
'url' => '',
'idsArticleCommande' => $idsArticleCommande,
]
);
}
}
/**
* @Route("/vente/bons-livraison/modifier/{id}", name="dtc_bon_livraison_modifier")
*/
public function modifierAction(Request $request, Commande $bon, EntityManagerInterface $em, BonLivraisonService $bonService,
AcompteService $serviceAcompte, CommandeService $commandeService, TranslatorInterface $translator, ValidatorInterface $validator
) {
$user = $this->getUser();
//$bon->setUtilisateur($user);
if (is_object($bon->getUtilisateur()) && ! empty($this->getParameter('utilisateur_site_internet')) && $bon->getUtilisateur()->getId() == $this->getParameter(
'utilisateur_site_internet'
)) {
} else {
//$bon->setUtilisateur($user);
}
$form = $this->createForm(CommandeType::class, $bon);
$annuler = $request->request->get('annuler');
if ($annuler == "annuler" && $bon->getBP() != null /*|| $annuler == "annuler_devis" || $annuler == "annuler_bp"*/) {
$remboursement = 0;
$bonService->annuler($bon, $annuler);
if ($bon->getCommande()->getStatutCommande()->getOrdre() == "0") {
$remboursement = $serviceAcompte->proposerRemboursement($bon->getClient());
}
$this->addFlash('notice', $translator->trans('Bon de livraison annulé avec succès !'));
return $this->redirectToRoute('dtc_bon_preparation_modifier', ["id" => $bon->getBP()->getId(), "r" => $remboursement, "c" => $bon->getClient()->getId()]);
} elseif ($annuler == "annuler" && $bon->getBP() == null) {
$remboursement = 0;
$bonService->annuler($bon, $annuler);
if ($bon->getCommande()->getStatutCommande()->getOrdre() == "0") {
$remboursement = $serviceAcompte->proposerRemboursement($bon->getClient());
}
$this->addFlash('notice', $translator->trans('Bon de livraison annulé avec succès !'));
return $this->redirectToRoute('dtc_commande_modifier', ["id" => $bon->getCommande()->getId(), "r" => $remboursement, "c" => $bon->getClient()->getId()]);
}
if ($annuler == "annuler_bp" && $bon->getBP() != null) {
$remboursement = 0;
$bonService->annuler($bon, $annuler);
if ($bon->getCommande()->getStatutCommande()->getOrdre() == "0") {
$remboursement = $serviceAcompte->proposerRemboursement($bon->getClient());
}
$this->addFlash('notice', $translator->trans('Bon de livraison annulé avec succès !'));
return $this->redirectToRoute('dtc_bon_preparation_modifier', ["id" => $bon->getBP()->getId(), "r" => $remboursement, "c" => $bon->getClient()->getId()]);
}
if ($annuler == "annuler_devis") {
$remboursement = 0;
$bonService->annuler($bon, $annuler);
if ($bon->getCommande()->getStatutCommande()->getOrdre() == "0") {
$remboursement = $serviceAcompte->proposerRemboursement($bon->getClient());
}
//die;
$this->addFlash('notice', $translator->trans('Bon de livraison annulé avec succès !'));
return $this->redirectToRoute('dtc_bon_livraison_liste', ["r" => $remboursement, "c" => $bon->getClient()->getId()]);
}
$articles = ['ids' => $request->request->get('ids'), 'prix' => $request->request->get('prix'), 'qte' => $request->request->get('qte')];
$valeurs = ["articles" => $articles];
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($commandeService->estEditable($bon) or $request->request->get('operation') == "facture" or 1 == 1) {
// TODO CHANGE THIS
$droit = $this->isGranted(EntityVoter::UPDATE,BonPreparation::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_bon_livraison_modifier', ["id" => $bon->getId()]);
}
if ($form->isValid()) {
/*
if($request->request->get('annuler') != '') {
$bonService->annulerCommande($bon);
$this->addFlash(
'notice',
$translator->trans('Bon de préparation annulée avec succès !')
);
return $this->redirectToRoute('dtc_bon_preparation_liste',array());
}
*/
$em->persist($bon);
$em->flush();
$operation = $request->request->get('operation');
$articles = [
'valider' => $request->request->get('valider'),
'ids' => $request->request->get('ids'),
'idArticleCommande' => $request->request->get('idArticleCommande'),
'idArticleCommandeOrigine' => $request->request->get('idArticleCommandeOrigine'),
'montantRemise' => $request->request->get('montantRemise'),
'remiseCalcule' => $request->request->get('remiseCalcule'),
'remise' => $request->request->get('remise'),
'commentaire' => $request->request->get('commentaire'),
'commentairePrive' => $request->request->get('commentairePrive'),
'remiseSuppl' => $request->request->get('remiseSuppl'),
'ecocontribution' => $request->request->get('ecocontribution'),
'prix' => $request->request->get('prix'),
//'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
'libellesSecondaires' => $request->request->get('libellesSecondaires'),
'libelles' => $request->request->get('libelles'),
'tva' => $request->request->get('tva'),
'qte' => $request->request->get('qte'),
'commentaireSuppl' => $request->request->get('commentaireSuppl'),
'emplacement' => $request->request->get('emplacement'),
'nbEmplacement' => $request->request->get('nbEmplacement'),
'numero_serie' => $request->request->get('numero_serie'),
'duree_garantie' => $request->request->get('duree_garantie'),
'position' => $request->request->get('position'),
'articlesCommandeRepris' => $request->request->get('articlesCommandeRepris'),
'transporteurs' => $request->request->get('transporteurs'),
'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
'societe_livraison_txt' => $request->request->get('societe_livraison_txt'),
'numero_livraison_txt' => $request->request->get('numero_livraison_txt'),
'rue_livraison_txt' => $request->request->get('rue_livraison_txt'),
'complement_livraison_txt' => $request->request->get('complement_livraison_txt'),
'complement2_livraison_txt' => $request->request->get('complement2_livraison_txt'),
'cp_livraison_txt' => $request->request->get('cp_livraison_txt'),
'ville_livraison_txt' => $request->request->get('ville_livraison_txt'),
'societe_facturation_txt' => $request->request->get('societe_facturation_txt'),
'numero_facturation_txt' => $request->request->get('numero_facturation_txt'),
'rue_facturation_txt' => $request->request->get('rue_facturation_txt'),
'complement_facturation_txt' => $request->request->get('complement_facturation_txt'),
'complement2_facturation_txt' => $request->request->get('complement2_facturation_txt'),
'cp_facturation_txt' => $request->request->get('cp_facturation_txt'),
'ville_facturation_txt' => $request->request->get('ville_facturation_txt'),
];
$valeurs = ["articles" => $articles, 'typeDocument' => 'commande', 'operation' => $operation, 'action' => 'modifier'];
$bonService->sauvegarderBon($bon, $valeurs);
if ($operation == "facture") {
$this->addFlash('notice', $translator->trans('Facture sauvegardée avec succès !'));
$typesFac = $em->getRepository(TypeDocumentCommercial::class)->findById([6, 7]);
$repo_fac = $em->getRepository(Commande::class);
$facture = $repo_fac->findBy(["bl" => $bon, "typeDocumentCommercial" => $typesFac],
['id' => 'DESC'],
1,
0);
foreach ($facture as $f) {
$temp_id_fac = $f->getId();
$temp_type_document_commercial = $f->getTypeDocumentCommercial();
}
if ($temp_type_document_commercial->getId() == 6) {
return $this->redirectToRoute('dtc_facture_afficher', ["id" => $temp_id_fac]);
} else {
return $this->redirectToRoute('dtc_avoir_modifier', ["id" => $temp_id_fac]);
}
} else {
$this->addFlash('notice', $translator->trans('Bon de livraison sauvegardée avec succès !'));
$commandeService->creerHistorique($bon, 2);
return $this->redirectToRoute('dtc_bon_livraison_modifier', ["id" => $bon->getId()]);
}
} else {
$errors = $validator->validate($bon);
//\Doctrine\Common\Util\Debug::dump($errors);
}
} else {
$paiement = $bon->getStatutPaiement();
$em->refresh($bon);
$bon->setStatutPaiement($paiement);
$em->persist($bon);
$em->flush();
$this->addFlash('notice', $translator->trans('Statut du paiement de la commande modifié avec succès !'));
/*
$this->addFlash( 'warning', "La commande n'est plus éditable ! ");
*/
return $this->redirectToRoute('dtc_commande_modifier', ["id" => $bon->getId()]);
}
}
return $this->render('GestionComerciale/BonLivraison/modifier.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'commande' => $bon]);
}
/**
* @Route("/vente/bons-livraison", name="dtc_bon_livraison_liste")
*/
public function listerAction(Request $request, $id = "0", $type = "a", EntityManagerInterface $em, ColonneTableauService $serviceColonneTableau, Datatable $datatable,
TranslatorInterface $translator
) {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$param = $request->query->all();
if (is_object($objet)) {
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [0], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [1], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [2], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [3], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id ", "targets" => [4], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right", "targets" => [5], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right", "targets" => [6], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right", "targets" => [7], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right", "targets" => [8], "visible" => true, "orderable" => false];
$this->datatableCommande($objet, $type, $em, $datatable, $translator);
return $this->render(
'GestionComerciale/BonLivraison/lister_commande.html.twig',
['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type, 'parametres' => $param]
);
} else {
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [1],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "id"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "date"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "reference"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "refclient"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [5],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "client"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [6],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "refCli"),
];
$tableau_class_cellule[] = [
"className" => "visible_export sommeHT colonne_id text-right",
"targets" => [7],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "totalHT"),
];
$tableau_class_cellule[] = [
"className" => "visible_export somme colonne_id text-right",
"targets" => [8],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "totalTTC"),
];
$tableau_class_cellule[] = [
"className" => "visible_export somme colonne_id text-right",
"targets" => [9],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "numeroSuivi"),
];
$tableau_class_cellule[] = [
"className" => "visible_export somme colonne_id text-left",
"targets" => [10],
"visible" => $serviceColonneTableau->getColonneUtilisateur(BonLivraison::class, "equipier"),
];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [11], "visible" => true];
$param = $request->query->all();
$param["aFacturer"] = "on";
$param["marketPlace"] = "on";
$this->datatable($request, $datatable, $translator);
return $this->render(
'GestionComerciale/BonLivraison/lister.html.twig',
["id" => $id, "type" => $type, 'tableauClassColonne' => $tableau_class_cellule, 'parametres' => $param]
);
}
$param = $request->query->all();
$param["aFacturer"] = "on";
$param["marketPlace"] = "on";
return $this->render('GestionComerciale/BonLivraison/lister.html.twig', [
'parametres' => $param,
'tableauClassColonne' => $tableau_class_cellule,
]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
$param = $request->query->all();
$datatable->setDatatableId('dta-bonlivraisons')
->setEntity(Commande::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Ref client") => 'cl.reference',
$translator->trans("Client") => 'cl.nom',
$translator->trans("Ref cmde cli") => 'x.referenceClient',
$translator->trans("Total HT") => 'x.total',
$translator->trans("Total TTC") => 'x.totalTtc',
$translator->trans("Num suivi") => 'x.numeroSuivi',
$translator->trans("Équipier") => 'cr.reference',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.utilisateur', 'u', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.createur', 'cr', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
/*->setWhere(
$type_jointure.' = :objet',
array('objet' => $objet)
)
*/
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_bon_livraison_modifier',
],
],
1 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_bon_livraison_modifier',
],
],
3 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_client_modifier',
'typeDocument' => 'client',
],
],
4 => [
'view' => 'FO/DataTable/client.html.twig',
'params' => [],
],
6 => [
'view' => 'FO/DataTable/prix_total_ht.html.twig',
'params' => [],
],
7 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [],
],
9 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_utilisateur_modifier',
'typeDocument' => 'equipier',
],
],
10 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_bon_livraison_modifier',
//'supprimer_route' => 'dtc_bon_livraison_supprimer',
'pdf_route' => 'dtc_bon_livraison_pdf',
'entite' => 'bonPreparation',
'objet' => Commande::class,
'deplier' => true,
],
],
]
)
->setMultiple(
[
'print' => [
'title' => 'Non disponible',
'route' => 'dtc_bon_livraison_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([2, 3, 4, 5]);
$where = 'x.typeDocumentCommercial = :typeDocumentCommercial and x.visible = :visible';
$parameters = ['typeDocumentCommercial' => TypeDocumentCommercial::BL, 'visible' => 1];
if (array_key_exists('parametres', $param)) {
if (array_key_exists('client', $param["parametres"]) and $param["parametres"]["client"] > 0) {
//$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$parameters["client"] = $param["parametres"]["client"];
if ($where != "") {
$where .= " AND ";
}
$where .= "cl.id = :client";
}
if (array_key_exists('client', $param["parametres"]) and $param["parametres"]["date_debut"] != "") {
$param["parametres"]["date_debut"] = \DateTime::createFromFormat('d/m/Y', $param["parametres"]["date_debut"]);
$param["parametres"]["date_debut"]->setTime(00, 00, 00);
$parameters["date_debut"] = $param["parametres"]["date_debut"];
if ($where != "") {
$where .= " AND ";
}
$where .= "x.date >= :date_debut";
}
if (array_key_exists('client', $param["parametres"]) and $param["parametres"]["date_fin"] != "") {
$param["parametres"]["date_fin"] = \DateTime::createFromFormat('d/m/Y', $param["parametres"]["date_fin"]);
$param["parametres"]["date_fin"]->setTime(23, 59, 59);
$parameters["date_fin"] = $param["parametres"]["date_fin"];
if ($where != "") {
$where .= " AND ";
}
$where .= "x.date <= :date_fin";
}
$where_facturer = "";
if (array_key_exists('aFacturer', $param["parametres"]) and $param["parametres"]["aFacturer"] != "") {
//$parameters["aFacturer"]="1";
//if($where != "") $where .= " OR ";
//$where .= "x.aFacturer = TRUE";
if ($where != "") {
$where_facturer .= " and ";
}
//$where_facturer .= " ( x.aFacturer = TRUE or x.aFacturer is null";
$where_facturer .= " ( x.facture is null ";
if (array_key_exists('facturer', $param["parametres"]) and $param["parametres"]["facturer"] != "") {
$where_facturer .= " or x.facture is not null )";
} else {
$where_facturer .= ") ";
}
} elseif (array_key_exists('facturer', $param["parametres"]) and $param["parametres"]["facturer"] != "") {
if ($where != "") {
$where .= " and ";
}
$where .= "x.facture is not null ";
}
/*
if (array_key_exists('marketPlace', $param["parametres"]) and $param["parametres"]["marketPlace"] == "on") {
$where_facturer .= " and x.referenceMarketPlace is not null ";
} else {
$where_facturer .= " and x.referenceMarketPlace is null ";
}
*/
if ($where_facturer != "") {
$where .= $where_facturer;
}
}
//echo $where;
if ($where != '') {
//echo $where;
$datatable->setWhere($where, $parameters);
}
//dump($where)
return $datatable;
/*
$datatable ->setDatatableId('dta-bonlivraisons')
->setEntity("DTCGestionComercialeBundle:Commande", "x")
->setFields(
array(
$translator->trans("ID") => 'x.id',
//$translator->trans("Commande") => 'c.reference',
$translator->trans("Client") => 'cl.nom',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Date") => 'x.dateBon',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id'
)
)
->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
'x.typeDocumentCommercial = :typeDocumentCommercial',
array('typeDocumentCommercial' => TypeDocumentCommercial::BL)
)
->setRenderers(
array(
3 => array(
'view' => 'FO/DataTable/date.html.twig',
'params' => array(
),
),
4 => array(
'view' => 'FO/DataTable/actions.html.twig',
'params' => array(
//'edit_route' => 'dtc_bon_livraison_modifier',
//'supprimer_route' => 'dtc_bon_livraison_supprimer',
'pdf_route' => 'dtc_bon_livraison_pdf',
'entite' => 'bonPreparation',
'objet' => "DTCGestionComercialeBundle:Commande"
),
),
)
)
->setMultiple(
array(
'print' => array(
'title' => 'Imprimer',
'route' => 'dtc_bon_livraison_pdf_multiple' ),
)
)
->setOrder("x.id", "desc")
->setSearch(true)
//->setSearchFields(array(1,2))
;
return $datatable;
*/
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableCommande($objet, $type = "bp", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$repo_statut_document = $em->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 5, "ordre" => [0]]);
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-bonlivraisons')
->setEntity(Commande::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Ref client") => 'cl.reference',
$translator->trans("Client") => 'cl.nom',
$translator->trans("Ref cmde cli") => 'x.referenceClient',
$translator->trans("Total HT") => 'x.total',
$translator->trans("Total TTC") => 'x.totalTtc',
$translator->trans("Num suivi") => 'x.numeroSuivi',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
//->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
/*->setWhere(
$type_jointure.' = :objet',
array('objet' => $objet)
)
*/
->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.utilisateur', 'u', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
/*
->setWhere(
'x.bp = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande)',
array('objet' => $objet,'typeDocumentCommercial' => TypeDocumentCommercial::BL,'statutCommande'=>$liste_statut)
)
*
*/
->setWhere(
$type_jointure.' = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande)',
['objet' => $objet, 'typeDocumentCommercial' => TypeDocumentCommercial::BL, 'statutCommande' => $liste_statut]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_bon_livraison_modifier',
],
],
5 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [],
],
6 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [],
],
8 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_bon_livraison_modifier',
//'supprimer_route' => 'dtc_bon_livraison_supprimer',
'pdf_route' => 'dtc_bon_livraison_pdf',
'entite' => 'bonPreparation',
'objet' => Commande::class,
'deplier' => true,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)//->setSearchFields(array(1,2))
;
return $datatable;
}
/**
* @Route("/vente/bons-livraison/grid/{id}/{type}", name="dtc_bon_livraison_liste_grid")
*/
public function gridAction(Request $request, $id = "", $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
if (is_object($objet)) {
return $this->datatableCommande($objet, $type, $em, $datatable, $translator)->execute();
} else {
return $this->datatable($request, $datatable, $translator)->execute();
}
}
/**
* @Route("", name="")
*/
public function listerCommandeClientAction(Request $request, Client $client)
{
$options = '';
$cpt = 0;
foreach ($client->getCommandes() as $bonPrepa) {
$selected = "";
//if($cpt == 0) $selected = 'selected="selected"';
$options .= '<option '.$selected.' value="'.$bonPrepa->getId().'">'.$bonPrepa->getLibelle().'</option>';
$cpt++;
}
$referenceCommandeClientObligatoire = $client->getReferenceClientObligatoire();
return new JsonResponse(
['options' => $options, 'valide' => '0', 'referenceClientObligatoire' => $referenceCommandeClientObligatoire]
);
}
/**
* @Route("/bons-livraison/pdf/{id}", name="dtc_bon_livraison_pdf")
*/
public function pdfBonLivraisonAction(Request $request, Commande $bonPreparation, $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/BONSLIV/'.$date.'/BONLIV-'.$bonPreparation->getReference().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
//return $this->render('GestionComerciale/BonLivraison/template_pdf.html.twig',array('commande' => $bonPreparation,'societe' => $societe));
$footer = $this->renderView('FO/PDF/footer_bl_pagination_pdf.html.twig', ['societe' => $societe, 'commande' => $bonPreparation]);
$header = $this->renderView('FO/PDF/header_bl_pdf.html.twig', ['societe' => $societe, 'commande' => $bonPreparation]);
//$snappy->setOption('page-size', 'A4');
//$snappy->setOption('header-html', $header);
$snappy->setOption('footer-html', $footer);
$snappy->setOption('margin-left', 0);
$snappy->setOption('margin-right', 0);
$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");
$snappy->generateFromHtml(
$this->renderView(
//'GestionComerciale/BonLivraison/template_pdf.html.twig',
'GestionComerciale/BonLivraison/template_pdf.html.twig',
[
'commande' => $bonPreparation,
'societe' => $societe,
]
),
$chemin_pdf
);
if ($retour == true) {
return $this->render('FO/PDF/conteneur_pdf.html.twig', [
'objet' => $bonPreparation,
'chemin_pdf' => '/'.$chemin_pdf,
'visualiser' => $request->query->get('visualiser'),
]);
//return new RedirectResponse("/".$chemin_pdf);
}
//if($retour == true) return new RedirectResponse("/".$chemin_pdf);
}
/**
* @Route("/vente/bons-livraison/facturer/multiple", name="dtc_bon_livraison_facturer_multiple")
*/
public function facturerMultipleAction(Request $request, EntityManagerInterface $em)
{
$data = $request->get('dataTables');
$ids = $data['actions'];
$notice = "";
for ($i = 0; $i < count($ids); $i++) {
$repo = $em->getRepository(Commande::class);
$bon = $repo->find($ids[$i]);
if (is_object($bon)) {
$notice .= $bon->getReference()." facturée avec succès <br/>";
}
}
if ($notice != "") {
$this->addFlash('notice', $notice);
}
$url = $this->generateUrl('dtc_bon_livraison_liste');
return new JsonResponse(['target' => '', 'url' => $url, 'valide' => '1']);
}
/**
* @Route("/vente/bons-livraison/etiquettes/imprimer/multiple/{id}", name="dtc_bon_livraison_etiquette_multiple")
*/
public function imprimerEtiquetteMultipleAction(Request $request, Commande $bon, EntityManagerInterface $em, TNTService $service_tnt)
{
$date_Y = date("Y");
$date_M = date("m");
$date_D = date("d");
$date = $date_Y.'/'.$date_M.'/'.$date_D;
$data = $request->get('data');
//echo $bon->getId();
//print_r($data);
$listerEtiquetteTnt = $service_tnt->listerEtiquetteTnt($bon);
//print_r($listerEtiquetteTnt);
$tableauPdf = [];
if (count($listerEtiquetteTnt) > 0) {
foreach ($listerEtiquetteTnt as $etiquetteTnt) {
$tableauPdf[] = $etiquetteTnt["pdf"];
echo $etiquetteTnt["pdf"];
exit;
}
//parcelNumber
}
$pdfRelier = 'PDF/ETIQUETTES/'.date('Y').'/'.date('n').'/'.date('d').'/BLS-'.date('d-m-Y').'_'.date('H_i_s').'.pdf';
$dirname = dirname($pdfRelier);
if ( ! is_dir($dirname)) {
//echo "<div>toto : ".$dirname."</div>";
mkdir($dirname, 0755, true);
}
if (count($tableauPdf) > 0) {
$cmd = "pdftk ";
foreach ($tableauPdf as $file) {
$cmd .= $file." ";
}
$cmd .= "cat output $pdfRelier";
$result = shell_exec($cmd);
$valide = 1;
$url = "/".$pdfRelier;
}
echo $cmd;
exit;
return new JsonResponse(['target' => '_blank', 'url' => '/'.$pdfRelier, 'valide' => '1']);
}
/**
* @Route("/vente/bons-livraison/imprimer/multiple", name="dtc_bon_livraison_multiple")
* @Route("/vente/bons-livraison/imprimer/multiple", name="dtc_bon_livraison_pdf_multiple")
*/
public function imprimerMultipleAction(Request $request, EntityManagerInterface $em)
{
$data = $request->get('dataTables');
$ids = $data['actions'];
$tableauPdf = [];
$pdfRelier = 'PDF/BONSLIV/BONLIV-'.date('d-m-Y').'.pdf';
$date_Y = date("Y");
$date_M = date("m");
$date_D = date("d");
$date = $date_Y.'/'.$date_M.'/'.$date_D;
//$ids = array("118","101","93");
for ($i = 0; $i < count($ids); $i++) {
$repo = $em->getRepository(Commande::class);
$bon = $repo->find($ids[$i]);
if (is_object($bon)) {
$this->pdfBonLivraisonAction($bon, false);
$tableauPdf[] = $chemin_pdf = 'PDF/BONSLIV/'.$date.'/BONLIV-'.$bon->getReference().'.pdf';
}
}
$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$pdfRelier ";
foreach ($tableauPdf as $file) {
$cmd .= $file." ";
}
$result = shell_exec($cmd);
return new JsonResponse(['target' => '_blank', 'url' => '/'.$pdfRelier, 'valide' => '1']);
}
/**
* @Route("/vente/bons-livraison/client/{id}", name="dtc_bon_livraison_liste_by_client")
*/
public function listerByClientAction(Request $request, Client $client, EntityManagerInterface $em)
{
$repo_commande = $em->getRepository(Commande::class);
$bls = $repo_commande->findBy([
'client' => $client->getId(),
'typeDocumentCommercial' => TypeDocumentCommercial::BL,
'dejaFacture' => false,
]);
if ($request->getMethod() == 'POST') {
$ids = $request->request->get('ids');
//Remise à zero du statut a facturer
foreach ($bls as $bl) {
$bl->setAFacturer(false);
$em->persist($bl);
}
$em->flush();
if (count($ids) > 0) {
foreach ($ids as $id) {
$bl = $repo_commande->find($id);
if (is_object($bl)) {
$bl->setAFacturer(true);
$em->persist($bl);
}
}
$em->flush();
}
$url = $this->generateUrl('dtc_facture_traite');
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$rendu = $this->renderView('GestionComerciale/BonLivraison/lister_by_client_modal.html.twig', ['client' => $client, 'bls' => $bls]);
return new JsonResponse(
['rendu' => $rendu, 'valide' => '0', 'titre' => 'Sélectionnez les bons de livraison à facturer']
);
}
}
/**
* @Route("/bl/charger-tableau/{id}/{type}", name="dtc_bl_charger_tableau")
*/
public function chargerTableauAction(Request $request, Commande $commande, $type = "")
{
$rendu = $this->renderView('GestionComerciale/BonLivraison/charger_tableau.html.twig', ["commande" => $commande, 'type' => $type]);
return new JsonResponse(['rendu' => $rendu]);
}
}