Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] route : front_suivi_signalement_user_response #2320

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 4 additions & 16 deletions src/Controller/FrontSignalementController.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
use App\Repository\CommuneRepository;
use App\Repository\SignalementDraftRepository;
use App\Repository\SignalementRepository;
use App\Repository\UserRepository;
use App\Serializer\SignalementDraftRequestSerializer;
use App\Service\ImageManipulationHandler;
use App\Service\Mailer\NotificationMail;
Expand Down Expand Up @@ -397,19 +396,8 @@ public function suiviSignalement(
$fromEmail = \is_array($requestEmail) ? array_pop($requestEmail) : $requestEmail;
$suiviAuto = $request->get('suiviAuto');

/** @var User $userOccupant */
$userOccupant = $userManager->createUsagerFromSignalement($signalement, UserManager::OCCUPANT);
/** @var User $userDeclarant */
$userDeclarant = $userManager->createUsagerFromSignalement($signalement, UserManager::DECLARANT);
$type = null;
$user = null;
if ($userOccupant && $fromEmail === $userOccupant->getEmail()) {
$type = UserManager::OCCUPANT;
$user = $userOccupant;
} elseif ($userDeclarant && $fromEmail === $userDeclarant->getEmail()) {
$type = UserManager::DECLARANT;
$user = $userDeclarant;
}
$user = $userManager->getOrCreateUserForSignalementAndEmail($signalement, $fromEmail);
$type = $userManager->getUserTypeForSignalementAndUser($signalement, $user);
if ($user && $suiviAuto) {
$description = '';
if (Suivi::ARRET_PROCEDURE === $suiviAuto) {
Expand Down Expand Up @@ -461,7 +449,7 @@ public function suiviSignalement(
public function postUserResponse(
string $code,
SignalementRepository $signalementRepository,
UserRepository $userRepository,
UserManager $userManager,
Request $request,
EntityManagerInterface $entityManager,
SuiviFactory $suiviFactory,
Expand All @@ -470,7 +458,7 @@ public function postUserResponse(
if ($signalement = $signalementRepository->findOneByCodeForPublic($code)) {
if ($this->isCsrfTokenValid('signalement_front_response_'.$signalement->getUuid(), $request->get('_token'))) {
$email = $request->get('signalement_front_response')['email'];
$user = $userRepository->findOneBy(['email' => $email]);
$user = $userManager->getOrCreateUserForSignalementAndEmail($signalement, $email);
$suivi = $suiviFactory->createInstanceFrom(
user: $user,
signalement: $signalement,
Expand Down
42 changes: 36 additions & 6 deletions src/Manager/UserManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -127,16 +127,16 @@ public function loadUserTokenForUser(User $user, bool $flush = true): User
public function createUsagerFromSignalement(Signalement $signalement, string $type = self::OCCUPANT): ?User
{
$mail = (self::OCCUPANT === $type)
? $signalement->getMailOccupant()
: $signalement->getMailDeclarant();
? $signalement->getMailOccupant()
: $signalement->getMailDeclarant();

$prenom = (self::OCCUPANT === $type)
? $signalement->getPrenomOccupant()
: $signalement->getPrenomDeclarant();
? $signalement->getPrenomOccupant()
: $signalement->getPrenomDeclarant();

$nom = (self::OCCUPANT === $type)
? $signalement->getNomOccupant()
: $signalement->getNomDeclarant();
? $signalement->getNomOccupant()
: $signalement->getNomDeclarant();

if (null !== $mail) {
/** @var User $user */
Expand Down Expand Up @@ -168,6 +168,36 @@ public function createUsagerFromSignalement(Signalement $signalement, string $ty
return null;
}

public function getOrCreateUserForSignalementAndEmail(Signalement $signalement, ?string $email): ?User
{
/** @var User $userOccupant */
$userOccupant = $this->createUsagerFromSignalement($signalement, self::OCCUPANT);
/** @var User $userDeclarant */
$userDeclarant = $this->createUsagerFromSignalement($signalement, self::DECLARANT);
if ($userOccupant && $email === $userOccupant->getEmail()) {
return $userOccupant;
} elseif ($userDeclarant && $email === $userDeclarant->getEmail()) {
return $userDeclarant;
}

return null;
}

public function getUserTypeForSignalementAndUser(Signalement $signalement, ?User $user): ?string
{
if (!$user) {
return null;
}

if ($user->getEmail() === $signalement->getMailOccupant()) {
return self::OCCUPANT;
} elseif ($user->getEmail() === $signalement->getMailDeclarant()) {
return self::DECLARANT;
}

return null;
}

public function getSystemUser(): ?User
{
return $this->getRepository()->findOneBy(['email' => $this->parameterBag->get('user_system_email')]);
Expand Down
12 changes: 9 additions & 3 deletions templates/back/signalement/view/suivis.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
Suivi automatique

{% elseif suivi.createdBy is not null %}
<strong>{{ suivi.createdBy.nomComplet|capitalize }}</strong>
<div class="part-infos-hover"
data-user="{{ suivi.createdBy.nomComplet }}"
data-mail="{{ suivi.createdBy.email }}">
Expand All @@ -47,9 +48,14 @@
}}
</div>
{% else %}
<strong>{{ signalement.isNotOccupant ? signalement.nomDeclarant|upper~' '~signalement.prenomDeclarant|capitalize : signalement.nomOccupant|upper~' '~signalement.prenomOccupant|capitalize }}</strong>
<br>
{{ signalement.isNotOccupant ? 'DECLARANT':'OCCUPANT'}}
{# si le suivi est de 2024 ou posterieur on indique annonyme #}
{% if suivi.createdAt|date('Y') >= 2024 %}
Occupant ou déclarant
{% else %}
<strong>{{ signalement.isNotOccupant ? signalement.nomDeclarant|upper~' '~signalement.prenomDeclarant|capitalize : signalement.nomOccupant|upper~' '~signalement.prenomOccupant|capitalize }}</strong>
<br>
{{ signalement.isNotOccupant ? 'DECLARANT':'OCCUPANT'}}
{% endif %}
{% endif %}
</div>

Expand Down
2 changes: 1 addition & 1 deletion templates/back/table_result.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
{% endif %}
<small class="{{ classe }}">{{ signalement.lastSuiviBy }}</small> <br>
{% else %}
Aucun
Occupant ou déclarant
{% endif %}
</td>
<td>
Expand Down
4 changes: 2 additions & 2 deletions templates/front/suivi_signalement.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@
{% for suivi in signalement.suivis|reverse %}
<div class="fr-grid-row fr-grid-row--middle fr-stripped fr-rounded fr-p-5v {% if not suivi.createdBy %}fr-background-alt--orange-terre-battue{% endif %}">
<div class="fr-col-12 fr-col-md-2">
<small>[{{ suivi.createdBy ? (suivi.createdBy.partner ? suivi.createdBy.partner.nom : (suivi.createdBy.email ? (suivi.createdBy.email is same as signalement.mailOccupant ? 'OCCUPANT' : 'DECLARANT') : 'Aucun')): 'Vous' }}
]</small> <br>
<small>[{{ suivi.createdBy ? (suivi.createdBy.partner ? suivi.createdBy.partner.nom : (suivi.createdBy.email ? (suivi.createdBy.email is same as signalement.mailOccupant ? 'OCCUPANT' : 'DECLARANT') : 'Aucun')): (suivi.createdAt|date('Y') >= 2024) ? 'Occupant ou déclarant' : 'Vous' }}]</small>
<br>
<small>{{ suivi.createdAt|date('d/m/Y') }}</small>
</div>
<div class="fr-col-12 fr-col-md-10">
Expand Down
29 changes: 29 additions & 0 deletions tests/Functional/Manager/UserManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
namespace App\Tests\Functional\Manager;

use App\Entity\Partner;
use App\Entity\Signalement;
use App\Entity\SignalementUsager;
use App\Entity\User;
use App\Factory\UserFactory;
use App\Manager\SignalementUsagerManager;
use App\Manager\UserManager;
use App\Repository\PartnerRepository;
use App\Repository\SignalementRepository;
use App\Repository\UserRepository;
use App\Service\Mailer\NotificationMailerRegistry;
use App\Service\Token\TokenGeneratorInterface;
Expand Down Expand Up @@ -160,4 +162,31 @@ private function getTransferedUserToPartner(string $userEmail, string $partnerNa

return $userRepository->findOneBy(['email' => $userEmail]);
}

public function testGetUserAndTypeForSignalementAndEmail()
{
/** @var SignalementRepository $signalementRepository */
$signalementRepository = $this->entityManager->getRepository(Signalement::class);
$signalement = $signalementRepository->findOneBy(['reference' => '2023-120']);

$user = $this->userManager->getOrCreateUserForSignalementAndEmail($signalement, $signalement->getMailOccupant());
$this->assertEquals($signalement->getMailOccupant(), $user->getEmail());
$type = $this->userManager->getUserTypeForSignalementAndUser($signalement, $user);
$this->assertEquals(UserManager::OCCUPANT, $type);

$user = $this->userManager->getOrCreateUserForSignalementAndEmail($signalement, $signalement->getMailDeclarant());
$this->assertEquals($signalement->getMailDeclarant(), $user->getEmail());
$type = $this->userManager->getUserTypeForSignalementAndUser($signalement, $user);
$this->assertEquals(UserManager::DECLARANT, $type);

$user = $this->userManager->getOrCreateUserForSignalementAndEmail($signalement, 'lalala@nanani.fr');
$this->assertNull($user);
$type = $this->userManager->getUserTypeForSignalementAndUser($signalement, $user);
$this->assertNull($type);

$signalement->setMailDeclarant($signalement->getMailOccupant());
$user = $this->userManager->getOrCreateUserForSignalementAndEmail($signalement, $signalement->getMailDeclarant());
$type = $this->userManager->getUserTypeForSignalementAndUser($signalement, $user);
$this->assertEquals(UserManager::OCCUPANT, $type);
}
}
Loading