From 80b3542a875574c52da59a5f5ac8d8d41bd14fd9 Mon Sep 17 00:00:00 2001 From: Holger Trampe Date: Fri, 22 Oct 2021 18:17:47 +0200 Subject: [PATCH] quotawahnsinn --- .../templates/dasettings/groups_content.html | 5 +- .../templates/dasettings/moduls_content.html | 43 ++++--- .../dasettings/moduls_content_SAVE.html | 37 +++--- .../dasettings/notifications_content.html | 4 +- .../templates/dasettings/quota_content.html | 106 ++++++++++++++++++ dasettings/templates/dasettings/settings.html | 35 ++++-- dasettings/views.py | 69 ++++++++++++ .../__pycache__/counter_tag.cpython-38.pyc | Bin 27113 -> 28666 bytes standards/templatetags/counter_tag.py | 39 +++++++ users/models.py | 7 ++ 10 files changed, 292 insertions(+), 53 deletions(-) create mode 100644 dasettings/templates/dasettings/quota_content.html diff --git a/dasettings/templates/dasettings/groups_content.html b/dasettings/templates/dasettings/groups_content.html index cd24382..2b69b6c 100644 --- a/dasettings/templates/dasettings/groups_content.html +++ b/dasettings/templates/dasettings/groups_content.html @@ -102,9 +102,9 @@ {% endif %} {% endfor %} {% endfor %} - + - + @@ -124,6 +124,7 @@ + {% for aggroup in agencygroups %} {% for p in aggroup.group.permissions.all %} diff --git a/dasettings/templates/dasettings/moduls_content.html b/dasettings/templates/dasettings/moduls_content.html index ecc9803..91df90a 100644 --- a/dasettings/templates/dasettings/moduls_content.html +++ b/dasettings/templates/dasettings/moduls_content.html @@ -1,6 +1,5 @@ {% load crispy_forms_tags %} -
-
+
@@ -13,26 +12,27 @@ {% csrf_token %} -{% for formfield in modulform %} + {% for formfield in modulform %} {% if formfield.name == 'module_organigramm' or formfield.name == 'module_timemanagement' %} - - - - + + + + {% endif %} -{% endfor %} + {% endfor %} +
{{formfield.label_tag}} - {% if formfield.name == 'module_organigramm' and user.profile.agency.module_organigramm %} - - {% elif formfield.name == 'module_timemanagement' and user.profile.agency.module_timemanagement %} - - {% endif %} -
{{formfield.label_tag}} + {% if formfield.name == 'module_organigramm' and user.profile.agency.module_organigramm %} + + {% elif formfield.name == 'module_timemanagement' and user.profile.agency.module_timemanagement %} + + {% endif %} +
- -
+ {% for formfield in modulform %} +
- {% endfor %} + diff --git a/dasettings/templates/dasettings/moduls_content_SAVE.html b/dasettings/templates/dasettings/moduls_content_SAVE.html index e016555..ca72b21 100644 --- a/dasettings/templates/dasettings/moduls_content_SAVE.html +++ b/dasettings/templates/dasettings/moduls_content_SAVE.html @@ -1,10 +1,10 @@ {% load crispy_forms_tags %} -
+ +
- @@ -13,23 +13,24 @@ {% csrf_token %} -{% for formfield in modulform %} - - - - - -{% endfor %} + {% for formfield in modulform %} + {% if formfield.name == 'module_organigramm' or formfield.name == 'module_timemanagement' %} + + + + + {% endif %} + {% endfor %} +
ModulAktiviert Einstellungen
{{formfield.label_tag}}{{formfield}} - {% if formfield.name == 'module_organigramm' and user.profile.agency.module_organigramm %} - - {% elif formfield.name == 'module_timemanagement' and user.profile.agency.module_timemanagement %} - - {% endif %} -
{{formfield.label_tag}} + {% if formfield.name == 'module_organigramm' and user.profile.agency.module_organigramm %} + + {% elif formfield.name == 'module_timemanagement' and user.profile.agency.module_timemanagement %} + + {% endif %} +
- - +
{% for formfield in modulform %} @@ -79,4 +80,6 @@
+ + {% endfor %} diff --git a/dasettings/templates/dasettings/notifications_content.html b/dasettings/templates/dasettings/notifications_content.html index 27542cb..dac3694 100644 --- a/dasettings/templates/dasettings/notifications_content.html +++ b/dasettings/templates/dasettings/notifications_content.html @@ -393,13 +393,13 @@ type: "GET", url: "/dasettings/ajax", data:{ - action : "update_notifications", + //action : "update_notifications", + action : "", fieldname : ele, new_stat : new_stat }, success: function( data ) { - console.log(data); if(data['success']){ $('#notchange_done').toast('show'); } diff --git a/dasettings/templates/dasettings/quota_content.html b/dasettings/templates/dasettings/quota_content.html new file mode 100644 index 0000000..d006350 --- /dev/null +++ b/dasettings/templates/dasettings/quota_content.html @@ -0,0 +1,106 @@ +{% load counter_tag %} +{% getAGGroupQuotaData request as agquota %} + +
+
+
+     {{agquota.1|filesizeformat}} / {{agquota.0|filesizeformat}} +
+Sie können mehr Speicherplatz für die Agentur dazubuchen und anschließend jedem Mitarbeiter ein bestimmtes Speicherkontingent zuweisen. Der Speicherplatz wird dann vom Agenturspeicher abgezogen. +

+ + + + + + + + + + +{% for item in usersofagency %} + + + + + + + {% endfor %} + +
VornameNachnameSpeicherplatzKontingent in MB
{{item.first_name }}{{ item.last_name }} + {% getUserQuotaData item as userquotadata %} +
+
+
+     {{userquotadata.0|filesizeformat }} (davon {{userquotadata.1|filesizeformat }}) +
+
+ {% if request.user.profile.agency.agencypackage > 0 %} + + {% endif %} +
+ +
+
+   +
+ + + diff --git a/dasettings/templates/dasettings/settings.html b/dasettings/templates/dasettings/settings.html index 30852d9..ad65648 100644 --- a/dasettings/templates/dasettings/settings.html +++ b/dasettings/templates/dasettings/settings.html @@ -55,6 +55,11 @@  Abrechnung {% endif %} + {% if user|usergperm:"agencyinfo" %} + + {% endif %} {% if user|usergperm:"agencynetwork" %} {% endif %} @@ -93,6 +98,16 @@ endblock --> + + {% if user|usergperm:"modulesconfig" %} +
+
Module{% if request.user.profile.showtooltips %} {% endif %}
+ {% block moduls_content %} + {% include "dasettings/moduls_content.html" %} + {% endblock %} +
+ {% endif %} +
Benachrichtigungen{% if request.user.profile.showtooltips %} {% endif %}
@@ -120,6 +135,15 @@ {% endblock %}
{% endif %} + {% if user|usergperm:"agencyinfo" %} +
+
Speicherplatz{% if request.user.profile.showtooltips %} {% endif %}
+
+ {% block quota_content %} + {% include "dasettings/quota_content.html" %} + {% endblock %} +
+ {% endif %} {% if user|usergperm:"agencynetwork" %}
Agenturverbünde{% if request.user.profile.showtooltips %} {% endif %} @@ -163,14 +187,6 @@ {% include "dasettings/groups_content.html" %} {% endblock %}
- {% endif %} - {% if user|usergperm:"modulesconfig" %} -
-
Module{% if request.user.profile.showtooltips %} {% endif %}
- {% block moduls_content %} - {% include "dasettings/moduls_content.html" %} - {% endblock %} -
{% endif %} @@ -179,6 +195,7 @@ var defaultsettingsview = "notifications"; /* COOKIE FOR SAVING OPEN TAB */ $(document).ready(function(){ + $(".toast").hide(); $(".toast").toast({ autohide: true, diff --git a/dasettings/views.py b/dasettings/views.py index 8987cb2..8b4924b 100644 --- a/dasettings/views.py +++ b/dasettings/views.py @@ -624,6 +624,75 @@ def SettingsAjaxRouter(request): setattr(request.user.usernotifications, request.GET['fieldname'], False) request.user.usernotifications.save() success = True + + + + + + # QUOTA + elif request.method == 'GET' and request.GET['action'] == "quotaag_update" : + success = False + quotavalues = request.GET['quotavalues'] + + quotavalues_array = quotavalues.split("_SEPERATOR_") + + newsumquota = 0 + + for newquotavalue in quotavalues_array: + ele = newquotavalue.split("__") + + if("user" in ele[0]): + newsumquota += int(ele[1]) + + # CONVERTING MAX MB TO BYTES + newsumquota = newsumquota*1024 + newsumquota = newsumquota*1024 + + # GETTING POSSIBLE BYTES FROM AGENCY + r = requests.request("PROPFIND", settings.NEXTCLOUD_URL + "remote.php/dav/files/" + request.user.username + "/Agenturdaten", headers={'Content-Type' : 'text/xml', 'Authorization' : "Bearer " + request.user.profile.nc_sid}) + + split_response = r.text.split("") + inuse = split_response[1].split("")[0] + + # QUOTA + split_response = r.text.split("") + quota = split_response[1].split("")[0] + + # TODO: Hier wird ja jedesmal die Agenturquota reduziert, dass ist natürlich doof! + + # Check if needed Quota is bigger than inuse + newagencyquota = int(quota) - int(newsumquota) + if( newagencyquota > int(inuse) ): + for newquotavalue in quotavalues_array: + ele = newquotavalue.split("__") + if("user" in ele[0]): + userid = ele[0].split("_")[1] + userquota = int(ele[1])*1024 + userquota = userquota*1024 + headers = { + 'Accept' : 'application/json', + 'Access-Control-Allow-Headers' : 'OCS-APIRequest', + 'OCS-APIRequest' : 'true' + } + data_nc = { + "key" : "quota", + "value" : userquota + } + r = requests.put(settings.NEXTCLOUD_URL + "/ocs/v1.php/cloud/users/" + User.objects.get(pk=userid).username,headers=headers, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API), data=data_nc) + + # Updating the AgencyQuota + data = { + "quota" : newagencyquota, + "user" : request.user.username + } + + r = requests.post(settings.NEXTCLOUD_URL + "ocs/v2.php/apps/da_agency/api/v1/updategfquota?format=json", auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API), data=data) + + ag = request.user.profile.agency + ag.agencyquota = newagencyquota + ag.save() + success = True + # UPDATE TOOLTUP elif request.method == 'GET' and request.GET['action'] == "change_showtooltips" : newtooltipvalue = False diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index c62ecafdc2b4d882fa40b7014eda1efa2161e50c..252a0f6b87b99d5a5a9d4b57e2618dd89b430a24 100644 GIT binary patch delta 2886 zcma)8eN0@(5r4Dy1;-r*4#J1eA0()7HRfVls!ej?BOG8G%!e@vK4X!`?E?-S+_Cqt z)yt7H#<5hTc1t!NPMRiQM@rqab=q_4wvrpFs*&$n$5|NPW`&-t5fI?7ZFI&b|--05|>u#lv2&Tf^t24}|W0YPr}C@BMVg6~}I4+w{Hs zI{)<!?DSjsmG1>N$kywAYbq6`F<|y8s80<<=f4D@TpvJmCL{b zzlED}v7ubTgP$=5Quq4g$9oE8MQD;0+$dhJ#kcMVq~;INpAYvp5IdyBS_db^4vFLnuN%vE&T02*ZV{y)NA`N{rwQC>UH3Hzk; zpbihpse>1wRYFfn{;g-Le7dIw+T^C*D*3yfEzp7ba`~RSQt5U9fu`)0;l8i=`cMqmR8kT9%*m7~2Gr7ix33n4aqt%T`@a3bUUK*s zC60n7J|Z}b;-vdemy!>;|J^D+7Y8GB^@m|ZdHe@0cpE!NDDN{hT$cs%l&A$6<{v+(IfQ$ zv$A}o&Ra)8hB3Q>^Yi{dm~%%?RUFk(UcyK2gT#^zek(d z6KcfM$G$GJk$WH`pNsUe#dTe?H;Zut4&kHk&d9D~L$D-YJa#Hb%Ypg|(qAFyMup`_ zirB0vLV08ThVi64FgnVf%v1SSqhoM3S93hc;D&r^>=0z-pU2L_^K$C3SKy-BOTWGy zE~xz-*8Olv3jMO&K7L>JJO&oa1kVr<2gS1_VbeqSJbH7@0yle<7xI9$eWG+?8`WvsZ9e1lTF(=tJE^uw0+u9sc{=NJ9ntQ zbJ~SH=Sz&c&e;|q1Jea7g}h)D7FdSy!fFkB?p5GL)!Kq>-Rk**)w^!B^J3GTu`j`9 z4c}SY5|nETj*LBHGmA`5#=(o0*b=OG`6gbn$|h}CMoaswf`P;R16>FD!s!YuJqgoj zN=_w%Tt5+yV_R74dw zwXt_0SH2(;9W94Q%+GSmC5&WTj~an>+TA8w3r=P^)YnfRZChnidv`ZFCI{)G z!@8+|->zw?VhpIU-8K)DsaDR!PtY5S{y6KBu>tZnJ2`gUyS~@lsX zzRDIH=BB(kqBu^CY3aI2!=&GbjV){n#S>9Io@znimJ2dl z?R-l^(~j0aD46d=G2e}cq4d?sWxtf2_!)ZVlT{gSL4R=-b#Hzly|NG;rCakVS)G{} zO(s4jCpre=GJ!e>zPlZSte`VsmGyOw9O>xo9}bTV4|N_M!*#YwZtDgfRT?G?%Qb<& zA9x+*D>3~zSoRs+oU$Af@kBycws>OFvLzEI#Sdv_PKmruk}BE-Rsn4=)(TzK>xjQl zEtyiNlLRpflHwG({h039T_tz!!yB{?B{)E1jjRf)SPghsnayt(YdBBfOs>snWP_hl zgqsA6W_J)25EK&l2r3BZuS=-Eo<@@P60{Pu6Ff}NK@gVLC;i!jBn}b`6O0fXC5RA= z63h{#2^I*RAXp?=B6yPEEP~~k7x8#(yeX**T#@gQ{vyF8f>#M%BcK8yt`YnaG@B;Y Z)HORcRSc(dvr~_Q+wHf5yR-!C@IT(=;a&g$ delta 1514 zcmb7^T})eL7{~h@;85Ci#!)Cjnd2kCp|}H%4CS+Y*a?NU1S+Lq*lBxYjir>AGB=n& zwz10*dE9558!TQdSq95d*^Ti+O?Kgh#>FL#iN*^*;>9 z`@HY_yyrZpTi?RZU%_s_#bPq>>w2TAbS%BK+YTGI9qU;t3L z+;Rp)6S-#XZfh-wd$@cHdbgKTuZ?2@E=yl z4JjWN9EIkuDGm^du-)}SiJfw3d!`psL7~b+$--oE_u*w%gLyC6&k{=T8y5qI<~@`F zP>BOC--Cl#)%_*cTiq`~13G&YXvDRii$W`4ov{XwxLra!;A*`cKX(@jZGf`bhJU+@ zg${D7x1EjAOjLXGpcChM--m9j?Ms0VA9#wf%HtC&X>&Kudn$7KxRf&V@`9NYZ%ikd z7dJiiFvyct*-eSRQ0ZJ4*aJd8m*b}U*Ap$KM{Vqh`F!T0w+n{!ZNB%mgCEO%C8C$s zcm>@)Cw}UE8l8O>yy1J%+(S0aW*+?2*9gPBMk_Y=UlK>S8Rn;Xsz7_xFK0jvmib%Z zISlzvL7Dc0zYQRvRSZ=EOrR%FZYiTh{Jb>D#9X)#sDmcF9rzHA>s@xsl7mablW^jR z$d3DiIl?U9$HO-C1xxUc;k~#Vbiy2d5$uJRE=Q_-$Y|4#}ME!?($ekgE{RQK%p2JShix7f4+s=nX8UlinfY3gIuj*h8=qN(uVc>>zcJ&`NL;+6f(mPTZKV zFLaai5e5lEgaBcfK;6v}gyV!0gf|I`gp-8R1Zs)Yt{E1KMML`&3giF7m&m_HSS73x U=r}u1Km7{E;(2gPn~BfCKQWVlasU7T diff --git a/standards/templatetags/counter_tag.py b/standards/templatetags/counter_tag.py index 54ddcda..bb7ac13 100644 --- a/standards/templatetags/counter_tag.py +++ b/standards/templatetags/counter_tag.py @@ -1177,3 +1177,42 @@ def getNCDirInfosURL(request, ncid): return "" +# QUOTA +@register.simple_tag +def getAGGroupQuotaData(request): + r = requests.request("PROPFIND", settings.NEXTCLOUD_URL + "remote.php/dav/files/" + request.user.username + "/Agenturdaten", headers={'Content-Type' : 'text/xml', 'Authorization' : "Bearer " + request.user.profile.nc_sid}) + + # IN USE + split_response = r.text.split("") + inuse = split_response[1].split("")[0] + + # QUOTA + split_response = r.text.split("") + quota = split_response[1].split("")[0] + + # PERCENT VALUE + percent = (100 / int(quota))*int(inuse) + + return [quota, inuse, str(round(percent, 0)).replace(",", ".")] + +# User QUOTA +import re, math +@register.simple_tag +def getUserQuotaData(userdata): + r = requests.request("GET", settings.NEXTCLOUD_URL + "/ocs/v1.php/cloud/users/" + userdata.username, auth=(settings.NEXTCLOUD_USER_API, settings.NEXTCLOUD_PW_API), headers={'Content-Type' : 'text/xml', 'OCS-APIRequest': "true"}) + + quotadata = [int(s) for s in re.findall('(.+?)', r.text)] + inuse = [int(s) for s in re.findall('(.+?)', r.text)] + + i = int(math.floor(math.log(quotadata[0], 1024))) + p = math.pow(1024, i) + # s for textlabel + s = round(quotadata[0] / p, 2) + + # PERCENT + percent = (100 / int(quotadata[0]))*int(inuse[0]) + + # TODO: Hier werden GB nicht korrekt umgerechnet in MB + + return [quotadata[0], inuse[0], str(round(percent, 0)).replace(",", "."), str(s).split(".")[0]] + diff --git a/users/models.py b/users/models.py index 5ee1d66..d608394 100644 --- a/users/models.py +++ b/users/models.py @@ -145,6 +145,11 @@ class Agency(models.Model): # RECOVERDIR module_recoverdir = models.BooleanField(default=False) + # QUOTA + agencyquota = models.BigIntegerField(default=2146274449) + agencypackage = models.IntegerField(default=0) + + def __str__(self): return f'{self.name}' @@ -260,6 +265,8 @@ class Profile(models.Model): user_messages_mail = models.BooleanField(default=True) user_messages_push = models.BooleanField(default=True) + userquota = models.BigIntegerField(default=104857600) + # ONLINESTATUS '''