<?php
namespace App\Controller\Rangements;
use App\Entity\Rangements\Caisse;
use App\Entity\Rangements\CaisseEmplacement;
use App\Form\Rangements\CaisseEmplacementType;
use App\Form\Rangements\SupprimerCaisseEmplacementType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
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 CaisseEmplacementController extends AbstractController
{
/**
* @Route("/chariot-emplacement/scanner/{id}", name="dtc_caisse_emplacement_scanner")
*/
public function scannerAction(Request $request, Caisse $caisse, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$caisse_emplacement = '';
$rendu = '';
$errors = '';
$id = '';
$titreModal = '';
$ean = trim($request->request->get('scan'));
if ( ! empty($ean)) {
$caisse_emplacement = $em->getRepository(CaisseEmplacement::class)->findOneBy(['ean' => $ean, 'caisse' => $caisse]);
}
if (is_object($caisse_emplacement)) {
return new JsonResponse(
[
'id' => $id,
'rendu' => '',
'errors' => $errors,
'caisseEmplacementId' => $caisse_emplacement->getId(),
'caisseEmplacementLibelle' => $caisse_emplacement->getEan(),
]
);
} else {
$this->addFlash('warning', "Emplacement chariot introuvable : ".$ean);
$errors = $this->renderView('layout-errors.html.twig');
return new JsonResponse(['id' => $id, 'rendu' => '', 'errors' => $errors, 'caisseEmplacementId' => '', 'caisseEmplacementLibelle' => '']);
}
}
/**
* @Route("/caisse-emplacement/nouveau/{id}/{type}", name="dtc_caisse_emplacement_ajouter")
*/
public function ajouterAction(Request $request, $id, $type = "", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal = $translator->trans("Nouveau emplacement de chariot");
$repo_objet = $em->getRepository(Caisse::class);
$get = $request->query->all();
$caisseEmplacement = new CaisseEmplacement;
$objet = $repo_objet->find($id);
if (is_object($objet)) {
$caisseEmplacement->setCaisse($objet);
//$caisseEmplacement->setLibelle($objet->getLibelle());
}
$user = $this->getUser();
//$caisseEmplacement->setUtilisateur($user);
$form = $this->createForm(CaisseEmplacementType::class, $caisseEmplacement);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if ($type == 'caisse') {
$repo_objet = $em->getRepository(Caisse::class);
$objet = $repo_objet->find($id);
$url = $this->generateUrl('dtc_caisse_modifier', ['id' => $objet->getId(), 'tab' => 'emplacements']);
}
$em->persist($caisseEmplacement);
$em->persist($objet);
$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"]]);
} else {
$this->addFlash('notice', $translator->trans('Condition de vente ajoutée avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($caisseEmplacement);
$rendu = $this->renderView(
'Rangements/CaisseEmplacement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'caisseEmplacement' => $caisseEmplacement]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'Rangements/CaisseEmplacement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'caisseEmplacement' => $caisseEmplacement]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Rangements/CaisseEmplacement/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("/caisse-emplacement/modifier/{objet}/{id}/{type}", name="dtc_caisse_emplacement_modifier")
*/
public function modifierAction(Request $request, CaisseEmplacement $objet, $id, $type, EntityManagerInterface $em,
TranslatorInterface $translator, ValidatorInterface $validator
) {
$caisseEmplacement = $objet;
$titre_modal = $translator->trans("Modifier l'emplacement du chariot");
$get = $request->query->all();
$user = $this->getUser();
// $caisseEmplacement->setUtilisateur($user);
$form = $this->createForm(CaisseEmplacementType::class, $caisseEmplacement);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, CaisseEmplacement::class);
/*
if(!$droit) {
$rendu = $this->renderView('Rangements/CaisseEmplacement/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
return new Response(json_encode(array('rendu'=>$rendu,'valide'=>'0','url'=>'','titre'=>$titre_modal)), 200, array('Content-Type'=>'application/json'));
}
*/
if ($form->isValid()) {
if ($type == 'caisse') {
$repo_objet = $em->getRepository(Caisse::class);
$caisse = $repo_objet->find($id);
$url = $this->generateUrl('dtc_caisse_modifier', ['id' => $caisse->getId(), 'tab' => 'emplacements']);
}
$em->persist($caisseEmplacement);
$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"]]);
} else {
$this->addFlash('notice', $translator->trans('Condition de vente modifiée avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($caisseEmplacement);
$rendu = $this->renderView(
'Rangements/CaisseEmplacement/ajouter.html.twig',
[
'form' => $form->createView(),
'errors' => $errors,
'id' => $id,
'type' => $type,
'objet' => $objet,
'caisseEmplacement' => $caisseEmplacement,
]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'Rangements/CaisseEmplacement/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet, 'caisseEmplacement' => $caisseEmplacement]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
/**
* @Route("/caisse-emplacement/supprimer/{objet}/{id}/{type}", name="dtc_caisse_emplacement_supprimer")
*/
public function supprimerAction(Request $request, CaisseEmplacement $objet, $id, $type, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$caisseEmplacement = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$get = $request->query->all();
$form = $this->createForm(SupprimerCaisseEmplacementType::class, $caisseEmplacement);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em->remove($caisseEmplacement);
$em->flush();
if ($type == 'caisse') {
$url = $this->generateUrl('dtc_caisse_modifier', ['id' => $id, 'tab' => 'emplacements']);
}
if (array_key_exists('table', $get) && $get["table"] != "") {
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]);
} else {
$this->addFlash('notice', $translator->trans('Condition de vente supprimée avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($caisseEmplacement);
$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("/caisse-emplacement/charger-tableau/{id}/{type}", name="dtc_caisse_emplacement_charger_tableau")
*/
public function chargerTableauAction(Request $request, $id = "0", $type = "a")
{
$rendu = $this->renderView('Rangements/CaisseEmplacement/charger_tableau.html.twig', ["id" => $id, "type" => $type]);
return new JsonResponse(['rendu' => $rendu]);
}
/**
* @Route("/caisse-emplacement", name="dtc_caisse_emplacement_liste")
*/
public function listerAction(Request $request, $id = "0", $type = "a", EntityManagerInterface $em, TranslatorInterface $translator, Datatable $datatable)
{
$tableau_class_cellule = [];
/*
$tableau_class_cellule[]=array("searchable"=> false,"className"=>"visible_export colonne_id","targets"=>array(0),"visible"=>true);
$tableau_class_cellule[]=array("orderable"=> false,"searchable"=> false,"className"=>" colonne_id","targets"=>array(12),"visible"=>true);
*/
$modal = $request->query->get('modal');
$caisseId = $request->query->get('id');
$qte = $request->query->get('qte');
if ($type == "caisse") {
$repo_objet = $em->getRepository(Caisse::class);
}
$objet = $repo_objet->find($id);
if ($caisseId != '') {
$caisse = $repo_objet->find($caisseId);
if ($modal == 1 && is_object($caisse)) {
$titre_modal = $translator->trans('Conditions de vente');
$this->datatableCaisse($datatable, $translator, $caisse, $type);
$rendu = $this->renderView(
'Rangements/CaisseEmplacement/lister.html.twig',
['tableauClassColonne' => $tableau_class_cellule, "id" => $caisseId, "type" => $type, 'qte' => $qte]
);
//$rendu = $this->renderView('FO/Supprimer/supprimer.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type,'objet'=>$objet));
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
if (is_object($objet)) {
if ($type == "caisse") {
$tableau_class_cellule = [];
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["orderable" => true, "searchable" => false, "className" => "colonne_id", "targets" => [0], "visible" => false];
$tableau_class_cellule[] = ["orderable" => true, "searchable" => false, "className" => "colonne_id", "targets" => [1], "visible" => true];
$tableau_class_cellule[] = ["orderable" => false, "searchable" => false, "className" => "colonne_id", "targets" => [2], "visible" => true];
$this->datatableCaisse($datatable, $translator, $objet, $type);
}
return $this->render('Rangements/CaisseEmplacement/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type]);
} else {
$this->datatable($datatable, $translator);
return $this->render('Rangements/CaisseEmplacement/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type]);
}
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator)
{
$datatable->setDatatableId('dta-condition-vente')
->setEntity(CaisseEmplacement::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Libellé") => 'x.libelle',
$translator->trans("Mini") => 'x.debut',
$translator->trans("Maxi") => 'x.fin',
$translator->trans("Prix") => 'x.prix',
//$translator->trans("Libelle") => 'x.libelle',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
//->addJoin('x.statutCommande', 's', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
/*->setWhere(
$type_jointure.' = :objet',
array('objet' => $objet)
)
*/
->setRenderers(
[
5 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
//'edit_route' => 'dtc_garantie_modifier',
//'supprimer_route' => 'dtc_garantie_supprimer',
'entite' => 'garantie',
'objet' => CaisseEmplacement::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([]);
return $datatable;
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatableCaisse(Datatable $datatable, TranslatorInterface $translator, $objet, $type = "")
{
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-caisse-emplacement')
->setEntity(CaisseEmplacement::class, "x")
->setFields(
[
$translator->trans("ID") => 'x.id',
$translator->trans("Code barre") => 'x.ean',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
//->addJoin('x.categorieClient', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
/*->setWhere(
$type_jointure.' = :objet',
array('objet' => $objet)
)
*/
->setWhere(
'x.caisse = :objet',
['objet' => $objet]
)
->setRenderers(
[
2 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_caisse_emplacement_modifier',
'supprimer_route' => 'dtc_caisse_emplacement_supprimer',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'garantie',
'table' => 'dta-caisse-emplacement',
'objet' => CaisseEmplacement::class,
'width_modal' => 800,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)//->setSearchFields(array(1,2))
;
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/caisse-emplacement/grid/{id}/{type}", name="dtc_caisse_emplacement_liste_grid")
*/
public function gridAction(Request $request, $id = "", $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ($type == "caisse") {
$repo_objet = $em->getRepository(Caisse::class);
}
$objet = $repo_objet->find($id);
if (is_object($objet) and $type == "caisse") {
return $this->datatableCaisse($datatable, $translator, $objet, $type)->execute();
} else {
return $this->datatable($datatable, $translator)->execute();
}
}
}