From 7c426140537322c376143fa50002dd1e28364a34 Mon Sep 17 00:00:00 2001 From: Holger Trampe Date: Mon, 9 Dec 2019 20:14:03 +0100 Subject: [PATCH] News-Modul eingebaut Tabellarische Ansichten fertig Leerzeichen bei Agenturleitung entfernt --- areas/migrations/0001_initial.py | 9 +- areas/migrations/0002_auto_20191209_1802.py | 34 +++++ .../__pycache__/0001_initial.cpython-38.pyc | Bin 1441 -> 1027 bytes .../0002_auto_20191209_1802.cpython-38.pyc | Bin 0 -> 987 bytes areas/templates/areas/areas_management.html | 85 +++++------- .../templates/areas/areas_management_OLD.html | 32 ++--- .../__pycache__/settings.cpython-38.pyc | Bin 4250 -> 4349 bytes .../__pycache__/urls.cpython-38.pyc | Bin 1909 -> 1945 bytes digitaleagentur/settings.py | 7 + digitaleagentur/urls.py | 2 + .../Makris_Philipp_7zkFtau.jpg | Bin 29873 -> 29873 bytes media/userprofilepics/Timm_Hannes.jpg | Bin 18814 -> 18816 bytes .../Valentiner_Sebastian_apbr5VU.jpg | Bin 19791 -> 19792 bytes news/__init__.py | 0 news/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 153 bytes news/__pycache__/admin.cpython-38.pyc | Bin 0 -> 264 bytes news/__pycache__/apps.cpython-38.pyc | Bin 0 -> 369 bytes news/__pycache__/forms.cpython-38.pyc | Bin 0 -> 1307 bytes news/__pycache__/models.cpython-38.pyc | Bin 0 -> 1466 bytes news/__pycache__/urls.cpython-38.pyc | Bin 0 -> 643 bytes news/__pycache__/views.cpython-38.pyc | Bin 0 -> 3493 bytes news/admin.py | 4 + news/apps.py | 5 + news/forms.py | 35 +++++ news/migrations/0001_initial.py | 28 ++++ news/migrations/0002_auto_20191209_1802.py | 34 +++++ news/migrations/0003_auto_20191209_1828.py | 24 ++++ news/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-38.pyc | Bin 0 -> 1016 bytes .../0002_auto_20191209_1753.cpython-38.pyc | Bin 0 -> 636 bytes .../0002_auto_20191209_1802.cpython-38.pyc | Bin 0 -> 993 bytes .../0003_auto_20191209_1757.cpython-38.pyc | Bin 0 -> 797 bytes .../0003_auto_20191209_1828.cpython-38.pyc | Bin 0 -> 704 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 164 bytes news/models.py | 29 +++++ news/templates/news/news_addnews.html | 18 +++ news/templates/news/news_confirm_delete.html | 19 +++ news/templates/news/news_management.html | 51 ++++++++ news/templates/news/news_single.html | 15 +++ news/templates/news/news_update.html | 18 +++ news/tests.py | 3 + news/urls.py | 18 +++ news/views.py | 121 ++++++++++++++++++ orga/templates/orga/orga_main.html | 4 +- standards/__pycache__/urls.cpython-38.pyc | Bin 1126 -> 1126 bytes standards/migrations/0001_initial.py | 21 +-- ...205_0809.py => 0002_auto_20191209_1802.py} | 59 +++------ .../__pycache__/0001_initial.cpython-38.pyc | Bin 1360 -> 1043 bytes .../0002_auto_20191209_1802.cpython-38.pyc | Bin 0 -> 1288 bytes .../templates/standards/standard_area.html | 82 +++++++----- .../standards/standard_area_OLD.html | 34 +++-- .../templates/standards/standard_task.html | 83 +++++++----- .../standards/standard_task_OLD.html | 51 ++++++++ standards/urls.py | 2 +- tasks/migrations/0001_initial.py | 12 +- tasks/migrations/0002_auto_20191209_1802.py | 40 ++++++ tasks/migrations/0002_tasks_name.py | 18 --- tasks/migrations/0003_auto_20191205_0809.py | 26 ---- .../__pycache__/0001_initial.cpython-38.pyc | Bin 1314 -> 870 bytes .../0002_auto_20191209_1802.cpython-38.pyc | Bin 0 -> 1095 bytes users/__pycache__/models.cpython-38.pyc | Bin 3044 -> 3108 bytes users/__pycache__/views.cpython-38.pyc | Bin 10138 -> 10309 bytes users/migrations/0001_initial.py | 14 +- users/migrations/0002_auto_20191204_0857.py | 17 --- users/migrations/0003_prio.py | 26 ---- .../__pycache__/0001_initial.cpython-38.pyc | Bin 1847 -> 2169 bytes .../0004_auto_20191209_1753.cpython-38.pyc | Bin 0 -> 853 bytes users/models.py | 5 +- users/templates/users/base.html | 15 ++- users/templates/users/dashboard.html | 31 +++-- users/templates/users/users_management.html | 2 + .../templates/users/users_management_ALT.html | 84 ------------ users/views.py | 7 +- 73 files changed, 804 insertions(+), 420 deletions(-) create mode 100644 areas/migrations/0002_auto_20191209_1802.py create mode 100644 areas/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc rename tasks/templates/tasks/tasks_management_OLD.html => areas/templates/areas/areas_management_OLD.html (72%) create mode 100644 news/__init__.py create mode 100644 news/__pycache__/__init__.cpython-38.pyc create mode 100644 news/__pycache__/admin.cpython-38.pyc create mode 100644 news/__pycache__/apps.cpython-38.pyc create mode 100644 news/__pycache__/forms.cpython-38.pyc create mode 100644 news/__pycache__/models.cpython-38.pyc create mode 100644 news/__pycache__/urls.cpython-38.pyc create mode 100644 news/__pycache__/views.cpython-38.pyc create mode 100644 news/admin.py create mode 100644 news/apps.py create mode 100644 news/forms.py create mode 100644 news/migrations/0001_initial.py create mode 100644 news/migrations/0002_auto_20191209_1802.py create mode 100644 news/migrations/0003_auto_20191209_1828.py create mode 100644 news/migrations/__init__.py create mode 100644 news/migrations/__pycache__/0001_initial.cpython-38.pyc create mode 100644 news/migrations/__pycache__/0002_auto_20191209_1753.cpython-38.pyc create mode 100644 news/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc create mode 100644 news/migrations/__pycache__/0003_auto_20191209_1757.cpython-38.pyc create mode 100644 news/migrations/__pycache__/0003_auto_20191209_1828.cpython-38.pyc create mode 100644 news/migrations/__pycache__/__init__.cpython-38.pyc create mode 100644 news/models.py create mode 100644 news/templates/news/news_addnews.html create mode 100644 news/templates/news/news_confirm_delete.html create mode 100644 news/templates/news/news_management.html create mode 100644 news/templates/news/news_single.html create mode 100644 news/templates/news/news_update.html create mode 100644 news/tests.py create mode 100644 news/urls.py create mode 100644 news/views.py rename standards/migrations/{0002_auto_20191205_0809.py => 0002_auto_20191209_1802.py} (53%) create mode 100644 standards/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc rename users/templates/users/dashboard_SAVE_standardcards.html => standards/templates/standards/standard_area_OLD.html (60%) create mode 100644 standards/templates/standards/standard_task_OLD.html create mode 100644 tasks/migrations/0002_auto_20191209_1802.py delete mode 100644 tasks/migrations/0002_tasks_name.py delete mode 100644 tasks/migrations/0003_auto_20191205_0809.py create mode 100644 tasks/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc delete mode 100644 users/migrations/0002_auto_20191204_0857.py delete mode 100644 users/migrations/0003_prio.py create mode 100644 users/migrations/__pycache__/0004_auto_20191209_1753.cpython-38.pyc delete mode 100644 users/templates/users/users_management_ALT.html diff --git a/areas/migrations/0001_initial.py b/areas/migrations/0001_initial.py index b169754..6d36ba4 100644 --- a/areas/migrations/0001_initial.py +++ b/areas/migrations/0001_initial.py @@ -1,10 +1,8 @@ -# Generated by Django 3.0 on 2019-12-03 22:58 +# Generated by Django 2.2.7 on 2019-12-09 17:02 import colorful.fields import datetime -from django.conf import settings from django.db import migrations, models -import django.db.models.deletion class Migration(migrations.Migration): @@ -12,8 +10,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('users', '0001_initial'), ] operations = [ @@ -26,9 +22,6 @@ class Migration(migrations.Migration): ('desc', models.TextField(blank=True, max_length=3000)), ('created_area_date', models.DateField(blank=True, default=datetime.date.today)), ('visible', models.BooleanField(default=True)), - ('agency', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency')), - ('created_area_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), - ('usersfield', models.ManyToManyField(blank=True, related_name='users_in_area', to=settings.AUTH_USER_MODEL)), ], ), ] diff --git a/areas/migrations/0002_auto_20191209_1802.py b/areas/migrations/0002_auto_20191209_1802.py new file mode 100644 index 0000000..c81cbd3 --- /dev/null +++ b/areas/migrations/0002_auto_20191209_1802.py @@ -0,0 +1,34 @@ +# Generated by Django 2.2.7 on 2019-12-09 17:02 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('areas', '0001_initial'), + ('users', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='areas', + name='agency', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency'), + ), + migrations.AddField( + model_name='areas', + name='created_area_by', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='areas', + name='usersfield', + field=models.ManyToManyField(blank=True, related_name='users_in_area', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/areas/migrations/__pycache__/0001_initial.cpython-38.pyc b/areas/migrations/__pycache__/0001_initial.cpython-38.pyc index 77c504784bc5e718de59be86ce1fdc0045ac49a3..e7289b86774b82bde1032aa37bae505f056d7dae 100644 GIT binary patch delta 524 zcmX|6Jx|;~5Z&2b`+Q$M-$zJ5`H%n!EEI|qsUnC(kqT0TG?r2v%$#M*oY5N6B^0EL zBb_XzPl@;k@Eh_6+@z-A2T&xLJ)-PtXWx7CW@q+C``q*2ce^dYEBJi-;Zn`~$MABt z@nrSLi5w7b1S-^D1ZvW$d#)lE;hhMb8(XnA`?_}4Vepzy@tp&S2v9^4AyTo3G&!k@ z5*0O44}rHv2i;OnBsN%UqKC~An6;>tw$lzf+StJ^`q+ydjzOt7+h=c=a|0ZflKF_a zk3hXNc#-z;!CYKmalodB_QBZ2N2QD*8sZ|)yHq!Klh}+;l6<;f{e){b;AxFteUpnD zb2wmLH$Emsa*$C7#_~`a`@7nmB$Q#X7mliJ^?bSRARW^bX?mDYVWhRRcMOeBXg5d7 zjH<5GDlAmL)Z1ZxO!sYz3t`sTYSybydjCu_^!OA@7Dz3%)*$5we0T~0@O>wL>p#Z& z!baUY%(L7~PP5JXSA literal 1441 zcmY*Z%Wm676y@+GlAo+-t1ic_}bF6zoc>V zF~N8YfBr29q7js80a9;0(BZA8#>5OvBx6QuP3*v)l!B77QR)QlsYXm<{i+d*+KKmz z5qJbW(`xn=tf!sVkZ?FHia3jSO&8uIjutH;FKmQv9RcHVS z3JhxgCif`)j))%VfkVy2B?d96my`*DpG9m^T9{*i zsgm``0=cm;AbJaO*CDn^wiY_r+hA`HL~kXV$rjmBzT4p2hMZls-X2&x^mekFc*$O} zPxi@y%DVHuUt(QF?n2}M>hCGv2Xf!YCHEJ4gn~QdL*VNp;htS{(*vfg8K;a3ztL!X z9>!T*#5fgJi&4yl9+R%npLA-b@bRq3!x6X(Nv0$C1t~$ z(=fvmDoiP_UIV+(9dCkPg(=OV;<>O!d787!(#PHI@lm4z%1QI^;e#(gX*8M-J58k= z9UZqpX||dVnuj$*Si=-&FNCd%xhN4j#HGFFMY*Fy`?PR$IY`4#)lSE=tVB7@2xtV3s2>bW113C zQ97`w_N*BSjqn*wC2NWlb|C4{Syf`NRT)38-4#x#!eJ=9Foc1fr4)2O41b#8RPqQ` zY1JNP$l@*jGoDT{90Bl6X+|V`rpr*Z)$e^1_Me?xglA7XC*KSIZAMJFD7RG`&*ZgW z@?HwJ1>NncGq~;Nm@QRDF+HB8?7mE@T$~=aW#d+fJ^HFxsU0}qszwrB#IpNR6IPKE zJQx0Po~ION%OtOxGa5(PcQ8FRNpKeBLMKDvD5Bxgiqa1kPkSfro~WMTY~IVIT-D}N zy1LnaXzURHQ{vzA_M<^xj`EFgj){%VgqJ6aW4@BOmidq>aL~;bI z)yI-h&OVhGKLa7k%d^%;c{W~l%3XQLP&IYgjlH+d`ts9NzvhJ<%C#i4cPC$JU&{5J Vua=YZwHy#G(L2aNK0tMh{{ey5ra%Ay diff --git a/areas/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc b/areas/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..547252b8835c0bb2bcc331da514f9c847f377592 GIT binary patch literal 987 zcmZ8gy>HV%6t{i;isLi^RY(j>u!JE>A|cTVp;m2L5VS>YGGG~DH zP%}5?W@MU*w{mNaA~d%nTfb56MDD&pZR(sE)L|&|zM#mX=)~x{Kf&MVn$j1ns?s76 zT}uY@G~uL5%R)$ZUQ(8e!lYX{$^t|0tYXrt z$}R$26c)H3b0%#~ozs-%RJLc3sbUnXjCi_|feuwGTbhRgv=+iR)0`CVWyo2som3>= zgh~#(ccqVYe2is)G2~n34EPY^4@;6OOL%#g&2Xg3Ul$+AVnL>0NZEoFR5imbrD|_a z#xL;XWOR%Vj&?_{Wq56oG9mqKO7~O)T&pj@!amHBS)hY(JaKW}$7VgJ^CU0*iq4tuk*IIYoYTuSIv16zY~|616q|AgKZ8vKFk cQdM!&Z_Padne?C4(|fLlB-EmXX2
- {% for item in areas_of_agency %} - -
-
- -
-
{{item.name }}
- -
diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index c2c88dcb02501c2982fd0546b36eaea5392ebb33..1b9fb5b266ecf380182e4da60ed1de978fe96b43 100644 GIT binary patch delta 586 zcmXX?%W@Jy6rE`Yu#m|}OeBzyK;96*N8ctnahbxE z#X?qo01KCH`~nyG3QPA^S=yPRyY8ve=bq}mr$2@NhV^w_cPnyzd;e?W=bj#9PPP}L zCVUtYUUI{a0ERJwAVx7JTyz8>@*pe}Xc)%?CNYI+p_wXX+L};F$1L?BLI$FA6m#U2 z)enu1Aw~m;BY_h*iBmW&q#N@G3=24evp6U9^Wrcrv>BQgaS4~Da0OQ-Uc;iqB`o7Q zRwTQDo46&sw)Hmd;I3dczlZyHfK?=gW}j1dh_zlXjSSX%{1G1G37&%R49|tr_HM|h zUm)9-QE0F!Cw+;W+?&V)ZHE+(gJVnP567=?424p87VLDVn>5~dJHKt&N}96&*36o+2{l`pgbL2#hTRn{&sE3GWd zGvpQA`7V}jsj|wSTj{QI>h$ST-F^CB@_W)>_Wg#Cj;Y<>D_aMC+#Grb87a7kG!UbO zR@!K%gSe}cMmpsfT`q(rL6UBI=yf*l(O0t06Q6!LPD&ySNR+fRDNbOenL#bY1ljB|;?Wi_sFRrwm%m2WV?O>U{W%^fCPQxKivF87=X z^fWWv=K&9$4c4>FF<;$VV3DP&e#A15dBRhkA+9#aKG&;Xuu{@0a!Mb%T3}7*OJ4E1 z6jt*z>!3Z?$pyR-u*-YSN{lzsLS9<6X`7;5(ZQy~*^`99EGQbB(>%oJ3lp#Jz2D21O?^ni5))YV6 hUzN3RvCgEk73+U7#cz=f@6Xq0rsl70E{;Zj{s)1hjpG0S diff --git a/digitaleagentur/__pycache__/urls.cpython-38.pyc b/digitaleagentur/__pycache__/urls.cpython-38.pyc index ccf04f6e662c6699b303d5110933f6bb7b32e5fe..a45d73be88877fc25079e19eb1a2c54cde762fe5 100644 GIT binary patch delta 412 zcmey$H~3%A6vX%90}A z%$TA8Lq%19q7pz+Rj{ZUR8$=(DhU+T0E=ouMYVvUQb18{ zu&54HR5z6uD5eJ%(@){62U~8C%9bUaVhB=_&X>xa%9$kt#Ih+yy-eZ^QF1`G`~=3L zIjM4BIRzkJ5hQ00l9K~E-Z)h#RRHLC6R0JoK+l*pGd44&gVm&%2Qz3|yaWY;CgUyE z#FX63JWZxsECq=rn}0GIG4ki7mKW<+ae^ql(xRNr8qCKT8KWkDU`Ya!!K~|nBs1G( yHaVaHMRJqxutiGS0hv6E0*pM!P*4oW6PWDBE++ViiJ$KyivS0s2on=X**^eMuwdK( delta 379 zcmbQq|CLWWl$V!_0SMd*-o=J;Ffcp@agc!^kmCTv#akw7Kd6^W;p=5iWloV#WzQ1N z5=l`=;pt^eQG|*r0YxQ%qRL=V6{x5xP*f5qss Rest ist von Django @@ -28,6 +29,7 @@ urlpatterns = [ path('areas/', include('areas.urls'), name="areas-management"), path('tasks/', include('tasks.urls'), name="tasks-management"), path('standards/', include('standards.urls'), name="standards"), + path('news/', include('news.urls'), name="dashboard"), path('orga/', include('orga.urls'), name="orga"), path('password-reset/', auth_views.PasswordResetView.as_view(template_name='users/password_reset.html'), name='password-reset'), path('password-reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='users/password_reset_done.html'), name='password_reset_done'), diff --git a/media/userprofilepics/Makris_Philipp_7zkFtau.jpg b/media/userprofilepics/Makris_Philipp_7zkFtau.jpg index 56f88cc67ebc879f3d38913d13d1ee48bd42acbe..d5db87e36d933865f342490877279f7500451d7f 100644 GIT binary patch delta 39 xcmV+?0NDSr=>f6n0kFAK7<9jiI;D-Mg6Y=as2g5YC9&>DU&e~zL9@|Q;2@>(6(#@x delta 39 xcmV+?0NDSr=>f6n0kFAK7__g7I;D-Mg6Y=as2g5YC9&>DU&e~z0khFl;2^2-6&3&h diff --git a/media/userprofilepics/Timm_Hannes.jpg b/media/userprofilepics/Timm_Hannes.jpg index 0b6d00cb47c49336747ea5b1d6a794ca90bfc417..b2e134e75b1a3e635e841b1bdae904c5d2a4741c 100644 GIT binary patch delta 11675 zcmY*It_t8cbC~~zC>br3l!wm}t_6~G4`=mevSx1K9?_`#)Tq&nk z!yxAQE${|(WstS-%+!56y~#>V1!$lLRip9KEJvRD zBgeaj)-G_usV9Z}8E`F#!Se*?^@>L-zDB%C;~8mU5dFJ!)dleA4I_p;Oddq3IkA|r+g)3ZNad*gf-FBO1(m~t8rhn!zIWp`LJY_Ny*vv0i+?w>VMI9`iHrNXOB+fz8sBdyvVB0oS?Db z@CTB(_2%2FM@(*F`{rLq8dHQEP4thBE1@Mv3_17Q^)mtomf~$(}nC#QJ6aM7qX)$ zTbG`>j6OO-#0HM=>K>v-jIibG4#G;IFTaRb_i1d?DR|#XpK|Un_ugh1!BBY#PTYO@ zIDaP5jdO5V3L+fgsJak9b=*L{s5;l>LDDlF}Q>P(Y0#fRqmO|jsQ;ET@+t|%m* zLamr}ED?wU5(MtD1eZP!wv1qz+UBz5J{Bob7@yqW9Uz-%QFGuHEG7l0!lxLzp$1oM z{`kS7kVRPQxi`A?bAHq_um0`85|)NrBJN*AG`Qy-+4gzJVe?Vio`%D!2uFT;bN1EK z62)W%dR5&7h!JMty+Gg8B_(r1p}V`?S70ugo4ti~7V<{n&b`@m^C&ks`M)8G|uW zF`_jo(mgdwz-C9CchrM z^RAYU$IEy(ft&K-i3_@lpw1m947Y++x*s1CgBS_+YI3EEgr{vPq0Ad`$`9reh&D`i zWK(;jH65>toq(u{WqJ#P%aDO8v767cwgefIfanA9B#|&E33NnRE;^yNMX2v zm)BA@axiso!7iqQtN}kr7~v=g%UgBbg^d7p;xfyqpRPn@BFqp26vV(j9=GC&>HwmY zk{PbkJE^T;==AUg^f;^JSUA6q?mokDxs%sxJhviF(#4i6!cxPgG1XIOF04 zUp4yjb95CKW3;tPHU*8|S+fh1cCAUv)KytIdrFU!25Kl$ZV(poBo50Q{~#m~QilU| zieXinTuV#-rG~*Fla>5~bogH{avYJ|5zOU-G9J=funrjqFCN#|s*xn)L&Z`dLwCuF zs-X2TC@uAoOb9%CRPARi-e^#L|I3A;f_fLoPK|`kTbZddjIgHD@a8uRp$4)Z8E|CmqAH~%RLygM_^ex(f z52)~Ehx*!bqkG>r)?x*9l)LRPnAFsQJ<+I-;R$xX%AhQ1{&ai@73x`EyO_im>|uzw zZU4%YRk^q58<1a2?)cfH-eaG76w!;u9^&O)Z^V=g)|M35N1_(P;5$+=sQ(O9#k|Ts>S1Tseqi1@8 zcMk`KS4{U$OU0R05|A)jEk|7=L!lxW74r=^wVn+LT1xf(M>42m{3D)4}Oz+QL^f$_Ey zO=-6|4e_${NRD#HkQUi)lKSd>?99PNbVgYiK{qt7riWkgYfD(FJxs9LfYnfV$5!IF z;z242Kp`CMv6dG1p)jUY(q7N%_Ps!EC6(Ate?&ezRq6)Hb$ZQtIZEeC7$b*X?qF6u zf6;-X#7aOf3#2tRe#-(DwbolK8zz5kFl67%y1w?rRqu=qtooDi}>C8l$ca+%Xr^!dfU6Y;?_HAS>BA|poCo8s|SG_&t?xxim zt$4BG{do1wmr^i}@W#GWVqsq|ju zy}H-WPUD~Hvv0cVTZ;PV!k$R%(EuCB(%cWYZSgpoL@osWfM%@g@2b1TiW2^xhev~~ zFUuyHCy#%NIk{j_v9|)R6^^H&K>tOJ0F32ey8o*`|EUnJoxdt{6OZTmM6^x(`b0<@ z-zchm(DnvoCz~c5;(A?eq!HXjl)v1RqDSBLaIx&}(DR|qwl_}C^MK-EXw7|{KU-Vc zpJNNk`8wCDo5pJ#So?(8b3;^|@4)e1e{g@G==r@(VaPudJV!Y)=0E4nR^Y3hmB97U z-0~AWM-9^ErC=qwETzfR;+F>mmkwVZK2~ZI|CogI{*6fKaI#LxSEwm*hYgSVvz@x8jjFR2z3x0SwZ?7M=oDe)8M@U*$RR z|Fx+ud0o|M>?075rK7{@%QSjcoQ~cG$M6cG4~~!U)?-$$$kgGZZa#@*t$k|)Lyn4g z@!Cql!=L^z*E^%OfUO@*$T-Yiv?1jic!6aM-FOC7lFWy4QC79qAnzJGk6J|>@#5Ff zy2wPPCNfz%W%QyT zy5XWPuWZ&Cwfoh|sk0^-t7FC!WEoD#Bl68061WuT_O<~tdMAW&?`YhQ6v0&UHsX6T z`XEHEX)Vj$zMSJ?5PJrjTiF0Ik?`%8_NS_TI!`x*W;CfQbRIn@uVFQmUU9~^uA(Y( z=YWt1Niyzgcsz1Xx4in98}al{mO;;pWKmnsrqS~2&xqOYcf*xGyPn3gp9n+aj*V0{ zut!afK->YSTavr|fBdZ}2j0EZWN_WTqxbjt_5Ho?hrJ7XW26T(la z-mh4fX6?BM+JY{()x_%o5v~|PS3LXx7(B?RpRLw@UU?!(UYQxG_#<6df%P#~5J~aC zqUktEo8Bj=o(MaTH1KYub(FoG}#TZTr@U15A$ z#r+ljJhYy@3Pu;aty3-;F!`_=$02F8&wLmf)-P0%kv5Dd|W}UFxJyPDm!r+ z!^<#XXFPr@RQmZ?%d|8~tmVhL>UR~lu2)RH)@G)GuzZ@;ob|%E(OLnq3XX@wL=`-7 zjuR-o0m|o@lIw*4epn&7ES>Hr5k zjIOFbx&0Jpv(R?FHXNut9aEbB!2Z9e1Ak+UJRLcjHV6Cvak_uqF5MMZY#+20`|bhR zcKkr1fHsXhBHg$Yc;d2i5Cyq?vPJ)=FR|5%(AMmTCCms>`laCk_e)1$I(7d#*4~p> zHtywhHzd&0?D}rbwkxTLhUY{0@4%HQ7r)^us+B1{6?ds*)gGkJW8f<^NmHfD?w21? zmx$O6C`UdM2Bo65_Mxp8@igjQ3>g+qKX`MN7P6%Ulb7vmLJ{T^soQxuDR2^1SisbC zS`8m-Y6Wqv3hcTBV1(?EZ@Mp+k(@1rCC~U=LPL539gkh%w8i#61RDE7y`N9o#DU7} zri4z!!N#MKZ)}C5fMdjk5JNG=B)UFpERLK4Y~1e2BXq#1KvOdLodF&gA*KJ^Dm-i` zP}z`_!BMV7LF^c59irMTPV86A8ic9hp#5E%q?zATT9cgkI369io%PX~-ch{r7uoA! zFXbH#7ExxCy}+$&Mi`G;H=kL5{<8L%m^3+&)-Y8(Ys}&yAU~zDNG!T-l!osPc}g@9 ze*-eDdxsfBoSI2qhhjB=7bLX!KitpxWh_&*4z!I0=r2fM9c3~wPPE#8?umcR`oCe+ zzh)KE%iT9*jB3@eTZ$E$o3mVh8_7gOsCXUhD}-ZhaX=6e;RPJ|2C@luyFXb-Yy(}l zm32y~Et@Ue+h*I|dRK5+BVV)@8%WeqvTq<<;c{VtvG{#$%^DG=(^+r>@>a4mK~6By z%{xuEGidU@6~wjUq2&PZEF_eKHy23u-_2PV^Y27y2SuFg$wBSli7^H$miC%*XB1mz z-1p^{;dx{UN&r|D(qBCIZCxG;OW`MKlUc@m@+}_pWk{L8bMZ`YN>YQ*Wb2&5M;&K3 zvSXl=NKq2SAIsJCc&D0Vs!0P6Z~;o)i7zp;quCG-+;%i`mZ$OWQ)|DCa>+bnDK=aE}T`*=v{C6=j3pxVnn(1Su z3s;G#Fv!`}(Y!T`vK#OT&>2)OjP|8|XdLXnZ}RcQJr42@7 zR8It9SysRQH_naq5-M3P9Ohd%eN-cUY=2D6zkuHpS3)>tVk7`5L(;A|u0VDY1C=wI zVVU=aKwX1CS(;DY%^MJh(bTIi39B4BpgKB|C+|q`s#Q!L-KMJ_0~0A*!yy}Hp}$gl*7R97X__? zCX=q-LyBtOw|oaLL1Oy!a3xEFM;R(>4v&2NY1Tf(smQDs2z|0d7A0yh2j6RuVksfx z?*45=J{{SShPCgujW-}XW3Q9-V40$KvI$VkwHDgakHUa%0|k5}ho-SiL|=8swWsi z|5S?3O(>-W4t#Nru9>fXpz_ALLb?(b(vZ0Am>^x!=fdYOPcS2u_8AJgbzHjdwf~6* zVYLBgG$q!V4s=%-L32wAGA>&MkYmR2?jGGCLYpx`7~l`$#0nM*47o~1Ja-IG9(_~} zeT?7ABrfMjaLS0I`h>YE??;ZuK`}idD3Eq0yflLV_^!q?CO&H^nE*Z1IxO?Gd!yc0 zUG9v_mS#Ff(LX{<15Lzw__`R!oR3R0?yRGB5eg{)%N2J}Yw|K-QL()YL#W<3FS5Sr zo$;@&O+Tj4&yeHt7mO>rU(Hx1y&^aI$b^xZG#9%rvdr88kfIjdsk`}?Ccnb#4f#uM zb55@SgKaM#-+&fgdR=?ZB9JxZiM7pq{kGynn+i1wALBGL2iSqo4R_+%S3x2n^_qwpiasT|GZ>r!L zaxs-L?9S6YBsA8V)bvHN#!9P6m|O+ftH1{_6N(Uoh$M})!HZdJuMs~mpjE8?v`US;yH-xafk|Ec_Rbx#>si(<& z=0h)w^|^r-Uf=Hud4IvfzBi?y6SmSngDWl(ex?40nP-Okotb(fF{idNCN|m+FdR1^ zN;4h)QpWqAUgDcSLG;{!@=1Pye4jK{LH~Saztl|*`C;65Ep0)RU2#$wnlA73Qt?2u zWod&9xjki=2LQOrK8&R~vZ@1?Iyq#x(rH~cAVy)eS2a7$Z$$@2hFmX7WS=wxswY|$ zZ&iO)MTzt|lpsZUZa}=JFPq<9*oFR~J7a>3hvZQ-mV9~n$j^0IE9xzu4v#QV1_tS=zi7X{nol( z_HZ9Gof{`E8|#58E(Ng*k=KP*aw=eFM8RTti(Ywz{6%q~;{IVOY}`_pU0jGe3X{;0 zyCnyJ8&N$Vai`g9GQZH_>ZZ|0K+fD*HQxM#V#a5eJKaYi$!0-RlQtvX7t#te@w`vh zIi#(n_%2HdNzd!=!s^Qs^>^uQqgWM5V{mjOLq{gxk#ktl7-r}eeSd2DjA=$k<4sZt zY2HLZopT=f?QRRgci4-&r}5AQy03HEj%WkizPZ+^<$j#+9SmR?Im}ch;Ft%*RiFj=?de&d225) z;$>%>lfszurS#H;({13y@PIfm-muS5RxkO_Bz1__vl_I@6d4CMv2=1vkhBaO<9N^3 z=gHF-UY0iQlkoX?&OdD;QoO+T<`@7FyyEUwp34id7(MX!_4E0`BxCK~7)0XKGqUES z)D)SmAO!O-%mCRz-GsuELXz+_@nJCxn9C6s)UUoc?;FsquMgDPZQp0L)#XZQ-GFd* zPiU%KepU4jQ5fHHt$6a=U}hzNex&BNOWB`m?;~3dA)HfuJq7oBUr3`^H3fjm7+U4u z%*d*^OUV_DfX>5+v6EZO@#6M0dr|GBepq2V+~>@DVZ*?LcDkiSxD081ei7f=QNfL~ z(+MlHES_=nDe<=SB*2gh)G9DBUF+-OEn}4ruh>9AF-S)ZMgXE2dbp!mn5>T9w=X#2 zU9_tI_}a`vpr}$(uM1Zc7vNVW3eXD^qSF~mzx}-eoPx*zSzzvghVWvN9EyZMl*!3@ z@@`$yTsULMXE4yY>yl5^RmI|t-0lZwPnWZu!(-V*ss$wrykA--7cywyLdhi;#L*qb z{i2s6xr1%zGVe0)vT^iqpn8-^zbnorgVPIE=m-b|wR(6t%}G4X0PYy7A@}qB(1$HN z(uEHjx8)eQ0|RBy^NHF6G(s7=bHxKa^9+xFnQtAX+r=hM70Yg9jG`OaAyawV8N&6b zTPldvz)5r8Tk9H#_hOb1KrWR7qB-gY~{3y<3m;oG7>qC zfOzJX$piDGZ7cmFz+~1Z<@|SL{f1kER?chsh$74+9QD2#KAh4-EOQapb?MYHF7zc( z0HcKel*sVJdRq%RmMvrFTN7)V)y&g#7lo?rqYER+| z^`{c;db=!|dVn-=#d#r@YN^4e!WNMJNUqa=DQPs4fw2lOY0^KQ>G3Cu_u8*@{54nH zIm|$T0ZwAca0U|9S%kUC9R+pq1XadzjHEe{+BmaFn(zJMKOLpKz~`WULA|#7SW+AY z=k@K2G6Uw@QC4IFB&&9ZLI&o^(PDMHgheY)D7HiyUpG(iT#w&?r0#ZgEE8$<28(W$ z%h5`6!(C~fNvuzEm27_Xa727`7C*oNs?ZOl1t#`fEA#6^6xEZ(v}Gl*Q^d=F(c|S` z_NgA*x^ej5-WGfAUTU0?j7}cU%XZfx`m-b!mgGtGoN>)6r*v$-ewUN_r})=}-tfKx(jmZlgOtW% zW);~0^{loQK4Pu0o;6Q)UK~RADSQ;1)v_zwmEj;A=GpeE59U1I)1Loi2Kf#D!`XwK zO+a-IaX=XQ8WW|_5$omtrL?d%u9C0;mjvYWZ zQ1nm`5q)vA)%PO&p$Vv-O#{i>4(}5cf=^?8S90Js6%5fuLxAX0p^d@FfR%m5ej~VF zX5VZd%ownL(Qie>?MnAEDkysHB5R7bw}7p%pI1rd4Eb2)`*)$9r*jzODn{MI!L&IP$1PHxo7QB}a$KB^|s&A4l%Cx?I6LhBdeIndlbxsEZI;o(U@ zEFQ4%Edk^m@BkKvboF4z)KBJ4_AW=#nV~uAfyA<^Wv;ga3;kx4A3kNea*S&DU@Y`z zaNF;dKh=oCf_;v_6i4PeXHtoV$!OxU=xz}u%>xFMLk!l7;Ou6_k4)+r`5u^d{mc>a z5AK}nObS#!(>kQ;1R9=c3&>y!l2Q}M!LLIUKn%wzb$U1zpSM(={T9;wJN?6bMKKod zNPwG8@T83$$^k;iUYBC0L;Y@_gT;v2Br6_%1}EmGx#stPWMGn`aztos)0mK4-=fdT;3Z6|Jna+By$h*`Nf#Arpi0l^@=@N3-s}75qFPA z5Lb1m(O4l+-KH_pFUC?T`kG<+{im}GaW{888$KHFm7PlC=n1DYJ0yQ8cqzh)t3X+a zN>15`=%i30QIFz-LmauZ!hPJbxK{n=5W3pVd`sOCs$r-rG;!xym#L@Yk4NL>`ZgL8 zgf}2BNW&(X2D*AU@0!sMxS;N=H~gBOp>R}q>az-5Kg0V~Ic*xsz(0$qi6kJRp+Zux zmA+9D?iCGS zdUzjVGy>3+2aPZOZp2G}q$0SR#klcOCU;G{_n88>n*#w8gp7ypWI1@%&Ml8@QU{RtDi{>}YvwTvp&pw`oGDbR2J`+$cMlr(4P3)L#Do+Hj9dYzgc3n%J; zdV^?D=ej!BFcAxL9UaG(95FUttV2|QpcI{CW*3ru^}qL~Vb^T+me*51USg~dst}g0 zT+T&%Iq-wM>;SgR;_ok?yFaP}N(8R-H_nZwMu+H6QbgUdkj1t6zbz9lH}Mokl+#(5 zCg0TW-(G`44R#!S^M=$nX*}h9@Yux9W-(vBur@`m&~x?lH0X*6TZn&EvOYd3+GP1A zWxcq05+EvvJ6EVKz|c2xLHDaH@)0_F39hOfV*qb{CjmSEs263U$kJE^ko}25yl=f8 ziQ+R`OQRoteGQj$`_&=m_!_5;D`7ATYEV2UaHNl~F56$sP$_ZHw`K5%hUziNS5J%R zUry@OGLM?tz5CIjj=74S@vCJ1T?|g&uWy^21u-_Yu&n27#$0fPTn-=`Xn&^GED=$; zQKaTKFfx_VEF(!dKZJL^h`4dSUT}BII80 zeB^mZ?$%4bhNG$~;oJ0+X?O0XugdeEP#tPu*nVu=D~rd@04y*XD$@+kU3DaGTwT#v zg6;^Ox^;Cv4qk>g7)1AKQ7=}sDUU!F4o=Y~h!a#%`;m<1BhTgl{-#ZNUdSF0AiM10f#(&4y|kylBlzX+EY-%AM8R=lO6CPxIt>RW0w%?1i@M=@XoWWQ;@qp~A+ zkF%=qnsU2iHkYEDDpSDJ1^xC0R2%g2(hGJLt0nw17w5z|&9pvYx2x2=SGsR-A>S1A zJ90Q#+@cR<50tr>PuzY#7(uU~<;1%N4*oF0SALPHy?8L>fN^Qc=M$e{_IhM&WAtPh zAS*=Ju~F~ilKCEXS6~b{3tq$^-5kg79?Br>c*1^GtD-DKxSkf@S;?AudVptt&|3@( z(ocA@3^o#^<8;l;f=)2;JSf)pn30J#_~GRl8yjzK05tv%iJ@?OQ%ofElSM?nO;HJB zG_pYQv+~VbddD=Kvp0uQrA3v!OeL4lso~@kDWmqctdo?wzmSHgkJ6$3ypp@y5r_Sk zToNhJp^kZ~*JWmm2?nK!DZ=<)O^!?6u+D=RFgxh4N?Qg(Q@utbBh2&NmI+e>?V=wq zC}Pm|xIl2hQaXk8@JUt0oDJO>VudVi=B?-ByjNNzvdaP#hj|oIj&Vqr6UJxC1p8`} z$uJAdU$63sjPGjOzmTCIflzuA3t_eW7WSj61Z4&pP0zpa?xQEB*u^z<=s5M7Ra-MG z89X3%7U2l;=2+G9(B!nou}5OD1nU5DdAKQm7e1(_E(IqDlMnDz;hAqdm7S3?-}o;N z%p;&loEEgY#&HZH?cE7 z9_g=^L()=KwL9}00>9|}MlzSr;ptC@FIQ=HaF&0tJ#47i%xhTFz&Wgnb^&C@mv=4R zB+>0@_46~1)g&yH_WTSFXeyMpNz6TB#ei%kBNZCIIqU`L=_tTFv&bDH^JPu9+iCwq zT;TQI|KYS-*VAu`nl#0rFl7mb({*IK-pmsyH3_&pLYy*lKuddjCcG*)iLxT z9|{iFZ$On%hYcGs*TR!=DL^_|x=YL?cCT!oKG477odD8MD7OWp)J9D9%7ehqs4svg z?fk{!=H>z8r_d{>xsl6))`per+{~o_vvNE7=BmV#>+s*~tzUCRdR(RRIh>hPWh(brLr5Kc*Xq#bEHf%xr?sPXcecD zw>?}Rwl;d`3=DGMurcy@ zHJo8fWop8r+lNo2OTwI9Vp8CgbZ@10nhm7ag-Q)7Z#UP4?F+4U7A)iQ5WH2 znaFF+@KvN?8*xB5GNlj!6 zueJM*Y467qo3A*1)+#u!SyHHaFOBL%b1BgD2sWnL_&>LCu~N^{^+>)5V+cg?5Zr(w zyl?9Yu77X7cC^P^*??q3l^PKkzmw2+?nmNrDq#OOUdcc15^mq+dH9VC1jgQ7_c^2k zIROqVCccO^HV1pq&eJ@vf?x_Lrvm}#5m=`O!~)WfJC0PbP-203^Ig^kh#ut;*-fS< zg$#js@G8KsgQ-#AY==NWIYKvwE|{huc3rgS4^SHWpbx4rF2W)hX@j-j*Ls&dfflV4 zsJDjYo6qvQN(K|BME`COr@G+F&jeKICa3RDYorj;855FvG^JeHz3RDMl%bsv>ci znyk)_rI+W8qDEXJMn6Bf z9+$FB&M!w?#Kgd{qx_ybp^IfUdloxN*%}wp#)V1zU8~R;!fwQXL3^Q8$G)GXwRYPH z?w5N^8c|SO;$NFR+~U8O%pX&I*!@u>iB rvJa7B5_3=<aB@0u27l{>5vg+G+|2wx_W3j& delta 11673 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⪼>NXAT3UwMV!&-1 z`w7G7Zygf*NoA)nzv#Havg{uezfC94B*%Dj4}LGbGtf4RR?s^;F3aTD@GT2CQ!8Q5 z|Er4Du<^$|F!h-pBVA57)A!;${sPo<^&5VdV=6Xa;dH?NT)D10sa6k?K}|S*zDpbX zvgoqxETx8swx?xD0j{-WHhzY#%uREX+HR3Ul}=i|inEnh@;@`kfp%-g zWqAhQF?!Y64cU+Jgma(J9OO-fce`6~5RK*K=%J>J5)+aC-TofSVi+AsQLuv(-401cK^u_nf~9obp?kw>N+4d&93WW!KKM=o5pb8C z*%lFVEa0Yai%zb@Ppbx|!_F7#NRC-`8wK;q>7#y(iUJ3Rs zyTXPQTze7N%jT3bKp?VXs_{3g$V_Ium0UjTX`4aRZ=zEVO}`!%xfQiSP!IZHlw119 z%vC{76#1$+-3Zz9_tj$oLi?mAc+otK6VvwZqU^76wR``B!uHtfUMZ^;aNRJf52942 z#=8hZ$I%mPcTLw+mTAu=txyVENNKtM7G(B#*>#Zm$`MTufca_pXQ@l>uFB>lFAhy` z-l&$?%lQ<>`8}lhxkRv67JFjCcht}_JiH(mjCV0nmwm4E&b3QQPOSB$#(0G`VX*R^ zTx*c5pNs>`c)m+Dtu7XxI`rk}zt+f^g`LF4h3*oF{kZWzVG`3c{fFMecR&0x=xAOBx?P(CaE)-PLHFI~6$|EKjHomZQ;= z$HQcZ7ZB*!VXw=DN|sGu-6yUTwJuMam)p5szNS4Yd*MY&Mls)fPsE%9I(me3;eGmQ z$o4FL{wC(as0p6)z{B8@pS*wz8nLmpo-}!5YhZdIC;8FvJRg1 zUA`I6h{Ya76*wu|KJ2;Kyh5JCFPeNA)z8qchQbxY^-}Jx2e`NRNF1Vok~4qp(c~r5 z={)3yid?B3w(?&wl?KcghbyZBkYGwtHUMk+Y0bHrbgT1(OJSACfNL;q*b6$YUx|VI7lsre}iPM5N?R zU9dQ85l-f!H#rWIAN>70vFsW)VIU{= zV%f6})&z#~2JjU=dHD1pn%)a-cXQE<*~6w%K#3~}IMngJ&i?xKwR*c7ZHXp?sXrD#JQ zF;!q*F;`UiYm#`T1${5r}MHZ83qo&Z1XnM6W^AX}MqzLDZRzZ53b5*qx-~EEvkp`rLsZ>L zvEsFEV(*I2kQJ_Gbd`7qu0EoqQ<1^_X^g=26(7r<8x0Kis}ii+z2%0D!BoTg7b>#R>#P=m4oPn(Bo$6N;r*Ed~*q zX5MOSaZSfHsxljl3Sr`;H47SGG0lHhlcA|uxu{=|X@Q$?H|D%s;@$9VQqxaU{-!e{ zkM^6V=quY?st0!WWr&a#h@fG#{eo19JJ(O@iN==BwG@y}5MM%ZTrv@Nm zm?>xh*`=l$leGgvQiF<0C@6R&R=$hkJy$@xTb(xYTX_d`ZV#~?2>RAAa*53c@*bRS&#q# delta 698 zcmV;r0!97MngP$60kGg60mif89vuP!ZL|L%KNWxJn!cZ`+Ka6^?kkv2R*kcdVmgEM zphfXT0*U~{tetDb`ZtH;-Kk&23*#ancSzqw9M_TfgW|@oscwf%L8jZD3n|?zf55sA z!}G5`o_Cf;l1FJIW0qzll6}dbc0FHN_|DI|Jr_^dJ5O|Se*_=Y*PH8JBh_`;jGC4F z*B*a}&4gc~js;}yrW2Y6Va2J8{i&s}DWjff7~{ajGy+a3-9;JsuqjwX(I)N(O3;Qp zVyeKrVy>z3*Cg>w3i^!OQ)jJH(yh(js|;hFX_r$OWny}Eu9xBFn%BM{jzYObZb_g_ z_3sV%Y+G7KJc-B|=DW>2VhX5;64hfJ0Ox-dcEo<;KBtOpf-KXQo+-4Wtsxj%wULTL zaD(@4_q~s;W5~SMZz3#+Re&l+2(DiC%-K({jKbgQ+tb+A6=BsKbZTGSW*n$KhN-%h zW5sIR#ora5AS+zV=_>FKTzy4Irz3;<(;0#4DnFMzHYz}wx6^j9>O~8K#`>B#koAA& zfFfAHZdlZ-5Iq*G2$4qY413nLo1(q;C73jJ{kt>&0D!F{7cCJoYAWo_veRe3m&<`h z0r{N$)&BrKmDg$7J-(coQMyt-X&b5k00CEEw~E>&iWCTo&;e3oHPs4gClyMrS_~sJ z&Aimu;+u|ZRAe_86vM?xY8EuWW14@jCqq)Rb5Oq^(*ri(Z_RkO#k=6zrKX;z{Y+*@ zAMH0!&{wv(R1WSyR0WAXg1%$%POJU1;w$U?{F2Icdnn+3l$#NVX+a{Aijj+xP7FZB zFjCM1vr9}hCu#oX)w(<_>+#g~(5%sKL$)_CyK&*Rq gk@4!{J20B2mmS38{#r!)GxZohr4{08v)4Fz6hkXtMF0Q* diff --git a/news/__init__.py b/news/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/news/__pycache__/__init__.cpython-38.pyc b/news/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50d48910f9276b78ff19724ee23c7cfb22999dfe GIT binary patch literal 153 zcmWIL<>g`k0)w)5u^{>}h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6wx*(xTqIJKxa zCN!@oH8Cf~B|o_|H#M)MIL6&GBqk*@J+mY+Cp9r0C{$V$lb2dv91|a(nU`4-AFo$X Vd5gm)H$SB`C)EyQ?q?uo0075QC6WLD literal 0 HcmV?d00001 diff --git a/news/__pycache__/admin.cpython-38.pyc b/news/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86929763fbdb90a6011000e752af965f9eff6ad1 GIT binary patch literal 264 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 a*2Gy#C)cc36SA*6SmZ2x1?A?T&Dl4jXhjeJ literal 0 HcmV?d00001 diff --git a/news/admin.py b/news/admin.py new file mode 100644 index 0000000..a0137d8 --- /dev/null +++ b/news/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from .models import News +# Register your models here. +admin.site.register(News) \ No newline at end of file diff --git a/news/apps.py b/news/apps.py new file mode 100644 index 0000000..5a7b92d --- /dev/null +++ b/news/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class NewsConfig(AppConfig): + name = 'news' diff --git a/news/forms.py b/news/forms.py new file mode 100644 index 0000000..497ac48 --- /dev/null +++ b/news/forms.py @@ -0,0 +1,35 @@ +from bootstrap_datepicker_plus import DatePickerInput +from django import forms +from django.forms import ModelForm +from .models import News +from ckeditor.widgets import CKEditorWidget + + +class NewsAddNews(forms.ModelForm): + + + class Meta: + model = News + labels = { + "name" : "Titel", + "go_online_on" : "Veröffentlichen", + "go_offline_on" : "Ins Archiv" + } + fields = ['name', 'go_online_on', 'go_offline_on'] + widgets = { + 'go_online_on': DatePickerInput(options={"format":'DD.MM.YYYY HH:mm', "locale":'de'}), + 'go_offline_on': DatePickerInput(options={"format":'DD.MM.YYYY HH:mm', "locale":'de'}), + } + +class NewsAddNewsEditor(forms.ModelForm): + + class Meta: + model = News + labels = { + "content" : "Inhalt" + } + fields = ['content'] + + + + \ No newline at end of file diff --git a/news/migrations/0001_initial.py b/news/migrations/0001_initial.py new file mode 100644 index 0000000..859bf21 --- /dev/null +++ b/news/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# Generated by Django 2.2.7 on 2019-12-09 17:02 + +import ckeditor_uploader.fields +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='News', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(default='', max_length=200)), + ('content', ckeditor_uploader.fields.RichTextUploadingField(blank=True, verbose_name='Inhalt')), + ('created_date', models.DateField(blank=True, default=datetime.date.today)), + ('go_online_on', models.DateField(blank=True, default=datetime.date.today)), + ('go_offline_on', models.DateField(blank=True, default=datetime.date.today)), + ('last_modified_on', models.DateField(blank=True, default=datetime.date.today)), + ], + ), + ] diff --git a/news/migrations/0002_auto_20191209_1802.py b/news/migrations/0002_auto_20191209_1802.py new file mode 100644 index 0000000..ee73a8a --- /dev/null +++ b/news/migrations/0002_auto_20191209_1802.py @@ -0,0 +1,34 @@ +# Generated by Django 2.2.7 on 2019-12-09 17:02 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('news', '0001_initial'), + ('users', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='news', + name='agency', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'), + ), + migrations.AddField( + model_name='news', + name='created_by', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='news', + name='last_modified_by', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='news_mod_by', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/news/migrations/0003_auto_20191209_1828.py b/news/migrations/0003_auto_20191209_1828.py new file mode 100644 index 0000000..ebba84d --- /dev/null +++ b/news/migrations/0003_auto_20191209_1828.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2.7 on 2019-12-09 17:28 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0002_auto_20191209_1802'), + ] + + operations = [ + migrations.AlterField( + model_name='news', + name='go_offline_on', + field=models.DateTimeField(blank=True, default=datetime.date.today), + ), + migrations.AlterField( + model_name='news', + name='go_online_on', + field=models.DateTimeField(blank=True, default=datetime.date.today), + ), + ] diff --git a/news/migrations/__init__.py b/news/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/news/migrations/__pycache__/0001_initial.cpython-38.pyc b/news/migrations/__pycache__/0001_initial.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c9082c06f4fc2355e171918350a11d34ef03a70 GIT binary patch literal 1016 zcmZuw&2AGh5Z-m1%_iB<^as=f7bJwpr79N=2%(}@t$Jt=&|IQLD>pOQca-l&#xU0<>e2>>dMs2)e)Ur&^qFZ>l#P}d6QI03 zX4VNbE7eJwC%INqBW?%=|33W)0Bmy~5Xyl>-vK17^y)_#q)h(06wi4$$ zQ%HK0B=2WJxto*KkXn{hn~eacr~&m*Vquv3RC~7~64>VMSeS*n zIy^&=Wp0w$ROJHDm`&&X;Ef!PPw>3#SFqISGIWnhU8td}x|EJer`dX$gP7Y^KE>rT z{N|ab^s!3(Iof>@_o*30+}CtB74PN4*@Va~;)BDJ7-T9-p-`j*%}lJR#qsrvj<>hB zpC!wJx2ALB{+*Ck@z5!ZGtRls*oNQr*Zhse{LTLIf0bviVK;A8x;3ikHjmsLACs_6 m$b?SwEjX=Mtca`Puj^Q7J?9<1Tr}pDnjIW%y@Bj!@#wn;B%j5a;eDkx}+shcy@6SKqe~TFV9+dkOlX5_}T@V8Xkzsjw zxru6?^IGI0VkZm)#9tW1$gB8DfWbQ=M*X>qm71XxeS?-KQ}r z2XxytF=TlJEawoFQ7$m965t?kRE-HEttM3l$u)=3wIKfk7!z9RCvX0v5M*reQ|qV8 z<#Hvp)ty$xC6w7u%SJZVXp8imQDky%l>OkxfETJa-CR()p+sp_jg%+wUptg(Y3|KI#i}OYPNliwrh)%*JlOjQg_OrD#_Hl zBFv$XYGU#^}#eX`hHy0Gl9hIU3Q75pYn;)v6k{fTb|?>uo2 n$>%3fDO)xRI3L;@S{efG>b#X6hv@Xh?Vw(U&f9>JMl literal 0 HcmV?d00001 diff --git a/news/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc b/news/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87961dea6ded3b2233c303918f3be4af93c9a8be GIT binary patch literal 993 zcmZ8fOK;Oa5cb=SL_NR^mz`ht~qJdbZ?J>Sfz(eO1q&5ys{g_frMAmjEypSFWnZlmBD z*E4OVhq_L>kr^{HG-p<5RkoSgp|h`Xi`$HnER%dH zTZZyy$yCH;Qsh!Ovw}k=4=04Xed=iJ;FVucfEMap3k|M^CO5bV)>j*x)cvMU&CmlY zt5kB9PJKXtKb@ufK*2uDG~=?QB=0 km+dPO#6xP5{^F+HmG&5Y%6qmN+H;zXq%8~drtX=40W5SAdjJ3c literal 0 HcmV?d00001 diff --git a/news/migrations/__pycache__/0003_auto_20191209_1757.cpython-38.pyc b/news/migrations/__pycache__/0003_auto_20191209_1757.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23af06f6df2ba7e3da1ff030fddb270547a74298 GIT binary patch literal 797 zcmZWmUu)Dr5Z`1se=fbVeNq(t0QYiSTcos<($as5ww3k{Bt(|n?OaIMBy~536nxXy zeh|OXzWU^YegHx0Y_7EhH_S5g%k0ejelza%B7*1V=U*T8T|&Ow;Nf8y?4s!{yaW-B zB&8EOj`dyXmNcd%i&+~}>Basr5lnbriSU3H!510_f?klm{{!EXzGFfSO_Nud?z<)` z^Gu~pURT=qWi3GJ)2YpScsdyDqUmkCfW(dOMuTmfr$l zE$(4SDf-JM>6 z6KMR>*hfi{EQIXZS}cTVP}8 zGMJ5DsTR!}x2N&@u1;l(>!QMb%|<|BOQ8*%XT!Dzd12#vkGFJxXXY^hdvpEa_491g zplPy=HYingT5r1wb=zcTZ`T)AhiEskgV3*(;2khFP9 zCi3~8APhWC-_h>_@4By>hUOtv*%6dd=k*NE`(gV5`-1z9Z@ee2I(l(K+e^nog`k0)w)5u^{>}h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6w$*(xTqIJKxa zCN!@oH8Cf~B|o_|H#M)MIL6&GBqk*@J+mY+Cp9r0C{$V$lb2dv9Fv=wUX)mpnV(l2 g6Ca2KczG$)edCEXCP((0ICowHUIzs literal 0 HcmV?d00001 diff --git a/news/models.py b/news/models.py new file mode 100644 index 0000000..4c866e3 --- /dev/null +++ b/news/models.py @@ -0,0 +1,29 @@ +from django.db import models +from django.contrib.auth.models import User +from users.models import Agency +from django.urls import reverse +import datetime +from ckeditor_uploader.fields import RichTextUploadingField +from bootstrap_datepicker_plus import DatePickerInput + +class News(models.Model): + + agency = models.ForeignKey(Agency, on_delete=models.CASCADE) + name = models.CharField(max_length=200, blank=False, default="") + content = RichTextUploadingField(blank=True, verbose_name='Inhalt') + + created_by = models.ForeignKey(User, on_delete=models.PROTECT) + created_date = models.DateField(default=datetime.date.today, blank=True) + + go_online_on = models.DateTimeField(default=datetime.date.today, blank=True) + go_offline_on = models.DateTimeField(default=datetime.date.today, blank=True) + + last_modified_by = models.ForeignKey(User, on_delete=models.PROTECT, related_name='news_mod_by', default=None) + last_modified_on = models.DateField(default=datetime.date.today, blank=True) + + def __str__(self): + return f'{self.name}' + + # Hier Path für Templates des Models mit Parametern + def get_absolute_url(self): + return reverse('news-update', kwargs={'pk':self.pk}) \ No newline at end of file diff --git a/news/templates/news/news_addnews.html b/news/templates/news/news_addnews.html new file mode 100644 index 0000000..b00e2ff --- /dev/null +++ b/news/templates/news/news_addnews.html @@ -0,0 +1,18 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% block content %} +
+

News erstellen

+
+
+ {% csrf_token %} + {{normalForm.media}} + {{normalForm|crispy}} + {{editorForm.media}} + {{editorForm}} +
+   + Abbrechen +
+
+{% endblock content %} \ No newline at end of file diff --git a/news/templates/news/news_confirm_delete.html b/news/templates/news/news_confirm_delete.html new file mode 100644 index 0000000..f51ccaa --- /dev/null +++ b/news/templates/news/news_confirm_delete.html @@ -0,0 +1,19 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% block content %} +
+
+
+ +
+
+
+
+ {% csrf_token %} +
+   + Abbrechen +
+
+
+{% endblock content %} \ No newline at end of file diff --git a/news/templates/news/news_management.html b/news/templates/news/news_management.html new file mode 100644 index 0000000..ea239c8 --- /dev/null +++ b/news/templates/news/news_management.html @@ -0,0 +1,51 @@ +{% extends "users/base.html" %} +{% block content %} +
+

News

+
+

+ Newsbereich verwalten +

+
+ +
+
+
+ + + + + + + + + + + {% for news_single in news %} + + + + + + + + {% endfor %} +
TitelErstellt vonErstellt amSichtbar von/bis 
{{news_single.name }}{{ news_single.created_by.first_name }} {{ news_single.created_by.last_name }}{{ news_single.created_date }}{{ news_single.go_online_on|date:"d.m.Y, h:i"}} bis {{ news_single.go_offline_on|date:"d.m.Y, h:i"}} + {% if news_single.created_by == request.user or perms.users.news_management %} + + + {% endif %} + +
+
+{% endblock content %} diff --git a/news/templates/news/news_single.html b/news/templates/news/news_single.html new file mode 100644 index 0000000..228a5d4 --- /dev/null +++ b/news/templates/news/news_single.html @@ -0,0 +1,15 @@ +{% extends "users/base.html" %} +{% block content %} +
+ +

{{news.name}}

+ Erstellt durch {{news.created_by.first_name}} {{news.created_by.last_name}} am {{news.created_date}} | Zuletzt bearbeitet von {{ news.last_modified_by.first_name}} {{ news.last_modified_by.last_name}} am {{ news.last_modified_on}} + {% if news.created_by == user or perms.users.news_management %} +  | Bearbeiten + {% endif %} +
+
+ {{news.media}} + {{news.content|safe}} +
+{% endblock content %} \ No newline at end of file diff --git a/news/templates/news/news_update.html b/news/templates/news/news_update.html new file mode 100644 index 0000000..bb7a26e --- /dev/null +++ b/news/templates/news/news_update.html @@ -0,0 +1,18 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% block content %} +
+

News bearbeiten

+
+
+ {% csrf_token %} + {{normalForm.media}} + {{normalForm|crispy}} + {{editorForm.media}} + {{editorForm}} +
+   + Abbrechen +
+
+{% endblock content %} \ No newline at end of file diff --git a/news/tests.py b/news/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/news/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/news/urls.py b/news/urls.py new file mode 100644 index 0000000..6e3ca0e --- /dev/null +++ b/news/urls.py @@ -0,0 +1,18 @@ +from django.urls import path +from .views import NewsManagement, NewsAdd, NewsDeleteView +from . import views +''' +Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben! +''' + +urlpatterns = [ + path('', NewsManagement.as_view(template_name="news/news_management.html"), name='news-management'), + path('newsadd/', views.NewsAdd, name='news-add'), + path('newsupdate//', views.NewsUpdate, name='news-update'), + path('news//delete', NewsDeleteView.as_view(), name='news-delete'), + #path('ajax/loadtasks/', views.load_tasks, name='ajax_loadtasks'), + #path('standard//changestat', views.StandardChangePublic, name="standard-status"), + path('news//single', views.NewsSingle, name="news-single"), + #path('standard//area', views.StandardArea, name="standard-area"), + #path('standard//task', views.StandardTask, name="standard-task") +] diff --git a/news/views.py b/news/views.py new file mode 100644 index 0000000..92a0494 --- /dev/null +++ b/news/views.py @@ -0,0 +1,121 @@ +from django.shortcuts import render, redirect +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView +from django.contrib.auth.models import User +from .models import News +from .forms import NewsAddNews, NewsAddNewsEditor +from django.contrib.auth.decorators import login_required +from datetime import datetime +from django.contrib import messages +from django.utils.dateparse import parse_date +# Create your views here. +# ALLE STANDARDS EINER AGENTUR +class NewsManagement(LoginRequiredMixin, ListView): + model = News + # Adding active_link + # Loading only user same agency + # Change context and return for template-data + def get_context_data(self, **kwargs): + filterdate = datetime.now() + news = News.objects.filter(agency__pk=self.request.user.profile.agency.pk) + context = super().get_context_data(**kwargs) + context.update({'active_link' : 'newsmanagement', 'news' : news}) + return context +''' +class NewsAddNews(LoginRequiredMixin, CreateView): + model = News + fields = ['name', 'content','go_online_on', 'go_offline_on'] + success_url = '/dashboard/news/' +''' +@login_required +def NewsAdd(request): + if request.method == 'POST': + normalForm = NewsAddNews(request.POST, instance=request.user) + editorForm = NewsAddNewsEditor(request.POST, instance=request.user) + + if editorForm.is_valid() and normalForm.is_valid(): + normalForm.agency = request.user.profile.agency + normalForm.created_by = request.user + normalForm.last_modified_by = request.user + normalForm.save() + editorForm.save() + new_news = News() + new_news.agency = request.user.profile.agency + new_news.created_by = request.user + + new_news.last_modified_by = request.user + new_news.created_date = datetime.now() + new_news.last_modified_on = datetime.now() + + new_news.name = normalForm.cleaned_data['name'] + new_news.content = editorForm.cleaned_data['content'] + new_news.go_online_on = normalForm.cleaned_data['go_online_on'] + new_news.go_offline_on = normalForm.cleaned_data['go_offline_on'] + + new_news.save() + messages.success(request, f'News gespeichert!') + return redirect('news-management') + + else: + normalForm = NewsAddNews(instance=request.user) + editorForm = NewsAddNewsEditor(instance=request.user) + + + context = { + 'normalForm' : normalForm, + 'editorForm' : editorForm, + 'active_link' : 'newsmanagement' + } + return render(request, 'news/news_addnews.html', context) + +@login_required +def NewsUpdate(request, id): + news = News.objects.get(pk=id) + if request.method == 'POST': + normalForm = NewsAddNews(request.POST, instance=news) + editorForm = NewsAddNewsEditor(request.POST, instance=news) + + if editorForm.is_valid() and normalForm.is_valid(): + news = News.objects.get(pk=id) + news.last_modified_by = request.user + news.last_modified_on = datetime.now() + news.go_online_on = normalForm.cleaned_data['go_online_on'] + news.go_offline_on = normalForm.cleaned_data['go_offline_on'] + news.name = normalForm.cleaned_data['name'] + news.content = editorForm.cleaned_data['content'] + news.save() + messages.success(request, f'News aktualisiert!') + return redirect('/news') + + else: + normalForm = NewsAddNews(instance=news) + editorForm = NewsAddNewsEditor(instance=news) + + + context = { + 'normalForm' : normalForm, + 'editorForm' : editorForm, + 'active_link' : 'newsmanagement', + 'news_id' : news.pk, + } + return render(request, 'news/news_update.html', context) + +class NewsDeleteView(LoginRequiredMixin, DeleteView): + model = News + success_url = '/news' + template_name = 'news/news_confirm_delete.html' + + def get_context_data(self, **kwargs): + context = super(NewsDeleteView, self).get_context_data(**kwargs) + context['active_link'] = 'newsmanagement' + return context + + +@login_required +def NewsSingle(request, pk): + news = News.objects.get(pk=pk) + context = { + 'active_link':'newsmanagement', + 'news' : news + } + return render(request, 'news/news_single.html', context) \ No newline at end of file diff --git a/orga/templates/orga/orga_main.html b/orga/templates/orga/orga_main.html index 97d75f9..6500efe 100644 --- a/orga/templates/orga/orga_main.html +++ b/orga/templates/orga/orga_main.html @@ -16,7 +16,7 @@
{{ leader.first_name }} {{ leader.last_name }}
-   {{ leader.profile.get_func_display }} + {{ leader.profile.get_func_display }} @@ -67,8 +67,6 @@ {% endfor %} - - diff --git a/standards/__pycache__/urls.cpython-38.pyc b/standards/__pycache__/urls.cpython-38.pyc index ad0fdc84377bacaa152d01c14fab37d12661dba7..67f12f14a70361083920dd8236a8b0d78441814d 100644 GIT binary patch delta 22 ccmaFH@r;8vl$V!_0SGL5-o-|48nu5SD0JmTV<)evzR|fiCJ0q)UgQDAFcKkRch8co9?xw2qdk$dXG+MckoF zyZSA<^iBE=QBvq;U1(kJzt>GiSKwNX4hPE+BSKT1x z;&B1;Jls@XV$w|#)lIZ#Q!vznBzf1+LYIKM4lj9)MXCVUl$F5Blrt%azN&X*+NEURNS%rbR`839+lKcP@B3zG64^z`(rBmaa!w>O%E& z)iu|gYE8B43g}D)Z>p+bv|JcxnYnIPvf zJ~_RLfoHs?cuj^-BjP)zWqkkG>KfY7d5nSi`09zb|H?J=NCU%SEqVY09OG K!m~ZQ-}(#FFD+yM literal 1360 zcmZ8hOK%%D5MEL%X;)fXcC7f3K5~sNs%)gl13?kTk2GkV6t;9(C?F^ez1j6@S0z_X zQF0$94B$S)(mgcdDWvHU9X z%RodcSxHvmmX)oc>=xRzF9@Evjog}OC%2PEvYu?fI&4_0&Hu@_O8K3eaua2#`Q)Ys zK3&KoA3nRF5eYZpbHwbf_K&Xc=_6XznG#azjb5*}!}zSo*-mf!(e_U7KI=XF@`14^ zxH?n1Wi2etGCmPT!=>O#2dLR*aTXUbPqlwi@C>*FrD+U@n!ecYxH_;`kI}vmpqo<} zPq>`3Gcngb27m|SbD@JDgdF8cSO?lQZnSgxJJtxj)j^!{Sz2I$`8$@1EGpjU`Z&)D zkrnZ8O>0ygr93;68+b&omhPAdlL30}P`QN~xo*_8>1>q7;|?iV9*Jx`KMyP*-CfI} zTR+bj_K+xqrbVt@bJ=;*X5QVk`L}NP8O^n8P&#i~th#-J9y(sLK2Kwjf_mB6(jK!} zGNv1hVVllUfpoyw_cNZF%#o{?pvsCl+*WV-bjn9)2x2NSF!4%iRIS}X|7$ilIXGrV zul5hV)xiggSSa1xv%nvj#~{rs)c!7(`p^WU{k=C_mSkVND@t-7@mi3cfv$+L7OtVN zA#&hz9X!kPRPbzJ)Huwgh@w9NPt0kmHz<2 CyO6X1 diff --git a/standards/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc b/standards/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d05a16b28f5cbfce5489432c8ab3248c8bbf86b7 GIT binary patch literal 1288 zcmZ`(O>fgM7|wUnv|YOoHo=)oL8{uG*o4rkts97apsl?`oh-MnR}#{s*s0KV-~tCO z`wwvBFZqgu#Dy~gAz?df_W`(y`+hurALn`P^vY#l6Qla}`^g7a)4oXO`mltvDIT^V zCeT2SwXq)Py0neh7@L7PwgOA}W^4z}t_Bv^?=`TA8M*Jwzy3LC6*V}3X%R}*(5kRwzqrn-k z#+YSDR0+j85Rn7EDoL+GGjz@3E|60^jWa4w1TRq%t9p``E~wCCI*3E|QdQz>s?b$v zR*73upYx(psos@Z)t0!2)N3HbeI(hZF%fnNq1RI!OA6t+ml{)3vaPT;crw8Q0R%E3 z2}sSTAybuhulp4Bjyp$a|8Tpr$4hfWNEr9p06S7ADsLC}cT!5iQSzLeaR(xtj8bmE zfO|@7aXGlV)jr;8Z+E!+;^?s3+3IpXosi3$^I4-0L>V>xJlWdl_hdW!y+r68_qWsG zbWD?3j`w))8497$^IGfV`OcU0>x{3Y&oRs?HjM{?86A#;yhGCh$ZsfmTR>4x% z%5TfQZLQ8@_x@pt6<<~5n#YUz``3qQa++&dxQxI+$(~DgcOI{sF8~X+i)1 literal 0 HcmV?d00001 diff --git a/standards/templates/standards/standard_area.html b/standards/templates/standards/standard_area.html index d8125b9..bf827fd 100644 --- a/standards/templates/standards/standard_area.html +++ b/standards/templates/standards/standard_area.html @@ -4,47 +4,59 @@

Standards aus dem Bereich {{areaname}}


+ + + + + + + + + + + + {% for item in standards_of_agency_area %} - {% if item.public or item.created_standard_by == user or perms.users.standard_management %} -
-
-
- - {% if item.public %} -

{{item.name}}

- {% else %} -

{{item.name}}

- {% endif %} -
- {% if item.created_standard_by == user or perms.users.standard_management %} - - {% endif %} -
-
-
{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}}
Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }}
- -

{{ item.content|truncatechars:250|safe}}

-
-
-
- {% endif %} - {% endfor%} + {% if item.public or item.created_standard_by == user or perms.users.standard_management %} + + + + + + + + + + {% endif %} + {% endfor %} +
TitelErstellt vonErstellt amGeändert vonGeändert amÖffentlichkeitsstatus 
{{item.name}}{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}}{{ item.created_standard_date}}{{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }}{{ item.last_modified_on }}{{item.public|yesno:"Öffentlich,Nicht öffentlich"}} + {% if item.created_standard_by == user or perms.users.standard_management %} + + {% endif %} +
{% endblock content %} + + + + + + + + + diff --git a/users/templates/users/dashboard_SAVE_standardcards.html b/standards/templates/standards/standard_area_OLD.html similarity index 60% rename from users/templates/users/dashboard_SAVE_standardcards.html rename to standards/templates/standards/standard_area_OLD.html index ae02b2d..d8125b9 100644 --- a/users/templates/users/dashboard_SAVE_standardcards.html +++ b/standards/templates/standards/standard_area_OLD.html @@ -1,25 +1,25 @@ {% extends "users/base.html" %} {% block content %}
-

Willkommen, {{request.user.first_name}} {{request.user.last_name}}!

- Letzter Login: {{ request.user.last_login }} + +

Standards aus dem Bereich {{areaname}}


-

Agentur: {{ request.user.profile.agency.name }}

-
-
Neueste Standards
-
-
- {% for item in standards_of_agency %} + {% for item in standards_of_agency_area %} {% if item.public or item.created_standard_by == user or perms.users.standard_management %} -
+
{% if item.public %} -
{{item.name}}
+

{{item.name}}

{% else %} -
{{item.name}}
+

{{item.name}}

{% endif %}
{% if item.created_standard_by == user or perms.users.standard_management %} @@ -37,18 +37,14 @@ {% endif %}
-
{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}} Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }} -
-

{{ item.content|truncatechars:80|safe}}

+
{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}}
Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }}
+ +

{{ item.content|truncatechars:250|safe}}

{% endif %} {% endfor%} -
-
- -
-{% endblock content %} \ No newline at end of file +{% endblock content %} diff --git a/standards/templates/standards/standard_task.html b/standards/templates/standards/standard_task.html index 2ea2f08..1baf176 100644 --- a/standards/templates/standards/standard_task.html +++ b/standards/templates/standards/standard_task.html @@ -11,41 +11,56 @@

Standards aus dem Aufgabenbereich {{taskname}} des Bereichs {{areaname}}


+ + + + + + + + + + + + {% for item in standards_of_agency_task %} - {% if item.public or item.created_standard_by == user or perms.users.standard_management %} -
-
-
- - {% if item.public %} -

{{item.name}}

- {% else %} -

{{item.name}}

- {% endif %} -
- {% if item.created_standard_by == user or perms.users.standard_management %} - - {% endif %} -
-
-
{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}}
Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }}
- -

{{ item.content|truncatechars:250|safe}}

-
-
-
- {% endif %} - {% endfor%} + {% if item.public or item.created_standard_by == user or perms.users.standard_management %} + + + + + + + + + + {% endif %} + {% endfor %} +
TitelErstellt vonErstellt amGeändert vonGeändert amÖffentlichkeitsstatus 
{{item.name}}{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}}{{ item.created_standard_date}}{{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }}{{ item.last_modified_on }}{{item.public|yesno:"Öffentlich,Nicht öffentlich"}} + {% if item.created_standard_by == user or perms.users.standard_management %} + + {% endif %} +
+ + + + + + + + + + + +
{% endblock content %} diff --git a/standards/templates/standards/standard_task_OLD.html b/standards/templates/standards/standard_task_OLD.html new file mode 100644 index 0000000..2ea2f08 --- /dev/null +++ b/standards/templates/standards/standard_task_OLD.html @@ -0,0 +1,51 @@ +{% extends "users/base.html" %} +{% block content %} +
+ +

Standards aus dem Aufgabenbereich {{taskname}} des Bereichs {{areaname}}

+
+
+ {% for item in standards_of_agency_task %} + {% if item.public or item.created_standard_by == user or perms.users.standard_management %} +
+
+
+ + {% if item.public %} +

{{item.name}}

+ {% else %} +

{{item.name}}

+ {% endif %} +
+ {% if item.created_standard_by == user or perms.users.standard_management %} + + {% endif %} +
+
+
{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}}
Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }}
+ +

{{ item.content|truncatechars:250|safe}}

+
+
+
+ {% endif %} + {% endfor%} +
+
+{% endblock content %} diff --git a/standards/urls.py b/standards/urls.py index 033a13c..19e8171 100644 --- a/standards/urls.py +++ b/standards/urls.py @@ -17,4 +17,4 @@ urlpatterns = [ path('standard//single', views.StandardSingle, name="standard-single"), path('standard//area', views.StandardArea, name="standard-area"), path('standard//task', views.StandardTask, name="standard-task") -] +] \ No newline at end of file diff --git a/tasks/migrations/0001_initial.py b/tasks/migrations/0001_initial.py index 54035c3..e5386c0 100644 --- a/tasks/migrations/0001_initial.py +++ b/tasks/migrations/0001_initial.py @@ -1,9 +1,7 @@ -# Generated by Django 3.0 on 2019-12-04 07:57 +# Generated by Django 2.2.7 on 2019-12-09 17:02 import datetime -from django.conf import settings from django.db import migrations, models -import django.db.models.deletion class Migration(migrations.Migration): @@ -11,9 +9,6 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('areas', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('users', '0002_auto_20191204_0857'), ] operations = [ @@ -21,13 +16,10 @@ class Migration(migrations.Migration): name='Tasks', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(default='', max_length=200)), ('desc', models.TextField(blank=True, max_length=3000)), ('created_area_date', models.DateField(blank=True, default=datetime.date.today)), ('visible', models.BooleanField(default=True)), - ('agency', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency')), - ('area', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='areas.Areas')), - ('created_area_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), - ('usersfield', models.ManyToManyField(blank=True, related_name='users_in_task', to=settings.AUTH_USER_MODEL)), ], ), ] diff --git a/tasks/migrations/0002_auto_20191209_1802.py b/tasks/migrations/0002_auto_20191209_1802.py new file mode 100644 index 0000000..23caba7 --- /dev/null +++ b/tasks/migrations/0002_auto_20191209_1802.py @@ -0,0 +1,40 @@ +# Generated by Django 2.2.7 on 2019-12-09 17:02 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('tasks', '0001_initial'), + ('users', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('areas', '0002_auto_20191209_1802'), + ] + + operations = [ + migrations.AddField( + model_name='tasks', + name='agency', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'), + ), + migrations.AddField( + model_name='tasks', + name='area', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='areas.Areas'), + ), + migrations.AddField( + model_name='tasks', + name='created_area_by', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL), + ), + migrations.AddField( + model_name='tasks', + name='usersfield', + field=models.ManyToManyField(blank=True, related_name='users_in_task', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/tasks/migrations/0002_tasks_name.py b/tasks/migrations/0002_tasks_name.py deleted file mode 100644 index 3e105e9..0000000 --- a/tasks/migrations/0002_tasks_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0 on 2019-12-04 08:10 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('tasks', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='tasks', - name='name', - field=models.CharField(default='', max_length=200), - ), - ] diff --git a/tasks/migrations/0003_auto_20191205_0809.py b/tasks/migrations/0003_auto_20191205_0809.py deleted file mode 100644 index ee3cc1d..0000000 --- a/tasks/migrations/0003_auto_20191205_0809.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.0 on 2019-12-05 07:09 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('areas', '0001_initial'), - ('users', '0002_auto_20191204_0857'), - ('tasks', '0002_tasks_name'), - ] - - operations = [ - migrations.AlterField( - model_name='tasks', - name='agency', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'), - ), - migrations.AlterField( - model_name='tasks', - name='area', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='areas.Areas'), - ), - ] diff --git a/tasks/migrations/__pycache__/0001_initial.cpython-38.pyc b/tasks/migrations/__pycache__/0001_initial.cpython-38.pyc index decdf9d0422be6f89568d42e9e88a073b06e7b80..dd3c6d4db96aa5bb9bd0ebd2e5c650a4380fcf2b 100644 GIT binary patch delta 549 zcmXYry>8S%6ou!{>!02AI%E|gL_rfG7o?;hC;}n@P0|n=O9**$?>aVPI~sctX)ADGv{p+2E_pt9;6tz$q{pNKA|@~$bVzy(94E!J2w^sO5qUFW zHr9M8G6!z0#a70X2sSCxy!Q|D%%p8zSI6BC{&KHMOYGV8cM2AZ-UVEyE8X@%nZAFk zvC7)hUI8{I`M2>vI18Ot?@UB|wG4wd!9G>LSxJa9SbwD_Gp=-hUO^V=(v3F zu%7^)VFg&7gFpm+k~0z zZc81XD{5Uj&21{4P(mrig_!e*_MC^m#UJ(8SSohRJ-T`yinPk=U04hOhCc`3|5##f Wy8D*)9+x$&H16AIjh*B1Nd5!SWPuz2 literal 1314 zcmZ8h&5qkP5Ed!PmSlOoyYc>|*Ion^hIi2*Nf89u>`xlByD1X;A~+yulUAjbC6|A>|~SQV=yW9DXz345?we9au2l@4kDva4qXkt=t?A zD39Qkk6~gKL%9{}FV4{n#~5kZ&h42KJ2N+SjgIn0+-_l6Src-tQa#C+YEE( z7ne7(=C6p^2}FX3zK+g=ti=#K4c27d%9gDnJ0z*;K|dI)-(A-<7yvQ5@Dwhgdt zflp_Jz+)4%ZGJ23W22dB53Qna8`~ChQNsF{fX|Bx+$%RyVU_K&rQI+JVe|Z1!sQ)$T z-@9{HxdSS%q{1mXSNQ2^IYVX+O(QBB6Dbdgu8`6`v^IOh=( zJ9?o(6JAV~*P$WMJ2o1i`(;6(>Ad0!SEX_^;&scA?;V>GbUq68@1%$xSTjU(%kdU7iG}q3cHP@vV zwkFY)ujzbFffnRE=LOT01lCKPLM* zkD+_#hJ-)hZ>qI;3VGL}r|Vj!rX3(Dw<;N3s_=1H=A0I_Q*d4io+ib2(9Q#O&hCGJ8}X8QZ`c2?u hLj}Ykz!=C+9Bb*G#`hl7t$(OHEIpV!6hcy-{U2;Jh5`Tp diff --git a/tasks/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc b/tasks/migrations/__pycache__/0002_auto_20191209_1802.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb1c7b860978e2df501fff8185ba60d4efeb46d4 GIT binary patch literal 1095 zcmZ`&yKmD#8297+h~tnHDi9kRWQmdth*k(SO4EX%Eozei%jo3fu9jWL4tI`FIx{-s-)SP(O!65n0=A`&Ov=kM{m@9j~o=4o&mAAY`VS(^4;3O5e|VGAzb1VS{T zXWCQ`bY1dBW=ze%oT30J+03lK-qi>q)+dcv)J&a^X5bL>NNd_Z;Jwz=h0AGKCV9-8 zhVZ6I%%UvU@A`>Wba}$KH?;RuDBntP!2uQnvb;DZN7m zw@Cx4T@#hP%hHBWs8vS%gbTmjZg+5!CuI_4Qa$ICappi_Qi>RjxVQ(PE{^79fxGR_ zMyK1}z?~=UF0%n9>?o%BWO3@Nr>&ln;BlqMG4zj?R2XH^G@-Y$pE!@ER3JsI$QuJfpz-7{8lGnM8u*Ty%h$vZ8hVKAO#ld^ETn9Qd%FL}88 zVi=MnPRb~waysRlg=*g6^?HZ@8ER{`VDQ^%E?oXtG6pgY-OxSV_=8*ooT0CuBWsnr zd!=ifqhHEL(-qZa*{w;DA1_;2xzLcY>h`iz_pg+#5G6ett literal 0 HcmV?d00001 diff --git a/users/__pycache__/models.cpython-38.pyc b/users/__pycache__/models.cpython-38.pyc index 4d0e60d68cfa875e2754eaff4173315dcc46a122..0ec8d15c72149e8fce7504e1838d7e5df3da8d31 100644 GIT binary patch delta 195 zcmaDNzC?mAl$V!_0SLDAyo=@J-^f?Z${01di#3^1Yx6tSWF|(V$w3^JTx>uU4nSNi zGkGJ6FkcF53R^l`6mtrDFoPz?<}Dl?j8>XVQT%zS<;C&2iFt|Xsky0nC8a7rEq*{T zg{0KPqNLQ!lGHqf(!3Ofvecr(+tSj2N^&xjGbZoibP(YKD&=5eVuZtAMRt>UxLg?Z fCkJx*F`7(Xz$L+E1XKhR-p3`&XubIk7Y8E%o0>A{ delta 132 zcmZ1?@kE?2l$V!_0SH`jU&fx{+sIeV%6MyX7i%)3_U3o2$xMvKlY=-cxmbZJ9Dul3 zYVt-FVV)G$bk->56t-XnP4>;(I5-$5|KhY0;sGk)U}9o~!rw*qlYO{c7!4**b@+=I#*I;*_Nz0J|bUIlejuy%SbnN)--1&Q(7MVcNHhC zTpE?#x=C%sofJXO$Uxx0Jst|Z_5kYUC3&b@pncdr1brzS6bSkpplJVpD2WUq7bP*@ z&VK(tGynX@%>HoZ!`aw;b#++5-(P<4*`>C9_hPLq@vFfuR^SS+vkznr8V8v&rSN** za8uz8R$|R(j9Nk7$eV5|Ys?r!Su<}zS&QYjYSuL45HhX24VgA%63C3B{vO^g^`Av) z2k%5_CrWEkdKj6#ybGBwWEzlp4w*tX??I|(Q|Sm&y}S>ZK4j`q=_pRx&viNJF_aGQ zL6i<|>L2Gr{F$4I@jM^q`|vrz6+U90Fi!CO`~be6fqWtuA46hmg~=f_R}+bL|$>!Lrn zZ`uv6hwdxaeQtP(Evc)@l5a^{@-GFr?+(5DcwqBcb%$NoR@r)ltE=j&#)Cih-Dga3 zqpJ!Jt+F*AZa6Gff)g(?Bfgk3b6Go`weVq@wyQH^H*pIK+vK9F`(P3c@oF45ndM2~ z4l0<*MJt;-ecEikXV0bNA-vbk%}L%qOCo+n)k zRD99>u%Ec9R4(gUuensvwu9RM!LT((J6Gu=qRZ;(=RduUD)~jj> zA54i%$ZL`&?^^Zkhiw4uoj}S|4TzW(mlCm?Jokplfg#A6{VjS`ro= zm?yzk2xLrUh^0vea&zKwc8vJyJUPS4u*c>|MHcQPH^}|K+aqO4%WcNx0;WVaVwqxPZ zub~5m#NAyzamp@T#WXb+a*%;Z@n~0H;WCmkOT1v(F<(pCX$}X7E5)beC?5&R(i>7p z7*%<&q>oGz%h;3>K_(F;;McJ^S^V$R(O1vdUyO%!qdqy~9*X#e&ylIms-|5LvQJdVcPN$0YTY3GvM;*b$%>ssr+Xs)N_bB_B9alLNB zs0c)sCW{f|2xRg~hkS!xOVh}n-1;&K-ov(?w;I#5U;viIvF2H^SU;@M-o+oACq~KP z@@U>V1`0&T+IW?E6~#t^k41IE7_TsLJ6nJ%qG+i!yi{vXJ-2Ad53!Y-OLtm9+}_*)*xX!l2>HSbxt8Oa3oF^wUqyS<*trV3>&aSqwn{^# z$!o-wrYZUL1`7U!ZTsp)zp8LUe9&~5O^Uxa4UNd??^Ks`Cw#IsRPo9CMuSld$e;0J z0@tJScq<0Ci1?o|_)MH?8Lf;#6AhDlsivOHmj5>fwB!?Pl`*&_{?_ua!>0MJAUtG7 zknTg%%rC>2knj{efalx$twy0#F?0x(-GcIFq#A)vf@y+wf>J=~NWcn`?wcc#9P?f3 z-6r@B!J7nc5$xb$FA|!ki+UE)xzEMzHeI`enwaBt;-j|rBD4d~H+AMbd`q}{&XpN^ zmnP%{JDI(0v8U1DfMtsF7fZhl$6&;y&EKT)-yTBWP1%0 z!f1bieOtWWK0Z(}ER?dXWcI3?vD;}t0B2TMn8g^pyW#J+&l<>TBkEX5NL_VYNM{$% z<0bim_)X_WO(x1dr5$a46J^~^PmA@vGljQNpf?tGEcY&5U9tDQs01>gGFtcOm8OMv z34Vm&)uh0}i;tUIpLFz{wjEI~j-RovnaT0=LK>A&)=i@#BHPu~{1fU1lKH%q<*Q9zCw_b%0NcYS}tmhA`U_|J%bQpI)cV7=p)k{DNzy*Sf z1k!PI%>kXdP$0NLKot+Nk|_~E5WGVmUHE`{v|QQtq;)cDf=4sa9AB}m<7lAbOpBNL S`a>)li8rb&TqC~L*YRI|0=}~V delta 3397 zcmb7GNo*X)747QjS-5IUj)sf4jJT>riKInRv@D8}C5v*rXfeguYDwudr<&wM%^9M) zsYnU!NlYn=4cl_c2g4EI2zC(YkN^Pz136?lBsm1R1itkphX4Tt1Oajg5E#hvUp2`g zCRBiss5jOB*YfNArRp~qKfKU5*U(U_(cjFm6;KS!1MYLy{hnw2WAocRkOx#T3aRcpAMEfPR85YJQ3!#SB)@3|&d{j3irsG3vyrouTGGC#O;) zU2E(IDXy>SJaJ!tz?c@)tZ6*C#@1tWh?M+U>eQGn&eHg>*$R>Y@J4(&3C(sOC)BkNG`&c?AX5>$@opOKe&)He|$J&-MMuq7` zH?TL?vuP(sWJxSu0K5pmj^ZW2c>qil7XX(COhY_HKVjm=R~@nFi%h*ws< zLNY9;=+;=H-pb@^-Qe@n7<&?M3ZV9W20cs=&jNPy-Yh9_P~RXR@5RNe-19`M{8!zT zG@?Wd0uBI7xmbVo6#OCP2#7`H3??KVM4P(?1f|mup4(rplBxujiR&cigA2T0F+&bUsI1vItFQ#HPCZveuhBP z8|7z>qxNH2JWXQ+VmCT3CO@9kE2Ks9QHC~CB32(4SLFPjAG0GeozAc!*`MxDgL+e^ z*t8c)Vp*J(R(h~}orEe-!c@VxZ#rIqizgwgIHbZ1@+ykyc*N3|Nnj;cDD^?gHK>&{ zD&ALdgc!U@%?E>;Udz&YimCtaJ<-U{QxH5{1Uk9O(P#3vM4P!gG~8ORe=U1yd9MC zOHOgoC2Q37D#4W7Uy?)31H(w8D7y`nNh%z_0%650WfA5)*eEx*u!Ks(g1n!(Kz{j4 z=J@cJFy10CGoir?`9Q!aVcaYDf&bt8&h0&2-gXYk?sDm-8~IFyZwFSYiDFTO@-o(k zWmeOQE0znsUnmuQ+bcQTwMQx{@xOUbkmO7=?8j>F;+78Wa zJ7u?8LiQtAB5n~|R&7w?u4k*vsnCOH32Oq^5A222V*U^E)3%A(s>4+3t+HO7;~O+@ zSC(HR#qX(YUzxnUzw>Zm--B=SUE0W`e5Y@lLD!0tTrluDV9m)!G5=e!z=>Za^gnusP+SVprw7 zn)6)@x(oOg;M;)j0CsUeSXVQLXU9cRDE(b_cbV)>N{UwLbbV9@^TXJ=vzNuXtm~fL zVd+~~%>nFY^R~I6f%-xzO^Zj>qm$;4CzZiv%zqb96`FgtEt*qLoO(vwr#0MbEW>iF zhn{5hsO`GAC;!&{1$IXs&rKezTBRoMxlR#psCLXx&}@y>vPLG}-?*Q9z*=w!tKN4V zkzeuyQ7A56ru+3ddAa9zZP!Tm2-n5tld2eOvMwikFXZ1Qh1nVrpr}x^S5eVJgLb@@ z-oYo974HK+APAfD!lfr1x3`{y^sd|5=TYy;c2uq~;ZU6{a?yopiocW?m8biLhi;R^ zQe~AYYBh=V=e*LqdGKCfUdGv%X90E!p31zA{5|$q~wjF|3Spm@M*46_c5W zquI?j>&vB8dUl@JNorOXpJ4u(jUV>^nw8aSSzrr+_n5%jA&QhddML_b4S>QCJsgos z;!VIkz8l|{J;W!ptv^C1cCuvG$CZ@eH~^jGtHZ+CM;MV$)qQxZFe5u+Q?G)o-P& z0V@wz;A$jt4e`P;UJO(0?x5Z4FatNB0<$m&^M+y)xY?0;JG{ZIGjDJkhYi9VSm+Rp z^6n|gBHTM6`OnHpNfst#$kicOT$Qx@L2}77gzlM+y{6G1=IQQJH^`(bmCEd72J%diiUt!Bf~VbgOoDzg5BJgr2VdH=E88kxo;-{-JsauBa= zJ7$f$5fA5ll|T8P*_8j5&A0Qer`wYum_`MHY{W#WAcw+-Zg(xB*)c zrW3FxR)K$kq>=7jSs2Z3Ulh>HS{T!^R`Lt6pX2F=w#N-F9+wZbuP*-r7piHJDb-)z=g;E(*|I%M9#|WhbqLLCB{zDJgH-BGwG`tiNV-fpwdE$@6 GM-KrO8vQc> delta 629 zcmZvZ%Wl&^7=`Vb@wKs&G-*F(wwmk<)HikSFj0 z%^uMmtP$b~*zy2*gYFPw(^dFqQbnT0mPT{FIdlFa`>6Ik44(&qZ_qPs9rizaAHt90 zccx(^Mr^`}8O)d`;**uwnR8&KX6z;+^T5CpKU;uFuYd)+6t5T@VimaX;FpZ_g4U)c zm68()PLc2w8CMAf6zrmg*|qxIw0KM!L_+d3v4ob2PF=K1rpqn=x7?ZIj1{cva%(5_ zy4GiLZjAG|kP2+zA};CHoAY6pXT#7rarp}AYEsMUnV&6Y4Me!Ahg>7xobx616=x?@ z_d0IiCT^jdih+sSB~Mx0!q(HO5#5=1y+K;+><#j_&*V4u-mcLfD(dncf3n+&bxU)?0j;TA0spE$d(^TBR1()TFmh4>*KTV1(fb=tfL zRN}fybn>B^Iogie@~-`>>F2{_R%7(VD0<4*lMkJK1gh5Z?RoZ)^etXeh7{6mBBh0ihs-VnB*0Vv67b>(FX_Gj}<2w|DH`ff7n+ zc?BvOUVsHWPTAV~$KJQgTA@+tS!*yD zZ1GG*Y1znB8bmRcYZJ zKqV>YN=46&O@t(dgd&bM9-%DqBUHUP3N^rX{`zKDl!rm(+^aA40RA;=@wJ!1PYPRAQ)jlEL`8ZSh*C3!0 zVMEfs^XtXq``*;F)tgHC(b#*E`i1#;?d?8&?m-krxrov9 zle*_sE%HuB&ZAkl!$py&d^8wt4@ZM-KD>8#Yco4k4kfA6))&Y$9sAg=xt48R{^K53 mZ - {% if perms.users.users_usermanagement or perms.users.areas_management or perms.users.tasks_management %} + {% if perms.users.users_usermanagement or perms.users.areas_management or perms.users.tasks_management or perms.user.news_management %}