Skip to content

Commit

Permalink
Merge pull request #3532 from MTES-MCT/feature/3052-refacto-suivi-fac…
Browse files Browse the repository at this point in the history
…tory-manager

[QA] Revoir le SuiviFactory/SuiviManager
  • Loading branch information
emilschn authored Jan 16, 2025
2 parents c34132e + 59c61e4 commit d2ff7f2
Show file tree
Hide file tree
Showing 25 changed files with 260 additions and 500 deletions.
14 changes: 4 additions & 10 deletions src/Command/Cron/AskFeedbackUsagerCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace App\Command\Cron;

use App\Entity\Suivi;
use App\Factory\SuiviFactory;
use App\Manager\SuiviManager;
use App\Repository\SignalementRepository;
use App\Repository\SuiviRepository;
Expand Down Expand Up @@ -33,7 +32,6 @@ public function __construct(
private readonly ParameterBagInterface $parameterBag,
private readonly SuiviRepository $suiviRepository,
private readonly SignalementRepository $signalementRepository,
private readonly SuiviFactory $suiviFactory,
) {
parent::__construct($this->parameterBag);
}
Expand Down Expand Up @@ -177,15 +175,11 @@ protected function sendMailToUsagers(
}
}

$params = [
'type' => Suivi::TYPE_TECHNICAL,
'description' => "Un message automatique a été envoyé à l'usager pour lui demander de mettre à jour sa situation.",
];

$suivi = $this->suiviFactory->createInstanceFrom(
user: null,
$suivi = $this->suiviManager->createSuivi(
signalement: $signalement,
params: $params,
description: "Un message automatique a été envoyé à l'usager pour lui demander de mettre à jour sa situation.",
type: Suivi::TYPE_TECHNICAL,
flush: false
);

if (0 === $totalRead % self::FLUSH_COUNT) {
Expand Down
16 changes: 4 additions & 12 deletions src/Command/Cron/NotifyVisitsCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,16 +56,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$description .= ' aura lieu le '.$intervention->getScheduledAt()->format('d/m/Y');
$description .= '<br>La visite sera effectuée par '.$partnerName.'.';
$suivi = $this->suiviManager->createSuivi(
user: null,
signalement: $intervention->getSignalement(),
params: [
'description' => $description,
'type' => Suivi::TYPE_TECHNICAL,
],
description: $description,
type: Suivi::TYPE_TECHNICAL,
isPublic: true,
context: Suivi::CONTEXT_INTERVENTION,
);
$this->suiviManager->save($suivi);

$this->visiteNotifier->notifyUsagers(
$intervention,
Expand Down Expand Up @@ -112,16 +108,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$description = 'La réalisation d\'une visite est nécessaire pour caractériser les désordres signalés.';
$description .= ' Merci de renseigner la date ou les conclusions de la visite afin de poursuivre la prise en charge de ce signalement.';
$suivi = $this->suiviManager->createSuivi(
user: null,
signalement: $affectation->getSignalement(),
description: $description,
type: Suivi::TYPE_TECHNICAL,
isPublic: false,
context: Suivi::CONTEXT_INTERVENTION,
params: [
'description' => $description,
'type' => Suivi::TYPE_TECHNICAL,
],
);
$this->suiviManager->save($suivi);

$this->visiteNotifier->notifyAgents(
intervention: null,
Expand Down
11 changes: 3 additions & 8 deletions src/Command/Cron/SynchronizeIdossCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -132,17 +132,12 @@ private function updateStatusFromJobEvent(JobEvent $jobEvent): int
default:
$description = 'Le signalement a été mis à jour ("'.$item['statut'].'") par IDOSS';
}
$params = [
'domain' => IdossService::TYPE_SERVICE,
'action' => 'synchronize',
'description' => $description,
'name_partner' => $affectation->getPartner()->getNom(),
'type' => Suivi::TYPE_TECHNICAL,
];
$suivi = $this->suiviManager->createSuivi(
user: $this->adminUser,
signalement: $signalement,
params: $params,
description: $description,
type: Suivi::TYPE_TECHNICAL,
flush: false
);
$this->entityManager->persist($suivi);
}
Expand Down
7 changes: 2 additions & 5 deletions src/Controller/Back/AffectationController.php
Original file line number Diff line number Diff line change
Expand Up @@ -146,13 +146,10 @@ public function affectationResponseSignalement(
$suiviManager->createSuivi(
user: $adminUser,
signalement: $signalement,
params: [
'description' => $parameterBag->get('suivi_message')['first_accepted_affectation'],
'type' => Suivi::TYPE_AUTO,
],
description: $parameterBag->get('suivi_message')['first_accepted_affectation'],
type: Suivi::TYPE_AUTO,
isPublic: true,
context: Suivi::CONTEXT_NOTIFY_USAGER_ONLY,
flush: true
);
}

Expand Down
67 changes: 34 additions & 33 deletions src/Controller/Back/SignalementActionController.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use App\Entity\Suivi;
use App\Entity\Tag;
use App\Entity\User;
use App\Manager\SuiviManager;
use App\Repository\AffectationRepository;
use App\Repository\SuiviRepository;
use App\Service\Mailer\NotificationMail;
Expand All @@ -31,8 +32,8 @@ class SignalementActionController extends AbstractController
public function validationResponseSignalement(
Signalement $signalement,
Request $request,
ManagerRegistry $doctrine,
NotificationMailerRegistry $notificationMailerRegistry,
SuiviManager $suiviManager,
): Response {
$this->denyAccessUnlessGranted('SIGN_VALIDATE', $signalement);
if ($this->isCsrfTokenValid('signalement_validation_response_'.$signalement->getId(), $request->get('_token'))
Expand Down Expand Up @@ -77,17 +78,16 @@ public function validationResponseSignalement(
}
/** @var User $user */
$user = $this->getUser();
$suivi = new Suivi();
$suivi->setSignalement($signalement)
->setDescription('Signalement '.$description)
->setCreatedBy($user)
->setIsPublic(true)
->setType(Suivi::TYPE_AUTO)
->setSendMail(false);
$signalement->setStatut($statut);
$doctrine->getManager()->persist($signalement);
$doctrine->getManager()->persist($suivi);
$doctrine->getManager()->flush();

$suiviManager->createSuivi(
user : $user,
signalement: $signalement,
description: 'Signalement '.$description,
type : Suivi::TYPE_AUTO,
isPublic: true,
sendMail: false
);

$this->addFlash('success', 'Statut du signalement mis à jour avec succès !');
} else {
Expand All @@ -101,7 +101,7 @@ public function validationResponseSignalement(
public function addSuiviSignalement(
Signalement $signalement,
Request $request,
EntityManagerInterface $entityManager,
SuiviManager $suiviManager,
LoggerInterface $logger,
): Response {
$this->denyAccessUnlessGranted('COMMENT_CREATE', $signalement);
Expand All @@ -115,18 +115,16 @@ public function addSuiviSignalement(

return $this->redirectToRoute('back_signalement_view', ['uuid' => $signalement->getUuid()]);
}
/** @var User $user */
$user = $this->getUser();
$suivi = (new Suivi())
->setDescription($content)
->setIsPublic(!empty($form['notifyUsager']))
->setSignalement($signalement)
->setCreatedBy($user)
->setType(Suivi::TYPE_PARTNER);

try {
$entityManager->persist($suivi);
$entityManager->flush();
/** @var User $user */
$user = $this->getUser();
$suiviManager->createSuivi(
user: $user,
signalement: $signalement,
description: $content,
type: Suivi::TYPE_PARTNER,
isPublic: !empty($form['notifyUsager']),
);
} catch (\Throwable $exception) {
$this->addFlash('error', 'Une erreur est survenue lors de la publication.');
$logger->error($exception->getMessage());
Expand Down Expand Up @@ -176,8 +174,12 @@ public function deleteSuivi(
}

#[Route('/{uuid:signalement}/reopen', name: 'back_signalement_reopen')]
public function reopenSignalement(Signalement $signalement, Request $request, ManagerRegistry $doctrine, AffectationRepository $affectationRepository): RedirectResponse|JsonResponse
{
public function reopenSignalement(
Signalement $signalement,
Request $request,
AffectationRepository $affectationRepository,
SuiviManager $suiviManager,
): RedirectResponse|JsonResponse {
/** @var User $user */
$user = $this->getUser();
if ($this->isCsrfTokenValid('signalement_reopen_'.$signalement->getId(), $request->get('_token')) && $response = $request->get('signalement-action')) {
Expand All @@ -199,14 +201,13 @@ public function reopenSignalement(Signalement $signalement, Request $request, Ma
}
}
$signalement->setStatut(Signalement::STATUS_ACTIVE);
$suivi = new Suivi();
$suivi->setSignalement($signalement)
->setDescription('Signalement rouvert pour '.$reopenFor)
->setCreatedBy($user)
->setIsPublic('1' === $request->get('publicSuivi'))
->setType(Suivi::TYPE_AUTO);
$doctrine->getManager()->persist($suivi);
$doctrine->getManager()->flush();
$suiviManager->createSuivi(
user: $user,
signalement: $signalement,
description: 'Signalement rouvert pour '.$reopenFor,
type: Suivi::TYPE_AUTO,
isPublic: '1' === $request->get('publicSuivi'),
);
$this->addFlash('success', 'Signalement rouvert avec succès !');
} else {
$this->addFlash('error', 'Erreur lors de la réouverture du signalement !');
Expand Down
23 changes: 9 additions & 14 deletions src/Controller/Back/SignalementFileController.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
use App\Entity\Signalement;
use App\Entity\Suivi;
use App\Entity\User;
use App\Factory\SuiviFactory;
use App\Manager\SuiviManager;
use App\Messenger\Message\PdfExportMessage;
use App\Repository\FileRepository;
Expand Down Expand Up @@ -155,7 +154,7 @@ public function deleteFileSignalement(
FileRepository $fileRepository,
UploadHandlerService $uploadHandlerService,
EntityManagerInterface $entityManager,
SuiviFactory $suiviFactory,
SuiviManager $suiviManager,
): Response {
$fileId = $request->get('file_id');
$file = $fileRepository->findOneBy(
Expand All @@ -172,22 +171,18 @@ public function deleteFileSignalement(
$filename = $file->getFilename();
$type = $file->getFileType();
if ($uploadHandlerService->deleteFile($file)) {
/** @var User $user */
$user = $this->getUser();
$suivi = $suiviFactory->createInstanceFrom($user, $signalement);
if (!$this->isGranted('ROLE_ADMIN')) {
/** @var User $user */
$user = $this->getUser();
$description = $user->getNomComplet().' a supprimé ';
$description .= File::FILE_TYPE_DOCUMENT === $type ? 'le document suivant :' : 'la photo suivante :';
$suivi->setDescription(
$description
.'<ul><li>'
.$filename
.'</li></ul>'
$description .= '<ul><li>'.$filename.'</li></ul>';
$suiviManager->createSuivi(
user: $user,
signalement: $signalement,
description: $description,
type: Suivi::TYPE_AUTO,
);
$suivi->setType(Suivi::TYPE_AUTO);

$entityManager->persist($suivi);
$entityManager->flush();
}
if (File::FILE_TYPE_DOCUMENT === $type) {
$this->addFlash('success', 'Le document a bien été supprimé.');
Expand Down
40 changes: 15 additions & 25 deletions src/Controller/SignalementController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
use App\Entity\SignalementDraft;
use App\Entity\Suivi;
use App\Entity\User;
use App\Factory\SuiviFactory;
use App\Form\DemandeLienSignalementType;
use App\Manager\SignalementDraftManager;
use App\Manager\SuiviManager;
Expand Down Expand Up @@ -425,7 +424,6 @@ public function suiviProcedure(
UserManager $userManager,
SuiviManager $suiviManager,
EntityManagerInterface $entityManager,
SuiviFactory $suiviFactory,
SignalementDesordresProcessor $signalementDesordresProcessor,
): RedirectResponse|Response {
$signalement = $signalementRepository->findOneByCodeForPublic($code);
Expand Down Expand Up @@ -510,19 +508,13 @@ public function suiviProcedure(
N'hésitez pas à mettre à jour votre situation en envoyant un message via le formulaire ci-dessous.");
}

$params = [
'type' => Suivi::TYPE_USAGER,
'description' => $description,
];

$suivi = $suiviFactory->createInstanceFrom(
$user,
$signalement,
$params,
true
$suiviManager->createSuivi(
user: $user,
signalement: $signalement,
description: $description,
type: Suivi::TYPE_USAGER,
isPublic: true,
);
$entityManager->persist($suivi);
$entityManager->flush();

return $this->redirectToRoute(
'front_suivi_signalement',
Expand Down Expand Up @@ -583,7 +575,7 @@ public function postUserResponse(
UserManager $userManager,
Request $request,
EntityManagerInterface $entityManager,
SuiviFactory $suiviFactory,
SuiviManager $suiviManager,
UploadHandlerService $uploadHandlerService,
ValidatorInterface $validator,
): RedirectResponse {
Expand All @@ -598,13 +590,6 @@ public function postUserResponse(
}
$email = $request->get('signalement_front_response')['email'];
$user = $userManager->getOrCreateUserForSignalementAndEmail($signalement, $email);
$typeSuivi = Signalement::STATUS_CLOSED === $signalement->getStatut() ? Suivi::TYPE_USAGER_POST_CLOTURE : Suivi::TYPE_USAGER;
$suivi = $suiviFactory->createInstanceFrom(
user: $user,
signalement: $signalement,
params: ['type' => $typeSuivi],
isPublic: true,
);

$errors = $validator->validate($request->get('signalement_front_response')['content'], [
new \Symfony\Component\Validator\Constraints\NotBlank(),
Expand Down Expand Up @@ -637,9 +622,14 @@ public function postUserResponse(
$description .= '<br>Ajout de pièces au signalement<ul>'.implode('', $descriptionList).'</ul>';
}

$suivi->setDescription($description);
$entityManager->persist($suivi);
$entityManager->flush();
$typeSuivi = Signalement::STATUS_CLOSED === $signalement->getStatut() ? Suivi::TYPE_USAGER_POST_CLOTURE : Suivi::TYPE_USAGER;
$suiviManager->createSuivi(
user: $user,
signalement: $signalement,
description: $description,
type: $typeSuivi,
isPublic: true,
);

$messageRetour = Signalement::STATUS_CLOSED === $signalement->getStatut() ?
'Nos services vont prendre connaissance de votre message. Votre dossier est clôturé, vous ne pouvez désormais plus envoyer de message.' :
Expand Down
Loading

0 comments on commit d2ff7f2

Please sign in to comment.