<?php
namespace App\Controller\Clients;
use App\Entity\Clients\Client;
use App\Form\Clients\ClientEnfantType;
use App\Form\Clients\SupprimerClientType;
use App\Library\Datatable\Util\Datatable;
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 ClientEnfantController extends AbstractController
{
/**
* @Route("/client-enfants/nouveau/{id}/{type}", name="dtc_client_enfant_ajouter")
*/
public function ajouterAction(Request $request, $id,$type="", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal =$translator->trans("Nouvelle entité client enfant");
$page = $request->query->get('page');
$clientEnfant = new Client;
$clientEnfant->setNom("Vide");
$user = $this->getUser();
$get = $request->query->all();
$form = $this->createForm(ClientEnfantType::class, $clientEnfant);
$errors = "";
$errorsSup = [];
$form->handleRequest($request);
if ($form->isSubmitted()) {
$post = $request->request->all();
if ($form->isValid() && is_object($clientEnfant->getParent())) {
if($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
$clientEnfant->getParent()->setParent($objet);
$url = $this->generateUrl('dtc_client_modifier', ['id' => $objet->getId(), 'tab' =>'enfant']);
}
$em->persist($clientEnfant->getParent());
$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"]], 200, ['Content-Type' =>'application/json']
);
}
else {
$this->addFlash('notice',$translator->trans('Entité enfant ajoutée avec succès !'));
return new JsonResponse(['rendu' =>'', 'valide' =>'1', 'url' =>$url], 200, ['Content-Type' =>'application/json']);
}
}
else {
$errors = $validator->validate($clientEnfant);
if(!is_object($clientEnfant->getParent())) {
$errorsSup[] = 'Merci de sélectionner un client';
}
$rendu = $this->renderView('Clients/ClientEnfant/ajouter.html.twig', ['form' => $form->createView(), 'errors' =>$errors, 'id' =>$id, 'type' =>$type, 'errorsSup' =>$errorsSup]
);
return new JsonResponse(['rendu' =>$rendu, 'valide' =>'0', 'url' =>'', 'titre' =>$titre_modal], 200, ['Content-Type' =>'application/json']);
}
}
$repo_objet = $em->getRepository(Client::class);
$client = $repo_objet->find($id);
$rendu = $this->renderView('Clients/ClientEnfant/ajouter.html.twig', ['form' => $form->createView(), 'errors' =>$errors, 'id' =>$id, 'type' =>$type, 'client' =>$client, 'errorsSup' =>$errorsSup]
);
return new JsonResponse(['rendu' =>$rendu, 'valide' =>'0', 'url' =>'', 'titre' =>$titre_modal], 200, ['Content-Type' =>'application/json']);
}
/**
* @Route("/client-enfants/supprimer/{objet}/{id}/{type}", name="dtc_client_enfant_supprimer")
*/
public function supprimerAction(Request $request, Client $objet,$id,$type, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator) {
$clientEnfant = $objet;
$titre_modal =$translator->trans("Demande de confirmation");
$user = $this->getUser();
$get = $request->query->all();
$form = $this->createForm(SupprimerClientType::class, $clientEnfant);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$clientEnfant->setParent(NULL);
$em->persist($clientEnfant);
$em->flush();
if($type == 'client') {
$url = $this->generateUrl('dtc_client_modifier', ['id' => $id, 'tab' =>'enfant']);
}
if (array_key_exists('table', $get) && $get["table"]!="") {
return new JsonResponse(['rendu' =>'', 'valide' =>'1', 'url' =>$url, 'type' =>'recharger_datatable', 'id_datatable' =>$get["table"]], 200, ['Content-Type' =>'application/json']
);
}
else {
$this->addFlash('notice',$translator->trans('Entité enfant supprimée avec succès !'));
return new JsonResponse(['rendu' =>'', 'valide' =>'1', 'url' =>$url], 200, ['Content-Type' =>'application/json']);
}
}
else {
$errors = $validator->validate($clientEnfant);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' =>$errors, 'id' =>$id, 'type' =>$type, 'objet' =>$objet]);
return new JsonResponse(['rendu' =>$rendu, 'valide' =>'0', 'url' =>'', 'titre' =>$titre_modal], 200, ['Content-Type' =>'application/json']);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' =>$errors, 'id' =>$id, 'type' =>$type, 'objet' =>$objet]);
return new JsonResponse(['rendu' =>$rendu, 'valide' =>'0', 'url' =>'', 'titre' =>$titre_modal], 200, ['Content-Type' =>'application/json']);
}
/**
* @Route("", name="")
*/
public function listerAction(Request $request, $id,$type="", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
}
$tableau_class_cellule[]= ["className" =>"visible_export colonne_id", "targets" => [0], "visible" =>true, "orderable" =>true, "searchable" => true];
$tableau_class_cellule[]= ["orderable" =>false, "className" =>"colonne_id", "targets" => [1], "visible" =>true, "orderable" =>false];
//$tableau_class_cellule = array();
$this->datatable($objet,$type, $datatable, $translator);
return $this->render('Clients/ClientEnfant/lister.html.twig', ['tableauClassColonne' =>$tableau_class_cellule, "id" =>$id, "type" =>$type]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable($objet,$type="", Datatable $datatable, TranslatorInterface $translator)
{
//$type_jointure = 'x.'.$type;
$type_jointure = 'x.parent';
$datatable ->setDatatableId('dta-clients-enfants')
->setEntity(Client::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Nom") => 'x.nom',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id'
]
)
//->addJoin('x.ville', 'v', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.codePostal', 'cp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.pays', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
$type_jointure.' = :objet',
['objet' => $objet]
)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
//'edit_route' => 'dtc_client_enfant_modifier',
'supprimer_route' => 'dtc_client_enfant_supprimer',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'clientEnfant',
'objet' => Client::class,
'table' => "dta-clients-enfants",
],
],
/*
8=> array(
'view' => 'FO/DataTable/booleen.html.twig',
'params' => array(
),
),
9=> array(
'view' => 'FO/DataTable/booleen.html.twig',
'params' => array(
),
),
10=> array(
'view' => 'FO/DataTable/booleen.html.twig',
'params' => array(
),
),
11 => array(
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => array(
'edit_route' => 'dtc_client_enfant_modifier',
'supprimer_route' => 'dtc_client_enfant_supprimer',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'adresse',
'objet' => "DTCClientsBundle:Client",
'table' => "dta-clients-enfants",
'history' => true,
'visualiser_route' => 'dtc_client_enfant_visualiser_map'
),
),
*/
]
)
->setOrder("x.id", "asc")
->setSearch(true)
->setSearchFields([])
;
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/client-enfants/grid/{id}/{type}", name="dtc_client_enfant_liste_grid")
*/
public function gridAction(Request $request, $id="",$type="", Datatable $datatable, TranslatorInterface $translator)
{
if($type == 'client') {
$repo_objet = $em->getRepository(Client::class);
$objet = $repo_objet->find($id);
}
return $this->datatable($objet,$type, $datatable, $translator)->execute();
}
}