<?php
namespace App\Controller\GestionComerciale;
use App\Entity\Clients\Client;
use App\Entity\FO\MessagePredefini;
use App\Entity\FO\Societe;
use App\Entity\Ged\Fichier;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\Devis;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use App\Entity\Notes\Categorie;
use App\Entity\Notes\Note;
use App\Entity\Notes\Statut;
use App\Entity\Utilisateur\Droit;
use App\Form\GestionComerciale\DevisType;
use App\Form\GestionComerciale\PerduDevisType;
use App\Form\GestionComerciale\ReouvrirDevisType;
use App\Form\GestionComerciale\SupprimerDevisType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\GestionComerciale\CommandeService;
use App\Service\Notes\NoteService;
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;
use Twig\Environment;
class DevisController extends AbstractController
{
/**
* @Route("/vente/devis/nouveau", name="dtc_devis_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, CommandeService $commandeService, TranslatorInterface $translator, ValidatorInterface $validator)
{
$commande = new Commande;
$user = $this->getUser();
$commande->setUtilisateur($user);
$form = $this->createForm(DevisType::class, $commande);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$articles = [
'ids' => $request->request->get('ids'),
'remise' => $request->request->get('remise'),
'montantRemise' => $request->request->get('montantRemise'),
'commentaire' => $request->request->get('commentaire'),
'libellesSecondaires' => $request->request->get('libellesSecondaires'),
'libelles' => $request->request->get('libelles'),
'tva' => $request->request->get('tva'),
'idsTva' => $request->request->get('idsTva'),
'remiseSuppl' => $request->request->get('remiseSuppl'),
'ecocontribution' => $request->request->get('ecocontribution'),
'prix' => $request->request->get('prix'),
//'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
'qte' => $request->request->get('qte'),
'force' => $request->request->get('force'),
'transporteurs' => $request->request->get('transporteurs'),
'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
'tabPrixAchatNetEuros' => $request->request->get('tabPrixAchatNetEuros'),
];
$valeurs = ["articles" => $articles, 'typeDocument' => 'devis', 'operation' => 'devis'];
$em->persist($commande);
$em->flush();
$this->addFlash('notice', $translator->trans('Devis ajouté avec succès !'));
$commandeService->sauvegarder($commande, $valeurs);
$commandeService->changeDateLivraisonTheoriqueCommandeProcess($commande);
//\Doctrine\Common\Util\Debug::dump($idsArticle);
return $this->redirectToRoute('dtc_devis_liste');
} else {
$errors = $validator->validate($commande);
}
}
return $this->render('GestionComerciale/Devis/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/vente/devis/modifier/{id}", name="dtc_devis_modifier")
*/
public function modifierAction(Request $request, Commande $commande, EntityManagerInterface $em, CommandeService $commandeService,
NoteService $noteService, TranslatorInterface $translator, ValidatorInterface $validator
) {
//$etatCommandeService = $this->container->get('dtc.etatcommande');
//$etatCommande = $etatCommandeService->calculerEtatCommande($commande, false, true);
//echo $etatCommande->getLibelle();
$user = $this->getUser();
//$commande->setUtilisateur($user);
$forceQteDispo = $request->query->get('forceQteDispo');
$form = $this->createForm(DevisType::class, $commande);
$articles = [
'ids' => $request->request->get('ids'),
'tva' => $request->request->get('tva'),
'qte' => $request->request->get('qte'),
'remise' => $request->request->get('remise'),
'force' => $request->request->get('force'),
];
$valeurs = ["articles" => $articles, 'typeDocument' => 'devis', 'operation' => 'devis'];
$repoDossier = $em->getRepository(Fichier::class);
$parent = $repoDossier->find(4);
if (is_object($commande->getCommande())) {
$fichier = $repoDossier->findOneBy(["commande" => $commande->getCommande(), "type" => "dossier", "parent" => $parent]);
} else {
$fichier = $repoDossier->findOneBy(["commande" => $commande, "type" => "dossier", "parent" => $parent]);
}
if ( ! is_object($fichier)) {
$fichier = new Fichier();
$fichier->setUtilisateur($user);
$fichier->setType("dossier");
$fichier->setRenomme(true);
$fichier->setSupprimable(false);
$fichier->setModifiable(false);
$fichier->setCommande($commande);
$fichier->setParent($parent);
$libelle_ged = trim($commande->getReference());
$fichier->setLIbelle($libelle_ged);
$em->persist($fichier);
$enfant2 = new Fichier();
$enfant2->setUtilisateur($user);
$enfant2->setType("dossier");
$enfant2->setRenomme(true);
$enfant2->setSupprimable(false);
$enfant2->setModifiable(false);
$enfant2->setCommande($commande);
$enfant2->setParent($fichier);
$enfant2->setLibelle("BAT");
$em->persist($enfant2);
$em->flush();
}
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Commande::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_devis_modifier', ["id" => $commande->getId()]);
}
if ($form->isValid()) {
$em->persist($commande);
$em->flush();
$articles = [
'ids' => $request->request->get('ids'),
'remise' => $request->request->get('remise'),
'remiseCalcule' => $request->request->get('remiseCalcule'),
'montantRemise' => $request->request->get('montantRemise'),
'commentaire' => $request->request->get('commentaire'),
'commentairePrive' => $request->request->get('commentairePrive'),
'libellesSecondaires' => $request->request->get('libellesSecondaires'),
'libelles' => $request->request->get('libelles'),
'tva' => $request->request->get('tva'),
'idsTva' => $request->request->get('idsTva'),
'remiseSuppl' => $request->request->get('remiseSuppl'),
'ecocontribution' => $request->request->get('ecocontribution'),
'prix' => $request->request->get('prix'),
//'fraisPortLigne'=>$request->request->get('fraisPortLigne'),
'qte' => $request->request->get('qte'),
'force' => $request->request->get('force'),
'commentaireSuppl' => $request->request->get('commentaireSuppl'),
'emplacement' => $request->request->get('emplacement'),
'nbEmplacement' => $request->request->get('nbEmplacement'),
'articlesCommandeRepris' => $request->request->get('articlesCommandeRepris'),
'qteDispo' => $request->request->get('qteDispo'),
'transporteurs' => $request->request->get('transporteurs'),
'articlesCommandeAssocies' => $request->request->get('articlesCommandeAssocies'),
'articlesCommandeIds' => $request->request->get('articlesCommandeIds'),
'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'),
'kilometrage' => $request->request->get('kilometrage'),
'dateCT' => $request->request->get('dateCT'),
];
if ($request->request->get('toggle-devis-devis-or') != '') {
$typeDocument = $request->request->get('toggle-devis-devis-or');
} else {
$typeDocument = 'devis';
}
$valeurs = ["articles" => $articles, 'typeDocument' => $typeDocument, 'operation' => 'devis'];
//print_r($valeurs);
//exit;
if ($request->request->get('annuler') == 'annuler') {
$commande->setVisible(false);
$this->addFlash('notice', $translator->trans('Devis supprimé avec succès!'));
$em->persist($commande);
$em->flush();
$commandeService->creerHistorique($commande, 6);
//return $this->redirectToRoute('dtc_devis_modifier',array('id'=>$commande->getId()));
return $this->redirectToRoute('dtc_devis_liste');
}
if ($request->request->get('facturer') != '') {
//on vérifie que le devis n'a pas deja une commande
if (is_object($commande->getCommande())) {
$commandeUrl = $this->generateUrl('dtc_commande_modifier', ['id' => $commande->getCommande()->getId()]);
$trans = $translator->trans('Vous devez facturer depuis la commande existante ! <a href="'.$commandeUrl.'">Voir ici</a>');
//$this->addFlash('warning',$translator->trans('Vous devez facturer depuis la commande existante !'));
$this->addFlash('warning', $trans);
return $this->redirectToRoute('dtc_commande_modifier', ["id" => $commande->getId(), 'forceQteDispo' => true]);
} else {
$valeurs["facturer"] = "1";
$idCommande = $commandeService->transformerCommandeEnDevis($commande, $valeurs);
$this->addFlash('notice', $translator->trans('Facture créée avec succès!'));
return $this->redirectToRoute('dtc_facture_afficher', ["id" => $idCommande]);
}
} elseif ($request->request->get('commander') != '') {
//on vérifie que le devis n'a pas deja une commande
if (is_object($commande->getCommande())) {
$commandeUrl = $this->generateUrl('dtc_commande_modifier', ['id' => $commande->getCommande()->getId()]);
$trans = $translator->trans('La commande existe dejà pour ce devis ! <a href="'.$commandeUrl.'">Voir ici</a>');
//$this->addFlash('warning',$translator->trans('La Commande existe dejà pour ce devis !'));
$this->addFlash('warning', $trans);
return $this->redirectToRoute('dtc_commande_modifier', ["id" => $commande->getId(), 'forceQteDispo' => true]);
} else {
$idCommande = $commandeService->transformerCommandeEnDevis($commande, $valeurs);
$this->addFlash('notice', $translator->trans('Commande créée avec succès!'));
//dump($valeurs);
return $this->redirectToRoute('dtc_commande_modifier', ["id" => $idCommande, 'forceQteDispo' => true]);
}
} else {
$commandeService->sauvegarder($commande, $valeurs);
//$commandeService->changeDateLivraisonTheoriqueCommandeProcess($commande);
$commandeService->changeDateExpeditionTheoriqueCommandeProcess($commande);
$categ_relance = $em->getRepository(Categorie::class)->find(9);
$statutAfaire = $em->getRepository(Statut::class)->find(1);
$notes = $em->getRepository(Note::class)->findBy(
[
'commande' => $commande,
'statut' => $statutAfaire,
'categorie' => $categ_relance,
]
);
$datatables = [];
if (count($commande->getArticleCommande())) {
$datatables[] = 'dta-article-devis';
}
if (is_object($commande->getClient()) && count($notes) == 0) {
$noteService->creerRelance($commande);
$datatables[] = 'dta-notes-objet';
}
if ($request->isXmlHttpRequest()) {
//dump($request->request->get('declencheur'));
if ( ! in_array($request->request->get('declencheur'), ['supprimer-row-article'])) {
$commandeService->creerHistorique($commande, $request->request->get('declencheur'));
}
return new JsonResponse(['data' => 1, 'date' => (new \Datetime)->format('d/m/Y à H:i'), 'datatables' => $datatables]);
}
$this->addFlash('notice', $translator->trans('Devis sauvegardé avec succès!'));
$commandeService->creerHistorique($commande, 2);
if ($request->request->get('toggle-devis-devis-or') != '') {
return $this->redirectToRoute('dtc_ordre_reparation_modifier', ["id" => $commande->getId(), 'operation' => 'devis', 'forceQteDispo' => true]);
} else {
return $this->redirectToRoute('dtc_devis_modifier', ["id" => $commande->getId(), 'forceQteDispo' => true]);
}
}
} else {
$errors = $validator->validate($commande);
//\Doctrine\Common\Util\Debug::dump($errors);
}
}
return $this->render(
'GestionComerciale/Devis/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'commande' => $commande, 'forceQteDispo' => $forceQteDispo]
);
}
/**
* @Route("/vente/devis/supprimer/multiple", name="dtc_devis_liste_supprimer")
*/
public function supprimerMultipleAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$url = $this->generateUrl('dtc_devis_liste', []);
return new JsonResponse(['url' => $url, 'valide' => '1']);
$data = $request->get('dataTables');
$ids = $data['actions'];
$repo = $em->getRepository(Commande::class);
for ($i = 0; $i < count($ids); $i++) {
$v = $repo->find($ids[$i]);
if (is_object($v)) {
$em->remove($v);
}
}
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Devis supprimé avec succès !')
);
$url = $this->generateUrl('dtc_devis_liste', []);
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/vente/devis/supprimer/{id}", name="dtc_devis_supprimer")
*/
public function supprimerAction(Request $request, Commande $commande, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$form = $this->createForm(SupprimerDevisType::class, $commande);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($commande);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Devis supprimé avec succès !')
);
$url = $this->generateUrl('dtc_devis_liste', []);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($commande);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $commande->getId(), 'type' => '']);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $commande->getId(), 'type' => '', 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/vente/devis", name="dtc_devis_liste")
*/
public function listerAction(Request $request, ColonneTableauService $serviceColonneTableau, Datatable $datatable, TranslatorInterface $translator,
EntityManagerInterface $em
) {
$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(Devis::class, "id"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "date"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "reference"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "refclient"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [5],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "client"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [6],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "libelleLivraison"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id w200 text-right",
"targets" => [7],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "totalHT"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [8],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "commercial"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [9],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "assistanteCommerciale"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [10],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "commentaire"),
];
//$tableau_class_cellule[]=array("className"=>"visible_export colonne_id text-center","targets"=>array(10),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Devis::class,"dateBon"));
//$tableau_class_cellule[]=array("className"=>"visible_export colonne_id text-center","targets"=>array(11),"visible"=>true);
//$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(12),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Devis::class,"refCli"));
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [11],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "dateRelance"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [12],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "dateReceptionFournisseur"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center ",
"targets" => [13],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "dateLivraisonSouhaitee"),
];
//$tableau_class_cellule[]=array("className"=>"visible_export colonne_id text-center","targets"=>array(13),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Devis::class,"dateLivraisonTheorique"));
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id text-center",
"targets" => [14],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Devis::class, "dateExpeditionTheorique"),
];
//$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(14),"visible"=>$serviceColonneTableau->getColonneUtilisateur(Devis::class,"colis"));
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id w60", "targets" => [15], "visible" => true];
$this->datatable($request, $datatable, $translator);
$param = $request->query->all();
$param["en_cours"] = "on";
return $this->render('GestionComerciale/Devis/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->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") => 'c.reference',
$translator->trans("Client") => 'c.nom',
$translator->trans("Société / Nom") => 'x.libelleLivraison',
//$translator->trans("Statut") => 's.libelle',
$translator->trans("Total HT") => 'x.total',
$translator->trans("Commercial") => 'co.reference',
$translator->trans("Assistante commercial") => 'ac.reference',
$translator->trans("Comm") => 'x.commentaire',
//$translator->trans("Date Prep") => 'x.dateBon',
$translator->trans("Date de relance") => 'x.dateRelance',
$translator->trans("Date de réception fourn.") => 'x.dateReceptionFournisseur',
$translator->trans("Date liv. souhaitée") => 'x.dateLivraisonSouhaitee',
//$translator->trans("Date liv. théorique") => 'x.dateLivraisonTheorique',
$translator->trans("Date exp. théorique") => 'x.dateExpeditionTheorique',
//$translator->trans("Réf Cmd Cli") => 'x.referenceClient',
//$translator->trans("Nb colis") => 'x.nbColis',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.etatCommande', 'ec', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.client', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.typeDocumentCommercial', 'td', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.assistanteCommercial', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commercial', 'co', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_devis_modifier',
],
],
1 => [
'view' => 'FO/DataTable/heure.html.twig',
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_devis_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' => [],
],
/*3 => array(
'view' => 'FO/DataTable/etat_commande.html.twig',
'params' => array(
),
),
*/
6 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['avecPort' => 1],
],
7 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_utilisateur_modifier',
'typeDocument' => 'equipier',
],
],
8 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_utilisateur_modifier',
'typeDocument' => 'equipier',
],
],
/*
7 => array(
'view' => 'FO/DataTable/prenom_nom.html.twig'
),
*/
10 => [
'view' => 'FO/DataTable/heure.html.twig',
],
11 => [
'view' => 'FO/DataTable/date.html.twig',
],
12 => [
'view' => 'FO/DataTable/date.html.twig',
],
13 => [
'view' => 'FO/DataTable/date.html.twig',
],
14 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_devis_modifier',
//'supprimer_route' => 'dtc_devis_supprimer',
'pdf_route' => 'dtc_devis_pdf',
'objet' => Commande::class,
'deplier' => true,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => 'Non disponible',
'route' => 'dtc_devis_liste_supprimer',
],
]
)
//->setOrder("ec.ordre", "desc")
->setOrder("x.date", "desc")
->setSearch(true)
->setSearchFields([2, 3, 4, 5, 6, 9]);
//$datatable->setSearchFields(array(0,2));
//$where = "x.typeDocumentCommercial = :typeDocumentCommercial AND x.dateSuppression IS NULL AND x.commande IS NULL and x.visible= :visible";
$where = "x.typeDocumentCommercial = :typeDocumentCommercial AND x.dateSuppression IS NULL and x.visible= :visible";
$parameters = ['typeDocumentCommercial' => TypeDocumentCommercial::DEVIS, 'visible' => 1];
$where_statut = "";
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 .= "c.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";
}
if (array_key_exists('en_cours', $param["parametres"]) and $param["parametres"]["en_cours"] != "") {
//$parameters["perdu"]="1";
if ($where_statut != "") {
$where_statut .= " OR ";
}
$where_statut .= "x.commande IS NULL";
if (array_key_exists('perdu', $param["parametres"]) and $param["parametres"]["perdu"] != "") {
$parameters["perdu"] = "1";
if ($where_statut != "") {
$where_statut .= " OR ";
}
$where_statut .= "x.perdu = :perdu";
} else {
$parameters["perdu"] = "0";
if ($where_statut != "") {
$where_statut .= " AND ";
}
$where_statut .= "(x.perdu = :perdu OR x.perdu IS NULL)";
}
if (array_key_exists('gagne', $param["parametres"]) and $param["parametres"]["gagne"] != "") {
if ($where_statut != "") {
$where_statut .= " OR ";
}
$where_statut .= "x.commande IS NOT NULL";
} else {
if ($where_statut != "") {
$where_statut .= " AND ";
}
$where_statut .= "x.commande IS NULL";
}
} elseif (array_key_exists('perdu', $param["parametres"]) and $param["parametres"]["perdu"] != "") {
$parameters["perdu"] = "1";
if ($where_statut != "") {
$where_statut .= " OR ";
}
$where_statut .= "x.perdu = :perdu";
if (array_key_exists('gagne', $param["parametres"]) and $param["parametres"]["gagne"] != "") {
if ($where_statut != "") {
$where_statut .= " OR ";
}
$where_statut .= "x.commande IS NOT NULL";
} else {
if ($where_statut != "") {
$where_statut .= " AND ";
}
$where_statut .= "x.commande IS NULL";
}
} elseif (array_key_exists('gagne', $param["parametres"]) and $param["parametres"]["gagne"] != "") {
if ($where_statut != "") {
$where_statut .= " OR ";
}
$where_statut .= "x.commande IS NOT NULL";
$parameters["perdu"] = "0";
if ($where_statut != "") {
$where_statut .= " AND ";
}
$where_statut .= "(x.perdu = :perdu OR x.perdu IS NULL)";
}
if ($where_statut != "") {
if ($where != "") {
$where .= " AND ";
}
$where .= '('.$where_statut.')';
}
}
//echo $where;
//exit;
if ($where != '') {
$datatable->setWhere($where, $parameters);
}
return $datatable;
}
/**
* @Route("/devis/recuperer/{id}", name="dtc_devis_recuperer")
*/
public function recupererDevisAction(Request $request, Client $client, Datatable $datatable, TranslatorInterface $translator)
{
$titre_modal = "Liste des devis de ".$client->getPrenom()." ".$client->getNom();
$this->datatableDevis($client, $datatable, $translator);
$rendu = $this->renderView('GestionComerciale/Devis/recuperer.html.twig', ['client' => $client]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '1', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/devis/recuperer/grid/{id}", name="dtc_client_devis_liste_grid")
*/
public function gridDevisAction(Request $request, Client $client, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableDevis($client, $datatable, $translator)->execute();
}
/**
* @Route("/vente/devis/grid", name="dtc_devis_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator, EntityManagerInterface $em,
ValidatorInterface $validator
) {
return $this->datatable($request, $datatable, $translator)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableDevis($client = "", Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setDatatableId('dta-devis')
->setEntity(Commande::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Réference") => 'x.reference',
$translator->trans("Statut") => 's.libelle',
$translator->trans("Type") => 't.libelle',
$translator->trans("Total HT") => 'x.total',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->setWhere(
'x.client = :client',
['client' => $client]
)
->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.typeDocumentCommercial', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/lien.html.twig',
'params' => [
'edit_route' => 'dtc_commande_modifier',
'objet' => Commande::class,
],
],
4 => [
'view' => 'FO/DataTable/prix.html.twig',
],
5 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_commande_modifier',
'objet' => Commande::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2, 3, 4]);
return $datatable;
}
/**
* @Route("/devis/pdf/{id}", name="dtc_devis_pdf")
*/
public function pdfDevisAction(Request $request, Commande $commande, EntityManagerInterface $entityManager, Environment $environment, Pdf $pdf)
{
$societe = $entityManager->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-'.$commande->getReference().'.pdf';
if (file_exists($chemin_pdf)) {
unlink($chemin_pdf);
}
//return $this->render('GestionComerciale/Facture/template_pdf.html.twig',array('commande' => $commande,'societe' => $societe));
$footer = $this->renderView('FO/PDF/footer_pagination_pdf.html.twig', ['societe' => $societe]);
$footer = $environment->render('FO/PDF/footer_devis_pagination_pdf.html.twig', ['societe' => $societe, 'commande' => $commande]);
$header = $this->renderView('FO/PDF/header_devis_pdf.html.twig', ['societe' => $societe, 'commande' => $commande]);
//$snappy->setOption('page-size', 'A4');
$pdf->setOption('footer-html', $footer);
//$pdf->setOption('header-html', $header);
$pdf->setOption('header-spacing', "4");
$pdf->setOption('footer-spacing', "3");
$pdf->setOption('disable-smart-shrinking', true);
//$snappy->setOption('print-media-type', false );
$pdf->setOption('margin-left', 0);
$pdf->setOption('margin-right', 0);
$pdf->setOption('page-height', "297");
$pdf->setOption('page-width', "210");
$reference = $request->query->get('reference');
$mode = $request->query->get('mode');
$forceQteDispo = $request->query->get('forceQteDispo');
$pdf->generateFromHtml(
$this->renderView(
'GestionComerciale/Devis/template_pdf.html.twig',
[
'commande' => $commande,
'societe' => $societe,
'reference' => $reference,
'mode' => $mode,
'forceQteDispo' => $forceQteDispo,
]
),
$chemin_pdf
);
return $this->render('FO/PDF/conteneur_pdf.html.twig', [
'objet' => $commande,
'chemin_pdf' => '/'.$chemin_pdf,
'visualiser' => $request->query->get('visualiser'),
]);
//return new RedirectResponse("/".$chemin_pdf);
}
/**
* @Route("", name="")
*/
public function toggleDevisDevisOrAction(Request $request, Commande $commande, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
if ($commande->getTypeDocumentCommercial() == TypeDocumentCommercial::DEVIS) {
$idTypeDocumentCommercial = 10; //Devis -> Devis Or
$typeDocumentCommercial = TypeDocumentCommercial::DEVISOR;
$message = 'Devis transformé avec succès en devis OR!';
} else {
$idTypeDocumentCommercial = 1; //Devis Or -> Devis
$typeDocumentCommercial = TypeDocumentCommercial::DEVIS;
$message = 'Devis OR transformé avec succès en devis!';
}
//$typeDocumentCommercial = $em->getRepository(TypeDocumentCommercial::class)->find($idTypeDocumentCommercial);//devis
$commande->setTypeDocumentCommercial($typeDocumentCommercial);
$em->persist($commande);
$em->flush();
return $message;
//return $this->redirectToRoute('dtc_devis_modifier',array("id"=>$commande->getId()));
}
/**
* @Route("/vente/devis/perdu/{id}", name="dtc_devis_perdu")
*/
public function perduAction(Request $request, Commande $commande, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Marquer le devis comme perdu");
$user = $this->getUser();
$form = $this->createForm(PerduDevisType::class, $commande);
$errors = "";
$form->handleRequest($request);
$repo_message_predefini = $em->getRepository(MessagePredefini::class);
$message_predefini = $repo_message_predefini->findAll();
if ($form->isSubmitted()) {
if ($form->isValid()) {
$commande->setPerdu(true);
$em->persist($commande);
$em->flush();
$this->addFlash('notice', $translator->trans('Devis marqué comme perdu avec succès !'));
$url = $this->generateUrl('dtc_devis_liste', []);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($commande);
$rendu = $this->renderView(
'GestionComerciale/Devis/perdu.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $commande->getId(), 'message_predefini' => $message_predefini]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'GestionComerciale/Devis/perdu.html.twig',
['form' => $form->createView(), 'id' => $commande->getId(), 'message_predefini' => $message_predefini, 'errors' => $errors]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/vente/devis/reouverture/{id}", name="dtc_devis_reouverture")
*/
public function reouvertureAction(Request $request, Commande $commande, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Ré-ouvrir le devis");
$user = $this->getUser();
$form = $this->createForm(ReouvrirDevisType::class, $commande);
$errors = "";
$form->handleRequest($request);
$repo_message_predefini = $em->getRepository(MessagePredefini::class);
$message_predefini = $repo_message_predefini->findAll();
if ($form->isSubmitted()) {
if ($form->isValid()) {
$commande->setPerdu(false);
$commande->setCommentaireAnnulation(null);
$em->persist($commande);
$em->flush();
$this->addFlash('notice', $translator->trans('Devis ré-ouvert avec succès !'));
$url = $this->generateUrl('dtc_devis_liste', []);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($commande);
$rendu = $this->renderView(
'GestionComerciale/Devis/reouvrir.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $commande->getId(), 'message_predefini' => $message_predefini]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'GestionComerciale/Devis/reouvrir.html.twig',
['form' => $form->createView(), 'id' => $commande->getId(), 'message_predefini' => $message_predefini, 'errors' => $errors]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/vente/devis/purger", name="dtc_devis_purger")
*/
public function purgerAction(Request $request, CommandeService $commandeService)
{
$commandeService->purgerDevis();
return new JsonResponse(['valide' => '1', 'url' => '']);
}
}