Bug #90074
toulouse-maelis: date de notification à maélis non positionnée
0%
Description
Sur une erreur 502 du proxy (la PFS à Toulouse)
https://sentry.entrouvert.org/entrouvert/publik/issues/122809/?referrer=RegressionActivityEmail
le connecteur se mange une SOAPFault et décide d'arrêter là la notification à Maélis (dans les faits il semblerait que la notification soit bien reçue, que ce soit sa réponse qui ne parvienne pas au connecteur).
fails to notify paid invoice <Invoice "102/50996"> (...), stopping.
Pour cela il enregistre une date de notification,
obj.maelis_notification_date = now() obj.maelis_notification_data = result obj.save()
afin que le cron qui passe derrière ne renvoie pas la notification.
> con.invoice_set.filter(maelis_notification_date__isnull=True, lingo_notification_date__lt=now() - datetime.timedelta(minutes=15)) <QuerySet [<Invoice "102/50996">]>
Sauf que régulièrement, ces 2 champs ne sont pas renseignés (champs mis à jours depuis, par le cron).
> con.invoice_set.get(regie_id=102, invoice_id=50996).__dict__ ... 'maelis_notification_data': None, 'lingo_notification_date': datetime.datetime(2024, 4, 26, 8, 19, 9, 250411, tzinfo=<UTC>), 'maelis_notification_date': None,
On a déjà identifié cette erreur mais sans réussir à l'expliquer.
https://dev.entrouvert.org/issues/85758#note-9
- soit "E511 : Le montant du paiement ne correspond pas au solde des factures"
parce que Maélis la sait payée et que de son point de vue il ne reste plus rien à solder.
- ou, si l'envoi tarde un peu, l'erreur "E500 : Le montant est requis et ne peut être vide"
parce que le connecteur à entre temps récupéré une mise à jour de la facture (puisque Maélis la sait payée) et tente de payer un montant nul.amount=str(Decimal(obj.maelis_data['amountInvoice']) - Decimal(obj.maelis_data['amountPaid'])
Ticket Sigec pour tenter de régler le problème en amont : ne pas avoir autant d'erreurs sur les notifications de factures payées.
https://redmine.sigec.fr/issues/4278
Historique
Mis à jour par Robot Gitea il y a 10 jours
- Statut changé de Nouveau à Solution proposée
Nicolas Roche (nroche) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/passerelle/pulls/519
- Titre : wip/90074-updating-maelis-notification-date
- Modifications : https://git.entrouvert.org/entrouvert/passerelle/pulls/519/files
Mis à jour par Benjamin Dauvergne il y a 6 jours
À me retourner la tête sur le sujet, vu qu'il est certain que la mise à jour de maelis_notification_date a bien lieu, c'est que l'effacement de ce champ vient d'une autre mise à jour. Invoice.notify() lock bien l'invoice avant de le mettre à jour mais il y a des tas de Invoice.save()
ailleurs dans le code (notamment dans get_invoices()) qui ne le font pas.
- remplacer les .save() par des .save(update_fields=...) et vérifier qu'il n'y a pas recouvrement avec d'autres mises à jour qui utiliserait un verrou pour mettre à jour les mêmes champs,
- utiliser un verrou,
- utiliser
.objects.filter(pk=invoice.pk).update(...)
De forte chance que les coupables soient les 2 invoice.save()
dans get_invoices()
.
Mis à jour par Robot Gitea il y a 6 jours
- Statut changé de Solution proposée à En cours
Benjamin Dauvergne (bdauvergne) a relu et demandé des modifications sur une pull request sur Gitea concernant cette demande :