Projet

Général

Profil

Development #8035

teamnet: service retournant la facture

Ajouté par Serghei Mihai il y a plus de 8 ans. Mis à jour il y a presque 7 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
Début:
07 août 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Fichiers

Révisions associées

Révision 00d4660e (diff)
Ajouté par Serghei Mihai il y a plus de 8 ans

contrib.teamnet_axel: webservice to get invoice binary (#8035)

Révision 6db1bd88 (diff)
Ajouté par Serghei Mihai il y a plus de 8 ans

contrib.teamnet_axel: webservice to get invoice binary (#8035)

Révision 83cbad7c (diff)
Ajouté par Serghei Mihai il y a plus de 8 ans

contrib.teamnet_axel: invoice details endpoint (#8035)

Révision 4936e53c (diff)
Ajouté par Serghei Mihai il y a plus de 8 ans

contrib.teamnet_axel: invoice pdf download endpoint (#8035)

Historique

#1

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-contrib.teamnet_axel-webservice-to-get-invoice-binar.patch ajouté
  • Patch proposed changé de Non à Oui
#2

Mis à jour par Serghei Mihai il y a plus de 8 ans

Poussé dans la branche teamnet

#3

Mis à jour par Serghei Mihai il y a plus de 8 ans

Je veux bien une relecture des patchs dans la branche teamnet si quelqu'un peut

#4

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

J'étais parti pour suggérer l'utilisation de ET.SubElement, ce qui éviterait déjà une belle série de .append() mais je crains que la génération XML reste quand même plutôt illisible et qu'il faille plutôt aborder les choses autrement.

Il existe django-xslt mais c'est peut-être un peu aventureux (et qui veut faire de l'XSLT…) et donc, même si ce n'est vraiment pas orthodoxe, je suggérerais qu'on utilise des templates pour faire le travail ici. On pourrait alors voir pour s'intégrer dans le "system checks framework" de Django pour avoir une validation des fichiers XML au démarrage ou alors au runtime, dans le get_data() la chaîne contenant de l'XML serait passée dans ElementTree pour vérification.

À part ça, pay_invoice(), il n'y a pas de retour mais InvoicePayView fait un return.

On doit pouvoir se calmer sur les **kwargs inutilisés, ils n'arrangent pas la lisibilité et ne facilient pas le debug.

Quand on fait get_data(request, '12', **kwargs), le '12' apparaitrait moins arbitraire s'il était passé comme months=12. (et en entier, pas chaîne).

#5

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

Je ne vos pas le le problème avec cette façon de générer du XML, en plus c'est pas très long là et +1 pour le SubElement. Si il y a une espèce de régularité entre les appels on peut peut-être factorisé l'entête du message mais bon sinon... Je n'aime pas quand la moitié du code et dans des templates en fait (on parle pas de présentation là, une fois que ça marchera ça ne bougera jamais plus).

#6

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

ok, partons sur des ET.SubElement, de manière un peu compacte, genre :

invoice_xml = ET.Element('FACTUREPDF')
ET.SubElement(invoice_xml, 'IDFAMILLE').text = famille_id
ET.SubElement(ET.SubElement(invoice_xml, 'FACTURES'), 'NOFACTURE').text = invoice

(plutôt que l'existant

        invoice_xml = ET.Element('FACTUREPDF')
        family_xml = ET.Element('IDFAMILLE')
        family_xml.text = family_id
        invoice_xml.append(family_xml)
        invoices_xml = ET.Element('FACTURES')
        no = ET.Element('NOFACTURE')
        no.text = invoice
        invoices_xml.append(no)
        invoice_xml.append(invoices_xml)
)

#7

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

J'y pensais plus mais il y a xml.etree.ElementTree.TreeBuilder aussi:

tb = TreeBuilder()
tb.start('FACTUREPDF', {})
tb.start('IDFAMILLE', {})
tb.data(family_id)
tb.end()
tb.start('FACTURES', {})
tb.start('NOFACTURE', {})
tb.data(invoice)
tb.end()
tb.end()
invoice_xml = tb.close()

À noter qu'un fois qu'on a un builder c'est très facile de décrire un schéma XML avec des S-expression, genre:


def generate_xml(schema):
    tb = TreeBuilder()
    def helper(schema):
        tag = schema[0]
        attribs = schema[1] if len(schema) > 0 and isinstance(schema[1], dict) else None
        tb.start(tag, attribs or {}
        if attribs is None:
            children = schema[1:]
        else:
            children = schema[2:]
        for child in children:
            if isinstance(child, basestring):
                tb.data(child)
            else:
                helper(child)
        helper(schema)
        return tb.close()

generate_xml(('FACTUREPDF',
  ('IDFAMILLE', family_id),
  ('FACTURES',
    ('NOFACTURE', invoice))))

Je crois me souvenir qu'on appellait ce format S-XML dans le temps ou je faisais du LISP.

#8

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-contrib.teamnet_axel-past-and-active-invoices-retrie.patch ajouté

Remontée des factures passées et à regler(ou "actives")

#9

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-contrib.teamnet_axel-invoice-details-endpoint.patch ajouté

Remontée des détails d'une facture

#10

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-contrib.teamnet_axel-invoice-details-endpoint.patch supprimé
#11

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-contrib.teamnet_axel-past-and-active-invoices-retrie.patch supprimé
#12

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-contrib.teamnet_axel-webservice-to-get-invoice-binar.patch supprimé
#13

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0003-contrib.teamnet_axel-invoice-binary-download-endpoin.patch ajouté
  • Fichier 0002-contrib.teamnet_axel-invoice-details-endpoint-8035.patch ajouté
  • Fichier 0001-contrib.teamnet_axel-past-and-active-invoices-retrie.patch ajouté
#14

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-contrib.teamnet_axel-past-and-active-invoices-retrie.patch supprimé
#15

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0003-contrib.teamnet_axel-invoice-binary-download-endpoin.patch supprimé
#16

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0002-contrib.teamnet_axel-invoice-details-endpoint-8035.patch supprimé
#18

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0002-contrib.teamnet_axel-past-and-active-invoices-retrie.patch ajouté

La liste des factures passées et à payer

#19

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0003-contrib.teamnet_axel-invoice-details-endpoint-8035.patch ajouté

Les details d'une facture

#20

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Version cible mis à 0.10
#21

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0003-contrib.teamnet_axel-invoice-details-endpoint-8035.patch supprimé
#22

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0002-contrib.teamnet_axel-past-and-active-invoices-retrie.patch supprimé
#23

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0003-contrib.teamnet_axel-invoice-details-endpoint-8035.patch ajouté
  • Fichier 0002-contrib.teamnet_axel-past-and-active-invoices-retrie.patch ajouté

Patchs refaits pour prendre en compte les factures à payer renvoyées dans le webservice d'historique des factures

#24

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0003-contrib.teamnet_axel-invoice-details-endpoint-8035.patch supprimé
#25

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0002-contrib.teamnet_axel-past-and-active-invoices-retrie.patch supprimé
#27

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

Serghei Mihai a écrit :

0001-contrib.teamnet_axel-xml-tree-building-refactored.patch : Refactorisation avec SubElement

Ack pour celui-ci.

#28

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

sur 0001-contrib.teamnet_axel-past-and-active-invoices-retrie.patch:

dans le normalize:
  • invoice['id'] doit contenir l'id au sens "passerelle", et pour axel ça sera familyid-factureid
  • éventuellement ajoute un invoice['display_id'] qui sera utilisable dans le template pour afficher le numéro "utilisateur" (et pas technique)

pour ne plus voir de traces des vielles choses, j'aurais renommé les méthodes InvoicesView et HistoryInvoicesView et leur nom teamnet-axel-invoices et teamnet-axel-invoices-history

  • ajouter un commentaire dans get_invoices lors du "operation = 'HistoriqueFacturesRegie'" qui explique que cette operation renvoie toutes les factures sur x mois, mais aussi les futures.
  • et donc, ajouter commentaire dans la vue historique pour dire qu'on est obligés de retirer les nouvelles de l'historique pour avoir un vrai historique (pfffff)
  • supprimer le mixin InvoicesMixin qui ne sert à rien qu'à embrouiller le code, appeler directement get_invoices dans les vues invoices et invoices/history

retirer le month=12 dans le get_data de invoices/history parce que ça sera toujours 12 (non paramétrable)

#29

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

0002-contrib.teamnet_axel-invoice-details-endpoint-8035.patch :

  • retirer le mixin inutilisé
  • mettre un petit commentaire pour mémoire qui explique que le code est un peu bête parce que teamnet ne propose pas de webservice pour chercher une facture isolés (on doit passer par get_invoices sur 12 mois)
#30

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

  • Statut changé de Nouveau à En cours
#32

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

Je ne suis pas sûr que les bons patchs aient été attachés, au moins les commentaires suivant ont été ignorés :

  • retirer le month=12 dans le get_data de invoices/history parce que ça sera toujours 12 (non paramétrable)
  • mettre un petit commentaire pour mémoire qui explique que le code est un peu bête

(pas regardé davantage)

#33

Mis à jour par Serghei Mihai il y a plus de 8 ans

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

  • retirer le month=12 dans le get_data de invoices/history parce que ça sera toujours 12 (non paramétrable)

Je crois que ça parlait de

class PastInvoicesView(InvoicesMixin, FamilyView):
    def get_data(self, request, regie_id, months=12, **kwargs)

du patch précedent.

  • mettre un petit commentaire pour mémoire qui explique que le code est un peu bête
# exclude the active invoices from the past ones
active = self.object.get_invoices(regie_id, family_id)

je met un message plus explicite
#34

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Statut changé de En cours à Résolu (à déployer)
commit 83cbad7c6c56f0f963877aa34e9fab0c8b48a7ba
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Mon Aug 10 17:33:36 2015 +0200

    contrib.teamnet_axel: invoice details endpoint (#8035)

commit 2311ea5893451469c9e5ebffefd8b22fe1672b9c
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Thu Aug 13 18:30:27 2015 +0200

    contrib.teamnet_axel: past and active invoices retrieval endpoints
#35

Mis à jour par Serghei Mihai il y a presque 7 ans

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

Formats disponibles : Atom PDF