<?php
namespace App\Controller\FO;
use App\Entity\Articles\Article;
use App\Entity\FO\Atelier;
use App\Entity\Utilisateur\Utilisateur;
use App\Entity\Utilisateur\UtilisateurAtelier;
use App\Form\FO\AtelierType;
use App\Form\FO\SupprimerAtelierType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Utilisateur\ColonneTableauService;
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 AtelierController extends AbstractController
{
/**
* @Route("/atelier/nouveau", name="dtc_atelier_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Nouveau atelier");
$get = $request->query->all();
$atelier = new Atelier();
$user = $this->getUser();
$form = $this->createForm(AtelierType::class, $atelier);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$url = "";
$em->persist($atelier);
$em->flush();
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('Nouveau atelier ajouté avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($atelier);
$rendu = $this->renderView('FO/Atelier/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'atelierArticle' => $atelier]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Atelier/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'atelierArticle' => $atelier]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/atelier/supprimer/{id}", name="dtc_atelier_supprimer")
*/
public function supprimerAction(Request $request, Atelier $objet, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$atelierArticle = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$get = $request->query->all();
$repo_article = $em->getRepository(Article::class);
$repo_utilisateur = $em->getRepository(UtilisateurAtelier::class);
$atelier_article_existe = $repo_article->findOneBy(["atelier" => $objet]);
$atelier_utilisateur_existe = $repo_utilisateur->findOneBy(["atelier" => $objet]);
$erreur = "";
//Verifier si un client a une civilité
if (is_object($atelier_article_existe)) {
$erreur .= 'Cet atelier n\'est pas supprimable car il contient un ou plusieurs articles.';
}
//Verifier si un contact a une civilité
if (is_object($atelier_utilisateur_existe)) {
//if ($message != '') $message .= ' ';
$erreur .= ' Cet atelier n\'est pas supprimable car il contient un ou plusieurs utilisateurs.';
}
//echo "TEST ===> ".$erreur;
if ($erreur != "") {
$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(SupprimerAtelierType::class, $atelierArticle);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($atelierArticle);
$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('Atelier supprimé avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($atelierArticle);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
public function listerAtelierCheckboxAction(Request $request, $utilisateur = [], EntityManagerInterface $em)
{
$id = '';
$repo_utilisateur = $em->getRepository(Utilisateur::class);
$repo_atelier = $em->getRepository(Atelier::class);
$repo_utilisateur_atelier = $em->getRepository(UtilisateurAtelier::class);
$id = $request->query->get('id');
if ($request->query->get('utilisateur') != '') {
$utilisateur = $repo_utilisateur->find($request->query->get('utilisateur'));
}
$atelier = $repo_atelier->getAllAtelier();
$tabAtelier = [];
foreach ($atelier as $c) {
$c['checked'] = 0;
//$c['totalSousCategorie'] = count($repo_atelier->findBy(array("categorieParent"=>$c)));
//$c['totalSousCategorie'] = 0;
$c['selection'] = 0;
if (is_object($utilisateur) and is_object($repo_utilisateur_atelier->findOneBy(['utilisateur' => $utilisateur, 'atelier' => $c]))) {
$c['checked'] = 1;
}
$tabAtelier[] = $c;
}
$atelier = $tabAtelier;
if ($request->isXmlHttpRequest()) {
$rendu = $this->renderView('FO/Atelier/checkbox.html.twig', ['atelier' => $atelier, 'utilisateur' => $utilisateur]);
return new JsonResponse(['rendu' => $rendu]);
}
return $this->render('FO/Atelier/checkbox.html.twig', ['atelier' => $atelier, 'utilisateur' => $utilisateur]);
}
/**
* @Route("/atelier/modifier/{id}", name="dtc_atelier_modifier")
*/
public function modifierAction(Request $request, Atelier $objet, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$atelierArticle = $objet;
$titre_modal = $translator->trans("Modifier atelier");
$get = $request->query->all();
$user = $this->getUser();
// $origineClient->setUtilisateur($user);
$form = $this->createForm(AtelierType::class, $atelierArticle);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Atelier::class);
/*
if(!$droit) {
$rendu = $this->renderView('Clients/Origine/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'));
}
*/
$url = "";
if ($form->isValid()) {
$em->persist($atelierArticle);
$em->flush();
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('Atelier modifié avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($atelierArticle);
$rendu = $this->renderView('FO/Atelier/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'articleAutomatique' => $atelierArticle]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Atelier/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'articleAutomatique' => $atelierArticle]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/atelier/", name="dtc_atelier_liste")
*/
public function listerAction(Request $request, ColonneTableauService $serviceColonneTableau, Datatable $datatable, TranslatorInterface $translator)
{
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur(Atelier::class, "id")];
$tableau_class_cellule[] = [
"orderable" => true,
"className" => "colonne_id",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Atelier::class, "libelle"),
];
$tableau_class_cellule[] = [
"orderable" => true,
"className" => "colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Atelier::class, "reference"),
];
$this->datatable($datatable, $translator);
return $this->render('FO/Atelier/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable
->setDatatableId('dta-ateliers')
->setEntity(Atelier::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Référence") => 'x.reference',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_atelier_modifier',
],
],
3 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_atelier_modifier',
'supprimer_route' => 'dtc_atelier_supprimer',
'type' => "",
'entite' => 'atelier',
'table' => 'dta-ateliers',
'objet' => Atelier::class,
'width_modal' => 800,
],
],
/*
1 => array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCFOBundle:Atelier',
'champ' => 'setLibelle',
),
),*/
]
)
->setMultiple(
[
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/atelier/grid", name="dtc_atelier_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($datatable, $translator)->execute();
}
}