<?php
namespace App\Controller\Articles;
use App\Entity\Articles\Article;
use App\Entity\Articles\ConditionnementAchat;
use App\Entity\Fournisseurs\Fournisseur;
use App\Form\Articles\ConditionnementAchatType;
use App\Form\Articles\SupprimerConditionnementAchatType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Articles\ArticleService;
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;
class ConditionnementAchatController extends AbstractController
{
/**
* @Route("/conditionnement-achat/nouveau/{id}/{type}", name="dtc_conditionnement_achat_ajouter")
*/
public function ajouterAction(Request $request, $id,$type="", EntityManagerInterface $em, ArticleService $articleService, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal =$translator->trans("Nouveau conditionnement d'achat");
$conditionnementAchat = new ConditionnementAchat();
$user = $this->getUser();
//$conditionnementAchat->setUtilisateur($user);
$form = $this->createForm(ConditionnementAchatType::class, $conditionnementAchat);
$errors = "";
$form->handleRequest($request);
$get = $request->query->all();
if ($form->isSubmitted()) {
if ($form->isValid()) {
if($type == 'article') {
$repo_objet = $em->getRepository(Article::class);
$objet = $repo_objet->find($id);
if(is_object($objet)){
$conditionnementAchat->setArticle($objet);
}
$url = $this->generateUrl('dtc_article_modifier', ['id' => $objet->getId(), 'tab' =>'conditions']);
}
$em->persist($conditionnementAchat);
$em->persist($objet);
$em->flush();
if($type == 'article') {
$em->refresh($conditionnementAchat);
$message_historique = [];
$message_historique["titre"]="Création d'un nouveau conditionnement d'achat";
$message_historique["message"]=$conditionnementAchat->getIdentifiant()." (id : ".$conditionnementAchat->getId().")";
$articleService->creerHistorique($objet,'defaut',$message_historique);
}
if (array_key_exists('table', $get) && $get["table"]!="") {
return new JsonResponse(['rendu' =>'', 'valide' =>'1', 'url' =>$url, 'type' =>'recharger_datatable', 'id_datatable' =>$get["table"]], 200, ['Content-Type' =>'application/json']
);
}
else {
$this->addFlash( 'notice','Conditionnement d\'achat ajoutée avec succès !');
return new JsonResponse(['rendu' =>'', 'valide' =>'1', 'url' =>$url], 200, ['Content-Type' =>'application/json']);
}
}
else {
$errors = $validator->validate($conditionnementAchat);
$rendu = $this->renderView('Articles/ConditionnementAchat/ajouter.html.twig', ['form' => $form->createView(), 'errors' =>$errors, 'id' =>$id, 'type' =>$type]);
return new JsonResponse(['rendu' =>$rendu, 'valide' =>'0', 'url' =>'', 'titre' =>$titre_modal], 200, ['Content-Type' =>'application/json']);
}
}
$rendu = $this->renderView('Articles/ConditionnementAchat/ajouter.html.twig', ['form' => $form->createView(), 'errors' =>$errors, 'id' =>$id, 'type' =>$type]);
return new JsonResponse(['rendu' =>$rendu, 'valide' =>'0', 'url' =>'', 'titre' =>$titre_modal], 200, ['Content-Type' =>'application/json']);
}
/**
* @Route("/conditionnement-achat/modifier/{objet}/{id}/{type}", name="dtc_conditionnement_achat_modifier")
*/
public function modifierAction(Request $request, ConditionnementAchat $objet,$id,$type, ArticleService $articleService, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$conditionnementAchat = $objet;
$titre_modal =$translator->trans("Modifier le conditionnement d'achat");
$user = $this->getUser();
//$conditionnementAchat->setUtilisateur($user);
$form = $this->createForm(ConditionnementAchatType::class, $conditionnementAchat);
$errors = "";
$form->handleRequest($request);
$get = $request->query->all();
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, ConditionnementAchat::class);
if ($form->isValid()) {
if($type == 'article') {
$repo_objet = $em->getRepository(Article::class);
$article = $repo_objet->find($id);
if(is_object($article)){
$conditionnementAchat->setArticle($article);
}
$url = $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' =>'conditions']);
}
if($type == 'fournisseur') {
$url = $this->generateUrl('dtc_fournisseur_modifier', ['id' => $id, 'tab' =>'conditions']);
}
if($type == 'commandeFournisseur') {
$url = $this->generateUrl('dtc_commande_fournisseur_modifier', ['id' => $id]);
}
$em->persist($conditionnementAchat);
$em->flush();
if($type == 'article') {
$em->refresh($conditionnementAchat);
$message_historique = [];
$message_historique["titre"]="Modification d'un conditionnement d'achat";
$message_historique["message"]=$conditionnementAchat->getIdentifiant()." (id : ".$conditionnementAchat->getId().")";
$articleService->creerHistorique($objet->getArticle(),'defaut',$message_historique);
}
if (array_key_exists('table', $get) && $get["table"]!="") {
return new JsonResponse(['rendu' =>'', 'valide' =>'1', 'url' =>$url, 'type' =>'recharger_datatable', 'id_datatable' =>$get["table"]], 200, ['Content-Type' =>'application/json']
);
}
else {
$this->addFlash('notice','Conditionnement d\'achat modifiée avec succès !');
return new JsonResponse(['rendu' =>'', 'valide' =>'1', 'url' =>$url], 200, ['Content-Type' =>'application/json']);
}
}
else {
$errors = $validator->validate($conditionnementAchat);
$rendu = $this->renderView('Articles/ConditionnementAchat/ajouter.html.twig', ['form' => $form->createView(), 'errors' =>$errors, 'id' =>$id, 'type' =>$type, 'objet' =>$objet]
);
return new JsonResponse(['rendu' =>$rendu, 'valide' =>'0', 'url' =>'', 'titre' =>$titre_modal], 200, ['Content-Type' =>'application/json']);
}
}
$rendu = $this->renderView('Articles/ConditionnementAchat/ajouter.html.twig', ['form' => $form->createView(), 'errors' =>$errors, 'id' =>$id, 'type' =>$type, 'objet' =>$objet]);
return new JsonResponse(['rendu' =>$rendu, 'valide' =>'0', 'url' =>'', 'titre' =>$titre_modal], 200, ['Content-Type' =>'application/json']);
}
/**
* @Route("/conditionnement-achat/supprimer/{objet}/{id}/{type}", name="dtc_conditionnement_achat_supprimer")
*/
public function supprimerAction(Request $request, ConditionnementAchat $objet,$id,$type, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator) {
$conditionnementAchat = $objet;
$titre_modal =$translator->trans("Demande de confirmation");
$user = $this->getUser();
$get = $request->query->all();
$form = $this->createForm(SupprimerConditionnementAchatType::class, $conditionnementAchat);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($conditionnementAchat);
$em->flush();
if($type == 'article') {
$url = $this->generateUrl('dtc_article_modifier', ['id' => $id, 'tab' =>'conditions']);
}
if (array_key_exists('table', $get) && $get["table"]!="") {
return new JsonResponse(['rendu' =>'', 'valide' =>'1', 'url' =>$url, 'type' =>'recharger_datatable', 'id_datatable' =>$get["table"]], 200, ['Content-Type' =>'application/json']
);
}
else {
$this->addFlash( 'notice','Conditionnement d\'achat supprimé avec succès !');
return new JsonResponse(['rendu' =>'', 'valide' =>'1', 'url' =>$url], 200, ['Content-Type' =>'application/json']);
}
}
else {
$errors = $validator->validate($conditionnementAchat);
$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], 200, ['Content-Type' =>'application/json']);
}
}
$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], 200, ['Content-Type' =>'application/json']);
}
/**
* @Route("/conditionnement-achat", name="dtc_conditionnement_achat_liste")
*/
public function listerAction(Request $request,$id="0",$type="a", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$tableau_class_cellule = [];
$tableau_class_cellule[]= ["searchable" => true, "className" =>"visible_export colonne_id text-center", "targets" => [0], "visible" =>true];
$tableau_class_cellule[]= ["searchable" => true, "className" =>"visible_export colonne_id", "targets" => [1], "visible" =>true];
$tableau_class_cellule[]= ["orderable" => false, "className" =>"visible_export colonne_id", "targets" => [2], "visible" =>true];
$modal = $request->query->get('modal');
$articleId = $request->query->get('id');
$qte = $request->query->get('qte');
if($type == "article") $repo_objet = $em->getRepository(Article::class);
if($type == "fournisseur") $repo_objet = $em->getRepository(Fournisseur::class);
$objet = $repo_objet->find($id);
if ($articleId != ''){
$article = $repo_objet->find($articleId);
if ($modal == 1 && is_object($article))
{
$titre_modal = 'Conditions d\'achat';
$this->datatableArticle($article,$type, $datatable, $translator);
$rendu = $this->renderView('Articles/ConditionnementAchat/lister.html.twig', ['tableauClassColonne' =>$tableau_class_cellule, "id" =>$articleId, "type" =>$type, 'qte' =>$qte]
);
return new JsonResponse(['rendu' =>$rendu, 'valide' =>'0', 'url' =>'', 'titre' =>$titre_modal], 200, ['Content-Type' =>'application/json']);
}
}
if(is_object($objet)) {
if($type == "article") {
$this->datatableArticle($objet,$type, $datatable, $translator);
}
else if($type == "fournisseur") {
$tableau_class_cellule = [];
//$tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id","targets"=>array(0),"visible"=>true);
//$tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id","targets"=>array(1),"visible"=>true);
$this->datatableFournisseur($objet,$type);
}
return $this->render('Articles/ConditionnementAchat/lister.html.twig', ['tableauClassColonne' =>$tableau_class_cellule, "id" =>$id, "type" =>$type]);
}
else {
$this->datatable($datatable, $translator);
return $this->render('Articles/ConditionnementAchat/lister.html.twig', ['tableauClassColonne' =>$tableau_class_cellule, "id" =>$id, "type" =>$type]);
}
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable ->setDatatableId('dta-conditionnement-achat')
->setEntity(ConditionnementAchat::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
//$translator->trans("Libelle") => 'x.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id'
]
)
//->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
/*->setWhere(
$type_jointure.' = :objet',
array('objet' => $objet)
)
*/
->setRenderers(
[
2 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
//'edit_route' => 'dtc_garantie_modifier',
//'supprimer_route' => 'dtc_garantie_supprimer',
'entite' => 'garantie',
'objet' => ConditionnementAchat::class
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1,4])
;
return $datatable;
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableArticle($objet,$type="", Datatable $datatable, TranslatorInterface $translator)
{
$type_jointure = 'x.'.$type;
$datatable ->setDatatableId('dta-conditionnement-achat')
->setEntity(ConditionnementAchat::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Quantité") => 'x.quantite',
$translator->trans("EAN") => 'x.identifiant',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id'
]
)
//->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
/*->setWhere(
$type_jointure.' = :objet',
array('objet' => $objet)
)
*/
->setWhere(
'x.article = :objet',
['objet' => $objet]
)
->setRenderers(
[
2 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_conditionnement_achat_modifier',
'supprimer_route' => 'dtc_conditionnement_achat_supprimer',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'ConditionnementAchat',
'objet' => ConditionnementAchat::class,
'table' => "dta-conditionnement-achat",
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
//->setSearchFields(array(1,2))
;
return $datatable;
}
/**
* @Route("/conditionnement-achat/grid/{id}/{type}", name="dtc_conditionnement_achat_liste_grid")
*/
public function gridAction($id="",$type="", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if($type == "article") $repo_objet = $em->getRepository(Article::class);
else if($type == "fournisseur") $repo_objet = $em->getRepository(Fournisseur::class);
$objet = $repo_objet->find($id);
if(is_object($objet) and $type == "article") return $this->datatableArticle($objet,$type, $datatable, $translator)->execute();
else if(is_object($objet) and $type == "fournisseur") return $this->datatableFournisseur($objet,$type)->execute();
else return $this->datatable($datatable, $translator)->execute();
}
}