<?php
namespace App\Controller\GestionComerciale;
use App\Entity\Clients\Client;
use App\Entity\FO\Societe;
use App\Entity\GestionComerciale\ArticleCommande;
use App\Entity\GestionComerciale\Avoir;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\Facture;
use App\Entity\GestionComerciale\StatutCommande;
use App\Entity\GestionComerciale\StatutPaiement;
use App\Form\GestionComerciale\CommandeType;
use App\Form\GestionComerciale\FactureType;
use App\Kernel;
use App\Library\Datatable\Util\Datatable;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use App\Service\GestionComerciale\AcompteService;
use App\Service\GestionComerciale\BonLivraisonService;
use App\Service\GestionComerciale\CommandeService;
use App\Service\GestionComerciale\FactureService;
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\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class FactureController extends AbstractController
{
/**
* @Route("/vente/facture/{id}", name="dtc_facture_afficher")
*/
public function afficherAction(Request $request, Commande $commande, EntityManagerInterface $em, TranslatorInterface $translator, FactureService $factureService,
AcompteService $serviceAcompte , Datatable $datatable
) {
if ($commande->getTypeDocumentCommercial() == TypeDocumentCommercial::AVOIR) {
return $this->redirectToRoute('dtc_avoir_modifier', ["id" => $commande->getId()]);
}
$repo_objet = $em->getRepository(Commande::class)->find($commande);
$reglements = $repo_objet->getAcomptes();
$user = $this->getUser();
$operation = $request->query->get('operation');
$errors = "";
$annuler = $request->request->get('annuler');
$form = $this->createForm(CommandeType::class, $commande);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->persist($commande);
//Modification du client sur les autres documents
$repo_commande = $em->getRepository(Commande::class);
$documents = $repo_commande->getDocumentClientAmodifier($commande)->getQuery()->getResult();
if (count($documents) > 0) {
foreach ($documents as $doc) {
if ($commande->getClient()->getId() != $doc->getClient()->getId()) {
$doc->setClient($commande->getClient());
$doc->setAdresseLivraison($commande->getAdresseLivraison());
$doc->setAdresseFacturation($commande->getAdresseFacturation());
$em->persist($doc);
}
}
$em->flush();
}
if (is_object($commande->getAdresseLivraison())) {
$adrLiv = $commande->getAdresseLivraison();
if (is_object($adrLiv->getCodePostal())) {
$commande->setCodePostalLivraison($adrLiv->getCodePostal());
}
if (is_object($adrLiv->getCodePostal())) {
$commande->setCodePostalLivraisonTxt($adrLiv->getCodePostal()->getCodePostal());
}
if (is_object($adrLiv->getVille())) {
$commande->setVilleLivraison($adrLiv->getVille());
}
if (is_object($adrLiv->getVille())) {
$commande->setVilleLivraisonTxt($adrLiv->getVille()->getTitre());
}
if (is_object($adrLiv->getPays())) {
$commande->setPaysLivraison($adrLiv->getPays());
}
$commande->setLibelleLivraison($adrLiv->getSociete());
$commande->setNumeroLivraison($adrLiv->getNumero());
$commande->setRueLivraison($adrLiv->getRue());
$commande->setComplementLivraison($adrLiv->getComplement());
$commande->setComplementLivraison2($adrLiv->getComplement2());
}
if (is_object($commande->getAdresseFacturation())) {
$adrFac = $commande->getAdresseFacturation();
if (is_object($adrFac->getCodePostal())) {
$commande->setCodePostalFacturation($adrFac->getCodePostal());
}
if (is_object($adrFac->getCodePostal())) {
$commande->setCodePostalFacturationTxt($adrFac->getCodePostal()->getCodePostal());
}
if (is_object($adrFac->getVille())) {
$commande->setVilleFacturation($adrFac->getVille());
}
if (is_object($adrFac->getVille())) {
$commande->setVilleFacturationTxt($adrFac->getVille()->getTitre());
}
if (is_object($adrFac->getPays())) {
$commande->setPaysFacturation($adrFac->getPays());
}
$commande->setLibelleFacturation($adrFac->getSociete());
$commande->setNumeroFacturation($adrFac->getNumero());
$commande->setRueFacturation($adrFac->getRue());
$commande->setComplementFacturation($adrFac->getComplement());
$commande->setComplementFacturation2($adrFac->getComplement2());
}
$em->flush();
if ($annuler != "annuler" && $annuler != "annuler_devis" && $annuler != "annuler_bp") {
$this->addFlash(
'notice',
$translator->trans('Facture modifiée avec succés !')
);
return $this->redirectToRoute('dtc_facture_afficher', ["id" => $commande->getId()]);
}
}
}
//echo "AA ".$annuler;
if ($annuler == "annuler" && is_object($commande->getBL()) == true && $commande->getMultiBL() == 0/*|| $annuler == "annuler_devis" || $annuler == "annuler_bp"*/) {
$factureService->annuler($commande, $annuler);
$remboursement = 0;
if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() != TypeDocumentCommercial::ORDREREPARATION) {
$remboursement = $serviceAcompte->proposerRemboursement($commande->getClient());
}
$this->addFlash(
'notice',
$translator->trans('Facture annulée avec succès !')
);
//exit;
return $this->redirectToRoute('dtc_bon_livraison_modifier', ["id" => $commande->getBL()->getId(), "r" => $remboursement, "c" => $commande->getClient()->getId()]);
} elseif ($annuler == "annuler" && $commande->getCommande()->getTypeDocumentCommercial() == TypeDocumentCommercial::ORDREREPARATION) {
//echo "okokokokokok";
//exit;
$factureService->annuler($commande, $annuler);
$remboursement = 0;
if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() == TypeDocumentCommercial::ORDREREPARATION) {
$remboursement = $serviceAcompte->proposerRemboursement($commande->getClient());
}
$this->addFlash(
'notice',
$translator->trans('Facture annulée avec succès !')
);
//exit;
return $this->redirectToRoute('dtc_ordre_reparation_modifier', ["id" => $commande->getCommande()->getId(), "r" => $remboursement, "c" => $commande->getClient()->getId()]);
} elseif ($annuler == "annuler" && is_object($commande->getBL()) == false) {
//echo "okokokokokok";
//exit;
$factureService->annuler($commande, $annuler);
$remboursement = 0;
if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() != TypeDocumentCommercial::ORDREREPARATION) {
$remboursement = $serviceAcompte->proposerRemboursement($commande->getClient());
}
$this->addFlash(
'notice',
$translator->trans('Facture annulée avec succès !')
);
//exit;
return $this->redirectToRoute('dtc_facture_liste', ["r" => $remboursement, "c" => $commande->getClient()->getId()]);
}
if ($annuler == "annuler_bp" && $commande->getBP() != null) {
$factureService->annuler($commande, $annuler);
$remboursement = 0;
if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() != TypeDocumentCommercial::ORDREREPARATION) {
$remboursement = $serviceAcompte->proposerRemboursement($commande->getClient());
}
$this->addFlash(
'notice',
$translator->trans('Facture annulée avec succès !')
);
//exit;
return $this->redirectToRoute('dtc_bon_preparation_modifier', ["id" => $commande->getBP()->getId(), "r" => $remboursement, "c" => $commande->getClient()->getId()]);
}
if ($annuler == "annuler_devis") {
$factureService->annuler($commande, $annuler);
$remboursement = 0;
if ($annuler == "annuler" && $commande->getTypeDocumentCommercial() != TypeDocumentCommercial::ORDREREPARATION) {
$remboursement = $serviceAcompte->proposerRemboursement($commande->getClient());
}
$this->addFlash(
'notice',
$translator->trans('Facture annulée avec succès !')
);
//exit;
return $this->redirectToRoute('dtc_facture_liste', ["r" => $remboursement, "c" => $commande->getClient()->getId()]);
}
$this->datatableAvoir($commande, $datatable, $translator);
$modal = $request->query->get('modal');
if ($modal == 1) {
if ($commande->getMultiBL() == true) {
$repo_commande = $em->getRepository(Commande::class);
$bls = $repo_commande->findByFacture($commande->getId());
$rendu = $this->renderView(
'GestionComerciale/Facture/afficher-traite-modal.html.twig',
['form' => $form->createView(), 'commande' => $commande, 'errors' => $errors, 'bls' => $bls]
);
} else {
$rendu = $this->renderView(
'GestionComerciale/Facture/afficher-modal.html.twig',
['form' => $form->createView(), 'commande' => $commande, 'errors' => $errors, 'reglements' => $reglements, 'operation' => $operation]
);
}
$titre_modal = $commande->getReference();
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
} else {
if ($commande->getMultiBL() == true) {
$repo_commande = $em->getRepository(Commande::class);
$bls = $repo_commande->findByFacture($commande->getId());
return $this->render(
'GestionComerciale/Facture/afficher-traite.html.twig',
['form' => $form->createView(), 'commande' => $commande, 'errors' => $errors, 'bls' => $bls, 'reliquats' => $request->query->get('reliquats')]
);
} else {
return $this->render(
'GestionComerciale/Facture/afficher.html.twig',
[
'form' => $form->createView(),
'commande' => $commande,
'errors' => $errors,
'reglements' => $reglements,
'operation' => $operation,
'reliquats' => $request->query->get('reliquats'),
]
);
}
}
}
/**
* @Route("/vente/facture/nouveau/{id}/{type}", name="dtc_facture_ajouter")
*/
public function ajouterAction(Request $request, $id, $type = "", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator, FactureService $factureService)
{
$titre_modal = $translator->trans("Nouvelle facture");
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$bonPrepa = clone $objet;
$bonPrepa->setDateBon(new \DateTime());
$user = $this->getUser();
$bonPrepa->setUtilisateur($user);
if (is_object($bonPrepa->getUtilisateur()) && ! empty($this->getParameter('utilisateur_site_internet')) && $bonPrepa->getUtilisateur()->getId(
) == $this->getParameter('utilisateur_site_internet')) {
} else {
//$bonPrepa->setUtilisateur($user);
}
$form = $this->createForm(FactureType::class, $bonPrepa);
$errors = "";
$form->handleRequest($request);
$idsArticleCommande = $request->query->get('choixArticles');
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$bonPrepa->setCommande($objet);
$link = $this->generateUrl('dtc_facture_ajouter', ['id' => $objet->getId(), 'type' => 'commande', 'operation' => $request->query->get('operation')]);
$articleCommande = $em->getRepository(ArticleCommande::class)->listeArticleCommandeSelectionne($idsArticleCommande);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::COMMANDE) {
$url = $this->generateUrl('dtc_bon_preparation_modifier', ['id' => $objet->getId(), 'tab' => 'factures']);
} else {
$url = $this->generateUrl('dtc_ordre_reparation_modifier', ['id' => $objet->getId(), 'tab' => 'factures']);
}
if ($request->query->get('operation') == "or") {
$objet->setFacture($bonPrepa);
$bonPrepa->setCommande($objet);
}
//print_r($request->request->get('emplacement'));
//echo "<div>POPOPOPOPOPOP</div>";
$articles = [
'emplacement' => $request->request->get('emplacement'),
'idArticleCommande' => $request->request->get('idArticleCommande'),
'quantiteInit' => $request->request->get('quantiteInit'),
'quantite' => $request->request->get('quantite'),
'position' => $request->request->get('position'),
];
$valeurs = ["articles" => $articles, 'operation' => $request->query->get('operation')];
$factureService->sauvegarder($bonPrepa, $valeurs);
if ($request->query->get('operation') == "or") {
//if($factureService->resteDesArticlesSansFacture($objet)) {
if ($factureService->resteDesArticlesSansFactureOuAvoir($objet)) {
//echo "<div>RESTE</div>";
$statutCommande = $em->getRepository(StatutCommande::class)->findOneBy(
["documentCommercial" => $objet->getTypeDocumentCommercial(), "ordre" => "3"]
);
} else {
// echo "<div>RESTE PAS</div>";
$statutCommande = $em->getRepository(StatutCommande::class)->findOneBy(
["documentCommercial" => $objet->getTypeDocumentCommercial(), "ordre" => "4"]
);
}
$objet->setStatutCommande($statutCommande);
$em->persist($objet);
$em->flush();
}
$url = $this->generateUrl('dtc_facture_afficher', ["id" => $bonPrepa->getId()]);
$this->addFlash(
'notice',
$translator->trans('Facture ajoutée avec succès !')
);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($bonPrepa);
$rendu = $this->renderView(
'GestionComerciale/Facture/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/Facture/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/factures", name="dtc_facture_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 text-right", "targets" => [2], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right", "targets" => [3], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right", "targets" => [4], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [5], "visible" => true];
$this->datatableCommande($objet, $type, $em, $datatable, $translator);
return $this->render(
'GestionComerciale/Facture/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(Facture::class, "id"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "date"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "reference"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "refCli"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [5],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "client"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [6],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "libelleLivraison"),
];
$tableau_class_cellule[] = [
"className" => "visible_export totalHT colonne_id text-right",
"targets" => [7],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "totalHT"),
];
$tableau_class_cellule[] = [
"className" => "visible_export tva colonne_id text-right",
"targets" => [8],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "tva"),
];
$tableau_class_cellule[] = [
"className" => "visible_export TotalTTC colonne_id text-right",
"targets" => [9],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "totalTTC"),
];
$tableau_class_cellule[] = [
"className" => "visible_export",
"targets" => [10],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Facture::class, "paye"),
];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [11], "visible" => true];
$this->datatable($request, $datatable, $translator);
return $this->render('GestionComerciale/Facture/lister.html.twig', [
"id" => $id,
"type" => $type,
'tableauClassColonne' => $tableau_class_cellule,
'parametres' => $param,
'statutsPaiement' => $em->getRepository(StatutPaiement::class)->findAll()//->findBy(array('id'=>array(1,2)))
]);
}
}
/**
* 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-factures')
->setEntity(Commande::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Réf client") => 'cl.reference',
$translator->trans("Client") => 'cl.nom',
$translator->trans("Société / Nom") => 'x.libelleLivraison',
$translator->trans("Total HT") => 'x.total',
$translator->trans("TVA") => 'x.totalTva',
$translator->trans("Total TTC") => 'x.totalTtc',
//$translator->trans("Payée") => 'sp.id',
$translator->trans("Statut de paiement") => 'sp.libelle',
$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.statutPaiement', 'sp', \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_facture_afficher',
],
],
1 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_facture_afficher',
],
],
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/tva-prix.html.twig',
'params' => [],
],
8 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [],
],
/*
9 => array(
'view' => 'FO/DataTable/facture_est_paye_solde.html.twig'
),
*/
10 => [
'view' => 'FO/DataTable/actions_facture_avoir.html.twig',
'params' => [
'afficher_route_facture' => 'dtc_facture_afficher',
'pdf_route_facture' => 'dtc_facture_pdf',
'edit_route_avoir' => 'dtc_avoir_modifier',
'pdf_route_avoir' => 'dtc_avoir_pdf',
'objet_facture' => Facture::class,
'objet_avoir' => Avoir::class,
'deplier' => true,
],
],
]
)
->setMultiple(
[
'print' => [
'title' => 'Imprimer',
'route' => 'dtc_bon_preparation_pdf_multiple',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([2, 3, 4, 5, 9]);
$where = 'x.typeDocumentCommercial IN (:typeDocumentCommercial) and x.visible = :visible ';
$parameters = ['typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR], 'visible' => '1'];
if (array_key_exists('parametres', $param)) {
if ( ! empty($param["parametres"]["statutPaiement"])) {
//$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$parameters["statutPaiement"] = $param["parametres"]["statutPaiement"];
if ($where != "") {
$where .= " AND ";
}
$where .= "sp.id = :statutPaiement";
}
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('date_debut', $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('date_fin', $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";
}
if (array_key_exists('categorie_client', $param["parametres"]) and $param["parametres"]["categorie_client"] > 0) {
//echo "AZERTYUI";
$datatable->addJoin('cl.clientCategorie', 'cc', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('cc.categorie', 'catC', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$parameters["categorie"] = $param["parametres"]["categorie_client"];
$where .= "and catC = :categorie";
if (array_key_exists('sous_categorie_client', $param["parametres"]) and $param["parametres"]["sous_categorie_client"] > 0) {
$datatable->addJoin('cl.clientCategorie', 'cc2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('cc2.categorie', 'catC2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$parameters["sous_categorie"] = $param["parametres"]["sous_categorie_client"];
$where .= " and catC2 = :sous_categorie";
}
}
}
//echo $where;
if ($where != '') {
//echo $where;
$datatable->setWhere($where, $parameters);
}
return $datatable;
/*
$datatable ->setDatatableId('dta-factures')
->setEntity("DTCGestionComercialeBundle:Commande", "x")
->setFields(
array(
$translator->trans("ID") => 'x.id',
$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 IN (:typeDocumentCommercial)',
array('typeDocumentCommercial' => array(TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR))
)
->setRenderers(
array(
0 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array(
'edit_route' => 'dtc_facture_afficher'
),
),
2 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array(
'edit_route' => 'dtc_facture_afficher'
),
),
3 => array(
'view' => 'FO/DataTable/date.html.twig',
'params' => array(
),
),
4 => array(
'view' => 'FO/DataTable/actions_facture_avoir.html.twig',
'params' => array(
'afficher_route_facture' => 'dtc_facture_afficher',
'pdf_route_facture' => 'dtc_facture_pdf',
'edit_route_avoir' => 'dtc_avoir_modifier',
'pdf_route_avoir' => 'dtc_avoir_pdf',
'objet_facture' => Facture::class,
'objet_avoir' => "DTCGestionComercialeBundle:Avoir"
),
),
)
)
->setMultiple(
array(
'print' => array(
'title' => 'Imprimer',
'route' => 'dtc_facture_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 = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
//$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-factures')
->setEntity(Commande::class, "x");
$repo_statut_document = $em->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 6, "ordre" => [0]]);
$parameters = ['objet' => $objet, 'typeDocumentCommercial' => TypeDocumentCommercial::FACTURE, 'statutCommande' => $liste_statut];
$where = "x.commande = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande) OR x.commande = :objet AND x.typeDocumentCommercial = ".TypeDocumentCommercial::AVOIR." AND x.statutCommande NOT IN (:statutCommande) ";
if ($type == "bp") {
$where = "x.bp = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande) OR x.bp = :objet AND x.typeDocumentCommercial = ".TypeDocumentCommercial::AVOIR." AND x.statutCommande NOT IN (:statutCommande)";
} elseif ($type == "bl") {
//echo "OK";
$datatable->addJoin('x.bls', 'bl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where = "bl.id = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande) OR bl.id = :objet AND x.typeDocumentCommercial = ".TypeDocumentCommercial::AVOIR." AND x.statutCommande NOT IN (:statutCommande)";
$parameters['objet'] = $objet->getId();
//$where = "x.bl = :objet AND x.typeDocumentCommercial = :typeDocumentCommercial AND x.statutCommande NOT IN (:statutCommande)";
}
$datatable
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Total HT") => 'x.total',
$translator->trans("TVA") => 'x.totalTva',
$translator->trans("Total TTC") => 'x.totalTtc',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->setWhere(
$where,
$parameters
)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_facture_afficher',
],
],
0 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
2 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [],
],
3 => [
'view' => 'FO/DataTable/tva-prix.html.twig',
'params' => [],
],
4 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [],
],
5 => [
//'view' => 'FO/DataTable/actions_modal.html.twig',
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
//'edit_route' => 'dtc_facture_modifier',
//'supprimer_route' => 'dtc_facture_supprimer',
'pdf_route' => 'dtc_facture_pdf',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'bonPreparation',
'objet' => Commande::class,
'deplier' => true,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)//->setSearchFields(array(1,2))
;
return $datatable;
}
/**
* @Route("/vente/facture/grid/{id}/{type}", name="dtc_facture_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("/facture/pdf2/{id}", name="dtc_facture_prestashop_pdf")
*/
public function pdfFacturePrestashopAction(Request $request, Commande $objet, EntityManagerInterface $em, Pdf $snappy, CommandeService $service)
{
$param = $request->query->all();
$cle_xml = $this->getParameter('cle_xml');
//$id_client = $this->getParameter('id');
$md5Get = $param["id"];
if ( ! array_key_exists("cle", $param) or $param["cle"] != $cle_xml) {
//echo "erreur";
throw new AccessDeniedException('This user does not have access to this section.');
}
$facture_ok = false;
$md5 = md5($objet->getClient()->getId());
if ($md5 == $md5Get) {
//echo "<div>FACOKOKO </div>";
} else {
throw new AccessDeniedException('This user does not have access to this section.');
}
if ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::DEVIS) {
$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/DEVIS/'.$date.'/DEVIS-'.$objet->getReference().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
$footer = $this->renderView('FO/PDF/footer_facture_pagination_pdf.html.html.twig', ['societe' => $societe, 'commande' => $objet]);
$header = $this->renderView('FO/PDF/header_devis_pdf.html.twig', ['societe' => $societe, 'commande' => $objet]);
//$snappy->setOption('page-size', 'A4');
$snappy->setOption('footer-html', $footer);
$snappy->setOption('header-html', $header);
$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");
$reference = $request->query->get('reference');
$mode = $request->query->get('mode');
$forceQteDispo = $request->query->get('forceQteDispo');
$snappy->generateFromHtml(
$this->renderView(
'GestionComerciale/Devis/template_pdf.html.twig',
[
'commande' => $objet,
'societe' => $societe,
'reference' => $reference,
'mode' => $mode,
'forceQteDispo' => $forceQteDispo,
]
),
$chemin_pdf
);
} elseif ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::COMMANDE) {
$retour = $service->pdf($objet, [], 'true');
$chemin_pdf = $retour['chemin'];
} elseif ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::BL) {
$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-'.$objet->getReference().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
$footer = $this->renderView('FO/PDF/footer_facture_pagination_pdf.html.twig', ['societe' => $societe, 'commande' => $objet]);
$header = $this->renderView('FO/PDF/header_bl_pdf.html.twig', ['societe' => $societe, 'commande' => $objet]);
$snappy->setOption('header-html', $header);
$snappy->setOption('footer-html', $footer);
$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' => $objet,
'societe' => $societe,
]
),
$chemin_pdf
);
} elseif ($objet->getTypeDocumentCommercial() == TypeDocumentCommercial::FACTURE) {
$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/FACTURES/'.$date.'/FAC-'.$objet->getReference().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
$restant = $request->query->get('restant');
$footer = $this->renderView('FO/PDF/footer_facture_pagination_pdf.html.twig', ['societe' => $societe]);
$header = $this->renderView('FO/PDF/header_facture_pdf.html.twig', ['societe' => $societe, 'commande' => $objet]);
$snappy->setOption('header-html', $header);
$snappy->setOption('footer-html', $footer);
$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");
$donnees = [
'commande' => $objet,
'societe' => $societe,
];
if ($objet->getMultiBL() == true) {
$template = 'GestionComerciale/Facture/template_pdf_traite.html.twig';
$repo_commande = $em->getRepository(Commande::class);
$donnees['bls'] = $repo_commande->findByFacture($objet->getId());
$donnees['afficher_restant'] = 0;
} else {
$template = 'GestionComerciale/Facture/template_pdf.html.twig';
$donnees['afficher_restant'] = $restant;
}
$snappy->generateFromHtml(
$this->renderView(
$template,
$donnees
),
$chemin_pdf
);
}
$xml = "<chemin><pdf>".$chemin_pdf."</pdf></chemin>";
$response = new Response($xml);
$response->headers->add(['Content-Type' => 'application/xml']);
return $response;
return $this->render('FO/PDF/conteneur_pdf.html.twig', [
'objet' => $facture,
'chemin_pdf' => '/'.$chemin_pdf,
'visualiser' => $request->query->get('visualiser'),
]);
}
/**
* @Route("/facture/pdf/{id}", name="dtc_facture_pdf")
*/
public function pdfFactureAction(Request $request, Commande $facture, EntityManagerInterface $em, Pdf $snappy, Kernel $kernel)
{
$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/FACTURES/'.$date.'/FAC-'.$facture->getReference().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
//return $this->render('GestionComerciale/Facture/template_pdf.html.twig',array('commande' => $facture,'societe' => $societe));
$restant = $request->query->get('restant');
$footer = $this->renderView('FO/PDF/footer_facture_pagination_pdf.html.twig', array('societe' => $societe,'commande' => $facture));
//$footer = '';
$header = $this->renderView('FO/PDF/header_facture_pdf.html.twig', ['societe' => $societe, 'commande' => $facture, 'dev' => $kernel->isDebug()]);
//$snappy->setOption('page-size', 'A4');
//$snappy->setOption('header-html', $header);
$snappy->setOption('footer-html', $footer);
//$snappy->setOption('header-html',$footer);
$snappy->setOption('margin-left', 0);
$snappy->setOption('margin-right', 0);
$snappy->setOption('header-spacing', "4");
$snappy->setOption('footer-spacing', "5");
//print_r($_SERVER);
if ( ! empty($_SERVER["HTTP_HOST"]) && in_array($_SERVER["HTTP_HOST"], ["cazin.local.tl", "cazin.home.mww"])) {
$snappy->setOption('disable-smart-shrinking', false);
} else {
$snappy->setOption('disable-smart-shrinking', true);
}
//$snappy->setOption('print-media-type', false );
$snappy->setOption('page-height', "297");
$snappy->setOption('page-width', "210");
$snappy->setOption('enable-local-file-access', true);
$donnees = [
'commande' => $facture,
'societe' => $societe,
];
if ($facture->getMultiBL() == true) {
$template = 'GestionComerciale/Facture/template_pdf_traite.html.twig';
$repo_commande = $em->getRepository(Commande::class);
$donnees['bls'] = $repo_commande->findByFacture($facture->getId());
$donnees['afficher_restant'] = 0;
} else {
$template = 'GestionComerciale/Facture/template_pdf.html.twig';
$donnees['afficher_restant'] = $restant;
}
$snappy->generateFromHtml(
$this->renderView(
$template,
$donnees
),
$chemin_pdf
);
return $this->render('FO/PDF/conteneur_pdf.html.twig', [
'objet' => $facture,
'chemin_pdf' => '/'.$chemin_pdf,
'visualiser' => $request->query->get('visualiser'),
]);
//return new RedirectResponse("/".$chemin_pdf);
}
/**
* @Route("/vente/facture/imprimer/multiple", name="dtc_facture_pdf_multiple")
*/
public function imprimerMultipleAction(Request $request, EntityManagerInterface $em)
{
$data = $request->get('dataTables');
$ids = $data['actions'];
$tableauPdf = [];
$pdfRelier = 'PDF/FACTURES/FAC-'.date('d-m-Y').'.pdf';
//$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->pdfFactureAction($bon, false);
$tableauPdf[] = $chemin_pdf = 'PDF/FACTURES/FAC-'.$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'], 200, ['Content-Type' => 'application/json']);
}
private function datatableAvoir($facture, Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setDatatableId('dta-avoirs')
->setEntity(Commande::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Client") => 'clt.nom',
$translator->trans("Total HT") => 'x.total',
$translator->trans("Utilise") => 'x.avoirUtilise',
$translator->trans("Date") => 'x.date',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->setWhere(
'x.facture = :facture AND x.typeDocumentCommercial = :typeDocumentCommercial',
['facture' => $facture, 'typeDocumentCommercial' => TypeDocumentCommercial::AVOIR]
)
->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('c.client', 'clt', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->setRenderers(
[
3 => [
'view' => 'FO/DataTable/prix.html.twig',
],
4 => [
'view' => 'FO/DataTable/booleen.html.twig',
'params' => [],
],
5 => [
'view' => 'FO/DataTable/date.html.twig',
'params' => [],
],
6 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_avoir_modifier_modal',
'width_modal' => '1200',
//'supprimer_route' => 'dtc_facture_supprimer',
'pdf_route' => 'dtc_avoir_pdf',
'id' => $facture->getId(),
'type' => 'avoir',
'entite' => 'avoir',
'objet' => Commande::class,
],
],
/*3 => array(
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => array(
'supprimer_route' => 'dtc_application_supprimer',
'id' => $article->getId(),
'type' => "article",
'entite' => 'application',
'objet' => "DTCVehiculesBundle:Application"
),
)
*/
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([0]);
return $datatable;
}
/**
* @Route("/vente/facture/avoirs/grid/{id}", name="dtc_facture_avoir_liste_grid")
*/
public function gridAvoirsAction(Request $request, Commande $facture, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableAvoir($facture, $datatable, $translator)->execute();
}
/**
* @Route("/vente/facture-traite", name="dtc_facture_traite")
*/
public function traiteAction(Request $request, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$repo_commande = $em->getRepository(Commande::class);
$errors = '';
$dateDebut = new \DateTime();
$interval = new \DateInterval('P7D');
$dateDebut->sub($interval);
$dateFin = new \DateTime('yesterday');
$dateFinPlusUn = new \DateTime();
$dateFacturation = new \DateTime();
if ($request->getMethod() == 'POST') {
$dateDebutRequest = $request->request->get('dateDebut');
$dateFinRequest = $request->request->get('dateFin');
$ids = $request->request->get('ids');
$dateDebut = date_create_from_format('d/m/Y', $dateDebutRequest);
$dateFin = date_create_from_format('d/m/Y', $dateFinRequest);
$dateFinPlusUn = date_create_from_format('d/m/Y', $dateFinRequest);
$interval = new \DateInterval('P1D');
$dateFinPlusUn->add($interval);
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();
}
}
$tableau_class_cellule[] = [];
//$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(0),"visible"=>true,"orderable"=>false,"searchable"=> false);
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [0], "visible" => false, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id colonnefacturer ", "targets" => [1], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id colonnefacturerseparement", "targets" => [2], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id colonneattente ", "targets" => [3], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [4], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [5], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [6], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [7], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [8], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [9], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right", "targets" => [10], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-right", "targets" => [11], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [12], "visible" => true];
/*
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(1),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","id"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(2),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","logo"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(3),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","reference"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(4),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","nom"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(5),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","prenom"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(6),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","ville"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(7),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","codePostal"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(8),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","pays"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(9),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","telephone"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(10),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","telephone2"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(11),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","email"));
$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(12),"visible"=>$serviceColonneTableau->getColonneUtilisateur("DTCClientsBundle:Client","tva"));
*/
$this->datatableTraite($dateDebut->format('Y-m-d'), $dateFinPlusUn->format('Y-m-d'), $em, $datatable, $translator);
return $this->render('GestionComerciale/Traite/lister.html.twig', [
'tableauClassColonne' => $tableau_class_cellule,
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
'dateFinPlusUn' => $dateFinPlusUn,
'errors' => $errors,
'dateFacturation' => $dateFacturation,
]);
}
private function datatableTraite_old($dateDebut, $dateFin, Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(Client::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Nom") => 'x.nom',
$translator->trans("Prénom") => 'x.prenom',
$translator->trans("Téléphone") => 'x.telephone',
$translator->trans("Téléphone 2") => 'x.telephone2',
$translator->trans("Email") => 'x.email',
$translator->trans("TVA") => 'x.numTva',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
//->addJoin('x.modereglement', 'mr', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.ville', 'v', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.codePostal', 'cp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.typeClient', 'tp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin(Commande::class, 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN, 'with', 'c.client = x.id')
//->setWhere('mr.id = :modeReglement '
->setWhere(
'x.facturationMultiBL = :facturationMultiBL '
.'and c.typeDocumentCommercial = :typeDocumentCommercial '
.'and c.visible = :visible '
.'AND c.date <= :dateFin '
.'AND c.date >= :dateDebut '
.'AND c.dejaFacture = false',
//array('modeReglement'=>6,'typeDocumentCommercial' => TypeDocumentCommercial::BL,'visible'=>1, 'dateFin'=>$dateFin, 'dateDebut'=>$dateDebut))
['facturationMultiBL' => true, 'typeDocumentCommercial' => TypeDocumentCommercial::BL, 'visible' => 1, 'dateFin' => $dateFin, 'dateDebut' => $dateDebut]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_client_modifier',
],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_client_modifier',
],
],
8 => [
'view' => 'FO/DataTable/traite_modal.html.twig',
'params' => [
'edit_route' => 'dtc_bon_livraison_liste_by_client',
'dateDebut' => $dateDebut,
'dateFin' => $dateFin,
],
],
/*
12 => array(
'view' => 'FO/DataTable/actions.html.twig',
'params' => array(
'edit_route' => 'dtc_client_modifier',
'dupliquer_route' => 'dtc_client_dupliquer',
//'supprimer_route' => 'dtc_client_supprimer',
'objet' => 'DTCClientsBundle:Client'
),
),
*
*/
]
)
->setMultiple(
[
/*'delete' => array(
'title' => 'Non disponible',
'route' => 'dtc_client_liste_supprimer' ),
*
*/
'facturer' => [
'title' => 'Facturer',
'route' => 'dtc_client_multi_bl_facturer',
],
]
)
->setOrder("x.id", "desc")
->setGroupBy("x.id")
->setSearch(true)
->setSearchFields([1, 2, 3, 6]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
private function datatableTraite($dateDebut, $dateFin, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$repo_statut_document = $em->getRepository(StatutCommande::class);
$liste_statut = $repo_statut_document->findBy(["documentCommercial" => 5, "ordre" => [0]]);
$datatable->setDatatableId('dta-bonlivraisons')
->setEntity(Commande::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("A facturer") => 'x.id',
$translator->trans("A facturer séparément") => 'x.id',
$translator->trans("En attente") => 'x.id',
$translator->trans("Email") => 'cl.emailFactureAuto',
$translator->trans("Date") => 'x.date',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Réf client") => 'cl.reference',
$translator->trans("Client") => 'cl.nom',
$translator->trans("Réf cmde cli") => 'x.referenceClient',
$translator->trans("Total HT") => 'x.total',
$translator->trans("Total TTC") => 'x.totalTtc',
$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.aFacturer = :aFacturer '
//'x.dejaFacture = :dejaFacture '
'x.facture is null '
.'AND cl.facturationMultiBL = :facturationMultiBL '
.'AND x.typeDocumentCommercial = :typeDocumentCommercial '
.'AND x.statutCommande NOT IN (:statutCommande) '
.'AND x.date <= :dateFin '
.'AND x.date >= :dateDebut',
[
'facturationMultiBL' => true,
//'aFacturer'=>true,
//'dejaFacture' =>false,
'typeDocumentCommercial' => TypeDocumentCommercial::BL,
'statutCommande' => $liste_statut,
'dateFin' => $dateFin,
'dateDebut' => $dateDebut,
]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_bon_livraison_modifier',
],
],
1 => [
'view' => 'FO/DataTable/choix-radio.html.twig',
'params' => [
'name' => 'facturation',
'value' => 1,
],
],
2 => [
'view' => 'FO/DataTable/choix-radio.html.twig',
'params' => [
'name' => 'facturation',
'value' => 2,
],
],
3 => [
'view' => 'FO/DataTable/choix-radio.html.twig',
'params' => [
'name' => 'facturation',
'value' => 3,
],
],
4 => [
'view' => 'FO/DataTable/booleen_mail_facture.html.twig',
'params' => [],
],
5 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
6 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_bon_livraison_modifier',
],
],
10 => [
'view' => 'FO/DataTable/total_ht_commande.html.twig',
'params' => [],
],
11 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [],
],
12 => [
'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,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([5, 6, 7, 8])/*
->setMultiple(
array(
'facturer' => array(
'title' => 'Facturer',
'route' => 'dtc_client_multi_bl_facturer'
),
)
)
*
*/
;
return $datatable;
}
/**
* @Route("/vente/facture-traite/grid", name="dtc_traite_liste_grid")
*/
public function gridTraiteAction(Request $request, EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ( ! empty($request->query->get('dateDebut'))) {
//var_dump($request->query->get('dateDebut'));
//var_dump($request->query->get('dateFin'));
//$dateDebut = $request->query->get('dateDebut');
//$dateFin = $request->query->get('dateFin');
$dateDebut = \DateTime::createFromFormat('Y-m-d', $request->query->get('dateDebut'))->setTime(0, 0, 0);
$dateFin = \DateTime::createFromFormat('Y-m-d', $request->query->get('dateFin'))->setTime(23, 59, 59);
} else {
$parametres = $request->query->get('parametres');
$dateDebut = \DateTime::createFromFormat('d/m/Y', $parametres['dateDebut'])->setTime(0, 0, 0);
$dateFin = \DateTime::createFromFormat('d/m/Y', $parametres['dateFin'])->setTime(23, 59, 59);
}
//var_dump($dateDebut);
return $this->datatableTraite($dateDebut, $dateFin, $em, $datatable, $translator)->execute();
}
/**
* @Route("/vente/facture-multi-bl/facturer", name="dtc_client_multi_bl_facturer")
*/
public function facturerMultiBLAction(Request $request, EntityManagerInterface $em, FactureService $factureService, BonLivraisonService $bonService)
{
set_time_limit(300);
$repo_commande = $em->getRepository(Commande::class);
$clientsAFacturer = [];
$blsAFacturerSeparement = [];
$blsEnAttente = [];
$compteur = 0;
$bls = $request->request->get('facturation');
$dateFacturationRequest = $request->request->get('dateFacturation');
$dateFacturation = date_create_from_format('d/m/Y', $dateFacturationRequest);
//\Doctrine\Common\Util\Debug::dump($bls);
if (count($bls) > 0) {
foreach ($bls as $key => $action) {
//Recuperer le bl
$bl = $repo_commande->find($key);
if (is_object($bl)) {
if (is_object($bl->getFacture())) {
$this->addFlash('warning', 'le BL '.$bl->getReference().' est déjà facturé!');
} else {
switch ($action) {
case 1://Facturation multi-bl
$clientId = $bl->getClient()->getId();
$clientsAFacturer[$clientId] = $clientId;
$bl->setAFacturer(true);
$bl->setAttenteFacturation(false);
$em->persist($bl);
break;
case 2://Facturation separee
$bonService->transformerBLenFacture($bl, $dateFacturation);
$compteur++;
break;
case 3://En attente
$bl->setAttenteFacturation(true);
$em->persist($bl);
break;
}
}
}
}
$em->flush();
}
if (count($clientsAFacturer) > 0) {
foreach ($clientsAFacturer as $clientId) {
$compteur++;
$facture = $factureService->creerFactureMultiBL($clientId, $dateFacturation);
}
}
if ($compteur == 1) {
$message = $compteur.' facture ajoutée avec succès !';
} elseif ($compteur > 1) {
$message = $compteur.' factures ajoutées avec succès !';
} else {
$message = 'Aucune facture ajoutée';
$this->addFlash('notice', $message);
return $this->redirectToRoute('dtc_facture_traite');
}
$this->addFlash('notice', $message);
/*
//$clientsIds = $request->request->get('dataTables[actions]');
$data = $request->get('dataTables');
$clientsIds = $data['actions'];
$x = count($clientsIds);
if ($x > 0)
foreach($clientsIds as $clientId){
$factureService->creerFactureMultiBL($clientId);
}
if($x == 1)
$message = $x.' facture ajoutée avec succès !';
else if ($x > 1)
$message = $x.' factures ajoutées avec succès !';
else
$message = '';
$this->addFlash(
'notice',
$message
);
$url = $this->generateUrl('dtc_facture_liste');
return new JsonResponse(array('url'=>$url,'valide'=>'1'), 200, array('Content-Type'=>'application/json'));
*
*/
return $this->redirectToRoute('dtc_facture_liste');
}
/**
* @Route("/facture/charger-tableau/{id}/{type}", name="dtc_facture_charger_tableau")
*/
public function chargerTableauAction(Request $request, Commande $commande, $type = "")
{
$rendu = $this->renderView('GestionComerciale/Facture/charger_tableau.html.twig', ["commande" => $commande, 'type' => $type]);
return new JsonResponse(['rendu' => $rendu]);
}
}