diff --git a/areas/__pycache__/forms.cpython-38.pyc b/areas/__pycache__/forms.cpython-38.pyc index 15565f2..c8884b9 100644 Binary files a/areas/__pycache__/forms.cpython-38.pyc and b/areas/__pycache__/forms.cpython-38.pyc differ diff --git a/areas/__pycache__/models.cpython-38.pyc b/areas/__pycache__/models.cpython-38.pyc index 956ddf9..ee4e6b7 100644 Binary files a/areas/__pycache__/models.cpython-38.pyc and b/areas/__pycache__/models.cpython-38.pyc differ diff --git a/areas/__pycache__/urls.cpython-38.pyc b/areas/__pycache__/urls.cpython-38.pyc index 6067278..5822c7d 100644 Binary files a/areas/__pycache__/urls.cpython-38.pyc and b/areas/__pycache__/urls.cpython-38.pyc differ diff --git a/areas/__pycache__/views.cpython-38.pyc b/areas/__pycache__/views.cpython-38.pyc index c43e05e..868d62f 100644 Binary files a/areas/__pycache__/views.cpython-38.pyc and b/areas/__pycache__/views.cpython-38.pyc differ 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 92ae07f..6f09932 100644 Binary files a/digitaleagentur/__pycache__/settings.cpython-38.pyc and b/digitaleagentur/__pycache__/settings.cpython-38.pyc differ diff --git a/digitaleagentur/__pycache__/urls.cpython-38.pyc b/digitaleagentur/__pycache__/urls.cpython-38.pyc index 45ecccb..b254a19 100644 Binary files a/digitaleagentur/__pycache__/urls.cpython-38.pyc and b/digitaleagentur/__pycache__/urls.cpython-38.pyc differ diff --git a/users/__pycache__/models.cpython-38.pyc b/users/__pycache__/models.cpython-38.pyc index ba5049a..ff6fe7f 100644 Binary files a/users/__pycache__/models.cpython-38.pyc and b/users/__pycache__/models.cpython-38.pyc differ diff --git a/users/templates/users/base.html b/users/templates/users/base.html index 7bafcda..67361b4 100644 --- a/users/templates/users/base.html +++ b/users/templates/users/base.html @@ -14,10 +14,9 @@ - + - @@ -210,8 +209,11 @@ {% if messages %} {% for message in messages %} -
+