diff --git a/.gitignore b/.gitignore index e4b082a..fa99085 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,9 @@ areas/migrations/* news/migrations/* !news/migrations/__init__.py +quicklinks/migrations/* +!quicklinks/migrations/__init__.py + standards/migrations/* !standards/migrations/__init__.py diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index 6d53cfa..597bc12 100644 Binary files a/digitaleagentur/__pycache__/settings.cpython-38.pyc and b/digitaleagentur/__pycache__/settings.cpython-38.pyc differ diff --git a/digitaleagentur/__pycache__/urls.cpython-38.pyc b/digitaleagentur/__pycache__/urls.cpython-38.pyc index 7905a5b..edf28b3 100644 Binary files a/digitaleagentur/__pycache__/urls.cpython-38.pyc and b/digitaleagentur/__pycache__/urls.cpython-38.pyc differ diff --git a/digitaleagentur/settings.py b/digitaleagentur/settings.py index e9960f2..f37f049 100644 --- a/digitaleagentur/settings.py +++ b/digitaleagentur/settings.py @@ -34,6 +34,7 @@ INSTALLED_APPS = [ 'areas.apps.AreasConfig', 'orga.apps.OrgaConfig', 'tasks.apps.TasksConfig', + 'quicklinks.apps.QuicklinksConfig', 'standards.apps.StandardsConfig', 'news.apps.NewsConfig', 'crispy_forms', diff --git a/digitaleagentur/urls.py b/digitaleagentur/urls.py index 7dd686f..024d6ec 100644 --- a/digitaleagentur/urls.py +++ b/digitaleagentur/urls.py @@ -18,6 +18,7 @@ from django.contrib.auth.decorators import login_required standards orga news + quicklinkgs -> Rest ist von Django @@ -29,6 +30,7 @@ urlpatterns = [ path('dashboard/', include('users.urls'), name="dashboard"), path('areas/', include('areas.urls'), name="areas-management"), path('tasks/', include('tasks.urls'), name="tasks-management"), + path('ql/', include('quicklinks.urls'), name="ql-management"), path('standards/', include('standards.urls'), name="standards"), path('news/', include('news.urls'), name="dashboard"), path('orga/', include('orga.urls'), name="orga"), diff --git a/quicklinks/__init__.py b/quicklinks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/quicklinks/__pycache__/__init__.cpython-38.pyc b/quicklinks/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..78c6cde Binary files /dev/null and b/quicklinks/__pycache__/__init__.cpython-38.pyc differ diff --git a/quicklinks/__pycache__/admin.cpython-38.pyc b/quicklinks/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000..1407c65 Binary files /dev/null and b/quicklinks/__pycache__/admin.cpython-38.pyc differ diff --git a/quicklinks/__pycache__/apps.cpython-38.pyc b/quicklinks/__pycache__/apps.cpython-38.pyc new file mode 100644 index 0000000..8bc1553 Binary files /dev/null and b/quicklinks/__pycache__/apps.cpython-38.pyc differ diff --git a/quicklinks/__pycache__/forms.cpython-38.pyc b/quicklinks/__pycache__/forms.cpython-38.pyc new file mode 100644 index 0000000..eb58539 Binary files /dev/null and b/quicklinks/__pycache__/forms.cpython-38.pyc differ diff --git a/quicklinks/__pycache__/models.cpython-38.pyc b/quicklinks/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000..26c7632 Binary files /dev/null and b/quicklinks/__pycache__/models.cpython-38.pyc differ diff --git a/quicklinks/__pycache__/urls.cpython-38.pyc b/quicklinks/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000..3b929a9 Binary files /dev/null and b/quicklinks/__pycache__/urls.cpython-38.pyc differ diff --git a/quicklinks/__pycache__/views.cpython-38.pyc b/quicklinks/__pycache__/views.cpython-38.pyc new file mode 100644 index 0000000..e9b0964 Binary files /dev/null and b/quicklinks/__pycache__/views.cpython-38.pyc differ diff --git a/quicklinks/admin.py b/quicklinks/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/quicklinks/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/quicklinks/apps.py b/quicklinks/apps.py new file mode 100644 index 0000000..a6e7ca4 --- /dev/null +++ b/quicklinks/apps.py @@ -0,0 +1,4 @@ +from django.apps import AppConfig + +class QuicklinksConfig(AppConfig): + name = 'quicklinks' diff --git a/quicklinks/forms.py b/quicklinks/forms.py new file mode 100644 index 0000000..a696478 --- /dev/null +++ b/quicklinks/forms.py @@ -0,0 +1,15 @@ +from django import forms +from django.forms import ModelForm +from .models import QuickLinks + + +class QlAddQlForm(forms.ModelForm): + + class Meta: + model =QuickLinks + labels = { + "name" : "Name", + "link" : "Weblink", + "logo" : "Logo", + } + fields = ['name', 'link', 'logo'] \ No newline at end of file diff --git a/quicklinks/migrations/__init__.py b/quicklinks/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/quicklinks/models.py b/quicklinks/models.py new file mode 100644 index 0000000..7eea489 --- /dev/null +++ b/quicklinks/models.py @@ -0,0 +1,33 @@ +from django.db import models +from users.models import Agency +from django.urls import reverse +from colorful.fields import RGBColorField +from django.contrib.auth.models import User +import datetime + +''' + +Model Quicklinks + +Verwaltet alle gespeicherten Bereiche für die Agentur. Wird eine neue erstellt, +wird dieser die Agency zugewiesen. Das Farb-Feld ist für später, damit im +Ogranigramm eine Farbe für den jeweiligen Bereich festgelegt wird. + +users speichert alle primary-Keys der User, welche diesem Bereich zugeordnet sind! + +''' +class QuickLinks(models.Model): + + # Wenn die Area gelöscht wird, wird NICHT die Agency gelöscht + agency = models.ForeignKey(Agency, on_delete=models.PROTECT) + name = models.CharField(max_length=200, blank=False) + link = models.CharField(max_length=200, blank=False) + logo = models.ImageField(default='agencymain/default.jpg', upload_to='agencymain', blank=True) + + def __str__(self): + return f'{self.name}' + + def get_absolute_url(self): + return reverse('ql-update', kwargs={'pk':self.pk}) + + diff --git a/quicklinks/templates/quicklinks/ql_add.html b/quicklinks/templates/quicklinks/ql_add.html new file mode 100644 index 0000000..e29d3f3 --- /dev/null +++ b/quicklinks/templates/quicklinks/ql_add.html @@ -0,0 +1,15 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% block content %} +
+

Neue Quicklink anlegen

+
+
+ {% csrf_token %} + {{ form|crispy }} +
+   + Abbrechen +
+
+{% endblock content %} diff --git a/quicklinks/templates/quicklinks/ql_confirm_delete.html b/quicklinks/templates/quicklinks/ql_confirm_delete.html new file mode 100644 index 0000000..3501d6d --- /dev/null +++ b/quicklinks/templates/quicklinks/ql_confirm_delete.html @@ -0,0 +1,20 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% block content %} +
+
+
+ +
+
+
+ +
+ {% csrf_token %} +
+   + Abbrechen +
+
+
+{% endblock content %} \ No newline at end of file diff --git a/quicklinks/templates/quicklinks/ql_management.html b/quicklinks/templates/quicklinks/ql_management.html new file mode 100644 index 0000000..ef839d5 --- /dev/null +++ b/quicklinks/templates/quicklinks/ql_management.html @@ -0,0 +1,70 @@ +{% extends "users/base.html" %} +{% block content %} +
+

Quicklinks

+
+

+ Quicklinks helfen zur schnellen Verlinkung von oft genutzten Diensten. +

+ {% if perms.users.ql_management %} +
+ +
+ {% endif %} +
+
+ +
+
+
+
+ + + + + + + + + + + {% for ql in quicklinks %} + + + + + + + {% endfor %} + +
NameLinkLogo 
{{ql.name }}{{ ql.link }} + {% if perms.users.ql_management %} + + {% endif %} + +
+
+
+ +{% endblock content %} diff --git a/quicklinks/templates/quicklinks/ql_update.html b/quicklinks/templates/quicklinks/ql_update.html new file mode 100644 index 0000000..a00645a --- /dev/null +++ b/quicklinks/templates/quicklinks/ql_update.html @@ -0,0 +1,16 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% block content %} +
+

Quicklink aktualisieren

+
+
+ {% csrf_token %} + {{ form|crispy }} +
+ +   + Abbrechen +
+
+{% endblock content %} diff --git a/quicklinks/tests.py b/quicklinks/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/quicklinks/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/quicklinks/urls.py b/quicklinks/urls.py new file mode 100644 index 0000000..777b297 --- /dev/null +++ b/quicklinks/urls.py @@ -0,0 +1,15 @@ +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 QlManagement, QlAdd, QlDeleteView, QlUpdateView +''' +Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben! +''' + +urlpatterns = [ + path('', QlManagement.as_view(template_name="quicklinks/ql_management.html"), name='ql-management'), + path('addql/', permission_required('users.ql_management')(QlAdd.as_view(template_name="quicklinks/ql_add.html")), name='ql-addql'), + path('addql//delete', permission_required('users.ql_management')(QlDeleteView.as_view()), name='ql-delete'), + path('addql//', permission_required('users.ql_management')(QlUpdateView.as_view()), name='ql-update'), + +] diff --git a/quicklinks/views.py b/quicklinks/views.py new file mode 100644 index 0000000..488e018 --- /dev/null +++ b/quicklinks/views.py @@ -0,0 +1,67 @@ +from django.shortcuts import render +from django.contrib.auth.mixins import LoginRequiredMixin +from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView +from .models import QuickLinks +from .forms import QlAddQlForm +from django.contrib import messages + +# Create your views here. +class QlManagement(LoginRequiredMixin, ListView): + model = QuickLinks + + # 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) + quicklinks = QuickLinks.objects.filter(agency__pk=self.request.user.profile.agency.pk).order_by('name') + context.update({'active_link' : 'quicklinks', 'quicklinks' : quicklinks}) + return context + +class QlAdd(LoginRequiredMixin, CreateView): + model = QuickLinks + success_url = '/ql' + form_class = QlAddQlForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context.update({'active_link' : 'quicklinks'}) + return context + + def form_valid(self, form): + # Send message to the site + messages.success(self.request, f'Quicklink angelegt!') + # SAVE OBJECTS TO SIGNALE! + form.instance.agency = self.request.user.profile.agency + return super().form_valid(form) + +class QlDeleteView(LoginRequiredMixin, DeleteView): + model = QuickLinks + success_url = '/ql' + template_name = 'quicklinks/ql_confirm_delete.html' + + def delete(self, request, *args, **kwargs): + response = super(QlDeleteView, self).delete(request, *args, **kwargs) + messages.success(request, f'Quicklink wurde gelöscht!') + return response + + def get_context_data(self, **kwargs): + context = super(QlDeleteView, self).get_context_data(**kwargs) + context['active_link'] = 'quicklinks' + return context + +class QlUpdateView(LoginRequiredMixin, UpdateView): + model = QuickLinks + template_name = 'quicklinks/ql_update.html' + success_url = '/ql' + form_class = QlAddQlForm + + def form_valid(self, form): + # Send message to the site + messages.success(self.request, f'Quicklink aktualisiert!') + return super().form_valid(form) + + def get_context_data(self, **kwargs): + context = super(QlUpdateView, self).get_context_data(**kwargs) + context['active_link'] = 'quicklinks' + return context \ No newline at end of file diff --git a/users/__pycache__/models.cpython-38.pyc b/users/__pycache__/models.cpython-38.pyc index b75a791..3bf03d6 100644 Binary files a/users/__pycache__/models.cpython-38.pyc and b/users/__pycache__/models.cpython-38.pyc differ diff --git a/users/models.py b/users/models.py index 6723488..b02900b 100644 --- a/users/models.py +++ b/users/models.py @@ -130,7 +130,8 @@ class Profile(models.Model): ('areas_management', 'Bereiche bearbeiten'), ('tasks_management', 'Aufgabenbereiche bearbeiten'), ('standard_management', 'Standards bearbeiten und freischalten'), - ('news_management', 'News bearbeiten und veröffentlichen') + ('news_management', 'News bearbeiten und veröffentlichen'), + ('ql_management', 'Quicklinks bearbeiten und erstellen') ] diff --git a/users/templates/users/base.html b/users/templates/users/base.html index 4b4aa23..d7bb2d4 100644 --- a/users/templates/users/base.html +++ b/users/templates/users/base.html @@ -100,6 +100,17 @@ + {% if active_link == 'quicklinks' %} + + {% if perms.users.users_usermanagement or perms.users.areas_management or perms.users.tasks_management or perms.user.news_management %}