from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView, FormView, TemplateView from django.contrib import messages from django.shortcuts import render, redirect, reverse from django.urls import reverse_lazy from django.conf import settings from django.http import HttpResponseRedirect,HttpResponse, JsonResponse from .models import MainStatistic from django.contrib.auth.models import User from chat.models import ChatMessage from users.models import Agency, AgencyBills, RegNotfallhilfe from standards.models import Standards import csv from auditlog.models import LogEntry from datetime import date, datetime import json from users.models import UserYearAbsenceInfo, UserTime from timemanagement.models import Workday, Absence ''' Prüfung, ob angemeldeter User Mitarbeiterstatus hat. IMMER PER DISPATCH EINBAUEN! ''' def checkForStuffUser(request): if request.user.is_staff: return True else: return False ''' CSV mit Bestellungen herunterladen ''' def getCSVRDOrders(request): if(request.method == "GET"): response = HttpResponse(content_type='text/csv') today = date.today() response['Content-Disposition'] = 'attachment; charset=UTF-8; filename="DA-Export_NF_Bestellungen_' + str(today.day) + '_'+ str(today.month)+'_'+ str(today.year)+'.csv"' writer = csv.writer(response) writer.writerow(['Datum', 'E-Mail', 'Name', 'Personalnummer', 'mitgliedsnummer', 'PLZ', 'Stadt', 'Strasse', 'Rabatt']) orders = RegNotfallhilfe.objects.filter(wassend=False) for order in orders: rabatt = "NEIN" if order.rabatt: rabatt = "JA" writer.writerow([str(order.orderdate),str(order.mail),str(order.name),str(order.persnumber),str(order.mitgliedsnummer),str(order.plz), str(order.stadt),str(order.street), rabatt ]) order.wassend = True order.save() return response else: pass class delAgency(DeleteView): model = Agency success_url = reverse_lazy("adm-agencys") template_name = "adm/adm_admdelconfirm.html" def delete(self, *args, **kwargs): messages.success(self.request, f'Agentur erfolgreich gelöscht!') return super(delAgency, self).delete(*args, **kwargs) def dispatch(self, *args, **kwargs): if(checkForStuffUser(self.request)): return super().dispatch(*args, **kwargs) else: messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!') return redirect("login") ''' Hauptansicht Statisik ''' class AdmMain(TemplateView): template_name = "adm/adm_main.html" def dispatch(self, *args, **kwargs): if(checkForStuffUser(self.request)): return super().dispatch(*args, **kwargs) else: messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!') return redirect("login") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({'active_link' : "adm-statistic"}) context.update({'statistik' : MainStatistic.objects.all().order_by('staticdate')[:180] }) context.update({ "agencycount" : len(Agency.objects.all()), "usercount" : len(User.objects.all().exclude(is_staff=True, is_superuser=True)), "standardcount" : len(Standards.objects.all()), "chatmessagescount" : len(ChatMessage.objects.all()) }) return context ''' Gesatmübersicht aller Rechnungen ''' class AdmBills(TemplateView): template_name = "adm/adm_bills.html" def dispatch(self, *args, **kwargs): if(checkForStuffUser(self.request)): return super().dispatch(*args, **kwargs) else: messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!') return redirect("login") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({'active_link' : "adm-bills"}) context.update({'bills' : AgencyBills.objects.all()}) return context ''' Gesamtansicht der Agenturen ''' class AdmAgencys(TemplateView): template_name = "adm/adm_agencys.html" def dispatch(self, *args, **kwargs): if(checkForStuffUser(self.request)): return super().dispatch(*args, **kwargs) else: messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!') return redirect("login") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({'active_link' : "adm-agencys"}) context.update({'agencys' : Agency.objects.all()}) return context class AdmUsers(TemplateView): template_name = "adm/adm_users.html" def dispatch(self, *args, **kwargs): if(checkForStuffUser(self.request)): return super().dispatch(*args, **kwargs) else: messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!') return redirect("login") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({'active_link' : "adm-users"}) context.update({'users' : User.objects.all().exclude(is_staff=True, is_superuser=True)}) return context ''' Einzelansicht der Agenturen ''' class AdmAgencySingle(TemplateView): template_name = "adm/adm_agency_single.html" def dispatch(self, *args, **kwargs): if(checkForStuffUser(self.request)): return super().dispatch(*args, **kwargs) else: messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!') return redirect("login") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({'active_link' : "adm-agencys"}) context.update({'agency' : Agency.objects.get(pk=kwargs['agpk'])}) context.update({'bills' : AgencyBills.objects.filter(agency=Agency.objects.get(pk=kwargs['agpk'])).order_by('-billdate')[:3]}) context.update({'users_of_agency' : User.objects.filter(profile__agency=Agency.objects.get(pk=kwargs['agpk'])).order_by('-last_name')}) return context class AdmUserSingle(TemplateView): template_name = "adm/adm_user_single.html" def dispatch(self, *args, **kwargs): if(checkForStuffUser(self.request)): return super().dispatch(*args, **kwargs) else: messages.warning(self.request, f'Sie benötigen einen Mitarbeiter-Account, um diese Seiten aufzurufen!') return redirect("login") def get_context_data(self, **kwargs): userrequested = User.objects.get(pk=kwargs['uspk']) context = super().get_context_data(**kwargs) context.update({'active_link' : "adm-users"}) context.update({'userdata' : userrequested}) # Loading Logindata logdata = LogEntry.objects.filter(object_pk=kwargs['uspk'])[:50] logdata_logins = [] for ele in reversed(logdata): try: datestring = json.loads(ele.changes)["last_login"][1] datestring = datestring.split(".")[0] logdata_logins.append(datetime.strptime(datestring, '%Y-%m-%d %H:%M:%S')) except: pass context.update({'logdata' : logdata_logins}) context.update({'workdays' : Workday.objects.filter(user=userrequested)}) context.update({'absences' : Absence.objects.filter(user=userrequested)}) context.update({'yearinfo' : UserYearAbsenceInfo.objects.filter(user=userrequested)}) context.update({'usertimedata' : UserTime.objects.get(user=userrequested)}) return context # CRONJOB, um die Statistik zu füllen! def statisticCronJob(request, code): data = {} if(code == settings.CRONAPIKEY_STATSTIC): print("STATISTIC is running...") newMainS = MainStatistic(agencys=len(Agency.objects.all()),users=len(User.objects.all().exclude(is_staff=True, is_superuser=True)),standards=len(Standards.objects.all()),chatmessages=len(ChatMessage.objects.all())) newMainS.save() data.update({"status" : "success"}) else: print("API STATISTIC CODE FAILED") data.update({"status" : "failed"}) return JsonResponse(data)