<?php
namespace App\Controller\Notes;
use App\Entity\Articles\Article;
use App\Entity\Clients\Client;
use App\Entity\Fournisseurs\Fournisseur;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\CommandeFournisseur;
use App\Entity\Inventaires\Inventaire;
use App\Entity\Litiges\Litige;
use App\Entity\Notes\Categorie;
use App\Entity\Notes\Note;
use App\Library\Datatable\Util\Datatable;
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\Form\FormError;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class NoteObjetController extends AbstractController
{
/**
* @Route("", name="")
*/
public function listerAction(Request $request, $id, $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
$visibilite_colonne_commande_client = true;
$visibilite_colonne_client = true;
$visibilite_colonne_commande_fournisseur = true;
$visibilite_colonne_fournisseur = true;
if ($type == 'commandeFournisseur') {
$repo_objet = $em->getRepository(CommandeFournisseur::class);
$objet = $repo_objet->find($id);
$visibilite_colonne_commande_client = false;
$visibilite_colonne_client = false;
$visibilite_colonne_commande_fournisseur = false;
$visibilite_colonne_fournisseur = true;
} elseif ($type == 'commande') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$visibilite_colonne_commande_client = false;
$visibilite_colonne_client = true;
$visibilite_colonne_commande_fournisseur = false;
$visibilite_colonne_fournisseur = false;
} elseif ($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
$visibilite_colonne_commande_client = true;
$visibilite_colonne_client = false;
$visibilite_colonne_commande_fournisseur = false;
$visibilite_colonne_fournisseur = false;
} elseif ($type == 'article') {
$repo_objet = $em->getRepository(Article::class);
$objet = $repo_objet->find($id);
$visibilite_colonne_commande_client = true;
$visibilite_colonne_client = false;
$visibilite_colonne_commande_fournisseur = false;
$visibilite_colonne_fournisseur = false;
} elseif ($type == 'fournisseur') {
$repo_objet = $em->getRepository(Fournisseur::class);
$objet = $repo_objet->find($id);
$visibilite_colonne_commande_client = false;
$visibilite_colonne_client = false;
$visibilite_colonne_commande_fournisseur = true;
$visibilite_colonne_fournisseur = false;
} elseif ($type == 'inventaire') {
$repo_objet = $em->getRepository(Inventaire::class);
$objet = $repo_objet->find($id);
$visibilite_colonne_commande_client = false;
$visibilite_colonne_client = false;
$visibilite_colonne_commande_fournisseur = true;
$visibilite_colonne_fournisseur = false;
}
// echo "TEST";
$tableau_class_cellule = [];
// $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(0),"visible"=>true,"orderable"=>false,"searchable"=> false);
// $tableau_class_cellule[]=array("className"=>"colonne_id","targets"=>array(1),"visible"=>true,"orderable"=>false,"searchable"=> false);
// $tableau_class_cellule[]=array("className"=>"colonne_id text-center","targets"=>array(2),"visible"=>true,"orderable"=>false,"searchable"=> false);
$tableau_class_cellule[] = ["className" => "colonne_id text-center", "targets" => [0], "visible" => false, "orderable" => false, "searchable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id text-center", "targets" => [1], "visible" => true, "orderable" => false, "searchable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id ", "targets" => [2], "visible" => $visibilite_colonne_client, "orderable" => false, "searchable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id ", "targets" => [3], "visible" => $visibilite_colonne_commande_client, "orderable" => false, "searchable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id ", "targets" => [4], "visible" => $visibilite_colonne_fournisseur, "orderable" => false, "searchable" => false];
$tableau_class_cellule[] = [
"className" => "colonne_id ",
"targets" => [5],
"visible" => $visibilite_colonne_commande_fournisseur,
"orderable" => false,
"searchable" => false,
];
$tableau_class_cellule[] = ["className" => "colonne_id ", "targets" => [6], "visible" => true, "orderable" => false, "searchable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id ", "targets" => [7], "visible" => true, "orderable" => false, "searchable" => true];
$tableau_class_cellule[] = ["className" => "colonne_id ", "targets" => [8], "visible" => true, "orderable" => false, "searchable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id text-center", "targets" => [9], "visible" => true, "orderable" => false, "searchable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id ", "targets" => [10], "visible" => true, "orderable" => false, "searchable" => false];
$tableau_class_cellule[] = ["className" => "colonne_id ", "targets" => [11], "visible" => true, "orderable" => false, "searchable" => false];
$this->datatable($request, $datatable, $translator, $objet, $type);
$listeCategorieNote = $em->getRepository(Categorie::class)->findBy([], ["libelle" => "asc"]);
return $this->render(
'Notes/NoteObjet/lister.html.twig',
['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type, 'listeCategorieNote' => $listeCategorieNote]
);
}
/**
* 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();
$user = $this->getUser();
$datatable->setDatatableId('dta-notes-objet')
->setEntity(Note::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Date échéance") => 'x.dateDebut',
$translator->trans("Client") => 'cl.nom',
$translator->trans("Commande") => 'cmde.reference',
$translator->trans("Fournisseur") => 'f.libelle',
$translator->trans("Commande F") => 'cmdeF.reference',
$translator->trans("Titre") => 'x.libelle',
$translator->trans("Type") => 'cn.libelle',
$translator->trans("Contact") => 'c.nom',
$translator->trans("Statut") => 's.libelle',
$translator->trans("Auteur") => 'u.nom',
$translator->trans("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.commande', 'cmde', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commandeFournisseur', 'cmdeF', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_client_modifier',
'typeDocument' => 'client',
],
],
3 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_modifier',
'typeDocument' => 'commande',
],
],
4 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_fournisseur_modifier',
'typeDocument' => 'fournisseur',
],
],
5 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_fournisseur_modifier',
'typeDocument' => 'commandeFournisseur',
],
],
6 => [
'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,
],
],
7 => [
'view' => 'FO/DataTable/type_activite.html.twig',
'params' => [],
],
8 => [
'view' => 'FO/DataTable/contact.html.twig',
'params' => [],
],
10 => [
'view' => 'FO/DataTable/utilisateur.html.twig',
'params' => [],
],
11 => [
'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' => "dta-notes-objet",
],
],
]
)
->setOrder("x.dateDebut", "desc")
->setSearch(true)
->setSearchFields([2, 3, 4, 5, 7])/*
->setMultiple(
array(
'delete' => array(
'title' => $translator->trans('Non disponible'),
'route' => 'dtc_commande_liste_supprimer' ),
)
)
*/
;
$where = "";
$where = "(x.prive = :prive OR x.prive IS NULL OR x.utilisateur = :utilisateur) AND (x.categorie != :categorieintervention or x.categorie is null) AND x.statut = :statut";
$parameters = ["prive" => 0, "utilisateur" => $user, "categorieintervention" => 8, 'statut' => 1];
$where = $type_jointure." = :objet AND (x.categorie != :categorieintervention or x.categorie IS NULL) and (x.modifiable is null or x.modifiable=1)";
$parameters = ["categorieintervention" => 8, 'objet' => $objet];
if (array_key_exists('parametres', $param)) {
if (array_key_exists('affaire', $param["parametres"]) and $param["parametres"]["affaire"] > 0) {
$parameters["affaire"] = $param["parametres"]["affaire"];
if ($where != "") {
$where .= " AND";
}
$where .= " x.fiche >= :affaire";
}
if (array_key_exists('client', $param["parametres"]) and $param["parametres"]["client"] > 0) {
//$datatable->addJoin('x.client', 'client', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$parameters["client"] = $param["parametres"]["client"];
if ($where != "") {
$where .= " AND ";
}
$where .= "x.client = :client";
}
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.dateDebut >= :debut";
}
if (array_key_exists('equipiers', $param["parametres"]) and count($param["parametres"]["equipiers"]) > 0) {
if ($where != "") {
$where .= " AND";
}
$where .= " x.utilisateur IN (:equipiers) AND (x.prive = :prive OR x.prive IS NULL OR x.utilisateur = :utilisateur)";
$parameters["equipiers"] = $param["parametres"]["equipiers"];
$parameters["utilisateur"] = $user;
$parameters["prive"] = 0;
//echo "AAAA";
}
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.dateDebut <= :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 != '') {
//echo $where."<br/><br/>";
//print_r($param) ;
//exit;
$datatable->setWhere($where, $parameters);
}
return $datatable;
}
private function ____datatable(Datatable $datatable, TranslatorInterface $translator, $objet = "", $type = "")
{
$type_jointure = 'x.'.$type;
$where = "";
$parametres_where = [];
$where = $type_jointure.' = :objet';
$parametres_where = ['objet' => $objet];
$datatable->setDatatableId('dta-notes-objet')
->setEntity(Litige::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Commande client") => 'c.reference',
$translator->trans("Client") => 'cl.reference',
$translator->trans("Commande fournisseur") => 'cf.reference',
$translator->trans("Fournisseur") => 'f.reference',
$translator->trans("Référence") => 'x.reference',
$translator->trans("Montant") => 'x.montant',
$translator->trans("Clôturé") => 'x.statut',
$translator->trans("Commentaire") => 'x.commentaire',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.commande', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.client', 'cl', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.fournisseur', 'f', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.commandeFournisseur', 'cf', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/date.html.twig',
'params' => [],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_modifier',
'typeDocument' => 'commande',
],
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_client_modifier',
'typeDocument' => 'client',
],
],
3 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_commande_fournisseur_modifier',
'typeDocument' => 'commandeFournisseur',
],
],
4 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_fournisseur_modifier',
'typeDocument' => 'fournisseur',
],
],
6 => [
'view' => 'FO/DataTable/prix.html.twig',
'params' => [],
],
7 => [
'view' => 'FO/DataTable/statut.html.twig',
'params' => [
'edit_route' => 'dtc_litige_statut',
],
],
9 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_litige_modifier',
'supprimer_route' => 'dtc_litige_supprimer',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'adresse',
'objet' => Litige::class,
'table' => "dta-notes-objet",
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1]);
if ($where != "") {
$datatable->setWhere($where, $parametres_where);
}
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/note-objet/grid/{id}/{type}", name="dtc_note_objet_liste_grid")
*/
public function gridAction(Request $request, $id = "", $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ($type == 'commandeFournisseur') {
$repo_objet = $em->getRepository(CommandeFournisseur::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'commande') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'fournisseur') {
$repo_objet = $em->getRepository(Fournisseur::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'article') {
$repo_objet = $em->getRepository(Article::class);
$objet = $repo_objet->find($id);
} elseif ($type == 'inventaire') {
$repo_objet = $em->getRepository(Inventaire::class);
$objet = $repo_objet->find($id);
}
return $this->datatable($request, $datatable, $translator, $objet, $type)->execute();
}
/**
* @Route("", name="")
*/
public function chargerTableauTachesClientAction(Request $request, Client $client, EntityManagerInterface $em)
{
$listeCategorieNote = $em->getRepository(Categorie::class)->findBy([], ["libelle" => "asc"]);
$rendu = $this->renderView('Notes/NoteObjet/charger_tableau.html.twig', ["client" => $client, "listeCategorieNote" => $listeCategorieNote]);
return new JsonResponse(['rendu' => $rendu]);
}
/**
* @Route("", name="")
*/
public function chargerTableauNotesModalClientAction(Request $request, Client $client)
{
$rendu = $this->renderView('Notes/Note/charger_tableau_note_modal.html.twig', ["client" => $client]);
return new JsonResponse(['rendu' => $rendu]);
}
/**
* @Route("", name="")
*/
public function listerNoteModalClientAction(Request $request, Client $client, Datatable $datatableNotes, TranslatorInterface $translator)
{
$tableau_class_cellule = [];
$this->datatableNotes($datatableNotes, $translator, $client);
return $this->render('Notes/Note/lister_note_modal.html.twig', ['tableauClassColonne' => $tableau_class_cellule, 'client' => $client]);
}
private function datatableNotes(Datatable $datatableNotes, TranslatorInterface $translator, $client)
{
$user = $this->getUser();
$datatableNotes->setDatatableId('dta-notes-clients')
->setEntity(Note::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Message") => 'x.message',
$translator->trans("Cat") => 'cn.libelle',
$translator->trans("Contact") => 'c.nom',
$translator->trans("Date") => 'x.dateSaisie',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.categorie', 'cn', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.contact', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
'x.client = :client'
, ['client' => $client]
)
->setGroupBy('x.id')
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/titre_note.html.twig',
'params' => [],
],
2 => [
'view' => 'FO/DataTable/contact.html.twig',
'params' => [],
],
3 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
4 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_note_modifier',
'supprimer_route' => 'dtc_note_supprimer',
'id' => $client->getId(),
'type' => "client",
'objet' => Note::class,
'width_modal' => 900,
],
],
]
)
->setOrder("x.dateSaisie", "desc")
->setSearch(true)
->setSearchFields([1]);
$where = "x.client = :client AND (x.prive = :prive OR x.prive IS NULL or x.utilisateur = :utilisateur)";
$parameters = ["prive" => 0, "utilisateur" => $user, 'client' => $client];
$datatableNotes->setWhere($where, $parameters);
return $datatableNotes;
}
}