74 lines
2.2 KiB
Python
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)
|