Skip to content
Snippets Groups Projects
views.py 2.44 KiB
Newer Older
import datetime
import os
Jonathan Weth's avatar
Jonathan Weth committed
from django.contrib.auth.decorators import login_required, permission_required
from django.http import FileResponse
from django.shortcuts import render, redirect
from django.utils import timezone

Jonathan Weth's avatar
Jonathan Weth committed
from .models import Menu
from django.conf import settings
from .forms import MenuUploadForm


Jonathan Weth's avatar
Jonathan Weth committed
@login_required
@permission_required("mensa.add_menu")
def upload(request):
    if request.method == 'POST':
        form = MenuUploadForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()

            return redirect('menu_index_msg', msg="success")
    else:
        form = MenuUploadForm()
    return render(request, 'mensa/upload.html', {
@login_required
@permission_required("mensa.add_menu")
def delete(request, id):
    Menu.objects.get(id=id).delete()

    return redirect("menu_index_msg", msg="delete_success")


@login_required
@permission_required("menu.add_menu")
def index(request, msg=None):
    menus = Menu.objects.all().order_by("calendar_week", "year")
    return render(request, 'mensa/index.html', {"msg": msg, "menus": menus})


def return_pdf(filename):
    """Read and response a PDF file"""

    file = open(filename, "rb")
    return FileResponse(file, content_type="application/pdf")


def return_default_pdf():
    """Response the default PDF"""

Jonathan Weth's avatar
Jonathan Weth committed
    return return_pdf(os.path.join(settings.BASE_DIR, "menu", "default.pdf"))


def show_current(request):
    # Get current date with year and calendar week
    current_date = timezone.datetime.now()
    year, calendar_week = current_date.isocalendar()[:2]

    # Calculate the number of days to next friday
    days_to_add = 5 - current_date.isoweekday()
    if days_to_add < 0:
        days_to_add = days_to_add + 7

    if days_to_add == 6 or days_to_add == 7:
        calendar_week += 1

    # Create datetime with next friday and time 14:10
    friday = current_date + datetime.timedelta(days=days_to_add)
    friday_14_10 = timezone.datetime(friday.year, friday.month, friday.day, 14, 10)

    # Check whether to show the plan of the next week or the current week
    if current_date > friday_14_10:
        calendar_week += 1

    # Look for matching PDF in DB
    try:
        obj = Menu.objects.get(year=year, calendar_week=calendar_week)
Jonathan Weth's avatar
Jonathan Weth committed
        return return_pdf(os.path.join(settings.MEDIA_ROOT, str(obj.pdf)))

    # Or show the default PDF
    except Menu.DoesNotExist:
        return return_default_pdf()