From 273afd18d0da5bf05134ea5dd8b91d6ddbdceca7 Mon Sep 17 00:00:00 2001 From: svxf Date: Thu, 27 Dec 2018 04:30:12 +0400 Subject: [PATCH] com2 --- .gitignore | 3 + db.sqlite3 | Bin 311296 -> 0 bytes templates/web/activitylog_form.html | 15 +- templates/web/base.html | 39 +++++ templates/web/user_activity_charts.html | 28 ++++ templates/web/user_detail.html | 147 ++++++++++------- templates/web/user_form.html | 21 +-- templates/web/user_list.html | 43 +++-- .../__pycache__/__init__.cpython-37.pyc | Bin 141 -> 0 bytes .../__pycache__/settings.cpython-37.pyc | Bin 2303 -> 0 bytes timelogger/__pycache__/urls.cpython-37.pyc | Bin 963 -> 0 bytes timelogger/__pycache__/wsgi.cpython-37.pyc | Bin 550 -> 0 bytes timelogger/settings.py | 4 +- web/__pycache__/__init__.cpython-37.pyc | Bin 134 -> 0 bytes web/__pycache__/apps.cpython-37.pyc | Bin 344 -> 0 bytes web/__pycache__/models.cpython-37.pyc | Bin 1785 -> 0 bytes web/__pycache__/urls.cpython-37.pyc | Bin 770 -> 0 bytes web/__pycache__/views.cpython-37.pyc | Bin 2505 -> 0 bytes web/chart_views.py | 148 ++++++++++++++++++ .../__pycache__/0001_initial.cpython-37.pyc | Bin 1098 -> 0 bytes .../__pycache__/__init__.cpython-37.pyc | Bin 145 -> 0 bytes web/models.py | 12 +- web/urls.py | 10 ++ web/views.py | 20 ++- 24 files changed, 374 insertions(+), 116 deletions(-) create mode 100644 .gitignore delete mode 100644 db.sqlite3 create mode 100644 templates/web/base.html create mode 100644 templates/web/user_activity_charts.html delete mode 100644 timelogger/__pycache__/__init__.cpython-37.pyc delete mode 100644 timelogger/__pycache__/settings.cpython-37.pyc delete mode 100644 timelogger/__pycache__/urls.cpython-37.pyc delete mode 100644 timelogger/__pycache__/wsgi.cpython-37.pyc delete mode 100644 web/__pycache__/__init__.cpython-37.pyc delete mode 100644 web/__pycache__/apps.cpython-37.pyc delete mode 100644 web/__pycache__/models.cpython-37.pyc delete mode 100644 web/__pycache__/urls.cpython-37.pyc delete mode 100644 web/__pycache__/views.cpython-37.pyc create mode 100644 web/chart_views.py delete mode 100644 web/migrations/__pycache__/0001_initial.cpython-37.pyc delete mode 100644 web/migrations/__pycache__/__init__.cpython-37.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e68e06a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.sqlite3 + +__pycache__ diff --git a/db.sqlite3 b/db.sqlite3 deleted file mode 100644 index db424739d70b1846b7e360cdd1a6641b3067cd25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311296 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

u+ypaAw!(al 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 - - - - Новая запись - - +{% extends 'web/base.html' %} + +{% block main %}

{% csrf_token %} {{ form.as_p }} - + - - +{% endblock %} diff --git a/templates/web/base.html b/templates/web/base.html new file mode 100644 index 0000000..a5cd6c1 --- /dev/null +++ b/templates/web/base.html @@ -0,0 +1,39 @@ +{% load static %} + + + + + + + {% block title %} + LifeStats + {% endblock %} + + + + + + + + + {% block head %} + {% endblock %} + + +{% block body %} +
+ {% block main %} + {% endblock %} +
+{% endblock %} + + diff --git a/templates/web/user_activity_charts.html b/templates/web/user_activity_charts.html new file mode 100644 index 0000000..1783457 --- /dev/null +++ b/templates/web/user_activity_charts.html @@ -0,0 +1,28 @@ +{% extends 'web/base.html' %} + +{% block main %} + + + +

+ {{ user }} — {{ activity }} +

+ + + + {# #} + +{% endblock %} diff --git a/templates/web/user_detail.html b/templates/web/user_detail.html index 38a3164..7595880 100644 --- a/templates/web/user_detail.html +++ b/templates/web/user_detail.html @@ -1,71 +1,100 @@ - - - - - Пользователь - - +{% extends 'web/base.html' %} -

{{ user }}

+{% block main %} + + + +

{{ user }}

-

Записи

+
+
+

Записи

-Создать новую запись + + Создать новую запись + -{% if activity_logs %} - - - - - - - - + {% if activity_logs %} +
- Активность - - Когда начал - - Когда закончил - - -
+ + + + + + + + + - {% for activity_log in activity_logs %} - - - - - - - - {% endfor %} -
+ Активность + + Когда начал + + Когда закончил + + +
- {{ activity_log.activity }} - - {{ activity_log.start_time }} - - {{ activity_log.end_time }} - -
{% csrf_token %} - -
-
-
{% csrf_token %} - -
-
-{% else %} -
  • Ничего не залогано :(
  • -{% endif %} + + {% for activity_log in activity_logs %} + + + {{ activity_log.activity }} + + + {{ activity_log.start_time }} + + + {{ activity_log.end_time }} + + + + +
    {% csrf_token %} + +
    + + +
    {% csrf_token %} + +
    + + + {% endfor %} + + + {% else %} +
  • Ничего не залогано :(
  • + {% endif %} +
    + +
    + + +

    Активности

    + +
    +
    - - - - - +{% endblock %} diff --git a/templates/web/user_form.html b/templates/web/user_form.html index f378453..294e41e 100644 --- a/templates/web/user_form.html +++ b/templates/web/user_form.html @@ -1,15 +1,10 @@ - - - - - Новый пользователь - - +{% extends 'web/base.html' %} -
    {% csrf_token %} - {{ form.as_p }} - -
    +{% block main %} - - +
    {% csrf_token %} + {{ form.as_p }} + +
    + +{% endblock %} diff --git a/templates/web/user_list.html b/templates/web/user_list.html index 50de522..cb55bb8 100644 --- a/templates/web/user_list.html +++ b/templates/web/user_list.html @@ -1,28 +1,23 @@ - - - - - Пользователи - - +{% extends 'web/base.html' %} -

    Пользователи

    - +{% block main %} + +

    Пользователи

    + - - Создать нового пользователя - + + Создать нового пользователя + - - +{% endblock %} diff --git a/timelogger/__pycache__/__init__.cpython-37.pyc b/timelogger/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index 4f7bc51b0598bef64abc8aae018d9a284233d70d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmZ?b<>g`kg4+|7V?gv{5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o6vEKeRZts8~NS zsVGsupeR2pHMyi%za%p^H77qkJ+%m#86TgSmst`YuUAlci^C>2KczG$)edA{F%UBV E0BDdQbpQYW diff --git a/timelogger/__pycache__/settings.cpython-37.pyc b/timelogger/__pycache__/settings.cpython-37.pyc deleted file mode 100644 index c991864698cc93eefd7263af7dcfd124218201ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2303 zcmb7GTXWk)6t-o>cHAay)AT}HKqV=yTO!dr!$65*E2*cxWFol%4TDDZS<9Q~;%Zl< z(QoMkedN#Z#tfqeUU=d!@WhcXvB&8QL2Ip#&gDC2&z`f=*3wcbgV%3=uKoD?xlHD- z^kH%pk=VqW{ecr?%nW2faI1;|4Iim(VJ zIOi115}b!6ScVI55iY?Ba?ZhJ^E|8$v6e_4uDlnVEQoLwuEBNq2yQqc&BD!hqLVe3 z;g)#;K88fb>qFS@R;?hR;y*HmnWj_2GPnW*yPI1fQELaM!$yajoKg1@4(w zp=@3QLC=)$+e$W*DOC?_-w7l}IH$hDq+Sq8oO;9!9EXI`APf#jm&>Kn4)IB7a{^N5 zSh@>CvkePw8Q6T6tdE{dfK{xOe;wuQK@L)i@Oqs;2jNo~nNWI8)C6_WT1-agLAv6v-`6HR8W3`^lHx3E>Z7-A5z_})C;X&o6z zCvxKZXV47E8*CdMKN#ztlxv#Z4YZ(Lgtt*3rSvU z?$nxEA~w~A7N)0v{Bkb#VHpi<#*TszEIdUh4Bg3XMnaXRy&G|&Q;)iK+9t0@8bKJp zI4e?v`qYcOI`JLepW1(SR{K%c?2coc0&JcYpc#22q}|g93&h`uSdwcSmF>8w;AxNj zqm-{F1~MZ zACiTtw$KMGOHSTn^58fre&YoYx#R_Ylw_EJlPDB(xAJ06 p6vPD~I~{p(N(p{+OOez zxaG=;U*NVu~iZJ}VW$3z5RZWaxO6Y4;mD(UB8^g3cpplX2YsqeOf-a;&Tq=f2 zv5|^*5U8#g(F|$ERw075HKx`pjH%3ZLU%+IvQ~1(a+BneV&@-JxvD1@UR zb~}%vMXzfsIa?q>IC~MMA4ZoVuNqp40!--oS!p?3=Fy+a&KLw#;CgH=o5yI=Te&*eb-0ei8h#|%*Dg9! z?#*@$6NSORW2eX_I@~CZ!(TAHPVBY;p}Z8a*ZS7+cG6ehjk`QOfDd~vxHt$1vG3pOkfo7^oHbu+4sz75| zf@QVEITSui(}8DjTcZQV{0!KtM`$gsG%(?qU=_-14Z9i^pxHuLwJaG?fn<}3sB5hX z;T4+6B;p-Mq6#fAWg=&_EHE??TsbyX8s0Dmkj}iX-Fwa@7A})>VM=_|RA9xy@V)FE zpW%&1E}_g`kf}fX^V?gv{5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o2B>KeRZts8~NS zsVGsupeR2pHMyi%za%p^H77qkJ+(-`JT*x_K0Y%qvm`!Vub}c4hfQvNN@-529mt?! HAZ7pnmK7e{ diff --git a/web/__pycache__/apps.cpython-37.pyc b/web/__pycache__/apps.cpython-37.pyc deleted file mode 100644 index 1a180347cf15f670983d6af10298ef64a403005c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmYLE!A`?440W0!wPTa`1SC!s(((fn8gSq?4hSJdNKrax)uy%yNhib^eunSi)+;A| zfzzCp2}^!{&a)l+W;UAuS@(7Ed{6N^CPzz&EXl(;0Rplb8YUToJHQ0_2Ou}>oy!E% z2PjT{s0s?!=hx2N+IF+8*743V|QL3@HuOpu-^|IIXpOVJ-2|lB#1N>f!$6$OAy7XE&Z+B+h1<`FAQ`@RCUeI)* xoeOjK<~g;+J3~T{u_0g4HmA7LZDr@N&PQ!f{(l)+PC}n8#?`Lkg~OaFKLD8EO(p;U diff --git a/web/__pycache__/models.cpython-37.pyc b/web/__pycache__/models.cpython-37.pyc deleted file mode 100644 index 8cc476780d993402ffb4506c90e7490187434fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1785 zcma)7&2Jk;6rY*>UauXuw538ERtiE`qV@&#P@$?JX`upgpyfjg)oSCJxVv5Nrn6&` zSnh>X-0~NoN^s=DA2e4^`~^rk@!oiyn5adpHE(9#%)HOvd;X-`4GDb1zc+vQ!zScU z+^jy>lY20luYhpEX-TFup%mAwWK%1#DEX9di`y>=w}n;MCsyJB$Kft;+?L}4$KyV5 z{FdYK;1L;we}P;wpnBt*tju|)^18Y&Wi5f_PHQg8W{fvhAA`j`7|nY?1W70-2@}?@ z_HQI{+S%olvzH|CxCI()ZGYVeIi~OcKb&!F!)SaU3sR6@2;8K*pwzCisld4r<^JzP zdT`_H)(Ay3qij!RqXStNVyv2x%BP~NClet@hhlHEw03xKti3dCluXkARiMR$&LfmC zY!7w^zV_1;Ri&v8(-hv$N?b>2`h1p^%M)qAQyn}ON9sW?N-iDTJ7SvUr9|Pzx;29C zNK6@CY+N8dg&#A#*T?Z)xO6#=ZT#Fee*V^2atV6Dep?!mmleLzy6J1e)os3(A?psrHDvQXkN z?4oR@>a?m4(~R@;prUE$_%@8@XCMen81$JV-%*Uy1;F$bJE1?(qkRP?77m=coSo9b zgO!g4?T{y*y`U;EZ)rhJ*bAmYl(L`&g`Ksq7VMcVZ-Yb|C30s$4P`*xg#|i%)bafG zw@~EZjJG@AcvzNVl9e$+zPS@)earyQFteP`Hy>6C$^(lcKFrnAIIC*)RLD4MfpaGg zH4W$N!+6lqVWTpsQWT|qQE{`9SSIoc5bf1_roObhpO+w4UNc;AG%jac$m_VXrr8mY zyc*aBWl7H{OjimuEj5*wu&14IDY6O?-}HbG8qpq$X%BuronKi?+0fiPPYw19griB# zN3g(TVAtRbLkqJ7GX@YsT0jUPs4ye%Cf;&ib(VpQ)^vQ2@tCtG@fp1}XYmJTbO7EM zXZ@8Q@@-HiZvy#`a(W+*SLO89nu3dp>c6g{boii_BA-;Bi(}Iuw70$WXnSktzA-{# z?Z{0ay1SDBa3NpIE_7~F5}5YK(@e=2Z@;l8VPerU6L+8XX`f+dikKgoq+>(8!HcY# z)Wb1YHH2)71N<{+3^H`k9`e0qQ*^$>{|00B(ooc}mTzp^65FBnKVCN1yO>1N@FN;o ISN*HrKREA##sB~S diff --git a/web/__pycache__/urls.cpython-37.pyc b/web/__pycache__/urls.cpython-37.pyc deleted file mode 100644 index 9fca362c5ec6afa08ca67f8451eb47521a9b4cba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 zcmbV}%}T^D5XY0Y``uj?_2N}8i(v1f;@45Uh#rbi;%2B_`mrS0UEF8TchIAc;w$9p zNnb$llwx7#K-UfMld*ioIbMtt_F+BX9vxNW7$svUw zIZJrj_jQL4SsoW#W06XM|4y_!g)8Br3jK5J!$~651@=@on2bzw!=AxM_NB&A+Q*<+ zl3IK9plZ@d5zif)$LIE;KTaRpS`F46EC|0;fym_}5kA&qm-o%UTrUH5C0H;L#SjKc q1}ez_za$0`VEKW0&DQ8fH+Qmvk5kyA7%$gw@g3jwXpdIY`O+Vg@brBE diff --git a/web/__pycache__/views.cpython-37.pyc b/web/__pycache__/views.cpython-37.pyc deleted file mode 100644 index afebbf5475241cea756d8b4a3895fbf7d02413a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2505 zcmcgu%WfP+6s_v_ygcJLfCv!;1rQCv0}FN$G9(h4$Qu+EC8Sn+syxi3d&X4t*w`{F zTgobY14wN66TYFgtoQ_2ac;HeWlyp~v{l!2tGcUBopbN4`Kr@tGCY6$egC`fL&p9j zXZ{4}?4g<8U?h{gU?ms4^n}OB_X@uZL{NqzEF%$>v53n=ByP?x8f8;7%a&-BZPDiJ zYbFC3UNRY~;KCOj_>qj^$0~xq1wWAu_ze}p@4|1&7W|f*@4;`&4*ZUaF~1FeOLpOR zRRaH(?0v)1?Z1GOrJikTb*!{eS&^Te+W5*#Lz_Gqnd;k-I(-2-G8K2Ua7kO z^hhrHk5!@S@zl4;mxF3_JgQD@@YE=6TXX-(bU2`m=MP6`56$#o6cb!B;VEAPk^>~r z(dTm@`-CdXCV8o{%r>*EoXS~2{dSi9Fw2X2Mw3o9#H1>IXL=i+Gygp3(`u%lALzV) zq^Dyws7${am8zHyhf4QP)It9kCpNoBr@D>rVl?ByB;5IH*lB!^UbqLdj$L{~PlPIx z{skAY3~-jvZqe>5^aTXhhN=X&Hk=W({WQ@Xtfsffbji?RG_hl&!;vba(X_8^nb}~V zjLBxYSRS$N-J(x+U|MJqiiw^hETW9dhZ*;4%^Ma~3d> zERV7h6#=2QG1+V+2c#-Jv^+J3;{iGqyI^B}$j zPx=qpxrc3n{gmrF_{ug-mFp@ar9>yc3at#HnKZVcnH^#C-cVK9U^=PPk5z`S%r)(5 zTray>LQzFH;awvlCnA_vRa3bSux-Ph3^ zvy5-?JN)b&(soJ6?sYI}U%u(0KTzuR1(KC`ZbC@)3X**Y72C69LfGD`Z(g*mb zo$PO-M}sDTA=&ZgX&PMy*7$5*b8C^1g;sZ4j``StpuY_?j7sP3$ z?_xolsEKrPEkc1pf;N4GW{ABCRZ@BopN|m+BShJYTJ(CEx9|!MM)1-=QxNHQ$+&p% zMiO)P$zNo*JHG7_@hhou5APV-mw|}0_cxxviM8_0ei~mFi$cjIp?-sUyJVI-yPjkJ zBTNthi==CNn#MMBe>3S;xd-pA?4y2A(lyrjUshiIF@Ygk9QB&g%y#FRP?D@>@`qhknhV7^=LK=LMzn|{dmK^7k;dB>; zs=k(7qKeyB!}V18~15J=MemF5rH~1Yr n!CWdiF&% l: + day_seconds[i] += (r - l).total_seconds() + + day_hours = day_seconds / timedelta(hours=1).total_seconds() + + ax.bar(days, day_hours) + plt.xticks(days, [f'{i:%m-%d}' for i in days], rotation=60) + plt.ylabel('кол-во часов') + + def tracker_chart(self, plt, ax, logs, day_l, day_r, day_count, days): + ys = [] + widths = [] + lefts = [] + + for log in logs: + for i, day in enumerate(days): + l = max(log.start_time, day) + r = min(log.end_time, day + timedelta(days=1)) + + if r > l: + ys.append(day) + widths.append((r - l) / timedelta(hours=1)) + lefts.append((l - day) / timedelta(hours=1)) + + ax.barh(y=ys, width=widths, left=lefts, zorder=2) + plt.xlim(0, 24) + plt.xticks(range(24), [f'{i:02d}:00' for i in range(24)]) + plt.yticks(days, [f'{i:%m-%d}' for i in days]) + plt.grid(True, zorder=1) + + def render_to_response(self, context, **response_kwargs): + logs = list(ActivityLog.objects.filter(user=self.object, activity=context['activity']).order_by('start_time').all()) + + day_r = logs[-1].end_time.replace(hour=0, minute=0, second=0, microsecond=0) + day_l = max( + logs[0].start_time.replace(hour=0, minute=0, second=0, microsecond=0), + day_r - timedelta(days=14) + ) + + day_count = (day_r - day_l) // timedelta(days=1) + 1 + + days = [day_l + timedelta(days=1) * i for i in range(day_count)] + + import matplotlib + matplotlib.use('Agg') + import matplotlib.pyplot as plt + fig = plt.figure(figsize=(16, 12), dpi=100) + + ax = fig.add_subplot(211) + self.bar_chart(plt, ax, logs, day_l, day_r, day_count, days) + + ax = fig.add_subplot(212) + self.tracker_chart(plt, ax, logs, day_l, day_r, day_count, days) + + buf = io.BytesIO() + fig.savefig(buf, format='png') + b = buf.getvalue() + return HttpResponse(b, content_type='image/png') + + +class UserActivityChartsTracker(DetailView): + model = User + pk_url_kwarg = 'user_id' + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['activity'] = Activity.objects.filter(id=self.kwargs['activity_id']).first() + return context + + def render_to_response(self, context, **response_kwargs): + print('start_tracker') + import matplotlib + matplotlib.use('Agg') + import matplotlib.pyplot as plt + fig = plt.figure(figsize=(16, 6), dpi=100) + ax = fig.add_subplot(111) + + logs = list(ActivityLog.objects.filter(user=self.object, activity=context['activity']).order_by('start_time').all()) + + day_r = logs[-1].end_time.replace(hour=0, minute=0, second=0, microsecond=0) + day_l = max( + logs[0].start_time.replace(hour=0, minute=0, second=0, microsecond=0), + day_r - timedelta(days=14) + ) + + day_count = (day_r - day_l) // timedelta(days=1) + 1 + + days = [day_l + timedelta(days=1) * i for i in range(day_count)] + + buf = io.BytesIO() + fig.savefig(buf, format='png') + b = buf.getvalue() + return HttpResponse(b, content_type='image/png') diff --git a/web/migrations/__pycache__/0001_initial.cpython-37.pyc b/web/migrations/__pycache__/0001_initial.cpython-37.pyc deleted file mode 100644 index 6caea0cf372e3319076cb821b7b500c390bbc54f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1098 zcmZuwOK;Oa5caM&@gq)~mh$L@3ldT!NXi{m4J}0o+DpsDLb9C9)Ut8xuy$I~D_rv* z;K*NEj+~G#Ot4xZn{7d&w(L z=T=XbJYDSxowei~B!YL|IE@nvVi%M%>#F#>%It~2WJW_5^hO!LG znA~m5pq898k0OL1EcUWw@LRVr=+t;?n(2jkR?ufn@RpqO&s^HW9wz7lD90bY@0&<(DNU|3MALn7J zn?z0$% zV;K%-GEZ<)7DG*ZMYbFg6~minGThtSdlsyE8q5|_ze9^=p&@N9xDbMIzQcNE{dbwm zHrT_pR@oV6Rb;=doVtSnj4M)V9(LEpLH#TTO>gqCE?sB6X`+^%l1vP!GbQapJ H$87T-TN^qT diff --git a/web/migrations/__pycache__/__init__.cpython-37.pyc b/web/migrations/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index a84e17881f989c154ec4b82014693919f8445f0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmZ?b<>g`kf;YF7V?gv{5CH>>K!yVl7qb9~6oz01O-8?!3`HPe1o6vCKeRZts8~NS zsVGsupeR2pHMyi%za%p^H77qkJ+(-`JT*x_H#5B`u_QA;uUJ1mJ~J<~BtBlRpz;=n SO>TZlX-=vg$jo9OW&i*zJR?s4 diff --git a/web/models.py b/web/models.py index 01bea2d..91a2fbc 100644 --- a/web/models.py +++ b/web/models.py @@ -3,8 +3,8 @@ from django.db import models class User(models.Model): - name = models.TextField() - email = models.TextField() + name = models.TextField(verbose_name='Имя') + email = models.TextField(verbose_name='Почта') def __str__(self): return f'{self.name}' @@ -18,11 +18,11 @@ class Activity(models.Model): class ActivityLog(models.Model): - user = models.ForeignKey(User, on_delete=models.CASCADE) - activity = models.ForeignKey(Activity, on_delete=models.CASCADE) + user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Пользователь') + activity = models.ForeignKey(Activity, on_delete=models.CASCADE, verbose_name='Тип активности') - start_time = models.DateTimeField() - end_time = models.DateTimeField() + start_time = models.DateTimeField(verbose_name='Момент начала') + end_time = models.DateTimeField(verbose_name='Момент окончания') logged_at = models.DateTimeField(auto_now_add=True) def clean(self): diff --git a/web/urls.py b/web/urls.py index 5248f10..a4bba5e 100644 --- a/web/urls.py +++ b/web/urls.py @@ -1,5 +1,6 @@ from django.urls import path +from web import chart_views from web import views urlpatterns = [ @@ -16,4 +17,13 @@ urlpatterns = [ views.ActivityLogUpdateView.as_view(), name='activity_log_update'), path('users//activity_log//delete', views.ActivityLogDeleteView.as_view(), name='activity_log_delete'), + + path('users//charts/pie', + chart_views.UserChartsPie.as_view(), name='user_charts_pie'), + path('users//charts/activity/', + views.UserChartsActivity.as_view(), name='user_charts_activity'), + path('users//charts/activity//all', + chart_views.UserChartsActivityAll.as_view(), name='user_charts_activity_all'), + # path('users//charts/activity//tracker', + # chart_views.UserActivityChartsTracker.as_view(), name='user_charts_activity_tracker'), ] diff --git a/web/views.py b/web/views.py index f6e5f33..0ddd541 100644 --- a/web/views.py +++ b/web/views.py @@ -1,7 +1,7 @@ -from django.urls import reverse_lazy, reverse -from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView +from django.urls import reverse, reverse_lazy +from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView -from web.models import Activity, User, ActivityLog +from web.models import ActivityLog, User, Activity class UserListView(ListView): @@ -22,6 +22,7 @@ class UserDetailView(DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['activity_logs'] = ActivityLog.objects.filter(user=self.object).order_by('start_time') + context['activities'] = set(i.activity for i in ActivityLog.objects.filter(user=self.object)) return context @@ -54,3 +55,16 @@ class ActivityLogDeleteView(DeleteView): return reverse('user', kwargs={ 'user_id': self.object.user.id, }) + + +class UserChartsActivity(DetailView): + model = User + pk_url_kwarg = 'user_id' + template_name_suffix = '_activity_charts' + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['activity'] = Activity.objects.filter(id=self.kwargs['activity_id']).first() + return context + +