digitaleagentur/tasks/views.py

128 lines
5.1 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
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")