<?php
namespace App\Controller\Projets;
use App\Entity\Articles\Article;
use App\Entity\GestionComerciale\Commande;
use App\Entity\Kanban\Fiche;
use App\Entity\Notes\Note;
use App\Entity\Projets\Projet;
use App\Entity\Projets\ProjetUtilisateur;
use App\Entity\Utilisateur\Contact;
use App\Entity\Utilisateur\Utilisateur;
use App\Form\Projets\ProjetUtilisateurType;
use App\Form\Projets\SupprimerProjetUtilisateurType;
use App\Library\Datatable\Util\Datatable;
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\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class ProjetUtilisateurController extends AbstractController
{
/**
* @Route("/projetutilisateur/referent/nouveau/{id}/{type}/{typeUtilisateur}", name="dtc_projet_utilisateur_ajouter")
*/
public function ajouterModalAction(Request $request, $id, $type, $typeUtilisateur = "", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Nouveau référent");
$user = $this->getUser();
$projetUtilisateur = new ProjetUtilisateur();
$url = '#';
if ($type == 'commande') {
$titre_modal = $translator->trans("Ajouter un utilisateur");
$url = $this->generateUrl('dtc_commande_modifier', ["id" => $id, "tab" => "equipe"]);
$objet = $em->getRepository(Commande::class)->find($id);
if (is_object($objet)) {
$projetUtilisateur->setCommande($objet);
if (is_object($objet->getFiche())) {
$projetUtilisateur->setFiche($objet->getFiche());
}//ajouter fiche si existante
}
} elseif ($type == 'projet') {
$url = $this->generateUrl('dtc_projet_modifier', ["id" => $id, "tab" => "referents"]);
$objet = $em->getRepository(Commande::class)->find($id);
if (is_object($objet)) {
$projetUtilisateur->setProjet($objet);
}
} elseif ($type == 'fiche') {
$url = $this->generateUrl('dtc_projet_modifier', ["id" => $id, "tab" => "referents"]);
$objet = $em->getRepository(Fiche::class)->find($id);
if (is_object($objet)) {
$projetUtilisateur->setFiche($objet);
}
} elseif ($type == 'note') {
$url = $this->generateUrl('dtc_projet_modifier', ["id" => $id, "tab" => "referents"]);
$objet = $em->getRepository(Note::class)->find($id);
if (is_object($objet)) {
$projetUtilisateur->setNote($objet);
}
}
//$projetUtilisateur->setUtilisateur($user);
$form = $this->createForm(ProjetUtilisateurType::class, $projetUtilisateur);
$errorsSup = [];
$errors = [];
$libelle = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$repo_projet_utilisateur = $em->getRepository(ProjetUtilisateur::class);
//$projetUtilisateurExisteDeja = $repo_projet_utilisateur->findOneBy(array("utilisateur"=>$projetUtilisateur->getUtilisateur(),"contact"=>$projetUtilisateur->getContact(),"projet"=>$projetUtilisateur->getProjet(),'commande'=>$projetUtilisateur->getCommande(),'fiche'=>$projetUtilisateur->getFiche(),'note'=>$projetUtilisateur->getNote()));
$projetUtilisateurExisteDeja = '';
//dump($projetUtilisateurExisteDeja);
if ( ! is_object($projetUtilisateurExisteDeja)) {
$em->persist($projetUtilisateur);
$em->flush();
}
$table = $request->query->get('table');
$retour = ['rendu' => '', 'valide' => '1', 'url' => $url];
if ( ! empty($table)) {
$retour['type'] = 'recharger_datatable';
$retour['id_datatable'] = $table;
} else {
if ( ! is_object($projetUtilisateurExisteDeja)) {
$this->addFlash(
'notice',
$translator->trans('L\'utilisateur a été ajouté à l\'équipe!')
);
} else {
$this->addFlash(
'warning',
$translator->trans('Cet utilisateur fait déjà parti de l\'equipe!')
);
}
}
return new JsonResponse($retour);
//return new JsonResponse(array('rendu'=>'','valide'=>'1','url'=>$url,'type'=>'projetUtilisateur','projetUtilisateur'=>$projetUtilisateur->getId()), 200, array('Content-Type'=>'application/json'));
} else {
$errors = $validator->validate($projetUtilisateur);
$rendu = $this->renderView(
'Projets/ProjetUtilisateur/ajouter_modal.html.twig',
[
'form' => $form->createView(),
'errors' => $errors,
'errorsSup' => $errorsSup,
'projetUtilisateur' => $projetUtilisateur,
'typeUtilisateur' => $typeUtilisateur,
]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
} else {
}
$rendu = $this->renderView(
'Projets/ProjetUtilisateur/ajouter_modal.html.twig',
[
'form' => $form->createView(),
'errors' => $errors,
'errorsSup' => $errorsSup,
'projetUtilisateur' => $projetUtilisateur,
'typeUtilisateur' => $typeUtilisateur,
]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/projetutilisateur/{id}/{type}/{typeUtilisateur}", name="dtc_projet_utilisateur_liste")
*/
public function listerAction(Request $request, $id, $type = "", $typeUtilisateur = "", ColonneTableauService $serviceColonneTableau, Datatable $datatable,
TranslatorInterface $translator, EntityManagerInterface $em
) {
// TODO refactor this
$tableauEntite = 'DTCProjetsBundle:Referent-contact';
if ($type == 'projet') {
$repo_objet = $em->getRepository(Projet::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'utilisateur') {
$repo_objet = $em->getRepository(Utilisateur::class);
$objet = $repo_objet->find($id);
$tableauEntite = 'DTCProjetsBundle:Referent-utilisateur';
} elseif ($type == 'commande') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$tableauEntite = 'DTCProjetsBundle:Referent-utilisateur';
} elseif ($type == 'contact') {
$repo_objet = $em->getRepository(Contact::class);
$objet = $repo_objet->find($id);
$tableauEntite = 'DTCProjetsBundle:Referent-contact';
} elseif ($type == 'fiche') {
$repo_objet = $em->getRepository(Fiche::class);
$objet = $repo_objet->find($id);
if ($typeUtilisateur == 'contact') {
$tableauEntite = 'DTCProjetsBundle:Referent-contact';
} else {
$tableauEntite = 'DTCProjetsBundle:Referent-utilisateur';
}
} elseif ($type == 'note') {
$repo_objet = $em->getRepository(Note::class);
$objet = $repo_objet->find($id);
if ($typeUtilisateur == 'contact') {
$tableauEntite = 'DTCProjetsBundle:Referent-contact';
} else {
$tableauEntite = 'DTCProjetsBundle:Referent-utilisateur';
}
}
$tableau_class_cellule = [];
//$tableau_class_cellule[]=array("className"=>"visible_export colonne_id","targets"=>array(0),"visible"=>true,"orderable"=>true,"searchable"=> true);
//$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(0),"visible"=>true,"orderable"=>false);
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite, "id")];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [1], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite, "nom")];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [2], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite, "prenom")];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [3], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite, "email")];
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [4], "visible" => $serviceColonneTableau->getColonneUtilisateur($tableauEntite, "tel")];
//$tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(5),"visible"=>$serviceColonneTableau->getColonneUtilisateur($tableauEntite,"skype"));
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [5], "visible" => true];
$this->datatable($datatable, $translator, $em, $objet, $type, $typeUtilisateur);
return $this->render(
'Projets/ProjetUtilisateur/lister.html.twig',
['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type, 'typeUtilisateur' => $typeUtilisateur]
);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator, EntityManagerInterface $em, $objet, $type = "", $typeUtilisateur = "")
{
$roles = $em->getRepository(Article::class)->findAll();
if ($type == "note") {
$identifiant = "dta-note-referents-";
} else {
$identifiant = "dta-referents-";
}
$edit_route = 'dtc_note_modifier';
if ($typeUtilisateur == 'utilisateur') {
$edit_route = 'dtc_utilisateur_modifier';
} elseif ($typeUtilisateur == 'contact') {
$edit_route = 'dtc_contact_modifier';
}
$type_jointure = 'x.'.$type;
$renderers = [
/*
1 => array(
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => array(
'edit_route' => $edit_route,
'typeDocument' => $typeUtilisateur
),
),
*/
/*0=> array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCProjetsBundle:ProjetUtilisateur',
'champ' => 'setLibelle',
),
),
1=> array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCProjetsBundle:ProjetUtilisateur',
'champ' => 'setNumero',
),
),
2=> array(
'view' => 'FO/DataTable/edit_texte.html.twig',
'params' => array(
'objet' => 'DTCProjetsBundle:ProjetUtilisateur',
'champ' => 'setRue',
),
),
*/
3 => [
'view' => 'FO/DataTable/select_profil_equipe.html.twig',
'params' => [
'roles' => $roles,
'objet' => ProjetUtilisateur::class,
'champ' => 'setRole',
],
],
4 => ['view' => 'FO/DataTable/lien_mailto.html.twig'],
5 => ['view' => 'FO/DataTable/lien_tel.html.twig'],
6 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
//'edit_route' => $edit_route,
'supprimer_route' => 'dtc_projet_utilisateur_supprimer',
//'id' => $client->getId(),
'width_modal' => 900,
'type' => "liste",
'objet' => ProjetUtilisateur::class,
'table' => 'dta-referents-'.$typeUtilisateur,
],
],
];
if ($typeUtilisateur == 'contact') {
$renderers[1] = [
'view' => 'FO/DataTable/lien_modifier.html.twig',
'params' => [
'edit_route' => 'dtc_contact_modifier',
'id' => 0,
'type' => 'general',
'entite' => 'contact',
'table' => 'dta-referents-contact',
'objet' => Contact::class,
'visualiser' => 1,
],
];
$renderers[2] = [
'view' => 'FO/DataTable/lien_modifier.html.twig',
'params' => [
'edit_route' => 'dtc_contact_modifier',
'id' => 0,
'type' => 'general',
'entite' => 'contact',
'table' => 'dta-referents-contact',
'objet' => Contact::class,
'visualiser' => 1,
],
];
}
$datatable->setDatatableId($identifiant.$typeUtilisateur)
->setEntity(ProjetUtilisateur::class, "x")
->setFields(
[
"ID" => 'x.id',
$translator->trans("Nom") => 'u.nom',
$translator->trans("Prénom") => 'u.prenom',
$translator->trans("Rôle") => 'x.id',
$translator->trans("Email") => 'u.email',
$translator->trans("Tél") => 'u.telephone',
//$translator->trans("Skype") => 'u.skype',
"Actions" => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.projet', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.'.$typeUtilisateur, 'u', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->setWhere(
$type_jointure.' = :objet',
['objet' => $objet]
)
->setRenderers($renderers)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2, 3, 4]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/projetutilisateur/grid/{id}/{type}/{typeUtilisateur}", name="dtc_projet_utilisateur_liste_grid")
*/
public function gridAction(Request $request, $id = "", $type = "", $typeUtilisateur = "", Datatable $datatable, TranslatorInterface $translator, EntityManagerInterface $em)
{
if ($type == 'projet') {
$repo_objet = $em->getRepository(Projet::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'utilisateur') {
$repo_objet = $em->getRepository(Utilisateur::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'commande') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'fiche') {
$objet = $em->getRepository(Fiche::class)->find($id);
} elseif ($type == 'note') {
$objet = $em->getRepository(Note::class)->find($id);
}
return $this->datatable($datatable, $translator, $em, $objet, $type, $typeUtilisateur)->execute();
}
/**
* @Route("/projetutilisateur/supprimer/{id}", name="dtc_projet_utilisateur_supprimer")
*/
public function supprimerAction(Request $request, ProjetUtilisateur $projetUtilisateur, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator
) {
$user = $this->getUser();
$form = $this->createForm(SupprimerProjetUtilisateurType::class, $projetUtilisateur);
$projet = $projetUtilisateur->getProjet();
$commande = $projetUtilisateur->getCommande();
$fiche = $projetUtilisateur->getFiche();
$titre_modal = $translator->trans("Demande de confirmation");
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$type_json = "";
if ($form->isValid()) {
$em->remove($projetUtilisateur);
$em->flush();
$url = '#';
if (is_object($commande)) {
$url = $this->generateUrl('dtc_commande_modifier', ["id" => $commande->getId(), "tab" => "equipe"]);
} elseif (is_object($projet)) {
$url = $this->generateUrl('dtc_projet_modifier', ["id" => $projet->getId(), "tab" => "referents"]);
}
$table = $request->query->get('table');
$retour = ['rendu' => '', 'valide' => '1', 'url' => $url];
if ( ! empty($table)) {
$retour['type'] = 'recharger_datatable';
$retour['id_datatable'] = $table;
} else {
$this->addFlash(
'warning',
$translator->trans('Ce membre a été supprimé de l\'equipe!')
);
}
return new JsonResponse($retour);
//return new JsonResponse(array('type'=>$type_json,'rendu'=>'','valide'=>'1','url'=>$url), 200, array('Content-Type'=>'application/json'));
} else {
$errors = $validator->validate($projetUtilisateur);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $projetUtilisateur->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' => $projetUtilisateur->getId(), 'type' => '', 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}