digitaleagentur/areas/views.py

95 lines
3.7 KiB
Python

from django.shortcuts import render
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 django.contrib.auth.models import User
from django.http import HttpResponse, JsonResponse
import json
from django.contrib.auth.decorators import login_required
from users.priomodel import Prio
from tasks.models import Tasks
@login_required
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'])
if(area.agency == request.user.profile.agency):
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'])
if(area.agency == request.user.profile.agency):
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
# Getting Remaining-Users
area = Areas.objects.get(pk=request.GET['objectid'])
if(area.agency == request.user.profile.agency):
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())
# 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")
'''
Update the Area-Order by drag and drop. Save per ID and order in table, example:
ID ORDER
0 --> 0
4 --> 1
2 --> 2
5 --> 3
Triggered by ajax in areas_management.html
Save all areas after drag n drop elements in table
'''
@login_required
def area_neworder(request):
if request.method == 'GET':
if request.GET['action'] == 'newareaorder':
neworderdata = json.loads(request.GET['finalod'])
for ele in neworderdata:
area = Areas.objects.get(pk=ele['id'])
if(area.agency == request.user.profile.agency):
area.areaorder = ele['neworder']
area.save()
return HttpResponse("UPDATED")
elif request.GET['action'] == 'newtaskorder':
tempuser = User.objects.get(pk=request.GET['userid'])
neworderdata = json.loads(request.GET['finalod'])
for ele in neworderdata:
print(request.GET['userid'])
print(ele)
prio = Prio.objects.filter(user__pk=request.GET['userid'], task__pk=ele['id'])
# PRIO FOUND
if(len(prio) > 0):
task = Tasks.objects.get(pk=ele['id'])
if(task.agency == request.user.profile.agency):
prio[0].prio = ele['neworder']
prio[0].save()
# NO PRIO FOUND - CREATE, SET NEW ORDER AND SAVE
else:
task = Tasks.objects.get(pk=ele['id'])
if(task.agency == request.user.profile.agency):
newprio = Prio(user=tempuser, task=Tasks.objects.get(pk=ele['id']), prio=ele['neworder']).save()
return HttpResponse("UPDATED")
else:
return HttpResponse("Request method is not a GET")