Fiches salarié: Faciliter la saisie des nouvelles fiches salariés [GEN-749]#5469
Conversation
d8889a5 to
26575df
Compare
| return super().dispatch(request, *args, **kwargs) | ||
|
|
||
| def get_form_kwargs(self, step=None): | ||
| # Why is it called 20 times ? |
There was a problem hiding this comment.
Oo, j'ai pas du tout souvenir de ce comportement 🙈.
A confirmer mais un @functools.cache() devrais fonctionner car normalement ni self.company ni self.get_cleaned_data_for_step("choose-employee")["employee"] ne devrait être modifié pour la même instance du formulaire mais on est pas à l'abri que ça soit le cas...
There was a problem hiding this comment.
Le coupable est ce commit : 6f9e9d0
et la condition qui appelle le formulaire qui fait une requête, et cela en boucle via je ne sais quelle mystère que je n'ai pas trop creusé.
Cela explique aussi pourquoi on a étape 1/1 :

On "masque" l'étape suivante.
J'aimerai améliorer le fonctionnement de la vue, sauf que je ne sais pas quel est le bug que tu avais voulu corriger vu qu'on n'a plus l'historique sentry :/
Est-ce que par hazard tu t'en rappellerais ?
Le commit dit : www.employee_record: Prevent errors if a user go back to add last step
Est-ce que c'est s'il fait un get sur la dernière url (avec un précédent du navigateur) ?
J'aurais bien envie de bazarder la wizard view pour mettre un formulaire tout simple avec deux champs : le salarié, et le PASS (disabled au début, et dont les choix dépendent du salarié) mais ça fait du js non testé :(
(et ça correspond assez bien au message que tu avais mis : #3369 (comment))
There was a problem hiding this comment.
En effet après un retour navigateur ça plante.
Je vais ajouter un test explicite sur ce comportement.
There was a problem hiding this comment.
Après avoir bien creusé, j'ai quand même bien l'impression que cette lib a plein de soucis...
Cette histoire de retour arrière devrait se poser pour chacun de nos wizards.
Il faudrait systématiquement vérifier que le form de l'étape d'avant a un cleaned_data quand on essaye d'accéder à une étape particulière, mais ça revient à patcher au milieu de NamedUrlWizardView.get() ....
There was a problem hiding this comment.
De mémoire l'erreur Sentry était une KeyError "choose-employee" car la session n'existe plus après l'étape done.
Et oui j'ai jamais compris pourquoi celui-ci avait ce comportement alors que celui pour les demandes de prolongations utilise aussi le condition_dict et y avais pas ce genre de problèmes, peut-être parce que le formulaire n'a que 2 vues dont 1 conditionnelles et donc les first, current, next, last sont un peu toujours les mêmes 🤷
Après avoir bien creusé, j'ai quand même bien l'impression que cette lib a plein de soucis...
Comme je disais dans mon autre commentaire, celui en POST à l'air plutôt OK mais celui avec les vues part vite en couille, mais c'est le seul formulaire qui posais problème donc j'étais tenté de dire que c'était notre utilisation qui était mauvaise :)
There was a problem hiding this comment.
Dans les demandes de prolongation, on attend la fin de la première étape pour compter ^^
Du coup à la première étape, on a une barre de progression à 50% mais on ne marque pas étape 1/1
Et à la seconde étape, quand on sait s'il y aura une 3eme étape, on arrive à 66% avec 2/3 si c'est le cas.
df7b372 to
ab1a9d7
Compare
c8e9fe1 to
d47f648
Compare
d47f648 to
c987d72
Compare
c987d72 to
5cd26df
Compare
|
🥁 La recette jetable est prête ! 👉 Je veux tester cette PR ! |
5cd26df to
b720627
Compare
8090516 to
f828bd9
Compare
f828bd9 to
0af7222
Compare
5fbd20a to
37767b1
Compare
37767b1 to
e79e8c0
Compare
c67bd79 to
2da7cb5
Compare
| JobApplication.objects.eligible_as_employee_record(siae) | ||
| .filter( | ||
| hiring_start_at__gte=timezone.localdate() - relativedelta(months=4), | ||
| hiring_start_at__lte=timezone.localdate(), |
There was a problem hiding this comment.
Je suis presque sûr que des employeurs vont arriver et dire "Je comprend pas, j'ai embauché untel et ça ne s'affiche pas", et a priori on peux tomber dans un cas bizarre :
- L'employeur embauche a une date ultérieur
- Il n'a pas d'autres FS en attente
- On lui affiche le bouton "Créer une fiche salarié"
- Il retrouve son embauche dans la liste
Mais gros 👍 pour ajouter cette limite (y a pas un ticket d'ailleurs ?) mais a mon avis faut aussi le faire dans la vue de création et adapter le wording.
There was a problem hiding this comment.
La limite est indiquée dans le ticket -> https://www.notion.so/gip-inclusion/Fiches-salari-s-ETQ-qu-employeur-je-peux-savoir-facilement-quelle-FS-je-dois-cr-er-18a5f321b60481d08f09c4b01528ca55?pvs=4*
Par contre il est aussi indiqué que dans la page de création on les veut tous.
Tu changerais quoi comme wording ?
There was a problem hiding this comment.
J'aurais dû préciser, je ne parle pas de la limite à 4 mois (car effectivement on aurais eu le message tout le temps, comme au temps des FS hologrammes...) mais de la limite de ne pas prendre les embauches dans le futur, c'est une demande récurrente de bloquer l'envoi afin d'éviter des manipulations ensuite au support (en faite la personne est pas venue, etc) donc je pensais que tu avais embarqué ça dedans mais j'ai pas l'impression :).
Pour le wording je pensais juste à préciser qu'on affiche que les embauches "commencées" mais je ne trouve pas de bon adjectif pour ajouter à "Cette liste se base sur les embauches que vous avez déclarées sur le site des Emplois de l’inclusion." :/.
There was a problem hiding this comment.
Cette liste se base sur les embauches que vous avez déclarées sur le site des Emplois de l’inclusion et qui ont déjà démarrée. ?
There was a problem hiding this comment.
En effet, j'ai hiring_start_at__lte=timezone.localdate(), dans eligible_as_employee_record() pour que ce soit pris en compte partout et ton wording @xavfernandez
| employees = [] | ||
| # Add job seekers in order, whithout duplicates | ||
| for job_app in hiring_of_the_company.eligible_as_employee_record(self.company).select_related( | ||
| "job_seeker" | ||
| ): | ||
| if job_app.job_seeker not in employees: | ||
| employees.append(job_app.job_seeker) |
There was a problem hiding this comment.
Cette partie me fait me poser la question de si le tri ne devrais pas être fait au niveau des vues plutôt que dans la méthode du queryset en fait 🤔.
There was a problem hiding this comment.
Le soucis c'est de retrouver le tri une fois que tu as ta liste de candidats.
Je vais repasser dessus dans un second temps en utilisant le Wizard de @xavfernandez comme base à la place de deux de formtools, et j'arriverais sans doute à faire un truc plus propre :)
There was a problem hiding this comment.
Si tu supprimes les deux fonctions test_done_ alors faut aussi supprimer le code mort associé
les-emplois/itou/www/employee_record_views/views.py
Lines 147 to 163 in 2da7cb5
There was a problem hiding this comment.
En effet, On ne peut plus y arriver maintenant qu'on filtre les salariés à l'étape 2, je vais nettoyer le code.
There was a problem hiding this comment.
J'ai aussi ajouté une étape au test pour vérifier ce qui se passe dans ce cas (et mis un fixme pour quand ce sera plus simple de gérer : sans formtools)
2da7cb5 to
a24c541
Compare
0e6a7f1 to
cff23d3
Compare
rsebille
left a comment
There was a problem hiding this comment.
2 petits trucs à corriger mais je tamponne pour pas refaire un aller-retour derrière :).
Pour l'histoire de la limite sur les embauches futures, le comportement actuel ne me semble pas gênant donc a toi de voir ce que tu veux en faire.
| JobApplication.objects.eligible_as_employee_record(siae) | ||
| .filter( | ||
| hiring_start_at__gte=timezone.localdate() - relativedelta(months=4), | ||
| hiring_start_at__lte=timezone.localdate(), |
There was a problem hiding this comment.
J'aurais dû préciser, je ne parle pas de la limite à 4 mois (car effectivement on aurais eu le message tout le temps, comme au temps des FS hologrammes...) mais de la limite de ne pas prendre les embauches dans le futur, c'est une demande récurrente de bloquer l'envoi afin d'éviter des manipulations ensuite au support (en faite la personne est pas venue, etc) donc je pensais que tu avais embarqué ça dedans mais j'ai pas l'impression :).
Pour le wording je pensais juste à préciser qu'on affiche que les embauches "commencées" mais je ne trouve pas de bon adjectif pour ajouter à "Cette liste se base sur les embauches que vous avez déclarées sur le site des Emplois de l’inclusion." :/.
| JobApplication.objects.eligible_as_employee_record(siae) | ||
| .filter( | ||
| hiring_start_at__gte=timezone.localdate() - relativedelta(months=4), | ||
| hiring_start_at__lte=timezone.localdate(), |
There was a problem hiding this comment.
Cette liste se base sur les embauches que vous avez déclarées sur le site des Emplois de l’inclusion et qui ont déjà démarrée. ?
| hiring_start_at__gte=timezone.localdate() - relativedelta(months=4), | ||
| hiring_start_at__lte=timezone.localdate(), | ||
| ) | ||
| .values_list("job_seeker", flat=True) |
There was a problem hiding this comment.
| .values_list("job_seeker", flat=True) | |
| .values_list("job_seeker_id", flat=True) |
There was a problem hiding this comment.
Je me suis rendu compte que ça faisait pareil en fait, mais c'est vrai que le *_id est plus explicite sur ce qu'on récupère
The name case is already handled in the get_full_name method
To be used in a future commit
Only display employee without record, and in -hiring_start_at order Adapt steps wording accordingly
cff23d3 to
c733c8b
Compare
🤔 Pourquoi ?
Il manque :
get_form_kwarg()qui semble être appelé 20 fois (soit faire une mise en cache, soit comprendre pourquoi)🍰 Comment ?
🚨 À vérifier
🏝️ Comment tester ?
💻 Captures d'écran