<?php
namespace App\Controller\Utilisateur;
use App\Entity\GestionComerciale\Commande;
use App\Entity\Utilisateur\Intervention;
use App\Form\Projets\InterventionType;
use App\Form\Utilisateur\SupprimerInterventionType;
use App\Library\Datatable\Util\Datatable;
use App\Security\Voter\EntityVoter;
use App\Service\Utilisateur\InterventionService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class InterventionController extends AbstractController
{
/**
* @Route("/interventions/nouveau/{id}/{type}", name="dtc_intervention_ajouter")
*/
public function ajouterAction(Request $request, $id, $type = "", EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator,
InterventionService $serviceIntervention
) {
$titre_modal = $translator->trans("Nouvelle intervention");
$intervention = new Intervention();
$user = $this->getUser();
$intervention->setUtilisateur($user);
if ($type == 'ordreRep') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$intervention->setOrdreRep($objet);
//$url = $this->generateUrl('dtc_ordre_reparation_modifier', array('id' => $objet->getId(),'tab'=>'interventions'));
}
$form = $this->createForm(InterventionType::class, $intervention);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
if ($type == 'ordreRep') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$intervention->setOrdreRep($objet);
$url = $this->generateUrl('dtc_ordre_reparation_modifier', ['id' => $objet->getId(), 'tab' => 'interventions']);
}
$em->persist($intervention);
$em->flush();
$tempsPasse = $serviceIntervention->getTotalTempsIntervention($objet);
$objet->setTempsPasse($tempsPasse);
$em->persist($objet);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Intervention ajoutée avec succès !')
);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($intervention);
$rendu = $this->renderView('Utilisateur/Intervention/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('Utilisateur/Intervention/ajouter.html.twig', ['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type]);
return new JsonResponse(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]);
//return $this->render('Utilisateur/Intervention/ajouter.html.twig', array('form' => $form->createView(),'errors'=>$errors,'id'=>$id,'type'=>$type));
}
/**
* @Route("/interventions/modifier/{objet}/{id}/{type}", name="dtc_intervention_modifier")
*/
public function modifierAction(Request $request, Intervention $objet, $id, $type, EntityManagerInterface $em, TranslatorInterface $translator,
ValidatorInterface $validator, InterventionService $serviceIntervention
) {
$intervention = $objet;
$titre_modal = $translator->trans("Modifier intervention");
$user = $this->getUser();
$intervention->setUtilisateur($user);
$form = $this->createForm(InterventionType::class, $intervention);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
$droit = $this->isGranted(EntityVoter::UPDATE, Intervention::class);
if ( ! $droit) {
$rendu = $this->renderView(
'Utilisateur/Intervention/ajouter.html.twig',
['form' => $form->createView(), 'errors' => $errors, 'id' => $id, 'type' => $type, 'objet' => $objet]
);
return new Response(json_encode(['rendu' => $rendu, 'valide' => '0', 'url' => '', 'titre' => $titre_modal]), 200, ['Content-Type' => 'application/json']);
}
if ($form->isValid()) {
if ($type == 'ordreRep') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
$intervention->setOrdreRep($objet);
$url = $this->generateUrl('dtc_ordre_reparation_modifier', ['id' => $objet->getId(), 'tab' => 'interventions']);
}
$em->persist($intervention);
$em->flush();
$tempsPasse = $serviceIntervention->getTotalTempsIntervention($objet);
$objet->setTempsPasse($tempsPasse);
$em->persist($objet);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Intervention modifiée avec succès !')
);
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($intervention);
$rendu = $this->renderView(
'Utilisateur/Intervention/ajouter.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('Utilisateur/Intervention/ajouter.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("/interventions/supprimer/{objet}/{id}/{type}", name="dtc_intervention_supprimer")
*/
public function supprimerAction(Request $request, Intervention $objet, $id, $type, EntityManagerInterface $em, TranslatorInterface $translator, ValidatorInterface $validator,
InterventionService $serviceIntervention
) {
$intervention = $objet;
$titre_modal = $translator->trans("Demande de confirmation");
$user = $this->getUser();
$form = $this->createForm(SupprimerInterventionType::class, $intervention);
$errors = "";
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$ordreRep = $intervention->getOrdreRep();
$em->remove($intervention);
$em->flush();
$tempsPasse = $serviceIntervention->getTotalTempsIntervention($ordreRep);
$ordreRep->setTempsPasse($tempsPasse);
$em->persist($ordreRep);
$em->flush();
$this->addFlash(
'notice',
$translator->trans('Intervention supprimée avec succès !')
);
if ($type == 'ordreRep') {
$url = $this->generateUrl('dtc_ordre_reparation_modifier', ['id' => $id, 'tab' => 'interventions']);
} elseif ($type == 'transporteur') {
$url = $this->generateUrl('dtc_transporteur_modifier', ['id' => $id, 'tab' => 'interventions']);
} elseif ($type == 'fournisseur') {
$url = $this->generateUrl('dtc_fournisseur_modifier', ['id' => $id, 'tab' => 'interventions']);
}
return new JsonResponse(['rendu' => '', 'valide' => '1', 'url' => $url]);
} else {
$errors = $validator->validate($intervention);
$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("/interventions/{id}/{type}", name="dtc_intervention_liste")
*/
public function listerAction(Request $request, $id, $type = "", EntityManagerInterface $em, Datatable $datatable, TranslatorInterface $translator)
{
if ($type == 'ordreRep') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
}
$tableau_class_cellule = [];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [0], "visible" => "true"];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [1], "visible" => "true"];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [2], "visible" => "true"];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [3], "visible" => "true"];
$tableau_class_cellule[] = ["className" => "visible_export colonne_id", "targets" => [4], "visible" => "true"];
$this->datatable($datatable, $translator, $objet, $type);
return $this->render('Utilisateur/Intervention/lister.html.twig', ["id" => $id, "type" => $type, 'tableauClassColonne' => $tableau_class_cellule]);
}
/**
* set datatable configs
*
* @return \App\Library\Datatable\Util\Datatable
*/
private function datatable(Datatable $datatable, TranslatorInterface $translator, $objet, $type = "")
{
$type_jointure = 'x.'.$type;
$datatable->setDatatableId('dta-interventions')
->setEntity(Intervention::class, "x")
->setFields(
[
//$translator->trans("ID") => 'x.id',
$translator->trans("Mécanicien") => 'u.nom',
$translator->trans("Opération") => 'ac.libelle',
$translator->trans("Durée") => 'x.duree',
$translator->trans("Date d'intervention") => 'x.dateIntervention',
$translator->trans("Commentaire") => 'x.commentaire',
$translator->trans("Actions") => 'x.id',
"_identifier_" => 'x.id',
]
)
->addJoin('x.articleCommande', 'ac', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->addJoin('x.mecanicien', 'u', \Doctrine\ORM\Query\Expr\Join::LEFT_JOIN)
->setWhere(
$type_jointure.' = :objet',
['objet' => $objet]
)
->setRenderers(
[
1 => [
'view' => 'FO/DataTable/libelle_acticle_commande.html.twig',
],
3 => [
'view' => 'FO/DataTable/heure.html.twig',
],
5 => [
'view' => 'FO/DataTable/actions_modal.html.twig',
'params' => [
'edit_route' => 'dtc_intervention_modifier',
'supprimer_route' => 'dtc_intervention_supprimer',
'id' => $objet->getId(),
'type' => $type,
'entite' => 'intervention',
'objet' => Intervention::class,
],
],
]
)
->setOrder("x.id", "desc")
->setSearch(true)
->setSearchFields([1, 2]);
return $datatable;
}
/**
* Grid action
* @return Response
*/
/**
* @Route("/interventions/grid/{id}/{type}", name="dtc_intervention_liste_grid")
*/
public function gridAction(Request $request, $id = "", $type = "", EntityManagerInterface $em, TranslatorInterface $translator, Datatable $datatable)
{
if ($type == 'ordreRep') {
$repo_objet = $em->getRepository(Commande::class);
$objet = $repo_objet->find($id);
return $this->datatable($datatable, $translator, $objet, $type)->execute();
}
}
}