shiftregister/shiftregister/signage/views.py

74 lines
2.2 KiB
Python

from django.shortcuts import render
from django.db.models import F, Count, Q, ExpressionWrapper
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib.auth.decorators import login_required
from django.utils import timezone
from .models import TeamBackup
from .models import Shift
from .forms import TeamBackupForm
from datetime import timedelta
from django.db.models import DateTimeField
# Create your views here.
@login_required
def worklist(request):
help_wanted = Q(required_helpers__gt=F("reg_count")) | Q(required_helpers=0) & Q(
room__required_helpers__gt=F("reg_count")
)
shifts = (
Shift.with_reg_count()
.annotate(
end_at=ExpressionWrapper(
F("start_at") + F("duration"),
output_field=DateTimeField(),
)
)
.filter(
help_wanted,
end_at__gte=timezone.now(),
deleted=False,
)
.order_by("start_at", "room_id")
)
context = {}
context["shifts"] = shifts
context["form"] = TeamBackupForm()
return render(request, "worklist.html", context)
@login_required
def add_teammember(request, shiftid):
if request.method != "POST":
return redirect("signage:worklist")
form = TeamBackupForm(request.POST)
if not form.is_valid():
return redirect("signage:worklist")
shift = get_object_or_404(Shift, pk=shiftid)
o = TeamBackup(shift=shift, name=form.cleaned_data["name"])
o.save()
return redirect("signage:worklist")
def terminal(request):
help_wanted = Q(required_helpers__gt=F("reg_count")) | Q(required_helpers=0) & Q(
room__required_helpers__gt=F("reg_count")
)
shifts = (
Shift.with_reg_count()
.annotate(
end_at=ExpressionWrapper(
F("start_at") + F("duration"),
output_field=DateTimeField(),
)
)
.filter(
help_wanted,
end_at__gte=timezone.now(),
deleted=False,
)
.order_by("start_at", "room_id")
)
context = {}
context["shifts"] = shifts
return render(request, "terminal.html", context)