Erster Commit Stand 03.12 Mitternacht
|
|
@ -0,0 +1,5 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
from .models import Areas
|
||||||
|
|
||||||
|
# Register your models here.
|
||||||
|
admin.site.register(Areas)
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class AreasConfig(AppConfig):
|
||||||
|
name = 'areas'
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
from django import forms
|
||||||
|
from django.forms import ModelForm
|
||||||
|
from django.forms.widgets import TextInput
|
||||||
|
from .models import Areas
|
||||||
|
from multiselectfield import MultiSelectField
|
||||||
|
from dal import autocomplete
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django import forms
|
||||||
|
|
||||||
|
|
||||||
|
class AreaAddAreaForm(forms.ModelForm):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Areas
|
||||||
|
labels = {
|
||||||
|
"name" : "Bereichsname",
|
||||||
|
"color" : "Farbe",
|
||||||
|
"desc" : "Kurze Beschreibung"
|
||||||
|
}
|
||||||
|
fields = ['name', 'color', 'desc']
|
||||||
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-02 17:34
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('users', '0038_auto_20191202_1757'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Areas',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(blank=True, max_length=200)),
|
||||||
|
('color', models.CharField(blank=True, max_length=60)),
|
||||||
|
('desc', models.CharField(blank=True, max_length=3000)),
|
||||||
|
('agency', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-02 19:01
|
||||||
|
|
||||||
|
import colorful.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
import multiselectfield.db.fields
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('areas', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='areas',
|
||||||
|
name='usersfield',
|
||||||
|
field=multiselectfield.db.fields.MultiSelectField(blank=True, max_length=200),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='areas',
|
||||||
|
name='color',
|
||||||
|
field=colorful.fields.RGBColorField(colors=['#FFB900', '#E74856', '#0078D7', '#0099BC', '#7A7574'], default='#0099BC'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='areas',
|
||||||
|
name='desc',
|
||||||
|
field=models.TextField(blank=True, max_length=3000),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-02 21:55
|
||||||
|
|
||||||
|
import colorful.fields
|
||||||
|
import datetime
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('areas', '0002_auto_20191202_2001'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='areas',
|
||||||
|
name='usersfield',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='areas',
|
||||||
|
name='created_by',
|
||||||
|
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='areas',
|
||||||
|
name='created_date',
|
||||||
|
field=models.DateField(blank=True, default=datetime.date.today),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='areas',
|
||||||
|
name='color',
|
||||||
|
field=colorful.fields.RGBColorField(blank=True, colors=['#FFB900', '#E74856', '#0078D7', '#0099BC', '#7A7574'], default='#0099BC'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='areas',
|
||||||
|
name='name',
|
||||||
|
field=models.CharField(max_length=200),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-02 21:55
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('areas', '0003_auto_20191202_2255'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='areas',
|
||||||
|
name='created_by',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-02 21:56
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('areas', '0004_remove_areas_created_by'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameField(
|
||||||
|
model_name='areas',
|
||||||
|
old_name='created_date',
|
||||||
|
new_name='created_area_date',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='areas',
|
||||||
|
name='created_area_by',
|
||||||
|
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-02 22:00
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('areas', '0005_auto_20191202_2256'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='areas',
|
||||||
|
name='created_area_by',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
from django.db import models
|
||||||
|
from users.models import Agency
|
||||||
|
from django.urls import reverse
|
||||||
|
from colorful.fields import RGBColorField
|
||||||
|
from multiselectfield import MultiSelectField
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
Model Areas
|
||||||
|
|
||||||
|
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 Areas(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)
|
||||||
|
color = RGBColorField(colors=['#FFB900', '#E74856', '#0078D7', '#0099BC', '#7A7574'], default='#0099BC', blank=True)
|
||||||
|
desc = models.TextField(max_length=3000, blank=True)
|
||||||
|
#usersfield = MultiSelectField(choices=(()), blank=True)
|
||||||
|
#usersfield = forms.ModelMultipleChoiceField(queryset=User.objects.all())
|
||||||
|
#usersfield = forms.ModelChoiceField(queryset=User.objects.filter(profile__pk=1))
|
||||||
|
created_area_by = models.ForeignKey(User, on_delete=models.PROTECT)
|
||||||
|
created_area_date = models.DateField(default=datetime.date.today, blank=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'{self.name}'
|
||||||
|
|
||||||
|
# Hier Path für Templates des Models mit Parametern
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return reverse('areas-update', kwargs={'pk':self.pk})
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="content-section">
|
||||||
|
<div class="media">
|
||||||
|
<div class="media-body">
|
||||||
|
<h2 class="account-heading">Bereich {{ object.name }} löschen?</h2>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Für das Speichern der Bilder enctype -->
|
||||||
|
<form method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
<p>Alle unter diesem Bereich erstellten Aufgaben und Standards werden gelöscht!</p>
|
||||||
|
<div class="form-group">
|
||||||
|
<button type="submit" class="btn btn-danger">Bereich löschen</button>
|
||||||
|
<a href="{% url 'areas-management' %}" class="btn btn-success">Abbrechen</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="content-section col-6">
|
||||||
|
<h3>Neuen Bereich anlegen</h3>
|
||||||
|
<hr>
|
||||||
|
<form method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form|crispy }}
|
||||||
|
<hr>
|
||||||
|
<button type="submit" class="btn btn-success" href="{% url 'areas-addarea' %} ">Bereich anlegen</button>
|
||||||
|
<a class="btn" href="{% url 'areas-management' %} ">Abbrechen</a>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="content-section col-12">
|
||||||
|
<h3>Bereichsverwaltung</h3>
|
||||||
|
<hr>
|
||||||
|
<p>
|
||||||
|
Bereiche unterteilen die Agentur in verschiedene Verantwortungsbereiche.
|
||||||
|
</p>
|
||||||
|
<div class="row">
|
||||||
|
<div class="content-section col-4">
|
||||||
|
<a class="btn btn-primary" href="{% url 'areas-addarea' %} ">Neuen Bereich anlegen</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="row">
|
||||||
|
{% for item in areas_of_agency %}
|
||||||
|
<!-- Area Chart -->
|
||||||
|
<div class="col-xl-4 mb-4">
|
||||||
|
<div class="card shadow">
|
||||||
|
<!-- Card Header - Dropdown -->
|
||||||
|
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
|
||||||
|
<h6 class="m-0 font-weight-bold text-primary">{{item.name }}</h6>
|
||||||
|
|
||||||
|
<div class="dropdown no-arrow">
|
||||||
|
<a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
<i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink">
|
||||||
|
<div class="dropdown-header">Bereichsinfo</div>
|
||||||
|
<a class="dropdown-item" href="{% url 'areas-manage' item.pk %}">Bearbeiten</a>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
<a class="dropdown-item text-danger" href="{% url 'areas-delete' item.pk %}" >Löschen</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Card Body -->
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h6><b>Name</b></h6>
|
||||||
|
<p>
|
||||||
|
{{ item.name }}
|
||||||
|
</p>
|
||||||
|
<h6><b>Erstellt von</b></h6>
|
||||||
|
<p>
|
||||||
|
{{ item.created_area_by.first_name }} {{ item.created_area_by.last_name }}
|
||||||
|
</p>
|
||||||
|
<h6><b>Erstellt am</b></h6>
|
||||||
|
<p>
|
||||||
|
{{ item.created_area_date }}
|
||||||
|
</p>
|
||||||
|
<h6><b>Farbe</b></h6>
|
||||||
|
<p>
|
||||||
|
<div style="width: 60px; height: 20px; background-color: {{ item.color }}"></div>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor%}
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="content-section col-6">
|
||||||
|
<h3>Bereich aktualisieren</h3>
|
||||||
|
<hr>
|
||||||
|
<form method="POST">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form|crispy }}
|
||||||
|
<hr>
|
||||||
|
<button type="submit" class="btn btn-success">Bereich aktualisieren</button>
|
||||||
|
<a class="btn" href="{% url 'areas-management' %} ">Abbrechen</a>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
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 AreasManagement, AreasAddArea, AreaDeleteView, AreaUpdateView
|
||||||
|
'''
|
||||||
|
|
||||||
|
'' - Startseite nach erfolgreichem LOGIN
|
||||||
|
logout - Logoutseite nach LOGOUT
|
||||||
|
|
||||||
|
Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben!
|
||||||
|
'''
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('', permission_required('users.tasks_management')(AreasManagement.as_view(template_name="areas/areas_management.html")), name='areas-management'),
|
||||||
|
path('addarea/', permission_required('users.tasks_management')(AreasAddArea.as_view(template_name="areas/areas_add.html")), name='areas-addarea'),
|
||||||
|
path('areas/<int:pk>/delete', permission_required('users.users_usermanagement')(AreaDeleteView.as_view()), name='areas-delete'),
|
||||||
|
path('area/<int:pk>/', permission_required('users.users_usermanagement')(AreaUpdateView.as_view()), name='areas-manage')
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,73 @@
|
||||||
|
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
|
||||||
|
|
||||||
|
class AreasManagement(LoginRequiredMixin, ListView):
|
||||||
|
model = Areas
|
||||||
|
# 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
|
||||||
|
areas_of_agency = Areas.objects.filter(agency__pk=self.request.user.profile.agency.pk)
|
||||||
|
|
||||||
|
context.update({'active_link' : 'areasmanagement', 'areas_of_agency':areas_of_agency})
|
||||||
|
return context
|
||||||
|
|
||||||
|
class AreasAddArea(LoginRequiredMixin, CreateView):
|
||||||
|
model = Areas
|
||||||
|
success_url = '/areas'
|
||||||
|
#fields = ['name', 'color', 'desc', 'usersfield']
|
||||||
|
form_class = AreaAddAreaForm
|
||||||
|
|
||||||
|
#def get(self,request,*args, **kwargs):
|
||||||
|
# # User ist der hier Aufgerufene, bzw. das Profil!
|
||||||
|
# return render (request, self.template_name, {'form':self.form_class(self.request.user), 'active_link': 'areasmanagement'})
|
||||||
|
|
||||||
|
|
||||||
|
# Adding active_link
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context.update({'active_link' : 'areasmanagement'})
|
||||||
|
return context
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
# Send message to the site
|
||||||
|
messages.success(self.request, f'Bereich angelegt!')
|
||||||
|
# SAVE OBJECTS TO SIGNALE!
|
||||||
|
form.instance.agency = self.request.user.profile.agency
|
||||||
|
form.instance.created_area_by = self.request.user
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
class AreaDeleteView(LoginRequiredMixin, DeleteView):
|
||||||
|
model = Areas
|
||||||
|
success_url = '/areas'
|
||||||
|
template_name = 'areas/area_confirm_delete.html'
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(AreaDeleteView, self).get_context_data(**kwargs)
|
||||||
|
context['active_link'] = 'areasmanagement'
|
||||||
|
return context
|
||||||
|
|
||||||
|
# Hier andere Nutzer ändern, wenn man Usersmanagement darf!
|
||||||
|
class AreaUpdateView(LoginRequiredMixin, UpdateView):
|
||||||
|
model = Areas
|
||||||
|
form_class= AreaAddAreaForm
|
||||||
|
template_name = 'areas/areas_update.html'
|
||||||
|
success_url = '/areas'
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(AreaUpdateView, self).get_context_data(**kwargs)
|
||||||
|
context['active_link'] = 'areasmanagement'
|
||||||
|
return context
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
# Send message to the site
|
||||||
|
messages.success(self.request, f'Bereich aktualisiert!')
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
@ -0,0 +1,166 @@
|
||||||
|
"""
|
||||||
|
Django settings for digitaleagentur project.
|
||||||
|
|
||||||
|
Generated by 'django-admin startproject' using Django 2.2.7.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/2.2/topics/settings/
|
||||||
|
|
||||||
|
For the full list of settings and their values, see
|
||||||
|
https://docs.djangoproject.com/en/2.2/ref/settings/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||||
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
|
||||||
|
|
||||||
|
# Quick-start development settings - unsuitable for production
|
||||||
|
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
|
||||||
|
|
||||||
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
|
SECRET_KEY = '_qv2t2lmsctjxpbb4rrp=op%_20_hxzonv^mvty1o85c)l$s^q'
|
||||||
|
|
||||||
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
|
DEBUG = True
|
||||||
|
|
||||||
|
ALLOWED_HOSTS = []
|
||||||
|
|
||||||
|
|
||||||
|
# Application definition
|
||||||
|
|
||||||
|
INSTALLED_APPS = [
|
||||||
|
'users.apps.UsersConfig',
|
||||||
|
'areas.apps.AreasConfig',
|
||||||
|
'tasks.apps.TasksConfig',
|
||||||
|
'standards.apps.StandardsConfig',
|
||||||
|
'crispy_forms',
|
||||||
|
'colorful',
|
||||||
|
'dal',
|
||||||
|
'dal_select2',
|
||||||
|
'multiselectfield',
|
||||||
|
'django.contrib.admin',
|
||||||
|
'django.contrib.auth',
|
||||||
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.messages',
|
||||||
|
'django.contrib.staticfiles',
|
||||||
|
]
|
||||||
|
|
||||||
|
MIDDLEWARE = [
|
||||||
|
'django.middleware.security.SecurityMiddleware',
|
||||||
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
]
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'digitaleagentur.urls'
|
||||||
|
|
||||||
|
TEMPLATES = [
|
||||||
|
{
|
||||||
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||||
|
'DIRS': [],
|
||||||
|
'APP_DIRS': True,
|
||||||
|
'OPTIONS': {
|
||||||
|
'context_processors': [
|
||||||
|
'django.template.context_processors.debug',
|
||||||
|
'django.template.context_processors.request',
|
||||||
|
'django.contrib.auth.context_processors.auth',
|
||||||
|
'django.contrib.messages.context_processors.messages',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
WSGI_APPLICATION = 'digitaleagentur.wsgi.application'
|
||||||
|
|
||||||
|
|
||||||
|
# Database
|
||||||
|
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.mysql',
|
||||||
|
'NAME' : 'digitaleagentur',
|
||||||
|
'USER' : 'root',
|
||||||
|
'PASSWORD' : '',
|
||||||
|
'PORT' : 3306
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Password validation
|
||||||
|
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
|
||||||
|
|
||||||
|
AUTH_PASSWORD_VALIDATORS = [
|
||||||
|
{
|
||||||
|
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# Internationalization
|
||||||
|
# https://docs.djangoproject.com/en/2.2/topics/i18n/
|
||||||
|
|
||||||
|
LANGUAGE_CODE = 'de-de'
|
||||||
|
|
||||||
|
TIME_ZONE = 'UTC'
|
||||||
|
|
||||||
|
USE_I18N = True
|
||||||
|
|
||||||
|
USE_L10N = True
|
||||||
|
|
||||||
|
USE_TZ = True
|
||||||
|
|
||||||
|
# REDIRCETTARGET AFTER SUCCHESSFULLY LOGIN
|
||||||
|
LOGIN_REDIRECT_URL = 'users-dashboard'
|
||||||
|
|
||||||
|
# LOGIN PAGE FOR LOGIN-REDIRECT
|
||||||
|
LOGIN_URL = 'login'
|
||||||
|
|
||||||
|
# Static files (CSS, JavaScript, Images)
|
||||||
|
# https://docs.djangoproject.com/en/2.2/howto/static-files/
|
||||||
|
|
||||||
|
STATIC_URL = '/static/'
|
||||||
|
|
||||||
|
# CRISPY
|
||||||
|
CRISPY_TEMPLATE_PACK = 'bootstrap4'
|
||||||
|
|
||||||
|
# Bildspeicherpfad
|
||||||
|
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
||||||
|
MEDIA_URL = '/media/'
|
||||||
|
|
||||||
|
# FOR COLORFIELD
|
||||||
|
GRAPPELLI_CLEAN_INPUT_TYPES = False
|
||||||
|
# ROLLS
|
||||||
|
'''
|
||||||
|
Rolle in der BASE.html unter USERS entsprechend einfügen und URL einfügen, damit das Modul auch gefunden wird!
|
||||||
|
0 = NICHT DIESE ROLLE
|
||||||
|
1 = HAT DIESE ROLLE
|
||||||
|
|
||||||
|
Wenn adminstrator = 1 dann darf keine andere Rolle 1 sein! Sonst wird das Menü links mehrfach ausgegeben
|
||||||
|
|
||||||
|
'''
|
||||||
|
#ROLLS = {"administrator": 0, "usermanagement": 0, "areamanagement": 0, "taskmanagement": 0}
|
||||||
|
|
||||||
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
|
EMAIL_HOST = 'smtp.gmail.com'
|
||||||
|
EMAIL_PORT = 587
|
||||||
|
EMAIL_USE_TLS = True
|
||||||
|
|
||||||
|
EMAIL_HOST_USER = "htrampe@gmail.com"
|
||||||
|
EMAIL_HOST_PASSWORD = "dtcpcpzvpnrkacnw"
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
from django.urls import path, include
|
||||||
|
from django.contrib.auth import views as auth_views
|
||||||
|
from django.conf import settings
|
||||||
|
from django.conf.urls.static import static
|
||||||
|
from users.views import AgencyCreateView
|
||||||
|
from . import views
|
||||||
|
'''
|
||||||
|
ADMINPAGE - Verwaltung der Super-User
|
||||||
|
- LOGIN-Page
|
||||||
|
dashboard/ --> Nach Login werden hier die URLS aus der Users-App eingebunden und dort alle URLS eingeladen
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
|
||||||
|
path('admin/', admin.site.urls),
|
||||||
|
path('dashboard/', include('users.urls'), name="dashboard"),
|
||||||
|
path('areas/', include('areas.urls'), name="areas-management"),
|
||||||
|
path('password-reset/', auth_views.PasswordResetView.as_view(template_name='users/password_reset.html'), name='password-reset'),
|
||||||
|
path('password-reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='users/password_reset_done.html'), name='password_reset_done'),
|
||||||
|
path('password-reset-confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name='users/password_reset_confirm.html'), name='password_reset_confirm'),
|
||||||
|
path('password-reset-complete/', auth_views.PasswordResetCompleteView.as_view(template_name='users/password_reset_complete.html'), name='password_reset_complete'),
|
||||||
|
path('register/', AgencyCreateView.as_view(template_name='users/register.html'), name='register'),
|
||||||
|
path('register/done', views.registerdone, name='register-done'),
|
||||||
|
]
|
||||||
|
if settings.DEBUG:
|
||||||
|
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
def registerdone(request):
|
||||||
|
return render (request, 'users/registercomplete.html')
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
"""
|
||||||
|
WSGI config for digitaleagentur project.
|
||||||
|
|
||||||
|
It exposes the WSGI callable as a module-level variable named ``application``.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
|
||||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'digitaleagentur.settings')
|
||||||
|
|
||||||
|
application = get_wsgi_application()
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
"""Django's command-line utility for administrative tasks."""
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'digitaleagentur.settings')
|
||||||
|
try:
|
||||||
|
from django.core.management import execute_from_command_line
|
||||||
|
except ImportError as exc:
|
||||||
|
raise ImportError(
|
||||||
|
"Couldn't import Django. Are you sure it's installed and "
|
||||||
|
"available on your PYTHONPATH environment variable? Did you "
|
||||||
|
"forget to activate a virtual environment?"
|
||||||
|
) from exc
|
||||||
|
execute_from_command_line(sys.argv)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
After Width: | Height: | Size: 399 KiB |
|
After Width: | Height: | Size: 399 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class StandardsConfig(AppConfig):
|
||||||
|
name = 'standards'
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class TasksConfig(AppConfig):
|
||||||
|
name = 'tasks'
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||