import datetime import json import base64 from core.models import Berichtsheft from core.reports import DailyReport, WeeklyReport, choose_report_kind import core.util from enum import Enum class Roles(Enum): TRAINEE = "trainee" MANAGER = "manager" ADMIN = "admin" class AzureUser: display_name: str id: str claims: list def __init__(self, request): try: # X-MS-CLIENT-PRINCIPAL-ID self.id = request.headers["X-MS-CLIENT-PRINCIPAL-ID"] # X-MS-CLIENT-PRINCIPAL-NAME self.id = request.headers["X-MS-CLIENT-PRINCIPAL-NAME"] # X-MS-CLIENT-PRINCIPAL claims_json = json.loads( base64.decode(request.headers["X-MS-CLIENT-PRINCIPAL"]) ) claims = {} for claim in claims_json["claims"]: claims[claim["typ"]] = claim["val"] self.claims = claims except: self.display_name = "Anon" self.id = "anon" def reports(self): return Berichtsheft.objects.filter(user=self.id).order_by("-year", "-week") def get_report_kind(self): # TODO : Implement return "weekly" def get_report_kind_form(self, request=None, files=None): return choose_report_kind(self.get_report_kind(), request, files) def latest_report(self): return self.reports().order_by("-year", "-week").first() def late_reports(self) -> int: year_now, week_now, _ = datetime.datetime.today().isocalendar() count = 0 latest = self.latest_report() new_year, new_week = (latest.year, latest.week) while week_now != new_week or (week_now == new_week and year_now != new_year): count += 1 new_year, new_week = core.util.next_date(new_year, new_week) return count @property def role(self) -> Roles: # TODO : Implement return Roles.TRAINEE