<?php
namespace App\Controller\GestionComerciale;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\CommandeNumeroSuivi;
use App\Form\GestionComerciale\CommandeNumeroSuiviType;
use App\Form\MarketPlace\ProfilType;
use App\Library\Datatable\Util\Datatable;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
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 CommandeNumeroSuiviController extends AbstractController
{
/**
* @Route("/numero-suivi-commande/{id}/{type}", name="dtc_numero_suivi_commande_liste")
*/
public function listerAction(Request $request, $id, $type = "", $objet = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ($type == 'commande') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
}
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [0], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [1], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [2], "visible" => true, "orderable" => true, "searchable" => true];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id text-center", "targets" => [3], "visible" => true, "orderable" => true, "searchable" => true];
$this->datatable($objet, $type, $datatable, $translator);
return $this->render('GestionComerciale/CommandeNumeroSuivi/lister.html.twig', ['tableauClassColonne' => $tableau_class_cellule, "id" => $id, "type" => $type]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable($objet, $type = "", Datatable $datatable, TranslatorInterface $translator)
{
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-numero-suivi-commande')
->setEntity(CommandeNumeroSuivi::class, "x")
->setFields(
[
$translator->trans("id") => 'x.id',
$translator->trans("Date") => 'x.date',
$translator->trans("Colisage") => 'x.id',
$translator->trans("Transporteur") => 't.libelle',
$translator->trans("Numéro") => 'x.numeroSuivi',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.transporteur', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.bp', 'bp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.colisage', 'c', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('c.parent', 'p', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('c.colisageArticleCommande', 'cac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('cac.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
'ac.commande = :objet',
['objet' => $objet]
)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
2 => [
'view' => 'FO/DataTable/reference-colisage.html.twig',
'params' => [],
],
5 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'chemin_etiquette' => true,
],
],
]
)
->setGroupBy("x.id")
->setOrder("x.id", "asc")
->setSearch(true)
->setSearchFields([]);
return $datatable;
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function __datatable($objet, $type = "", Datatable $datatable, TranslatorInterface $translator)
{
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-numero-suivi-commande')
->setEntity(CommandeNumeroSuivi::class, "x")
->setFields(
[
$translator->trans("id") => 'x.id',
$translator->trans("Date") => 't.date',
$translator->trans("BP") => 'bp.reference',
$translator->trans("Colisage") => 'x.id',
$translator->trans("Transporteur") => 't.libelle',
$translator->trans("Numéro") => 'x.numeroSuivi',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.transporteur', 't', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.bp', 'bp', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
$type_jointure.' = :objet',
['objet' => $objet]
)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/heure.html.twig',
'params' => [],
],
3 => [
'view' => 'FO/DataTable/reference-colisage.html.twig',
'params' => [],
],
6 => [
'view' => 'FO/DataTable/actions.html.twig',
'params' => [
'chemin_etiquette' => true,
],
],
]
)
->setOrder("x.id", "asc")
->setSearch(true)
->setSearchFields([]);
return $datatable;
}
/**
* @Route("/numero-suivi-commande/grid/{id}/{type}", name="dtc_numero_suivi_commande_liste_grid")
*/
public function gridAction(Request $request, $id = "", $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ($type == 'commande') {
$em = $em;
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
}
return $this->datatable($objet, $type, $datatable, $translator)->execute();
}
/**
* @Route("/numero-suivi-commande/charger-tableau/{id}/{type}", name="dtc_commande_numero_suivi_charger_tableau")
*/
public function chargerTableauAction(Request $request, $id = "0", $type = "", EntityManagerInterface $em)
{
if ($type == 'commande') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
}
$rendu = $this->renderView('GestionComerciale/CommandeNumeroSuivi/charger_tableau.html.twig', ["id" => $id, "type" => $type, "objet" => $objet]);
return new JsonResponse(['rendu' => $rendu]);
}
/**
* @Route("/numero-suivi-commande/nouveau/{id}", name="dtc_commande_numero_suivi_ajouter")
*/
public function ajouterAction(Request $request, $id, $type = "", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator)
{
$titre_modal =$translator->trans("Nouvelle numéro de suivi");
$repo_objet = $em->getRepository(Commande::class);
$get = $request->query->all();
$commandeNumeroSuivi = new CommandeNumeroSuivi;
$objet = $repo_objet->find($id);
if (is_object($objet)) {
$commandeNumeroSuivi->setBp($objet);
if (is_object($objet->getCommande())) {
$commandeNumeroSuivi->setCommande($objet->getCommande());
}
}
$user = $this->getUser();
//$commandeNumeroSuivi->setUtilisateur($user);
$form = $this->createForm(CommandeNumeroSuiviType::class, $commandeNumeroSuivi);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($commandeNumeroSuivi->getNumeroSuivi() == "") {
$error = new FormError("Numéro de suivi obligatoire");
$form->get('numeroSuivi')->addError($error);
}
if ( ! is_object($commandeNumeroSuivi->getTransporteur())) {
$error = new FormError("Transporteur obligatoire");
$form->get('numeroSuivi')->addError($error);
}
if ($form->isValid()) {
$em->persist($commandeNumeroSuivi);
$em->persist($objet);
$em->flush();
$url = "";
if (array_key_exists('table', $get) && $get["table"] != "") {
return new Response(
json_encode(['rendu' => '', 'valide' => '1', 'url' => $url, 'type' => 'recharger_datatable', 'id_datatable' => $get["table"]]),
200,
['Content-Type' => 'application/json']
);
} else {
$this->addFlash('notice',$translator->trans('Numéro de suivi ajouté avec succès !'));
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
}
} else {
$errors = $validator->validate($commandeNumeroSuivi);
$rendu = $this->renderView(
'GestionComerciale/CommandeNumeroSuivi/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'commandeNumeroSuivi' => $commandeNumeroSuivi]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
}
}
$rendu = $this->renderView(
'GestionComerciale/CommandeNumeroSuivi/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'commandeNumeroSuivi' => $commandeNumeroSuivi]
);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Articles/ConditionVente/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
}