News-Modul eingebaut

Tabellarische Ansichten fertig
Leerzeichen bei Agenturleitung entfernt
This commit is contained in:
Holger Trampe 2019-12-09 20:14:03 +01:00
parent 04f2dd24a6
commit 7c42614053
73 changed files with 804 additions and 420 deletions

View File

@ -1,10 +1,8 @@
# Generated by Django 3.0 on 2019-12-03 22:58
# Generated by Django 2.2.7 on 2019-12-09 17:02
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):
@ -12,8 +10,6 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('users', '0001_initial'),
]
operations = [
@ -26,9 +22,6 @@ class Migration(migrations.Migration):
('desc', models.TextField(blank=True, max_length=3000)),
('created_area_date', models.DateField(blank=True, default=datetime.date.today)),
('visible', models.BooleanField(default=True)),
('agency', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency')),
('created_area_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
('usersfield', models.ManyToManyField(blank=True, related_name='users_in_area', to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -0,0 +1,34 @@
# Generated by Django 2.2.7 on 2019-12-09 17:02
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('areas', '0001_initial'),
('users', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='areas',
name='agency',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency'),
),
migrations.AddField(
model_name='areas',
name='created_area_by',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='areas',
name='usersfield',
field=models.ManyToManyField(blank=True, related_name='users_in_area', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -13,14 +13,23 @@
</div>
<hr>
<div class="row">
<table class="table">
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Erstellt von</th>
<th scope="col">Erstellt am</th>
<th scope="col">Farbe</th>
<th scope="col">&nbsp;</th>
</tr>
</thead>
{% 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>
<tr>
<td>{{ item.name }}</td>
<td>{{ item.created_area_by.first_name }} {{ item.created_area_by.last_name }}</td>
<td>{{ item.created_area_date }}</td>
<td><div style="width: 60px; height: 20px; background-color: {{ item.color }}"></div></td>
<td>
<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>
@ -33,39 +42,9 @@
</div>
</div>
</div>
<!-- Card Body -->
<div class="card-body">
<div class="row">
<div class="col-md-6">
<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>
</div>
<div class="col-md-6">
<h6><b>Farbe</b></h6>
<p>
<div style="width: 60px; height: 20px; background-color: {{ item.color }}"></div>
</p>
<h6><b>Erstellt am</b></h6>
<p>
{{ item.created_area_date }}
</p>
</div>
<div class="col-md-10">
<h6><b>Beschreibung</b></h6>
<p>
{{ item.desc }}
</p>
</div>
</div>
</div>
</div>
</div>
{% endfor%}
</td>
</tr>
{% endfor %}
</table>
</div>
{% endblock content %}

View File

@ -1,19 +1,19 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-12">
<h3>Aufgabenverwaltung</h3>
<h3>Bereichsverwaltung</h3>
<hr>
<p>
Aufgaben unterteilen die Agentur in verschiedene Aufgabenbereiche innerhalb der Bereiche.
Bereiche unterteilen die Agentur in verschiedene Verantwortungsbereiche.
</p>
<div class="row">
<div class="content-section col-4">
<a class="btn btn-primary" href="{% url 'tasks-addtask' %}">Neue Aufgabe anlegen</a>
<a class="btn btn-primary" href="{% url 'areas-addarea' %} ">Neuen Bereich anlegen</a>
</div>
</div>
<hr>
<div class="row">
{% for item in tasks_of_agency %}
{% for item in areas_of_agency %}
<!-- Area Chart -->
<div class="col-xl-4 mb-4">
<div class="card shadow">
@ -26,10 +26,10 @@
<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">Aufgabeninfo</div>
<a class="dropdown-item" href="{% url 'tasks-manage' item.pk %}">Bearbeiten</a>
<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 'tasks-delete' item.pk %}" >Löschen</a>
<a class="dropdown-item text-danger" href="{% url 'areas-delete' item.pk %}" >Löschen</a>
</div>
</div>
</div>
@ -47,16 +47,16 @@
</p>
</div>
<div class="col-md-6">
<h6><b>Übergeordneter Bereich</b></h6>
<h6><b>Farbe</b></h6>
<p>
{{ item.area.name }}
<div style="width: 60px; height: 20px; background-color: {{ item.color }}"></div>
</p>
<h6><b>Erstellt am</b></h6>
<p>
{{ item.created_area_date }}
</p>
</div>
<div class="col-md-6">
<div class="col-md-10">
<h6><b>Beschreibung</b></h6>
<p>
{{ item.desc }}

View File

@ -35,6 +35,7 @@ INSTALLED_APPS = [
'orga.apps.OrgaConfig',
'tasks.apps.TasksConfig',
'standards.apps.StandardsConfig',
'news.apps.NewsConfig',
'crispy_forms',
'colorful',
'ckeditor',
@ -45,6 +46,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap_datepicker_plus',
]
MIDDLEWARE = [
@ -193,3 +195,8 @@ EMAIL_USE_TLS = True
EMAIL_HOST_USER = "support@digitale-agentur.com"
EMAIL_HOST_PASSWORD = "aPx9m3!7x3m@8o!t"
# FOR DATEPICKER
BOOTSTRAP4 = {
'include_jquery': True,
}

View File

@ -17,6 +17,7 @@ from django.contrib.auth.decorators import login_required
tasks
standards
orga
news
-> Rest ist von Django
@ -28,6 +29,7 @@ urlpatterns = [
path('areas/', include('areas.urls'), name="areas-management"),
path('tasks/', include('tasks.urls'), name="tasks-management"),
path('standards/', include('standards.urls'), name="standards"),
path('news/', include('news.urls'), name="dashboard"),
path('orga/', include('orga.urls'), name="orga"),
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'),

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

0
news/__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

4
news/admin.py Normal file
View File

@ -0,0 +1,4 @@
from django.contrib import admin
from .models import News
# Register your models here.
admin.site.register(News)

5
news/apps.py Normal file
View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class NewsConfig(AppConfig):
name = 'news'

35
news/forms.py Normal file
View File

@ -0,0 +1,35 @@
from bootstrap_datepicker_plus import DatePickerInput
from django import forms
from django.forms import ModelForm
from .models import News
from ckeditor.widgets import CKEditorWidget
class NewsAddNews(forms.ModelForm):
class Meta:
model = News
labels = {
"name" : "Titel",
"go_online_on" : "Veröffentlichen",
"go_offline_on" : "Ins Archiv"
}
fields = ['name', 'go_online_on', 'go_offline_on']
widgets = {
'go_online_on': DatePickerInput(options={"format":'DD.MM.YYYY HH:mm', "locale":'de'}),
'go_offline_on': DatePickerInput(options={"format":'DD.MM.YYYY HH:mm', "locale":'de'}),
}
class NewsAddNewsEditor(forms.ModelForm):
class Meta:
model = News
labels = {
"content" : "Inhalt"
}
fields = ['content']

View File

@ -0,0 +1,28 @@
# Generated by Django 2.2.7 on 2019-12-09 17:02
import ckeditor_uploader.fields
import datetime
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='News',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(default='', max_length=200)),
('content', ckeditor_uploader.fields.RichTextUploadingField(blank=True, verbose_name='Inhalt')),
('created_date', models.DateField(blank=True, default=datetime.date.today)),
('go_online_on', models.DateField(blank=True, default=datetime.date.today)),
('go_offline_on', models.DateField(blank=True, default=datetime.date.today)),
('last_modified_on', models.DateField(blank=True, default=datetime.date.today)),
],
),
]

View File

@ -0,0 +1,34 @@
# Generated by Django 2.2.7 on 2019-12-09 17:02
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('news', '0001_initial'),
('users', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='news',
name='agency',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'),
),
migrations.AddField(
model_name='news',
name='created_by',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='news',
name='last_modified_by',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='news_mod_by', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -0,0 +1,24 @@
# Generated by Django 2.2.7 on 2019-12-09 17:28
import datetime
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('news', '0002_auto_20191209_1802'),
]
operations = [
migrations.AlterField(
model_name='news',
name='go_offline_on',
field=models.DateTimeField(blank=True, default=datetime.date.today),
),
migrations.AlterField(
model_name='news',
name='go_online_on',
field=models.DateTimeField(blank=True, default=datetime.date.today),
),
]

View File

Binary file not shown.

29
news/models.py Normal file
View File

@ -0,0 +1,29 @@
from django.db import models
from django.contrib.auth.models import User
from users.models import Agency
from django.urls import reverse
import datetime
from ckeditor_uploader.fields import RichTextUploadingField
from bootstrap_datepicker_plus import DatePickerInput
class News(models.Model):
agency = models.ForeignKey(Agency, on_delete=models.CASCADE)
name = models.CharField(max_length=200, blank=False, default="")
content = RichTextUploadingField(blank=True, verbose_name='Inhalt')
created_by = models.ForeignKey(User, on_delete=models.PROTECT)
created_date = models.DateField(default=datetime.date.today, blank=True)
go_online_on = models.DateTimeField(default=datetime.date.today, blank=True)
go_offline_on = models.DateTimeField(default=datetime.date.today, blank=True)
last_modified_by = models.ForeignKey(User, on_delete=models.PROTECT, related_name='news_mod_by', default=None)
last_modified_on = 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('news-update', kwargs={'pk':self.pk})

View File

@ -0,0 +1,18 @@
{% extends "users/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section col-6">
<h3>News erstellen</h3>
<hr>
<form method="POST">
{% csrf_token %}
{{normalForm.media}}
{{normalForm|crispy}}
{{editorForm.media}}
{{editorForm}}
<hr>
<button type="submit" class="btn btn-success" href="{% url 'news-add' %} ">News speichern</button>&nbsp;
<a class="btn" href="{% url 'news-management' %} ">Abbrechen</a>
</form>
</div>
{% endblock content %}

View File

@ -0,0 +1,19 @@
{% 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">News {{ object.name }} löschen?</h2>
<hr>
</div>
</div>
<form method="POST">
{% csrf_token %}
<div class="form-group">
<button type="submit" class="btn btn-danger">News löschen</button>&nbsp;
<a href="{% url 'news-management' %}" class="btn btn-success">Abbrechen</a>
</div>
</form>
</div>
{% endblock content %}

View File

@ -0,0 +1,51 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-12">
<h3>News</h3>
<hr>
<p>
Newsbereich verwalten
</p>
<div class="row">
<div class="content-section col-4">
<a class="btn btn-primary" href="{% url 'news-add' %} ">News erstellen</a>
</div>
</div>
<hr>
<div class="row">
<table class="table">
<thead>
<tr>
<th scope="col">Titel</th>
<th scope="col">Erstellt von</th>
<th scope="col">Erstellt am</th>
<th scope="col">Sichtbar von/bis</th>
<th scope="col">&nbsp;</th>
</tr>
</thead>
{% for news_single in news %}
<tr>
<td><a href="{% url 'news-single' news_single.pk %}">{{news_single.name }}</a></td>
<td>{{ news_single.created_by.first_name }} {{ news_single.created_by.last_name }}</td>
<td>{{ news_single.created_date }}</td>
<td>{{ news_single.go_online_on|date:"d.m.Y, h:i"}} bis {{ news_single.go_offline_on|date:"d.m.Y, h:i"}}</td>
<td>
{% if news_single.created_by == request.user or perms.users.news_management %}
<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">
<a class="dropdown-item" href="{% url 'news-update' news_single.pk %}" class="btn">Bearbeiten</a>
<a class="dropdown-item text-danger" href="{% url 'news-delete' news_single.pk %}">Löschen</a>
</div>
</div>
{% endif %}
</div>
</td>
</tr>
{% endfor %}
</table>
</div>
{% endblock content %}

View File

@ -0,0 +1,15 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-12">
<small>
<h2>{{news.name}}</h2>
Erstellt durch <a href="{% url 'orga-single' news.created_by.pk %}">{{news.created_by.first_name}} {{news.created_by.last_name}}</a> am {{news.created_date}} | Zuletzt bearbeitet von <a href="{% url 'orga-single' news.last_modified_by.pk %}">{{ news.last_modified_by.first_name}} {{ news.last_modified_by.last_name}}</a> am {{ news.last_modified_on}}
{% if news.created_by == user or perms.users.news_management %}
&nbsp;|&nbsp;<a href="{% url 'news-update' news.pk %}">Bearbeiten</a>
{% endif %}
</small>
<hr>
{{news.media}}
{{news.content|safe}}
</div>
{% endblock content %}

View File

@ -0,0 +1,18 @@
{% extends "users/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section col-6">
<h3>News bearbeiten</h3>
<hr>
<form method="POST" id="taskareaform">
{% csrf_token %}
{{normalForm.media}}
{{normalForm|crispy}}
{{editorForm.media}}
{{editorForm}}
<hr>
<button type="submit" class="btn btn-success" href="{% url 'news-update' news_id %} ">Aktualisieren</button>&nbsp;
<a class="btn" href="{% url 'news-management' %} ">Abbrechen</a>
</form>
</div>
{% endblock content %}

3
news/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

18
news/urls.py Normal file
View File

@ -0,0 +1,18 @@
from django.urls import path
from .views import NewsManagement, NewsAdd, NewsDeleteView
from . import views
'''
Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben!
'''
urlpatterns = [
path('', NewsManagement.as_view(template_name="news/news_management.html"), name='news-management'),
path('newsadd/', views.NewsAdd, name='news-add'),
path('newsupdate/<int:id>/', views.NewsUpdate, name='news-update'),
path('news/<int:pk>/delete', NewsDeleteView.as_view(), name='news-delete'),
#path('ajax/loadtasks/', views.load_tasks, name='ajax_loadtasks'),
#path('standard/<int:pk>/changestat', views.StandardChangePublic, name="standard-status"),
path('news/<int:pk>/single', views.NewsSingle, name="news-single"),
#path('standard/<int:pk>/area', views.StandardArea, name="standard-area"),
#path('standard/<int:pk>/task', views.StandardTask, name="standard-task")
]

121
news/views.py Normal file
View File

@ -0,0 +1,121 @@
from django.shortcuts import render, redirect
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView
from django.contrib.auth.models import User
from .models import News
from .forms import NewsAddNews, NewsAddNewsEditor
from django.contrib.auth.decorators import login_required
from datetime import datetime
from django.contrib import messages
from django.utils.dateparse import parse_date
# Create your views here.
# ALLE STANDARDS EINER AGENTUR
class NewsManagement(LoginRequiredMixin, ListView):
model = News
# Adding active_link
# Loading only user same agency
# Change context and return for template-data
def get_context_data(self, **kwargs):
filterdate = datetime.now()
news = News.objects.filter(agency__pk=self.request.user.profile.agency.pk)
context = super().get_context_data(**kwargs)
context.update({'active_link' : 'newsmanagement', 'news' : news})
return context
'''
class NewsAddNews(LoginRequiredMixin, CreateView):
model = News
fields = ['name', 'content','go_online_on', 'go_offline_on']
success_url = '/dashboard/news/'
'''
@login_required
def NewsAdd(request):
if request.method == 'POST':
normalForm = NewsAddNews(request.POST, instance=request.user)
editorForm = NewsAddNewsEditor(request.POST, instance=request.user)
if editorForm.is_valid() and normalForm.is_valid():
normalForm.agency = request.user.profile.agency
normalForm.created_by = request.user
normalForm.last_modified_by = request.user
normalForm.save()
editorForm.save()
new_news = News()
new_news.agency = request.user.profile.agency
new_news.created_by = request.user
new_news.last_modified_by = request.user
new_news.created_date = datetime.now()
new_news.last_modified_on = datetime.now()
new_news.name = normalForm.cleaned_data['name']
new_news.content = editorForm.cleaned_data['content']
new_news.go_online_on = normalForm.cleaned_data['go_online_on']
new_news.go_offline_on = normalForm.cleaned_data['go_offline_on']
new_news.save()
messages.success(request, f'News gespeichert!')
return redirect('news-management')
else:
normalForm = NewsAddNews(instance=request.user)
editorForm = NewsAddNewsEditor(instance=request.user)
context = {
'normalForm' : normalForm,
'editorForm' : editorForm,
'active_link' : 'newsmanagement'
}
return render(request, 'news/news_addnews.html', context)
@login_required
def NewsUpdate(request, id):
news = News.objects.get(pk=id)
if request.method == 'POST':
normalForm = NewsAddNews(request.POST, instance=news)
editorForm = NewsAddNewsEditor(request.POST, instance=news)
if editorForm.is_valid() and normalForm.is_valid():
news = News.objects.get(pk=id)
news.last_modified_by = request.user
news.last_modified_on = datetime.now()
news.go_online_on = normalForm.cleaned_data['go_online_on']
news.go_offline_on = normalForm.cleaned_data['go_offline_on']
news.name = normalForm.cleaned_data['name']
news.content = editorForm.cleaned_data['content']
news.save()
messages.success(request, f'News aktualisiert!')
return redirect('/news')
else:
normalForm = NewsAddNews(instance=news)
editorForm = NewsAddNewsEditor(instance=news)
context = {
'normalForm' : normalForm,
'editorForm' : editorForm,
'active_link' : 'newsmanagement',
'news_id' : news.pk,
}
return render(request, 'news/news_update.html', context)
class NewsDeleteView(LoginRequiredMixin, DeleteView):
model = News
success_url = '/news'
template_name = 'news/news_confirm_delete.html'
def get_context_data(self, **kwargs):
context = super(NewsDeleteView, self).get_context_data(**kwargs)
context['active_link'] = 'newsmanagement'
return context
@login_required
def NewsSingle(request, pk):
news = News.objects.get(pk=pk)
context = {
'active_link':'newsmanagement',
'news' : news
}
return render(request, 'news/news_single.html', context)

View File

@ -16,7 +16,7 @@
<img class="img-profile mb-2 " width="12%" src="{{ leader.profile.image.url }}">
</div>
<h5>{{ leader.first_name }} {{ leader.last_name }}</h5>
&nbsp;&nbsp;{{ leader.profile.get_func_display }}
{{ leader.profile.get_func_display }}
</a>
</td>
</tr>
@ -67,8 +67,6 @@
</a>
{% endfor %}
</td>
</tr>
</tbody>
</table>

View File

@ -1,9 +1,8 @@
# Generated by Django 2.2.7 on 2019-12-04 16:51
# Generated by Django 2.2.7 on 2019-12-09 17:02
import ckeditor_uploader.fields
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
@ -11,10 +10,6 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('users', '0002_auto_20191204_0857'),
('tasks', '0002_tasks_name'),
('areas', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
@ -23,13 +18,11 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(default='', max_length=200)),
('content', models.TextField(blank=True, max_length=3000)),
('created_area_date', models.DateField(blank=True, default=datetime.date.today)),
('public', models.BooleanField(default=True)),
('agency', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency')),
('area', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='areas.Areas')),
('created_area_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
('task', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='tasks.Tasks')),
('content', ckeditor_uploader.fields.RichTextUploadingField(blank=True, verbose_name='Inhalt')),
('created_standard_date', models.DateField(blank=True, default=datetime.date.today)),
('published_on', models.DateField(blank=True, default=datetime.date.today)),
('last_modified_on', models.DateField(blank=True, default=datetime.date.today)),
('public', models.BooleanField(default=False)),
],
),
]

View File

@ -1,7 +1,5 @@
# Generated by Django 3.0 on 2019-12-05 07:09
# Generated by Django 2.2.7 on 2019-12-09 17:02
import ckeditor_uploader.fields
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
@ -9,66 +7,43 @@ import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('tasks', '0002_tasks_name'),
('areas', '0001_initial'),
('users', '0002_auto_20191204_0857'),
('standards', '0001_initial'),
('tasks', '0001_initial'),
('areas', '0002_auto_20191209_1802'),
('users', '0001_initial'),
]
operations = [
migrations.RenameField(
migrations.AddField(
model_name='standards',
old_name='created_area_by',
new_name='created_standard_by',
name='agency',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'),
),
migrations.RenameField(
migrations.AddField(
model_name='standards',
old_name='created_area_date',
new_name='created_standard_date',
name='area',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='areas.Areas'),
),
migrations.AddField(
model_name='standards',
name='created_standard_by',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='standards',
name='last_modified_by',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='user_modified_standard', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='standards',
name='last_modified_on',
field=models.DateField(blank=True, default=datetime.date.today),
),
migrations.AddField(
model_name='standards',
name='published_by',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, related_name='user_published_standard', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='standards',
name='published_on',
field=models.DateField(blank=True, default=datetime.date.today),
),
migrations.AlterField(
model_name='standards',
name='agency',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'),
),
migrations.AlterField(
model_name='standards',
name='area',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='areas.Areas'),
),
migrations.AlterField(
model_name='standards',
name='content',
field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, verbose_name='Inhalt'),
),
migrations.AlterField(
model_name='standards',
name='public',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='standards',
name='task',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tasks.Tasks'),

View File

@ -4,47 +4,59 @@
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'standards' %}">Standards</a></li>
<li class="breadcrumb-item active" aria-current="page"><a href="{% url 'standard-area' areaid %}">{{areaname}}</a></li>
<li class="breadcrumb-item active"><a href="{% url 'standard-area' areaid %}">{{areaname}}</a></li>
</ol>
</nav>
<h4>Standards aus dem Bereich {{areaname}}</h4>
<hr>
<div class="row">
<table class="table">
<thead>
<tr>
<th scope="col">Titel</th>
<th scope="col">Erstellt von</th>
<th scope="col">Erstellt am</th>
<th scope="col">Geändert von</th>
<th scope="col">Geändert am</th>
<th scope="col">Öffentlichkeitsstatus</th>
<th scope="col">&nbsp;</th>
</tr>
</thead>
{% for item in standards_of_agency_area %}
{% if item.public or item.created_standard_by == user or perms.users.standard_management %}
<div class=" mb-4 col-5">
<div class="card">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<a href="{% url 'standard-single' item.pk%}">
{% if item.public %}
<h4><u>{{item.name}}</u></h4>
{% else %}
<h4 class="text-warning"><u>{{item.name}}</u></h4>
{% endif %}
</a>
<tr>
<td><a href="{% url 'standard-single' item.pk %}">{{item.name}}</a></td>
<td>{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}}</td>
<td>{{ item.created_standard_date}}</td>
<td>{{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }}</td>
<td>{{ item.last_modified_on }}</td>
<td>{{item.public|yesno:"Öffentlich,Nicht öffentlich"}}</td>
<td>
{% if item.created_standard_by == user or perms.users.standard_management %}
<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">Benutzerdaten</div>-->
<a class="dropdown-item" href="{% url 'standard-update' item.pk %}">Bearbeiten</a>
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink"> <a class="dropdown-item" href="{% url 'standard-update' item.pk %}">Bearbeiten</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="{% url 'standard-delete' item.pk %}" >Löschen</a>
</div>
</div>
{% endif %}
</div>
<div class="card-body">
<h5 class="card-title">{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}} <h6>Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }}</h6>
</h5>
<p class="card-text">{{ item.content|truncatechars:250|safe}}</p>
</div>
</div>
</div>
</td>
</tr>
{% endif %}
{% endfor%}
{% endfor %}
</table>
</div>
</div>
{% endblock content %}

View File

@ -1,25 +1,25 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-12">
<h3>Willkommen, {{request.user.first_name}} {{request.user.last_name}}!</h3>
<small>Letzter Login: {{ request.user.last_login }}</small>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'standards' %}">Standards</a></li>
<li class="breadcrumb-item active" aria-current="page"><a href="{% url 'standard-area' areaid %}">{{areaname}}</a></li>
</ol>
</nav>
<h4>Standards aus dem Bereich {{areaname}}</h4>
<hr>
<h4>Agentur: <b>{{ request.user.profile.agency.name }}</b></h4>
<hr>
<h5>Neueste Standards</h5>
<div class="row">
<hr>
<div class="col mt-2">
{% for item in standards_of_agency %}
{% for item in standards_of_agency_area %}
{% if item.public or item.created_standard_by == user or perms.users.standard_management %}
<div class=" mb-4">
<div class=" mb-4 col-5">
<div class="card">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<a href="{% url 'standard-single' item.pk%}">
{% if item.public %}
<h5><u>{{item.name}}</u></h5>
<h4><u>{{item.name}}</u></h4>
{% else %}
<h5 class="text-warning"><u>{{item.name}}</u></h5>
<h4 class="text-warning"><u>{{item.name}}</u></h4>
{% endif %}
</a>
{% if item.created_standard_by == user or perms.users.standard_management %}
@ -37,18 +37,14 @@
{% endif %}
</div>
<div class="card-body">
<h6 class="card-title">{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}} <small>Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }}</small>
</h6>
<p class="card-text">{{ item.content|truncatechars:80|safe}}</p>
<h5 class="card-title">{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}} <h6>Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }}</h6>
</h5>
<p class="card-text">{{ item.content|truncatechars:250|safe}}</p>
</div>
</div>
</div>
{% endif %}
{% endfor%}
</div>
<div class="col text-right" >
<img class="img-profile" width="50%" src="{{ request.user.profile.agency.agencypic.url }}">
</div>
</div>
</div>
{% endblock content %}

View File

@ -11,41 +11,56 @@
<h4>Standards aus dem Aufgabenbereich {{taskname}} des Bereichs {{areaname}}</h4>
<hr>
<div class="row">
<table class="table">
<thead>
<tr>
<th scope="col">Titel</th>
<th scope="col">Erstellt von</th>
<th scope="col">Erstellt am</th>
<th scope="col">Geändert von</th>
<th scope="col">Geändert am</th>
<th scope="col">Öffentlichkeitsstatus</th>
<th scope="col">&nbsp;</th>
</tr>
</thead>
{% for item in standards_of_agency_task %}
{% if item.public or item.created_standard_by == user or perms.users.standard_management %}
<div class=" mb-4 col-5">
<div class="card">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<a href="{% url 'standard-single' item.pk%}">
{% if item.public %}
<h4><u>{{item.name}}</u></h4>
{% else %}
<h4 class="text-warning"><u>{{item.name}}</u></h4>
{% endif %}
</a>
<tr>
<td><a href="{% url 'standard-single' item.pk %}">{{item.name}}</a></td>
<td>{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}}</td>
<td>{{ item.created_standard_date}}</td>
<td>{{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }}</td>
<td>{{ item.last_modified_on }}</td>
<td>{{item.public|yesno:"Öffentlich,Nicht öffentlich"}}</td>
<td>
{% if item.created_standard_by == user or perms.users.standard_management %}
<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">Benutzerdaten</div>-->
<a class="dropdown-item" href="{% url 'standard-update' item.pk %}">Bearbeiten</a>
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink"> <a class="dropdown-item" href="{% url 'standard-update' item.pk %}">Bearbeiten</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="{% url 'standard-delete' item.pk %}" >Löschen</a>
</div>
</div>
{% endif %}
</div>
<div class="card-body">
<h5 class="card-title">{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}} <h6>Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }}</h6>
</h5>
<p class="card-text">{{ item.content|truncatechars:250|safe}}</p>
</div>
</div>
</div>
</td>
</tr>
{% endif %}
{% endfor%}
{% endfor %}
</table>
</div>
</div>
{% endblock content %}

View File

@ -0,0 +1,51 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-12">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'standards' %}">Standards</a></li>
<li class="breadcrumb-item active"><a href="{% url 'standard-area' areaid %}">{{areaname}}</a></li>
<li class="breadcrumb-item active" aria-current="page"><a href="{% url 'standard-task' taskid %}">{{taskname}}</a></li>
</ol>
</nav>
<h4>Standards aus dem Aufgabenbereich {{taskname}} des Bereichs {{areaname}}</h4>
<hr>
<div class="row">
{% for item in standards_of_agency_task %}
{% if item.public or item.created_standard_by == user or perms.users.standard_management %}
<div class=" mb-4 col-5">
<div class="card">
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<a href="{% url 'standard-single' item.pk%}">
{% if item.public %}
<h4><u>{{item.name}}</u></h4>
{% else %}
<h4 class="text-warning"><u>{{item.name}}</u></h4>
{% endif %}
</a>
{% if item.created_standard_by == user or perms.users.standard_management %}
<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">Benutzerdaten</div>-->
<a class="dropdown-item" href="{% url 'standard-update' item.pk %}">Bearbeiten</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="{% url 'standard-delete' item.pk %}" >Löschen</a>
</div>
</div>
{% endif %}
</div>
<div class="card-body">
<h5 class="card-title">{{item.created_standard_by.first_name}} {{item.created_standard_by.last_name}} <h6>Zuletzt bearbeitet von {{ item.last_modified_by.first_name }} {{ item.last_modified_by.last_name }} am {{ item.last_modified_on }}</h6>
</h5>
<p class="card-text">{{ item.content|truncatechars:250|safe}}</p>
</div>
</div>
</div>
{% endif %}
{% endfor%}
</div>
</div>
{% endblock content %}

View File

@ -1,9 +1,7 @@
# Generated by Django 3.0 on 2019-12-04 07:57
# Generated by Django 2.2.7 on 2019-12-09 17:02
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
@ -11,9 +9,6 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('areas', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('users', '0002_auto_20191204_0857'),
]
operations = [
@ -21,13 +16,10 @@ class Migration(migrations.Migration):
name='Tasks',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(default='', max_length=200)),
('desc', models.TextField(blank=True, max_length=3000)),
('created_area_date', models.DateField(blank=True, default=datetime.date.today)),
('visible', models.BooleanField(default=True)),
('agency', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency')),
('area', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='areas.Areas')),
('created_area_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
('usersfield', models.ManyToManyField(blank=True, related_name='users_in_task', to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -0,0 +1,40 @@
# Generated by Django 2.2.7 on 2019-12-09 17:02
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('tasks', '0001_initial'),
('users', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('areas', '0002_auto_20191209_1802'),
]
operations = [
migrations.AddField(
model_name='tasks',
name='agency',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'),
),
migrations.AddField(
model_name='tasks',
name='area',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='areas.Areas'),
),
migrations.AddField(
model_name='tasks',
name='created_area_by',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='tasks',
name='usersfield',
field=models.ManyToManyField(blank=True, related_name='users_in_task', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.0 on 2019-12-04 08:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tasks', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='tasks',
name='name',
field=models.CharField(default='', max_length=200),
),
]

View File

@ -1,26 +0,0 @@
# Generated by Django 3.0 on 2019-12-05 07:09
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('areas', '0001_initial'),
('users', '0002_auto_20191204_0857'),
('tasks', '0002_tasks_name'),
]
operations = [
migrations.AlterField(
model_name='tasks',
name='agency',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Agency'),
),
migrations.AlterField(
model_name='tasks',
name='area',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='areas.Areas'),
),
]

View File

@ -1,4 +1,4 @@
# Generated by Django 3.0 on 2019-12-03 22:58
# Generated by Django 2.2.7 on 2019-12-09 17:02
from django.conf import settings
from django.db import migrations, models
@ -10,6 +10,7 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('tasks', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
@ -40,7 +41,16 @@ class Migration(migrations.Migration):
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'permissions': [('agency_change', 'Agenturinformationen verändern'), ('users_usermanagement', 'Benutzer bearbeiten'), ('tasks_management', 'Aufgabenbereiche bearbeiten'), ('areas_management', 'Bereiche bearbeiten')],
'permissions': [('agency_change', 'Agenturinformationen verändern'), ('users_usermanagement', 'Benutzer bearbeiten'), ('areas_management', 'Bereiche bearbeiten'), ('tasks_management', 'Aufgabenbereiche bearbeiten'), ('standard_management', 'Standards bearbeiten und freischalten'), ('news_management', 'News bearbeiten und veröffentlichen')],
},
),
migrations.CreateModel(
name='Prio',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('prio', models.IntegerField(default=0)),
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tasks.Tasks')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 3.0 on 2019-12-04 07:57
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('users', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='profile',
options={'permissions': [('agency_change', 'Agenturinformationen verändern'), ('users_usermanagement', 'Benutzer bearbeiten'), ('areas_management', 'Bereiche bearbeiten'), ('tasks_management', 'Aufgabenbereiche bearbeiten'), ('standard_management', 'Standards bearbeiten und freischalten')]},
),
]

View File

@ -1,26 +0,0 @@
# Generated by Django 2.2.7 on 2019-12-05 17:41
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('tasks', '0003_auto_20191205_0809'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('users', '0002_auto_20191204_0857'),
]
operations = [
migrations.CreateModel(
name='Prio',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('prio', models.IntegerField(default=0)),
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tasks.Tasks')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -73,7 +73,7 @@ class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phoneland = models.CharField(max_length=60, blank=True)
phonemobile = models.CharField(max_length=60, blank=True)
func = models.CharField(choices=agency_task, default="external", max_length=50)
func = models.CharField(choices=agency_task, default="lead", max_length=50)
# Wenn dieses Profil gelöscht wird, wird NICHT die Agency geslöscht
agency = models.ForeignKey(Agency, on_delete=models.PROTECT)
image = models.ImageField(default='default.jpg', upload_to='userprofilepics', blank=True)
@ -112,7 +112,8 @@ class Profile(models.Model):
('users_usermanagement', 'Benutzer bearbeiten'),
('areas_management', 'Bereiche bearbeiten'),
('tasks_management', 'Aufgabenbereiche bearbeiten'),
('standard_management', 'Standards bearbeiten und freischalten')
('standard_management', 'Standards bearbeiten und freischalten'),
('news_management', 'News bearbeiten und veröffentlichen')
]

View File

@ -100,7 +100,7 @@
</a>
</li>
{% if perms.users.users_usermanagement or perms.users.areas_management or perms.users.tasks_management %}
{% 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">
@ -146,6 +146,19 @@
</li>
{%endif%}
{% if perms.users.news_management %}
{% if active_link == 'newsmanagement' %}
<li class="nav-item active">
{% else%}
<li class="nav-item">
{%endif%}
<a class="nav-link " href="{% url 'news-management' %}" aria-expanded="true">
<i class="far fa-newspaper"></i>
<span>News</span>
</a>
</li>
{%endif%}
<!-- Divider -->
<!-- Divider -->

View File

@ -4,12 +4,30 @@
<h3>Willkommen, {{request.user.first_name}} {{request.user.last_name}}!</h3>
<small>Letzter Login: {{ request.user.last_login }}</small>
<hr>
<h4>Agentur: <b>{{ request.user.profile.agency.name }}</b></h4>
<h5>Agentur: <b>{{ request.user.profile.agency.name }}</b></h5>
<hr>
<h5>Neueste Standards</h5>
<div class="row">
<hr>
<div class="col-9 mt-2">
<div class="col-9">
<h4>News</h4>
<table class="table">
<thead>
<tr>
<th scope="col">Titel</th>
<th scope="col">Veröffentlicht von</th>
<th scope="col">Veröffentlicht am</th>
</tr>
</thead>
{% for news_single in news %}
<tr>
<td><a href="{% url 'news-single' news_single.pk %}">{{news_single.name }}</a></td>
<td>{{ news_single.created_by.first_name }} {{ news_single.created_by.last_name }}</td>
<td>{{ news_single.created_date }}</td>
</tr>
{% endfor %}
</table>
<h4 class="mt-5">Neueste Standards</h4>
<table class="table">
<thead>
<tr>
@ -32,9 +50,6 @@
</tr>
{% endfor %}
</table>
</div>
<div class="col-3 text-right" >
<img class="img-profile" width="100%" src="{{ request.user.profile.agency.agencypic.url }}">

View File

@ -20,6 +20,7 @@
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Benutzername</th>
<th scope="col">E-Mail</th>
<th scope="col">Agenturfunktion</th>
<th scope="col">Tätigkeit</th>
@ -31,6 +32,7 @@
{% for item in users_of_agency %}
<tr>
<td><a href="{% url 'orga-single' item.pk %}">{{item.first_name }} {{ item.last_name }}</a></td>
<td>{{ item.username }}</td>
<td>{{ item.email }}</td>
<td>{{ item.profile.get_func_display }}</td>
<td>{{ item.profile.compfunc }}</td>

View File

@ -1,84 +0,0 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-12">
<h3>Benutzerverwaltung</h3>
<hr>
<p>
Erstellen Sie weitere Mitarbeiter ihrer Agentur. Die neuen Benutzer erhalten eine E-Mail mit einem entsprechenden Link, um ihr Passwort zu generieren.
</p>
<div class="row">
<div class="content-section col-4">
<a class="btn btn-primary" href="{% url 'users-adduser' %} ">Neuer Benutzer</a>
</div>
</div>
<hr>
<div class="row">
{% for item in users_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.first_name }} {{ item.last_name }} ({{item.username}})</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">Benutzerdaten</div>
<a class="dropdown-item" href="{% url 'users-update' item.profile.pk %}">Bearbeiten</a>
<a class="dropdown-item" href="{% url 'users-prio' item.pk %}">Priorisierung</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="{% url 'users-perm-update' item.profile.pk %}">Rechte</a>
<!--<div class="dropdown-header"></div>-->
<a class="dropdown-item" href="#">Zuständigkeitenn</a>
{% if item != request.user %}
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="{% url 'users-delete' item.pk %}" >Löschen</a>
{% endif %}
</div>
</div>
</div>
<!-- Card Body -->
<div class="card-body">
<div class="row">
<div class="col-md-6">
<h6><b>Name</b></h6>
<p>
{{ item.first_name }} {{ item.last_name }}
</p>
<h6><b>E-Mail</b></h6>
<p>
{{ item.email }}
</p>
<h6><b>Agenturfunktion</b></h6>
<p>
{{ item.profile.get_func_display }}
</p>
</div>
<div class="col-md-6">
<h6><b>Tätigkeit</b></h6>
<p>
{{ item.profile.compfunc }}
</p>
<h6><b>Festznetz</b></h6>
<p>
{{ item.profile.phoneland }}
</p>
<h6><b>Mobil</b></h6>
<p>
{{ item.profile.phonemobile }}
</p>
</div>
</div>
</div>
</div>
</div>
{% endfor%}
</div>
</div>
{% endblock content %}

View File

@ -17,6 +17,7 @@ from .priomodel import Prio
from standards.models import Standards
from datetime import datetime
from django.utils import formats
from news.models import News
'''
DASHBOARD-View
@ -62,7 +63,11 @@ def dashboard(request):
# Change context and return for template-data
# # Get all Users of the Same Agency as logged user
standards_of_agency = Standards.objects.filter(agency__pk=request.user.profile.agency.pk).order_by('-last_modified_on')[:10]
context.update({'active_link' : 'dashboard', 'standards_of_agency' : standards_of_agency})
filterdate = datetime.now()
news = News.objects.filter(agency__pk=request.user.profile.agency.pk).filter(go_online_on__lt=filterdate).filter(go_offline_on__gt=filterdate)
context.update({'active_link' : 'dashboard', 'standards_of_agency' : standards_of_agency, 'news' : news})
#return context
return render (request, 'users/dashboard.html', context)