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

[BO - Signalement] Affichage champs obligatoires / facultatifs et des erreurs à l'édition #2303

Merged
merged 7 commits into from
Mar 8, 2024

Conversation

sfinx13
Copy link
Collaborator

@sfinx13 sfinx13 commented Feb 28, 2024

Ticket

#2168

Description

Améliorer l'UX en affichant les erreurs dans la modale et mentionner les champs facultatifs

Changements apportés

  • Soumission des formulaires en mode AJAX (à l'aide d'un l'attribut data-ajax-form)
  • Adaptation du contrôleur SignalementEditController
  • Revues des contraintes suite au document fourni dans le ticket (Merci Hélène :-))
  • Ajout des contraintes manquantes
  • Affichage de la mention facultatif de manière dynamique quand nécessaire
  • Retourner un profil déclarant pour un ancien dossier
  • Liaison des label aux champs

Pré-requis

  • make npm-build
  • Charger la collection postman pour créer les signalements POST puis PUT
    image

Tests

S'appuyer sur le fichiers pour vérifier les contraintes https://docs.google.com/spreadsheets/d/1hvhNHY5ZS-MtgbEBo8WCUrj4aKExJqMxGANP3Z1zDEg/edit?usp=sharing

  • Créer un signalement pour chaque type de profil et éditer chaque modal en provoquant des erreurs afin de vérifier que les erreurs s'affichent bien dans la modale.
  • [Postman] Créer un signalement pour chaque type de profil et éditer chaque modal puis soumettez le formulaire.
  • Soumettez une modale en modifiant le token csrf, une alerte doit s'afficher.
  • Faire des éditions avec un ancien formulaire (les nouveaux champs ne doivent pas être bloquant)

Comment on lines +1980 to +1993
if (null !== $this->createdFrom) {
return $this->profileDeclarant;
}

if (false === $this->isNotOccupant) {
return ProfileDeclarant::LOCATAIRE;
}

if (\in_array($this->lienDeclarantOccupant, ['PROFESSIONNEL', 'pro', 'assistante sociale', 'curatrice'])) {
return ProfileDeclarant::TIERS_PRO;
}

return ProfileDeclarant::TIERS_PARTICULIER;
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Compliqué à gérer les erreurs sur les anciens signalements sans profileDeclarant, du coup détermine un profileDeclarant à l'aide de isNotOccupant et lienDeclarantOccupant
['PROFESSIONNEL', 'pro', 'assistante sociale', 'curatrice'] trouvé dans la base de données

Pour les bailleurs et tiers de secours c'était pas géré avant
Voyez vous des effets de bord ?

'App\\Dto\\Request\\Signalement\\CoordonneesFoyerRequest',
'nom',
signalement.profileDeclarant) }}</label>
<input class="fr-input" type="text" id="nom" name="nom" value="{{ signalement.nomOccupant }}" maxlength="50">
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ça fait des doublons d'id (avec les autres modales), ce n'est pas valide en html
et du coup l'attribut for ne va pas forcément pointer vers le bon
il faut des id vraiment uniques

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Effectivement :-) dire que j'avais hésité à me lancer la dedans :-D

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ils ont tous des id différents maintenant

Copy link
Collaborator

@emilschn emilschn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quelques retours de typo. Un retour (multiple) important en html.
Pas encore testé.

Copy link
Collaborator

@numew numew left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quelques trucs à revoir mais le fonctionnement est cool, comme dit dans un commentaire je regrette que l'on soit pas passé sur une utilisation des formType qui aurait simplifié les choses mais c'est déja pas mal

private EntityManagerInterface $entityManager,
) {
}
private const ERROR_MSG = 'Une erreur s\'est produite. Veuillez actualiser la page.';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On ne précise pas qu'il s'agit d'une erreur Token CSRF ?

Copy link
Collaborator Author

@sfinx13 sfinx13 Mar 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pas besoin, c'est un message pour les utilisateurs, ils ne savent pas ce qu'est un token CSRF.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je suis pas d'accord avec ça : nous on sait ce que ca signifie, et le jour ou on reçoit une copie d'écran avec ce message on comprends mieux que "Une erreur s'est produite. Veuillez actualiser la page"

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A voir à l'usage pour l'instant ça va :-)

divErrorElement.classList.remove('fr-input-group--error');
let pErrorElement = divErrorElement.querySelector('.fr-error-text');
if (pErrorElement) {
pErrorElement.remove();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Il faudrait appliquer le meme fonctionnement au submit car si je corrige une erreur mais pas toutes et que je renvoi le formulaire ca ne se met pas à jour correctement

private readonly ?string $typeLogementNatureAutrePrecision = null,
#[Assert\NotBlank(message: 'Merci de selectioner pièce unique ou plusieurs pièces.')]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si je dis pas de bêtises on doit pouvoir laisser des valeur vides (permet de différencier sir l'user n'a pas répondu ou a mis je ne sais pas, ou si ca vient des ancien formulaire) donc dans quasiment tous les cas il faut retirer les NotBlank

Copy link
Collaborator Author

@sfinx13 sfinx13 Mar 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

il est prévu de faire évoluer le formulaire de dépôt et ajouter des je ne sais pas sur certaines questions
#2275

il faudrait progressivement que les anciens formulaires puisse migrer sur les nouvelles règles de saisie avec des règles équivalentes sur le formulaire front et les éditions.

C'est vers la ou on doit tendre que de rester dans un état hybride (ancien/nouveau)

C'est ce qui m'a motivé à ajouter un profileDeclarant pour les anciens formulaires

src/Service/FormHelper.php Show resolved Hide resolved
): string {
$reflector = new \ReflectionClass($class);
/** @var \ReflectionAttribute[] $attributes */
$attributes = $reflector->getProperty($field)->getAttributes(NotBlank::class);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'aurais préféré qu'on se base sur l'attribut required de l'input, ce qui nous aurait forcé à passer les champ obligatoire en required ce qui n'est pas le cas actuellement (ex : nom bailleur) pour éviter des validation serveur de ce type.
Ce qui serait automatique si on avait utilisé les formType, c'est un travail plus conséquent mais on aurait gagné en simplicité et maintenance à mon sens.

Copy link
Collaborator Author

@sfinx13 sfinx13 Mar 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Les jours de la fiche de signalement tel qu'on l'a aujourd'hui sont comptés :-D
Même si sur cette PR ça aurait facilité de tout gérér via des formulaires symfony mais c’était peu lourd de tout revoir alors qu'on se dirige vers une refonte très bientôt avec l'abandon du twig sur la fiche.

L'absence de vérification coté client c'était pour pas alourdir les templates html et ça reste des éditions qui se feront à la marge.

Bien entendu le mieux aurait été de gérer les deux mais ça faisait lourd.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je continue de trouver dommage de pas avoir l'attribut required HTML pour les quelque champs toujours obligatoire mais ok

Copy link
Collaborator

@emilschn emilschn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Encore une typo et un 'nsp' :)

@sfinx13 sfinx13 force-pushed the feature/2168-edit-modale-form-ajax branch from 6a57fa5 to 5952f9d Compare March 5, 2024 11:54
Copy link
Collaborator

@numew numew left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'ai mis deux remarque mais j'approuve

message: 'Merci de sélectioner pièce unique ou plusieurs pièces.',
groups: ['LOCATAIRE', 'BAILLEUR_OCCUPANT', 'BAILLEUR', 'TIERS_PARTICULIER', 'TIERS_PRO', 'SERVICE_SECOURS']
)]
#[Assert\Choice(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A terme il faudrait qu'on ai la contrainte sur les tous les champs fermé, mais on va oublier dans l'immédiat

private readonly ?string $nomStructure = null,
#[Assert\NotBlank(message: 'Merci de sélectionner une civilité.', groups: ['LOCATAIRE'])]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je pense que c'est un champ que l'on avait pas dans l'ancien formulaire et qu'il faudrait pouvoir laisser vide

Copy link
Collaborator Author

@sfinx13 sfinx13 Mar 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oui celui ci je l'ai laissé volontairement. ça reste raisonnable de forcer la civilité pour les anciennes fiches. On laisse venir si c'est bloquant

{
public function __construct(
private readonly ?string $isLogementSocial = null,
#[Assert\NotBlank(['message' => 'Veuillez définir le champ demande relogement', 'groups' => ['LOCATAIRE', 'BAILLEUR_OCCUPANT']])]
#[Assert\NotBlank(
message: 'Veuillez définir le champ demande relogement.',
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Veuillez préciser si une demande de relogement a été faite

Copy link
Collaborator

@emilschn emilschn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Retours de test

Possible de désactiver le bouton Valider en attendant le résultat de la requête Ajax ?

Quelques messages d'erreur à ajuster.

Sinon en tant que bailleur, il n'est pas inscrit que le nombre d'étages (d'ailleurs, le nom du champ pourrait être changé, non ?) est facultatif. Pourtant, si je supprime, je ne suis pas bloqué.

Copy link

sonarcloud bot commented Mar 7, 2024

Quality Gate Passed Quality Gate passed

Issues
10 New issues
0 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
0.0% Duplication on New Code

See analysis details on SonarCloud

@sfinx13
Copy link
Collaborator Author

sfinx13 commented Mar 7, 2024

@emilschn

Possible de désactiver le bouton Valider en attendant le résultat de la requête Ajax ?

C'est fait

Sinon en tant que bailleur, il n'est pas inscrit que le nombre d'étages (d'ailleurs, le nom du champ pourrait être changé, non ?) est facultatif. Pourtant, si je supprime, je ne suis pas bloqué.

Vieux champs désormais facultatif

Copy link
Collaborator

@emilschn emilschn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Super !
Lecture et test ok !

@emilschn emilschn merged commit 469fbb5 into develop Mar 8, 2024
3 checks passed
@sfinx13 sfinx13 deleted the feature/2168-edit-modale-form-ajax branch March 11, 2024 08:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants