<?php
namespace App\Controller\Kanban;
use App\Entity\Kanban\Fiche;
use App\Entity\Notes\Categorie;
use App\Entity\Notes\Note;
use App\Entity\Notes\Statut;
use App\Form\Notes\NoteType;
use App\Library\Datatable\Util\Datatable;
use App\Service\Notes\NoteGoogleAgendaService;
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 ActiviteController extends AbstractController
{
/**
* @Route("", name="")
*/
public function listerAction(Request $request, $id, $type = 'fiche', Datatable $datatable, TranslatorInterface $translator)
{
//dump($request);
//dump($request->attributes->get('table'));
$table = $request->attributes->get('table');
/*
if($type == 'commande'}{
$objet = $this->getDoctrine()->getRepository(Commande::class)->find($id);
} else {
$objet = $this->getDoctrine()->getRepository('DTCKanbanBundle:Fiche')->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 ", "targets" => [3], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id ", "targets" => [4], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id ", "targets" => [5], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id ", "targets" => [6], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id ", "targets" => [7], "visible" => true, "orderable" => true, "searchable" => true];
//$tableau_class_cellule[]=array("className"=>"visible_export colonne_id ","targets"=>array(8),"visible"=>true,"orderable"=>true,"searchable"=> true);
$tableau_class_cellule[] = ["className" => " colonne_id", "targets" => [8], "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);
return $this->render('Kanban/Activite/lister.html.twig', [
'tableauClassColonne' => $tableau_class_cellule,
//"objet" => $objet,
"id" => $id,
"type" => $type,
'table' => $table,
]);
}
/**
* Grid action
*
* @return Response
*/
/**
* @Route("/tunnels/activites/grid", name="dtc_kanban_activites_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
$params = $request->query->all();
return $this->datatable($request, $datatable, $translator, $params)->execute();
}
private function datatable(Request $request, Datatable $datatable, TranslatorInterface $translator, $params = [])
{
//dump($params);
$table = '';
if ( ! empty($params['table'])) {
$table = $params['table'];
}
$param = $request->query->all();
$user = $this->getUser();
$datatable->setDatatableId('dta-activites-fiche')
->setEntity(Note::class, "x")
->setFields(
[
"ID" => 'x.id',
$translator->trans("Date échéance") => 'x.dateFin',
$translator->trans("Titre") => 'x.libelle',
$translator->trans("Type") => 'cn.libelle',
$translator->trans("Contact") => 'c.nom',
$translator->trans("Statut") => 's.libelle',
//$translator->trans("Avancement") => 'x.avancement',
$translator->trans("Auteur") => 'u.nom',
"Actions" => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.categorie', 'cn', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.statut', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.contact', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.utilisateur', 'u', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
2 => [
'view' => 'FO/DataTable/titre_activite.html.twig',
'params' => [
'edit_route' => 'dtc_note_modifier',
'supprimer_route' => 'dtc_note_supprimer',
//'id' => $client->getId(),
'width_modal' => 900,
'type' => "liste",
'objet' => Note::class,
'get' => [
'affichage' => '2',
],
],
],
3 => [
'view' => 'FO/DataTable/type_activite.html.twig',
'params' => [],
],
4 => [
'view' => 'FO/DataTable/contact.html.twig',
'params' => [],
],
6 => [
'view' => 'FO/DataTable/utilisateur.html.twig',
'params' => [],
],
7 => [
'view' => 'FO/DataTable/actions_activites_modal.html.twig',
'params' => [
'edit_route' => 'dtc_note_modifier',
'supprimer_route' => 'dtc_note_supprimer',
//'id' => $client->getId(),
'width_modal' => 900,
'type' => "liste",
'objet' => Note::class,
'table' => $table,
'parametres' => ['affichage' => 2],
],
],
]
)
->setOrder("x.dateSaisie", "desc")
->setSearch(true)
//->setSearchFields(array(2,3,4,5,6))
->setMultiple(
[
'delete' => [
'title' => $translator->trans('Non disponible'),
'route' => 'dtc_commande_liste_supprimer',
],
]
);
$where = "";//(x.cra IS NULL OR x.cra = 0) AND
$where = "(x.prive = :prive OR x.prive IS NULL OR x.utilisateur = :utilisateur) AND (x.categorie != :categorieintervention or x.categorie IS NULL)";//(ac.id IS NULL OR (ac.niveau = 2 AND ac.libelle != '')) AND
$parameters = ["prive" => 0, "utilisateur" => $user, "categorieintervention" => 8];
if ( ! empty($params['id']) && ! empty($params['type'])) {
$parameters[$params['type']] = $params['id'];
if ($where != "") {
$where .= " AND ";
}
$where .= "x.".$params['type']." = :".$params['type'];
}
if (array_key_exists('parametres', $param)) {
if (array_key_exists('date_debut', $param["parametres"]) and $param["parametres"]["date_debut"] > 0) {
$debut = \DateTime::createFromFormat('d/m/Y', $param["parametres"]['date_debut']);
$debut->setTime(00, 00, 00);
$parameters["debut"] = $debut;
if ($where != "") {
$where .= " AND";
}
$where .= " x.dateSaisie >= :debut";
}
if (array_key_exists('date_fin', $param["parametres"]) and $param["parametres"]["date_fin"] > 0) {
$fin = \DateTime::createFromFormat('d/m/Y', $param["parametres"]['date_fin']);
$fin->setTime(23, 59, 59);
$parameters["fin"] = $fin;
if ($where != "") {
$where .= " AND";
}
$where .= " x.dateSaisie <= :fin";
}
if (array_key_exists('statut', $param["parametres"]) and $param["parametres"]["statut"] > 0) {
$parameters["statut"] = $param["parametres"]["statut"];
if ($where != "") {
$where .= " AND";
}
$where .= " s.id = :statut";
}
if (array_key_exists('cat', $param["parametres"]) and $param["parametres"]["cat"] > 0) {
$parameters["cat"] = $param["parametres"]["cat"];
if ($where != "") {
$where .= " AND";
}
$where .= " cn.id = :cat";
}
}
if ($where != '') {
$datatable->setWhere($where, $parameters);
}
return $datatable;
}
/**
* @Route("/tunnels/activites/nouveau/{id}/", name="dtc_kanban_activites_ajouter")
*/
public function ajouterAction(Request $request, Fiche $fiche, EntityManagerInterface $em, ValidatorInterface $validator, NoteGoogleAgendaService $serviceGoogleAgenda)
{
$titre_modal = "Nouvelle activité";
$user = $this->getUser();
$note = new Note();
$categorie_note = $em->getRepository(Categorie::class)->findAll();
$statutAfaire = $em->getRepository(Statut::class)->find(1);
$note->setStatut($statutAfaire);
$note->setUtilisateur($user);
if (is_object($fiche->getClient())) {
$note->setClient($fiche->getClient());
}
$dateNoteDebut = new \Datetime();
$dateNoteFin = new \Datetime();
$note->setDateDebut($dateNoteDebut);
$dateNoteFin = date_modify($dateNoteFin, "+1 hour");
$type_json = "";
$currentPath = "";
$currentPath = $request->query->get('currentPath');
$note->setFiche($fiche);
$note->setDateFin($dateNoteFin);
$form = $this->createForm(NoteType::class, $note);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if ($note->getLibelle() == "" and is_object($note->getCategorie())) {
$note->setLibelle($note->getCategorie()->getLibelle());
} elseif ($note->getLibelle() == "") {
$note->setLibelle("Sans titre");
}
$url = "";
if ($note->getAlerte() == "") {
$note->setDateRappel(null);
} else {
$dateRappel = new \Datetime($note->getDateDebut()->format('Y-m-d H:i:s'));
$dateRappel->add(new \DateInterval('PT'.$note->getAlerte().'M'));
$note->setDateRappel($dateRappel);
}
$em->persist($note);
$em->flush();
$serviceGoogleAgenda->ajouter($note);
return new JsonResponse(['type_json' => $type_json, 'rendu' => '', 'valide' => '1', 'url' => $url, "errors" => $errors]);
} else {
$errors = $validator->validate($note);
$errors = $this->renderView('layout-errors.html.twig', ['errors' => $errors, 'form' => $form->createView()]);
$rendu = $this->renderView(
'Notes/Note/ajouter_modal.html.twig',
['currentPath' => $currentPath, 'categorie_note' => $categorie_note, 'form' => $form->createView(), 'errors' => $errors, "fiche" => $fiche]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'errors' => $errors]);
}
}
//$rendu = $this->renderView('Notes/Note/ajouter_modal.html.twig', array('equipiers'=>$equipiers,'currentPath'=>$currentPath,'categorie_note'=>$categorie_note,'form' => $form->createView(),'errors'=>$errors));
$rendu = $this->renderView(
'Kanban/Activite/ajouter.html.twig',
['currentPath' => $currentPath, 'categorie_note' => $categorie_note, 'form' => $form->createView(), 'errors' => $errors]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Notes/Note/note_fiche.html.twig', array('currentPath'=>$currentPath,'categorie_note'=>$categorie_note,'form' => $form->createView(),'errors'=>$errors,"fiche"=>$fiche));
}
}