Settings Agenturfunktionen vollständig implementiert, Bugs gefixed

This commit is contained in:
holger.trampe 2020-02-06 21:50:16 +01:00
parent 06a1428ce9
commit 04cc3802f5
13 changed files with 67 additions and 57 deletions

View File

@ -121,7 +121,7 @@ CKEDITOR_CONFIGS = {
} }
# Database # Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases # https://docs.djangoproject.com/en/2.2/ref/settings/#databases
'''
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.mysql', 'ENGINE': 'django.db.backends.mysql',
@ -131,6 +131,16 @@ DATABASES = {
'PORT' : 3306 'PORT' : 3306
} }
} }
'''
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME' : 'digitaleagentur',
'USER' : 'root',
'PASSWORD' : '',
'PORT' : 3306
}
}
# Password validation # Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators # https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators

View File

@ -23,6 +23,8 @@ def picturepath_user(instance, filename):
# file will be uploaded to MEDIA_ROOT/agency_<id>/<subdirs>/<filename> # file will be uploaded to MEDIA_ROOT/agency_<id>/<subdirs>/<filename>
return 'agency_{0}/agencystats/profilepics/{1}'.format(instance.pk, filename) return 'agency_{0}/agencystats/profilepics/{1}'.format(instance.pk, filename)
''' '''
Class Agency Class Agency
@ -47,8 +49,8 @@ class Agency(models.Model):
return f'{self.name}' return f'{self.name}'
# Hier wird definiert, welche Parameter in der URL übertragen werden inkl. Bezeichner # Hier wird definiert, welche Parameter in der URL übertragen werden inkl. Bezeichner
def get_absolute_url(self): #def get_absolute_url(self):
return reverse('agency-update', kwargs={'pk':self.pk}) # return reverse('agency-update', kwargs={'pk':self.pk})
@property @property
def get_photo_url(self): def get_photo_url(self):
@ -57,6 +59,17 @@ class Agency(models.Model):
else: else:
return "/media/agencymain/default.jpg" return "/media/agencymain/default.jpg"
'''
Class AgencyJob
'''
class AgencyJob(models.Model):
name = models.CharField(default="", max_length=80)
agency = models.ForeignKey(Agency, on_delete=models.PROTECT)
def __str__(self):
return f'{self.name}'
''' '''
Class Profile Class Profile
@ -76,25 +89,15 @@ Klasse für die Zusatzinfos eines Nutzers.
- Aufgaben - Aufgaben
''' '''
class Profile(models.Model): class Profile(models.Model):
# AGENCY TASKS
agency_task = [
("", ""),
("lead", "Agenturleitung"),
("external", "Außendienst"),
("indoor", "Innendienst"),
("trainee", "Azubi"),
]
# Wenn der User gelöscht wird, wird auch das Profil gelöscht # Wenn der User gelöscht wird, wird auch das Profil gelöscht
user = models.OneToOneField(User, on_delete=models.CASCADE) user = models.OneToOneField(User, on_delete=models.CASCADE)
parent = models.ForeignKey(User, on_delete=models.PROTECT, blank=True, null=True, related_name='parent_user') parent = models.ForeignKey(User, on_delete=models.PROTECT, blank=True, null=True, related_name='parent_user')
phoneland = models.CharField(max_length=60, blank=True) phoneland = models.CharField(max_length=60, blank=True)
phonemobile = models.CharField(max_length=60, blank=True) phonemobile = models.CharField(max_length=60, blank=True)
func = models.CharField(choices=agency_task, default="", max_length=50) # Wenn die Funktion gelöscht wird, wird die FUNC auf NULL gesetzt
func = models.ForeignKey(AgencyJob, blank=True, null=True, on_delete=models.SET_NULL)
# Wenn dieses Profil gelöscht wird, wird NICHT die Agency geslöscht # Wenn dieses Profil gelöscht wird, wird NICHT die Agency geslöscht
agency = models.ForeignKey(Agency, on_delete=models.PROTECT) agency = models.ForeignKey(Agency, on_delete=models.PROTECT)
image = models.ImageField(default='userprofilepics/default.jpg', upload_to=picturepath_user, blank=True) image = models.ImageField(default='userprofilepics/default.jpg', upload_to=picturepath_user, blank=True)

View File

@ -52,7 +52,9 @@ html h1 {
} }
body{ body{
background-color: #f8f9fc; background-color: #f8f9fc;
padding-top: 70px;
} }
.modal-open {overflow-y: auto}
.preview { .preview {
overflow: hidden; overflow: hidden;
@ -65,10 +67,6 @@ body{
margin-bottom: 20px; margin-bottom: 20px;
} }
body {
padding-top: 70px;
}
.default_content_style { .default_content_style {
margin-left: 212px !important; margin-left: 212px !important;
} }

View File

@ -1,31 +0,0 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-12">
<h3>Agentur <b>{{ request.user.profile.agency.name }}</b></h3>
<hr>
<div class="col-md-6">
<h6><b>Inhaber</b></h6>
<p>
{{ request.user.profile.agency.inhaber }}
</p>
<h6><b>Adresse</b></h6>
<p>
{{ request.user.profile.agency.street }}
</p>
<p>
{{ request.user.profile.agency.plz }} {{ request.user.profile.agency.city }}
</p>
<h6><b>Kontaktdaten</b></h6>
<p>
{{ request.user.profile.agency.agency_email }}
</p>
<p>
{{ request.user.profile.agency.phone }}
</p>
<h6><b>Agenturbild</b></h6>
<p>
<img class="img-profile" width="75%" src="{{ request.user.profile.agency.get_photo_url }}">
</p>
</div>
</div>
{% endblock content %}

View File

@ -56,7 +56,7 @@
<!-- Sidebar - Brand --> <!-- Sidebar - Brand -->
<a class="sidebar-brand d-flex align-items-center justify-content-center" href="{% url 'users-dashboard' %}"> <a class="sidebar-brand d-flex align-items-center justify-content-center" href="{% url 'users-dashboard' %}">
<i class="fas fa-laptop"></i> <i class="fas fa-laptop"></i>
<div class="sidebar-brand-text mx-3">Digitale Agentur</div> <div class="sidebar-brand-text mx-2" style="">Digitale Agentur</div>
</a> </a>
<!-- Divider --> <!-- Divider -->
@ -102,18 +102,18 @@
<span>Organigramm</span> <span>Organigramm</span>
</a> </a>
</li> </li>
<!--
{% if active_link == 'agencyinfo' %} {% if active_link == 'agencyinfo' %}
<li class="nav-item active"> <li class="nav-item active">
{% else%} {% else%}
<li class="nav-item"> <li class="nav-item">
{%endif%} {%endif%}
<a class="nav-link " href="{% url 'agencyinfo' %}" aria-expanded="true"> <a class="nav-link " href="#" aria-expanded="true">
<i class="fas fa-fw fa-info"></i> <i class="fas fa-fw fa-info"></i>
<span>Agentur</span> <span>Agentur</span>
</a> </a>
</li> </li>
-->
{% if active_link == 'quicklinks' %} {% if active_link == 'quicklinks' %}
<li class="nav-item active"> <li class="nav-item active">
{% else%} {% else%}

View File

@ -23,8 +23,8 @@ urlpatterns = [
#path('usersman/<int:pk>/', permission_required('users.users_usermanagement')(ProfileUpdateView.as_view()), name='users-update'), #path('usersman/<int:pk>/', permission_required('users.users_usermanagement')(ProfileUpdateView.as_view()), name='users-update'),
path('usersman/<int:pk>/perms', permission_required('users.users_usermanagement')(UsersPermUpdateView.as_view()), name='users-perm-update'), path('usersman/<int:pk>/perms', permission_required('users.users_usermanagement')(UsersPermUpdateView.as_view()), name='users-perm-update'),
path('usersman/<int:pk>/delete', permission_required('users.users_usermanagement')(ProfileDeleteView.as_view()), name='users-delete'), path('usersman/<int:pk>/delete', permission_required('users.users_usermanagement')(ProfileDeleteView.as_view()), name='users-delete'),
path('agencyinfo/', views.agency, name='agencyinfo'), #path('agencyinfo/', views.agency, name='agencyinfo'),
path('agencyinfo/<int:pk>/', permission_required('users.agency_change')(AgencyUpdateView.as_view()), name='agency-manage'), #path('agencyinfo/<int:pk>/', permission_required('users.agency_change')(AgencyUpdateView.as_view()), name='agency-manage'),
path('usersman/<int:pk>/prio', views.UsersPrio, name='users-prio'), path('usersman/<int:pk>/prio', views.UsersPrio, name='users-prio'),
#path('prioupdate/', views.UsersPrioUpdate, name="users-prioupdate"), #path('prioupdate/', views.UsersPrioUpdate, name="users-prioupdate"),
path('areataskupdate/<int:pk>/', views.UsersAreaTaskUpdate, name="users-areataskupdate"), path('areataskupdate/<int:pk>/', views.UsersAreaTaskUpdate, name="users-areataskupdate"),

View File

@ -80,7 +80,7 @@ class AgencyUpdateForm(forms.ModelForm):
"phone" : "Telefon", "phone" : "Telefon",
"agencypic" : "Agenturbild" "agencypic" : "Agenturbild"
} }
fields = ['name','inhaber','street', 'plz', 'city', 'agency_email', 'phone', 'agencypic', 'x', 'y', 'width', 'height', 'rotation'] fields = ['name','inhaber','agency_email', 'phone', 'street', 'plz', 'city', 'agencypic', 'x', 'y', 'width', 'height', 'rotation']
def save(self): def save(self):
photo = super(AgencyUpdateForm, self).save() photo = super(AgencyUpdateForm, self).save()

View File

@ -25,6 +25,28 @@ from django.template.loader import render_to_string
from django.contrib.auth.forms import PasswordResetForm from django.contrib.auth.forms import PasswordResetForm
from django.template.loader import render_to_string from django.template.loader import render_to_string
from io import StringIO from io import StringIO
from users.models import AgencyJob
@login_required
def toUpdate(request):
# NO AGENVYJOBS
# CREATE DEFAULT
'''
Agenturleiter
Außendienst
Innendienst
Auszubildender
'''
agencyjobsobject = AgencyJob.objects.filter(agency__pk=request.user.profile.agency.pk)
if(len(agencyjobsobject) == 0):
defaultAgencyJobs = ['Agenturleiter', 'Außendienst', 'Innendienst', 'Auszubildender']
for ele in defaultAgencyJobs:
tempAgencyJob = AgencyJob(name=ele, agency=request.user.profile.agency)
tempAgencyJob.save()
''' '''
DASHBOARD-View DASHBOARD-View
@ -61,9 +83,17 @@ class AgencyCreateView(CreateView):
) )
return super().form_valid(form) return super().form_valid(form)
@login_required @login_required
def dashboard(request): def dashboard(request):
# UPDATE FUNCTIONS BY NEW MODEL-CHANGES FOR COPIEN SOME DATA
toUpdate(request)
context = { context = {
'active_link' : 'dashboard' 'active_link' : 'dashboard'
} }