yamatemat/matecnt/views.py

141 lines
3.0 KiB
Python
Raw Permalink Normal View History

2015-01-03 02:49:29 +01:00
from django.shortcuts import render, redirect, get_object_or_404
2015-01-02 21:05:52 +01:00
2015-01-02 23:12:52 +01:00
from django.http import HttpResponse
2015-01-03 02:49:29 +01:00
from django.http import HttpResponseRedirect
2015-01-02 23:12:52 +01:00
from django.template import RequestContext, loader
from matecnt.models import Drinker, Drink
2015-01-03 02:49:29 +01:00
# Helpers
def get_users():
return Drinker.objects.order_by('credit')
def get_user(code):
return get_object_or_404(Drinker, code=code)
def get_drink(code):
return get_object_or_404(Drink, code=code)
def get_drinks():
return Drink.objects.order_by('prize')
# Views
def index(request):
ctx = {
'heading': 'Welcome to YAMatemat',
'drinkers': get_users(),
}
return render(request, 'index.html', ctx)
def user(request, code=None):
if not code:
if 'user' in request.REQUEST:
code = request.REQUEST['user']
else:
return redirect('/mate/users/')
user = get_user(code)
ctx = {
'heading': 'User %s' % (user.name),
'drinker': user,
'drinks': get_drinks,
}
return render(request, 'user.html', ctx)
def drink(request, code=None):
if not code:
if 'drink' in request.REQUEST:
code = request.REQUEST['drink']
else:
return redirect('/mate/drinks/')
drink = get_drink(code)
ctx = {
'heading': 'Drink %s' % (drink.name),
'drink': drink,
'drinkers': get_users(),
}
return render(request, 'drink.html', ctx)
2015-01-02 23:12:52 +01:00
2015-01-03 00:24:57 +01:00
2015-01-03 02:55:20 +01:00
def users(request):
users = get_users()
ctx = {
'heading': 'User list',
'drinkers': users,
}
return render(request, 'users.html', ctx)
2015-01-03 00:24:57 +01:00
def drinks(request):
2015-01-03 02:49:29 +01:00
drinks = get_drinks()
2015-01-03 00:24:57 +01:00
2015-01-03 02:49:29 +01:00
ctx = {
2015-01-03 00:24:57 +01:00
'heading': 'Drink list',
'drinks': drinks,
2015-01-03 02:49:29 +01:00
}
return render(request, 'drinks.html', ctx)
2015-01-03 14:09:49 +01:00
2015-01-03 03:05:53 +01:00
# Actions (POSTs)
2015-01-03 02:49:29 +01:00
def checkout(request):
#if not request.method == 'POST':
#raise RuntimeError('only POST allowed')
try:
user = request.REQUEST['drinker']
drink = request.REQUEST['drink']
except KeyError as ex:
return HttpResponse(status=400)
2015-01-03 03:09:33 +01:00
count = int(request.REQUEST.get('count', 1))
drink_data = get_drink(drink)
2015-01-03 04:42:14 +01:00
total = drink_data.prize * count
drinker = get_user(user)
drinker.credit -= total
drinker.save()
2015-01-03 02:49:29 +01:00
ctx = {
'heading': 'Codes scanned: user=%r drink=%r amount=%s' % (user, drink, count),
2015-01-03 04:42:14 +01:00
'drinker': drinker,
2015-01-03 03:09:33 +01:00
'drink': drink_data,
2015-01-03 04:42:14 +01:00
'total': total,
2015-01-03 02:49:29 +01:00
}
return render(request, 'checkout.html', ctx)
2015-01-03 03:05:53 +01:00
def charge(request):
if not request.method == 'POST':
raise RuntimeError('only POST allowed')
try:
user = request.POST['drinker']
charge = int(request.POST['charge'])
except KeyError as ex:
return HttpResponse(status=400)
2015-01-03 04:42:14 +01:00
drinker = get_user(user)
drinker.credit += charge
drinker.save()
2015-01-03 03:05:53 +01:00
ctx = {
'heading': 'Charging: user=%r amount=%s' % (user, charge),
2015-01-03 04:42:14 +01:00
'drinker': drinker,
2015-01-03 03:05:53 +01:00
'amount': charge,
}
return render(request, 'charge.html', ctx)