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])
+