Projet

Général

Profil

Bug #22756

lingo: la date limite de paiement est une date

Ajouté par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Version cible:
-
Début:
23 mars 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Comme l'indiquait initialement la page https://dev.entrouvert.org/projects/passerelle/wiki/Connecteur_famille.
Je l'ai corrigé.


Fichiers


Demandes liées

Lié à Passerelle - Development #23315: teamnet_axel: les dates de création et limite de paiement doivent être des datetimesRejeté20 avril 2018

Actions
Lié à Passerelle - Development #23330: connecteur famille: les dates de création et limite de paiement doivent être des datetimesRejeté23 avril 2018

Actions
Lié à Combo - Bug #23473: notify_new_remote_invoices → AttributeError: 'NoneType' object has no attribute 'tzinfo'Fermé27 avril 2018

Actions
Lié à Passerelle - Development #23506: connecteurs famille et facture: les dates de création et limite de paiement sont des datesFermé30 avril 2018

Actions

Révisions associées

Révision b493ae74 (diff)
Ajouté par Serghei Mihai (congés, retour 15/05) il y a presque 6 ans

lingo: use wrapper for remote invoices notifications (#22756)

Fix creation and payment limit dates parsing.

Historique

#2

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.

#3

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).

#4

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.

#5

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).

#6

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans

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

#7

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).

#8

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).

#9

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é
#10

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é
#11

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é
#12

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
#13

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.

#14

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.

#15

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".

#16

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a environ 6 ans

Ok.Intepretons les comme des dates.

Je mets à jour le wiki pour préciser qu'elles sont incluses.

#17

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é
#18

Mis à jour par Thomas Noël il y a presque 6 ans

  • Projet changé de Combo à Lingo
#20

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)) ?

#21

Mis à jour par Serghei Mihai (congés, retour 15/05) il y a presque 6 ans

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.

#22

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

Ack.

#23

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.
#24

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

Formats disponibles : Atom PDF