From 6fcdbce2aa4881be78e7dcee322d9c10883472f1 Mon Sep 17 00:00:00 2001 From: "holger.trampe" Date: Fri, 19 Feb 2021 12:01:09 +0100 Subject: [PATCH] CHUNKS --- adm/models.py | 1 + adm/templates/adm/adm_main.html | 14 ++++ .../__pycache__/adm_tags.cpython-38.pyc | Bin 2313 -> 2647 bytes adm/templatetags/adm_tags.py | 19 ++++++ adm/views.py | 14 +++- dasettings/forms.py | 2 +- .../__pycache__/settings.cpython-38.pyc | Bin 4787 -> 4787 bytes dump.rdb | Bin 4777 -> 154667 bytes .../templates/standards/standards_add.html | 8 ++- .../standards/standards_management.html | 4 +- .../__pycache__/counter_tag.cpython-38.pyc | Bin 23551 -> 24784 bytes standards/templatetags/counter_tag.py | 64 +++++++++++++++--- timemanagement/models.py | 2 + .../timemanagement_management.html | 7 +- .../timemanagement_singleview.html | 3 +- .../timemanagement_teamview_single.html | 8 +-- .../timemanagement/tm_ab_update.html | 19 +++++- timemanagement/views.py | 9 ++- users/models.py | 4 +- users/templates/users/base.html | 18 ++++- 20 files changed, 162 insertions(+), 34 deletions(-) diff --git a/adm/models.py b/adm/models.py index 9e1c91a..bdbb16b 100644 --- a/adm/models.py +++ b/adm/models.py @@ -17,6 +17,7 @@ class MainStatistic(models.Model): allfiles = models.IntegerField(default=0) allfiles_storage = models.FloatField(default=0.0) logins = models.IntegerField(default=0) + mrr = models.FloatField(default=0.0) class MainSalesMonth(models.Model): salesmonthdate = models.DateField(default=timezone.now) diff --git a/adm/templates/adm/adm_main.html b/adm/templates/adm/adm_main.html index 0ecd479..04ce1a4 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 humanize %} {% load mathfilters %}
{% if statistik|length > 0 %} @@ -15,6 +16,9 @@

+{% getMRR as finalmrr %} +
MRR: {{finalmrr|floatformat:2|intcomma}} €
+
Monatliche Umsätze
@@ -99,6 +103,16 @@ new Chart(document.getElementById("all_stats"),{ "borderColor":"#FA746A", "lineTension":0.1 }, + {"label":"MRR", + "data":[ + {% for ele in statistik %} + {{ele.mrr|stringformat:".2f"}}, + {% endfor %} + ], + "fill":false, + "borderColor":"#FA746A", + "lineTension":0.1 + }, {"label":"Chatnachrichten", "data":[ {% for ele in statistik %} diff --git a/adm/templatetags/__pycache__/adm_tags.cpython-38.pyc b/adm/templatetags/__pycache__/adm_tags.cpython-38.pyc index 998ecd81f9b19492dacb27acea7d6f2d1e7d9ca8..2f3a5eeab8d14914d72029534a5ed1fa264199e6 100644 GIT binary patch delta 709 zcmZ9KL2DC16vyZ7&hDmZ60xjJsL@7DW7ZTEq$*e}rGj3}AzDO1(oJR?6F1ppcB2+{ z>7l)N@KEONJx9qG@ZdL45a#Z|Z{eFrY3#uK_Pw|NH*a`vJ}v#SbGzAWn&5hMe0y(u z;Urgt^{=%nV0)$Bb+*j%$K(iJJIs1coWisYBY=tcrqy9pT+rVe*D$kva?uuF^e5%Z z=t$l5eVGb4^LVp$z*jLghmu&JMJS63?XLWjcf5$Nofl2016A>ZK726&xj1wW`raTK z`tHD?d_{>(1$6)~{+~OmSHhUg_<_r|Tft5+9z^RH2{i=Kcx~D;asXGw$ZWt3@!c%J z9r4?Iuy}UYlBimnhg&FbtDMuNs#4rLxWjz}gM>t+2R)5xO#ciCM0yNIz^F|U4gaF| zn7p}_(1OO21K00!F0(isx6}O4jo!MgKvF~~bKb{@yW`N~ZPhBN zxgBYtyTzMsXMT2gnly1<&l-(7+M$ggI)xl$fI@2aU4o3ppJLp(Iqg{mc)5W#zl)IR wu-hN{UNgc|)w|(kg{neLLA869I#=^-oT<%zz{bA!NHrq7Cw`_jXu3$@FOTPw{r~^~ delta 419 zcmcaE(ka9j%FD~e00f`j2_;mqPvnzfl-sB+%gC0(9?YOAwmF8ekdaYy@;N3yM!Ctd z%w>!UlOM8(OkTn4?I;D*b&EMMC+8MNeo;zlQG8NmksMGAiI4{=;Z9F2$w@3ODK1GY zQ2+`QGXV((rXuCZCM=m!5L19kid2B2$a*JlXVGL-2U=$xqRDuRyCAVLH#M)MASW?T zlch)!q?ipvfD9;-M%4>;2H0|*oczQT$E1Ac{L;J<9iS?h?V6hlSos(kWhd9O1u3Zk zC2q0iq*i3604bo3;#({wsTC!f?6+8wGIMf@^d^61v*1SfPJXf(yA7KyP@AUa=JgyB zj6udA7Z`%f;VRC|EyziYFG)-PO2RvP(`uP IWH~NV08*D<*#H0l diff --git a/adm/templatetags/adm_tags.py b/adm/templatetags/adm_tags.py index 785c7ca..25bc2b8 100644 --- a/adm/templatetags/adm_tags.py +++ b/adm/templatetags/adm_tags.py @@ -70,6 +70,25 @@ def loadBillValue(bill): return returnvalue +''' + + Hier wird der aktuelle Umsatz berechnet anhand Abos und Mitarbeiterzahlen + +''' +@register.simple_tag +def getMRR(): + # Berechnung das MRR + finalmrr = 0 + allag_withabo = Agency.objects.filter(paymentplan=1) + abos = len(allag_withabo) * 21 + extrausercount = 0 + for ag in allag_withabo: + user_ag = User.objects.filter(profile__agency=ag) + if len(user_ag) > 3: + extrausercount += len(user_ag) - 3 + finalmrr = abos + 3*extrausercount + + return finalmrr diff --git a/adm/views.py b/adm/views.py index c8218ca..11ff67d 100644 --- a/adm/views.py +++ b/adm/views.py @@ -503,7 +503,19 @@ def statisticCronJob(request, code): nm = MainSalesMonth(value=monthvalue, salesmonthdate=lastmonth) nm.save() - 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) + + # Monatlicher MRR + finalrma = 0 + allag_withabo = Agency.objects.filter(paymentplan=1) + abos = len(allag_withabo) * 21 + extrausercount = 0 + for ag in allag_withabo: + user_ag = User.objects.filter(profile__agency=ag) + if len(user_ag) > 3: + extrausercount += len(user_ag) - 3 + finalmrr = abos + 3*extrausercount + + 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, mrr=finalmrr) newMainS.save() data.update({"status" : "success"}) else: diff --git a/dasettings/forms.py b/dasettings/forms.py index 688d3e4..2f47f1c 100644 --- a/dasettings/forms.py +++ b/dasettings/forms.py @@ -22,7 +22,7 @@ class AgencyNetworkForm(forms.ModelForm): fields = ['name', 'publicjoin'] labels = { - "name" : "Name des Agentuverbunds", + "name" : "Name des Agenturverbunds", "publicjoin" : "Beitritt ohne Bestätigung" } diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index ca650f76cf42e3e7614de3d776fb31157491ab5c..26b51116c85dd87e68207103ee214042b6b48c81 100644 GIT binary patch delta 20 acmdn2x>=Pwl$V!_0SLNU^fz*^5CQ-*Yy{{4 delta 20 acmdn2x>=Pwl$V!_0SGwnXl>+PAp`(1+yuG+ diff --git a/dump.rdb b/dump.rdb index a6311c9268d3f8426ee569c0ecc533d0700d0ab3..c6603629f9b92ae6f4537c69eeec074ad8d86ba3 100644 GIT binary patch literal 154667 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

O|J=o^iW}Khdq(ZQEXP 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

^4U`zm_9MCuH787RJJ-=_w$+2bPznC0F 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 diff --git a/standards/templates/standards/standards_add.html b/standards/templates/standards/standards_add.html index 306d3dc..96991a3 100644 --- a/standards/templates/standards/standards_add.html +++ b/standards/templates/standards/standards_add.html @@ -243,10 +243,12 @@ -

Wenn ein Standard erstellt/bearbeitet wurde, kann er nur von einer Person mit dem Recht Standards bearbeiten und freischalten veröffentlicht werden.

+ + {% if perms.users.standardgopublic %} +

{{ normalForm.public }} Veröffentlichen

+ {% else %} +

Wenn ein Standard erstellt/bearbeitet wurde, kann er nur von einer Person mit dem Recht Standards freischalten veröffentlicht werden.

- {% if perms.users.standardmanager %} - {{ normalForm.public }} Veröffentlichen {% endif %}
diff --git a/standards/templates/standards/standards_management.html b/standards/templates/standards/standards_management.html index b00fb7e..1b98504 100644 --- a/standards/templates/standards/standards_management.html +++ b/standards/templates/standards/standards_management.html @@ -137,7 +137,7 @@
diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index a57cd5dd2e7d3934b164d84a10a71862d8242c45..40e7208aa2ca2b1563c5a92a00b4e725df7fb109 100644 GIT binary patch delta 6796 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 diff --git a/standards/templatetags/counter_tag.py b/standards/templatetags/counter_tag.py index dea2901..2d3af8f 100644 --- a/standards/templatetags/counter_tag.py +++ b/standards/templatetags/counter_tag.py @@ -64,11 +64,25 @@ def getbool(): global groupbool return groupbool - +# Zähler ungelesener Nachrichten @register.simple_tag def getmesscounter(user): return len(Message.objects.filter(target_user=user)) +# Zähler unveröffentlichter Standards +@register.simple_tag +def getUnpubStandards(user): + unpubstandards = 0 + if user.has_perm("users.standardgopublic"): + unpubstandards = len(Standards.objects.filter(agency=user.profile.agency, public=False)) + + return unpubstandards + +@register.simple_tag +def getAbsenceAsks(user): + unconfirmedab = len(Absence.objects.filter(agency=user.profile.agency, confirm_status=1)) + return unconfirmedab + # WORKDAY HISTORY # TASK: Hier flag prüfen, ob der User selbst den Tag bearbeitet hat - aktuell werden nur fremde Änderugnen angezeigt @register.simple_tag @@ -291,6 +305,16 @@ def getifuserdidcomment(standard, user): return didcomment +''' + + Hier wird der dynamische Steckbrief generiert. Es wird geprüft, ob Nutzer in Standards verlinkt sind bzw. in Gruppen + + +representative_group = models.ManyToManyField(AgencyGroup, blank=True, related_name="group_rep") +executor_group = models.ManyToManyField(AgencyGroup, blank=True, related_name="group_ex") +authority_group = models.ManyToManyField(AgencyGroup, blank=True, related_name="group_aut") + +''' @register.simple_tag def isUserInAuth(task, area, user_id): @@ -300,10 +324,19 @@ def isUserInAuth(task, area, user_id): #st_auth = Standards.objects.filter(agency=user.profile.agency, task=task, area=area) st_auth = Standards.objects.filter(agency=user.profile.agency, task=task, area=area, authority__in=[user]) found = False - + user_to_check = User.objects.get(pk=user_id) if len(st_auth) > 0: found = True + # Wenn der User noch nicht gefunden wurde, werden die Gruppen der Standards durchgearbeitet + if found == False: + standards_to_check = Standards.objects.filter(agency=user.profile.agency, task=task, area=area) + for s in standards_to_check: + for group in s.authority_group.all(): + if user.groups.filter(name = group.group.name).exists(): + found = True + + return found @register.simple_tag @@ -320,6 +353,14 @@ def isUserInEx(task, area, user_id): if len(st_auth) > 0: found = True + # Wenn der User noch nicht gefunden wurde, werden die Gruppen der Standards durchgearbeitet + if found == False: + standards_to_check = Standards.objects.filter(agency=user.profile.agency, task=task, area=area) + for s in standards_to_check: + for group in s.executor_group.all(): + if user.groups.filter(name = group.group.name).exists(): + found = True + return found @@ -335,6 +376,14 @@ def isUserInRep(task, area, user_id): if len(st_auth) > 0: found = True + # Wenn der User noch nicht gefunden wurde, werden die Gruppen der Standards durchgearbeitet + if found == False: + standards_to_check = Standards.objects.filter(agency=user.profile.agency, task=task, area=area) + for s in standards_to_check: + for group in s.representative_group.all(): + if user.groups.filter(name = group.group.name).exists(): + found = True + return found # REALTIME @@ -1051,13 +1100,8 @@ def getTrialDays(agency): return finaldays - - - - - - - - +@register.simple_tag +def getAbsenceLastHistory(absence): + return absence.history.first() diff --git a/timemanagement/models.py b/timemanagement/models.py index 0a85135..8abc698 100644 --- a/timemanagement/models.py +++ b/timemanagement/models.py @@ -16,6 +16,8 @@ class Workday(models.Model): end = models.DateTimeField(default=None, null=True, blank=True) target = models.FloatField(default=8.0) freefield = models.TextField(max_length=10000, default="", blank=True) + lastManualChangeUser = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True, default=None, related_name="manuelChangeUser") + lastManualChangeDate = models.DateTimeField(default=None, null=True, blank=True) history = HistoricalRecords() class Breaks(models.Model): diff --git a/timemanagement/templates/timemanagement/timemanagement_management.html b/timemanagement/templates/timemanagement/timemanagement_management.html index cf23714..ac9f13e 100644 --- a/timemanagement/templates/timemanagement/timemanagement_management.html +++ b/timemanagement/templates/timemanagement/timemanagement_management.html @@ -9,7 +9,7 @@
-{% if user|usergperm:"absencemanager" %} +{% if user|usergperm:"timemanager" %}
+
Begründung
-

{{absence.info}}

+

{% if absence.info|length > 0 %} + {{absence.info}} + {% else %} + Keine Begründung + {% endif %}


An- oder Ablehnung
-

{{absence.confirm_info}}

+

{% if absence.confirm_info|length > 0 %} + {{absence.confirm_info}} + {% else %} + Kein Hinweis + {% endif %} +

+
+ {% getAbsenceLastHistory absence as ab_history %} + {% if ab_history != None %} + Zuletzt geändert am {{ab_history.history_date|date:"d.m.Y, H:i"}} von {{ab_history.history_user.get_full_name}} + {% endif %}
diff --git a/timemanagement/views.py b/timemanagement/views.py index 6331e93..e780909 100644 --- a/timemanagement/views.py +++ b/timemanagement/views.py @@ -288,7 +288,7 @@ def AbsenceManagmenet(request, activemonth=False, activeyear=False): @login_required def TimeManagementTeamSingle(request, pk, activemonth=False, activeyear=False): - if(request.user.has_perm("users.usermanager")): + if(request.user.has_perm("users.timemanager")): # Setzt die Monatsausgabe auf Deutsch locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8') user = User.objects.get(pk=pk) @@ -403,7 +403,7 @@ def TimeManagement(request, activemonth=False, activeyear=False): "workdays" : Workday.objects.filter(agency=request.user.profile.agency, user=request.user, start__month=activemonth, start__year=active_year).order_by("start").exclude(end=None), "userhasworkdays" : user_has_workdays } - if(request.user.has_perm("users.usermanager")): + if(request.user.has_perm("users.timemanager")): context.update({"usersofagencytm" : User.objects.filter(profile__agency=request.user.profile.agency).order_by('last_name')}) return render(request, 'timemanagement/timemanagement_management.html', context) @@ -427,6 +427,11 @@ def TimeUpdate(request, pk, team=0): workday.end = end workday.freefield = form["freefield"].value() workday.target = form["target"].value() + + # Speichern, das jemand den Arbeitstag bearbeitet hat + workday.lastManualChangeUser = request.user + workday.lastManualChangeDate = datetime.datetime.now() + workday.save() messages.success(request, f'Arbeitstag aktualisiert') if(team == 1): diff --git a/users/models.py b/users/models.py index c9898b6..acd88d2 100644 --- a/users/models.py +++ b/users/models.py @@ -490,7 +490,8 @@ class AgencyGroup(models.Model): ('usermanager', 'Mitarbeiter bearbeiten'), ('groupmanager', 'Gruppen bearbeiten'), ('structuremanager', 'Struktur bearbeiten'), - ('standardmanager', 'Standards bearbeiten und freischalten'), + ('standardmanager', 'Standards bearbeiten'), + ('standardgopublic', 'Standards freischalten'), ('modulenews', 'News bearbeiten und veröffentlichen'), ('modulesconfig', 'Module verwalten'), ('moduleorganizer', 'Organizer bearbeiten'), @@ -498,6 +499,7 @@ class AgencyGroup(models.Model): ('filedirmanager', 'Ordner bearbeiten'), ('filesviewer', 'Dateien lesen'), ('absencemanager', 'Abwesenheiten verwalten'), + ('timemanager', 'Zeiterfassung verwalten'), ('recoverdirmanager', 'Notfallhilfe verwalten') ] diff --git a/users/templates/users/base.html b/users/templates/users/base.html index 3d280ab..cdb9f26 100644 --- a/users/templates/users/base.html +++ b/users/templates/users/base.html @@ -156,6 +156,8 @@ Agentur
+ + {% getUnpubStandards request.user as standardUnPubCount %} {% if active_link == 'standards' %} @@ -245,6 +250,9 @@ --> {% if request.user.profile.agency.module_timemanagement %} + + {% getAbsenceAsks request.user as ab_ask %} + {% if active_link == 'abscence' %} {% endif %}