140 lines
5.3 KiB
Python
140 lines
5.3 KiB
Python
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).order_by('name')
|
|
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 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'Aufgabe ' +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 = '/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")
|