diff --git a/adm/models.py b/adm/models.py index c2edf13..9e1c91a 100644 --- a/adm/models.py +++ b/adm/models.py @@ -8,5 +8,17 @@ class MainStatistic(models.Model): users = models.IntegerField(default=0) standards = models.IntegerField(default=0) chatmessages = models.IntegerField(default=0) + active_abos = models.IntegerField(default=0) + absenceobjects = models.IntegerField(default=0) + user_active_timemanagement = models.IntegerField(default=0) + organizerobjects = models.IntegerField(default=0) + agency_activerecover = models.IntegerField(default=0) + agency_recoverobjects = models.IntegerField(default=0) + allfiles = models.IntegerField(default=0) + allfiles_storage = models.FloatField(default=0.0) + logins = models.IntegerField(default=0) +class MainSalesMonth(models.Model): + salesmonthdate = models.DateField(default=timezone.now) + value = models.FloatField(default=0.0) diff --git a/adm/templates/adm/adm_main.html b/adm/templates/adm/adm_main.html index f230388..1ecc459 100644 --- a/adm/templates/adm/adm_main.html +++ b/adm/templates/adm/adm_main.html @@ -1,6 +1,7 @@ {% extends "adm/adm_base.html" %} {% block content %} {% load adm_tags %} +{% load mathfilters %}
{% if statistik|length > 0 %} {% getlaststat as statistik_last %} @@ -28,10 +29,6 @@ Standards {{standardcount}} - - Chatnachrichten - {{chatmessagescount}} - @@ -89,7 +86,97 @@ new Chart(document.getElementById("all_stats"),{ {% endfor %} ], "fill":false, - "borderColor":"#D3D94A", + "borderColor":"#FFFF99", + "lineTension":0.1 + }, + {"label":"Aktive Abos", + "data":[ + {% for ele in statistik %} + {{ele.active_abos}}, + {% endfor %} + ], + "fill":false, + "borderColor":"#009900", + "lineTension":0.1 + }, + {"label":"Abwesenheiten", + "data":[ + {% for ele in statistik %} + {{ele.absenceobjects}}, + {% endfor %} + ], + "fill":false, + "borderColor":"#CC00CC", + "lineTension":0.1 + }, + {"label":"Nutzer mit Zeiterfassung", + "data":[ + {% for ele in statistik %} + {{ele.user_active_timemanagement}}, + {% endfor %} + ], + "fill":false, + "borderColor":"#FFB266", + "lineTension":0.1 + }, + {"label":"Organizerelemente", + "data":[ + {% for ele in statistik %} + {{ele.organizerobjects}}, + {% endfor %} + ], + "fill":false, + "borderColor":"#6600CC", + "lineTension":0.1 + }, + {"label":"Agenturen mit Notfallhilfenpasswort", + "data":[ + {% for ele in statistik %} + {{ele.agency_activerecover}}, + {% endfor %} + ], + "fill":false, + "borderColor":"#FF0000", + "lineTension":0.1 + }, + {"label":"Notfallhilfenelemente", + "data":[ + {% for ele in statistik %} + {{ele.agency_recoverobjects}}, + {% endfor %} + ], + "fill":false, + "borderColor":"#990000", + "lineTension":0.1 + }, + {"label":"Dateien", + "data":[ + {% for ele in statistik %} + {{ele.allfiles}}, + {% endfor %} + ], + "fill":false, + "borderColor":"#CCCC00", + "lineTension":0.1 + }, + {"label":"Speicherplatzverbrauch", + "data":[ + {% for ele in statistik %} + {{ ele.allfiles_storage|mul:0.001 }}, + {% endfor %} + ], + "fill":false, + "borderColor":"#666600", + "lineTension":0.1 + }, + {"label":"Gestrige Logins", + "data":[ + {% for ele in statistik %} + {{ele.logins}}, + {% endfor %} + ], + "fill":false, + "borderColor":"#000099", "lineTension":0.1 }, @@ -97,4 +184,11 @@ new Chart(document.getElementById("all_stats"),{ }, "options":{}}); + {% endblock content %} diff --git a/adm/views.py b/adm/views.py index 507dfe8..27474d2 100644 --- a/adm/views.py +++ b/adm/views.py @@ -9,15 +9,15 @@ 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 +import csv, os from auditlog.models import LogEntry -from datetime import date, datetime import json from users.models import UserYearAbsenceInfo, UserTime from timemanagement.models import Workday, Absence +from recoverdir.models import * from .forms import AgencyBillForm -from datetime import date, timedelta - +from datetime import date, timedelta, datetime +from organizer.models import QuickLinks, AGContacts, AGPassword from django.core.mail import EmailMessage from django.core.mail import EmailMultiAlternatives import io as BytesIO @@ -26,6 +26,8 @@ from django.http import HttpResponse from dateutil.relativedelta import * import requests from django.template.loader import render_to_string +from cloud.models import DataFile +import math ''' Prüfung, ob angemeldeter User Mitarbeiterstatus hat. IMMER PER DISPATCH EINBAUEN! ''' @@ -426,9 +428,80 @@ class AdmUserSingle(TemplateView): # 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())) + today = date.today() + ''' + + = models.FloatField(default=0.0) + logins = models.IntegerField(default=0) + ''' + # AGENCYS + agencycount = len(Agency.objects.all()) + # USERS + usercount = len(User.objects.all().exclude(is_staff=True, is_superuser=True)) + # STANDARDS + standardcount = len(Standards.objects.all()) + # CHATMESSAGES + chatmesscount = len(ChatMessage.objects.all()) + # ABOCOUNT + abocount = len(Agency.objects.filter(paymentplan=1)) + # ABSENCE OBJECTS + absenceobjects = len(Absence.objects.all()) + # USER WITH TIMEMANAGEMENT + user_active_timemanagement = len(User.objects.filter(usertime__usetime=True)) + # ORGANIZEROBJECTS + organizerobjects = len(QuickLinks.objects.all()) + len(AGContacts.objects.all()) + len(AGPassword.objects.all()) + # AGENCY WITH RECOVERPASS + agency_activerecover = 0 + agency_activerecover_all = RecoverDirSetting.objects.all() + for re in agency_activerecover_all: + if len(re.logpass) > 0: + agency_activerecover += 1 + + + # FILES + files_data = DataFile.objects.all() + allfiles = len(files_data) + # FILE SOTRAGE + allfiles_storage = 0.0 + for f in files_data: + allfiles_storage += os.stat(f.file.path).st_size + + # LOGINS YESTERDAY + yesterday = today - timedelta(days=1) + logins = 0 + for u in User.objects.all(): + try: + logdata = list(LogEntry.objects.filter(object_pk=u.pk)[:1])[0] + datestring = json.loads(logdata.changes)["last_login"][1] + datestring = datestring.split(".")[0] + logdate = datetime.strptime(datestring, '%Y-%m-%d %H:%M:%S') + logdate = logdate.date() + if logdate == yesterday: + logins += 1 + except: + pass + + # RECOVEROBJECTS + agency_recoverobjects = len(PersLetter.objects.all()) + len(Handlungsleitfaden.objects.all()) + len(RDContact.objects.all()) + len(RDTrustPerson.objects.all()) + len(Documents.objects.all()) + len(HandlungsleitfadenVF.objects.all()) + len(DepositVollmacht.objects.all()) + len(ErgoVerDir.objects.all()) + len(OnlineBank.objects.all()) + len(StreamingAbo.objects.all()) + len(DigitalAccounts.objects.all()) + len(Personal.objects.all()) + len(RDContract.objects.all()) + len(RDElse.objects.all()) + + # COUNT INVOICES WHEN FIRST DAY OF MONTH + lastmonth = today - timedelta(days=today.day) + + #if today.day == 1: + if today.day == 28: + for bill in AgencyBills.objects.filter(billdate__month=lastmonth.month): + pass + # TASK: Hier den Rechungsbeitrag abfragen und aufaddieren, dazu bitte einmal Rechnungen aus der Prod abfragen ;) + + + + + + + newMainS = MainStatistic(agencys=agencycount,users=usercount,standards=standardcount,chatmessages=chatmesscount, active_abos=abocount, absenceobjects=absenceobjects, user_active_timemanagement=user_active_timemanagement, organizerobjects=organizerobjects, agency_recoverobjects=agency_recoverobjects, allfiles=allfiles, allfiles_storage=allfiles_storage, logins=logins) newMainS.save() data.update({"status" : "success"}) else: @@ -440,6 +513,15 @@ def statisticCronJob(request, code): +def convert_size(size_bytes): + if size_bytes == 0: + return "0B" + size_name = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") + i = int(math.floor(math.log(size_bytes, 1024))) + p = math.pow(1024, i) + s = round(size_bytes / p, 2) + return "%s %s" % (s, size_name[i]) +