Skip to content
Snippets Groups Projects
views.py 2.48 KiB
Newer Older
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
from django.conf import settings
Jonathan Weth's avatar
Jonathan Weth committed
from django.contrib.auth.decorators import login_required, permission_required
from django.http import FileResponse
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
from django.shortcuts import get_object_or_404, redirect, render
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
Frank Poetzsch-Heffter's avatar
Frank Poetzsch-Heffter committed
from calendarweek import CalendarWeek
from constance import config

from aleksis.core.util import messages

from .forms import PosterUploadForm
from .models import Poster
Jonathan Weth's avatar
Jonathan Weth committed
from .settings import BASE_DIR
Jonathan Weth's avatar
Jonathan Weth committed
@login_required
@permission_required("resint.add_poster")
def upload(request):
    if request.method == 'POST':
        form = PosterUploadForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()

            messages.success(request, _("The poster was uploaded successfully."))
            return redirect('poster_index')
        form = PosterUploadForm()
    return render(request, 'resint/upload.html', {
@login_required
@permission_required("resint.add_poster")
def delete(request, id):
    poster = get_object_or_404(Poster, pk=id)
    poster.delete()
    messages.success(request, _("The poster was deleted successfully."))
    return redirect("poster_index")
@login_required
@permission_required("poster.add_poster")
def index(request):
    posters = Poster.objects.all().order_by("calendar_week", "year")
    return render(request, 'resint/index.html', {"posters": posters})


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(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.RESINT_NEW_WEEK_DAY)]
    friday = timezone.datetime.combine(friday, config.RESINT_NEW_WEEK_TIME)
    # Check whether to show the poster of the next week or the current week

    # Look for matching PDF in DB
    try:
        obj = Poster.objects.get(year=cw.year, calendar_week=cw.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 Poster.DoesNotExist:
        return return_default_pdf()