item details view (#8221)

This commit is contained in:
Serghei Mihai 2015-09-04 10:41:57 +02:00
parent c51fdf226a
commit 7ce8833aa0
5 changed files with 73 additions and 5 deletions

View File

@ -19,6 +19,7 @@ import json
import requests
import urllib
from dateutil import parser
from decimal import Decimal
import eopayment
from jsonfield import JSONField
@ -47,6 +48,7 @@ SERVICES = [
(eopayment.PAYBOX, _('Paybox')),
]
def build_remote_item(data, regie):
return RemoteItem(id=data.get('id'), regie=regie,
creation_date=data['created'],
@ -119,6 +121,18 @@ class Regie(models.Model):
return self.get_url(request, url, NameID=mellon['name_id_content'])
raise PermissionDenied
def get_item(self, request, item):
if not self.is_remote():
return self.basketitem_set.get(pk=item)
if hasattr(request, 'session') and request.session.get('mellon_session'):
mellon = request.session.get('mellon_session')
url = self.webservice_url + '/invoice/%s/' % item
item = self.get_url(request, url,
NameID=mellon['name_id_content']).json()
return build_remote_item(item.get('data'), self)
return {}
def as_api_dict(self):
return {'slug': self.slug,
'label': self.label,
@ -161,9 +175,9 @@ class RemoteItem(object):
self.id = id
self.regie = regie
self.creation_date = parser.parse(creation_date)
self.total_amount = total_amount
self.total_amount = Decimal(total_amount)
self.amount = Decimal(amount)
self.display_id = display_id
self.amount = amount
self.subject = subject
self.has_pdf = has_pdf

View File

@ -0,0 +1,41 @@
{% load i18n %}
<div id="content">
<div id="appbar">
<h2>
{% blocktrans with number=item.display_id %}
Item nr. {{ number }}
{% endblocktrans %}
</h2>
<div id="item">
<form action="{% url 'lingo-pay' %}" method="POST">
<h4>
{% blocktrans with label=item.subject %}
Label: {{ label }}
{% endblocktrans %}
</h4>
<p>
{% blocktrans with amount=item.total_amount %}
Total amount: {{ amount }}€
{% endblocktrans %}
</p>
{% if item.amount %}
<p>
{% blocktrans with amount=item.amount %}
Amount to pay: {{ amount }}€
{% endblocktrans %}
</p>
{% endif %}
<p>{% trans "Issued on : " %} {{ item.creation_date|date:"SHORT_DATE_FORMAT" }}</p>
{% if item.payment_date %}
<p>{% trans "Payed on : " %} {{ item.payment_date|date:"SHORT_DATE_FORMAT" }}</p>
{% endif %}
{% if item.amount %}
{% csrf_token %}
<input type="hidden" name="regie" value="{{ regie.pk }}" />
<input type="hidden" name="item" value="{{ item.pk }}" />
<button>{% trans "Pay" %}</button>
{% endif %}
</form>
</div>
</div>
</div>

View File

@ -23,7 +23,8 @@
{% endblocktrans %}
</td>
<td>
{% if item.has_pdf %}
<a href="{% url 'view-item' regie_id=item.regie.pk item_id=item.id %}" rel="popup" class="icon-view">{% trans "View" %}</a>
{% if item.has_pdf %} /
<a href="{% url 'download-item-pdf' regie_id=item.regie.pk item_id=item.id %}" class="icon-pdf">
{% trans "Download" %}</a>
{% endif %}

View File

@ -19,7 +19,7 @@ from django.conf.urls import patterns, url, include
from combo.urls_utils import decorated_includes, manager_required
from .views import (RegiesApiView, AddBasketItemApiView, PayView, CallbackView,
ItemDownloadView)
ItemDownloadView, ItemView)
from .manager_views import (RegieListView, RegieCreateView, RegieUpdateView,
RegieDeleteView)
@ -42,4 +42,6 @@ urlpatterns = patterns('',
include(lingo_manager_urls))),
url(r'^lingo/item/(?P<regie_id>[\w,-]+)/(?P<item_id>[\w,-]+)/pdf$',
ItemDownloadView.as_view(), name='download-item-pdf'),
url(r'^lingo/item/(?P<regie_id>[\w,-]+)/(?P<item_id>[\w,-]+)/$',
ItemView.as_view(), name='view-item'),
)

View File

@ -23,7 +23,7 @@ from django.http import HttpResponse, HttpResponseRedirect
from django.template.response import TemplateResponse
from django.utils import timezone
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import View, ListView
from django.views.generic import View, ListView, TemplateView
import eopayment
@ -171,3 +171,13 @@ class ItemDownloadView(View):
r = HttpResponse(data, content_type='application/pdf')
r['Content-Disposition'] = 'attachment; filename="%(item_id)s.pdf"' % kwargs
return r
class ItemView(TemplateView):
http_method_names = [u'get']
template_name = 'lingo/combo/item.html'
def get_context_data(self, **kwargs):
regie = Regie.objects.get(pk=kwargs['regie_id'])
item = regie.get_item(self.request, kwargs['item_id'])
return {'item': item, 'regie': regie}