<?php
namespace App\Controller\Kanban;
use App\Entity\GestionComerciale\Commande;
use App\Entity\Kanban\Colonne;
use App\Entity\Kanban\Fiche;
use App\Entity\Kanban\Kanban;
use App\Form\Kanban\ColonneType;
use App\Form\Kanban\SupprimerColonneType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use Doctrine\ORM\EntityManagerInterface;
use JMS\Serializer\SerializerBuilder;
use Knp\Component\Pager\PaginatorInterface;
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 ColonneController extends AbstractController
{
/**
* @Route("/tunnels-colonne/ajouter", name="dtc_kanban_colonne_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, ValidatorInterface $validator)
{
$colonne = new Colonne();
$user = $this->getUser();
//$colonne->setUtilisateur($user);
$errors = "";
$kanban = $em->getRepository(Kanban::class)->find(1);
$form = $this->createForm(ColonneType::class, $colonne, ['validation_groups' => ['Default']]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if (is_object($kanban)) {
$colonne->setKanban($kanban);
}
$em->persist($colonne);
$em->flush();
$this->addFlash(
'notice',
'Colonne ajouté avec succès !'
);
return $this->redirectToRoute('dtc_kanban_colonne_liste');
} else {
$errors = $validator->validate($colonne);
}
}
return $this->render('Kanban/Colonne/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/tunnels-colonne/modifier/{id}", name="dtc_kanban_colonne_modifier")
*/
public function modifierAction(Request $request, Colonne $colonne, EntityManagerInterface $em, ValidatorInterface $validator)
{
$user = $this->getUser();
//$colonne->setUtilisateur($user);
$form = $this->createForm(ColonneType::class, $colonne, ['validation_groups' => ['Default']]);
$errors = "";
$kanban = $em->getRepository(Kanban::class)->find(1);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Colonne::class);
//echo "EEEE";
if ( ! $droit) {
$em->refresh($colonne);
return $this->redirectToRoute('dtc_kanban_colonne_modifier', ["id" => $colonne->getId()]);
}
if ($form->isValid()) {
if (is_object($kanban)) {
$colonne->setKanban($kanban);
}
$em->persist($colonne);
$em->flush();
$this->addFlash(
'notice',
'Colonne sauvegardée avec succès !'
);
return $this->redirectToRoute('dtc_kanban_colonne_modifier', ["id" => $colonne->getId()]);
} else {
$errors = $validator->validate($colonne);
}
}
return $this->render('Kanban/Colonne/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'colonne' => $colonne]);
}
/**
* @Route("/tunnels-colonne/liste", name="dtc_kanban_colonne_liste")
*/
public function listerAction(Request $request, $id, $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ($type == 'kanban') {
$repo_objet = $em->getRepository(Kanban::class);
$objet = $repo_objet->find($id);
}
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [0], "visible" => false, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [1], "visible" => false, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [2], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [3], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [4], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [5], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [6], "visible" => true, "orderable" => false, "searchable" => true];
/*
$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(0),"visible"=>true,"orderable"=>true,"searchable"=> true);
$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(1),"visible"=>true,"orderable"=>true,"searchable"=> true);
$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(2),"visible"=>true,"orderable"=>true,"searchable"=> true);
$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(3),"visible"=>true,"orderable"=>true,"searchable"=> true);
$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(4),"visible"=>true,"orderable"=>true,"searchable"=> true);
$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(5),"visible"=>true,"orderable"=>true,"searchable"=> true);
$tableau_class_cellule[]=array("orderable"=>false,"className"=>"colonne_id","targets"=>array(6),"visible"=>true);
*/
$this->datatable($request, $datatable, $translator, $objet, $type);
$param = $request->query->all();
return $this->render('Kanban/Colonne/lister.html.twig', ['parametres' => $param, 'tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Request $request, Datatable $datatable, TranslatorInterface $translator, $objet, $type = "")
{
$type_jointure = 'x.'.$type;
$param = $request->query->all();
$datatable->setEntity(Colonne::class, "x")
->setFields(
[
"ID" => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Position") => 'x.position',
$translator->trans("Durée") => 'x.delai',
$translator->trans("Probabilité") => 'x.probabilite',
"Actions" => 'x.id',
"_identifier_" => 'x.id',
]
)
->setRenderers(
[
/*
0 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array(
'edit_route' => 'dtc_kanban_colonne_modifier'
),
),
1 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array(
'edit_route' => 'dtc_kanban_colonne_modifier'
),
),
*/
2 => [
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => [
'objet' => Colonne::class,
'champ' => 'setPosition',
],
],
3 => [
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => [
'objet' => Colonne::class,
'champ' => 'setDelai',
],
],
4 => [
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => [
'objet' => Colonne::class,
'champ' => 'setProbabilite',
],
],
5 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_kanban_colonne_modifier_modal',
//'supprimer_route' => 'dtc_kanban_colonne_supprimer',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'colonne',
'objet' => Colonne::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => $translator->trans('Non disponible'),
'route' => 'dtc_kanban_colonne_liste',
],
]
)
->setOrder("x.position", "asc")
->setSearch(true)
->setSearchFields([0, 1, 2, 3]);
//$datatable->setSearchFields(array(0,2));
$where = "";
$parameters = [];
$parameters = ['objet' => $objet];
$where = $type_jointure.' = :objet';
if ($where != '') {
//echo $where;
$datatable->setWhere($where, $parameters);
}
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/tunnels-colonne/grid", name="dtc_kanban_colonne_liste_grid")
*/
public function gridAction(Request $request, $id = "", $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$get = $request->query->all();
if (array_key_exists('id', $get) && $get["id"] != "") {
$id = $get["id"];
}
if (array_key_exists('type', $get) && $get["type"] != "") {
$type = $get["type"];
}
if ($type == 'kanban') {
$repo_objet = $em->getRepository(Kanban::class);
$objet = $repo_objet->find($id);
}
return $this->datatable($request, $datatable, $translator, $objet, $type)->execute();
}
/**
* @Route("/tunnels-colonne/supprimer-multiple", name="dtc_kanban_colonne_liste_supprimer")
*/
public function supprimerMultipleAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$url = $this->generateUrl('dtc_kanban_colonne_liste', []);
return new JsonResponse(['url' => $url, 'valide' => '1']);
$data = $request->get('dataTables');
$ids = $data['actions'];
$repo = $em->getRepository(Colonne::class);
for ($i = 0; $i < count($ids); $i++) {
$v = $repo->find($ids[$i]);
if (is_object($v)) {
$em->remove($v);
}
}
$em->flush();
$this->addFlash(
'notice',
'Colonnes supprimées avec succès !'
);
$url = $this->generateUrl('dtc_kanban_colonne_liste', []);
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/tunnels-colonne/supprimer/{objet}/{id}/{type}", name="dtc_kanban_colonne_supprimer")
*/
public function supprimerAction(Request $request, Colonne $objet, $id, $type, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$colonne = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$repo_fiches = $em->getRepository(Fiche::class);
$fiches = $repo_fiches->findBy(["colonne" => $colonne]);
if (count($fiches) > 0) {
$erreur = "Suppression impossible. Cette étape contient des affaires :<ul>";
foreach ($fiches as $f) {
$erreur .= "<li>".$f->getReference()."</li>";
}
$erreur .= "</ul>";
$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(SupprimerColonneType::class, $colonne);
$errors = "";
$form->handleRequest($request);
//vérifier que la colonne ne contient aucune fiche
$fiches = $colonne->getFiches();
if (count($fiches) > 0 and 1 != 1) {
$errors[] = ['message' => 'Ce type d\'action n\'est pas supprimable car elle contient actuellement des actions en cours!'];
}
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($colonne);
$em->flush();
$this->addFlash(
'notice',
'Étape supprimée avec succès !'
);
$url = $this->generateUrl('dtc_kanban_colonne_liste', []);
$url = "";
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($colonne);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $colonne->getId(), 'type' => '']);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $colonne->getId(), 'type' => '', 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/tunnels-colonne/modal/nouveau/{id}/{type}", name="dtc_kanban_colonne_ajouter_modal")
*/
public function ajouterModalAction(Request $request, $id, $type = "", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Nouvelle étape");
$colonne = new Colonne();
$user = $this->getUser();
//$contact->setUtilisateur($user);
if ($type == 'kanban') {
$repo_objet = $em->getRepository(Kanban::class);
$objet = $repo_objet->find($id);
$colonne->setKanban($objet);
$url = $this->generateUrl('dtc_kanban_modifier', ['id' => $objet->getId(), 'tab' => 'colonnes']);
}
$form = $this->createForm(ColonneType::class, $colonne);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->persist($colonne);
$em->flush();
$em->refresh($colonne);
$params = [];
$this->addFlash('notice', 'Colonne ajoutée avec succès !');
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => $type, 'params' => $params]);
} else {
$errors = $validator->validate($colonne);
$rendu = $this->renderView(
'Kanban/Colonne/ajouter_modal.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'kanban' => $objet]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'Kanban/Colonne/ajouter_modal.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'kanban' => $objet]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/tunnels-colonne/modal/modifier/{objet}/{id}/{type}", name="dtc_kanban_colonne_modifier_modal")
*/
public function modifierModalAction(Request $request, Colonne $objet, $id, $type, EntityManagerInterface $em, TranslatorInterface $translator,
ValidatorInterface $validator
) {
$colonne = $objet;
$titre_modal = $translator->trans("Modifier étape");
$user = $this->getUser();
//$colonne->setUtilisateur($user);
$form = $this->createForm(ColonneType::class, $colonne);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Colonne::class);
if ( ! $droit) {
$rendu = $this->renderView('Kanban/Colonne/ajouter_moal.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
if ($form->isValid()) {
if ($type == 'kanban') {
$repo_objet = $em->getRepository(Kanban::class);
$objet = $repo_objet->find($id);
$colonne->setKanban($objet);
$url = $this->generateUrl('dtc_kanban_modifier', ['id' => $objet->getId(), 'tab' => 'colonnes']);
}
$get = $request->query->all();
if (array_key_exists('redirection', $get) && $get["redirection"] != "") {
$url = $this->generateUrl($get["redirection"], []);
}
$em->persist($colonne);
$em->flush();
$this->addFlash('notice', 'Étape modifiée avec succès !');
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($colonne);
$rendu = $this->renderView('Kanban/Colonne/ajouter_modal.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('Kanban/Colonne/ajouter_modal.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/tunnels-colonne/recherche", name="dtc_kanban_colonne_recherche")
*/
public function rechercheAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, PaginatorInterface $paginator)
{
$q = $request->query->get('q');
$kanban = $request->query->get('kanban');
if ( ! empty($kanban)) {
$kanban = $em->getRepository(Kanban::class)->find($kanban);
}
$commandeId = $request->query->get('commande');
if ( ! empty($commandeId)) {
$commande = $em->getRepository(Commande::class)->find($commandeId);
if (is_object($commande) && is_object($commande->getFiche())) {
$kanban = $commande->getFiche()->getKanban();
}
}
$page = $request->query->getInt('page', 1);
$repo = $em->getRepository(Colonne::class);
$results = $repo->getRecherche($q, $kanban);
$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) {
/*
$origine_saisie_existe = $repo->findOneBy(array('libelle'=>$q));
if(!is_object($origine_saisie_existe)) {
$option_placeholde = array("libelle"=>"Nouvelle origine : ".$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'));
}
}