<?php
namespace App\Controller\Transporteurs;
use App\Entity\Transporteurs\Transporteur;
use App\Entity\Transporteurs\TransporteurZoneLivraison;
use App\Entity\Transporteurs\ZoneLivraison;
use App\Form\Transporteurs\SupprimerZoneLivraisonType;
use App\Form\Transporteurs\ZoneLivraisonType;
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 ZoneLivraisonController extends AbstractController
{
/**
* @Route("/zone-livraison/dupliquer/{id}", name="dtc_zone_livraison_dupliquer")
*/
public function dupliquerAction(Request $request, ZoneLivraison $zoneLivraison, EntityManagerInterface $em, TranslatorInterface $translator)
{
$zoneLivraison_duplique = clone $zoneLivraison;
$zoneLivraison_duplique->setLibelle("COPIE ".$zoneLivraison_duplique->getLibelle());
$em->persist($zoneLivraison_duplique);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Zone de livraison dupliqué avec succès !')
);
return $this->redirectToRoute('dtc_zone_livraison_liste');
}
/**
* @Route("/zone-livraison/nouveau", name="dtc_zone_livraison_ajouter")
*/
public function ajouterAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$zoneLivraison = new ZoneLivraison;
$user = $this->getUser();
$zoneLivraison->setUtilisateur($user);
$form = $this->createForm(ZoneLivraisonType::class, $zoneLivraison);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$tokenP = $request->request->get('tokenPicture');
if ($form->isValid()) {
$em->persist($zoneLivraison);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Zone de livraison ajouté avec succès !')
);
return $this->redirectToRoute('dtc_zone_livraison_liste');
} else {
$errors = $validator->validate($zoneLivraison);
}
}
return $this->render('Transporteurs/ZoneLivraison/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors]);
}
/**
* @Route("/zone-livraison/supprimer/multiple", name="dtc_zone_livraison_liste_supprimer")
*/
public function supprimerMultipleAction(Request $request, EntityManagerInterface $em, TranslatorInterface $translator)
{
$url = $this->generateUrl('dtc_zone_livraison_liste', []);
return new JsonResponse(['url' => $url, 'valide' => '1']);
$data = $request->get('dataTables');
$ids = $data['actions'];
$repo = $em->getRepository(ZoneLivraison::class);
for ($i = 0; $i < count($ids); $i++) {
$v = $repo->find($ids[$i]);
if (is_object($v)) {
$em->remove($v);
}
}
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Zones de livraisons supprimées avec succès !')
);
$url = $this->generateUrl('dtc_zone_livraison_liste', []);
return new JsonResponse(['url' => $url, 'valide' => '1']);
}
/**
* @Route("/zone-livraison/supprimer/{id}", name="dtc_zone_livraison_supprimer")
*/
public function supprimerAction(Request $request, ZoneLivraison $zoneLivraison, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$form = $this->createForm(SupprimerZoneLivraisonType::class, $zoneLivraison);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($zoneLivraison);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Zone de livraison supprimée avec succès !')
);
$url = $this->generateUrl('dtc_zone_livraison_liste', []);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($zoneLivraison);
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $zoneLivraison->getId(), 'type' => '']);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', ['form' => $form->createView(), 'id' => $zoneLivraison->getId(), 'type' => '', 'errors' => $errors]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/zone-livraison/modifier/{id}", name="dtc_zone_livraison_modifier")
*/
public function modifierAction(Request $request, ZoneLivraison $zoneLivraison, EntityManagerInterface $em, TranslatorInterface $translator,
ValidatorInterface $validator
) {
$user = $this->getUser();
$zoneLivraison->setUtilisateur($user);
$form = $this->createForm(ZoneLivraisonType::class, $zoneLivraison);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, ZoneLivraison::class);
if ( ! $droit) {
return $this->redirectToRoute('dtc_zone_livraison_modifier', ["id" => $zoneLivraison->getId()]);
}
if ($form->isValid()) {
$em->persist($zoneLivraison);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Zone de livraison sauvegardée avec succès !')
);
return $this->redirectToRoute('dtc_zone_livraison_modifier', ["id" => $zoneLivraison->getId()]);
} else {
$errors = $validator->validate($zoneLivraison);
}
}
return $this->render('Transporteurs/ZoneLivraison/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'zoneLivraison' => $zoneLivraison]);
}
/**
* @Route("/zone-livraison/", name="dtc_zone_livraison_liste")
*/
public function listerAction(Request $request, ColonneTableauService $serviceColonneTableau, Datatable $datatable, TranslatorInterface $translator)
{
$tableau_class_cellule[] = ["className" => "colonne_id", "targets" => [0], "visible" => false, "orderable" => false];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [1],
"visible" => $serviceColonneTableau->getColonneUtilisateur(ZoneLivraison::class, "id"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [2],
"visible" => $serviceColonneTableau->getColonneUtilisateur(ZoneLivraison::class, "reference"),
];
$tableau_class_cellule[] = [
"className" => "visible_export colonne_id",
"targets" => [3],
"visible" => $serviceColonneTableau->getColonneUtilisateur(ZoneLivraison::class, "libelle"),
];
$tableau_class_cellule[] = ["orderable" => false, "className" => "colonne_id", "targets" => [4], "visible" => true];
$this->datatable($datatable, $translator);
return $this->render('Transporteurs/ZoneLivraison/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(ZoneLivraison::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.transporteur', 't', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
->setRenderers(
[
0 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_zone_livraison_modifier',
],
],
1 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_zone_livraison_modifier',
],
],
2 => [
'view' => 'FO/DataTable/avec_lien_edit_route.html.twig',
'params' => [
'edit_route' => 'dtc_zone_livraison_modifier',
'typeDocument' => '',
],
],
3 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'edit_route' => 'dtc_zone_livraison_modifier',
'dupliquer_route' => 'dtc_zone_livraison_dupliquer',
//'supprimer_route' => 'dtc_zone_livraison_supprimer',
'objet' => Transporteur::class,
],
],
]
)
->setMultiple(
[
'delete' => [
'title' => 'Non disponible',
'route' => 'dtc_zone_livraison_liste_supprimer',
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/zone-livraison/grid", name="dtc_zone_livraison_liste_grid")
*/
public function gridAction(Request $request, Datatable $datatable, TranslatorInterface $translator)
{
return $this->datatable($datatable, $translator)->execute();
}
//\Doctrine\Common\Util\Debug::dump($tabZonesLivraison);
/**
* @Route("", name="")
*/
public function listerZoneLivraisonCheckboxAction(Request $request, $transporteur = [], EntityManagerInterface $em)
{
$id = '';
$repo_transporteur = $em->getRepository(Transporteur::class);
$repo_zone_livraison = $em->getRepository(ZoneLivraison::class);
$repo_transporteur_zone_livraison = $em->getRepository(TransporteurZoneLivraison::class);
$id = $request->query->get('id');
if ($request->query->get('transporteur') != '') {
$transporteur = $repo_transporteur->find($request->query->get('transporteur'));
}
$zonesLivraison = $repo_zone_livraison->getAllZoneLivraison();
$tabZonesLivraison = [];
foreach ($zonesLivraison as $c) {
$c['checked'] = 0;
//$c['totalSousCategorie'] = count($repo_zone_livraison->findBy(array("categorieParent"=>$c)));
//$c['totalSousCategorie'] = 0;
$c['selection'] = 0;
if (is_object($transporteur) and is_object($repo_transporteur_zone_livraison->findOneBy(['transporteur' => $transporteur, 'zoneLivraison' => $c]))) {
$c['checked'] = 1;
}
$tabZonesLivraison[] = $c;
}
$zonesLivraison = $tabZonesLivraison;
if ($request->isXmlHttpRequest()) {
$rendu = $this->renderView('Transporteurs/ZoneLivraison/checkbox.html.twig', ['zonesLivraison' => $zonesLivraison, 'transporteur' => $transporteur]);
return new JsonResponse(['rendu' => $rendu]);
}
return $this->render('Transporteurs/ZoneLivraison/checkbox.html.twig', ['zonesLivraison' => $zonesLivraison, 'transporteur' => $transporteur]);
}
/**
* @Route("/zone-livraison/recherche", name="dtc_zone_livraison_recherche")
*/
public function rechercheAction(Request $request, EntityManagerInterface $em, PaginatorInterface $paginator)
{
$q = $request->query->get('q');
$repo = $em->getRepository(ZoneLivraison::class);
//$results = $repo->getRechercheClient($q);
$results = $repo->getRechercheZoneLivraison($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'));
}
}