Projet

Général

Profil

Development #10789

teamnet_axel: vérifier la présence d'un pdf de la facture

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

Statut:
Fermé
Priorité:
Normal
Version cible:
-
Début:
02 mai 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Essayer de récuperer le fichier pdf au lieu de se baser sur le flag FPDF renvoyé par le webservice


Fichiers

Révisions associées

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

teamnet_axel: return 404 response when invoice pdf not available (#10789)

Historique

#1

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

#2

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

La situation actuelle n'est pas bien claire pour moi, has_pdf est toujours à False ? Si ce n'est pas le cas le code me semble ne pas faire ce pourquoi il est fait (il met bien True quand le PDF est détecté mais il ne remet pas False quand il ne l'est pas).

Et donc pour chaque ligne de facture on va en plus récupérer un fichier, chaque fois qu'on affiche cette ligne ? Ça tient la route niveau perf ou le bloc met 30s à se charger (disons si on 30 factures dans l'historique) ?

#3

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

Selon moi ça ne tiendra pas, si une personne a 20 factures dans son historique, on va charger les 20, et donc paf, 20 secondes, 10 au mieux. Ca rend la page inutilisable, même avec tout l'ajax du monde, attendre plus de 5 secondes personne ne le fait, tout le monde reclique (sans compter qu'il y a "x" régies à Fontenay).

La seule solution est de régler la source du problème → balle dans la camp de la ville et de teamnet.

#4

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

Alors la bonne solution c'est peut-être de gérer correctement l'erreur d'absence de fichier PDF (sans traceback, log d'erreur, etcc), et d'afficher un beau popup "Ici il devrait y avoir une facture, mais en fait non, svp prenez contact avec votre mairie 0x.xx.xx.xx.xx.".

#5

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

Benjamin Dauvergne a écrit :

Alors la bonne solution c'est peut-être de gérer correctement l'erreur d'absence de fichier PDF (sans traceback, log d'erreur, etcc), et d'afficher un beau popup "Ici il devrait y avoir une facture, mais en fait non, svp prenez contact avec votre mairie 0x.xx.xx.xx.xx.".

Yep (modulo que combo présente un simple lien, et qu'il faut donc renvoyer un PDF, je crois bien).

Mais ce n'est pas la bonne solution, c'est "le moins pire des contournements" ;-)

#6

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

Un simple lien vers quoi ? le portail famille ou une URL sur passerelle ?

#7

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

Un simple lien (de fait c'est lingo qui dit = <a href="{% url 'download-item-pdf' regie_id=item.regie.pk item_id=item.id %}" class="icon-pdf">{% trans "Download" %}</a>).

On pourrait donc renvoyer un mini text/html dans lingo (ItemDownloadView), oui.

#8

Mis à jour par Frédéric Péters il y a presque 8 ans

Ne bricolons pas dans lingo.

On ne pourrait pas en oneshot passer sur toutes les factures, stocker la liste de celles qui n'ont pas de PDF dans un fichier, et utiliser ça comme blacklist dans le connecteur ?

#9

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

Frédéric Péters a écrit :

Ne bricolons pas dans lingo.

On ne pourrait pas en oneshot passer sur toutes les factures, stocker la liste de celles qui n'ont pas de PDF dans un fichier, et utiliser ça comme blacklist dans le connecteur ?

Non (il n'y a aucun webservice pour "la liste de toutes les factures")

#10

Mis à jour par Frédéric Péters il y a presque 8 ans

Oublier tout ça et produire proprement une erreur 404 quand le pdf n'existe pas et attraper ça dans la "ItemDownloadView" pour afficher un message "désolé contactez la mairie" ?

#11

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

Frédéric Péters a écrit :

Ne bricolons pas dans lingo.

On ne pourrait pas en oneshot passer sur toutes les factures, stocker la liste de celles qui n'ont pas de PDF dans un fichier, et utiliser ça comme blacklist dans le connecteur ?

De toute façon il faut que dans ItemDownloadView on gère le fait que peut-être le connecteur ne marche pas on ne peut pas juste faire une 500, si le fichier n'est pas disponible on le dit, surtout qu'ici ça concerne très peu de gens, autant traiter cet autre problème et ça corrigera celui de Fontenay.

Donc mon bricolage ce serait de faire que le web-service de download coté passerelle retourne une erreur 502 (après tout passerelle n'est qu'un proxy) avec une erreur formatée en JSON et que de son coté la vue ItemDownloadView pourrait retourner une redirection vers la page en cours (HTTP_REFERRER ou /) en ajoutant un messages.error() au passage à partir du message d'erreur renvoyé par passerelle, au pire juste 'Facture non disponible' (je ne sais pas comment cette vue a pu finir par s'appeler ItemDownloadView, en français ça fait quand même "Truc téléchargement"...).

#12

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

Et 404 c'est bien aussi, je ne suis pas un fétichiste des codes d'erreur.

#13

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

On peut gérer proprement le retour de passerelle dans le vue ItemDownloadView(afficher un message à l'utilisateur), mais ça ne nous évitera pas des traces sur admin@ à cause du raise Http404 dans le connecteur. Pour les éviter on pourrait faire un return Http404.

Je rejoins Thomas sur l'idée que la vraie solution est que la ville et Teamnet fassent leur boulot.

#14

Mis à jour par Frédéric Péters il y a presque 8 ans

  • Statut changé de Information nécessaire à Rejeté

On va alors fermer ce ticket et arrêter d'en discuter. Parfait.

#15

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

  • Statut changé de Rejeté à En cours

Serghei comme moi parlons de la "vraie" solution, celle qui réglera vraiment le problème, un jour (que Teamnet génère bien les PDF qu'ils annoncent générés).

En attendant, contournement/protection via l'émission propre de 404 par passerelle, puis détection de ce retour (ItemDownloadView) par lingo qui pensait renvoyer un PDF et doit alors renvoyer un petit HTML ("désolé, ce document n'est pas disponible"), ça va très bien.

#17

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

Ack

#18

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

  • Statut changé de En cours à Résolu (à déployer)
commit 39d1805f882cea6a7dfb48d3f80afc3e6d8f1dfe
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Tue May 24 12:19:10 2016 +0200

    teamnet_axel: return 404 response when invoice pdf not available (#10789)
#19

Mis à jour par Frédéric Péters il y a presque 8 ans

D'accord parce que c'est passerelle, un appel webservice, etc. mais de manière générale, il ne faut pas utiliser HttpResponseNotFound et bien privilégier le raise Http404, qui a l'avantage d'utiliser le handler 404 (par défaut l'affichage du template 404.html). (voilà, c'était juste histoire de le noter après avoir regardé la différence).

#20

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

Mais là le problème c'est juste que to_json ne gère pas l'exception Http404 comme il devrait non ?

#21

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

Si, to_json renvoie bien une 404, mais dans #10283 nous avons décidé de lever les exceptions afin de les avoir dans sentry et par mail.

#22

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

C'est peut-être un peu excessif, sur des exceptions connus (ObjectDoesNotExist, Http404, etc..) on pourrait se contenter d'un warning.

#23

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

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF