<?php
namespace App\Controller\Articles;
use App\Entity\Articles\Article;
use App\Entity\Articles\ArticleComposant;
use App\Entity\Articles\ConditionAchat;
use App\Entity\Articles\MouvementStock;
use App\Entity\GestionComerciale\ArticleCommande;
use App\Entity\GestionComerciale\Reception;
use App\Event\Article\ArticlePumpUpdateEvent;
use App\Form\Articles\MouvementStockType;
use App\Form\Articles\SupprimerMouvementStockType;
use App\Library\Datatable\Util\Datatable;
use App\Service\Articles\ArticleService;
use App\Service\Articles\MouvementStockService;
use App\Service\GestionComerciale\CommandeFournisseurService;
use App\Service\MarketPlace\ArticleMarketPlaceService;
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\HttpFoundation\StreamedResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class MouvementStockController extends AbstractController
{
/**
* @Route("/article/stock/nouveau/{id}", name="dtc_article_stock_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, ArticleService $articleService,
MouvementStockService $mvtStockService, ArticleMarketPlaceService $articleMarketPlaceService, TranslatorInterface $translator,
ValidatorInterface $validator, EventDispatcherInterface $eventDispatcher, Article $article, $modal = ''
) {
//$modal = $request->query->get('modal');
$user = $this->getUser();
$ms = new MouvementStock();
$ms->setArticle($article);
$ms->setUtilisateur($user);
$ms->setPrixAchat(0);
$dernierMouvement = $em->getRepository(MouvementStock::class)->findOneBy(['article' => $article], ['id' => 'DESC']);
$dernierMouvementDate = $em->getRepository(MouvementStock::class)->getDernierMouvementDateHeure($article->getId(), $ms->getDateMvt());
//$prixUnitaire = $dernierMouvementDate["pump"];
//$stockValorisation = $dernierMouvementDate["stock"];
$dernierMouvement = $em->getRepository(MouvementStock::class)->find($dernierMouvementDate["id"]);
$prixRegulation = 0;
if (is_object($dernierMouvement)) {
//$ms->setPrixAchat($dernierMouvement->getPrixAchat());
$prixRegulation = 0;
if ($dernierMouvement->getCpump() != null && $dernierMouvement->getCpump() != "") {
$prixRegulation = $dernierMouvement->getCpump();
} elseif ($dernierMouvement->getAnnexe() != null && $dernierMouvement->getAnnexe() != "") {
$prixRegulation = $dernierMouvement->getAnnexe();
} else {
$repo_condha = $em->getRepository(ConditionAchat::class);
$condHa = $repo_condha->findOneBy(["article" => $article, "defaut" => 1]);
if (is_object($condHa)) {
$devise = null;
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange;
$prixRegulation = $prix;
} else {
$devise = null;
$condHa = $repo_condha->findOneBy(["article" => $article]);
if (is_object($condHa)) {
$prix = $condHa->getPrixAchatNet();
if ($condHa->getCoefficientConditionnement() != 0) {
$prix = $prix / $condHa->getCoefficientConditionnement();
}
$tauxChange = 1;
$fournisseur = $condHa->getFournisseur();
if (is_object($fournisseur)) {
$devise = $fournisseur->getDevise();
}
if (is_object($devise) && $devise->getTauxChange() != 0) {
$tauxChange = $devise->getTauxChange();
}
$prix = $prix * $tauxChange;
$prixRegulation = $prix;
}
}
}
}
if ($article->getPump() != "") {
$prixRegulation = $article->getPump();
}
$ms->setPrixAchat($prixRegulation);
$ms->setPrixSansRemise($prixRegulation);
$ms->setPrixAchatUnitaireAvecFrais($prixRegulation);
$form = $this->createForm(MouvementStockType::class, $ms);
$errors = "";
$pump2 = $em->getRepository(Article::class)->getPumpR($article->getId());
//exit;
if ($pump2 == 0) {
$pump2 = $articleService->getPrixAchatNetEuro($article->getId());
}
$cpump2 = $em->getRepository(Article::class)->getPumpC($article->getId());
//graphiques
$variationsStock = $em->getRepository(MouvementStock::class)->getVariationsStockParMois($article->getId(), 12);
$variationsPump = $em->getRepository(MouvementStock::class)->getVariationsPumpParMois($article->getId(), 12);
$variationsCpump = $em->getRepository(MouvementStock::class)->getVariationsCpumpParMois($article->getId(), 12);
$repoArticleCommande = $em->getRepository(ArticleCommande::class);
$ralClient = $repoArticleCommande->getRalClient($article);
$total_devise = $repoArticleCommande->getDevisArticle($article);
//reservations de stock
$repo_article_composant = $em->getRepository(ArticleComposant::class);
//$composants = $repo_article_composant->findByArticle($article);
$composants = $repo_article_composant->getComposantsComposeVirtuel($article)->getQuery()->getResult();
$reservations = $repoArticleCommande->getRalClientEtCmdAssociees($article, $composants);
$reservationsFabrications = $repoArticleCommande->getReservationsFabrications($article, $composants);
//\Doctrine\Common\Util\Debug::dump($reservations);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
//echo $user->getEmail();
$prixAchatSaisie = $ms->getPrixAchat();
$ms->setUtilisateur($user);
$mvtStockService->sauvegarder($ms, $article, "regulation");
$ms->setPrixAchat($prixAchatSaisie);
$ms->setPrixSansRemise($prixAchatSaisie);
$em->persist($ms);
$em->flush();
$this->addFlash('notice', $translator->trans('Mouvement de stock ajouté avec succès !'));
$tab_message = [];
$tab_message["message"] = "Suite mouvement de stock manuel (".$ms->getRaisonMouvementStock()->getLibelle()." qte : ".$ms->getQuantite().") sur la fiche article";
$message_maj = $articleMarketPlaceService->majStockAnnonceSuiteRetourBext($article->getId(), $tab_message);
if (is_array($message_maj)) {
if (array_key_exists('notice', $message_maj) && $message_maj["notice"] != "") {
$this->addFlash('notice', $message_maj["notice"]);
}
if (array_key_exists('warning', $message_maj) && $message_maj["warning"] != "") {
$this->addFlash('warning', $message_maj["warning"]);
}
}
if ($ms->getRaisonMouvementStock()->getAction() == "augmenter" && $ms->getQuantite() > 0) {
$pumpHorsFrais = $em->getRepository(Article::class)->getPumpHorsFrais($article->getId());
if ($pumpHorsFrais == 0) {
$pumpHorsFrais = $articleService->getPrixAchatNetEuro($article->getId());
}
$pump2 = $em->getRepository(Article::class)->getPumpR($article->getId());
if ($pump2 == 0) {
$pump2 = $articleService->getPrixAchatNetEuro($article->getId());
}
//$cpump2 = $em->getRepository('DTCArticlesBundle:Article')->getPumpC($article->getId());
$ms->setPumpHorsFrais($pumpHorsFrais);
$ms->setPump($pump2);
$em->persist($ms);
$article->setPump($pump2);
$article->setPumpHorsFrais($pumpHorsFrais);
//$article->setCpump($cpump2);
$em->persist($article);
$em->flush();
}
$articlePumpUpdateEvent = new ArticlePumpUpdateEvent($article, null, $ms );
$eventDispatcher->dispatch($articlePumpUpdateEvent);
//return $this->redirectToRoute('dtc_article_modifier',array('id' => $article->getId(), 'pump2' => $pump2, 'tab' => 'stocks', 'variationsStock' => $variationsStock, 'variationsPump' => $variationsPump));
return $this->redirectToRoute('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'stocks']);
} else {
$errors = $validator->validate($ms);
return $this->redirectToRoute(
'dtc_article_modifier',
[
'id' => $article->getId(),
'forms' => $form,
'tab' => 'stocks',
'pump2' => $pump2,
'variationsStock' => $variationsStock,
'variationsPump' => $variationsPump,
'variationsCpump' => $variationsCpump,
]
);
}
}
return $this->render('Articles/MouvementStock/ajouter.html.twig', [
'form' => $form->createView(),
'errors' => $errors,
'article' => $article,
'pump2' => $pump2,
'variationsStock' => $variationsStock,
'variationsPump' => $variationsPump,
'variationsCpump' => $variationsCpump,
'ralClient' => $ralClient,
'reservations' => $reservations,
'reservationsFabrications' => $reservationsFabrications,
'modal' => $modal,
'total_devise' => $total_devise,
'composants' => $composants,
]);
}
/**
* @Route("/mouvement/stock", name="dtc_mouvement_stock_liste")
*/
public function listerAction(Datatable $datatable, TranslatorInterface $translator)
{
$this->datatable($datatable, $translator);
return $this->render('Articles/MouvementStock/lister.html.twig', []);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(MouvementStock::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Quantité") => 'x.quantite',
$translator->trans("Article") => 'a.libelle',
$translator->trans("Raison") => 'r.libelle',
$translator->trans("Date") => 'x.date',
"_identifier_" => 'x.id',
]
)
->addJoin('x.article', 'a', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.raisonMouvementStock', 'r', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->setRenderers(
[
4 => [
'view' => 'Articles/MouvementStock/table-date.html.twig',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([5]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/mouvement/stock/grid", name="dtc_mouvement_stock_liste_grid")
*/
public function gridAction(Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($datatable, $translator)->execute();
}
/**
* @Route("", name="")
*/
public function listerArticleAction(Datatable $datatable, TranslatorInterface $translator, $article, $achat = false): Response
{
//$achat = $request->query->get('achat');
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [0], "visible" => false, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id", "targets" => [1], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id", "targets" => [2], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id", "targets" => [3], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export text-right colonne_id", "targets" => [4], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export text-right colonne_id", "targets" => [5], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export text-right 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", "targets" => [10], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [11], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export text-center colonne_id", "targets" => [12], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [13], "visible" => true, "orderable" => true];
//$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(14),"visible"=>true,"orderable"=>true);
$this->datatableArticle($article, $achat, $datatable, $translator);
return $this->render('Articles/MouvementStock/listerArticle.html.twig', ['article' => $article, 'achat' => $achat, 'tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableArticle($article, $achat = false, Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(MouvementStock::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.dateMvt',
$translator->trans("Qté E ") => 'x.quantite',
$translator->trans("Qté S") => 'x.quantite',
$translator->trans("Prix") => 'x.prixAchat',
$translator->trans("Pump") => 'x.pump',
$translator->trans("Cump") => 'x.cpump',
$translator->trans("Annexe") => 'x.annexe',
$translator->trans("Raison") => 'r.libelle',
$translator->trans("Client") => 'cl.nom',
$translator->trans("Doc") => 'c.reference',
$translator->trans("Fournisseur") => 'f.libelle',
$translator->trans("BL fourn.") => 'x.bonLivraison',
$translator->trans("Commentaire") => 'x.commentaire',
$translator->trans("Stock") => 'x.stock',
$translator->trans("Recept") => 'rcp.reference',
$translator->trans("Equipier") => 'x.id',
$translator->trans("Empl.") => 'e.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.article', 'a', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commandeVirtuel', 'cv', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('c.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('c.utilisateur', 'u', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commandeFournisseur', 'cf', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.reception', 'rcp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.raisonMouvementStock', 'r', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.emplacement', 'e', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
1 => [
'view' => 'Articles/MouvementStock/table-date.html.twig',
],
2 => [
'view' => 'FO/DataTable/qte.html.twig',
'params' => ['entrant' => 'true'],
],
3 => [
'view' => 'FO/DataTable/qte.html.twig',
'params' => ['sortant' => 'true'],
],
4 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['forceEuro' => 1],
],
5 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['forceEuro' => '1'],
],
6 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['forceEuro' => '1'],
],
9 => [
'view' => 'FO/DataTable/clientMS.html.twig',
],
10 => [
'view' => 'FO/DataTable/commande.html.twig',
'params' => [
'route' => 'dtc_commande_fournisseur_modifier',
'edit_route' => 'dtc_bon_livraison_modifier',
'edit_route1' => 'dtc_facture_afficher',
'edit_route2' => 'dtc_avoir_modifier',
],
],
11 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_fournisseur_modifier',
'typeDocument' => 'fournisseur',
],
],
13 => [
'view' => 'FO/DataTable/virtuel-parent-commentaire.html.twig',
],
15 => [
'view' => 'FO/DataTable/commande.html.twig',
'params' => [
'type' => 'reception',
'route' => 'dtc_commande_fournisseur_modifier',
'edit_route' => 'dtc_bon_livraison_modifier',
'edit_route1' => 'dtc_facture_afficher',
'edit_route2' => 'dtc_avoir_modifier',
],
],
16 => [
'view' => 'FO/DataTable/utilisateur.html.twig',
],
17 => [
'view' => 'FO/DataTable/nom_emplacement.html.twig',
],
]
)
->setOrder("x.dateMvt", "desc")
//->setOrder("x.dateMvt", "desc")
//->setOrder("x.stock", "desc")
;
if ($achat === false) {
$datatable->setWhere( // set your dql where statement
'a.id = :article',
['article' => $article]
);
} else {
$datatable->setWhere(
'a.id = :article and x.raisonMouvementStock = 3',
['article' => $article]
);
}
$datatable->setSearch(true)
->setSearchFields([8, 9, 10, 11, 13, 14, 15, 16]);
return $datatable;
}
/**
* @Route("/mouvement/stock/grid/article/{article}", name="dtc_mouvement_stock_liste_article_grid")
*/
public function gridArticleAction(Request $request, $article, Datatable $datatable, TranslatorInterface $translator)
{
$achat = $request->query->get('achat');
if ($achat == true) {
return $this->datatableArticle($article, $achat, $datatable, $translator)->execute();
} else {
return $this->datatableArticle($article, false, $datatable, $translator)->execute();
}
//\Doctrine\Common\Util\Debug::dump($achat);
}
/**
* @Route("", name="")
*/
public function listerArticleStockAction(Datatable $datatable, TranslatorInterface $translator, $article, $achat = false)
{
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w100", "targets" => [1], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w100", "targets" => [2], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w100 text-right", "targets" => [3], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w200 text-right", "targets" => [4], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w200 text-right", "targets" => [5], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w400 text-right", "targets" => [6], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w400 text-right", "targets" => [7], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w300", "targets" => [8], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w500", "targets" => [9], "visible" => false, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w200", "targets" => [10], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w200", "targets" => [11], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w200", "targets" => [12], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export text-center w200", "targets" => [13], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w200", "targets" => [14], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w200 text-center", "targets" => [15], "visible" => true, "orderable" => true];
$tableau_class_cellule[] = ["searchable" => true, "className" => "visible_export w200", "targets" => [16], "visible" => true, "orderable" => true];
$this->datatableArticleStock($article, $achat, $datatable, $translator);
return $this->render('Articles/MouvementStock/listerArticle2.html.twig', ['article' => $article, 'achat' => $achat, 'tableauClassColonne' => $tableau_class_cellule,]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableArticleStock($article, $achat = false, Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(MouvementStock::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.dateMvt',
$translator->trans("Qté E") => 'x.quantite',
$translator->trans("Qté S") => 'x.quantite',
$translator->trans("Prix") => 'x.prixAchat',
$translator->trans("Stock") => 'x.stock',
$translator->trans("Pump hors frais") => 'x.pumpHorsFrais',
$translator->trans("Prix avec frais") => 'x.prixAchatUnitaireAvecFrais',
$translator->trans("Pump") => 'x.pump',
$translator->trans("Annexe") => 'x.annexe',
$translator->trans("Raison") => 'r.libelle',
$translator->trans("Client") => 'cl.nom',
$translator->trans("Doc") => 'c.reference',
$translator->trans("Fournisseur") => 'f.libelle',
$translator->trans("BL Fourn.") => 'x.bonLivraison',
$translator->trans("Comm") => 'x.commentaire',
//$translator->trans("Stock") => 'x.stock',
$translator->trans("Recept") => 'rcp.reference',
$translator->trans("Equipier") => 'x.id',
$translator->trans("Empl") => 'e.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.article', 'a', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('c.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commandeFournisseur', 'cf', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.reception', 'rcp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('c.utilisateur', 'u', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.raisonMouvementStock', 'r', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.emplacement', 'e', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
1 => [
'view' => 'Articles/MouvementStock/table-date.html.twig',
],
2 => [
'view' => 'FO/DataTable/qte.html.twig',
'params' => ['entrant' => 'true'],
],
3 => [
'view' => 'FO/DataTable/qte.html.twig',
'params' => ['sortant' => 'true'],
],
4 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['forceEuro' => '1'],
],
6 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['forceEuro' => '1'],
],
7 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['forceEuro' => '1'],
],
8 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['forceEuro' => '1'],
],
10 => [
'view' => 'FO/DataTable/supprimer_espace.html.twig',
],
11 => [
'view' => 'FO/DataTable/clientMS.html.twig',
],
12 => [
'view' => 'FO/DataTable/commande.html.twig',
'params' => [
'route' => 'dtc_commande_fournisseur_modifier',
'edit_route' => 'dtc_bon_livraison_modifier',
'edit_route1' => 'dtc_facture_afficher',
'edit_route2' => 'dtc_avoir_modifier',
],
],
13 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_fournisseur_modifier',
'typeDocument' => 'fournisseur',
],
],
15 => [
'view' => 'FO/DataTable/virtuel-parent-commentaire.html.twig',
],
16 => [
'view' => 'FO/DataTable/commande.html.twig',
'params' => [
'type' => 'reception',
'route' => 'dtc_commande_fournisseur_modifier',
'edit_route' => 'dtc_bon_livraison_modifier',
'edit_route1' => 'dtc_facture_afficher',
'edit_route2' => 'dtc_avoir_modifier',
],
],
17 => [
'view' => 'FO/DataTable/utilisateur.html.twig',
],
18 => [
'view' => 'FO/DataTable/nom_emplacement.html.twig',
],
]
)
//->setOrder("x.dateMvt", "desc")
->setOrder("x.dateMvt desc,x.id", "desc");
if ($achat === false) {
$datatable->setWhere( // set your dql where statement
'a.id = :article AND x.dateSuppression IS NULL',
['article' => $article]
);
} else {
$datatable->setWhere(
'a.id = :article and x.raisonMouvementStock = 3 AND x.dateSuppression IS NULL',
['article' => $article]
);
}
$datatable->setSearch(true)
->setSearchFields([6]);
return $datatable;
}
/**
* @Route("/mouvement/stock/grid/article_stock/{article}", name="dtc_mouvement_stock_liste_article_stock_grid")
*/
public function gridArticleStockAction(Request $request, $article, Datatable $datatable, TranslatorInterface $translator)
{
$achat = $request->query->get('achat');
if ($achat == true) {
return $this->datatableArticleStock($article, $achat, $datatable, $translator)->execute();
} else {
return $this->datatableArticleStock($article, false, $datatable, $translator)->execute();
}
}
/**
* @Route("", name="")
*/
public function listerByCommandeAction($commande, Datatable $datatable, TranslatorInterface $translator)
{
//$achat = $request->query->get('achat');
$this->datatableCommande($commande, $datatable, $translator);
return $this->render('Articles/MouvementStock/lister-by-commande.html.twig', ['commande' => $commande]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableCommande($commande, Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(MouvementStock::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Libelle") => 'a.libelle',
$translator->trans("Qté") => 'x.quantite',
$translator->trans("Prix d'achat") => 'x.prixAchat',
$translator->trans("Pump") => 'x.pump',
$translator->trans("BL Fournisseur") => "x.bonLivraison",
$translator->trans("Commentaire") => 'x.commentaire',
$translator->trans("Actions") => "x.id",
"_identifier_" => 'x.id',
]
)
->addJoin('x.article', 'a', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.commandeFournisseur', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.raisonMouvementStock', 'r', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'Articles/MouvementStock/table-date.html.twig',
],
3 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['forceEuro' => '1'],
],
4 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => ['forceEuro' => '1'],
],
7 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
//'edit_route' => 'dtc_commande_fournisseur_modifier',
'supprimer_route' => 'dtc_mouvement_stock_supprimer',
'objet' => MouvementStock::class,
],
],
]
)
->setWhere( // set your dql where statement
'c.id = :commande',
['commande' => $commande]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([5]);
return $datatable;
}
/**
* @Route("/mouvement/stock/grid/commande/{commande}", name="dtc_mouvement_stock_liste_by_commande_grid")
*/
public function gridCommandeAction($commande, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableCommande($commande, $datatable, $translator)->execute();
//\Doctrine\Common\Util\Debug::dump($achat);
}
/**
* @Route("", name="")
*/
public function listerByFabricationAction(Request $request, $fabrication, $compose, Datatable $datatable, TranslatorInterface $translator)
{
//$compose = $request->query->get('compose');
$this->datatableFabrication($fabrication, $compose, $datatable, $translator);
return $this->render('Articles/MouvementStock/lister-by-fabrication.html.twig', ['fabrication' => $fabrication, 'compose' => $compose]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableFabrication($fabrication, $compose = false, Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(MouvementStock::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Libelle") => 'a.libelle',
//$translator->trans("Qté") => 'x.quantite',
$translator->trans("Qté E") => 'x.quantite',
$translator->trans("Qté S") => 'x.quantite',
$translator->trans("Prix d'achat") => 'x.prixAchat',
$translator->trans("Pump") => 'x.pump',
//$translator->trans("Raison") => 'r.libelle',
//$translator->trans("Fournisseur") => 'f.reference',
$translator->trans("Commentaire") => 'x.commentaire',
//$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.article', 'a', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.fabrication', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.raisonMouvementStock', 'r', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
1 => [
'view' => 'Articles/MouvementStock/table-date.html.twig',
],
3 => [
'view' => 'FO/DataTable/qte.html.twig',
'params' => ['entrant' => 'true'],
],
4 => [
'view' => 'FO/DataTable/qte.html.twig',
'params' => ['sortant' => 'true'],
],
5 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [
'forceEuro' => '1',
'afficher_total' => false,
],
],
6 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [
'forceEuro' => '1',
'afficher_total' => false,
],
],
/*
8 => array(
'view' => 'FO/DataTable/actions.html.twig',
'params' => array(
'edit_route_modal' => 'dtc_mouvement_stock_modifier',
'objet' => 'DTCGestionComercialeBundle:Reception',
//'deplierReception' => true,
),
),
*
*/
]
);
if ($compose == 'true') {
$where = "c.id = :fabrication AND r.action LIKE 'augmenter'";
} else {
$where = 'c.id = :fabrication';
}
$datatable->setWhere( // set your dql where statement
$where,
['fabrication' => $fabrication]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([5]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/mouvement/stock/grid/fabrication/{fabrication}", name="dtc_mouvement_stock_liste_by_fabrication_grid")
*/
public function gridFabricationAction(Request $request, $fabrication, Datatable $datatable, TranslatorInterface $translator)
{
$compose = $request->query->get('compose');
return $this->datatableFabrication($fabrication, $compose, $datatable, $translator)->execute();
//\Doctrine\Common\Util\Debug::dump($achat);
}
/**
* @Route("/mouvement/stock/{id}/supprimer", name="dtc_mouvement_stock_supprimer")
*/
public function supprimerAction(Request $request, MouvementStock $ms, EntityManagerInterface $em, MouvementStockService $mvtStockService,
CommandeFournisseurService $commandeFournisseurService, TranslatorInterface $translator, ValidatorInterface $validator
) {
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$commandeFounisseurId = $ms->getCommandeFournisseur()->getId();
//$ms->setCommentaire($ms->getCommentaire()." Annulation réception sur la commande fournisseur ".$ms->getCommandeFournisseur()->getReference()." par ".$user->getPrenom()." ".$user->getNom());
$ms->setCommentaire("Sans commentaire");
$form = $this->createForm(SupprimerMouvementStockType::class, $ms);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$commandeFounisseur = $ms->getCommandeFournisseur();
$mvtStockService->supprimer($ms);
$ms->getArticle()->setRalFournisseur($ms->getArticle()->getRalFournisseur() + $ms->getQuantite());
$commandeFournisseurService->changementStatut($commandeFounisseur);
$em->persist($ms->getArticle());
$em->flush();
//$em->remove($ms);
//$em->flush();
$this->addFlash(
'notice',
$translator->trans('Mouvement de stock supprimé avec succès !')
);
$url = $this->generateUrl('dtc_commande_fournisseur_modifier', ['id' => $commandeFounisseurId]);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($ms);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $ms->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' => $ms->getId(), 'type' => '', 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/receptions", name="dtc_receptions_liste")
*/
public function listerAfacturerAction(Datatable $datatable, TranslatorInterface $translator)
{
$this->datatableAfacturer($datatable, $translator);
return $this->render('Articles/MouvementStock/lister-a-facturer.html.twig', []);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableAfacturer(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(MouvementStock::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Réf fourn.") => 'x.referenceFournisseur',
$translator->trans("Quantité") => 'x.quantite',
'Prix' => 'x.prixAchat',
$translator->trans("Bon de livraison") => 'x.bonLivraison',
$translator->trans("N° commande fourn.") => 'cf.reference',
$translator->trans("Libelle") => 'x.libelle',
$translator->trans("Fournisseur") => 'fo.libelle',
"_identifier_" => 'x.id',
]
)
->addJoin('x.article', 'a', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.raisonMouvementStock', 'r', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->addJoin('x.factureFournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.fournisseur', 'fo', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commandeFournisseur', 'cf', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->setRenderers(
[
0 => [
'view' => 'Articles/MouvementStock/table-date.html.twig',
],
5 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_fournisseur_modifier',
'typeDocument' => 'commandeFournisseur',
],
],
7 => [
'view' => 'FO/DataTable/facturation-fournisseur.html.twig',
],
]
)
->setOrder("x.bonLivraison", "asc")
->setSearch(true)
->setSearchFields([0, 1, 2, 3, 4, 5, 6, 7])
->setWhere('r.id = :raison AND f.id is null', ['raison' => 3])//Achat
->setMultiple(
[
'facturer' => [
'title' => 'Facturer',
'route' => 'dtc_facturer_fournisseur' // path to multiple delete route
],
]
);
return $datatable;
}
/**
* @Route("/receptions/grid", name="dtc_receptions_liste_grid")
*/
public function gridAfacturerAction(Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableAfacturer($datatable, $translator)->execute();
}
/**
* @Route("/mouvement/stock/nombre/inventaire/{id}", name="dtc_ajax_nb_mvts_stock_inventaire")
*/
public function nbMouvementsStockInventaireAction($id, EntityManagerInterface $em)
{
$mouvementsStockInventaire = $em->getRepository(MouvementStock::class)->findBy([
'inventaire' => $id,
]);
$nbMouvementsStockInventaire = count($mouvementsStockInventaire);
$response = new JsonResponse();
$response->setData(['nombre' => $nbMouvementsStockInventaire]);
return $response;
}
/**
* @Route("/mouvement/modifier/{id}", name="dtc_mouvement_stock_modifier")
*/
public function modifierAction(Request $request, Reception $reception, EntityManagerInterface $em, CommandeFournisseurService $commandeFournisseurService, TranslatorInterface $translator)
{
$titre_modal = $translator->trans("Modifier un mouvement de stock");
$user = $this->getUser();
if ($request->isMethod('POST')) {
$valeurs = $request->request->all();
$commandeFournisseurService->modifierReception($reception, $valeurs);
$this->addFlash('notice', $translator->trans('Mouvements de stock modifié avec succès !'));
$url = $this->generateUrl('dtc_commande_fournisseur_modifier', ["id" => $reception->getCommandeFournisseur()->getId(), "tab" => "receptions"]);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
$rendu = $this->renderView('Articles/MouvementStock/modifier_modal.html.twig', ["reception" => $reception]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}