🔥 Delete legacy register and deposit
♻ Replace facebook avatar related stuff with gravatars
♻ Replace format-strings with f-strings
✨ Add profile_images command
This commit is contained in:
1 parent
a9f81737d5
commit
9fa6cfe0ee
13 files changed
+52
-626
No files matched your search
@@ -1,160 +0,0 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models import Min
|
||||
from django.forms import formset_factory
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import redirect, render
|
||||
from django.urls import reverse
|
||||
|
||||
from main.forms import DepositForm, OrderForm, OrderLineForm
|
||||
from main.models import OrderLine, Product
|
||||
from main.utils import users_format_js, users_with_perm
|
||||
|
||||
|
||||
def register(request):
|
||||
products = Product.objects.filter(active=True)
|
||||
cheapest_product_price = list(products.aggregate(Min("sale_price_int")).values())[0] or 0
|
||||
|
||||
half_a_year_ago = datetime.now() - timedelta(days=180)
|
||||
users = User.objects.filter(profile__balance__gte=cheapest_product_price)
|
||||
# sort users after user's last purchase time
|
||||
users = sorted(users, key=lambda u: u.profile.last_purchase_date(), reverse=True)
|
||||
users_js = users_format_js(users)
|
||||
|
||||
# multiple orderlines (one per product)
|
||||
OrderLineFormSet = formset_factory(OrderLineForm)
|
||||
if request.method == "POST":
|
||||
orderform = OrderForm(request.POST)
|
||||
formset = OrderLineFormSet(request.POST)
|
||||
|
||||
if formset.is_valid() and orderform.is_valid():
|
||||
order = orderform.save(commit=False)
|
||||
|
||||
if order.is_external():
|
||||
order_sum = sum([ol["amount"] * ol["unit_price_ext"] for ol in formset.cleaned_data])
|
||||
else:
|
||||
order_sum = sum([ol["amount"] * ol["unit_price_int"] for ol in formset.cleaned_data])
|
||||
|
||||
# empty order?
|
||||
if order_sum == 0:
|
||||
messages.error(request, "Du har ikke valgt hva du skal kjøpe...")
|
||||
return HttpResponseRedirect(reverse("register"))
|
||||
|
||||
if not order.is_external():
|
||||
profile = order.customer.profile
|
||||
# can she afford it?
|
||||
if profile.balance < order_sum:
|
||||
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("register"))
|
||||
# substract order from balance
|
||||
profile.balance -= order_sum
|
||||
profile.save()
|
||||
|
||||
order.order_sum = order_sum
|
||||
order.save()
|
||||
|
||||
orderlines = []
|
||||
for ol in formset.cleaned_data:
|
||||
if ol["amount"] > 0:
|
||||
product = Product.objects.get(pk=ol["product"])
|
||||
|
||||
if order.is_external():
|
||||
unit_price = ol["unit_price_ext"]
|
||||
else:
|
||||
unit_price = ol["unit_price_int"]
|
||||
|
||||
OrderLine.objects.create(
|
||||
order=order,
|
||||
product=product,
|
||||
amount=ol["amount"],
|
||||
unit_price=unit_price,
|
||||
)
|
||||
|
||||
product.inventory_amount -= ol["amount"]
|
||||
product.save()
|
||||
|
||||
orderlines.append("{0} {1}".format(ol["amount"], product))
|
||||
|
||||
if order.is_external():
|
||||
messages.success(request, "Ekstern kjøpte {0}.".format(", ".join(orderlines)))
|
||||
else:
|
||||
messages.success(
|
||||
request,
|
||||
"{0} {1} kjøpte {2}.".format(
|
||||
order.customer.first_name,
|
||||
order.customer.last_name,
|
||||
", ".join(orderlines),
|
||||
),
|
||||
)
|
||||
|
||||
return redirect("register")
|
||||
else:
|
||||
# TODO specify error(s)
|
||||
messages.error(request, "Skjemaet er ikke gyldig.")
|
||||
orderform = OrderForm(request.POST)
|
||||
formset = OrderLineFormSet(request.POST)
|
||||
else:
|
||||
orderform = OrderForm()
|
||||
formset = OrderLineFormSet()
|
||||
|
||||
return render(request, "register.html", locals())
|
||||
|
||||
|
||||
def deposit(request):
|
||||
users = User.objects.all().order_by("first_name", "last_name")
|
||||
users_js = users_format_js(users)
|
||||
allowed_users = users_with_perm("add_transaction")
|
||||
error_message_template = "{0} {1} kan ikke sette inn {2} kr, det overskrider maks saldo ({3} kr) med {4} kr"
|
||||
|
||||
limit_deposists = 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.profile.balance > settings.BBS_SALDO_MAX and amount + user.profile.balance != 1337:
|
||||
messages.error(
|
||||
request,
|
||||
error_message_template.format(
|
||||
user.first_name,
|
||||
user.last_name,
|
||||
amount,
|
||||
settings.BBS_SALDO_MAX,
|
||||
amount + user.profile.balance - settings.BBS_SALDO_MAX,
|
||||
),
|
||||
)
|
||||
return HttpResponseRedirect(reverse("deposit"))
|
||||
|
||||
transaction = form.save()
|
||||
profile = transaction.user.profile
|
||||
profile.balance += transaction.amount
|
||||
profile.save()
|
||||
|
||||
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("deposit"))
|
||||
else:
|
||||
messages.error(request, "Skjemaet er ikke gyldig.")
|
||||
form = DepositForm(request.POST)
|
||||
else:
|
||||
form = DepositForm()
|
||||
|
||||
return render(request, "deposit.html", locals())
|
||||
@@ -1,49 +0,0 @@
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from django.http import JsonResponse
|
||||
|
||||
from main.models import OrderLine
|
||||
|
||||
|
||||
def stats_products_realtime(request):
|
||||
end_time = datetime.now()
|
||||
start_time = datetime.now() - timedelta(hours=24)
|
||||
|
||||
order_lines = OrderLine.objects.filter(order__created__range=(start_time, end_time)).order_by("order__created")
|
||||
products = {}
|
||||
for order_line in order_lines:
|
||||
order_time_in_milliseconds = int(time.mktime(order_line.order.created.timetuple()) * 1000)
|
||||
if order_line.product not in products:
|
||||
products[order_line.product] = [[order_time_in_milliseconds, order_line.amount]]
|
||||
else:
|
||||
prev_entry = products[order_line.product][-1]
|
||||
products[order_line.product].append([order_time_in_milliseconds, prev_entry[1] + order_line.amount])
|
||||
|
||||
serialized_products = {}
|
||||
for product, value in products.items():
|
||||
serialized_products[product.name] = value
|
||||
|
||||
response = {"products": serialized_products}
|
||||
|
||||
return JsonResponse(response)
|
||||
|
||||
|
||||
def stats_products_per_user(request, user_id=None):
|
||||
if not user_id:
|
||||
return JsonResponse({"error": "Missing param user_id"})
|
||||
|
||||
order_lines = OrderLine.objects.filter(order__customer__pk=user_id).order_by("order__created")
|
||||
products = {}
|
||||
for order_line in order_lines:
|
||||
order_time_in_milliseconds = int(time.mktime(order_line.order.created.timetuple()) * 1000)
|
||||
if order_line.product not in products:
|
||||
products[order_line.product] = [[order_time_in_milliseconds, order_line.amount]]
|
||||
else:
|
||||
prev_entry = products[order_line.product][-1]
|
||||
products[order_line.product].append([order_time_in_milliseconds, prev_entry[1] + order_line.amount])
|
||||
|
||||
serialized_products = []
|
||||
for product, value in products.items():
|
||||
serialized_products.append({"name": product.name, "data": value})
|
||||
return JsonResponse(serialized_products, safe=False)
|
||||
+1
-4
@@ -13,10 +13,7 @@ def create_user(request):
|
||||
form = SimpleCreateUserForm(data=request.POST)
|
||||
if form.is_valid():
|
||||
user = form.save()
|
||||
messages.success(
|
||||
request,
|
||||
"Hurra! {} {} er lagt til".format(user.first_name, user.last_name),
|
||||
)
|
||||
messages.success(request, f"Hurra! {user.first_name}{user.last_name} er lagt til")
|
||||
return redirect("create-user")
|
||||
|
||||
else:
|
||||
|
||||
Reference in new issue
Block a user