From 610682406b2404c63e03bc5eccf8d14059bba8b2 Mon Sep 17 00:00:00 2001 From: Maximilien Cuony Date: Sat, 11 Jan 2014 00:18:33 +0100 Subject: [PATCH] Display transaction --- .../templates/configs/configs/show.html | 4 +- server/configs/views.py | 21 +-- server/main/views.py | 1 + server/paiements/models.py | 3 + .../paiements/transactions/list.html | 4 +- .../paiements/transactions/logs.html | 61 ++++++++ .../paiements/transactions/show.html | 135 ++++++++++++++++++ server/paiements/urls.py | 2 + server/paiements/views.py | 33 ++++- server/templates/base.html | 2 +- server/tequila.py | 4 +- server/users/views.py | 7 +- 12 files changed, 256 insertions(+), 21 deletions(-) create mode 100644 server/paiements/templates/paiements/transactions/logs.html create mode 100644 server/paiements/templates/paiements/transactions/show.html diff --git a/server/configs/templates/configs/configs/show.html b/server/configs/templates/configs/configs/show.html index f39c8fa..c038753 100644 --- a/server/configs/templates/configs/configs/show.html +++ b/server/configs/templates/configs/configs/show.html @@ -13,7 +13,7 @@

{% trans "Configs management" %}

@@ -129,7 +129,7 @@

{% trans "Details of a config" %}

{% trans "Back to the list" %} - {% trans "Logs" %} + {% trans "Logs" %} {% trans "Edit" %}
diff --git a/server/configs/views.py b/server/configs/views.py index 5f9ceec..0b7a458 100644 --- a/server/configs/views.py +++ b/server/configs/views.py @@ -15,6 +15,7 @@ from django.core.cache import cache from django.core.urlresolvers import reverse from django.contrib import messages +from django.utils.translation import ugettext_lazy as _ from configs.models import Config, ConfigLogs from configs.forms import ConfigForm @@ -55,7 +56,7 @@ def edit(request, pk): object = form.save(commit=False) if not create: - ConfigLogs(config=object, user=request.user, text='Config has been updated: ' + object.generate_diff(Config.objects.get(pk=pk))).save() + ConfigLogs(config=object, user=request.user, text=_('Config has been updated: ') + object.generate_diff(Config.objects.get(pk=pk))).save() object.save() # To use allowed_users @@ -67,9 +68,9 @@ def edit(request, pk): object.save() if create: - ConfigLogs(config=object, user=request.user, text='Config has been created: ' + object.generate_diff(Config())).save() + ConfigLogs(config=object, user=request.user, text=_('Config has been created: ') + object.generate_diff(Config())).save() - messages.success(request, 'The config has been saved.') + messages.success(request, _('The config has been saved.')) return redirect('configs.views.list') else: @@ -89,7 +90,7 @@ def edit(request, pk): # raise Http404 # object.delete() -# messages.success(request, 'Config has been deleted.') +# messages.success(request, _('Config has been deleted.')) # return redirect('configs.views.list') @@ -118,9 +119,9 @@ def new_ipn_key(request, pk): object.gen_key_ipn() object.save() - ConfigLogs(config=object, user=request.user, text='A new IPN key has been generated.').save() + ConfigLogs(config=object, user=request.user, text=_('A new IPN key has been generated.')).save() - messages.success(request, 'A new IPN key has been generated !') + messages.success(request, _('A new IPN key has been generated !')) return redirect('configs.views.show', pk=pk) @@ -137,9 +138,9 @@ def new_requests_key(request, pk): object.gen_key_request() object.save() - ConfigLogs(config=object, user=request.user, text='A new requests key has been generated.').save() + ConfigLogs(config=object, user=request.user, text=_('A new requests key has been generated.')).save() - messages.success(request, 'A new requests key has been generated !') + messages.success(request, _('A new requests key has been generated !')) return redirect('configs.views.show', pk=pk) @@ -156,9 +157,9 @@ def new_api_key(request, pk): object.gen_key_api() object.save() - ConfigLogs(config=object, user=request.user, text='A new api key has been generated.').save() + ConfigLogs(config=object, user=request.user, text=_('A new api key has been generated.')).save() - messages.success(request, 'A new api key has been generated !') + messages.success(request, _('A new api key has been generated !')) return redirect('configs.views.show', pk=pk) diff --git a/server/main/views.py b/server/main/views.py index 9f57960..a838f9a 100644 --- a/server/main/views.py +++ b/server/main/views.py @@ -15,6 +15,7 @@ from django.core.cache import cache from django.core.urlresolvers import reverse from django.contrib import messages +from django.utils.translation import ugettext_lazy as _ @login_required diff --git a/server/paiements/models.py b/server/paiements/models.py index 6dc77d2..6c9969a 100644 --- a/server/paiements/models.py +++ b/server/paiements/models.py @@ -90,6 +90,9 @@ def internal_status_good(self): """Return true if the internal status of the transaction if good (user back from postfinance)""" return self.internal_status == 'fb' + def __unicode__(self): + return self.reference + class TransactionLog(models.Model): """A transaction log""" diff --git a/server/paiements/templates/paiements/transactions/list.html b/server/paiements/templates/paiements/transactions/list.html index e76f59a..f1f722e 100644 --- a/server/paiements/templates/paiements/transactions/list.html +++ b/server/paiements/templates/paiements/transactions/list.html @@ -51,13 +51,13 @@

{% for elem in list %} - {{elem.reference}} + {{elem.reference}} {{elem.amount_chf|floatformat:"2"}} CHF {{elem.get_postfinance_status_display}} {{elem.get_internal_status_display}} {{elem.creation_date|date}} {{elem.creation_date|time}} ({{elem.creation_date|timesince}}) - {% trans "Logs" %} + {% trans "Logs" %} {% endfor %} diff --git a/server/paiements/templates/paiements/transactions/logs.html b/server/paiements/templates/paiements/transactions/logs.html new file mode 100644 index 0000000..a2e56db --- /dev/null +++ b/server/paiements/templates/paiements/transactions/logs.html @@ -0,0 +1,61 @@ +{% extends "base.html" %} +{% load i18n %} +{% load bootstrap3 %} + +{% block title %}{{block.super}} :: {% trans "Transactions" %} :: {% trans "Logs" %}{% endblock %} + +{% block content %} + + + +

{% trans "Transactions" %}

+ + + +
+
+
+

{% trans "Logs for" %} {{object|safe}}

+
+
+ + + + + + + + + + + {% for elem in list %} + + + + + + {% endfor %} + + +
{% trans "When" %}{% trans "What" %}{% trans "Extra data" %}
{{elem.when|date}} {{elem.when|time}} ({{elem.when|timesince}} {% trans "ago" %}){{elem.get_log_type_display}}{{elem.extra_data}}
+ + + + +
+
+ +
+ + +{% endblock %} \ No newline at end of file diff --git a/server/paiements/templates/paiements/transactions/show.html b/server/paiements/templates/paiements/transactions/show.html new file mode 100644 index 0000000..7e0629d --- /dev/null +++ b/server/paiements/templates/paiements/transactions/show.html @@ -0,0 +1,135 @@ +{% extends "base.html" %} +{% load i18n %} +{% load bootstrap3 %} + +{% block title %}{{block.super}} :: {% trans "Transactions" %} :: {% trans "Details" %}{% endblock %} + +{% block content %} + + + +

{% trans "Transactions" %}

+ + + +
+ +
+
+

{% trans "Details of a transaction" %}

+
+
+ +
+ +
+ +

{{object.reference}}

+
+ +
+ +

{{object.postfinance_id}}

+
+ + {% if object.extra_data %} +
+ +

{{object.extra_data}}

+
+ {% endif %} + +
+ +

{{object.amount_chf|floatformat:"2"}} CHF

+
+ + +
+ +

{{object.get_postfinance_status_display}}

+
+ +
+ +

{{object.get_internal_status_display}}

+
+ +
+ +

{{object.ipn_needed|yesno}}

+
+ +
+ +

{{object.creation_date|date}} {{object.creation_date|time}} ({{object.creation_date|timesince}})

+
+ + {% if object.last_userforwarded_date %} +
+ +

{{object.last_userforwarded_date|date}} {{object.last_userforwarded_date|time}} ({{object.last_userforwarded_date|timesince}})

+
+ {% endif %} + + {% if object.last_user_back_from_postfinance_date %} +
+ +

{{object.last_user_back_from_postfinance_date|date}} {{object.last_user_back_from_postfinance_date|time}} ({{object.last_user_back_from_postfinance_date|timesince}})

+
+ {% endif %} + + {% if object.last_postfinance_ipn_date %} +
+ +

{{object.last_postfinance_ipn_date|date}} {{object.last_postfinance_ipn_date|time}} ({{object.last_postfinance_ipn_date|timesince}})

+
+ {% endif %} + + {% if object.last_ipn_date %} +
+ +

{{object.last_ipn_date|date}} {{object.last_ipn_date|time}} ({{object.last_ipn_date|timesince}})

+
+ {% endif %} + +
+ + + +
+
+ +
+ + + + + +{% endblock %} \ No newline at end of file diff --git a/server/paiements/urls.py b/server/paiements/urls.py index be157fb..e0d610d 100644 --- a/server/paiements/urls.py +++ b/server/paiements/urls.py @@ -11,5 +11,7 @@ url(r'^return$', 'return_from_postfinance'), url(r'^transactions/list$', 'transactions_list'), + url(r'^transactions/(?P[0-9]+)/$', 'transactions_show'), + url(r'^transactions/(?P[0-9]+)/logs$', 'transactions_show_logs'), ) diff --git a/server/paiements/views.py b/server/paiements/views.py index ed7f2e5..08188b6 100644 --- a/server/paiements/views.py +++ b/server/paiements/views.py @@ -15,6 +15,7 @@ from django.core.cache import cache from django.core.urlresolvers import reverse from django.contrib import messages +from django.utils.translation import ugettext_lazy as _ import json import uuid @@ -228,7 +229,11 @@ def transactions_list(request): configPk = available_configs[0] if configPk != 'all' or not request.user.is_superuser: - config = get_object_or_404(Config, pk=configPk) + try: + config = get_object_or_404(Config, pk=configPk) + except: + config = None + transactions = Transaction.objects.filter(config=config) else: transactions = Transaction.objects @@ -237,3 +242,29 @@ def transactions_list(request): transactions = transactions.order_by('-creation_date').all() return render_to_response('paiements/transactions/list.html', {'list': transactions, 'available_configs': available_configs, 'configPk': configPk, 'config': config}, context_instance=RequestContext(request)) + + +@login_required +def transactions_show_logs(request, pk): + """Show logs of transactions""" + + object = get_object_or_404(Transaction, pk=pk) + + if not request.user.is_superuser and not request.user in object.allowed_users: + raise Http404 + + list = object.transactionlog_set.order_by('-when').all() + + return render_to_response('paiements/transactions/logs.html', {'object': object, 'list': list}, context_instance=RequestContext(request)) + + +@login_required +def transactions_show(request, pk): + """Display details of a transaction""" + + object = get_object_or_404(Transaction, pk=pk) + + if not request.user.is_superuser and not request.user in object.allowed_users: + raise Http404 + + return render_to_response('paiements/transactions/show.html', {'object': object}, context_instance=RequestContext(request)) diff --git a/server/templates/base.html b/server/templates/base.html index f675e24..7f1187a 100644 --- a/server/templates/base.html +++ b/server/templates/base.html @@ -76,7 +76,7 @@ -
© Maximilien Cuony - 2013 - AGEPoly/PolyLAN
+
© Maximilien Cuony - 2014 - AGEPoly/PolyLAN
diff --git a/server/tequila.py b/server/tequila.py index a69b4eb..e9f0d8f 100644 --- a/server/tequila.py +++ b/server/tequila.py @@ -40,8 +40,8 @@ def authenticate(self, token=None): return None # Get informations about user - firstName = re.search('\nfirstname=(.*)', data).group(1) - name = re.search('\nname=(.*)', data).group(1) + firstName = re.search('\nfirstname=(.*)', data).group(1).split(',')[-1] + name = re.search('\nname=(.*)', data).group(1).split(',')[-1] email = re.search('\nemail=(.*)', data).group(1) sciper = re.search('\nuniqueid=(.*)', data).group(1) diff --git a/server/users/views.py b/server/users/views.py index 69ed4f8..19e42c5 100644 --- a/server/users/views.py +++ b/server/users/views.py @@ -15,6 +15,7 @@ from django.core.cache import cache from django.core.urlresolvers import reverse from django.contrib import messages +from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User from users.forms import UserForm @@ -46,7 +47,7 @@ def edit(request, pk): if form.is_valid(): # If the form is valid object = form.save() - messages.success(request, 'The user has been saved.') + messages.success(request, _('The user has been saved.')) return redirect('users.views.list') else: @@ -65,9 +66,9 @@ def delete(request, pk): # Don't delete ourself if object.pk != request.user.pk: object.delete() - messages.success(request, 'User has been deleted.') + messages.success(request, _('User has been deleted.')) else: - messages.warning(request, 'You cannot delete yourself !') + messages.warning(request, _('You cannot delete yourself !')) return redirect('users.views.list')