<?php
namespace App\Controller\Vehicules;
use App\Entity\Articles\Article;
use App\Entity\Vehicules\Application;
use App\Entity\Vehicules\Type;
use App\Form\Vehicules\ApplicationType;
use App\Form\Vehicules\SupprimerApplicationType;
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 ApplicationController extends AbstractController
{
/**
* @Route("/application/nouveau/{id}/{type}", name="dtc_application_ajouter")
*/
public function ajouterAction(Request $request, $id, $type = "", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = "Nouvelle application";
$application = new Application();
$user = $this->getUser();
$application->setUtilisateur($user);
$form = $this->createForm(ApplicationType::class, $application);
$errors = "";
$form->handleRequest($request);
$repo_article = $em->getRepository(Article::class);
$article = $repo_article->find($id);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if ($type == 'type') {
$repo_objet = $em->getRepository(Type::class);
$objet = $repo_objet->find($id);
$application->setType($objet);
if (is_object($objet->getMarque())) {
$application->setMarque($objet->getMarque());
}
if (is_object($objet->getModele())) {
$application->setModele($objet->getModele());
}
$url = $this->generateUrl('dtc_vehicule_type_modifier', ['id' => $objet->getId(), 'tab' => 'applications']);
} elseif ($type == 'article') {
$application->setArticle($article);
$url = $this->generateUrl('dtc_article_modifier', ['id' => $article->getId(), 'tab' => 'applications']);
}
$em->persist($application);
$em->flush();
$this->addFlash(
'notice',
'Application ajoutée avec succès !'
);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($application);
$rendu = $this->renderView('Vehicules/Application/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('Vehicules/Application/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'article' => $article]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/application/supprimer/{objet}/{id}/{type}", name="dtc_application_supprimer")
*/
public function supprimerAction(Request $request, Application $objet, $id, $type, EntityManagerInterface $em, ValidatorInterface $validator)
{
$application = $objet;
$titre_modal = "Demande de confirmation";
$user = $this->getUser();
$form = $this->createForm(SupprimerApplicationType::class, $application);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($application);
$em->flush();
$this->addFlash(
'notice',
'Application supprimée avec succès !'
);
if ($type == 'type') {
$url = $this->generateUrl('dtc_vehicule_type_modifier', ['id' => $id, 'tab' => 'applications']);
} elseif ($type == 'article') {
$url = $this->generateUrl('dtc_article_modifier', ['id' => $id, 'tab' => 'applications']);
}
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url], 200, ['Content-Type' => 'application/json']);
} else {
$errors = $validator->validate($application);
$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]);
}
}
$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]);
}
/**
* @Route("", name="")
*/
public function listerAction(Request $request, $id, $type = "", $param = [], EntityManagerInterface $em, Datatable $datatable)
{
if ($type == 'type') {
$repo_objet = $em->getRepository(Type::class);
$objet = $repo_objet->find($id);
}
$this->datatable($request, $datatable, $objet, $type);
return $this->render('Vehicules/Application/lister.html.twig', ["id" => $id, "type" => $type, "param" => $param]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Request $request, Datatable $datatable, $objet, $type = "")
{
$parametres = $request->query->all();
if (array_key_exists('param', $parametres)) {
$param['parametres'] = $parametres["param"];
} else {
$param['parametres'] = [];
}
$type_jointure = 'x.'.$type;
$parametres = [];
$where = $type_jointure.' = :objet ';
$parametres["objet"] = $objet;
$datatable->setDatatableId('dta-applications')
->setEntity(Application::class, "x");
$datatable->addJoin('x.article', 'a', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN);
if (array_key_exists('categorie_article', $param['parametres']) and $param['parametres']['categorie_article'] != "") {
$datatable->addJoin('a.articleCategorie', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('ac.categorie', 'cat', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
//$qb->join('a.articleCategorie', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat.id = :categorie";
$parametres['categorie'] = $param['parametres']['categorie_article'];
if (array_key_exists('sous_categorie_article', $param['parametres']) and $param['parametres']['sous_categorie_article'] != "") {
$datatable->addJoin('a.articleCategorie', 'ac2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$datatable->addJoin('ac2.categorie', 'cat2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
//$qb->join('a.articleCategorie', 'ac2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
//$qb->join('ac2.categorie', 'cat2', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND cat2.id = :categorie2";
$parametres['categorie2'] = $param['parametres']['sous_categorie_article'];
}
}
if (array_key_exists('marque', $param['parametres']) and $param['parametres']['marque'] != "") {
//$qb->join('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND a.marque = :marque";
$parametres['marque'] = $param['parametres']['marque'];
}
if (array_key_exists('type', $param['parametres']) and $param['parametres']['type'] != "") {
//$qb->join('x.marque', 'm', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN);
$where .= " AND a.type = :type";
$parametres['type'] = $param['parametres']['type'];
}
$datatable
->setFields(
[
"Réf" => 'a.reference',
"Libellé" => 'a.libelle',
"Stock" => 'a.stock',
"Actions" => 'x.id',
"_identifier_" => 'x.id',
]
)
/*
->setWhere(
$type_jointure.' = :objet',
array('objet' => $objet)
)
*/
->setWhere(
$where,
$parametres
//array('objet' => $objet)
)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_article_modifier',
'typeDocument' => 'article',
],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_article_modifier',
'typeDocument' => 'article',
],
],
3 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'supprimer_route' => 'dtc_application_supprimer',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'application',
'objet' => Application::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([0, 1]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/application/grid/{id}/{type}", name="dtc_application_liste_grid")
*/
public function gridAction(Request $request, $id = "", $type = "", EntityManagerInterface $em, Datatable $datatable)
{
$param = $request->query->all();
if ($type == 'type') {
$repo_objet = $em->getRepository(Type::class);
$objet = $repo_objet->find($id);
}
return $this->datatable($request, $datatable, $objet, $type)->execute();
}
}