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

PASS IAE: La date de début du contrat doit être est après la date de fin du PASS [GEN-2225] #5248

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

calummackervoy
Copy link
Contributor

🤔 Pourquoi ?

En ce moment c'est possible d'embaucher un candidat après son PASS IAE est expiré, car notre logique cible timezone.now() quand il devrait cibler hiring_start_at de la poste.

🍰 Comment ?

J'ai extendé les utilités des modèles et ses managers à considérer la date d'embauche où nécessaire.

J'ai rélu la logique autor des approbations et des diagnostiques d'éligibilité et j'ai fais des fixes impliqués par la cause du bug (que le hiring_start_at est impliqué dans la validité du pass).

Le champ expires_at utilise DateTimeField mais hiring_start_at du JobApplication utilise DateField. J'ai inclus un fonction utilitaire make_date_timezone_aware pour soutenir le gestion des dates.

Finalement j'ai fais quelques petites optimisations sur les queries, qui a causé des groses changements aux snapshots.

🚨 À vérifier

  • Mettre à jour le CHANGELOG_breaking_changes.md ?

Useful when providing a DateField to a query on the DateTimeField of another field/model

Refactor make_date_timezone_aware to use duck-typing
…igibility

Extend tests for PASS IAE validity
last_valid_diagnosis = self.last_considered_valid(job_seeker, for_siae=for_siae)
return job_seeker.has_valid_approval_for_date(on_date) or (
last_valid_diagnosis and last_valid_diagnosis.expires_at > make_date_timezone_aware(on_date)
)

def last_considered_valid(self, job_seeker, for_siae=None, prefetch=None):
Copy link
Contributor Author

Choose a reason for hiding this comment

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

last_considered_valid m'a posé une colle. Avec la description du méthode, il me semble que c'est la dernière diagnostique aujourd'hui pour le candidat, et que je devrais ignorer le fonction dans ce PR.

Par contre, c'est utilisé dans le modèle JobApplication, dans get_eligibility_diagnosis :

return EligibilityDiagnosis.objects.last_considered_valid(self.job_seeker, for_siae=self.to_company)

Donc c'est possible que ce fonction devrait produire une éligibilité qui est valide pour la date de début d'embauche

@@ -423,6 +423,14 @@ def test_list_for_siae_filtered_by_eligibility_validated(self, client):
response = client.get(reverse("apply:list_for_siae"), {"eligibility_validated": True})
assert response.context["job_applications_page"].object_list == []

# Not expired, but will be when the job starts
diagnosis.expires_at = timezone.now() + datetime.timedelta(days=1)
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Dans une autre assertion de ce test nous avons :

# Make sure the diagnostic expired - it should be ignored
diagnosis.expires_at = timezone.now() - datetime.timedelta(days=diagnosis.EXPIRATION_DELAY_MONTHS * 31 + 1)

Pourquoi on utilise EXPIRATION_DELAY_MONTHS ici ? Ce n'est pas considéré expiré si c'est un jour après le expires_at ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant