Bug #22756
lingo: la date limite de paiement est une date
0%
Description
Comme l'indiquait initialement la page https://dev.entrouvert.org/projects/passerelle/wiki/Connecteur_famille.
Je l'ai corrigé.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
- Fichier 0001-lingo-fix-invoice-payment-limit-date-parsing-22756.patch 0001-lingo-fix-invoice-payment-limit-date-parsing-22756.patch ajouté
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a environ 6 ans
J'ai dû rater une étape : on avait dit que justement ça serait un datetime pour éviter de se poser la question "est-ce que le jour est inclu ou pas" ? (et donc indiquer 00h00 ou 23h59 pour facilement clarifier).
C'est un peu dommage d'avoir abandonné ça, mais bon, ma faute, j'aurais dû être plus attentif.
Pour clarifier le code, remplacer "now = timezone.now()" par "today = timezone.now().date()".
Faudra mettre la doc à jour en précisant si la date limite est incluse ou pas... (et je me fatigue même pas à comprendre le code pour le savoir :) )
Et, quand même, en relisant le code dans passerelle :- apps/family/loaders/concerto_orleans.py : 'pay_limit_date': get_datetime(i['dat_limitepaie_fac']) (peut très bien renvoyer un datetime)
- passerelle/contrib/agoraplus/normalize.py: invoice['pay_limit_date'] = datetime.strptime(invoice['dateLimitePayment'], DATETIME_FORMAT) : va renvoyer un datetime
- passerelle/contrib/fake_family/default_database.py: "pay_limit_date": limit.strftime('%Y-%m-%dT%H:%M:%S')
- passerelle/contrib/stub_invoices/models.py: 'pay_limit_date': now + datetime.timedelta(days=2+random.randint(0, 10))
Bref, c'est pas mal le boxon... Je serais presque d'avis de pouvoir supporter les deux formats, et comparer avec now() ou today() selon le cas.
Mis à jour par Frédéric Péters il y a environ 6 ans
Le connecteur "fausses factures" (qui est ma référence en local pour les tests sur les factures) retourne des datetimes.
(entre temps Thomas a complété)
Plutôt que parser différemment les choses ici, il faudrait laisser à RemoteItem l'interprétation de ce qui est reçu (il accepte déjà les dates nues autant que les dates/heures).
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
Le loader concerto et le connecteur Teamnet retournent des dates:
passerelle/apps/family/models.py::get_datetime
-
passerelle/contrib/teamnet_axel/utils.py::normalize_invoice
parce que l'export d'Orléans, comme le WS de Teamnet, contient des dates, présumant que la date est incluse dans le delai de paiement.
Donc je vois plutôt une correction de l'interprétation de la date limite de paiement dans lingo pour ne pas appliquer make_aware
.
Mis à jour par Frédéric Péters il y a environ 6 ans
Donc je vois plutôt une correction de l'interprétation de la date limite de paiement dans lingo pour ne pas appliquer make_aware.
J'insiste : il faudrait laisser à RemoteItem l'interprétation de ce qui est reçu. (→ ici également passer par RemoteItem plutôt qu'ajouter un endroit où les factures sont parsées différemment).
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
- Fichier 0001-lingo-use-wrapper-for-remote-invoices-notifications-.patch 0001-lingo-use-wrapper-for-remote-invoices-notifications-.patch ajouté
- Sujet changé de lingo: la date limite de payment est une date et non datetime à lingo: la date limite de paiement peut être date ou datetime
Oui, on aurait du utilser RemoteItem
au début de l'écriture du code sur les notifications.
Pour ne pas avoir à deviner dans le code des notifs si c'est un date
ou datetime
, RemoteItem
transforme la date limite de paiement en datetime
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
Ça me va de ne plus utiliser un dico non typé, mais clairement RemoteItem doit avoir une compréhension unique de ce qui est renvoyé concernant jour inclue ou jour exclu et toujours la même (en cas de date, pour les datetime le problème ne se pose pas, enfin j'espère, mais s'il se posait la réponse serait la même). Ensuite c'est aux connecteurs de renvoyer soit le jour d'avant, soit le jour courant soit le jour d'après selon ce qu'on a décidé pour RemoteItem (je ne connais pas la situation exacte, c'est juste que pour moi c'est la source, le connecteur, qui doit s'adapter dans ces cas là, RemoteItem ne peut pas deviner ça).
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
Effectivement, tous les connecteurs ne suivent pas encore le format qu'on s'est défini. La preuve, je me suis embrouillé en me basant sur un des connecteurs.
C'est l'occasion de les normer (y en a pas des masses).
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
- Lié à Development #23315: teamnet_axel: les dates de création et limite de paiement doivent être des datetimes ajouté
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
- Lié à Development #23330: connecteur famille: les dates de création et limite de paiement doivent être des datetimes ajouté
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
- Lié à Bug #23473: notify_new_remote_invoices → AttributeError: 'NoneType' object has no attribute 'tzinfo' ajouté
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
- Sujet changé de lingo: la date limite de paiement peut être date ou datetime à lingo: la date limite de paiement est une datetime
Mis à jour par Frédéric Péters il y a environ 6 ans
Je ne vois pas vraiment de ticket central sur le sujet, je note du coup ici qu'on parle de dates limite de paiement, que le passage en datetime peut plutôt être une source de confusion (dans les interfaces on continue à parler de date et à juste afficher une date, il me semble).
Je tendrais plutôt à ce qu'on définisse le caractère inclus/exclu de la date de fin et que les connecteurs suivent ce qui aura été défini.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
Pour moi, ça apporte plus de confusion d'avoir certains champs de type date
et d'autres datetime
, comme par exemple dans le connecteur family
: la date limite de paiement est une date
et la date de paiement est une datetime
.
Côté combo, tous ces champs sont formatés comme des dates, donc même si passerelle retourne des datetimes
ça fonctione.
Mis à jour par Frédéric Péters il y a environ 6 ans
même si passerelle retourne des datetimes ça fonctionne
On doit pouvoir informer sans ambiguité l'usager de la date limite, et on lui affiche une date, on doit donc pouvoir préciser si celle-ci est exclue ou pas, et on ne vas pas avoir dans combo du code pour dire "ah 23h59 donc c'est date de fin inclue".
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
- Fichier 0001-lingo-use-wrapper-for-remote-invoices-notifications-.patch 0001-lingo-use-wrapper-for-remote-invoices-notifications-.patch ajouté
- Sujet changé de lingo: la date limite de paiement est une datetime à lingo: la date limite de paiement est une date
Ok.Intepretons les comme des dates.
Je mets à jour le wiki pour préciser qu'elles sont incluses.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans
- Lié à Development #23506: connecteurs famille et facture: les dates de création et limite de paiement sont des dates ajouté
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 6 ans
- Fichier 0001-lingo-use-wrapper-for-remote-invoices-notifications-.patch 0001-lingo-use-wrapper-for-remote-invoices-notifications-.patch ajouté
Patch à jour après ménage dans mes rebases locaux.
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
Remarque de forme:
invoice = build_remote_item(invoice, self)
de plus en plus j'essaie de ne pas écraser une variable existante, surtout quand c'est une conversion de format/désérialisation/sérialisation parce qu'en cas de trace on perd moins de contexte comme cela, ici tu pourrais nommer invoice avant le build_remote_item
srlzed_invoice
ou un truc du genre), ou alors remettre remote_item comme nom (la classe d'objet s'appelle comme cela après tout).
Du coverage je vois que deux lignes ne sont pas testés dans ce code (voir https://jenkins.entrouvert.org/job/combo/2023/cobertura/apps_lingo/models_py/, ligne 250-251), au passage j'ajouterai bien leur couverture.
chipotage:
.strftime(date_format)
plutôt .date().isoformat()
(ça fait pareil, mais c'est plus clair il me semble, parce que .strftime() existe aussi sur la classe @date)) ?
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 6 ans
- Fichier 0001-lingo-use-wrapper-for-remote-invoices-notifications-.patch 0001-lingo-use-wrapper-for-remote-invoices-notifications-.patch ajouté
Patch avec le renommage de la variable en remote_invoice
et tests à jour, comme tu le suggères.
Pour le coverage, j'ai detecté un bug. Je fais un ticket.
Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 6 ans
- Statut changé de Nouveau à Résolu (à déployer)
commit b493ae74063dc990c9f8c2e56f11ddecf14912bf (origin/master) Author: Serghei Mihai <smihai@entrouvert.com> Date: Tue Apr 3 11:33:37 2018 +0200 lingo: use wrapper for remote invoices notifications (#22756) Fix creation and payment limit dates parsing.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
lingo: use wrapper for remote invoices notifications (#22756)
Fix creation and payment limit dates parsing.