digitaleagenturnc/adm/views.py

258 lines
7.6 KiB
Python

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)