NF Bereich 1
This commit is contained in:
parent
0f13332892
commit
6ba4564f30
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -42,6 +42,10 @@ MAILINFOKEY = "jka7sd8iukashdna78skduJAHDsu6dilaksdjba65a68iadbhjak"
|
||||||
# API KEY LEXOFFICE
|
# API KEY LEXOFFICE
|
||||||
LEX_API = "8f9ba01f-9e84-42c7-9548-48c254f14c19"
|
LEX_API = "8f9ba01f-9e84-42c7-9548-48c254f14c19"
|
||||||
|
|
||||||
|
# KEYS FOR ENCRYPTED FILE FIELDS
|
||||||
|
DEFF_SALT = 'A-!GDtuKp?H/H5-UUatEh6ZcG/6h-VQf1OkDORRkK0(:(qCf//'
|
||||||
|
DEFF_PASSWORD = 'i8#vKXbrgHfdrPGns+O1n!s15bAF(3SE8tFNXuAGC0INHRo+EI'
|
||||||
|
DEFF_FETCH_URL_NAME = 'getdoc'
|
||||||
|
|
||||||
#ALLOWED_HOSTS = ['digitale-agentur.com', 'www.digitale-agentur.com', '127.0.0.1', '192.168.178.101','localhost', 'dev01.digitale-agentur.com', '10.0.2.2']
|
#ALLOWED_HOSTS = ['digitale-agentur.com', 'www.digitale-agentur.com', '127.0.0.1', '192.168.178.101','localhost', 'dev01.digitale-agentur.com', '10.0.2.2']
|
||||||
# FORWARD HEADERS
|
# FORWARD HEADERS
|
||||||
|
|
@ -204,9 +208,6 @@ MEDIA_URL = '/media/'
|
||||||
# CRISPY
|
# CRISPY
|
||||||
CRISPY_TEMPLATE_PACK = 'bootstrap4'
|
CRISPY_TEMPLATE_PACK = 'bootstrap4'
|
||||||
|
|
||||||
# Bildspeicherpfad
|
|
||||||
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
|
|
||||||
MEDIA_URL = '/media/'
|
|
||||||
|
|
||||||
# FOR COLORFIELD
|
# FOR COLORFIELD
|
||||||
GRAPPELLI_CLEAN_INPUT_TYPES = False
|
GRAPPELLI_CLEAN_INPUT_TYPES = False
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,12 @@ from django.conf import settings
|
||||||
from django.conf.urls.static import static
|
from django.conf.urls.static import static
|
||||||
from users.views import AgencyCreateView, registerNewAgency
|
from users.views import AgencyCreateView, registerNewAgency
|
||||||
from . import views
|
from . import views
|
||||||
|
from .views import GetCryptFile
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from rest_framework.authtoken.views import obtain_auth_token
|
from rest_framework.authtoken.views import obtain_auth_token
|
||||||
|
from django_encrypted_filefield.constants import FETCH_URL_NAME
|
||||||
|
from django.conf.urls import url
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
|
path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
|
||||||
|
|
@ -35,6 +39,8 @@ urlpatterns = [
|
||||||
path('api/', include('api.urls', namespace='api')),
|
path('api/', include('api.urls', namespace='api')),
|
||||||
path('chat/', include('chat.urls'), name='chat'),
|
path('chat/', include('chat.urls'), name='chat'),
|
||||||
path('api-token-auth/', obtain_auth_token, name='api-token-auth'),
|
path('api-token-auth/', obtain_auth_token, name='api-token-auth'),
|
||||||
|
path('getdoc/<path:path>', GetCryptFile.as_view(), name=FETCH_URL_NAME),
|
||||||
|
|
||||||
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,106 @@
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
from django.contrib.auth.mixins import AccessMixin
|
||||||
|
from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView
|
||||||
|
import requests
|
||||||
|
import magic
|
||||||
|
from django.conf import settings
|
||||||
|
from django.core.validators import URLValidator, ValidationError
|
||||||
|
from django.http import Http404, HttpResponse
|
||||||
|
from django.views.generic import View
|
||||||
|
import base64
|
||||||
|
from cryptography.fernet import Fernet
|
||||||
|
from cryptography.hazmat.backends import default_backend
|
||||||
|
from cryptography.hazmat.primitives import hashes
|
||||||
|
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
|
||||||
|
import os, six
|
||||||
|
|
||||||
|
|
||||||
|
def _get_setting(name):
|
||||||
|
setting_name = "DEFF_{}".format(name)
|
||||||
|
return os.getenv(setting_name, getattr(settings, setting_name, None))
|
||||||
|
|
||||||
|
|
||||||
|
def get_bytes(v):
|
||||||
|
|
||||||
|
if isinstance(v, six.string_types):
|
||||||
|
return bytes(v.encode("utf-8"))
|
||||||
|
|
||||||
|
if isinstance(v, bytes):
|
||||||
|
return v
|
||||||
|
|
||||||
|
raise TypeError(
|
||||||
|
"SALT & PASSWORD must be specified as strings that convert nicely to "
|
||||||
|
"bytes."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
SALT = get_bytes(_get_setting("SALT"))
|
||||||
|
PASSWORD = get_bytes(_get_setting("PASSWORD"))
|
||||||
|
FETCH_URL_NAME = _get_setting("FETCH_URL_NAME")
|
||||||
|
|
||||||
|
class Cryptographer(object):
|
||||||
|
|
||||||
|
_fernet = Fernet(base64.urlsafe_b64encode(PBKDF2HMAC(
|
||||||
|
algorithm=hashes.SHA256(),
|
||||||
|
length=32,
|
||||||
|
salt=SALT,
|
||||||
|
iterations=100000,
|
||||||
|
backend=default_backend()
|
||||||
|
).derive(PASSWORD)))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def encrypted(cls, content):
|
||||||
|
return cls._fernet.encrypt(content)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def decrypted(cls, content):
|
||||||
|
return cls._fernet.decrypt(content)
|
||||||
|
|
||||||
def registerdone(request):
|
def registerdone(request):
|
||||||
return render (request, 'users/registercomplete.html')
|
return render (request, 'users/registercomplete.html')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class GetCryptFile(DetailView):
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
|
||||||
|
if(self.request.user.has_perm("users.recoverdirmanager")):
|
||||||
|
|
||||||
|
path = kwargs.get("path")
|
||||||
|
|
||||||
|
# No path? You're boned. Move along.
|
||||||
|
if not path:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
if self._is_url(path):
|
||||||
|
content = requests.get(path, stream=True).raw.read()
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Normalise the path to strip out naughty attempts
|
||||||
|
path = os.path.normpath(path).replace(settings.MEDIA_URL, settings.MEDIA_ROOT, 1)
|
||||||
|
path = "media/" + path
|
||||||
|
# Evil path request!
|
||||||
|
#if not path.startswith(settings.MEDIA_ROOT):
|
||||||
|
# print("404 startswith")
|
||||||
|
# raise Http404
|
||||||
|
|
||||||
|
# The file requested doesn't exist locally. A legit 404
|
||||||
|
if not os.path.exists(path):
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
with open(path, "rb") as f:
|
||||||
|
content = f.read()
|
||||||
|
|
||||||
|
content = Cryptographer.decrypted(content)
|
||||||
|
return HttpResponse(content, content_type=magic.Magic(mime=True).from_buffer(content))
|
||||||
|
else:
|
||||||
|
return render(request, 'cloud/noentrie.html')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _is_url(path):
|
||||||
|
try:
|
||||||
|
URLValidator()(path)
|
||||||
|
return True
|
||||||
|
except ValidationError:
|
||||||
|
return False
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,6 +1,7 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
from .models import PersLetter
|
from .models import *
|
||||||
|
from bootstrap_datepicker_plus import DatePickerInput
|
||||||
|
|
||||||
|
|
||||||
class PersLetterForm(forms.ModelForm):
|
class PersLetterForm(forms.ModelForm):
|
||||||
|
|
@ -17,3 +18,78 @@ class PersLetterForm(forms.ModelForm):
|
||||||
super(PersLetterForm, self).__init__(*args, **kwargs)
|
super(PersLetterForm, self).__init__(*args, **kwargs)
|
||||||
self.fields['text'] = forms.CharField(label="Ihr persönlicher Text", widget=forms.Textarea(attrs={"rows":15, "cols":35}))
|
self.fields['text'] = forms.CharField(label="Ihr persönlicher Text", widget=forms.Textarea(attrs={"rows":15, "cols":35}))
|
||||||
|
|
||||||
|
|
||||||
|
# NOTFALLORDNER FORMS
|
||||||
|
# 1 Handlungsleitfaden
|
||||||
|
class HLForm(forms.ModelForm):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Handlungsleitfaden
|
||||||
|
fields = ['rd_main','rd_prename','rd_postname','rd_street','rd_plz','rd_city','rd_tel','rd_mail','bvk_number','rv_name','rv_number','rv_tel_1','rv_tel_2']
|
||||||
|
|
||||||
|
labels = {
|
||||||
|
'rd_main' : "Zuständige RD",
|
||||||
|
'rd_prename': "Vorname RD Leiter",
|
||||||
|
'rd_postname' : "Nachname RD Leiter",
|
||||||
|
'rd_street' : "RD Straße",
|
||||||
|
'rd_plz' : "RD PLZ",
|
||||||
|
'rd_city' : "RD Stadt",
|
||||||
|
'rd_tel' : "RD Telefon",
|
||||||
|
'rd_mail' : "RD E-Mail",
|
||||||
|
'bvk_number' : "BVK Nummer",
|
||||||
|
'rv_name' : "Rechtsschutzversicherer",
|
||||||
|
'rv_number' : "Versicherungsnummer",
|
||||||
|
'rv_tel_1' : "Telefon 1",
|
||||||
|
'rv_tel_2' : "Telefon 2"
|
||||||
|
}
|
||||||
|
|
||||||
|
class RDContactF(forms.ModelForm):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = RDContact
|
||||||
|
|
||||||
|
fields = ['rd_prename','rd_postname','rd_rel','rd_adresse','rd_tel']
|
||||||
|
|
||||||
|
labels = {
|
||||||
|
'rd_prename' : "Vorname",
|
||||||
|
'rd_postname' : "Nachname",
|
||||||
|
'rd_rel' : "Beziehung",
|
||||||
|
'rd_adresse' : "Adresse",
|
||||||
|
'rd_tel' : "Telefon"
|
||||||
|
}
|
||||||
|
|
||||||
|
class RDTrustPersonF(forms.ModelForm):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = RDTrustPerson
|
||||||
|
|
||||||
|
fields = ['rd_prename','rd_postname','rd_company','rd_adresse','rd_tel']
|
||||||
|
|
||||||
|
labels = {
|
||||||
|
'rd_prename' : "Vorname",
|
||||||
|
'rd_postname' : "Nachname",
|
||||||
|
'rd_company' : "Firma",
|
||||||
|
'rd_adresse' : "Adresse",
|
||||||
|
'rd_tel' : "Telefon"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# DOCUMENTS
|
||||||
|
class DocumentForm(forms.ModelForm):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Documents
|
||||||
|
fields = ['document_desc', 'document_date', 'document_name','document', 'area']
|
||||||
|
labels = {
|
||||||
|
'document_desc' : "Dokumentbeschreibung",
|
||||||
|
'document_date' : "Datum",
|
||||||
|
"document_name" : "Dateiname",
|
||||||
|
'document' : "Dokument"
|
||||||
|
}
|
||||||
|
widgets = {
|
||||||
|
'document_date': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'})
|
||||||
|
}
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(DocumentForm, self).__init__(*args, **kwargs)
|
||||||
|
self.fields['area'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput())
|
||||||
|
|
@ -7,6 +7,17 @@ from django_cryptography.fields import encrypt
|
||||||
# HISTORY
|
# HISTORY
|
||||||
from simple_history.models import HistoricalRecords
|
from simple_history.models import HistoricalRecords
|
||||||
|
|
||||||
|
from django_encrypted_filefield.fields import (
|
||||||
|
EncryptedFileField,
|
||||||
|
EncryptedImageField
|
||||||
|
)
|
||||||
|
|
||||||
|
# PATH FOR AGENCYPIC
|
||||||
|
def rd_path_agency(instance, filename):
|
||||||
|
# file will be uploaded to MEDIA_URL/agency_<id>/<subdirs>/<filename>
|
||||||
|
return 'agencydata/agency_{0}/rd/{1}'.format(instance.agency.pk, filename)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
class PersLetter(models.Model):
|
class PersLetter(models.Model):
|
||||||
|
|
@ -15,3 +26,52 @@ class PersLetter(models.Model):
|
||||||
text = encrypt(models.CharField(max_length=100000, blank=True, default="", null=True))
|
text = encrypt(models.CharField(max_length=100000, blank=True, default="", null=True))
|
||||||
history = HistoricalRecords()
|
history = HistoricalRecords()
|
||||||
|
|
||||||
|
# Notfallordner Datenfelder
|
||||||
|
# Handlungsleitfaden
|
||||||
|
class Handlungsleitfaden(models.Model):
|
||||||
|
agency = models.ForeignKey(Agency, on_delete=models.CASCADE, null=True)
|
||||||
|
rd_main = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_prename = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_postname = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_street = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_plz = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_city = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_tel = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_mail = encrypt(models.EmailField(max_length=500, blank=True, default="", null=True))
|
||||||
|
bvk_number = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rv_name = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rv_number = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rv_tel_1 = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rv_tel_2 = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
|
# Contacts
|
||||||
|
class RDContact(models.Model):
|
||||||
|
agency = models.ForeignKey(Agency, on_delete=models.CASCADE, null=True)
|
||||||
|
rd_prename = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_postname = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_rel = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_adresse = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_tel = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
|
class RDTrustPerson(models.Model):
|
||||||
|
agency = models.ForeignKey(Agency, on_delete=models.CASCADE, null=True)
|
||||||
|
rd_prename = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_postname = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_company = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_adresse = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
rd_tel = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
|
class Documents(models.Model):
|
||||||
|
agency = models.ForeignKey(Agency, on_delete=models.CASCADE, null=True)
|
||||||
|
area = models.IntegerField(default=0)
|
||||||
|
document_desc = encrypt(models.CharField(max_length=500, blank=True, default="", null=True))
|
||||||
|
document_name = encrypt(models.CharField(max_length=500, blank=False, default="", null=False))
|
||||||
|
document_date = encrypt(models.DateField(default=timezone.now, blank=True, null=True))
|
||||||
|
document = EncryptedFileField(upload_to=rd_path_agency, blank=True)
|
||||||
|
history = HistoricalRecords()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,157 @@
|
||||||
|
|
||||||
|
{% if area_1_hl == None %}
|
||||||
|
<a class="btn btn-primary btn" href="{% url 'rd-a1-hl' %}"><i class="fas fa-plus"></i> Handlungsleitfaden</a>
|
||||||
|
{% else %}
|
||||||
|
<h4><a href="{% url 'rd-a1-hl-update' area_1_hl.pk %}">Handlungsleitfaden bearbeiten</a></h4>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<h4>Familie und Freunde
|
||||||
|
<a class="btn btn-primary btn mb-3" href="{% url 'rd-a1-addfamily' %}" style="float: right;"><i class="fas fa-plus"></i> Kontakt</a>
|
||||||
|
</h4>
|
||||||
|
<table class="table table-hover" id="a1_fc" >
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Name</th>
|
||||||
|
<th scope="col">Beziehung</th>
|
||||||
|
<th scope="col">Adresse</th>
|
||||||
|
<th scope="col">Telefon</th>
|
||||||
|
<th scope="col"> </th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
{% for familyc in area_1_fc %}
|
||||||
|
<tr>
|
||||||
|
<td>{{familyc.rd_prename}} {{familyc.rd_postname}}</td>
|
||||||
|
<td>{{familyc.rd_rel}}</td>
|
||||||
|
<td>{{familyc.rd_adresse}}</td>
|
||||||
|
<td>{{familyc.rd_tel}}</td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<h4>Vertrauensperson
|
||||||
|
<a class="btn btn-primary btn mb-3" href="{% url 'rd-a1-addtrust' %}" style="float: right;"><i class="fas fa-plus"></i> Vertrauensperson</a>
|
||||||
|
</h4>
|
||||||
|
<table class="table table-hover" id="a1_trust" >
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Name</th>
|
||||||
|
<th scope="col">Firma</th>
|
||||||
|
<th scope="col">Adresse</th>
|
||||||
|
<th scope="col">Telefon</th>
|
||||||
|
<th scope="col"> </th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
{% for familyc in area_1_trust %}
|
||||||
|
<tr>
|
||||||
|
<td>{{familyc.rd_prename}} {{familyc.rd_postname}}</td>
|
||||||
|
<td>{{familyc.rd_company}}</td>
|
||||||
|
<td>{{familyc.rd_adresse}}</td>
|
||||||
|
<td>{{familyc.rd_tel}}</td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<h4>Vorsorgedokumente
|
||||||
|
<a class="btn btn-primary btn mb-3" href="{% url 'rd-a1-adddoc' %}" style="float: right;"><i class="fas fa-plus"></i> Vorsorgedokument</a>
|
||||||
|
</h4>
|
||||||
|
<table class="table table-hover" id="a1_docs" >
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Name</th>
|
||||||
|
<th scope="col">Datum</th>
|
||||||
|
<th scope="col">Beschreibung</th>
|
||||||
|
<th scope="col"> </th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
{% for doc in area_1_doc %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{% url 'rd-a1-viewdoc' doc.pk %}" target="_blank">{{doc.document_name}}</a></td>
|
||||||
|
<td>{{doc.document_date|date:"d.m.Y"}}</td>
|
||||||
|
<td>{{doc.document_desc}}</td>
|
||||||
|
<td>
|
||||||
|
<a style="float: right" class="btn btn-secondary btn-sm mr-2 " href="{% url 'rd-a1-viewdoc' doc.pk %}" target="_blank"><i class="far fa-eye"></i></a>
|
||||||
|
<a style="float: right" class="btn btn-secondary btn-sm mr-2 " href="#"><small><i class="fas fa-pen"></i></small></a>
|
||||||
|
<a style="float: right" class="btn btn-secondary btn-sm mr-2 " href="#"><small><i class="fas fa-trash"></i></small></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
$('#a1_docs').DataTable({
|
||||||
|
"language": {
|
||||||
|
"search" : "Suche",
|
||||||
|
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
|
||||||
|
"lengthMenu": "Zeige _MENU_ Einträge",
|
||||||
|
"zeroRecords": "Nichts gefunden",
|
||||||
|
"infoEmpty": "Keine Einträge",
|
||||||
|
"paginate": {
|
||||||
|
"first": "Erste",
|
||||||
|
"last": "Letzte",
|
||||||
|
"next": "Nächste",
|
||||||
|
"previous": "Zurück"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"pageLength": 50,
|
||||||
|
"buttons" : {
|
||||||
|
"className" : "btn-danger"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#a1_fc').DataTable({
|
||||||
|
"language": {
|
||||||
|
"search" : "Suche",
|
||||||
|
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
|
||||||
|
"lengthMenu": "Zeige _MENU_ Einträge",
|
||||||
|
"zeroRecords": "Nichts gefunden",
|
||||||
|
"infoEmpty": "Keine Einträge",
|
||||||
|
"paginate": {
|
||||||
|
"first": "Erste",
|
||||||
|
"last": "Letzte",
|
||||||
|
"next": "Nächste",
|
||||||
|
"previous": "Zurück"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"pageLength": 50,
|
||||||
|
"buttons" : {
|
||||||
|
"className" : "btn-danger"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#a1_trust').DataTable({
|
||||||
|
"language": {
|
||||||
|
"search" : "Suche",
|
||||||
|
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
|
||||||
|
"lengthMenu": "Zeige _MENU_ Einträge",
|
||||||
|
"zeroRecords": "Nichts gefunden",
|
||||||
|
"infoEmpty": "Keine Einträge",
|
||||||
|
"paginate": {
|
||||||
|
"first": "Erste",
|
||||||
|
"last": "Letzte",
|
||||||
|
"next": "Nächste",
|
||||||
|
"previous": "Zurück"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"pageLength": 50,
|
||||||
|
"buttons" : {
|
||||||
|
"className" : "btn-danger"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
ZWEITE
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
DRIITTE
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
VIERTE
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
FÜNFTE
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
SECHSTE
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
SIEBTE
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
ACHTE
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
NEUNTE
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
{% if request.user.profile.agency.module_recoverdir %}
|
||||||
|
<div class="content-section col-12">
|
||||||
|
<h3>Dokumentenansicht
|
||||||
|
<span style="float: right">
|
||||||
|
<a href="{% url 'recoverdir'%}" style="float: right" class="btn btn-secondary btn-sm "><small><i class="fas fa-chevron-circle-left"></i></small></a>
|
||||||
|
</span>
|
||||||
|
</h3>
|
||||||
|
<hr>
|
||||||
|
<h4>Beschreibung</h4>
|
||||||
|
<p>{{document.document_desc}}</p>
|
||||||
|
<p>Datum: {{document.document_date}}</p>
|
||||||
|
<hr>
|
||||||
|
<a href="{% url 'getdoc' document.document %}" target="_blank">Datei herunterladen</a>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<h3>Auf dieses Modul haben Sie keinen Zugriff!</h3>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% block content %}
|
||||||
|
{% if request.user.profile.agency.module_recoverdir %}
|
||||||
|
<div class="content-section col-9">
|
||||||
|
<h3>Vorsorgedokument hinzufügen</h3>
|
||||||
|
<hr>
|
||||||
|
<form method="POST" enctype="multipart/form-data">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{form.media}}
|
||||||
|
{{ form|crispy }}
|
||||||
|
<hr>
|
||||||
|
<a class="btn" href="{% url 'recoverdir' %} ">Abbrechen</a>
|
||||||
|
<button type="submit" class="btn btn-primary" style="float: right;">Vorsorgedokument speichern</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$("#id_document").on("change", function(){
|
||||||
|
filename = $("#id_document")[0]['files'][0]['name'];
|
||||||
|
filetype = $("#id_document")[0]['files'][0]['type'];
|
||||||
|
$("#id_document_name").val(filename.split(".")[0]);
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
{% else %}
|
||||||
|
<h3>Das Modul Notfallordner wurden in ihrer Agentur deaktiviert.</h3>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% block content %}
|
||||||
|
{% if request.user.profile.agency.module_recoverdir %}
|
||||||
|
<div class="content-section col-9">
|
||||||
|
<h3>Familien/Freundekontakt bearbeiten</h3>
|
||||||
|
<hr>
|
||||||
|
<form method="POST" enctype="multipart/form-data">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{form.media}}
|
||||||
|
{{form|crispy}}
|
||||||
|
<hr>
|
||||||
|
<a class="btn" href="{% url 'recoverdir' %} ">Abbrechen</a>
|
||||||
|
<button type="submit" class="btn btn-primary" style="float: right;">Familien-/Freundekontakt speichern</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<h3>Das Modul Notfallordner wurden in ihrer Agentur deaktiviert.</h3>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% block content %}
|
||||||
|
{% if request.user.profile.agency.module_recoverdir %}
|
||||||
|
<div class="content-section col-9">
|
||||||
|
<h3>Handlungsleitfaden bearbeiten</h3>
|
||||||
|
<hr>
|
||||||
|
<form method="POST" enctype="multipart/form-data">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{form.media}}
|
||||||
|
|
||||||
|
<h4>Daten der Regionaldirektion</h4>
|
||||||
|
{{form.rd_main|as_crispy_field}}
|
||||||
|
{{form.rd_prename|as_crispy_field}}
|
||||||
|
{{form.rd_postname|as_crispy_field}}
|
||||||
|
{{form.rd_street|as_crispy_field}}
|
||||||
|
{{form.rd_plz|as_crispy_field}}
|
||||||
|
{{form.rd_city|as_crispy_field}}
|
||||||
|
{{form.rd_tel|as_crispy_field}}
|
||||||
|
{{form.rd_mail|as_crispy_field}}
|
||||||
|
<hr>
|
||||||
|
<h4>BVK Mitgliedsnummer</h4>
|
||||||
|
{{form.bvk_number|as_crispy_field}}
|
||||||
|
<hr>
|
||||||
|
<h4>Rechtsschutzersicherungsdaten</h4>
|
||||||
|
{{form.rv_name|as_crispy_field}}
|
||||||
|
{{form.rv_number|as_crispy_field}}
|
||||||
|
{{form.rv_tel_1|as_crispy_field}}
|
||||||
|
{{form.rv_tel_2|as_crispy_field}}
|
||||||
|
<hr>
|
||||||
|
<a class="btn" href="{% url 'recoverdir' %} ">Abbrechen</a>
|
||||||
|
<button type="submit" class="btn btn-primary" style="float: right;">Handlungsleitfaden speichern</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<h3>Das Modul Notfallordner wurden in ihrer Agentur deaktiviert.</h3>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% block content %}
|
||||||
|
{% if request.user.profile.agency.module_recoverdir %}
|
||||||
|
<div class="content-section col-9">
|
||||||
|
<h3>Vertraunsperson bearbeiten</h3>
|
||||||
|
<hr>
|
||||||
|
<form method="POST" enctype="multipart/form-data">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{form.media}}
|
||||||
|
{{form|crispy}}
|
||||||
|
<hr>
|
||||||
|
<a class="btn" href="{% url 'recoverdir' %} ">Abbrechen</a>
|
||||||
|
<button type="submit" class="btn btn-primary" style="float: right;">Vertrauensperson speichern</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<h3>Das Modul Notfallordner wurden in ihrer Agentur deaktiviert.</h3>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -33,7 +33,11 @@
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="tab-content" id="rd_content">
|
<div class="tab-content" id="rd_content">
|
||||||
<div class="tab-pane" id="t_rd" role="tabpanel" aria-labelledby="rd">
|
<div class="tab-pane" id="t_rd" role="tabpanel" aria-labelledby="rd">
|
||||||
Notfallordner
|
<h5 class="mt-3">Notfallordner{% if request.user.profile.showtooltips %} <small><i data-toggle="tooltip" data-placement="top" title="Hinterlegen Sie hier alle Dokumente und Informationen im Notfallordner." class="far fa-question-circle"></i></small>{% endif %}</h5>
|
||||||
|
<hr>
|
||||||
|
{% block rd_content %}
|
||||||
|
{% include "recoverdir/rd_rd.html" %}
|
||||||
|
{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-pane fade" id="t_infos" role="tabpanel" aria-labelledby="infos">
|
<div class="tab-pane fade" id="t_infos" role="tabpanel" aria-labelledby="infos">
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,257 @@
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
.square_private_arrow {
|
||||||
|
float: right;
|
||||||
|
margin-right: 0px;
|
||||||
|
width: 65px;
|
||||||
|
height: 65px;
|
||||||
|
background-color: red;
|
||||||
|
color: #ffffff;
|
||||||
|
-webkit-clip-path:polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%, 25% 50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.square_company_arrow {
|
||||||
|
float: right;
|
||||||
|
margin-right: 0px;
|
||||||
|
width: 65px;
|
||||||
|
height: 65px;
|
||||||
|
background-color: black;
|
||||||
|
color: #ffffff;
|
||||||
|
-webkit-clip-path:polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%, 25% 50%);
|
||||||
|
}
|
||||||
|
.h2_in_arrow {
|
||||||
|
margin-left: 23px;
|
||||||
|
margin-top: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<div id="accordion">
|
||||||
|
<!-- 1. NOTFALLLEITFADEN -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header" id="headingOne">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<button class="btn btn-link" data-toggle="collapse" data-target="#rd_1" aria-expanded="true" aria-controls="rd_1">
|
||||||
|
<h4 style="margin-top: 11px;">1. Notfallleitfaden & Vorsorgedokumente</h4>
|
||||||
|
</button>
|
||||||
|
<span style="float: right;">
|
||||||
|
<span class="square_private_arrow"><h2 class="h2_in_arrow">#1</h2></span>
|
||||||
|
</span>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="rd_1" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
|
||||||
|
<div class="card-body">
|
||||||
|
{% block rd_area_1 %}
|
||||||
|
{% include "recoverdir/rd_areas/rd_area_1.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- 2. ABSICHERUNG VERMÖGEN IMMOBILIEN -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header" id="headingOne">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<button class="btn btn-link" data-toggle="collapse" data-target="#rd_2" aria-expanded="true" aria-controls="rd_2">
|
||||||
|
<h4 style="margin-top: 11px;">2. Absicherung, Vermögen & Immobilien</h4>
|
||||||
|
</button>
|
||||||
|
<span style="float: right;">
|
||||||
|
<span class="square_private_arrow"><h2 class="h2_in_arrow">#2</h2></span>
|
||||||
|
</span>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="rd_2" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
|
||||||
|
<div class="card-body">
|
||||||
|
{% block rd_area_2 %}
|
||||||
|
{% include "recoverdir/rd_areas/rd_area_2.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 3. Verträge -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header" id="headingOne">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<button class="btn btn-link" data-toggle="collapse" data-target="#rd_3" aria-expanded="true" aria-controls="rd_3">
|
||||||
|
<h4 style="margin-top: 11px;">3. Verträge</h4>
|
||||||
|
</button>
|
||||||
|
<span style="float: right;">
|
||||||
|
<span class="square_private_arrow"><h2 class="h2_in_arrow">#3</h2></span>
|
||||||
|
</span>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="rd_3" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
|
||||||
|
<div class="card-body">
|
||||||
|
{% block rd_area_3 %}
|
||||||
|
{% include "recoverdir/rd_areas/rd_area_3.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 4. Digitale Konten -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header" id="headingOne">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<button class="btn btn-link" data-toggle="collapse" data-target="#rd_4" aria-expanded="true" aria-controls="rd_4">
|
||||||
|
<h4 style="margin-top: 11px;">4. Digitale Konten & Passwörter</h4>
|
||||||
|
</button>
|
||||||
|
<span style="float: right;">
|
||||||
|
<span class="square_private_arrow"><h2 class="h2_in_arrow">#4</h2></span>
|
||||||
|
</span>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="rd_4" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
|
||||||
|
<div class="card-body">
|
||||||
|
{% block rd_area_4 %}
|
||||||
|
{% include "recoverdir/rd_areas/rd_area_4.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- GEWERBE -->
|
||||||
|
<!-- 5. Vorsorgedokumente -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header" id="headingOne">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<button class="btn btn-link" data-toggle="collapse" data-target="#rd_5" aria-expanded="true" aria-controls="rd_5">
|
||||||
|
<h4 style="margin-top: 11px;">5. Gewerbe: Vorsorgedokumente</h4>
|
||||||
|
</button>
|
||||||
|
<span style="float: right;">
|
||||||
|
<span class="square_company_arrow"><h2 class="h2_in_arrow">#5</h2></span>
|
||||||
|
</span>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="rd_5" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
|
||||||
|
<div class="card-body">
|
||||||
|
{% block rd_area_5 %}
|
||||||
|
{% include "recoverdir/rd_areas/rd_area_5.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 6. Vorsroge und Finanzen -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header" id="headingOne">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<button class="btn btn-link" data-toggle="collapse" data-target="#rd_6" aria-expanded="true" aria-controls="rd_6">
|
||||||
|
<h4 style="margin-top: 11px;">6. Gewerbe: Vorsorge und Finanzen</h4>
|
||||||
|
</button>
|
||||||
|
<span style="float: right;">
|
||||||
|
<span class="square_company_arrow"><h2 class="h2_in_arrow">#6</h2></span>
|
||||||
|
</span>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="rd_6" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
|
||||||
|
<div class="card-body">
|
||||||
|
{% block rd_area_6 %}
|
||||||
|
{% include "recoverdir/rd_areas/rd_area_6.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 7. Immobilien -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header" id="headingOne">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<button class="btn btn-link" data-toggle="collapse" data-target="#rd_7" aria-expanded="true" aria-controls="rd_7">
|
||||||
|
<h4 style="margin-top: 11px;">7. Gewerbe: Immobilien</h4>
|
||||||
|
</button>
|
||||||
|
<span style="float: right;">
|
||||||
|
<span class="square_company_arrow"><h2 class="h2_in_arrow">#7</h2></span>
|
||||||
|
</span>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="rd_7" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
|
||||||
|
<div class="card-body">
|
||||||
|
{% block rd_area_7 %}
|
||||||
|
{% include "recoverdir/rd_areas/rd_area_7.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 8. Verträge -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header" id="headingOne">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<button class="btn btn-link" data-toggle="collapse" data-target="#rd_8" aria-expanded="true" aria-controls="rd_8">
|
||||||
|
<h4 style="margin-top: 11px;">8. Gewerbe: Verträge</h4>
|
||||||
|
</button>
|
||||||
|
<span style="float: right;">
|
||||||
|
<span class="square_company_arrow"><h2 class="h2_in_arrow">#8</h2></span>
|
||||||
|
</span>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="rd_8" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
|
||||||
|
<div class="card-body">
|
||||||
|
{% block rd_area_8 %}
|
||||||
|
{% include "recoverdir/rd_areas/rd_area_8.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 9. Sonstiges -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header" id="headingOne">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<button class="btn btn-link" data-toggle="collapse" data-target="#rd_9" aria-expanded="true" aria-controls="rd_9">
|
||||||
|
<h4 style="margin-top: 11px;">9. Sonstiges</h4>
|
||||||
|
</button>
|
||||||
|
<span style="float: right;">
|
||||||
|
<span class="square_company_arrow"><h2 class="h2_in_arrow">#9</h2></span>
|
||||||
|
</span>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="rd_9" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
|
||||||
|
<div class="card-body">
|
||||||
|
{% block rd_area_9 %}
|
||||||
|
{% include "recoverdir/rd_areas/rd_area_9.html" %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -9,10 +9,13 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for plver in persletter.history.all %}
|
{% for ele in history %}
|
||||||
|
{% for plver in ele.history.all %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>Persönlicher Brief</td>
|
<td>
|
||||||
<td><a href="{% url 'recoverdir-plsingle' persletter.pk plver.pk %}">{{plver.history_date|date:"d.m.Y H:i"}}</a></td>
|
{% getClassOfObject plver as plver_typ %}
|
||||||
|
{{plver}} {{plver_typ}}</td>
|
||||||
|
<td>{{plver.history_date|date:"d.m.Y H:i"}}</td>
|
||||||
<td>
|
<td>
|
||||||
{% gethistoryuser plver.history_user_id as history_user %}
|
{% gethistoryuser plver.history_user_id as history_user %}
|
||||||
|
|
||||||
|
|
@ -25,6 +28,7 @@
|
||||||
<td>{% if plver.history_type == "~" %} Geändert {% elif plver.history_type == "+" %} Erstellt {% elif plver.history_type == "-"%} Gelöscht {% endif %}
|
<td>{% if plver.history_type == "~" %} Geändert {% elif plver.history_type == "+" %} Erstellt {% elif plver.history_type == "-"%} Gelöscht {% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
@ -48,7 +52,8 @@
|
||||||
"pageLength": 50,
|
"pageLength": 50,
|
||||||
"buttons" : {
|
"buttons" : {
|
||||||
"className" : "btn-danger"
|
"className" : "btn-danger"
|
||||||
}
|
},
|
||||||
|
"order": [[ 1, "desc" ]]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
from django.contrib.auth import views as auth_views
|
from django.contrib.auth import views as auth_views
|
||||||
from django.contrib.auth.decorators import login_required, permission_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
|
|
||||||
|
from django_encrypted_filefield.constants import FETCH_URL_NAME
|
||||||
|
|
||||||
from .views import *
|
from .views import *
|
||||||
'''
|
'''
|
||||||
Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben!
|
Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben!
|
||||||
|
|
@ -11,7 +14,10 @@ urlpatterns = [
|
||||||
path('addpl/', permission_required('users.recoverdirmanager')(RecoverDirAddPL.as_view(template_name="recoverdir/rd_pers_add.html")), name='recoverdir-addpl'),
|
path('addpl/', permission_required('users.recoverdirmanager')(RecoverDirAddPL.as_view(template_name="recoverdir/rd_pers_add.html")), name='recoverdir-addpl'),
|
||||||
path('updatepl/<int:pk>', permission_required('users.recoverdirmanager')(RecoverDirUpdatePL.as_view(template_name="recoverdir/rd_pers_update.html")), name='recoverdir-updatepl'),
|
path('updatepl/<int:pk>', permission_required('users.recoverdirmanager')(RecoverDirUpdatePL.as_view(template_name="recoverdir/rd_pers_update.html")), name='recoverdir-updatepl'),
|
||||||
path('pl/ver/<int:pk>/<int:rev>', permission_required('users.recoverdirmanager')(PLSingle.as_view(template_name="recoverdir/rd_persletter_single.html")), name='recoverdir-plsingle'),
|
path('pl/ver/<int:pk>/<int:rev>', permission_required('users.recoverdirmanager')(PLSingle.as_view(template_name="recoverdir/rd_persletter_single.html")), name='recoverdir-plsingle'),
|
||||||
|
path('aone/doc/add', permission_required('users.recoverdirmanager')(RDAoneAddDoc.as_view()), name='rd-a1-adddoc'),
|
||||||
|
path('aone/doc/<int:pk>', permission_required('users.recoverdirmanager')(RDAoneViewDoc.as_view()), name='rd-a1-viewdoc'),
|
||||||
|
path('aone/hl/add', permission_required('users.recoverdirmanager')(RDAoneAddHL.as_view()), name='rd-a1-hl'),
|
||||||
|
path('aone/hl/update/<int:pk>', permission_required('users.recoverdirmanager')(RDAoneUpdateHL.as_view()), name='rd-a1-hl-update'),
|
||||||
|
path('aone/fc/add', permission_required('users.recoverdirmanager')(RDAoneAddFC.as_view()), name='rd-a1-addfamily'),
|
||||||
|
path('aone/trust/add', permission_required('users.recoverdirmanager')(RDAoneAddTrust.as_view()), name='rd-a1-addtrust'),
|
||||||
]
|
]
|
||||||
|
|
@ -4,6 +4,14 @@ from django.views.generic import CreateView, ListView, UpdateView, DetailView, D
|
||||||
from .models import *
|
from .models import *
|
||||||
from .forms import *
|
from .forms import *
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
|
from django.contrib.auth.decorators import login_required
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from django.conf import settings
|
||||||
|
from django.http import JsonResponse, HttpResponse, Http404
|
||||||
|
from django_encrypted_filefield.views import FetchView
|
||||||
|
import string, random
|
||||||
|
from itertools import chain
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
class RecoverDirManagement(LoginRequiredMixin, ListView):
|
class RecoverDirManagement(LoginRequiredMixin, ListView):
|
||||||
|
|
@ -19,6 +27,38 @@ class RecoverDirManagement(LoginRequiredMixin, ListView):
|
||||||
persletter = PersLetter.objects.filter(agency=self.request.user.profile.agency)[0]
|
persletter = PersLetter.objects.filter(agency=self.request.user.profile.agency)[0]
|
||||||
context.update({'persletter' : persletter})
|
context.update({'persletter' : persletter})
|
||||||
|
|
||||||
|
# Load Update-Historys
|
||||||
|
persletters = PersLetter.objects.filter(agency=self.request.user.profile.agency)
|
||||||
|
handlungsleitfaden = Handlungsleitfaden.objects.filter(agency=self.request.user.profile.agency)
|
||||||
|
contactfc = RDContact.objects.filter(agency=self.request.user.profile.agency)
|
||||||
|
contactstrust = RDTrustPerson.objects.filter(agency=self.request.user.profile.agency)
|
||||||
|
documents = Documents.objects.filter(agency=self.request.user.profile.agency, area=1)
|
||||||
|
|
||||||
|
finalupdatelist = chain(persletters, handlungsleitfaden, contactfc, contactstrust, documents)
|
||||||
|
context.update({"history" : finalupdatelist})
|
||||||
|
|
||||||
|
print(finalupdatelist)
|
||||||
|
|
||||||
|
# Bereich 1 - Handlungsleitfaden ########## ########## ########## ########## ########## ##########
|
||||||
|
# Handlungsleitfaden
|
||||||
|
hl = Handlungsleitfaden.objects.filter(agency=self.request.user.profile.agency)
|
||||||
|
if(len(hl) == 1):
|
||||||
|
hl = Handlungsleitfaden.objects.filter(agency=self.request.user.profile.agency)[0]
|
||||||
|
else:
|
||||||
|
hl = None
|
||||||
|
context.update({'area_1_hl' : hl})
|
||||||
|
|
||||||
|
# Familien-Freunde
|
||||||
|
context.update({'area_1_fc' : RDContact.objects.filter(agency=self.request.user.profile.agency)})
|
||||||
|
|
||||||
|
# Vertrauensperson
|
||||||
|
context.update({'area_1_trust' : RDTrustPerson.objects.filter(agency=self.request.user.profile.agency)})
|
||||||
|
|
||||||
|
|
||||||
|
# Dokumente
|
||||||
|
context.update({'area_1_doc' : Documents.objects.filter(agency=self.request.user.profile.agency, area=1).order_by('-document_date')})
|
||||||
|
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -63,6 +103,7 @@ class RecoverDirAddPL(CreateView):
|
||||||
# TASK: Hier Aktualisierung hinzufügen!
|
# TASK: Hier Aktualisierung hinzufügen!
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
class RecoverDirUpdatePL(UpdateView):
|
class RecoverDirUpdatePL(UpdateView):
|
||||||
model = PersLetter
|
model = PersLetter
|
||||||
success_url = reverse_lazy('recoverdir')
|
success_url = reverse_lazy('recoverdir')
|
||||||
|
|
@ -79,3 +120,108 @@ class RecoverDirUpdatePL(UpdateView):
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
def randomString(stringLength=40):
|
||||||
|
"""Generate a random string of fixed length """
|
||||||
|
letters = string.ascii_lowercase
|
||||||
|
return ''.join(random.choice(letters) for i in range(stringLength))
|
||||||
|
|
||||||
|
# NOTFALLORDNER ELEMENTE
|
||||||
|
|
||||||
|
# ABNSCHNITT 1
|
||||||
|
class RDAoneAddDoc(CreateView):
|
||||||
|
model = Documents
|
||||||
|
success_url = reverse_lazy('recoverdir')
|
||||||
|
form_class = DocumentForm
|
||||||
|
template_name = "recoverdir/rd_elements_forms/rd_area_1_adddoc.html"
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
form.instance.agency = self.request.user.profile.agency
|
||||||
|
form.instance.area = 1
|
||||||
|
|
||||||
|
# Randomize File-Name keeping extension
|
||||||
|
file = self.request.FILES['document']
|
||||||
|
file_ext_arr = file.name.split(".")
|
||||||
|
file_ext = file_ext_arr[len(file_ext_arr)-1]
|
||||||
|
file.name = randomString() + "." + file_ext
|
||||||
|
form.instance.document = file
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context.update({'active_link' : 'recoverdir'})
|
||||||
|
return context
|
||||||
|
|
||||||
|
# Einzeldokumentenanzeige
|
||||||
|
class RDAoneViewDoc(DetailView):
|
||||||
|
model = Documents
|
||||||
|
success_url = reverse_lazy('recoverdir')
|
||||||
|
template_name = 'recoverdir/rd_doc_single.html'
|
||||||
|
context_object_name = 'document'
|
||||||
|
|
||||||
|
# Handlungsleitfaden
|
||||||
|
# ABNSCHNITT 1
|
||||||
|
class RDAoneAddHL(CreateView):
|
||||||
|
model = Handlungsleitfaden
|
||||||
|
success_url = reverse_lazy('recoverdir')
|
||||||
|
form_class = HLForm
|
||||||
|
template_name = "recoverdir/rd_elements_forms/rd_area_1_addhl.html"
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
form.instance.agency = self.request.user.profile.agency
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context.update({'active_link' : 'recoverdir'})
|
||||||
|
return context
|
||||||
|
|
||||||
|
class RDAoneUpdateHL(UpdateView):
|
||||||
|
model = Handlungsleitfaden
|
||||||
|
success_url = reverse_lazy('recoverdir')
|
||||||
|
form_class = HLForm
|
||||||
|
template_name = "recoverdir/rd_elements_forms/rd_area_1_addhl.html"
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context.update({'active_link' : 'recoverdir'})
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class RDAoneAddFC(CreateView):
|
||||||
|
model = RDContact
|
||||||
|
success_url = reverse_lazy('recoverdir')
|
||||||
|
form_class = RDContactF
|
||||||
|
template_name = "recoverdir/rd_elements_forms/rd_area_1_addfc.html"
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
form.instance.agency = self.request.user.profile.agency
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context.update({'active_link' : 'recoverdir'})
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class RDAoneAddTrust(CreateView):
|
||||||
|
model = RDTrustPerson
|
||||||
|
success_url = reverse_lazy('recoverdir')
|
||||||
|
form_class = RDTrustPersonF
|
||||||
|
template_name = "recoverdir/rd_elements_forms/rd_area_1_addtrust.html"
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
form.instance.agency = self.request.user.profile.agency
|
||||||
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super().get_context_data(**kwargs)
|
||||||
|
context.update({'active_link' : 'recoverdir'})
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,3 +29,5 @@ channels-redis==3.0.1
|
||||||
filetype==1.0.7
|
filetype==1.0.7
|
||||||
python-dateutil==2.8.1
|
python-dateutil==2.8.1
|
||||||
django-simple-history==2.11.0
|
django-simple-history==2.11.0
|
||||||
|
django-encrypted-filefield==0.2.2
|
||||||
|
more-itertools==8.5.0
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -742,6 +742,10 @@ def gethistoryuser(userid):
|
||||||
last_user = None
|
last_user = None
|
||||||
return last_user
|
return last_user
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def getClassOfObject(value):
|
||||||
|
return value.__class__.__name__
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -239,7 +239,7 @@ Gleitzeitkonto:
|
||||||
}
|
}
|
||||||
start = data["wd_starttime_complete"];
|
start = data["wd_starttime_complete"];
|
||||||
realTimeClock();
|
realTimeClock();
|
||||||
location.href = location.href;
|
//location.href = location.href;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ from cloud.models import DataFile
|
||||||
from organizer.models import AGContacts
|
from organizer.models import AGContacts
|
||||||
from timemanagement.models import Workday, Breaks, AbsenceReason, FreeDays, Absence
|
from timemanagement.models import Workday, Breaks, AbsenceReason, FreeDays, Absence
|
||||||
from chat.models import ChatRoom
|
from chat.models import ChatRoom
|
||||||
from recoverdir.models import PersLetter
|
from recoverdir.models import PersLetter, Documents, Handlungsleitfaden, RDContact
|
||||||
from simple_history.admin import SimpleHistoryAdmin
|
from simple_history.admin import SimpleHistoryAdmin
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -37,4 +37,6 @@ admin.site.register(ChatRoom)
|
||||||
admin.site.register(UserNotifications)
|
admin.site.register(UserNotifications)
|
||||||
admin.site.register(AgencyBills)
|
admin.site.register(AgencyBills)
|
||||||
admin.site.register(PersLetter, SimpleHistoryAdmin)
|
admin.site.register(PersLetter, SimpleHistoryAdmin)
|
||||||
|
admin.site.register(Documents, SimpleHistoryAdmin)
|
||||||
|
admin.site.register(Handlungsleitfaden)
|
||||||
|
admin.site.register(RDContact)
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">Titel</th>
|
<th scope="col">Titel</th>
|
||||||
<th scope="col">Bearbeitet von</th>
|
<th scope="col">Bearbeitet von</th>
|
||||||
<th scope="col">Zuletzt bearbeitet am</th>
|
<th scope="col">Bearbeitet am</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{% for standard in standards_of_agency %}
|
{% for standard in standards_of_agency %}
|
||||||
|
|
|
||||||
|
|
@ -156,8 +156,7 @@ SUPPORT_DEP = (
|
||||||
('12', 'Technischer Support'),
|
('12', 'Technischer Support'),
|
||||||
('13', 'Abrechnung'),
|
('13', 'Abrechnung'),
|
||||||
('14', 'Lob, Kritik und Anregung'),
|
('14', 'Lob, Kritik und Anregung'),
|
||||||
|
)
|
||||||
)
|
|
||||||
|
|
||||||
class SupportForm(forms.Form):
|
class SupportForm(forms.Form):
|
||||||
def __init__(self, user, *args, **kwargs):
|
def __init__(self, user, *args, **kwargs):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue