Newer
Older
import time
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
from .models import Menu
from django.conf import settings
from .forms import MenuUploadForm
@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', {
@permission_required("mensa.add_menu")
# print(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"""
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)
return return_pdf(os.path.join(settings.MEDIA_ROOT, str(obj.pdf)))
# Or show the default PDF
except Menu.DoesNotExist:
return return_default_pdf()