<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Doctrine\ORM\EntityManagerInterface;
use App\Event\WorkflowDossierEvent;
use App\Entity\Entreprise;
use App\Entity\Dossier;
use App\Entity\StatutDossier;
use App\Repository\DossierRepository;
/**
* @Route("/workflow")
*/
class WorkflowController extends AbstractController
{
/** @var TranslatorInterface */
private $translator;
/** @var EntityManagerInterface */
private $entityManager;
/** @var DossierRepository */
private $dossierRepository;
/** @var EventDispatcherInterface */
private $dispatcher;
public function __construct(
DossierRepository $dossierRepository,
EntityManagerInterface $entityManager,
TranslatorInterface $translator,
EventDispatcherInterface $dispatcher
) {
$this->dossierRepository = $dossierRepository;
$this->entityManager = $entityManager;
$this->translator = $translator;
$this->dispatcher = $dispatcher;
}
/**
* @Route("/setStatus", name="workflowSetStatus")
*/
public function setStatus(Request $request): JsonResponse
{
$numero_contrat = null;
$numero_pvac = null;
$statut = $request->request->get('statut');
$dossier_id = $request->request->get('dossier_id');
$dossier = $this->dossierRepository->find($dossier_id );
if(!$dossier instanceof Dossier) {
return new JsonResponse('Dossier introuvable', Response::HTTP_NOT_FOUND); // constant for 404
}
$statutActuel = $dossier->getStatut();
// Vérifier que le statut proposé eszt bien dans le workflow
$workflow = StatutDossier::STATUTS_WORKFLOW;
$data = [
'code'=> 'ko',
'level' => 'warning',
'title' => "Erreur de statut",
'message' => 'Ce statut est un statut final, il ne peut plus être modifié',
'statut' => $statut,
'statut_actuel' => $statutActuel,
'workflow' => $workflow[$statutActuel]
];
if(in_array($statut, $workflow[$statutActuel])) {
$statutDossier = new StatutDossier();
$statutDossier->setStatut($statut) ;
$statutDossier->setDate(new \DateTime());
$statutDossier->setDossier($dossier);
$dossier->setStatut($statut);
if($statut == StatutDossier::STATUT_GESTION){
$offre = $dossier->getOffre();
$offre->setNumeroContratCourant((int) $offre->getNumeroContratCourant() + 1 ) ;
if($offre->getActiverNumerotationPvac()) {
$numero_pvac = $this->entityManager->getRepository(Dossier::class)->getNumPvacNextValue();
$dossier->setNumeroPvac($numero_pvac);
}
$numero_contrat = $offre->getNumeroContratCourant();
$dossier->setNumeroContrat($numero_contrat);
$this->entityManager->persist($offre);
}
$this->entityManager->persist($statutDossier);
$this->entityManager->persist($dossier);
$this->entityManager->flush();
$this->dispatcher->dispatch(new WorkflowDossierEvent($dossier, $statut), WorkflowDossierEvent::NAME);
$situation = $this->render('_parts/situation.html.twig', [
'statuts' => $dossier->getStatutDossiers(),
])->getContent();
$data = [
'code'=> 'ok',
'level' => $this->translator->trans('form.dossier.statut.' . $statut . '.flash.level', [], 'forms'),
'title' => $this->translator->trans('form.dossier.statut.' . $statut . '.flash.title', [], 'forms'),
'message' => $this->translator->trans('form.dossier.statut.' . $statut . '.flash.message', [], 'forms'),
'statut_libelle' => $this->translator->trans('form.dossier.statut.' . $statut . '.label', [], 'forms'),
'statut' => $statut,
'situation' => $situation,
'numero_contrat' => $numero_contrat,
'numero_pvac' => $numero_pvac
];
}
if ($request->isXmlHttpRequest()) {
return new JsonResponse($data);
}
return $this->render('home.html.twig');
}
}