From 90d96927d0044a223a7211e700026694203271f1 Mon Sep 17 00:00:00 2001 From: "holger.trampe" Date: Tue, 3 Mar 2020 20:30:46 +0100 Subject: [PATCH] Bugs von Basti umgesetzt, rest muss abgesprochen werden --- dasettings/__pycache__/views.cpython-38.pyc | Bin 13040 -> 13225 bytes .../templates/dasettings/user_usprof.html | 22 +++- dasettings/views.py | 5 +- news/templates/news/news_addnews.html | 5 + standards/__pycache__/forms.cpython-38.pyc | Bin 3974 -> 3980 bytes standards/__pycache__/views.cpython-38.pyc | Bin 9523 -> 9590 bytes standards/forms.py | 4 +- .../templates/standards/standards_single.html | 3 - standards/views.py | 24 +++- users/static/users/css/datepicker.css | 121 ++++++++++++++++++ users/static/users/js/datepicker.js | 55 ++++++++ 11 files changed, 228 insertions(+), 11 deletions(-) create mode 100644 users/static/users/css/datepicker.css create mode 100644 users/static/users/js/datepicker.js diff --git a/dasettings/__pycache__/views.cpython-38.pyc b/dasettings/__pycache__/views.cpython-38.pyc index f4b5dd8546e53057f84031db0a4c80739c7cb67a..dcb87cafc37c1eccbe3fdb20a983df9312c0772b 100644 GIT binary patch delta 3526 zcmZu!U2Gf25x%9!BPITbk|pY2qW(q6qGj2!{Fm6O|J(X6a#H&en?7?-6zMyjx_7c; znKF~eXp^=Ek}i;-4@D){XzDaUn#xWe8Z;={hZaSG2K{-s0!91M0(nW%$3C>38OoNd znu0#g&dl!4%+Aa%|7qOK#h!^qYZUkd-o9|*_H(bt+S!M%k9=6}wtBQ4rf`MF%!Jje z^%7lc_F4T}Khbe>z#7yBiLNu7ts!lQ=z23{4Qsdc2!Iz6 zdXd}K6wPb_j^hVVd@2*;@=V}gVbUiUk*C!}Qzz;~NXO3-EX3*==Asj|Hf^ZbT3(Pr& zaKt*JkQ>e!?xblRwuR*kDl!}DV<%Q#3B`Qun0&KlII<0u{6*a|#2)!^&FLPrOH(bI z&zX*xgu(x9EBA+!>IsxI%Gq$!M8y@f*bCVL<9+Fx_!7!DAv7R#AYgnv)iT@}n~SsZ zUYH+82gR2Wo<=x>@GQbt5FY372LEafPEHxF3uo&bkw#>aU6lD)hx}FKBbDMaDPN6_ zuygW$G}(F<*L)s-I$pIKnhSEkX{#2au|wctghH9W1kwj$dbCw5$@qNqMiXTcx}?C;wbGudmrtjY?$C-<2Me>IHYgcy{)etRo1DIM^7?yp-$mqh* z?=rDlCX>xO${_Ll$g1Qis{flM=d1g9I@$k)WdFHTfQ-?qi^f$~cP{6-Sdhi!p)hS4 z!tIX9pC`XtrtMyWaf%80@(DCXQytuvgHw2To}cTko*EO+;mjH21fd9Z*AAaQ^+K*;&7x3T$LSbVErQL;wJQgv zRaZtj=M-1ZkH;VuQTr9t4uE9N(E_u!Gv|mwV0ped$77eptEj`iA^+5ye54(-z9#nj zm6kr8vD+)x`#)wgFQVql2$+BZYrqTSEvT!*RI%QwNwbhD;J*d(`Aw&UJ)Jj`Im4MX z^4S?Mxm%npFteQwjFId?BT?d(un&EskNWoC29ODStcM$xg}7hWCWmVsk)_jf|D) zG9;HbG|aUKkiSt}a?QyNowN$2)K1k(9#f#+M=qViPmrPuXr0->^Ww2*AVm+5!^ib} z@iY1P$kwj=Aj&d;2OsR9*dh+Vzw@Hpw>eS1=(3Vh@GY_hU&*&rwXD3x#7^Wa`MH0Y zi92q92e?}D6;$8^ml+Q=DXXLEW!9wR*`jZu$_>JtP@%d|QwZ~#CWVLBX258}93BB) z6gA4QXl$9~SgDHF^7t*4;o=dX>u#|Hf5~5nmi(ERTl-*nc-z(A@+|~Pfu+c@0@?wP zSC{;&BYz>jpt^NS^(BRGTJ|x;-Bf5OH1Y<%wnF2rs)b-Fcu+atuuu+_LWM-3X{osc z-ZJq1t1-8QC*0POx(MF!rY3k7PARKPHq(-;5i2p?vR852V5`;=TdbN=iVZGXR3MUU zshzi!e0hdzuGdJlov73m7A7PDq=Ht9?>l_nK}*NpGT)5oY!OB-??Bh2r(b%;wM;LB z66#u%SJWY}yyip6$!yl1E4uUQQQb7{r2Nb1Rra2IHa(_N5xpzFm2QjAfvy+II~ko@ z`6AqLKTUVAto&noqWrk@q=at9IgzYs=tYBP@VXG)X#9pm$3|ay8N7$o2MFy5HbN}| zb!DnsDi^9{x;x)clnF(A8+E7zUPFqi9NYba0;k0P88Ez%<>WFL5b>7$^_KLb&2+4> zRfV|@z9AI9Px1ZN?~kw=_=~UsnI7x!t!E9s2#c|pUu7|$_z3r4qNnnO^^$sO<;vJ* zHq-~S7zOYWya3I_PUG!h>aLMCZ5gT; zWr%JxcUf62OLWTYv<9_7qMOViYgij5y4h5%5p9I%ggL5>!Wu2+m^G%25wF$UZH;T= zK#%cu-f^30dyFve zLJRAE4rLhYmj4Z3865^CF^Hf7cnP7Gxoyq5qFA2q0FDy|2m}=-a`H~(-vgviK>AIE z1*5PyZHtq_t}LC?En}x#Q`*?E^bqI6Qy(hB%G#7KB!Wod`Vuo?;p9g3ZNq^0PQUiw6`>A)H5;L3kEn z4q^Mw$lG=e^-oUC8m=A4i}OianOWUu@p@sUE_nUsHM7-i4Pe>9|X&*5whf&5Pw zMAv~Q_M$~6e^ob&+>1<~K67GLd|e((_GLEhqxBx$T)YS~Z_As>e)gjLYobSflzgi@ z4?L|wpEt^d8{ow&;CJ7R)AHrUL9pem##57Ls6^X;*`^r3w6jP7 zrG_`Qf4DF$xy_D?Abn5%v-u>uxPGwZlX`YY#(FO(7|`ONobR1#=*P8!;u)Xw%igoS zNUCA4-qEib;4p5O;wVWG4$E|3O<6|rhP>NXR?0|LWmmetMoB~qRe`C+g<;uOjl3=l z{T`zv(xN)&c~^H9H3iv44#!vlWiO0FKMiq(|FHCOEX&8!+2iT#3u=Vy(_&@g8cr^9 z@d{3A#X$iky0*w)k-te##L2QK2*pYHdHM&wO*I&+OwcDN&|*z-&^8Vy#|!nsP!x1E zCtkprSCCT&nX0?4@b3dd)2nkfSQHIys7f`0!q|5yswJES`5(uTnx|ZSv}j>jksI z4KK0;wbB*eKxPQ3KAczwpl1D0q0s#fau;MvW{@3_k7v^CsJxij-{b;Yi!B+#%2WBd zCRZ~Z$_-RrmLFz%4xsbAFgjekhTL!Bga}+`#nB>5wo`FL7FB{3$774)Td4DG*|;m6 zc{C)w<_8sGs-$0^u`A$^Pu6F4>5Q$e|04S*mU|Va-bBFI6qp`fq-a4BPgCxC39PNI zy#yfx$6S;@AL?S~YHO&#<@U+;D$wFRqH7 zSL?-Dq~Affi|`YKcMDzRVdXdYcQg`*oo@}W63Sr<&9D!`_#S~-m;(e6gL-OxY3I!rO5CHE-5VN<$1$D z5Zdk4W5siAOl6N5er?}&A5C-M&GWv?=BPQ|XV7nPpFl9lrCa?OQq)j%o0LyN)Jp|H6)3f^KX!D?_dv=#tf3OTD`9$sVO zRW|}7rBqjnmSQ~85#UNSSgHqU-5P^Yv?H)FuEmH^56t)mE3wArnH%Q~Jb6c9sF(n{ z@eW%FRYRqQYABy{8y_qWuff!v;7Yg}UQMh8KsyZbx@u@+6e^`wB5u=ab2Y%5)`BeH zwv<{+ZM>N`_$$;(QQmSVw4zj@VP9%qsjJqN+Djd)oz>79V}X}Hb-Q@0+g**^Lc7~K z;88gn*jTWg7ToYemGO=v0e1&%)LCV>LbHK#tIKW$z(Z_xC-10&4{^n<8fw?MDL)@E za_GvnMhD)EmR>ZW@MF?1N7GYiJ76d*ghm7^!<5St0cfoL6O%gZn<#!Af#UkRNMUf(`%R5* zY52cJ?p=8@Hy+;-*z#tstuqWWoZ}!502TaSIGkYh@RyMHbJUErI>o8HYEO0WVW*R9XU? z!$VdNvSQba%LUuC;U(OQU-1>=^^_PsM2drTtW)pFk%&9-v@}8 iq-6P)*C#na1%VemLa$}x7@o#?R-T&}Vo|v~vFHDebRe$) diff --git a/dasettings/templates/dasettings/user_usprof.html b/dasettings/templates/dasettings/user_usprof.html index 294e25c..d35929b 100644 --- a/dasettings/templates/dasettings/user_usprof.html +++ b/dasettings/templates/dasettings/user_usprof.html @@ -51,7 +51,7 @@
-
+
Name

{{ user_fullname }} @@ -60,7 +60,10 @@

{{ mail }}

+
Stammdaten ändern +    +
@@ -218,6 +221,23 @@ function removeUserFromGroup(userid, groupid){ }); } +//Call Function in view to send e-mail with pass-reset-data + function sendPassMail(id){ + $.ajax( + { + type: "GET", + url: "/dashboard/sendpassmail", + data:{ + userid : id + }, + success: function( data ) + { + if(data["message"] == 0){ + $("#mailsend").fadeIn().delay(4000).fadeOut(); + } + } + }); + } function addUserToGroup(userid, groupid){ $.ajax( diff --git a/dasettings/views.py b/dasettings/views.py index 02ffe3f..b9bcb4a 100644 --- a/dasettings/views.py +++ b/dasettings/views.py @@ -10,6 +10,7 @@ from users.models import AgencyJob, AgencyGroup from django.contrib.auth.models import User, Group, Permission import random import string +from django.template.loader import render_to_string from users.usersforms import UsersPermForm from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import CreateView @@ -19,6 +20,7 @@ from tasks.models import Tasks import webcolors from datetime import datetime from standards.models import Standards +from django.core.mail import send_mail def randomString(stringLength=10): """Generate a random string of fixed length """ @@ -523,7 +525,8 @@ def NewUserFirstStep(request): if request.method == 'POST': newuserform = UserNewUserForm(request.POST) if newuserform.is_valid(): - if(request.POST.get("sendmailnewuser")): + if(request.POST.get("sendmailnewuser")): + msg_html = render_to_string('users/register_mail.html', {'username': newuserform.cleaned_data.get('first_name') + " " + newuserform.cleaned_data.get('last_name')}) send_mail( request.user.profile.agency.name + ' Account', 'Hallo ' + newuserform.cleaned_data.get('first_name') + ' ' + newuserform.cleaned_data.get('last_name') + '! Bitte setzen sie sich auf https://digitale-agentur.com/password-reset/ ein Passwort.', diff --git a/news/templates/news/news_addnews.html b/news/templates/news/news_addnews.html index 4e69de0..96eb55e 100644 --- a/news/templates/news/news_addnews.html +++ b/news/templates/news/news_addnews.html @@ -1,13 +1,18 @@ {% extends "users/base.html" %} {% load crispy_forms_tags %} +{% load static %} {% block content %} {% if request.user.profile.agency.module_news %}
+ +

News anlegen


{% csrf_token %} {{normalForm.media}} + + {{normalForm|crispy}}
  diff --git a/standards/__pycache__/forms.cpython-38.pyc b/standards/__pycache__/forms.cpython-38.pyc index a786155bc5dbcc01049d368da14c7c04b3c90a07..72fba67947882c98cef1cf32928dd4e16b9a1c1f 100644 GIT binary patch delta 44 xcmZpZ?~&&X<>lpK0D`?r5pj1m@`f`Bd=&z6Lk=$~$xP2q%`7S2oW~@=3jhS44BY?# delta 38 scmeB?ZlpK0D}ABK5^GJ@`f{U-QssFO-oNqO3m9`!X&{90L8}&{r~^~ diff --git a/standards/__pycache__/views.cpython-38.pyc b/standards/__pycache__/views.cpython-38.pyc index 6ba1f57153239f1bd86ad3e17e34e3100490b062..5f9278924de85ad7de7d2db10b8d7f47d839f085 100644 GIT binary patch delta 3134 zcma);%WoUU8NhdT$z5{!(3=!xJxEcOv)03L+`6@5*OFt)j?pGXBn64nm|1Jq5?2%{ z&#ojpUYfSm*v&(LgGquIwF9b`#z29%P|-uuUXp*Hy(N3dC5PMs^b#OQ4*kBNY)Y!) zMg)JH`DW&uZ@$Nj)=z(XIzAPP=@R_4e028gUq=2KUsA~5_-o1@y{c1rjg%EP!tX1o zin1z~18&4t?0_fPL0h#oJ7kAxfCgbCxWkAlMpQTYKWoS;DQliwjZw|hJk<+&iWi`v zJL(!Ck|$3{M);X~#MjLkt2lirms^c@%_QU zwmonT_86icu^Z9HS#YX(FEo?zbs7N@iOb#miy-You^-FjrVFOyOk0IQF2@dmtcG7; zYh>M2HPW&l+XOIfG_xRf2KZ$y6A|*qvA>W1S$moc@&9N&WSBRF1|oG$Bm89O1exTk zp{~Y+B1zyuiIO?_mdr-@#~~x~oJXp`H3|C9@oz%krTWW3FIepa31PqV6uYb1?e^Gd zJHx*XXDj{SJ#Ayuh0$IZZNO1aqp?+jUc5yvxE`^aX+uh??xInMWXKC0mtO8KhrRH| z+WW9J3v2tt+VG~e_r=;^N-FCxCkb}N!Dgkpn>MbI5O&@E>K^`toFq+}(R{%l1jyzACQ}no3Fbpzv0G zNs@M~%5>KqtsHmv^E;6zNrrzOIZQ@*TlB*dy%61dgkg{;@5$nqoxq4=Iy?|$plxWr zUM#VBvoH?yb&KZR62msjaygbIz5HxXk{^jh4m{zj^OieXqO1uuO(BL6%>X}?cXCT+ zAy3&pl!^38^UJYozj*=sFCxw$UP9p3?01Nl5oZB@&{-(tU0=&PG(VGf**FRnlTwz# zIRl6>J{mus8^q==#IF$|pT+4;Vs{d83?T!I1~!Ck3vnKBCR((XbB=2ksmUmN3gr_B z^qEf_Hp{v4E`sgLkcQV$SdV&>busU_uxC#_ z_QEq|oOc;<1+l{a-P&cmip`x;ApRf)rWUB_TI)R7HcxKw*V-&d$nk$zWEfeBb_0;HE0;ay74ScT92?o7|R86(PKIO9jN z!@$uu0KQ7Cg5_GZa()9+N3m6}@Y>6XGCX7>`csEShy?H>M>X~a|5Iv38wKGw6y#t>zJj(w?QL^h z2Bfu=|2?+EttXQIVYb6b&`q_QOC)OD4s?g#`XJ4onl+0v)^8Wj74p*=w5bt>B{@!1 z_~`AjN)mACu(x^lu775)!qB+55GHHai?B}?-W2ulY7Zxg)|dljP_SyrnT3QMKKi3k ze;QPZo48hUr?4xoOc`1b^4c-@Tb+g>&hf~anGpL9@h>|E2dvmv| zo8098=sHllqjo9|k;+M2HHHwr6{Z9?c@!1aUYwoGi9Yb{82op3y6)3%l8|MBpFr>j zRb}sTr~AWA7OKL+6d&tJs-h&{fv3^;~d>1Xdz@8^ICpB5or-KpfhN5&lKrk*-m#e delta 2964 zcma)-TTB#J7{}+#?9MKGGg z)dwQ>q?)FfK>DIDO&XfMG^R=4o5lxU_NhMj+&;8TwGZw2pFtNW8r}HgJKwo|=ex~c zd#3lqdZN*g#Q%M{_uz?D8@`PVE94t?O<6XQQ=E{cSUy*>{FZ73te{miBNrL+n4I(d zf8J0GAD{6rFyj|9suP}nra{I?F5t?O5kqwYuIl<-#q}AtcKTt?{MYe!2{30+s-cY|P(Nrg5>7|F=sxBodRW*dKml z3Do&$I^CPmZM)aZWYTH6p6fik4XJ(FRRg4a6=cHEsg+Sb2FuxPkkb8~REz z%I+!bQ79gtty^?YnUaa*EMxzKnnrL#GfqH`7!^F05jVnZcsEz%Xx{DCa;pUvnJ$vB%*}B*jW2o5@zTKXQL*JrCUjLJ`642eSA}-$6JL>lca? zOGax+1KSjBB=u~nu5zoL)(vCDDQ6&~tGgX3roDLV{#*f$T}~I^s@Om0Xv16skqIsT-$m1r~C~TtCng zSeIr`$}X?|h>P9yBor`{>Hy);LWP&*gD+pzz{blP!WXd01p3&+@{SSDg&2!)727}kOis$3m623fHyGzEY`(_pWZ*fio)r;d}AQxxUW_ z2dQDw^vMg}I}|TnuVN2QnxBKA%%E zwwd>5^#RkS;wvIbryYxKa`<_!+U$#}{%swL6<{aRB?uCjk?)>yB~aIZgC z!U|Ci!hOON|178BK=0$QkU5bTCAgiM`bIWUn;?vRUweO+F{&^o!LHU-s-k*6=ie>O z%lQTB&a+CCrm#xbcNj(#>{I94SLk}LHL{ymXD8xaA)&d+wLH*^WtrgT!|%Boq<5!# zQ$LW%HNK#m3ZI@}%NvGA&@8o5dJ3k@%foqb77Z5ryGhZO=Y=LAUhthge5r8=06MXdECr4&nkA h7zNOPL>r;EAl(KSa2J>W*3U&dOEzsG$Jo)P
- {% for g in standard.visibleby.all %} - {{g.agencygroupname}} - {% endfor %}
{% endblock content %} \ No newline at end of file diff --git a/standards/views.py b/standards/views.py index cc92fa5..d69e4e6 100644 --- a/standards/views.py +++ b/standards/views.py @@ -23,7 +23,7 @@ class StandardsManagement(LoginRequiredMixin, ListView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # # Get all Users of the Same Agency as logged user - areas = Areas.objects.filter(agency__pk=self.request.user.profile.agency.pk) + areas = Areas.objects.filter(agency__pk=self.request.user.profile.agency.pk).order_by("areaorder") standards_of_user = Standards.objects.filter(agency__pk=self.request.user.profile.agency.pk, created_standard_by=self.request.user.pk) standards_of_agency = Standards.objects.filter(agency__pk=self.request.user.profile.agency.pk, public=True) unpubstandards_of_user = Standards.objects.filter(agency__pk=self.request.user.profile.agency.pk, public=False) @@ -100,20 +100,36 @@ def StandardAdd(request): # GROUPS new_standard.save() + + ''' + + HIER WEITER MACHEN: Gruppen, Dateien und Files werden nicht gespeichert, Länge des übergebenen + Arrays ist komisch, da Strings ankommen und es umgebaut werden muss. Wenn das Array aber LEER + ist, gibt es '' zurück und das ist komisch... + + + ''' + # ADD GROUPS groups = normalForm.cleaned_data['checked_groups'].split(",") + + for g in groups: - new_standard.visibleby.add(AgencyGroup.objects.get(pk=g)) + if(g.isdigit()): + new_standard.visibleby.add(AgencyGroup.objects.get(pk=g)) # ADD STANDARDS standards = normalForm.cleaned_data['added_standards'].split(",") for s in standards: - new_standard.linked_standards.add(Standards.objects.get(pk=s)) + if(s.isdigit()): + new_standard.linked_standards.add(Standards.objects.get(pk=s)) # ADD FILES files = normalForm.cleaned_data['added_files'].split(",") + for f in files: - new_standard.addedfiles.add(DataFile.objects.get(pk=f)) + if(f.isdigit()): + new_standard.addedfiles.add(DataFile.objects.get(pk=f)) tempstandardname = normalForm.cleaned_data['name'] if(new_standard.public and request.user.has_perm('users.standardmanager')): diff --git a/users/static/users/css/datepicker.css b/users/static/users/css/datepicker.css new file mode 100644 index 0000000..892816c --- /dev/null +++ b/users/static/users/css/datepicker.css @@ -0,0 +1,121 @@ +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot'); + src: url('//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), + url('//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff2') format('woff2'), + url('//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff') format('woff'), + url('//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.ttf') format('truetype'), + url('//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.glyphicon-time:before { + content: "\e023"; +} + +.glyphicon-chevron-left:before { + content: "\e079"; +} + +.glyphicon-chevron-right:before { + content: "\e080"; +} + +.glyphicon-chevron-up:before { + content: "\e113"; +} + +.glyphicon-chevron-down:before { + content: "\e114"; +} + +.glyphicon-calendar:before { + content: "\e109"; +} + +.glyphicon-screenshot:before { + content: "\e087"; +} + +.glyphicon-trash:before { + content: "\e020"; +} + +.glyphicon-remove:before { + content: "\e014"; +} + +.bootstrap-datetimepicker-widget .btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} + +.bootstrap-datetimepicker-widget.dropdown-menu { + position: absolute; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} + +.bootstrap-datetimepicker-widget .list-unstyled { + padding-left: 0; + list-style: none; +} + +.bootstrap-datetimepicker-widget .collapse { + display: none; +} + +.bootstrap-datetimepicker-widget .collapse.in { + display: block; +} + +/* fix for bootstrap4 */ +.bootstrap-datetimepicker-widget .table-condensed > thead > tr > th, +.bootstrap-datetimepicker-widget .table-condensed > tbody > tr > td, +.bootstrap-datetimepicker-widget .table-condensed > tfoot > tr > td { + padding: 5px; +} \ No newline at end of file diff --git a/users/static/users/js/datepicker.js b/users/static/users/js/datepicker.js new file mode 100644 index 0000000..5aec7a9 --- /dev/null +++ b/users/static/users/js/datepicker.js @@ -0,0 +1,55 @@ +jQuery(function ($) { + var datepickerDict = {}; + var isBootstrap4 = $.fn.collapse.Constructor.VERSION.split('.').shift() == "4"; + function fixMonthEndDate(e, picker) { + e.date && picker.val().length && picker.val(e.date.endOf('month').format('YYYY-MM-DD')); + } + $("[dp_config]:not([disabled])").each(function (i, element) { + var $element = $(element), data = {}; + try { + data = JSON.parse($element.attr('dp_config')); + } + catch (x) { } + if (data.id && data.options) { + data.$element = $element.datetimepicker(data.options); + data.datepickerdata = $element.data("DateTimePicker"); + datepickerDict[data.id] = data; + data.$element.next('.input-group-addon').on('click', function(){ + data.datepickerdata.show(); + }); + if(isBootstrap4){ + data.$element.on("dp.show", function (e) { + $('.collapse.in').addClass('show'); + }); + } + } + }); + $.each(datepickerDict, function (id, to_picker) { + if (to_picker.linked_to) { + var from_picker = datepickerDict[to_picker.linked_to]; + from_picker.datepickerdata.maxDate(to_picker.datepickerdata.date() || false); + to_picker.datepickerdata.minDate(from_picker.datepickerdata.date() || false); + from_picker.$element.on("dp.change", function (e) { + to_picker.datepickerdata.minDate(e.date || false); + }); + to_picker.$element.on("dp.change", function (e) { + if (to_picker.picker_type == 'MONTH') fixMonthEndDate(e, to_picker.$element); + from_picker.datepickerdata.maxDate(e.date || false); + }); + if (to_picker.picker_type == 'MONTH') { + to_picker.$element.on("dp.hide", function (e) { + fixMonthEndDate(e, to_picker.$element); + }); + fixMonthEndDate({ date: to_picker.datepickerdata.date() }, to_picker.$element); + } + } + }); + if(isBootstrap4) { + $('body').on('show.bs.collapse','.bootstrap-datetimepicker-widget .collapse',function(e){ + $(e.target).addClass('in'); + }); + $('body').on('hidden.bs.collapse','.bootstrap-datetimepicker-widget .collapse',function(e){ + $(e.target).removeClass('in'); + }); + } +}); \ No newline at end of file