mirror of
https://github.com/ae-utbm/sith.git
synced 2024-12-23 00:01:16 +00:00
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
#
|
|
# Copyright 2023 © AE UTBM
|
|
# ae@utbm.fr / ae.info@utbm.fr
|
|
#
|
|
# This file is part of the website of the UTBM Student Association (AE UTBM),
|
|
# https://ae.utbm.fr.
|
|
#
|
|
# You can find the source code of the website at https://github.com/ae-utbm/sith
|
|
#
|
|
# LICENSED UNDER THE GNU GENERAL PUBLIC LICENSE VERSION 3 (GPLv3)
|
|
# SEE : https://raw.githubusercontent.com/ae-utbm/sith/master/LICENSE
|
|
# OR WITHIN THE LOCAL FILE "LICENSE"
|
|
#
|
|
#
|
|
|
|
from django.db.models import F
|
|
from django.http import HttpRequest, HttpResponseRedirect
|
|
from django.shortcuts import get_object_or_404, redirect
|
|
from django.utils import timezone
|
|
from django.views.decorators.http import require_POST
|
|
|
|
from core.views.forms import LoginForm
|
|
from counter.models import Counter, Permanency
|
|
|
|
|
|
@require_POST
|
|
def counter_login(request: HttpRequest, counter_id: int) -> HttpResponseRedirect:
|
|
"""Log a user in a counter.
|
|
|
|
A successful login will result in the beginning of a counter duty
|
|
for the user.
|
|
"""
|
|
counter = get_object_or_404(Counter, pk=counter_id)
|
|
form = LoginForm(request, data=request.POST)
|
|
if not form.is_valid():
|
|
return redirect(counter.get_absolute_url() + "?credentials")
|
|
user = form.get_user()
|
|
if not counter.sellers.contains(user) or user in counter.barmen_list:
|
|
return redirect(counter.get_absolute_url() + "?sellers")
|
|
if len(counter.barmen_list) == 0:
|
|
counter.gen_token()
|
|
request.session["counter_token"] = counter.token
|
|
counter.permanencies.create(user=user, start=timezone.now())
|
|
return redirect(counter)
|
|
|
|
|
|
@require_POST
|
|
def counter_logout(request: HttpRequest, counter_id: int) -> HttpResponseRedirect:
|
|
"""End the permanency of a user in this counter."""
|
|
Permanency.objects.filter(counter=counter_id, user=request.POST["user_id"]).update(
|
|
end=F("activity")
|
|
)
|
|
return redirect("counter:details", counter_id=counter_id)
|