Projet

Général

Profil

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

Serghei Mihai, 18 septembre 2015 14:50

Télécharger (7,61 ko)

Voir les différences:

Subject: [PATCH 1/2] contrib.teamnet_axel: past and active invoices retrieval
 endpoints

 passerelle/contrib/teamnet_axel/models.py          | 24 ++++++++++--------
 .../passerelle/contrib/teamnet_axel/detail.html    | 15 ++++++++---
 passerelle/contrib/teamnet_axel/urls.py            |  6 +++--
 passerelle/contrib/teamnet_axel/utils.py           | 14 +++++++++++
 passerelle/contrib/teamnet_axel/views.py           | 29 +++++++++++++++++-----
 5 files changed, 65 insertions(+), 23 deletions(-)
 create mode 100644 passerelle/contrib/teamnet_axel/utils.py
passerelle/contrib/teamnet_axel/models.py
23 23

  
24 24
from passerelle.base.models import BaseResource
25 25

  
26
from . import soap
26
from . import soap, utils
27 27

  
28 28
logger = logging.getLogger('passerelle.contrib.teamnet_axel')
29 29

  
......
134 134
            'enfants': enfants,
135 135
        }
136 136

  
137
    def get_factures(self, regie_id, family_id, months=None):
137
    def get_invoices(self, regie_id, family_id, months=None):
138
        if not family_id:
139
            []
138 140
        operation = 'FacturesApayerRegie'
139
        xml_factures = ET.Element('LISTFACTURE')
140
        ET.SubElement(xml_factures, 'IDREGIE').text = regie_id
141
        ET.SubElement(xml_factures, 'IDFAMILLE').text = family_id
141
        xml_invoices = ET.Element('LISTFACTURE')
142
        ET.SubElement(xml_invoices, 'IDREGIE').text = regie_id
143
        ET.SubElement(xml_invoices, 'IDFAMILLE').text = family_id
142 144
        if months:
143 145
            operation = 'HistoriqueFacturesRegie'
144
            ET.SubElement(xml_factures, 'NBMOIS').text = months
145
        data = self.get_data(operation, xml_factures)
146
        xml_factures = data.findall('PORTAIL/FACTURES')
147
        if not xml_factures:
146
            ET.SubElement(xml_invoices, 'NBMOIS').text = str(months)
147
        data = self.get_data(operation, xml_invoices)
148
        xml_invoices = data.findall('PORTAIL/FACTURES')
149
        if not xml_invoices:
148 150
            raise AxelException('PORTAIL/FACTURES empty')
149
        factures = [dict((k.lower(), v) for k, v in i.attrib.items()) for i in xml_factures]
150
        return {'factures': factures}
151
        invoices = [utils.normalize_invoice(i.attrib, family_id) for i in xml_invoices]
152
        return sorted(invoices, key=lambda i: i['created'], reverse=True)
151 153

  
152 154

  
153 155
class Link(models.Model):
passerelle/contrib/teamnet_axel/templates/passerelle/contrib/teamnet_axel/detail.html
37 37
       <a href="{% url 'teamnet-axel-family-filtered' slug=object.slug key='key' %}"
38 38
       >{{ site_base_uri }}{% url 'teamnet-axel-family-filtered' slug=object.slug key='key' %}?NameID=...</a>
39 39
       <em>key</em> is <em>responsables</em> or <em>enfants</em></li>
40
<li>{% trans 'Get family invoice list:' %}
41
  <a href="{% url 'teamnet-axel-invoices' slug=object.slug %}">
42
    {{ site_base_uri }}{% url 'teamnet-axel-invoices' slug=object.slug %}?NameID=...&amp;regie=...&months=...
43
  </a>
40
<li>{% trans 'Get past invoice list:' %}
41
  {% url 'teamnet-axel-past-invoices' regie_id='42' slug=object.slug as past_invoices_url %}
42
  <a href="{{ past_invoices_url }}">
43
    {{ site_base_uri }}{{ past_invoices_url }}?NameID=...
44
  </a> <em>42</em> {% trans 'is regie identifier' %}
45
</li>
46
<li>{% trans 'Get active invoice list:' %}
47
  {% url 'teamnet-axel-active-invoices' regie_id='42' slug=object.slug as active_invoices_url %}
48
  <a href="{{ active_invoices_url }}">
49
    {{ site_base_uri }}{{ active_invoices_url }}?NameID=...
50
  </a> <em>42</em> {% trans 'is regie identifier' %}
44 51
</li>
45 52
</ul>
46 53
</div>
passerelle/contrib/teamnet_axel/urls.py
35 35
        name='teamnet-axel-family'),
36 36
    url(r'^(?P<slug>[\w,-]+)/family/(?P<key>[\w,-]+)/$', FamilyView.as_view(),
37 37
        name='teamnet-axel-family-filtered'),
38
    url(r'^(?P<slug>[\w,-]+)/invoices/$', InvoicesView.as_view(),
39
       name='teamnet-axel-invoices'),
38
    url(r'^(?P<slug>[\w,-]+)/regie/(?P<regie_id>[\w,-]+)/invoices/history$', PastInvoicesView.as_view(),
39
       name='teamnet-axel-past-invoices'),
40
    url(r'^(?P<slug>[\w,-]+)/regie/(?P<regie_id>[\w,-]+)/invoices/$', ActiveInvoicesView.as_view(),
41
       name='teamnet-axel-active-invoices'),
40 42
    #url(r'^(?P<slug>[\w,-]+)/invoice/(?P<id>[\w,-]+)/$', InvoiceView.as_view(),
41 43
    #    name='teamnet-axel-invoice'),
42 44
    #url(r'^(?P<slug>[\w,-]+)/invoice-pdf/(?P<id>[\w,-]+)/$', InvoicePDFView.as_view(),
passerelle/contrib/teamnet_axel/utils.py
1
from datetime import datetime
2
from decimal import Decimal
3

  
4
def normalize_invoice(invoice, family_id):
5
    invoice['total_amount'] = Decimal(invoice['FMONTANT'])
6
    invoice['amount'] = Decimal(invoice['RESTEAPAYER'])
7
    invoice['id'] = invoice['NOFACTURE']
8
    invoice['slug'] = '%s-%s' % (family_id, invoice['NOFACTURE'])
9
    invoice['has_pdf'] = invoice['FPDF'] == 'O'
10
    invoice['online_payment'] = Decimal(invoice['RESTEAPAYER']) != 0
11
    invoice['created'] = datetime.strptime(invoice['FEMISSION'], '%d/%m/%Y')
12
    invoice['label'] = invoice['FLIBELLE']
13
    invoice['pay_limit_date'] = datetime.strptime(invoice['FECHEANCE'], '%d/%m/%Y')
14
    return invoice
passerelle/contrib/teamnet_axel/views.py
135 135
        else:
136 136
            return famille.get(kwargs['key'])
137 137

  
138
class InvoicesView(FamilyView):
139 138

  
140
    def get_data(self, request, *args, **kwargs):
141
        regie = request.GET.get('regie')
142
        months = request.GET.get('months')
143
        factures = self.object.get_factures(regie, self.get_family_id(request), months)
144
        return factures
139
class InvoicesMixin(object):
140
    def get_data(self, request, regie_id, months=None, **kwargs):
141
        try:
142
            return self.object.get_invoices(regie_id, self.get_family_id(request),
143
                                            months)
144
        except AxelException:
145
            return []
146

  
147

  
148
class ActiveInvoicesView(InvoicesMixin, FamilyView):
149

  
150
    def get_data(self, request, regie_id, **kwargs):
151
        return super(ActiveInvoicesView, self).get_data(request, regie_id,
152
                                                **kwargs)
153

  
154

  
155
class PastInvoicesView(InvoicesMixin, FamilyView):
156

  
157
    def get_data(self, request, regie_id, months=12, **kwargs):
158
        past = super(PastInvoicesView, self).get_data(request, regie_id,
159
                                            months, **kwargs)
160
        active = super(PastInvoicesView, self).get_data(request, regie_id, **kwargs)
161
        return [p for p in past if p not in active]
145
-