Statistik ausgebaut nach Deck, Rechnungsberechnung vorbereitet

This commit is contained in:
holger.trampe 2021-01-28 11:28:55 +01:00
parent 6f7adb924f
commit 9ae3d75fe0
3 changed files with 198 additions and 10 deletions

View File

@ -8,5 +8,17 @@ class MainStatistic(models.Model):
users = models.IntegerField(default=0) users = models.IntegerField(default=0)
standards = models.IntegerField(default=0) standards = models.IntegerField(default=0)
chatmessages = 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)

View File

@ -1,6 +1,7 @@
{% extends "adm/adm_base.html" %} {% extends "adm/adm_base.html" %}
{% block content %} {% block content %}
{% load adm_tags %} {% load adm_tags %}
{% load mathfilters %}
<div class="content-section col-12"> <div class="content-section col-12">
{% if statistik|length > 0 %} {% if statistik|length > 0 %}
{% getlaststat as statistik_last %} {% getlaststat as statistik_last %}
@ -28,10 +29,6 @@
<td>Standards</td> <td>Standards</td>
<td>{{standardcount}}</td> <td>{{standardcount}}</td>
</tr> </tr>
<tr>
<td>Chatnachrichten</td>
<td>{{chatmessagescount}}</td>
</tr>
</table> </table>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.6/Chart.bundle.min.js"></script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.6/Chart.bundle.min.js"></script>
@ -89,7 +86,97 @@ new Chart(document.getElementById("all_stats"),{
{% endfor %} {% endfor %}
], ],
"fill":false, "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 "lineTension":0.1
}, },
@ -97,4 +184,11 @@ new Chart(document.getElementById("all_stats"),{
}, },
"options":{}}); "options":{}});
</script> </script>
<!--
logins = models.IntegerField(default=0)
-->
{% endblock content %} {% endblock content %}

View File

@ -9,15 +9,15 @@ from django.contrib.auth.models import User
from chat.models import ChatMessage from chat.models import ChatMessage
from users.models import Agency, AgencyBills, RegNotfallhilfe from users.models import Agency, AgencyBills, RegNotfallhilfe
from standards.models import Standards from standards.models import Standards
import csv import csv, os
from auditlog.models import LogEntry from auditlog.models import LogEntry
from datetime import date, datetime
import json import json
from users.models import UserYearAbsenceInfo, UserTime from users.models import UserYearAbsenceInfo, UserTime
from timemanagement.models import Workday, Absence from timemanagement.models import Workday, Absence
from recoverdir.models import *
from .forms import AgencyBillForm 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 EmailMessage
from django.core.mail import EmailMultiAlternatives from django.core.mail import EmailMultiAlternatives
import io as BytesIO import io as BytesIO
@ -26,6 +26,8 @@ from django.http import HttpResponse
from dateutil.relativedelta import * from dateutil.relativedelta import *
import requests import requests
from django.template.loader import render_to_string 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! 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! # CRONJOB, um die Statistik zu füllen!
def statisticCronJob(request, code): def statisticCronJob(request, code):
data = {} data = {}
if(code == settings.CRONAPIKEY_STATSTIC): if(code == settings.CRONAPIKEY_STATSTIC):
print("STATISTIC is running...") 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() newMainS.save()
data.update({"status" : "success"}) data.update({"status" : "success"})
else: 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])