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.
|
||||