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

View File

@ -1,6 +1,7 @@
{% extends "adm/adm_base.html" %}
{% block content %}
{% load adm_tags %}
{% load mathfilters %}
<div class="content-section col-12">
{% if statistik|length > 0 %}
{% getlaststat as statistik_last %}
@ -28,10 +29,6 @@
<td>Standards</td>
<td>{{standardcount}}</td>
</tr>
<tr>
<td>Chatnachrichten</td>
<td>{{chatmessagescount}}</td>
</tr>
</table>
<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>
@ -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":{}});
</script>
<!--
logins = models.IntegerField(default=0)
-->
{% endblock content %}

View File

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