<?php
namespace App\Controller\Projets;
use App\Entity\Projets\Etat;
use App\Entity\Projets\Tache;
use App\Form\Projets\EtatType;
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\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class EtatController extends AbstractController
{
/**
* @Route("/projet/etat/nouveau", name="dtc_etat_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, ValidatorInterface $validator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
$etat = new Etat();
//$etat->setUtilisateur($user);
$form = $this->createForm(EtatType::class, $etat);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if ($etat->getDernierEtat()) {
$etats = $em->getRepository(Etat::class)->findBy([
'dernierEtat' => true,
]);
if (count($etats)) {
foreach ($etats as $etatTmp) {
$etatTmp->setDernierEtat(false);
$em->persist($etatTmp);
}
}
}
$em->persist($etat);
$em->flush();
$this->addFlash(
'notice',
'Etat ajoute avec succès !'
);
return $this->redirectToRoute('dtc_etat_liste');
} else {
$errors = $validator->validate($etat);
}
}
return $this->render('Projets/Etat/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/projet/etat/modifier/{id}", name="dtc_etat_modifier")
*/
public function modifierAction(Request $request, Etat $etat, EntityManagerInterface $em, ValidatorInterface $validator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
//$etat->setUtilisateur($user);
$form = $this->createForm(EtatType::class, $etat);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Etat::class);
if ( ! $droit) {
$em->refresh($etat);
return $this->redirectToRoute('dtc_etat_modifier', ["id" => $etat->getId()]);
}
if ($form->isValid()) {
if ($etat->getDernierEtat()) {
$etats = $em->getRepository(Etat::class)->findBy([
'dernierEtat' => true,
]);
if (count($etats)) {
foreach ($etats as $etatTmp) {
$etatTmp->setDernierEtat(false);
$em->persist($etatTmp);
}
}
}
$em->persist($etat);
$em->flush();
$this->addFlash(
'notice',
'Etat modifiée avec succès !'
);
return $this->redirectToRoute('dtc_etat_modifier', ["id" => $etat->getId()]);
} else {
$errors = $validator->validate($etat);
}
}
return $this->render('Projets/Etat/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'etat' => $etat]);
}
/**
* @Route("/projet/etat", name="dtc_etat_liste")
*/
public function listerAction(Request $request, ColonneTableauService $serviceColonneTableau, Datatable $datatable, TranslatorInterface $translator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur(Etat::class, "id")];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [2], "visible" => $serviceColonneTableau->getColonneUtilisateur(Etat::class, "libelle")];
$tableau_class_cellule[] = [
"className" => "colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(Etat::class, "dernierEtat"),
];
$this->datatable($datatable, $translator);
return $this->render('Projets/Etat/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
$datatable->setEntity(Etat::class, "x")
->setFields(
[
"ID" => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Couleur") => 'x.couleur',
$translator->trans("Dernier état") => 'x.dernierEtat',
"Actions" => 'x.id',
"_identifier_" => 'x.id',
]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_etat_modifier',
],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_etat_modifier',
],
],
3 => ['view' => 'FO/DataTable/booleen.html.twig'],
4 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_etat_modifier',
'objet' => Etat::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => $translator->trans('Non disponible'),
'route' => 'dtc_etat_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true);
$datatable->setSearchFields([1]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/projet/etat/grid", name="dtc_etat_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
$user = $this->getUser();
if ( ! is_object($user) || ! is_object($user->getType()) || $user->getType()->getId() != "1") {
//throw new AccessDeniedException('This user does not have access to this section.');
return $this->redirectToRoute('dtcfo_homepage', []);
}
return $this->datatable($datatable, $translator)->execute();
}
/**
* @Route("/projet/etat/{tache}/{etat}", name="dtc_etat_changer")
*/
public function changeEtatAction(Request $request, Tache $tache, Etat $etat = null, EntityManagerInterface $em)
{
$tache->setEtat($etat);
$em->persist($tache);
$em->flush();
$headers = [
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST',
];
return new JsonResponse(['data' => '1'], 200, $headers);
}
}