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 from django.contrib.auth.decorators import login_required class TasksAddTask(LoginRequiredMixin, CreateView): model = Tasks success_url = '/dasettings/main' 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' : 'dasettings'}) return context def form_valid(self, form): # Send message to the site messages.success(self.request, f'Tätigkeit 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 = '/dasettings/main' template_name = 'tasks/tasks_confirm_delete.html' def delete(self, request, *args, **kwargs): area = Tasks.objects.get(pk=kwargs['pk']) response = super(TasksDeleteView, self).delete(request, *args, **kwargs) name = area.name messages.success(request, f'Tätigkeit ' +name+ ' wurde gelöscht!') return response 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 = '/dasettings/main' 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'Tätigkeit 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 user_in_task = 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'] = 'dasettings' # 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. ''' @login_required 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'], agency=request.user.profile.agency) task.usersfield.add(User.objects.get(pk=request.GET['userid'], profile__agency=request.user.profile.agency)) task.save() # PRIO prio = Prio(user=User.objects.get(pk=request.GET['userid'], profile__agency=request.user.profile.agency), task=task) prio.save() # REMOVE USER TO MANY-TO-MANY USERSFIELD elif request.GET['action'] == 'remuser': task = Tasks.objects.get(pk=request.GET['objectid'], agency=request.user.profile.agency) task.usersfield.remove(User.objects.get(pk=request.GET['userid'], profile__agency=request.user.profile.agency)) 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, profile__agency=request.user.profile.agency) 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")