from django.shortcuts import render from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView, View from .models import Tasks from .forms import TasksAddTaskForm from django.contrib import messages from django.http import HttpResponse, JsonResponse from users.priomodel import Prio # Create your views here. class TasksManagement(LoginRequiredMixin, ListView): model = Tasks # Adding active_link # Loading only user same agency # Change context and return for template-data def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # # Get all Users of the Same Agency as logged user tasks_of_agency = Tasks.objects.filter(agency__pk=self.request.user.profile.agency.pk) context.update({'active_link' : 'tasksmanagement', 'tasks_of_agency':tasks_of_agency}) return context class TasksAddTask(LoginRequiredMixin, CreateView): model = Tasks success_url = '/tasks' form_class = TasksAddTaskForm def get_form_kwargs(self): kwargs = super(TasksAddTask, self).get_form_kwargs() kwargs['user'] = self.request.user return kwargs def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({'active_link' : 'tasksmanagement'}) return context def form_valid(self, form): # Send message to the site messages.success(self.request, f'Aufgabe angelegt!') # SAVE OBJECTS TO SIGNALE! form.instance.agency = self.request.user.profile.agency form.instance.created_area_by = self.request.user return super().form_valid(form) class TasksDeleteView(LoginRequiredMixin, DeleteView): model = Tasks success_url = '/tasks' template_name = 'tasks/tasks_confirm_delete.html' def get_context_data(self, **kwargs): context = super(TasksDeleteView, self).get_context_data(**kwargs) context['active_link'] = 'tasksmanagement' return context # Hier andere Nutzer ändern, wenn man Usersmanagement darf! class TasksUpdateView(LoginRequiredMixin, UpdateView): model = Tasks template_name = 'tasks/tasks_update.html' success_url = '/tasks' form_class = TasksAddTaskForm def get_form_kwargs(self): kwargs = super(TasksUpdateView, self).get_form_kwargs() kwargs['user'] = self.request.user return kwargs def form_valid(self, form): # Send message to the site messages.success(self.request, f'Aufgabe aktualisiert!') return super().form_valid(form) def get_context_data(self, **kwargs): context = super(TasksUpdateView, self).get_context_data(**kwargs) tasks = Tasks.objects.get(pk=context['object'].pk) # User still in Area context['added_users'] = tasks.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'] = 'tasksmanagement' # Area ID context['objectid'] = context['object'].pk return context ''' Hier werden Aufgaben zu Mitarbeitern zugewiesen oder entfernt. Dabei wird bei jeder Aufgabe auch gleich ein Prio-Objekt erzeugt/entfernt, damit der Mitarbeiter seine Prioritäten auf dem Organigramm einstellen kann. ''' def task_addtasks_ajax(request): if request.method == 'GET': # ADD USER TO MANY-TO-MANY USERSFIELD if request.GET['action'] == 'adduser': task = Tasks.objects.get(pk=request.GET['objectid']) task.usersfield.add(User.objects.get(pk=request.GET['userid'])) task.save() # PRIO prio = Prio(user=User.objects.get(pk=request.GET['userid']), task=task) prio.save() # REMOVE USER TO MANY-TO-MANY USERSFIELD elif request.GET['action'] == 'remuser': task = Tasks.objects.get(pk=request.GET['objectid']) task.usersfield.remove(User.objects.get(pk=request.GET['userid'])) task.save() # DELETE PRIO Prio.objects.filter(user__pk=request.GET['userid']).filter(task__pk=request.GET['objectid']).delete() userid = request.GET['userid'] workinguser = User.objects.get(pk=userid) username_clean = workinguser.first_name + " " + workinguser.last_name # Getting Remaining-Users task = Tasks.objects.get(pk=request.GET['objectid']) added_users = task.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()) # Cleaned out, that only data is neede will send to the side (first/last-name and id) final_possible_users = {} for ele in possible_users_js: final_possible_users.update({'first_name':ele['first_name'],'last_name':ele['last_name'],'id':ele['id']}) # Counter for remaining users to show/hide "Keine Mitarbeiter"-Div remaining_users_counter = len(added_users) return JsonResponse({'userid' : userid, 'username_clean' : username_clean, 'remaining_users':possible_users_js, 'remaining_users_counter' : final_possible_users}) else: return HttpResponse("Request method is not a GET")