From 8aed5ace216c28c00316f7bd9393f381f453752c Mon Sep 17 00:00:00 2001 From: Nikolai Kristiansen Date: Wed, 5 Feb 2014 22:51:28 +0100 Subject: [PATCH] Limit deposits by perm (default off) --- main/utils.py | 9 ++++++++ main/views.py | 35 +++++++++++++++++++++++++----- settings-sample.py | 3 +++ templates/deposit.html | 15 +++++++++++++ templates/registration/logout.html | 8 ++----- 5 files changed, 58 insertions(+), 12 deletions(-) diff --git a/main/utils.py b/main/utils.py index 9735761..ebb6d41 100644 --- a/main/utils.py +++ b/main/utils.py @@ -1,5 +1,14 @@ +from django.contrib.auth.models import User +from django.db.models import Q + def format_username(firstname, lastname): first = firstname.lower().strip().replace(" ", "")[:6].encode('ascii', 'ignore') last = lastname.lower().strip().replace(" ", "")[:6].encode('ascii', 'ignore') return "{0}{0}".format(first, last) + +def users_with_perm(perm_name): + return User.objects.filter( + Q(is_superuser=True) | + Q(user_permissions__codename=perm_name) | + Q(groups__permissions__codename=perm_name)).distinct() diff --git a/main/views.py b/main/views.py index dd9c6b4..1c3cc6f 100755 --- a/main/views.py +++ b/main/views.py @@ -5,6 +5,7 @@ from itertools import groupby import json import time +from django.conf import settings from django.contrib.auth import login, logout as auth_logout from django.contrib.auth.decorators import login_required from django.contrib.auth.forms import AuthenticationForm @@ -17,9 +18,10 @@ from django.contrib import messages from django.db.models import Count, Sum, Max, Min from models import * - from forms import * +import utils + def home(request): if request.method == "POST": form = AuthenticationForm(data=request.POST) @@ -55,8 +57,9 @@ def register(request): # can he afford it? profile = order.customer.get_profile() if order_sum > profile.balance: - messages.error(request, '{0} har ikke råd, mangler {1} kr.'.format( - order.customer, + messages.error(request, '{0} {1} har ikke råd, mangler {2} kr.'.format( + order.customer.first_name, + order.customer.last_name, int(order_sum - profile.balance))) return HttpResponseRedirect( reverse('main.views.register') ) # empty order? @@ -81,7 +84,11 @@ def register(request): orderlines.append(str(ol['amount']) + " " + str(product)) - messages.success(request, '{0} kjøpte {1}.'.format(order.customer, ", ".join(orderlines))) + messages.success(request, '{0} {1} kjøpte {2}.'.format( + order.customer.first_name, + order.customer.last_name, + ", ".join(orderlines) + )) return HttpResponseRedirect( reverse('main.views.register') ) else: # TODO specify error(s) @@ -96,17 +103,33 @@ def register(request): def deposit(request): users = User.objects.all().order_by('first_name','last_name') users_js = users_format_js(users) + allowed_users = utils.users_with_perm('add_transaction') + + limit_deposits = settings.BBS_LIMIT_DEPOSITS if request.method == "POST": form = DepositForm(request.POST) if form.is_valid(): + amount = form.cleaned_data['amount'] + user = form.cleaned_data['user'] + if amount + user.get_profile().balance > settings.BBS_SALDO_MAX: + messages.error(request, '{0} {1} kan ikke sette inn {2} kr, det overskrider maks saldo ({3} kr) med {4} kr'.format( + user.first_name, + user.last_name, + amount, + settings.BBS_SALDO_MAX, + amount + user.get_profile().balance - settings.BBS_SALDO_MAX + )) + return HttpResponseRedirect( reverse('main.views.deposit') ) + transaction = form.save() profile = transaction.user.get_profile() profile.balance += transaction.amount profile.save() - messages.success(request, '{0} satte inn {1} kr. Ny saldo er {2}'.format( - transaction.user, + messages.success(request, '{0} {1} satte inn {2} kr. Ny saldo er {3}'.format( + transaction.user.first_name, + transaction.user.last_name, transaction.amount, profile.balance)) return HttpResponseRedirect( reverse('main.views.deposit') ) diff --git a/settings-sample.py b/settings-sample.py index bc842a7..6c81b16 100755 --- a/settings-sample.py +++ b/settings-sample.py @@ -157,3 +157,6 @@ LOGIN_REDIRECT_URL = '/' SESSION_COOKIE_AGE = 900 # 15 minutes SESSION_EXPIRE_AT_BROWSER_CLOSE = True + +BBS_SALDO_MAX = 600 +BBS_LIMIT_DEPOSITS = False diff --git a/templates/deposit.html b/templates/deposit.html index 503205b..245e659 100644 --- a/templates/deposit.html +++ b/templates/deposit.html @@ -15,6 +15,20 @@ {% endif %} + {% if not perms.main.can_add_transaction and limit_deposits %} +
+
+

Du har ikke tilgang til å sette inn penger.

+

Spør en av disse om de kan hjelpe deg:

+
    + {% for u in allowed_users %} +
  • {{u.first_name }} {{u.last_name }}
  • + {% endfor %} +
+
+
+ + {% else %}
{% csrf_token %}
@@ -70,5 +84,6 @@ + {% endif %}
{% endblock %} diff --git a/templates/registration/logout.html b/templates/registration/logout.html index 18b4fef..4fe7b88 100644 --- a/templates/registration/logout.html +++ b/templates/registration/logout.html @@ -5,12 +5,8 @@ {% block content %}
- {% if user.is_authenticated %} -

Du er logget ut.

-

Vil du logge inn igjen?

- {% else %} -

Du er allerede logget ut.

- {% endif %} +

Du er logget ut.

+

Vil du logge inn igjen?

{% endblock %}