<?php
namespace App\Controller\Remises;
use App\Entity\Clients\Client;
use App\Entity\Remises\CategorieRemiseClient;
use App\Entity\Remises\CategorieRemiseClientClient;
use App\Entity\Remises\CategorieRemiseClientRemise;
use App\Entity\Remises\Remise;
use App\Form\Remises\CategorieRemiseClientType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
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 CategorieRemiseClientController extends AbstractController
{
/**
* @Route("/remise/categorie-remise-client/nouveau", name="dtc_categorie_remise_client_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$remiseCategorieClient = new CategorieRemiseClient();
$user = $this->getUser();
$remiseCategorieClient->setUtilisateur($user);
$form = $this->createForm(CategorieRemiseClientType::class, $remiseCategorieClient);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->persist($remiseCategorieClient);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Remise catégorie client ajoutée avec succès !')
);
return $this->redirectToRoute('dtc_categorie_remise_client_liste');
} else {
$errors = $validator->validate($remiseCategorieClient);
}
}
return $this->render('Remises/CategorieRemiseClient/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/remise/categorie-remise-client/modifier/{id}", name="dtc_categorie_remise_client_modifier")
*/
public function modifierAction(Request $request, CategorieRemiseClient $remiseCategorieClient, EntityManagerInterface $em,
Datatable $datatable, TranslatorInterface $translator, ValidatorInterface $validator
) {
$user = $this->getUser();
$remiseCategorieClient->setUtilisateur($user);
$form = $this->createForm(CategorieRemiseClientType::class, $remiseCategorieClient);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, CategorieRemiseClient::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_categorie_remise_client_modifier', ["id" => $remiseCategorieClient->getId()]);
}
if ($form->isValid()) {
$em->persist($remiseCategorieClient);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Remise catégorie client sauvegardée avec succès !')
);
return $this->redirectToRoute('dtc_categorie_remise_client_modifier', ["id" => $remiseCategorieClient->getId()]);
} else {
$errors = $validator->validate($remiseCategorieClient);
}
}
$this->datatableClients($datatable, $translator, $remiseCategorieClient);
$this->datatableRemises($datatable, $translator, $remiseCategorieClient);
return $this->render('Remises/CategorieRemiseClient/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'categorieRemiseClient' => $remiseCategorieClient]);
}
/**
* @Route("/remise/categorie-remise-client", name="dtc_categorie_remise_client_liste")
*/
public function listerAction(Request $request, ColonneTableauService $serviceColonneTableau, Datatable $datatable, TranslatorInterface $translator)
{
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => true, "orderable" => false];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [1],
"visible" => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseClient::class, "id"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseClient::class, "reference"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseClient::class, "libelle"),
];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [4], "visible" => true];
$this->datatable($datatable, $translator);
return $this->render('Remises/CategorieRemiseClient/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setEntity(CategorieRemiseClient::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
//->addJoin('x.documentCommercial', 'd', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_categorie_remise_client_modifier',
],
],
3 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_categorie_remise_client_modifier',
'objet' => CategorieRemiseClient::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => 'Non disponible',
'route' => 'dtc_categorie_remise_client_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/remise/categorie-remise-client/grid", name="dtc_categorie_remise_client_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($datatable, $translator)->execute();
}
/**
* @Route("/remise/checkbox/client/categorie", name="dtc_categorie_remise_client_client_checkbox")
*/
public function listerCategorieRemiseClientCheckboxAction(Request $request, $client = [], EntityManagerInterface $em)
{
$id = '';
$repo_client = $em->getRepository(Client::class);
$repo_categorie_remise = $em->getRepository(CategorieRemiseClient::class);
$repo_client_categorie_remise = $em->getRepository(CategorieRemiseClientClient::class);
$id = $request->query->get('id');
$url = $this->generateUrl('dtc_categorie_remise_client_client_checkbox', []);
if ($request->query->get('client') != '') {
$client = $repo_client->find($request->query->get('client'));
}
//$categories = $repo_categorie_remise->listeCategories();
$categories = $repo_categorie_remise->getCategorieRemiseClient();
$tabCategories = [];
foreach ($categories as $c) {
$c['checked'] = 0;
//$c['totalSousCategorie'] = count($repo_categorie_remise->findBy(array("categorieParent"=>$c)));
$c['totalSousCategorie'] = 0;
$c['selection'] = 0;
$tmp = $repo_categorie_remise->find($c['id']);
if (is_object($client) and is_object($repo_client_categorie_remise->findOneBy(['client' => $client, 'categorieRemiseClient' => $tmp]))) {
$c['checked'] = 1;
}
$tabCategories[] = $c;
}
$categories = $tabCategories;
return $this->render(
'Remises/CategorieRemiseClient/checkbox.html.twig',
['categories' => $categories, 'client' => $client, 'url' => $url, 'objet' => 'client', 'name' => 'categories_remise']
);
}
/**
* @Route("", name="")
*/
public function listerCategorieRemiseClientPourRemiseCheckboxAction(Request $request, $remise = [], EntityManagerInterface $em)
{
$id = '';
$repo_remise = $em->getRepository(Remise::class);
$repo_categorie_remise = $em->getRepository(CategorieRemiseClient::class);
$repo_remise_categorie_remise = $em->getRepository(CategorieRemiseClientRemise::class);
$id = $request->query->get('id');
$url = $this->generateUrl('dtc_categorie_remise_client_client_checkbox', []);
if ($request->query->get('client') != '') {
$remise = $repo_remise->find($request->query->get('remise'));
}
//$categories = $repo_categorie_remise->listeCategories();
$categories = $repo_categorie_remise->getCategorieRemiseClient();
$tabCategories = [];
foreach ($categories as $c) {
$c['checked'] = 0;
//$c['totalSousCategorie'] = count($repo_categorie_remise->findBy(array("categorieParent"=>$c)));
$c['totalSousCategorie'] = 0;
$c['selection'] = 0;
$tmp = $repo_categorie_remise->find($c['id']);
if (is_object($remise) and is_object($repo_remise_categorie_remise->findOneBy(['remise' => $remise, 'categorieRemiseClient' => $tmp]))) {
$c['checked'] = 1;
}
$tabCategories[] = $c;
}
$categories = $tabCategories;
return $this->render(
'Remises/CategorieRemiseClient/checkbox.html.twig',
['categories' => $categories, 'client' => $remise, 'url' => $url, 'objet' => 'client', 'name' => 'categories_remise']
);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableClients(Datatable $datatable, TranslatorInterface $translator, $categorieRemiseClient)
{
$datatable->setDatatableId('dta-clients')
->setEntity(Client::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Nom") => 'x.nom',
$translator->trans("Prénom") => 'x.prenom',
$translator->trans("Téléphone") => 'x.telephone',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
//->addJoin('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.categorieRemiseClientClient', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere( // set your dql where statement
'm.categorieRemiseClient = :categorieRemiseClient',
['categorieRemiseClient' => $categorieRemiseClient]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_client_modifier',
],
],
5 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_client_modifier',
'objet' => Client::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([2, 3, 4]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/remise/categorie-remise-client/clients/grid/{id}", name="dtc_categorie_remise_client_client_liste_grid")
*/
public function gridClientsAction(Request $request, CategorieRemiseClient $categorieRemiseClient, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableClients($datatable, $translator, $categorieRemiseClient)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableRemises(Datatable $datatable, TranslatorInterface $translator, $categorieRemiseClient)
{
$datatable->setDatatableId('dta-remises')
->setEntity(Remise::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Libelle") => 'x.libelle',
$translator->trans("Remise") => 'x.montant',
$translator->trans("Client") => 'c.nom',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.categorieRemiseClientRemise', 'ra', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.client', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere( // set your dql where statement
'ra.categorieRemiseClient = :categorieRemiseClient',
['categorieRemiseClient' => $categorieRemiseClient]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_remise_modifier',
],
],
2 => [
'view' => 'FO/DataTable/pourcentage.html.twig',
],
4 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_remise_modifier',
'objet' => Remise::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/remise/categorie-remise-client/remises/grid/{id}", name="dtc_categorie_remise_client_remise_liste_grid")
*/
public function gridRemisesAction(Request $request, CategorieRemiseClient $categorieRemiseClient, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableRemises($datatable, $translator, $categorieRemiseClient)->execute();
}
}