<?php
namespace App\Controller\Projets;
use App\Entity\Projets\Tache;
use App\Entity\Projets\TypeProjet;
use App\Form\Projets\ProjetType;
use App\Form\Projets\SupprimerTypeProjetType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use JMS\Serializer\SerializerBuilder;
use Knp\Component\Pager\PaginatorInterface;
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 TypeProjetController extends AbstractController
{
/**
* @Route("/projet/type-projet/nouveau", name="dtc_type_projet_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Nouveau Type Projet");
$repo_objet = $em->getRepository(TypeProjet::class);
$get = $request->query->all();
$typeProjet = new TypeProjet();
$user = $this->getUser();
$form = $this->createForm(ProjetType::class, $typeProjet, [
'method' => 'post',
]);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$url = "";
$em->persist($typeProjet);
$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('Type Projet ajouté avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($typeProjet);
$rendu = $this->renderView('Projets/TypeProjet/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'typeProjet' => $typeProjet]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('Projets/TypeProjet/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'typeProjet' => $typeProjet]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/projet/type-projet/modifier/{id}", name="dtc_type_projet_modifier")
*/
public function modifierAction(Request $request, TypeProjet $typeProjet, EntityManagerInterface $em, TranslatorInterface $translator,
ValidatorInterface $validator
) {
$titre_modal = $translator->trans("Modifier le Type Projet");
$get = $request->query->all();
$user = $this->getUser();
$form = $this->createForm(ProjetType::class, $typeProjet);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, TypeProjet::class);
$url = "";
if ($form->isValid()) {
$em->persist($typeProjet);
$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('Type Projet modifié avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($typeProjet);
$rendu = $this->renderView('Projets/TypeProjet/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'typeProjet' => $typeProjet]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('Projets/TypeProjet/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'typeProjet' => $typeProjet]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/projet/type-projet", name="dtc_type_projet_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 = [];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur(TypeProjet::class, "id")];
$tableau_class_cellule[] = [
"className" => "colonne_id",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(TypeProjet::class, "libelle"),
];
$this->datatable($datatable, $translator);
return $this->render('Projets/TypeProjet/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(TypeProjet::class, "x")
->setFields(
[
"ID" => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
"Actions" => 'x.id',
"_identifier_" => 'x.id',
]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_type_projet_modifier',
],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_type_projet_modifier',
],
],
2 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_type_projet_modifier',
'supprimer_route' => 'dtc_type_projet_supprimer',
'type' => "",
'entite' => 'typeprojet',
'table' => 'dtc-typeprojet',
'objet' => TypeProjet::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => $translator->trans('Non disponible'),
'route' => 'dtc_type_projet_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true);
$datatable->setSearchFields([1]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/projet/type-projet/grid", name="dtc_type_projet_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/type-projet/{tache}/{type-projet}", name="dtc_type_projet_changer")
*/
public function changeTypeProjetAction(Request $request, Tache $tache, TypeProjet $typeProjet = null, EntityManagerInterface $em)
{
$tache->setTypeProjet($typeProjet);
$em->persist($tache);
$em->flush();
$headers = [
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST',
];
return new JsonResponse(['data' => '1']);
}
/**
* @Route("/projet/type-projet/recherche", name="dtc_type_projet_recherche")
*/
public function rechercheAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, PaginatorInterface $paginator)
{
$q = $request->query->get('q');
$page = $request->query->getInt('page', 1);
$repo = $em->getRepository(TypeProjet::class);
$results = $repo->getRecherche($q);
$pagination = $paginator->paginate(
$results, /* query NOT result */
$request->query->getInt('page', 1)/*page number*/,
10/*limit per page*/
);
$pagination_results = $pagination->getItems();
if ($q == "" && $page < 2) {
//$option_placeholde = array("libelle"=>"Choisir","id"=>"","departement_id"=>"");
$option_placeholde = ["libelle" => $translator->trans("Sélectionnez"), "id" => "0"];
array_unshift($pagination_results, $option_placeholde);
} elseif ($page < 2) {
/*
$phase_saisie_existe = $repo->findOneBy(array('libelle'=>$q));
if(!is_object($phase_saisie_existe)) {
$option_placeholde = array("libelle"=>"Nouvelle phase : ".$q,"id"=>'0',"nouveau"=>$q);
array_unshift($pagination_results, $option_placeholde);
$option_placeholde = array("libelle" =>$translator->trans("Sélectionnez"),"id"=>"0");
array_unshift($pagination_results, $option_placeholde);
}
*/
}
//$option_placeholde = array("libelle" =>$translator->trans("Sélectionnez"),"id"=>"");
//array_unshift($pagination_results, $option_placeholde);
$pagination->setItems($pagination_results);
$serializer = SerializerBuilder::create()->build();
return JsonResponse::fromJsonString($serializer->serialize($pagination, 'json'));
}
/**
* @Route("/projet/type-projet/modifier/{id}", name="dtc_type_projet_supprimer")
*/
public function supprimerAction(Request $request, TypeProjet $typeProjet, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$get = $request->query->all();
$erreur = '';
if ( ! empty($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(SupprimerTypeProjetType::class, $typeProjet);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($typeProjet);
$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', $this->get("translator")->trans('Marché supprimé avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($typeProjet);
$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]);
}
}