From 20bcb83c83743f18871083f5d0c754dde62ce06a Mon Sep 17 00:00:00 2001 From: jorgepastorr Date: Wed, 14 Aug 2024 13:04:26 +0200 Subject: [PATCH] musicias show_history --- .../musician/locale/ca/LC_MESSAGES/django.mo | Bin 12315 -> 12362 bytes .../musician/locale/ca/LC_MESSAGES/django.po | 4 ++ .../musician/locale/es/LC_MESSAGES/django.mo | Bin 12342 -> 12389 bytes .../musician/locale/es/LC_MESSAGES/django.po | 4 ++ .../templates/musician/dashboard.html | 28 +++++----- orchestra/contrib/musician/views.py | 48 +++++++++++++++--- 6 files changed, 64 insertions(+), 20 deletions(-) diff --git a/orchestra/contrib/musician/locale/ca/LC_MESSAGES/django.mo b/orchestra/contrib/musician/locale/ca/LC_MESSAGES/django.mo index 3ef181d931cb00a3b772f0f354bfc5d227ea5e86..f8e310e4b05847ab2921a3e0ce614e2bf7261499 100644 GIT binary patch delta 2777 zcmXxke@s3t&Qjh=8P6owD;$p)7ifF^*qnH=Xt)*k8_S! zT&)P*N{H$-TEuV?yZ0ya;0sU@rB~;*42~f8uUj`j|1bcnxE) zXpAx3GK(-C%aL1VqvLk_e#q>jFpnD@s4>6A<@h6x#hk~DS%9UOkNYtZzeN522FBuT zr+omQq&|X5#K-7#Wl}K-b1)i9!gZ#$gaZFH6_|>3sE&^~zTBcC1E_>P za_ZMmGrNcEg7HvMq7!fm29R6kc^rr9(T`22gx(#?`fJZWq(K8;K|RomN~|B1*j;4R z%s;4^d3^SkB%uB`3ANYRsQ=G)EWka~i%^MOLJj;CYP|15PQ%Zrf$yMR!)Ve~hm-JY zoQ|1zAG0vP5!YL>6vyKcEWj?*(*BA{WYDSKL#^mAYDGOfq%##7OF=g>Ps-+&iw|=puX3+--VoC(}P;6%jn0OsD2(`6}pq{dM!rk)6z_VRW-X%8NH3_ z=mYfg!MTXtHPQY6{f$cW6~8^9&8U^#i8>=kPzjz2 z*V+G1C@iGmO1Oa}()cD&Peb}L)mVmyP)pv2+M;Amq!OKjTA?yzl4d1pi-M@7K88x* z3{J+2sI%}Bj$?e&Pl0U@A8kE2E?{T60JSA69XFr`s>fPv!ddtSYVQN|UWyf%kMEMNWH})BY01a(~Md)?cT88x4`zhMK`a)S*1;covo5CDhVBa?EGHIFDv4 zY6~q?$6d%On{M=DA7s2QI}zP9F5)XaNPiT9zN z8$j*#5bFPnEbgNohc4_uP3#0}HZBp7)#o>FadM$E^=Ot zf4VU*U@`JdF`c*=KgMVrc6@|NIGTqw@MzSQ1d!)KW)=lrakCuVSdDz-%r=a}cGOHy zpgKN_dVhN`1FxW-yMyX@7{deQ+FKAnt;`}kh^tT&yp7Qs`5^_(AZmua#Hpwb@~mOk z#L!+!N>6iJO|%hn33X9V=>2$(&~=E|L?}&NONebm8Bt8=9auyhCUp4;rBq2QBsA)) z1PO$v#D-f(-6;{R);afl_fA?HiJ&#&PEOH>gPEFT#8bp;L=mB@*_!FeOlqg3g&ITX z2viewR-Gp?qQPqQ6sPT{{yL#+J<&uI5EVozvD+H(B(K^|Ntc#TmzQ{hC|8AR9>_mZ1H=LAEpKAPo7Nd`ZbWVO wcix9y@5bPE|He%XjludI-Mzl+iSbK=4UP5d>Yc_->#D6@-|X(2(+Z>h1DgRKp8x;= delta 2731 zcmXxldrZ}39LMo5%IzG)8z3oyhlpDemw6{al#90wFHF-dlalF_P|H+M>fnXE;n~{B z9O`JTxo+#9$kn1HWzC|@v{G7%71OoUX~rLD<$8ZOPrvQU>v^8v?>v|9^Zb5vRUfVP z_lyibWLyDaEYT8fb`t-I<_}kYjF}(r;)F1>h9PEo)ZdLYTZxx(Cl(Dg+lZYQi3P*V zxMfpu1XduoY?*US=)T{!P$=fcZuHaYzT#N(KWUt$j4#&k>` zX_k$p=*2qJ@9I$*@FPjI0LCh{M=7kpx7>{=mZurU<3t>TTEPNj7i=YJg0-j>ZN~9< z0F{XkoF`EOoknHy2Q0(usNKzvXEJ(V8U<}Z1?omKs>1-L;YX+y^q>Z~ikjd}=?j=@bh9RsM8evO*IIaj}c%H$NzyWv`l{s6Aw9-^)zSVl9>lrhLLZ)ssEN+;g%(ta%Ipf%+1P}dV6&^YVue0! z@3@9LIL}C5su_LR0-TQx1^w`E)J)Sk;@Xla&I;5(OK>ATfs^qpYVRZIy&Oxi5ci={|2b;FbEpY- zqx!#&n%KYSub~i^9vZM7_23?yfJab2_!hOIUr?w22KulMXJP^eLiZm-4Y&&RyLCvi ztP!iQ4fXpwsPDkN4DvsXLNrG_5@+F~I2X&X8MX2*49D+L&viSmpa!~zI=ua^?#Xgn zglf-4JvRfRaFJ_Yo<;r#)3A;PtzbQJDs7wdCDa7pM5XpOXEOW6d9-E78*5uo9S4xC z+AHY84$Q$zuHEx+Xd<~tla=@>XyA1?(2=VLP%A!yd{ymL)XLvSt*8U_yKhi?-Hm$w zDn{TR_#)oMXxutJw6G>r>JOvNfd4oJo$3zsVmJ0+FXrNBOrLXUf8rvHe*k%lRE@q8Ct^yo@?ieaJV*qUe-2+fvb^_rHjOUWeHji`A$Vu19t3$AR}2GpM&B zKeSF%$6Yuu5GwV3sEmxx<6D9ms0F@<>hCOSB0plha(Ih^ItUMXJmdVkC~1CL+j2rl z)Co`*&k%YqiU?imel4MHb^CSrXs)|-_40wq>vl|%utotR1JY7CZpGZO-ol&E1uGx0RBF}TAU7xrxM zkhe5-5B28>T~86)2z@@PiE?5`@UAy$$rehwltNu3$o3ISRpBZoo+Ee>tc1uR1`%~c zEupQ{NA3ShhpaxhHYO=~E2W)8HZh54B6Q@_h`qtrV&cLM22aG~g>7iR8goCU{dVH{ PxZthC$?e{plJNfku67q> diff --git a/orchestra/contrib/musician/locale/ca/LC_MESSAGES/django.po b/orchestra/contrib/musician/locale/ca/LC_MESSAGES/django.po index 75b98480..750f7dc5 100644 --- a/orchestra/contrib/musician/locale/ca/LC_MESSAGES/django.po +++ b/orchestra/contrib/musician/locale/ca/LC_MESSAGES/django.po @@ -318,6 +318,10 @@ msgstr "És el primer cop que accedeixes, et donem la benvinguda!" msgid " The disk space of resources is updated weekly " msgstr "L'espai en disc dels recursos es va actualitzant setmanalment." +#: templates/musician/dashboard.html:47 +msgid "Show history" +msgstr "Mostrar historial" + #: templates/musician/database_list.html:21 #: templates/musician/mailbox_list.html:30 templates/musician/saas_list.html:19 #: templates/musician/webapps/webapp_list.html:25 diff --git a/orchestra/contrib/musician/locale/es/LC_MESSAGES/django.mo b/orchestra/contrib/musician/locale/es/LC_MESSAGES/django.mo index f7c07f02ddc9fb6107661705d36b68cefcf4399a..f200c41fd25ace2f7f3ad9c7ad0d5d732565a04f 100644 GIT binary patch delta 2751 zcmXxkdrZ}J7{~DkMdfhtg4_}k4iIt>1Wm(?1oM*0B~6!`OAKtO%*#>45VB4xDr(8v z54*~`xSH9zn3OHoT-K~sD4X+AlbX6R|De)UGZ(Y>$Mfws9$w$?@A`b7-}5^k*Zf=) z{&9Hp9%E}GZYSEK&5mN6kAG}2ab{uk;rJ-C9azNtv%zMMU@vaQsv%};up0;BeM8MS zWV0|H7a)ghxwA2HJZ#$-lyaaQ^~_T^7ke-n3x}Ca#Tj@HwqgQ)fja*z4#Ep={}mj; zybqN~3Qy-&mX1kShy!r?tvO38XAr}V8sr+Q!*py$J>VthKGY50#VqW^Ts(^fcoTE5 zV7OTx&cj&Th`Me&ssg)_B3cIyR%s6~sK!s+fn=7a46|_p=Al-w82z{!l~^-sMJ9HxHtob0?}N%23x=CDB^CU_Lu^qiR$FOHi+31!~0`Q6+ChCG?J) zpG2+f8d81pF;Svv7{n~(kX7JqSc?H{MkVx0GWFNH-p>v__$$-}-KfNVK_&JFQZ@Sv zwK88ywMJt#m*Ak!h8xUu`f{%{ucGTb78mR0_wrPp+3WC($x(!u?q_@ z7jIx5X3^sMDk?D*+wfjIfGX`}R3g1@ehpR8>&Pw4$3?1aIE#Urs}S`LOHn6Qp)y^J z%5(+l#trUxGmc`u%N_p^>0dj7s?-S#;6>DZ`lp#K#bKy(Mpn762QdD~nRpH~#^Eg~T zZPysg=D>i=$O&_>g85^}pB?1id_09SF_%uH@hyZ}X$z`CFQOjsI_kQ^ZvXdg|3y@< zT}Smo3Z0zF^DUi$nrIR#(`lH452IGF3H53`)P-;0dVCwlVa6SiUU(48nYZHv{0a5B zC2})0Z5Ar=(Wpw7VOT4e!=MfybqBgo`+Kkmuc9u@92IGrV$_PKB5%hkumqQ(-t9gd zh##OTau|6#)`bhP7j^y2TJ%M=iR&m)zxR*{)Av;MX9Lsg3cn;gNjir zt3);NB2)!ex&2|czYPbm|Ft0X*9rUCp&NdR`Yb+28rQl|&G{=9;!T{0g?xi!a4BkK z?WoVH6LsS*BxgH~0qjGapFTSBLsp4u@=%xo)wRv22k%GqK&P93htbT>p%U#uCHlLY z|Bb3(On#&?NvQL)QHca`H;%;^Jc|4T*w?6@3SVTP8(&40uzx}12WSNPnHS@EoQj-c z87zaovkIJtAymT0und2|0hmg;lt=(I&q4K2KJo?I6yz0!Z7~CtE`&p{6_w!&=);4k zW;}wr(MeRor;!G?%czyb(Wy!#33b0Q7{L2cy|4^haRci9QDc=L?VH9x83j-$mZB;# z$NMKHqqc>SdVDsa-rY`2BKS43dSW~=nb7tOQAa3EZRNz{Lq;O3>co(K|Ch($y{ zVl}aXP_dsT{@+x)CZg4=_NR>8z-SA>2Vi#*n+Uxo_0SIQIe$XbZtqQhQPi44r~Q3? r|ME~{V0qoThERReq3)FE#Q3Vvx`z7NdbhK#cBR*yGVxGsK|%C?4u%=Q delta 2705 zcmX}s4NTQl7{~GF8eF{hiU?Ol0`+R~qLSAaERYnEG||O~wu;I!SDCM=882C0MKqO{ zt^PTiWvgbc=2|q0WVU2AwAI|yw9OgKxv-{`S({4J*7wIf>pvbo=ltK!bDnelw|8;J z;@Hn=3A>D=mB=ER6U+|djlulmxE?Z#VLwjynbi+5i_-r%+3ZQ|!3LZ))NBoQp&zHF zm~qJpF%{<_m+TSe()jh5)zFyDg+>hEH&}_sa3qcyW;O?B;7qK;Ft(%aKZ;3s!ks^Z z8T5ZgC6dJGyvl~+2pofnSTN9MYBOnQvX#g)R*hqDIck6%P7n3My*M8CVJ;rUe7ua= zn3ZNW0q0;4SE8P)MO9!UQbcRPWR-RgjYasOyWnSf$}o%tn1Px>1+ohE1S+xRs2Q!t zNw^bLi4NyisDX~4D)|H6ix*K7jt*yObweQyEx}yWg+|m1TktmQM9rWFHNY>Z1pAQf zVt=7#b`6!7pR9D>FjRjOYMk+?JrPAcKWhYAOE;8pLNB@>l|U70DIP=3cqOXjb*O~i za{a@onVmO<0yOpBe)!uP}4~2ueE-Y6B_sn)B|0p#C}92b`GhU z^`d6hk6IF6di=gr)LLhv?$2>f!Y%Ztpc4BGHSi(Sc;CioXuuPw&+k{%ixNop7^Yw@ z_TU6eWNYhdh~lld4)4YmR7t->C2-vJPopY%7FB^hR7DecSQCh)($LzCL)|z9mEk?8 z3@cDCe%M`KggNwAyX(7qn%zQwDN@9kt)QVy8c;8K z9V7hEe1QAuAE7J@>8~2ihN0iddacE4_%<#Z8}Iug@eCSf}x!PIO z9{2|-hWXgZ0e$~jG?Zx$X5(zs44y_UO%3Y7t@t7~<5V1Udweex-~#%!Sb$%nKC^46 z&6>zdm3T6$(&JGRn1-=sH0HSrZSF!BMmc{9^R20A<8jpU6WP(ae|j$UFQie*2|w1O`kPR@y3?J%iki_)*AL~z?@vPwl!2OA z6t#&oAG)Tio@gJnFB3_i{p?#Xi*9v?06GzQ@UU9`C|bzQH@N95u6A z)MvFD_2M=pM>~iSJcqj9H!=PL7Da8oDx|pfOpJyGZbI#W-LC%$CeS~Gnn@Qb(UY!! z235jKsLEVN-S3|iPb7q`^ust9-$y=uJAm3#-KfgNPSM~Cvx^wQqSb_&I5ig+kgCz>gm5gtoD+FnW-CTF$b$4rV=lEMZsJ>GB6$OwpK!=Ng=ipD~UDU=3v;j&f66% z8}}0ZR|p+Thz*23qs7ErVzbvD%&e}VrDI5(fmPo@`ytn#jq8a#qLg@?7(}chRuC#S zpUwY=wox7Ns<$eXKDw4x12KV^L2M$lOxi=+z4t<4UyJv7DC&E@y*G3-)P6aA&~WdM M^gG*&^79k^17ZXXTmS$7 diff --git a/orchestra/contrib/musician/locale/es/LC_MESSAGES/django.po b/orchestra/contrib/musician/locale/es/LC_MESSAGES/django.po index 55bd4c4f..20bcfe95 100644 --- a/orchestra/contrib/musician/locale/es/LC_MESSAGES/django.po +++ b/orchestra/contrib/musician/locale/es/LC_MESSAGES/django.po @@ -320,6 +320,10 @@ msgstr "Es la primera vez que accedes: ¡te damos la bienvenida!" msgid " The disk space of resources is updated weekly " msgstr "El espacio en disco de los recursos se actualiza semanalmente" +#: templates/musician/dashboard.html:47 +msgid "Show history" +msgstr "Mostrar historial" + #: templates/musician/database_list.html:21 #: templates/musician/mailbox_list.html:30 templates/musician/saas_list.html:19 #: templates/musician/webapps/webapp_list.html:25 diff --git a/orchestra/contrib/musician/templates/musician/dashboard.html b/orchestra/contrib/musician/templates/musician/dashboard.html index 3b52ea36..e2aa9917 100644 --- a/orchestra/contrib/musician/templates/musician/dashboard.html +++ b/orchestra/contrib/musician/templates/musician/dashboard.html @@ -37,20 +37,22 @@
    {% for name, obj_data in account.objects.items %} -
  • -
    -
    - {{ name }} + {% if obj_data.ac != None %} +
  • +
    +
    + {{ name }} +
    + +
    +
    + {{ obj_data.ac.used }} {{ obj_data.ac.unit }} +
    - -
    -
    - {{ obj_data.ac.used }} {{ obj_data.ac.unit }} -
    - -
  • + + {% endif %} {% endfor %}
diff --git a/orchestra/contrib/musician/views.py b/orchestra/contrib/musician/views.py index 084ea198..50ced802 100644 --- a/orchestra/contrib/musician/views.py +++ b/orchestra/contrib/musician/views.py @@ -62,17 +62,48 @@ logger = logging.getLogger(__name__) import json from urllib.parse import parse_qs from orchestra.contrib.resources.helpers import get_history_data +from django.http import HttpResponseNotFound, Http404 + +class HistoryView(CustomContextMixin, UserTokenRequiredMixin, View): + + def get_object(self, pk): + related_resources = self.get_all_resources() + + account = related_resources.filter(resource_id__verbose_name='account-disk').first() + account_trafic = related_resources.filter(resource_id__verbose_name='account-traffic').first() + account = getattr(account, "id", False) == pk + account_trafic = getattr(account_trafic, "id", False) == pk + if account == False and account_trafic == False: + raise Http404(f"Resource with id {pk} does not exist") -class HistoryView(View): def get(self, request, pk, *args, **kwargs): context = { 'ids': pk } + self.get_object(pk) return render(request, "musician/history.html", context) + # TODO: funcion de dashborad, mirar como no repetir esta funcion + def get_all_resources(self): + user = self.request.user + resources = Resource.objects.select_related('content_type') + resource_models = {r.content_type.model_class(): r.content_type_id for r in resources} + ct_id = resource_models[user._meta.model] + qset = Q(content_type_id=ct_id, object_id=user.id, resource__is_active=True) + for field, rel in user._meta.fields_map.items(): + try: + ct_id = resource_models[rel.related_model] + except KeyError: + pass + else: + manager = getattr(user, field) + ids = manager.values_list('id', flat=True) + qset = Q(qset) | Q(content_type_id=ct_id, object_id__in=ids, resource__is_active=True) + return ResourceData.objects.filter(qset) -class HistoryDataView(View): + +class HistoryDataView(CustomContextMixin, UserTokenRequiredMixin, View): def get(self, request, pk, *args, **kwargs): ids = [pk] queryset = ResourceData.objects.filter(id__in=ids) @@ -111,7 +142,6 @@ class DashboardView(CustomContextMixin, UserTokenRequiredMixin, TemplateView): # TODO(@slamora) update when backend provides resource usage data resource_usage = { - # 'account': self.get_account_usage(profile_type, account), 'mailbox': self.get_resource_usage(profile_type, mailboxes, 'mailbox'), 'database': self.get_resource_usage(profile_type, databases, 'database'), 'nextcloud': self.get_resource_usage(profile_type, nextcloud, 'nextcloud'), @@ -157,7 +187,7 @@ class DashboardView(CustomContextMixin, UserTokenRequiredMixin, TemplateView): rs_left = 0 alert = '' progres_bar = False - + if ALLOWED_RESOURCES[profile_type].get(name_resource): progres_bar = True limit_rs = ALLOWED_RESOURCES[profile_type][name_resource] @@ -184,15 +214,19 @@ class DashboardView(CustomContextMixin, UserTokenRequiredMixin, TemplateView): } def get_account_usage(self, profile_type, account, account_trafic): + total_size = 0 + if account != None and getattr(account, "used") != None: + total_size = account.used + allowed_size = ALLOWED_RESOURCES[profile_type]['account'] - total_size = account.used size_left = allowed_size - total_size + unit = account.unit if account != None else "GiB" alert = '' if size_left < 0: - alert = format_html(f"{size_left * -1} {account.unit} extra") + alert = format_html(f"{size_left * -1} {unit} extra") elif size_left <= 1: - alert = format_html(f"{size_left} {account.unit} available") + alert = format_html(f"{size_left} {unit} available") return { 'verbose_name': _('Account'),