from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from core.forms import extract_post_values from core.report_templates import ReportTemplates from core.util import get_week_range, next_date from .azure_auth import AzureUser from .models import Berichtsheft from core.styles import STYLE import datetime # Create your views here. def write_new_report(request): if request.method == "POST": return write_new_report_post(request) else: return write_new_report_get(request) def write_new_report_post(request): user = AzureUser(request) definition = user.get_report_template() values = extract_post_values(request.POST, definition["vars"]) # TODO : Input Validation report = Berichtsheft( user=user.id, num=int(values.pop("num_doc", "")), year=int(values.pop("year", "")), week=int(values.pop("week", "")), content=values, ) report.save() return redirect("/") def write_new_report_get(request): user = AzureUser(request) definition = user.get_report_template() # Get the latest year and week latest = user.reports().order_by("-year", "-week").first() year_now, week_now, _ = datetime.datetime.today().isocalendar() # Report for this week already exists if latest is not None: if latest.year == year_now and latest.week == week_now: return redirect(f"/report/{latest.id}") if latest is not None: current_year, current_week = next_date(latest.year, latest.week) else: current_year, current_week = year_now, week_now start_date, end_date = get_week_range(current_year, current_week) if latest is not None: current_num = latest.num + 1 else: current_num = 1 # TODO : Cookies for persistent saves return render( request, "write.html", { "user": user, "year": current_year, "week": current_week, "start_date": start_date, "end_date": end_date, "current_num": current_num, "definition": definition, }, ) def index(request): user = AzureUser(request) # Get all berichtshefte all_reports = user.reports() year_now, week_now, _ = datetime.datetime.today().isocalendar() return render( request, "index.html", {"user": user, "reports": all_reports, "week_now": week_now, "style": STYLE}, ) def report_detail_page(request, report_id): user = AzureUser(request) report = get_object_or_404(Berichtsheft, id=report_id) if report.user != user.id: return HttpResponse("Nah", status=401) return render( request, "report.html", {"report": report, "approved": report.is_approved()} ) def test(request): return render(request, "test.html", {})