Struktur inkl. Bereiche und Tätigkeiten sowie Benachrichtigungen für Tätigkeiten fertig

This commit is contained in:
holger.trampe 2020-02-12 21:07:10 +01:00
parent 750b36dd2c
commit ea33eaaffd
14 changed files with 87 additions and 55 deletions

View File

@ -10,10 +10,9 @@ class TasksAddTaskForm(forms.ModelForm):
labels = {
"name" : "Aufgabenname",
"area" : "Übergeordneter Bereich",
"desc" : "Beschreibung",
"visible": "Im Organigramm sichtbar"
}
fields = ['name', 'area', 'desc', 'visible']
fields = ['name', 'area', 'visible']
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')

View File

@ -2,15 +2,15 @@
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section col-6">
<h3>Neue Aufgabe anlegen</h3>
<h3>Neue Tätigkeit anlegen</h3>
<hr>
<form method="POST">
{% csrf_token %}
{{ form|crispy }}
<p>Nachdem Erstellen der Aufgabe können Mitarbeiter zugewiesen werden.</p>
<hr>
<button type="submit" class="btn btn-success" href="{% url 'areas-addarea' %} ">Aufgabe anlegen</button>&nbsp;
<a class="btn" href="{% url 'tasks-management' %} ">Abbrechen</a>
<button type="submit" class="btn btn-success" href="{% url 'dasettings' %} ">Tätigkeit anlegen</button>&nbsp;
<a class="btn" href="{% url 'dasettings' %} ">Abbrechen</a>
</form>
</div>
{% endblock content %}

View File

@ -15,7 +15,7 @@
<p>Alle unter dieser Aufgabe erstellten Standards werden gelöscht!</p>
<div class="form-group">
<button type="submit" class="btn btn-danger">Aufgabe löschen</button>&nbsp;
<a href="{% url 'tasks-management' %}" class="btn btn-success">Abbrechen</a>
<a href="{% url 'dasettings' %}" class="btn btn-success">Abbrechen</a>
</div>
</form>
</div>

View File

@ -38,7 +38,7 @@
<hr>
<button type="submit" class="btn btn-success">Aufgabe aktualisieren</button>&nbsp;
<a class="btn" href="{% url 'tasks-management' %} ">Abbrechen</a>
<a class="btn" href="{% url 'dasettings' %} ">Abbrechen</a>
</form>
</div>
<script type="text/javascript">

View File

@ -1,14 +1,13 @@
from django.urls import path
from django.contrib.auth import views as auth_views
from django.contrib.auth.decorators import login_required, permission_required
from .views import TasksManagement, TasksAddTask, TasksDeleteView, TasksUpdateView
from .views import TasksAddTask, TasksDeleteView, TasksUpdateView
from . import views
'''
Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben!
'''
urlpatterns = [
path('', permission_required('users.tasks_management')(TasksManagement.as_view(template_name="tasks/tasks_management.html")), name='tasks-management'),
path('addtask/', permission_required('users.tasks_management')(TasksAddTask.as_view(template_name="tasks/tasks_add.html")), name='tasks-addtask'),
path('tasks/<int:pk>/delete', permission_required('users.tasks_management')(TasksDeleteView.as_view()), name='tasks-delete'),
path('tasks/<int:pk>/', permission_required('users.tasks_management')(TasksUpdateView.as_view()), name='tasks-manage'),

View File

@ -8,23 +8,11 @@ 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'
success_url = '/dasettings/main'
form_class = TasksAddTaskForm
def get_form_kwargs(self):
@ -34,12 +22,12 @@ class TasksAddTask(LoginRequiredMixin, CreateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({'active_link' : 'tasksmanagement'})
context.update({'active_link' : 'dasettings'})
return context
def form_valid(self, form):
# Send message to the site
messages.success(self.request, f'Aufgabe angelegt!')
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
@ -47,14 +35,14 @@ class TasksAddTask(LoginRequiredMixin, CreateView):
class TasksDeleteView(LoginRequiredMixin, DeleteView):
model = Tasks
success_url = '/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'Aufgabe ' +name+ ' wurde gelöscht!')
messages.success(request, f'Tätigkeit ' +name+ ' wurde gelöscht!')
return response
def get_context_data(self, **kwargs):
@ -66,7 +54,7 @@ class TasksDeleteView(LoginRequiredMixin, DeleteView):
class TasksUpdateView(LoginRequiredMixin, UpdateView):
model = Tasks
template_name = 'tasks/tasks_update.html'
success_url = '/tasks'
success_url = '/dasettings/main'
form_class = TasksAddTaskForm
def get_form_kwargs(self):
@ -76,19 +64,19 @@ class TasksUpdateView(LoginRequiredMixin, UpdateView):
def form_valid(self, form):
# Send message to the site
messages.success(self.request, f'Aufgabe aktualisiert!')
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
context['added_users'] = tasks.usersfield.all()
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'] = 'tasksmanagement'
context['active_link'] = 'dasettings'
# Area ID
context['objectid'] = context['object'].pk
return context

View File

@ -137,6 +137,11 @@ class Profile(models.Model):
add_new_group_mail = models.BooleanField(default=False)
add_new_group_push = models.BooleanField(default=True)
# TASKS
# Einer neuen Tätigkeit zugewiesen
add_task_mail = models.BooleanField(default=False)
add_task_push = models.BooleanField(default=True)
def __str__(self):
return f'{self.user.last_name}'

View File

@ -7,6 +7,14 @@ from django.contrib.auth.models import Permission
from notificsys.models import UserNotification
from django.core.mail import send_mail
from django.template.loader import render_to_string
from tasks.models import Tasks
# Deletes all Notifications added to to delete news
@receiver(pre_delete, sender=News)
def del_news_notifications(sender, instance, **kwargs):
UserNotification.objects.filter(elementid=instance.pk).delete()
# SIGNALS FOR USER
'''
@receiver(post_save, sender=User)
@ -38,8 +46,6 @@ def adjust_group_notifications(instance, action, reverse, model, pk_set, using,
# IF FALSE NO MAILS WILL BE SEND - IN PRODUCTIVITY CHANGE TO TRUE #
GLOBALSENDMAILS = True
# GROUPSETTINGS FOR SOME USER WAS CHANGED
if isinstance(instance, Group):
group_touched = AgencyGroup.objects.get(group=instance)
@ -91,10 +97,7 @@ def adjust_group_notifications(instance, action, reverse, model, pk_set, using,
# SIGNAL FOR NEWS
# Deletes all Notifications added to to delete news
@receiver(pre_delete, sender=News)
def del_news_notifications(sender, instance, **kwargs):
UserNotification.objects.filter(elementid=instance.pk).delete()
@receiver(post_save, sender=News)
def save_news(sender, instance, **kwargs):
@ -120,3 +123,58 @@ def save_news(sender, instance, **kwargs):
if(user.profile.news_push):
newnotification = UserNotification(touser=user, notificationtext="Neue Agenturnews: " + instance.name, notificationtype="agencynews", elementid=instance.pk)
newnotification.save()
# SIGNALS FOR TASK
@receiver(signal=m2m_changed, sender=Tasks.usersfield.through)
def adjust_group_notifications(instance, action, reverse, model, pk_set, using, *args, **kwargs):
# IF FALSE NO MAILS WILL BE SEND - IN PRODUCTIVITY CHANGE TO TRUE #
GLOBALSENDMAILS = True
# A USER WAS TOUCHED ATT HIS TASKS
user_touched = User.objects.get(pk=list(pk_set)[0])
taskname = instance.name
# PUSH NOTIFICATION FOR GROUOPCHANGES
if(user_touched.profile.add_task_push):
if(action == 'post_remove'):
newnotification = UserNotification(touser=user_touched, notificationtext="Sie wurden von der Tätigkeit " + taskname + " entfernt.", notificationtype="taskchange")
newnotification.save()
# A USER WAS ADDED TO A GROUP
elif(action == 'post_add'):
newnotification = UserNotification(touser=user_touched, notificationtext="Sie wurden der Tätigkeit " + taskname + " zugeordnet.", notificationtype="taskchange")
newnotification.save()
# E-MAILNOTIFICATIONS FOR GROUPCHANGES
if(user_touched.profile.add_task_mail):
notificationtext = ""
if(action == 'post_remove'):
notificationtext = "Sie wurden von der Tätigkeit " + taskname + " entfernt."
username = user_touched.first_name + " " + user_touched.last_name
msg_html = render_to_string('notificsys/notification_mail.html', {'username': username, 'notificationtext' : notificationtext})
if(GLOBALSENDMAILS):
send_mail(
'Agentur-Benachrichtigung',
'Hallo ' + user_touched.first_name + ' ' + user_touched.last_name + '! ' + notificationtext,
'support@digitale-agentur.com',
[user_touched.email],
html_message=msg_html,
fail_silently=False
)
# A USER WAS ADDED TO A GROUP
elif(action == 'post_add'):
notificationtext = "Sie wurden der Tätigkeit " + taskname + " zugeordnet."
username = user_touched.first_name + " " + user_touched.last_name
msg_html = render_to_string('notificsys/notification_mail.html', {'username': username, 'notificationtext' : notificationtext})
if(GLOBALSENDMAILS):
send_mail(
'Agentur-Benachrichtigung',
'Hallo ' + user_touched.first_name + ' ' + user_touched.last_name + '! ' + notificationtext,
'support@digitale-agentur.com',
[user_touched.email],
html_message=msg_html,
fail_silently=False
)

View File

@ -139,13 +139,7 @@
</li>
{% endif %}
{% if perms.users.users_usermanagement or perms.users.areas_management or perms.users.tasks_management or perms.user.news_management %}
<hr class="sidebar-divider">
<!-- Heading -->
<div class="sidebar-heading">
Agenturorga
</div>
{%endif%}
<!--
{% if perms.users.users_usermanagement %}
{% if active_link == 'usersmanagement' %}
@ -159,18 +153,7 @@
</li>
{%endif%}
-->
{% if perms.users.tasks_management %}
{% if active_link == 'tasksmanagement' %}
<li class="nav-item active">
{% else%}
<li class="nav-item">
{%endif%}
<a class="nav-link " href="{% url 'tasks-management' %}" aria-expanded="true">
<i class="fas fa-fw fa-tasks"></i>
<span>Aufgaben</span>
</a>
</li>
{%endif%}
<!--
{% if perms.users.news_management %}
{% if active_link == 'newsmanagement' %}