Projet

Général

Profil

0001-contrib.teamnet_axel-invoice-payment-notify-endpoint.patch

Serghei Mihai, 18 septembre 2015 17:05

Télécharger (6,4 ko)

Voir les différences:

Subject: [PATCH] contrib.teamnet_axel: invoice payment notify endpoint

 .../migrations/0002_management_billing_regies.py   | 21 +++++++++++++++++
 passerelle/contrib/teamnet_axel/models.py          | 26 ++++++++++++++++++++++
 .../passerelle/contrib/teamnet_axel/detail.html    |  6 +++++
 passerelle/contrib/teamnet_axel/urls.py            |  7 +++---
 passerelle/contrib/teamnet_axel/views.py           | 12 ++++++++++
 5 files changed, 68 insertions(+), 4 deletions(-)
 create mode 100644 passerelle/contrib/teamnet_axel/migrations/0002_management_billing_regies.py
passerelle/contrib/teamnet_axel/migrations/0002_management_billing_regies.py
1
# -*- coding: utf-8 -*-
2
from __future__ import unicode_literals
3

  
4
from django.db import models, migrations
5
import jsonfield.fields
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('teamnet_axel', '0001_initial'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='management',
17
            name='billing_regies',
18
            field=jsonfield.fields.JSONField(default=dict, verbose_name='Correspondence between regie ids and billing ids'),
19
            preserve_default=True,
20
        ),
21
    ]
passerelle/contrib/teamnet_axel/models.py
16 16

  
17 17
import logging
18 18
import xml.etree.ElementTree as ET
19
from datetime import datetime
19 20

  
20 21
from django.core.urlresolvers import reverse
21 22
from django.db import models
22 23
from django.utils.translation import ugettext_lazy as _
23 24

  
25
from jsonfield import JSONField
26

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

  
26 29
from . import soap, utils
......
46 49
            verbose_name=_('Keystore'),
47 50
            help_text=_('Certificate and private key in PEM format'))
48 51

  
52
    billing_regies = JSONField(_('Correspondence between regie ids and billing ids'))
53

  
49 54
    category = _('Business Process Connectors')
50 55

  
51 56
    class Meta:
......
160 165
        pdf = data.find('PORTAIL/PDF')
161 166
        return pdf.get('FILE')
162 167

  
168
    def pay_invoice(self, regie_id, family_id, invoice, email=None):
169
        payment_xml = ET.Element('PAIEMENT')
170
        ET.SubElement(payment_xml, 'IDDEMANDE')
171
        ET.SubElement(payment_xml, 'IDFAMILLE').text = family_id
172
        ET.SubElement(payment_xml, 'IDREGIEENC').text = self.billing_regies.get(regie_id)
173
        ET.SubElement(payment_xml, 'MODEREGLEMENT').text = 'PAY'
174
        ET.SubElement(payment_xml, 'MONTANT').text = str(invoice['amount'])
175
        ET.SubElement(payment_xml, 'URL')
176
        if email:
177
            ET.SubElement(payment_xml, 'COURRIEL').text = email
178
        else:
179
            ET.SubElement(payment_xml, 'COURRIEL')
180
        ET.SubElement(payment_xml, 'REFPAIEMENT')
181
        ET.SubElement(payment_xml, 'DATEENVOI').text = datetime.now().strftime('%d/%m/%Y %H:%M:%S')
182
        ET.SubElement(payment_xml, 'DATERETOUR').text = datetime.now().strftime('%d/%m/%Y %H:%M:%S')
183
        ET.SubElement(payment_xml, 'CODERETOUR')
184
        ET.SubElement(ET.SubElement(payment_xml, 'FACTURE'), 'NOFACTURE').text = invoice['display_id']
185
        data = self.get_data('PaiementFactures', payment_xml)
186
        return data.text
187

  
188

  
163 189
class Link(models.Model):
164 190
    resource = models.ForeignKey(Management)
165 191
    nameid = models.CharField(blank=False, max_length=256)
passerelle/contrib/teamnet_axel/templates/passerelle/contrib/teamnet_axel/detail.html
64 64
    {{ site_base_uri }}{{ invoice_download_url }}
65 65
  </a>
66 66
</li>
67
<li>{% trans 'Pay invoice:' %}
68
  {% url 'teamnet-axel-invoice-payment' slug=object.slug regie_id='42' invoice_id='2345-20150808' as payment_url %}
69
  <a href="{{ payment_url }}">
70
    {{ site_base_uri }}{{ payment_url }}?NameID=...
71
  </a>
72
</li>
67 73
</ul>
68 74
</div>
69 75

  
passerelle/contrib/teamnet_axel/urls.py
43 43
        name='teamnet-axel-invoice'),
44 44
    url(r'^(?P<slug>[\w,-]+)/regie/(?P<regie_id>[\w,-]+)/invoice/(?P<invoice_id>[\w,-]+)/pdf/$', InvoicePDFView.as_view(),
45 45
        name='teamnet-axel-invoice-pdf'),
46
    #url(r'^(?P<slug>[\w,-]+)/invoice-pdf/(?P<id>[\w,-]+)/$', InvoicePDFView.as_view(),
47
    #    name='teamnet-axel-unlink'),
48
    #url(r'^(?P<slug>[\w,-]+)/invoice-paid/(?P<id>[\w,-]+)/$', InvoicePayView.as_view(),
49
    #    name='teamnet-axel-unlink'),
46
    url(r'^(?P<slug>[\w,-]+)/regie/(?P<regie_id>[\w,-]+)/invoice/(?P<invoice_id>[\w,-]+)/pay/$',
47
        InvoicePayView.as_view(),
48
        name='teamnet-axel-invoice-payment'),
50 49
)
51 50

  
52 51
management_urlpatterns = patterns('',
passerelle/contrib/teamnet_axel/views.py
182 182
        response['Content-Disposition'] = 'attachment; filename="%s.pdf"' % invoice_id
183 183
        response.write(base64.b64decode(pdf))
184 184
        return response
185

  
186

  
187
class InvoicePayView(DetailView):
188

  
189
    def get_data(self, request, *args, **kwargs):
190
        family_id, invoice_id = kwargs['invoice_id'].split('-', 1)
191
        regie_id = kwargs['regie_id']
192

  
193
        invoices = self.object.get_invoices(regie_id, family_id)
194
        for invoice in invoices:
195
            if invoice['id'] == kwargs['invoice_id'] and invoice['online_payment']:
196
                return self.object.pay_invoice(regie_id, family_id, invoice)
185
-