Struktur inkl. Bereiche und Tätigkeiten sowie Benachrichtigungen für Tätigkeiten fertig
This commit is contained in:
parent
750b36dd2c
commit
ea33eaaffd
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
<a class="btn" href="{% url 'tasks-management' %} ">Abbrechen</a>
|
||||
<button type="submit" class="btn btn-success" href="{% url 'dasettings' %} ">Tätigkeit anlegen</button>
|
||||
<a class="btn" href="{% url 'dasettings' %} ">Abbrechen</a>
|
||||
</form>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
<a href="{% url 'tasks-management' %}" class="btn btn-success">Abbrechen</a>
|
||||
<a href="{% url 'dasettings' %}" class="btn btn-success">Abbrechen</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
<hr>
|
||||
|
||||
<button type="submit" class="btn btn-success">Aufgabe aktualisieren</button>
|
||||
<a class="btn" href="{% url 'tasks-management' %} ">Abbrechen</a>
|
||||
<a class="btn" href="{% url 'dasettings' %} ">Abbrechen</a>
|
||||
</form>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
|
|
|
|||
|
|
@ -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'),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -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}'
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
|
|
@ -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' %}
|
||||
|
|
|
|||
Loading…
Reference in New Issue