<?php
namespace App\Controller\Rangements;
use App\Entity\Articles\Article;
use App\Entity\Rangements\Emplacement;
use App\Form\Rangements\EmplacementType;
use App\Form\Rangements\SupprimerEmplacementType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class RangementController extends AbstractController
{
/**
* @Route("/rangement", name="dtc_rangement_liste")
*/
public function listerAction(Request $request)
{
return $this->render('Rangements/Rangement/lister.html.twig', []);
}
/**
* @Route("/rangement/modifier/{objet}/{id}/", name="dtc_rangement_modifier")
*/
public function modifierAction(Request $request, Emplacement $objet, Article $article, $type = "", EntityManagerInterface $em,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$emplacement = $objet;
$titre_modal = $translator->trans("Modifier l'emplacement");
$get = $request->query->all();
$user = $this->getUser();
$emplacement->setUtilisateur($user);
$form = $this->createForm(EmplacementType::class, $emplacement);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Article::class);
/*
if(!$droit) {
$rendu = $this->renderView('Articles/Emplacement/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
}
*/
if ($form->isValid()) {
$url = $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'stocks']);
$em->persist($emplacement);
$em->flush();
//$url = "";
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]);
} else {
$this->addFlash('notice', $translator->trans('Emplacement modifié avec succès !'));
$url = $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'stocks']);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($emplacement);
$rendu = $this->renderView(
'Rangements/Rangement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'article' => $article, 'type' => $type, 'objet' => $objet]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'Rangements/Rangement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'article' => $article, 'type' => $type, 'objet' => $objet]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/rangement/nouveau/{id}", name="dtc_rangement_ajouter")
*/
public function ajouterAction(Request $request, Article $article, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Nouvel Emplacement");
$emplacement = new Emplacement();
$user = $this->getUser();
$emplacement->setUtilisateur($user);
$get = $request->query->all();
$form = $this->createForm(EmplacementType::class, $emplacement);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if (count($article->getEmplacements()) == 0) {
$emplacement->setStock($article->getStock());
//echo $emplacement;
//exit;
//$emplacement->setStockReserve($article->getStockReserve());
}
$emplacement->setArticle($article);
$em->persist($emplacement);
//$em->persist($article);
$em->flush();
$url = "";
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(
['emplacements' => $article->getEmplacements(), 'rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]
);
} else {
$this->addFlash('notice', $translator->trans('Emplacement ajouté avec succès !'));
$url = $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'stocks']);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($emplacement);
$rendu = $this->renderView('Rangements/Rangement/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'article' => $article]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('Rangements/Rangement/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'article' => $article]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Rangements/Rangement/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("/rangement------", name="dtc_rangement_liste__")
*/
public function listerArticleAction(Request $request, Article $article, Datatable $datatable, TranslatorInterface $translator)
{
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export colonne_id", "targets" => [1], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export text-center colonne_id", "targets" => [2], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export text-center colonne_id", "targets" => [3], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["searchable" => false, "className" => "visible_export text-center colonne_id", "targets" => [4], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = ["searchable" => false, "className" => " colonne_id", "targets" => [5], "visible" => true, "orderable" => false];
//$tableau_class_cellule[]=array("searchable"=> true,"className"=>"w100","targets"=>array(2),"visible"=>true,"orderable"=>true);
$this->datatableArticle( $datatable, $translator,$article);
//return $this->render('Rangements/MouvementStock/listerArticle2.html.twig', array('article' => $article,'tableauClassColonne'=>$tableau_class_cellule));
return $this->render('Rangements/Rangement/lister-article.html.twig', ['article' => $article, 'tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableArticle(Datatable $datatable, TranslatorInterface $translator, Article $article)
{
$datatable
->setDatatableId('dta-emplacements')
->setEntity(Emplacement::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
/*
$translator->trans("Niv 1") => 'n1.libelle',
$translator->trans("Niv 2") => 'n2.libelle',
$translator->trans("Niv 3") => 'n3.libelle',
$translator->trans("Niv 4") => 'n4.libelle',
*/
$translator->trans("Emplacement") => 'x.libelle',
$translator->trans("Stock") => 'x.stock',
$translator->trans("Stock R") => 'x.stockReserve',
$translator->trans("Ordre") => 'x.ordre',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
/*
->addJoin('x.niveauUn', 'n1', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.niveauDeux', 'n2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.niveauTrois', 'n3', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.niveauQuatre', 'n4', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
*/
->setRenderers(
[
5 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_rangement_modifier',
'supprimer_route' => 'dtc_rangement_supprime',
'id' => $article->getId(),
'type' => 'article',
'entite' => 'article',
'table' => 'dta-emplacements',
'objet' => Emplacement::class,
],
],
]
)
->setOrder("x.id", "desc")
->setWhere(
'x.article = :objet AND x.visibilite = 1 ',
['objet' => $article]
)
->setSearch(false)
->setGlobalSearch(0);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/rangement/grid/{article}", name="dtc_rangement_article_grid")
*/
public function gridArticleAction(Request $request, Article $article, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableArticle( $datatable, $translator,$article)->execute();
}
/**
* @Route("/rangement/statut/{id}", name="dtc_rangement_statut")
*/
public function changeStatutAction(Request $request, Emplacement $emplacement, EntityManagerInterface $em)
{
if ($emplacement->getDefaut() == 1) {
$emplacement->setDefaut(0);
} else {
//Changer le statut de toutes les conditions d'achat de l'article
$article = $emplacement->getArticle();
$emplacements = $article->getEmplacements();
foreach ($emplacements as $empl) {
$empl->setDefaut(0);
$em->persist($empl);
}
//Changer le statut de cette condition d'achat
$emplacement->setDefaut(1);
}
$em->persist($emplacement);
$em->flush();
$headers = [
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST',
];
return new JsonResponse(['data' => '1', 'multiple' => '1'], 200, $headers);
}
/**
* @Route("/rangement/visible/{id}", name="dtc_visibilite_emplacement")
*/
public function visibiliteEmplacementAction(Request $request, Emplacement $emplacement, EntityManagerInterface $em)
{
$Article = $emplacement->getArticle();
if ($emplacement->getStock() == 0 and $emplacement->getStockReserve() == 0) {
$emplacement->setVisibilite(false);
$em->persist($emplacement);
$em->flush();
}
return $this->redirectToRoute('dtc_article_modifier', ['id' => $Article->getId()]);
}
/**
* @Route("/rangement/supprimer/{objet}/{id}/{type}", name="dtc_rangement_supprime")
*/
public function supprimerAction(Request $request, Emplacement $objet, $id, $type, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$emplacement = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$get = $request->query->all();
if ($emplacement->getStock() != 0 or $emplacement->getStockReserve() != 0) {
$erreur = "Cet emplacement ne peut pas être supprimée car il contient du stock.";
$rendu = $this->renderView('FO/Supprimer/supprimer_impossible.html.twig', ['errors' => $erreur]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
$form = $this->createForm( SupprimerEmplacementType::class, $emplacement);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
//$em->remove($emplacement);
//$em->flush();
$emplacement->setVisibilite(false);
$em->persist($emplacement);
$em->flush();
if ($type == 'article') {
$url = $this->generateUrl('dtc_article_modifier', ['id' => $id, 'tab' => 'stocks']);
}
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]);
} else {
$this->addFlash('notice', $translator->trans('Emplacement supprimé avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($emplacement);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}