101 lines
2.1 KiB
Python
101 lines
2.1 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
|
|
|
from django.http import HttpResponse
|
|
from django.http import HttpResponseRedirect
|
|
from django.template import RequestContext, loader
|
|
|
|
from matecnt.models import Drinker, Drink
|
|
|
|
# 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)
|
|
|
|
|
|
def drinks(request):
|
|
drinks = get_drinks()
|
|
|
|
ctx = {
|
|
'heading': 'Drink list',
|
|
'drinks': drinks,
|
|
}
|
|
return render(request, 'drinks.html', ctx)
|
|
|
|
|
|
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)
|
|
|
|
count = request.REQUEST.get('count', 1)
|
|
|
|
ctx = {
|
|
'heading': 'Codes scanned: user=%r drink=%r amount=%s' % (user, drink, count),
|
|
'drinker': get_user(user),
|
|
'drink': get_drink(drink),
|
|
}
|
|
return render(request, 'checkout.html', ctx)
|
|
|