<?php
namespace App\Controller\Remises;
use App\Entity\Articles\Article;
use App\Entity\Remises\CategorieRemiseArticle;
use App\Entity\Remises\CategorieRemiseArticleRemise;
use App\Entity\Remises\Remise;
use App\Form\Remises\CategorieRemiseArticleType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Utilisateur\ColonneTableauService;
use Doctrine\ORM\EntityManagerInterface;
use JMS\Serializer\SerializerBuilder;
use Knp\Component\Pager\PaginatorInterface;
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 CategorieRemiseArticleController extends AbstractController
{
/**
* @Route("/remise/categorie-remise-article/nouveau", name="dtc_categorie_remise_article_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$categorieRemiseArticle = new CategorieRemiseArticle();
$user = $this->getUser();
$categorieRemiseArticle->setUtilisateur($user);
$form = $this->createForm(CategorieRemiseArticleType::class, $categorieRemiseArticle);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->persist($categorieRemiseArticle);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Remise catégorie article ajoutée avec succès !')
);
return $this->redirectToRoute('dtc_categorie_remise_article_liste');
} else {
$errors = $validator->validate($categorieRemiseArticle);
}
}
return $this->render('Remises/CategorieRemiseArticle/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/remise/categorie-remise-article/modifier/{id}", name="dtc_categorie_remise_article_modifier")
*/
public function modifierAction(Request $request, CategorieRemiseArticle $categorieRemiseArticle, EntityManagerInterface $em,
TranslatorInterface $translator, ValidatorInterface $validator, Datatable $datatable
) {
$user = $this->getUser();
$categorieRemiseArticle->setUtilisateur($user);
$form = $this->createForm(CategorieRemiseArticleType::class, $categorieRemiseArticle);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, CategorieRemiseArticle::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_categorie_remise_article_modifier', ["id" => $categorieRemiseArticle->getId()]);
}
if ($form->isValid()) {
$em->persist($categorieRemiseArticle);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Remise catégorie article sauvegardée avec succès !')
);
return $this->redirectToRoute('dtc_categorie_remise_article_modifier', ["id" => $categorieRemiseArticle->getId()]);
} else {
$errors = $validator->validate($categorieRemiseArticle);
}
}
$this->datatableProduits($datatable, $translator, $categorieRemiseArticle);
$this->datatableRemises($datatable, $translator, $categorieRemiseArticle);
return $this->render(
'Remises/CategorieRemiseArticle/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'categorieRemiseArticle' => $categorieRemiseArticle]
);
}
/**
* @Route("/remise/categorie-remise-article", name="dtc_categorie_remise_article_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(CategorieRemiseArticle::class, "id"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseArticle::class, "reference"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseArticle::class, "libelle"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [4],
"visible" => $serviceColonneTableau->getColonneUtilisateur(CategorieRemiseArticle::class, "libelle"),
];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [5], "visible" => true];
$this->datatable($datatable, $translator);
return $this->render('Remises/CategorieRemiseArticle/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(CategorieRemiseArticle::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Marque") => 'm.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_categorie_remise_article_modifier',
],
],
4 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_categorie_remise_article_modifier',
'objet' => CategorieRemiseArticle::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => 'Non disponible',
'route' => 'dtc_categorie_remise_article_liste',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2, 3]);
//$datatable->setSearchFields(array(0,2));
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/remise/categorie-remise-article/grid", name="dtc_categorie_remise_article_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($datatable, $translator)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableProduits(Datatable $datatable, TranslatorInterface $translator, $categorieRemiseArticle)
{
$datatable->setDatatableId('dta-produits')
->setEntity(Article::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Img") => 'x.reference',
$translator->trans("Réf") => 'x.reference',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Marque") => 'm.libelle',
$translator->trans("Desc courte") => 'x.descriptionCourte',
$translator->trans("Prix HT") => 'x.prixVente',
$translator->trans("Prix TTC") => 'x.prixVente',
$translator->trans("Marge") => 'x.marge',
$translator->trans("Cpump") => 'x.cpump',
$translator->trans("Stock") => 'x.stock',
$translator->trans("Statut Internet") => 'x.statut',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
//->addJoin('x.categorieRemiseArticle', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere( // set your dql where statement
'x.categorieRemiseArticle = :categorieRemiseArticle',
['categorieRemiseArticle' => $categorieRemiseArticle]
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_article_modifier',
],
],
1 => [
'view' => 'FO/DataTable/image.html.twig',
'params' => [
'edit_route' => 'dtc_article_modifier',
],
],
6 => [
'view' => 'FO/DataTable/prixSuivi.html.twig',
'params' => [
'surveillance' => false,
],
],
7 => [
'view' => 'FO/DataTable/prix_article_ttc.html.twig',
],
8 => [
'view' => 'FO/DataTable/prix.html.twig',
],
9 => [
'view' => 'FO/DataTable/prix.html.twig',
],
11 => [
'view' => 'FO/DataTable/statut.html.twig',
'params' => [
'edit_route' => 'dtc_article_changer_statut',
],
],
12 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_article_modifier',
'dupliquer_route' => 'dtc_article_dupliquer',
'objet' => Article::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-article/produits/grid/{id}", name="dtc_categorie_remise_article_article_liste_grid")
*/
public function gridProduitsAction(Request $request, CategorieRemiseArticle $categorieRemiseArticle, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatableProduits($datatable, $translator, $categorieRemiseArticle)->execute();
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableRemises(Datatable $datatable, TranslatorInterface $translator, $categorieRemiseArticle)
{
$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.categorieRemiseArticleRemise', '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.categorieRemiseArticle = :categorieRemiseArticle',
['categorieRemiseArticle' => $categorieRemiseArticle]
)
->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-article/remises/grid/{id}", name="dtc_categorie_remise_article_remise_liste_grid")
*/
public function gridRemisesAction(Request $request, CategorieRemiseArticle $categorieRemiseArticle, Datatable $datatable, TranslatorInterface $translator
) {
return $this->datatableRemises($datatable, $translator, $categorieRemiseArticle)->execute();
}
/**
* @Route("", name="")
*/
public function listerCategorieRemiseArticlePourRemiseCheckboxAction(Request $request, $remise = [], EntityManagerInterface $em)
{
$id = '';
$repo_remise = $em->getRepository(Remise::class);
$repo_categorie_remise = $em->getRepository(CategorieRemiseArticle::class);
$repo_remise_categorie_remise = $em->getRepository(CategorieRemiseArticleRemise::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->getCategorieRemiseArticle();
$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, 'categorieRemiseArticle' => $tmp]))) {
$c['checked'] = 1;
$tes = $repo_remise_categorie_remise->findOneBy(['remise' => $remise, 'categorieRemiseArticle' => $c]);
}
$tabCategories[] = $c;
}
$categories = $tabCategories;
return $this->render(
'Remises/CategorieRemiseArticle/checkbox.html.twig',
['categories' => $categories, 'client' => $remise, 'url' => $url, 'objet' => 'client', 'name' => 'categories_remise_article']
);
}
/**
* @Route("/remise/categorie-remise-article/recherche", name="dtc_categorie_remise_article_recherche")
*/
public function rechercheAction(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator)
{
$q = $request->query->get('q');
$repo = $em->getRepository(CategorieRemiseArticle::class);
$results = $repo->getRechercheCategorieRemiseArticle($q);
$pagination = $paginator->paginate(
$results, /* query NOT result */
$request->query->getInt('page', 1)/*page number*/,
10/*limit per page*/
);
$pagination_results = $pagination->getItems();
$option_placeholde = ["libelle" => "Sélectionnez", "id" => ""];
array_unshift($pagination_results, $option_placeholde);
$pagination->setItems($pagination_results);
$serializer = SerializerBuilder::create()->build();
return JsonResponse::fromJsonString($serializer->serialize($pagination, 'json'));
}
}