<?php
namespace App\Controller\GestionComerciale;
use App\Entity\Articles\Article;
use App\Entity\GestionComerciale\ArticleCommande;
use App\Entity\GestionComerciale\Devis;
use App\Form\GestionComerciale\SupprimerDevisType;
use App\Library\Datatable\Util\Datatable;
use App\Model\GestionCommerciale\TypeDocumentCommercial;
use Doctrine\ORM\EntityManagerInterface;
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 App\Service\GestionComerciale\CommandeService;
class ArticleCommandeController extends AbstractController
{
/**
* @Route("/article-commande/bloquer/{id}", name="dtc_article_commande_bloquer")
*/
public function bloquerAction(ArticleCommande $articleCommande, EntityManagerInterface $em, CommandeService $commandeService)
{
if ($articleCommande->isBloquer() == 1) {
$articleCommande->setBloquer(0);
$donnees=[];
$donnees["message"]=" : ".$articleCommande->getReference();
$commandeService->creerHistorique($articleCommande->getCommande(), 'debloquer_ligne',$donnees);
} else {
$articleCommande->setBloquer(1);
$donnees=[];
$donnees["message"]=" : ".$articleCommande->getReference();
$commandeService->creerHistorique($articleCommande->getCommande(), 'bloquer_ligne',$donnees);
}
$em->persist($articleCommande);
$em->flush();
$em->refresh($articleCommande);
$headers = [
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST',
];
return new JsonResponse(['data' => '1'], 200, $headers);
}
/**
* @Route("/article-commande/nouveau", name="dtc_article_commande_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em)
{
$articleCommande = new ArticleCommande();
if ($request->isMethod('GET')) {
$devisId = $request->query->get('devis');
$devis = $em->getRepository(Devis::class)->find($devisId);
$position = count($devis->getArticlesCommande()) + 1;
$libelle = $request->query->get('dtc_gestioncomercialebundle_devis')['articlesCommande'][1]['libelle'];
$libelleSecondaire = $request->query->get('dtc_gestioncomercialebundle_devis')['articlesCommande'][1]['libellesSecondaires'];
$description = $request->query->get('dtc_gestioncomercialebundle_devis')['articlesCommande'][1]['description'];
$quantite = $request->query->get('dtc_gestioncomercialebundle_devis')['articlesCommande'][1]['quantite'];
$tva = $request->query->get('dtc_gestioncomercialebundle_devis')['articlesCommande'][1]['tva'];
$prixBase = $request->query->get('dtc_gestioncomercialebundle_devis')['articlesCommande'][1]['prixBase'];
$remise = $request->query->get('dtc_gestioncomercialebundle_devis')['articlesCommande'][1]['remise'];
$articleId = $request->query->get('search-article');
$article = $em->getRepository(Article::class)->find($articleId);
$pump = $request->query->get('dtc_gestioncomercialebundle_devis')['articlesCommande'][1]['pump'];
$articleCommande->setPosition($position);
if (is_object($devis)) {
$articleCommande->setDevis($devis);
}
$articleCommande->setLibelle($libelle);
$articleCommande->setLibelleSecondaire($libelleSecondaire);
$articleCommande->setDescription($description);
$articleCommande->setQuantite($quantite);
$articleCommande->setTva($tva);
$articleCommande->setPrixBase($prixBase);
$articleCommande->setRemise($remise);
if (is_object($article)) {
$articleCommande->setArticle($article);
$articleCommande->setReference($article->getReference());
}
$articleCommande->setPump($pump);
$devis->addArticlesCommande($articleCommande);
$em->persist($articleCommande);
$em->flush();
//unset($devis);
}
$totalHT = 0;
$totalTTC = 0;
//$devis = $em->getRepository('DTCGestionComercialeBundle:Devis')->find($devisId);
if (is_object($devis)) {
$totalHT = $devis->getPrixHT();
$totalTTC = $devis->getPrixTTC();
}
$totalHT = 10;
$response = new JsonResponse();
$response->setData([
'html' => $this->listerAction($devisId, true),
'infos' => $article,
'totalHT' => $totalHT,
'totalTTC' => $totalTTC,
]);
return $response;
}
/**
* @Route("/article-commande/supprimer/multiple", name="dtc_article_commande_liste_supprimer")
*/
public function supprimerMultipleAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator)
{
$data = $request->get('dataTables');
$ids = $data['actions'];
$repo = $em->getRepository(ArticleCommande::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és avec succès !')
);
$url = $this->generateUrl('dtc_article_commande_liste', []);
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/article-commande/supprimer/{id}", name="dtc_article_commande_supprimer")
*/
public function supprimerAction(Request $request, ArticleCommande $articleCommande, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$form = $this->createForm(SupprimerDevisType::class, $articleCommande);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($articleCommande);
$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], 200, ['Content-Type' => 'application/json']);
} else {
$errors = $validator->validate($articleCommande);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $articleCommande->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' => $articleCommande->getId(), 'type' => '', 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/article-commande/{type}/{id}", name="dtc_article_commande_liste")
*/
public function listerAction(Request $request, $type, $id, $ajax = false, Datatable $datatable, TranslatorInterface $translator)
{
$this->datatable($type, $id, $datatable, $translator);
if ($ajax == false) {
return $this->render('GestionComerciale/ArticleCommande/listerDatatable.html.twig', ['type' => $type, 'id' => $id]);
} else {
return $this->renderView('GestionComerciale/ArticleCommande/listerDatatable.html.twig', ['type' => $type, 'id' => $id]);
}
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
public function datatable($type, $id, Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(ArticleCommande::class, "x")
->setFields(
[
$translator->trans("Date de reprise") => 'd.date',
'Réf' => 'a.reference',
'Document' => 'd.reference',
'Libelle' => 'x.libelle',
'Quantité' => 'x.quantite',
'Prix HT' => 'x.prixBase',
'Taux remise' => 'x.remise',
'Taux remise Suppl.' => 'x.remiseSupplementaire',
//'Prix net' => 'x.remise',
'Montant HT' => 'x.totalHt',
//'tdc' => 'tdc.id',
//$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.commande', 'd', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.article', 'a', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.articleCommandeRepris', 'acr', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('acr.commande', 'acrc', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/date.html.twig',
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_article_modifier',
'typeDocument' => 'article',
],
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'auto',
'typeDocument' => 'commande',
],
],
/*2 => array(
'view' => 'FO/DataTable/edit_texte.html.twig',
/*
3 => array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => ArticleCommande::class,
'champ' => 'setQuantite',
),
),*/
5 => [
'view' => 'GestionComerciale/ArticleCommande/prix_ht.html.twig',
],
/*5 => array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => ArticleCommande::class,
'champ' => 'setRemise',
),
),*/
/*6 => array(
//'view' => 'FO/DataTable/prix_class.html.twig',
'view' => 'GestionComerciale/ArticleCommande/pump.html.twig',
'params' => array(
//'class' => 'pump',
),
),*/
/*7 => array(
'view' => 'GestionComerciale/ArticleCommande/prix_remise.html.twig',
),*/
/*8 => array(
'view' => 'GestionComerciale/ArticleCommande/marge.html.twig',
),*/
8 => [
'view' => 'GestionComerciale/ArticleCommande/prix_ht.html.twig',
],
9 => [
'view' => 'GestionComerciale/ArticleCommande/prix_ht.html.twig',
],
10 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_article_commande_modifier',
'supprimer_route' => 'dtc_article_commande_supprimer',
'objet' => ArticleCommande::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => 'Supprimer',
'route' => 'dtc_article_commande_liste_supprimer',
],
]
)
->setWhere( // set your dql where statement
'acrc.id = :id and d.typeDocumentCommercial IN (:typeDocumentCommercial)',
['id' => $id, 'typeDocumentCommercial' => [TypeDocumentCommercial::FACTURE, TypeDocumentCommercial::AVOIR]]
)
->setOrder("x.position", "asc")
->setSearch(true)
->setSearchFields([1]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* @Route("/article-commande-fournisseur/grid/{type}/{id}", name="dtc_article_commande_fournisseur_liste_grid")
*/
public function gridAction(Request $request, $type, $id, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($type, $id, $datatable, $translator)->execute();
}
/**
* @Route("", name="")
*/
public function pumpAction(Request $request, $articleId, EntityManagerInterface $em)
{
$pumpActuel = $em->getRepository(Article::class)->getPumpC($articleId);
return $this->render('FO/DataTable/prix_class.html.twig', ['dt_item' => $pumpActuel, 'class' => 'pumpActuel']);
}
/**
* @Route("", name="")
*/
public function margeAction(Request $request, $prixRemise, $articleId, EntityManagerInterface $em)
{
//$pumpActuel = $em->getRepository('DTCArticlesBundle:Article')->getPumpR($articleId);
//$marge = $prixRemise - $pumpActuel;
$cpumpActuel = $em->getRepository(Article::class)->getPumpC($articleId);
$marge = $prixRemise - $cpumpActuel;
return $this->render('FO/DataTable/prix_class.html.twig', ['dt_item' => $marge, 'class' => 'margeActuelle']);
}
}