From fec3993847fcde73a7b0541378a0f654dfc781b0 Mon Sep 17 00:00:00 2001 From: Holger Trampe Date: Tue, 3 Dec 2019 20:28:38 +0100 Subject: [PATCH] =?UTF-8?q?Funktionalit=C3=A4t=20f=C3=BCr=20das=20hinuzf?= =?UTF-8?q?=C3=BCgen=20und=20entfernen=20von=20Nutzern=20zu=20Bereichen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- areas/__pycache__/forms.cpython-38.pyc | Bin 956 -> 1259 bytes areas/__pycache__/models.cpython-38.pyc | Bin 1330 -> 1345 bytes areas/__pycache__/urls.cpython-38.pyc | Bin 856 -> 926 bytes areas/__pycache__/views.cpython-38.pyc | Bin 2898 -> 4083 bytes areas/forms.py | 21 +-- areas/templates/areas/areas_add.html | 1 + areas/templates/areas/areas_management.html | 21 ++- areas/templates/areas/areas_update.html | 134 +++++++++++++++++- areas/urls.py | 4 +- areas/views.py | 62 ++++++-- .../__pycache__/settings.cpython-38.pyc | Bin 3012 -> 2973 bytes .../__pycache__/urls.cpython-38.pyc | Bin 1482 -> 1516 bytes users/__pycache__/models.cpython-38.pyc | Bin 2950 -> 2939 bytes users/templates/users/base.html | 8 +- 14 files changed, 217 insertions(+), 34 deletions(-) diff --git a/areas/__pycache__/forms.cpython-38.pyc b/areas/__pycache__/forms.cpython-38.pyc index 15565f2208efa317d9764d094811076a6edf75ea..c8884b9c52220115e701be27b5c92ba3d68ec8e2 100644 GIT binary patch delta 632 zcmZ{gyGq1B6ozwVl5Db@tal4pP!xn9h+w6HD2kWDE!1tshz4ie3)vMWD~Ko-+E`dD z0UyDq@Bu7rZ1({Ku@nRa!87r$IK%no%+H*Yoc}U)Z)Xdxo7QkGpWd!-(ndB12aTcp zD1=%S7=Sjfaf{n08n*>h=rLsuDrufUCG)Ph+*#2)w{bDnc(@_ViLaqQqngT$f)hW% z;z)-|6`m(%#{EJhWaJlWQUswtyR)@h6}5Wg&o8d}yj(2TgD^fMxg%8{IS31MLIC%R zX~-@V@}4eTJY`m)MM25Q7rvoWX*NPdL=YB9?pv7tSQKwl7||d?XbiZb8Y|t delta 358 zcmaFOxrd!El$V!_0SG!LK8^jwIFV0=v23EYpDsrZPcCm1FC#+=LkeRKLoQDU{Q)wVi n6|n&TFGKTlsbes6z^?Kd^PwQMI5!0(jmOf zZ*X!FH$OvH@jrZV@m}t^hkN00&WHVKvw`c{MAiBH=hQWGwn9hw=6+{V4Xcy@fiibO zCm>)!Wk#TaG;tsFkU{yFbnX0c$MO2tJd2N!<5`x!Z_xYv`)J!hhI(QGooiuDF%RpB zpESS*S6vo>L2X9DCU{U+dl7u4){uAf%6F8P_^nDvR})Ne;mB33w-xN|MuRDeX*9SL zIOI`~relt+o``QSIze$L(gZKE2;y;^4LQmutwq=5i}p-AGSJ&}Npk(RB+5!tng+Hl zMVe}+o&rnvD5J}i86NdD%Miu4Ta&qQ(C{Wj!0BJWQH&gfDL;*tUnq%n1z)9p3dn^e OtEG-#n0DxYTkIG8B~(lR diff --git a/areas/__pycache__/urls.cpython-38.pyc b/areas/__pycache__/urls.cpython-38.pyc index 606727897b53f6b828bf490962aed55c0c767622..5822c7dfc50074d18cab83d2c45197416e5ee343 100644 GIT binary patch delta 335 zcmcb?HjiC9l$V!_0SL0Yp2bG6Ffcp@agYHgkmCTv#iu4}J4>aoq%h_1W=!Er;qGMyD&Pky5CAIRTEM%I0VpmA6&Hev zb3?_2q2eN`%vpRXq99&6YZQNqSTKX8_{ImtjIvdniAAZ2iCKvi`c=FjrY?wGmYG`a zrztQwjHxWCh#Tn4TkMI&@gUJCA&{c@#FP{eT^tWmeT%!aD5oH?q$IT{uXrUxkqA%& znD}MoY!wq)oLW>I6PgE9o)hDepIn-onpaXBn8KC9-OCJ=+{IKDa*I8&IKC`1wfq)$X;Dr=Vo6DAQC{&%h9VK5bHKze zS7)o3(Bjmh;+W99qSVBk829}A^qf=$m!izF)R?f;qJX0Otkmq1n3T-)%#y^M)X7QA ZDk1_v{XC33i~@`jTr!L@j1r6ze*n`rMZ5q2 diff --git a/areas/__pycache__/views.cpython-38.pyc b/areas/__pycache__/views.cpython-38.pyc index c43e05eb0120a1e76083a5a634b964d8a6ca5637..868d62f9f0c20c47ab39a32aa2d6296addd2602a 100644 GIT binary patch literal 4083 zcmaJ^NpBp-74GVNdKM0cq^QmE*m0K0LI>GnD^6s|l5I!?;z$Y5V9;qz70GUP_s~^6 zT8Pn!0(^3ibKnDY)Y(9ON6vK(5Wv46fKL8i^@xi^W(HmT`c?I-SMPmq>3iL7Wa0O} zumAhke+?|_KlE_?=i%WGxYWNfaEr6TDp|}J(RN{%PV5-kDcsVFz0!~UGKhmRjKi`O zx5_AvFz<4&XqTP1W7hgbx9r6|!w-suvLE-$#dy)og~gy;ikA%CDwfNYc%?iSpJUc7 zi$}cu)Z%U72!G#=SHbDSBg()Q)g1wkNa<5KTosI7e~XPefH{hd9rYdd#xcV^{Y z?&m=s<}J>?WKW!#eGqYb=5XgL`x)Rev$2)CK4Ni%U8?cpB-!233n|&7Jlq)vZKvZp zdmxe`t6t70lg*@gY1G!9n(hjz`&*(;#*?ZRkLm{hf!Y+)_H2%as3&e_oV1(qF$7H6?1{5UWWv$+F^g@#7x zgKinPMZkcsJLZ^kz`yX{HMTi{IRY^0VK6rYaT0UDmQ66u*del`je zBg;22Ja^=f=(lKin+9`kV+M10T1ijJ#{hTWzxT#*EnoA**rt{9AJL>PsjYs6p|%bf zLIO%YvjKfj6ePJfW4WJr&9k9{I^4GoS~DC3rm@%e7C#hHWaI5&T5TbRY}Id#B1wMH zftrrTNE-4Yp5!GOF4OP^O@>*e>a-dQy)XubYQYn-YI6UvF@=sckxh~ZX_4{gwlRiw ziS?=>eg)ZTWpt;RiH~Xds745}@02b(5(qWS2ON4kmya z*U)D2M>L!U$RA_k0xm`M34mm-?S>ss68~&ik}9vllH0Lwpy+THPy|Gg`9j#+(>*%b zQL>gl!Rvch$aKoUk}}L@2Gb#wkkHq*>#}$aspNKp)GHurtA^|M?c9EuAvv4b+`igm zK;V=hYQXvur@tnK0qYu3r(p9p;Lou+U?JOk^Q79Zp>xza(=qawkfpn|D0d6s#3Yku z^D{j``u&_Vpk!q{0bfYsp6v(H_%uI=V4fBlUmz`@B6-}0Un1j|HvAGaemN?xd#gt- zQAv}njW3MD&W=S2m6NepJBT;;DBe~M<87x#0?kw=Bx24pF(==}`%S!=gkk_omUz`i zG;sr$NuHLC>~VoSbaa5Vqo6qf9}h1b!e#zr3QtvNKKb?rCR^Es0Q zWt3vhkx8gv4cg_wk0=|hclk_B218Hz$0{qMvBa3{1OHr<$ z#~7ll)0H%H0y8Zzs7_tSrGAQ54W36|zGMG`$#+1bFv9E3jxFyVHfM~xb0jd-9q+)e zgL&J=xZli}QpyNb%&Kl4$_XInpJ&Qx{eL+|3gn|rZ1%Ga8l9PwM?74$aBr_#Puw%* zcb-{KJo9cBvU>SK-p?0#3+NuqJRSkre!VpF50;-<`|L?jugpB$!}{FJ2I7NR$lG7J z`>3t;D(}#pTgWfnb?w~x=q`Fdw3?GD4uEsQocs_bmG5IfONi%;$7ml*B44nf{2k5y z9>d6$pVFcp&6u8RT!^%a7qB?Zs;t^-LO`#+!azBhqGOeNm+1QfUFonC_4b4hGc~Lx z^)MYmtk~}Uc&mb%~H(`N}HGP0?78^})k5H^sZIZffp;c{2`4PQn z0_bGlVB$^QB#AC^U#)$#2+&JAg{UMosFDH%<-{}{w}?R}kJ}F?atG%$R=Z8?t29uk z#fvBNK$0tYhbE7TJoQ|9K*5>d9456VDL#4r2EL+6i*=kHTV|J8gm|QT$RadleP zE9gl=Hn8PiuyTELS@(I4c4@MvwkNV4PirNqBhwe>Z0h1=c7H9M*4t|(eb6cCU_rb* zU(mGW=+xozv7}B;Qeu`AWip_FDxajlgKMa*R!xuHJGn#CsCks@RTKU_dgXLI8ZngG zbbBsl8=rW_;Em}Av?;Yarq-H7V2*sulE$XSoZ;2xW8ecM1WQpy?Z8Y!TpdPDT;CmZ L2NwtJ!Q0;gVi>UI delta 1126 zcmaJmJ%{S*);m4?1HH?G;&(8aw zjYeYE93x+LCmVI5P=#t4nNs|eyS#0aK&|?Wi-MZ_yhm2aT?=IO zNf39Orsw*;kMS9V0zwf%HkU22a$F=MAKfe_P9dB|$N>aetK;|FPLl3v;A_Hx)-KEbwc9TG@k3*#sofKioH)I)B H&Px6PHvrL9 diff --git a/areas/forms.py b/areas/forms.py index 7f12445..0220c46 100644 --- a/areas/forms.py +++ b/areas/forms.py @@ -13,13 +13,18 @@ class AreaAddAreaForm(forms.ModelForm): labels = { "name" : "Bereichsname", "color" : "Farbe", - "desc" : "Kurze Beschreibung", - "usersfield" : "Zugeteilte Personen" + "desc" : "Beschreibung" } - fields = ['name', 'color', 'desc', 'usersfield'] + fields = ['name', 'color', 'desc'] - def __init__(self, user=None, *args, **kwargs): - super().__init__(*args, **kwargs) - if(user != None): - users_of_agency = User.objects.filter(profile__agency__pk=user.profile.agency.pk) - self.fields['usersfield'].queryset = users_of_agency \ No newline at end of file + #def __init__(self, user=None, *args, **kwargs): + # super().__init__(*args, **kwargs) + # if(user != None): + # users_of_agency = User.objects.filter(profile__agency__pk=user.profile.agency.pk) + # self.fields['usersfield'].queryset = users_of_agency + +class AjaxForm(forms.ModelForm): + field = forms.CharField(max_length=200) + class Meta: + model = Areas + fields = ['name', 'color', 'desc'] \ No newline at end of file diff --git a/areas/templates/areas/areas_add.html b/areas/templates/areas/areas_add.html index 05cd327..a3c2375 100644 --- a/areas/templates/areas/areas_add.html +++ b/areas/templates/areas/areas_add.html @@ -7,6 +7,7 @@
{% csrf_token %} {{ form|crispy }} +

Nachdem Erstellen eines Bereichs können Mitarbeiter zugewiesen werden.


  Abbrechen diff --git a/areas/templates/areas/areas_management.html b/areas/templates/areas/areas_management.html index 35d6987..da9ffa9 100644 --- a/areas/templates/areas/areas_management.html +++ b/areas/templates/areas/areas_management.html @@ -36,7 +36,7 @@
-
+
Name

{{ item.name }} @@ -45,15 +45,28 @@

{{ item.created_area_by.first_name }} {{ item.created_area_by.last_name }}

-
Erstellt am
+

- {{ item.created_area_date }} +

+ +
+
Farbe

-
+
Erstellt am
+

+ {{ item.created_area_date }} +

+
+
+
Beschreibung
+

+ {{ item.desc }} +

+
diff --git a/areas/templates/areas/areas_update.html b/areas/templates/areas/areas_update.html index 0e9c344..8165229 100644 --- a/areas/templates/areas/areas_update.html +++ b/areas/templates/areas/areas_update.html @@ -2,15 +2,139 @@ {% load static %} {% load crispy_forms_tags %} {% block content %} + + +

Bereich aktualisieren


{% csrf_token %} - {{ form|crispy }} -
-   - Abbrechen + {{ form|crispy }} +
Mitarbeiter hinzufügen
+
+ +
+ + +
+ + {% for us in possible_users %} + + {% endfor %} + + +
+
+
Zugewiesene Mitarbeiter
+
+ {% if added_users|length > 0 %} + + {% for us in added_users %} + {{ us.first_name }} {{ us.last_name }}   + + {% endfor %} + {% else %} +

Diesem Bereich ist noch kein Mitarbeiter zugewiesen.

+ {% endif %} +
+
+ +   + Abbrechen
-{% endblock content %} \ No newline at end of file + +{% endblock content %} diff --git a/areas/urls.py b/areas/urls.py index 1c6a955..f6069f0 100644 --- a/areas/urls.py +++ b/areas/urls.py @@ -2,6 +2,7 @@ from django.urls import path from django.contrib.auth import views as auth_views from django.contrib.auth.decorators import login_required, permission_required from .views import AreasManagement, AreasAddArea, AreaDeleteView, AreaUpdateView +from . import views ''' '' - Startseite nach erfolgreichem LOGIN @@ -14,7 +15,8 @@ urlpatterns = [ path('', permission_required('users.tasks_management')(AreasManagement.as_view(template_name="areas/areas_management.html")), name='areas-management'), path('addarea/', permission_required('users.tasks_management')(AreasAddArea.as_view(template_name="areas/areas_add.html")), name='areas-addarea'), path('areas//delete', permission_required('users.users_usermanagement')(AreaDeleteView.as_view()), name='areas-delete'), - path('area//', permission_required('users.users_usermanagement')(AreaUpdateView.as_view()), name='areas-manage') + path('area//', permission_required('users.users_usermanagement')(AreaUpdateView.as_view()), name='areas-manage'), + path('areaajax/', views.area_addareas_ajax, name="area-ajaxview") ] diff --git a/areas/views.py b/areas/views.py index fca208a..9918168 100644 --- a/areas/views.py +++ b/areas/views.py @@ -3,9 +3,9 @@ from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView, View from .models import Areas from django.contrib import messages -from .forms import AreaAddAreaForm +from .forms import AreaAddAreaForm, AjaxForm from django.contrib.auth.models import User - +from django.http import HttpResponse, JsonResponse @@ -71,18 +71,54 @@ class AreaUpdateView(LoginRequiredMixin, UpdateView): return super().form_valid(form) # Form wird geladen; Checkboxen werden vorbereitet und hier rausgerendert. - def get(self,request,*args, **kwargs): - # User ist der hier Aufgerufene, bzw. das Profil! - loggeduser = request.user + #def get(self,request,*args, **kwargs): + # # User ist der hier Aufgerufene, bzw. das Profil! + # loggeduser = request.user + # + # return render (request, self.template_name, {'form':self.form_class(loggeduser), 'active_link': 'usersmanagement'}) + + + def get_context_data(self, **kwargs): + context = super(AreaUpdateView, self).get_context_data(**kwargs) + area = Areas.objects.get(pk=context['object'].pk) + # User still in Area + context['added_users'] = area.usersfield.all() + # Get all Users from same Agency which are NOT in context_added_users + possible_users = User.objects.filter(profile__agency__pk=self.request.user.profile.agency.pk).exclude(pk__in=context['added_users']) + context['possible_users'] = possible_users + # Active-Link for Base-Design + context['active_link'] = 'areasmanagement' + # Area ID + context['objectid'] = context['object'].pk + return context + + +def area_addareas_ajax(request): + if request.method == 'GET': + + # ADD USER TO MANY-TO-MANY USERSFIELD + if request.GET['action'] == 'adduser': + area = Areas.objects.get(pk=request.GET['objectid']) + area.usersfield.add(User.objects.get(pk=request.GET['userid'])) + area.save() + # REMOVE USER TO MANY-TO-MANY USERSFIELD + elif request.GET['action'] == 'remuser': + area = Areas.objects.get(pk=request.GET['objectid']) + area.usersfield.remove(User.objects.get(pk=request.GET['userid'])) + area.save() + userid = request.GET['userid'] + workinguser = User.objects.get(pk=userid) + username_clean = workinguser.first_name + " " + workinguser.last_name - return render (request, self.template_name, {'form':self.form_class(loggeduser), 'active_link': 'usersmanagement'}) + # Getting Remaining-Users + area = Areas.objects.get(pk=request.GET['objectid']) + added_users = area.usersfield.all() + possible_users = User.objects.filter(profile__agency__pk=request.user.profile.agency.pk).exclude(pk__in=added_users) + possible_users_js = list(possible_users.values()) + remaining_users_counter = len(added_users) + return JsonResponse({'userid' : userid, 'username_clean' : username_clean, 'remaining_users':possible_users_js, 'remaining_users_counter' : remaining_users_counter}) + else: + return HttpResponse("Request method is not a GET") - -#def get_context_data(self, **kwargs): - # context = super(AreaUpdateView, self).get_context_data(**kwargs) - # users_of_agency = User.objects.filter(profile__agency__pk=self.request.user.profile.agency.pk) - # context['possible_users'] = users_of_agency - # context['active_link'] = 'areasmanagement' - # return context \ No newline at end of file diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index 92ae07f3c013aa2bfd00a07b04c03ce1d421b6ae..6f09932f9324db5a823ffb1b8b02a0bf2a5c6f55 100644 GIT binary patch delta 335 zcmYk0%Sr-a9L49;DM1_aKHjfonqBQ~Eh2*oY7yn;&xD9)_!#j5&IIl16=Jpqwrnl* z1ieYnqHQnGm#Yr^4jecK&WHM_9n9e$maa^Cp_N#*u*r6nLDTO^s zW1liOpsbkXP@_B!sQ|}~R6d%VFpK%bp-!vM2TfD&>TRoPzdN2LIEn!JkM8&hZe97Sbs0^c5uA3JSh~ zZyx4iS>%LbGUPjoU=%=s22jKp#xa2sCNb6NH5mn= zVcKhHnCa$hH|Iy$=?GT5N3H_c&_^4OvR;+T5`8TB{{2p53#}Ypx%1d*5!I@pDIqDNM((xcjb_ T*|YntmV8WR@|O~I$NV=xCD3GC diff --git a/digitaleagentur/__pycache__/urls.cpython-38.pyc b/digitaleagentur/__pycache__/urls.cpython-38.pyc index 45ecccb505c49418ab0d4527ad60a56f7cf9e99b..b254a197228c2ba04f21c8e0fa18121c2d3688d4 100644 GIT binary patch delta 201 zcmX@b{f3)2l$V!_0SH#+K8syAkyn<{Wuvw@qfshzifSrLidr*cGgCTulte0LmgEG+ zB8OCoRBj+!3W%js)O(rC8KNXoG=dp4H8*E4rZXv3aTKTKq$Zab=~oG-WF_XM=f^_@ z^h%3ziZvOdCSPK<1(E_RIY6?OWtV{j(Dot_@yo^8DkiizwWv5IG_NQ%F(<|)Ke;qF mHLs*N#@#a{CM7dHvm`NRauKT@qsHWgtSan`JYQLOIT!&HJvuZ1 delta 167 zcmaFEeTthml$V!_0SK(!pT=fQ?wO|HK_01)W=}gR;jJGELWwr&9)+{+das|sSYiXd7MIhprzq3_LXmM&$ zaZG4lQEFmNjC+25dQPf>OHpQ7YD`#aQ9x0CR%&)hOiE^YW=UdB>f}kRdW>q553;JT Keq-U`U<3gAf-!Rd diff --git a/users/__pycache__/models.cpython-38.pyc b/users/__pycache__/models.cpython-38.pyc index ba5049acedd37bc3cb68a75a7cd4b1ae7fa6fd00..ff6fe7feb9ebb7c62670617af4fde359addf6a21 100644 GIT binary patch delta 132 zcmZn@|1HKF%FD~e00b*@pT%z5$a|1U&Boa(CbT%Us5mAxuP8M!C&nc|ximL5ucSD} z-7_R6B{Mym!_3DBhCD*b03*pJng9R* delta 143 zcmew@)+Wvy%FD~e00b92p2lw3$a|2<(B0W8CbT%Us5mAxuP8M!C&oQLKRqW^!KEm( zEHx%9wJ4w{KPxr6Bqk*@J+mY+Cw1}{CIv?2$)d~)7}Y0lV?MzswYi>!iHR|AauZt% rW9Vjfc3DQo$jz!8v5btVlbbm|GTKfq<@(OgB*4hS%*P0ZJVMF - + - @@ -210,8 +209,11 @@ {% if messages %} {% for message in messages %} -
+