Statistik ausgebaut nach Deck, Rechnungsberechnung vorbereitet
This commit is contained in:
parent
6f7adb924f
commit
9ae3d75fe0
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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 %}
|
||||
|
|
|
|||
92
adm/views.py
92
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])
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue