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 = { labels = {
"name" : "Aufgabenname", "name" : "Aufgabenname",
"area" : "Übergeordneter Bereich", "area" : "Übergeordneter Bereich",
"desc" : "Beschreibung",
"visible": "Im Organigramm sichtbar" "visible": "Im Organigramm sichtbar"
} }
fields = ['name', 'area', 'desc', 'visible'] fields = ['name', 'area', 'visible']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
user = kwargs.pop('user') user = kwargs.pop('user')

View File

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

View File

@ -15,7 +15,7 @@
<p>Alle unter dieser Aufgabe erstellten Standards werden gelöscht!</p> <p>Alle unter dieser Aufgabe erstellten Standards werden gelöscht!</p>
<div class="form-group"> <div class="form-group">
<button type="submit" class="btn btn-danger">Aufgabe löschen</button>&nbsp; <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> </div>
</form> </form>
</div> </div>

View File

@ -38,7 +38,7 @@
<hr> <hr>
<button type="submit" class="btn btn-success">Aufgabe aktualisieren</button>&nbsp; <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> </form>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">

View File

@ -1,14 +1,13 @@
from django.urls import path from django.urls import path
from django.contrib.auth import views as auth_views from django.contrib.auth import views as auth_views
from django.contrib.auth.decorators import login_required, permission_required 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 from . import views
''' '''
Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben! Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben!
''' '''
urlpatterns = [ 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('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>/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'), 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 django.http import HttpResponse, JsonResponse
from users.priomodel import Prio 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): class TasksAddTask(LoginRequiredMixin, CreateView):
model = Tasks model = Tasks
success_url = '/tasks' success_url = '/dasettings/main'
form_class = TasksAddTaskForm form_class = TasksAddTaskForm
def get_form_kwargs(self): def get_form_kwargs(self):
@ -34,12 +22,12 @@ class TasksAddTask(LoginRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context.update({'active_link' : 'tasksmanagement'}) context.update({'active_link' : 'dasettings'})
return context return context
def form_valid(self, form): def form_valid(self, form):
# Send message to the site # Send message to the site
messages.success(self.request, f'Aufgabe angelegt!') messages.success(self.request, f'Tätigkeit angelegt!')
# SAVE OBJECTS TO SIGNALE! # SAVE OBJECTS TO SIGNALE!
form.instance.agency = self.request.user.profile.agency form.instance.agency = self.request.user.profile.agency
form.instance.created_area_by = self.request.user form.instance.created_area_by = self.request.user
@ -47,14 +35,14 @@ class TasksAddTask(LoginRequiredMixin, CreateView):
class TasksDeleteView(LoginRequiredMixin, DeleteView): class TasksDeleteView(LoginRequiredMixin, DeleteView):
model = Tasks model = Tasks
success_url = '/tasks' success_url = '/dasettings/main'
template_name = 'tasks/tasks_confirm_delete.html' template_name = 'tasks/tasks_confirm_delete.html'
def delete(self, request, *args, **kwargs): def delete(self, request, *args, **kwargs):
area = Tasks.objects.get(pk=kwargs['pk']) area = Tasks.objects.get(pk=kwargs['pk'])
response = super(TasksDeleteView, self).delete(request, *args, **kwargs) response = super(TasksDeleteView, self).delete(request, *args, **kwargs)
name = area.name name = area.name
messages.success(request, f'Aufgabe ' +name+ ' wurde gelöscht!') messages.success(request, f'Tätigkeit ' +name+ ' wurde gelöscht!')
return response return response
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
@ -66,7 +54,7 @@ class TasksDeleteView(LoginRequiredMixin, DeleteView):
class TasksUpdateView(LoginRequiredMixin, UpdateView): class TasksUpdateView(LoginRequiredMixin, UpdateView):
model = Tasks model = Tasks
template_name = 'tasks/tasks_update.html' template_name = 'tasks/tasks_update.html'
success_url = '/tasks' success_url = '/dasettings/main'
form_class = TasksAddTaskForm form_class = TasksAddTaskForm
def get_form_kwargs(self): def get_form_kwargs(self):
@ -76,19 +64,19 @@ class TasksUpdateView(LoginRequiredMixin, UpdateView):
def form_valid(self, form): def form_valid(self, form):
# Send message to the site # 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) return super().form_valid(form)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(TasksUpdateView, self).get_context_data(**kwargs) context = super(TasksUpdateView, self).get_context_data(**kwargs)
tasks = Tasks.objects.get(pk=context['object'].pk) tasks = Tasks.objects.get(pk=context['object'].pk)
# User still in Area # 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 # 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']) 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 context['possible_users'] = possible_users
# Active-Link for Base-Design # Active-Link for Base-Design
context['active_link'] = 'tasksmanagement' context['active_link'] = 'dasettings'
# Area ID # Area ID
context['objectid'] = context['object'].pk context['objectid'] = context['object'].pk
return context return context

View File

@ -137,6 +137,11 @@ class Profile(models.Model):
add_new_group_mail = models.BooleanField(default=False) add_new_group_mail = models.BooleanField(default=False)
add_new_group_push = models.BooleanField(default=True) 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): def __str__(self):
return f'{self.user.last_name}' 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 notificsys.models import UserNotification
from django.core.mail import send_mail from django.core.mail import send_mail
from django.template.loader import render_to_string 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 # SIGNALS FOR USER
''' '''
@receiver(post_save, sender=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 # # IF FALSE NO MAILS WILL BE SEND - IN PRODUCTIVITY CHANGE TO TRUE #
GLOBALSENDMAILS = True GLOBALSENDMAILS = True
# GROUPSETTINGS FOR SOME USER WAS CHANGED # GROUPSETTINGS FOR SOME USER WAS CHANGED
if isinstance(instance, Group): if isinstance(instance, Group):
group_touched = AgencyGroup.objects.get(group=instance) 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 # 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) @receiver(post_save, sender=News)
def save_news(sender, instance, **kwargs): def save_news(sender, instance, **kwargs):
@ -120,3 +123,58 @@ def save_news(sender, instance, **kwargs):
if(user.profile.news_push): if(user.profile.news_push):
newnotification = UserNotification(touser=user, notificationtext="Neue Agenturnews: " + instance.name, notificationtype="agencynews", elementid=instance.pk) newnotification = UserNotification(touser=user, notificationtext="Neue Agenturnews: " + instance.name, notificationtype="agencynews", elementid=instance.pk)
newnotification.save() 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> </li>
{% endif %} {% 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 perms.users.users_usermanagement %}
{% if active_link == 'usersmanagement' %} {% if active_link == 'usersmanagement' %}
@ -159,18 +153,7 @@
</li> </li>
{%endif%} {%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 perms.users.news_management %}
{% if active_link == 'newsmanagement' %} {% if active_link == 'newsmanagement' %}