Limit deposits by perm (default off)

This commit is contained in:
nikolark committed 2014-02-05 22:51:28 +01:00
1 parent 2ef30085d6
commit 8aed5ace21
5 files changed
+56 -10

No files matched your search

+9
View File
@@ -1,5 +1,14 @@
from django.contrib.auth.models import User
from django.db.models import Q
def format_username(firstname, lastname): def format_username(firstname, lastname):
first = firstname.lower().strip().replace(" ", "")[:6].encode('ascii', 'ignore') first = firstname.lower().strip().replace(" ", "")[:6].encode('ascii', 'ignore')
last = lastname.lower().strip().replace(" ", "")[:6].encode('ascii', 'ignore') last = lastname.lower().strip().replace(" ", "")[:6].encode('ascii', 'ignore')
return "{0}{0}".format(first, last) 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()
+29 -6
View File
@@ -5,6 +5,7 @@ from itertools import groupby
import json import json
import time import time
from django.conf import settings
from django.contrib.auth import login, logout as auth_logout from django.contrib.auth import login, logout as auth_logout
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm 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 django.db.models import Count, Sum, Max, Min
from models import * from models import *
from forms import * from forms import *
import utils
def home(request): def home(request):
if request.method == "POST": if request.method == "POST":
form = AuthenticationForm(data=request.POST) form = AuthenticationForm(data=request.POST)
@@ -55,8 +57,9 @@ def register(request):
# can he afford it? # can he afford it?
profile = order.customer.get_profile() profile = order.customer.get_profile()
if order_sum > profile.balance: if order_sum > profile.balance:
messages.error(request, '{0} har ikke råd, mangler {1} kr.'.format( messages.error(request, '{0} {1} har ikke råd, mangler {2} kr.'.format(
order.customer, order.customer.first_name,
order.customer.last_name,
int(order_sum - profile.balance))) int(order_sum - profile.balance)))
return HttpResponseRedirect( reverse('main.views.register') ) return HttpResponseRedirect( reverse('main.views.register') )
# empty order? # empty order?
@@ -81,7 +84,11 @@ def register(request):
orderlines.append(str(ol['amount']) + " " + str(product)) 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') ) return HttpResponseRedirect( reverse('main.views.register') )
else: else:
# TODO specify error(s) # TODO specify error(s)
@@ -96,17 +103,33 @@ def register(request):
def deposit(request): def deposit(request):
users = User.objects.all().order_by('first_name','last_name') users = User.objects.all().order_by('first_name','last_name')
users_js = users_format_js(users) users_js = users_format_js(users)
allowed_users = utils.users_with_perm('add_transaction')
limit_deposits = settings.BBS_LIMIT_DEPOSITS
if request.method == "POST": if request.method == "POST":
form = DepositForm(request.POST) form = DepositForm(request.POST)
if form.is_valid(): 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() transaction = form.save()
profile = transaction.user.get_profile() profile = transaction.user.get_profile()
profile.balance += transaction.amount profile.balance += transaction.amount
profile.save() profile.save()
messages.success(request, '{0} satte inn {1} kr. Ny saldo er {2}'.format( messages.success(request, '{0} {1} satte inn {2} kr. Ny saldo er {3}'.format(
transaction.user, transaction.user.first_name,
transaction.user.last_name,
transaction.amount, transaction.amount,
profile.balance)) profile.balance))
return HttpResponseRedirect( reverse('main.views.deposit') ) return HttpResponseRedirect( reverse('main.views.deposit') )
+3
View File
@@ -157,3 +157,6 @@ LOGIN_REDIRECT_URL = '/'
SESSION_COOKIE_AGE = 900 # 15 minutes SESSION_COOKIE_AGE = 900 # 15 minutes
SESSION_EXPIRE_AT_BROWSER_CLOSE = True SESSION_EXPIRE_AT_BROWSER_CLOSE = True
BBS_SALDO_MAX = 600
BBS_LIMIT_DEPOSITS = False
+15
View File
@@ -15,6 +15,20 @@
</div> </div>
</section> </section>
{% endif %} {% endif %}
{% if not perms.main.can_add_transaction and limit_deposits %}
<section class="row">
<div class="col-xs-4">
<p class="alert alert-warning">Du har ikke tilgang til å sette inn penger.</p>
<p>Spør en av disse om de kan hjelpe deg:</p>
<ul>
{% for u in allowed_users %}
<li style="padding-bottom: 8px;"><img src="{{u.get_profile.image }}" />{{u.first_name }} {{u.last_name }}</li>
{% endfor %}
</ul>
</div>
</section>
{% else %}
<form id="order" method="post" class="form-stacked" autocomplete="off"> <form id="order" method="post" class="form-stacked" autocomplete="off">
{% csrf_token %} {% csrf_token %}
<section id="customer"> <section id="customer">
@@ -70,5 +84,6 @@
</div> </div>
</div> </div>
</form> </form>
{% endif %}
</section> </section>
{% endblock %} {% endblock %}
-4
View File
@@ -5,12 +5,8 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
{% if user.is_authenticated %}
<p class="alert alert-success">Du er logget ut.</p> <p class="alert alert-success">Du er logget ut.</p>
<p>Vil du <a href="{% url home %}">logge inn igjen?</a></p> <p>Vil du <a href="{% url home %}">logge inn igjen?</a></p>
{% else %}
<p>Du er allerede logget ut.</p>
{% endif %}
</div> </div>
</div> </div>
{% endblock %} {% endblock %}