import os from calendarweek import CalendarWeek from constance import config from django.contrib.auth.decorators import login_required, permission_required from django.http import FileResponse from django.shortcuts import render, redirect, get_object_or_404 from django.utils import timezone from django.utils.translation import gettext_lazy as _ from django.conf import settings from .models import Menu from .settings import BASE_DIR from .forms import MenuUploadForm from aleksis.core.util import messages @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() messages.success(request, _("The menu was uploaded successfully.")) return redirect('menu_index') else: form = MenuUploadForm() return render(request, 'mensa/upload.html', { 'form': form }) @login_required @permission_required("mensa.add_menu") def delete(request, id): menu = get_object_or_404(Menu, pk=id) menu.delete() messages.success(request, _("The menu was deleted successfully.")) return redirect("menu_index") @login_required @permission_required("menu.add_menu") def index(request): menus = Menu.objects.all().order_by("calendar_week", "year") return render(request, 'mensa/index.html', {"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(BASE_DIR, "default.pdf")) def show_current(request): # Get current date with year and calendar week current_date = timezone.datetime.now() cw = CalendarWeek.from_date(current_date) # Create datetime with the friday of the week and the toggle time friday = cw[int(config.MENSA_NEW_WEEK_DAY)] friday = timezone.datetime.combine(friday, config.MENSA_NEW_WEEK_TIME) # Check whether to show the plan of the next week or the current week if current_date > friday: cw += 1 # Look for matching PDF in DB try: obj = Menu.objects.get(year=cw.year, calendar_week=cw.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()