Completely re-structured the project from scratch, wrote a better bootstrap script, changed configuration format to yaml, improved Caddyfile, and more. #15 #16 #20
This commit is contained in:
parent
0012214f9b
commit
5572fec9c1
91 changed files with 739 additions and 1345 deletions
180
app/views.py
Normal file
180
app/views.py
Normal file
|
@ -0,0 +1,180 @@
|
|||
import json
|
||||
import sys
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import authenticate
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth import login
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.forms import AuthenticationForm
|
||||
from django.http.response import HttpResponseRedirect
|
||||
from django.http.response import FileResponse
|
||||
from django.http.response import HttpResponse
|
||||
from django.shortcuts import render
|
||||
|
||||
from django.utils.translation import gettext as _
|
||||
from django.utils.formats import decimal
|
||||
|
||||
from . import sql_queries
|
||||
|
||||
from .models import Drink
|
||||
from .models import Order
|
||||
from .models import RegisterTransaction
|
||||
|
||||
|
||||
def login_page(request):
|
||||
|
||||
userlist = get_user_model().objects.filter(is_superuser=False).filter(is_active=True).order_by("username")
|
||||
|
||||
if request.method == "POST":
|
||||
|
||||
form = AuthenticationForm(request.POST)
|
||||
username = request.POST['username']
|
||||
password = request.POST['password']
|
||||
|
||||
user = authenticate(username=username,password=password)
|
||||
|
||||
if user:
|
||||
if user.is_active:
|
||||
login(request, user)
|
||||
return HttpResponseRedirect("/")
|
||||
else:
|
||||
return render(request,'registration/login.html', {
|
||||
"form": form,
|
||||
"user_list": userlist,
|
||||
"error_message": _("Invalid username or password.")
|
||||
})
|
||||
|
||||
else:
|
||||
|
||||
if request.user.is_authenticated:
|
||||
return HttpResponseRedirect("/")
|
||||
|
||||
form = AuthenticationForm()
|
||||
|
||||
return render(request,'registration/login.html', {
|
||||
"form": form,
|
||||
"user_list": userlist
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
def index(request):
|
||||
context = {
|
||||
"available_drinks": Drink.objects.filter(available__gt=0).filter(deleted=False).order_by('product_name'),
|
||||
}
|
||||
return render(request, "index.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
def history(request):
|
||||
context = {
|
||||
"history": sql_queries.select_history(request.user, language_code=request.LANGUAGE_CODE),
|
||||
}
|
||||
return render(request, "history.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
def order(request, drinkid):
|
||||
try:
|
||||
drink_ = Drink.objects.get(pk=drinkid)
|
||||
context = {
|
||||
"drink": drink_
|
||||
}
|
||||
return render(request, "order.html", context)
|
||||
except Drink.DoesNotExist:
|
||||
return HttpResponseRedirect("/")
|
||||
|
||||
|
||||
@login_required
|
||||
def deposit(request):
|
||||
return render(request, "deposit.html", {})
|
||||
|
||||
|
||||
@login_required
|
||||
def statistics(request):
|
||||
context = {
|
||||
"yopml12m": sql_queries.select_yopml12m(request.user),
|
||||
"aopml12m": sql_queries.select_aopml12m(),
|
||||
"yopwd": sql_queries.select_yopwd(request.user),
|
||||
"aopwd": sql_queries.select_aopwd(),
|
||||
"noyopd": sql_queries.select_noyopd(request.user),
|
||||
"noaopd": sql_queries.select_noaopd()
|
||||
}
|
||||
return render(request, "statistics.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
def supply(request):
|
||||
return render(request, "supply.html")
|
||||
|
||||
|
||||
@login_required
|
||||
def redirect_home(request):
|
||||
return HttpResponseRedirect("/")
|
||||
|
||||
|
||||
# API for XHR requests #
|
||||
|
||||
@login_required
|
||||
def api_order_drink(request):
|
||||
# check request -> make order
|
||||
user = request.user
|
||||
try:
|
||||
if user.allow_order_with_negative_balance or user.balance > 0:
|
||||
drinkid = int(request.POST["drinkid"])
|
||||
amount = int(request.POST["numberofdrinks"])
|
||||
drink = Drink.objects.get(pk=drinkid)
|
||||
if ((drink.do_not_count and drink.available > 0) or (drink.available >= amount)) and not drink.deleted:
|
||||
Order.objects.create(drink=drink, user=user, amount=amount)
|
||||
return HttpResponse("success", status=200)
|
||||
else:
|
||||
return HttpResponse("notAvailable", status=400)
|
||||
else: raise Exception("Unexpected input or missing privileges.")
|
||||
except Exception as e:
|
||||
print(f"An exception occured while processing an order: User: {user.username} - Exception: {e}", file=sys.stderr)
|
||||
return HttpResponse(b"", status=500)
|
||||
|
||||
|
||||
@login_required
|
||||
def api_deposit(request):
|
||||
# check request -> deposit
|
||||
user = request.user
|
||||
try:
|
||||
amount = decimal.Decimal(request.POST["depositamount"])
|
||||
if 0.00 < amount < 9999.99:
|
||||
# create transaction
|
||||
RegisterTransaction.objects.create(
|
||||
transaction_sum=amount,
|
||||
comment=f"User deposit by user {user.username}",
|
||||
is_user_deposit=True,
|
||||
user=user
|
||||
)
|
||||
return HttpResponse("success", status=200)
|
||||
else: raise Exception("Deposit amount too big or small.")
|
||||
except Exception as e:
|
||||
print(f"An exception occured while processing a transaction: User: {user.username} - Exception: {e}", file=sys.stderr)
|
||||
return HttpResponse(b"", status=500)
|
||||
|
||||
@login_required
|
||||
def api_supply(request):
|
||||
# check request -> supply
|
||||
user = request.user
|
||||
try:
|
||||
price = decimal.Decimal(request.POST["supplyprice"])
|
||||
description = str(request.POST["supplydescription"])
|
||||
if 0.00 < price < 9999.99 and (user.allowed_to_supply or user.is_superuser):
|
||||
# create transaction
|
||||
RegisterTransaction.objects.create(
|
||||
transaction_sum=-price,
|
||||
comment=f"Supply: {description}",
|
||||
is_user_deposit=False,
|
||||
user=user
|
||||
)
|
||||
return HttpResponse("success", status=200)
|
||||
else: raise Exception("Unexpected input or missing privileges.")
|
||||
except Exception as e:
|
||||
print(f"An exception occured while processing a supply transaction: User: {user.username} - Exception: {e}", file=sys.stderr)
|
||||
return HttpResponse(b"", status=500)
|
Loading…
Add table
Add a link
Reference in a new issue