News Bugs behoben, Struktur angefangen, Bereiche bis auf löschen fertig inkl. Dragndrop-Order, CKEditor gelöscht
This commit is contained in:
parent
8ce5f16163
commit
750b36dd2c
Binary file not shown.
Binary file not shown.
|
|
@ -1,22 +0,0 @@
|
||||||
{% extends "users/base.html" %}
|
|
||||||
{% load crispy_forms_tags %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="content-section">
|
|
||||||
<div class="media">
|
|
||||||
<div class="media-body">
|
|
||||||
<h2 class="account-heading">Bereich {{ object.name }} löschen?</h2>
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- Für das Speichern der Bilder enctype -->
|
|
||||||
<form method="POST">
|
|
||||||
{% csrf_token %}
|
|
||||||
<p>Alle unter diesem Bereich erstellten Aufgaben und Standards werden gelöscht!</p>
|
|
||||||
<div class="form-group">
|
|
||||||
<button type="submit" class="btn btn-danger">Bereich löschen</button>
|
|
||||||
<a href="{% url 'areas-management' %}" class="btn btn-success">Abbrechen</a>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
{% endblock content %}
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
{% extends "users/base.html" %}
|
|
||||||
{% load crispy_forms_tags %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="content-section col-6">
|
|
||||||
<h3>Neuen Bereich anlegen</h3>
|
|
||||||
<hr>
|
|
||||||
<form method="POST">
|
|
||||||
{% csrf_token %}
|
|
||||||
{{ form|crispy }}
|
|
||||||
<div class="form-group mb-2 mb-3">
|
|
||||||
<span>Farbe</span><input type="color" id="color-picker" name="areacolor " />
|
|
||||||
</div>
|
|
||||||
<p>Nachdem Erstellen eines Bereichs können Mitarbeiter zugewiesen werden.</p>
|
|
||||||
<hr>
|
|
||||||
<button type="submit" class="btn btn-success" href="{% url 'areas-addarea' %} ">Bereich anlegen</button>
|
|
||||||
<a class="btn" href="{% url 'areas-management' %} ">Abbrechen</a>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@simonwep/pickr/dist/themes/classic.min.css"/> <!-- 'classic' theme -->
|
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/@simonwep/pickr/dist/pickr.es5.min.js"></script>
|
|
||||||
<script type="text/javascript">
|
|
||||||
|
|
||||||
$(document).ready(function(){
|
|
||||||
$("#div_id_color").hide();
|
|
||||||
})
|
|
||||||
|
|
||||||
const pickr1 = new Pickr({
|
|
||||||
el: '#color-picker',
|
|
||||||
default: "#000000",
|
|
||||||
components: {
|
|
||||||
preview: false,
|
|
||||||
hue: true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
pickr1.on('changestop', function(){
|
|
||||||
var col = pickr1.getColor().toHEXA().toString();
|
|
||||||
pickr1.setColor(col);
|
|
||||||
$("#id_color").val(col);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock content %}
|
|
||||||
|
|
@ -1,101 +0,0 @@
|
||||||
{% extends "users/base.html" %}
|
|
||||||
{% block content %}
|
|
||||||
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
|
|
||||||
<div class="content-section col-12">
|
|
||||||
<h3>Bereichsverwaltung</h3>
|
|
||||||
<hr>
|
|
||||||
<p>
|
|
||||||
Bereiche unterteilen die Agentur in verschiedene Verantwortungsbereiche.
|
|
||||||
</p>
|
|
||||||
<div class="row">
|
|
||||||
<div class="content-section col-4">
|
|
||||||
<a class="btn btn-primary" href="{% url 'areas-addarea' %} ">Bereich anlegen</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mt-3">
|
|
||||||
<div class="form-group mb-2">
|
|
||||||
<input class="form-control" id="tableSearch" size="50" type="text" placeholder="Suche in Tabelle...">
|
|
||||||
</div>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover" id="areas_maintable">
|
|
||||||
<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"> </th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="tableresults">
|
|
||||||
{% for item in areas_of_agency %}
|
|
||||||
<tr id="{{ item.pk }}">
|
|
||||||
<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>
|
|
||||||
</a>
|
|
||||||
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink">
|
|
||||||
<div class="dropdown-header">Bereichsinfo</div>
|
|
||||||
<a class="dropdown-item" href="{% url 'areas-manage' item.pk %}">Bearbeiten</a>
|
|
||||||
<div class="dropdown-divider"></div>
|
|
||||||
<a class="dropdown-item text-danger" href="{% url 'areas-delete' item.pk %}" >Löschen</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
|
||||||
<script>
|
|
||||||
$(document).ready(function(){
|
|
||||||
/*$('#areas_maintable').DataTable();*/
|
|
||||||
$("#tableSearch").on("keyup", function() {
|
|
||||||
var value = $(this).val().toLowerCase();
|
|
||||||
$("#tableresults tr").filter(function() {
|
|
||||||
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Update the sort-list by drag'n'drop
|
|
||||||
*/
|
|
||||||
$( "tbody" ).sortable({
|
|
||||||
update: function( event, ui ) {
|
|
||||||
datatoserver = [];
|
|
||||||
var rows = $( "tbody" ).sortable( "widget" )[0]['rows'];
|
|
||||||
for(i = 0; i < rows.length; i++){
|
|
||||||
datatoserver.push({"id" : rows[i]['id'], "neworder" : i});
|
|
||||||
}
|
|
||||||
|
|
||||||
$.ajax(
|
|
||||||
{
|
|
||||||
type: "GET",
|
|
||||||
url: "/areas/updateorder",
|
|
||||||
data:{
|
|
||||||
action: "newareaorder",
|
|
||||||
finalod : JSON.stringify(datatoserver)
|
|
||||||
},
|
|
||||||
success: function( data )
|
|
||||||
{
|
|
||||||
console.log(data);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
||||||
{% endblock content %}
|
|
||||||
|
|
@ -1,172 +0,0 @@
|
||||||
{% extends "users/base.html" %}
|
|
||||||
{% load static %}
|
|
||||||
{% load crispy_forms_tags %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="content-section col-6" onmouseup="javascript:checkValue()">
|
|
||||||
<h3>Bereich aktualisieren</h3>
|
|
||||||
<hr>
|
|
||||||
<form method="POST">
|
|
||||||
{% csrf_token %}
|
|
||||||
{{ form|crispy }}
|
|
||||||
<div class="form-group mb-2 mb-3">
|
|
||||||
<span>Farbe</span><input type="color" id="color-picker" name="areacolor " />
|
|
||||||
</div>
|
|
||||||
<h6>Mitarbeiter hinzufügen</h6>
|
|
||||||
<div class="input-group mb-3">
|
|
||||||
<input class="form-control" list="usersfree" name="searchusers" id="searchusers" type="text" onkeyup="javascript:checkValue()" onchange="javascript:checkValue()" >
|
|
||||||
<div class="input-group-append">
|
|
||||||
<button type="button" id="addusertoareabtn" onclick="javascript:addUserToArea()" class="btn btn-success" disabled>Mitarbeiter hinzufügen</button>
|
|
||||||
<button type="button" onclick="javascript:clearSearchfield()" class="btn btn-secondary" ><i class="fas fa-times"></i></button>
|
|
||||||
</div>
|
|
||||||
<datalist id="usersfree">
|
|
||||||
{% for us in possible_users %}
|
|
||||||
<option id="{{us.pk}}" value="{{us.first_name}} {{us.last_name}}"></option>
|
|
||||||
{% endfor %}
|
|
||||||
</datalist>
|
|
||||||
</datalist>
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
<h6>Zugewiesene Mitarbeiter</h6>
|
|
||||||
<div id="added_users_button">
|
|
||||||
{% if added_users|length > 0 %}
|
|
||||||
<p id="no_user_in_area" style="display: none">Noch kein Mitarbeiter zugewiesen.</p>
|
|
||||||
{% for us in added_users %}
|
|
||||||
<span id="span_btn_{{us.pk}}" class="badge badge-pill badge-primary mr-2 mt-2"><a class="btn btn-primary" onclick="javascript:removeUserFromArea('{{ us.pk }}')">{{ us.first_name }} {{ us.last_name }} <i class="fas fa-times"></i></a >
|
|
||||||
</span>
|
|
||||||
{% endfor %}
|
|
||||||
{% else %}
|
|
||||||
<p id="no_user_in_area">Diesem Bereich ist noch kein Mitarbeiter zugewiesen.</p>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
<button type="submit" class="btn btn-success">Bereich aktualisieren</button>
|
|
||||||
<a class="btn" href="{% url 'areas-management' %} ">Abbrechen</a>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@simonwep/pickr/dist/themes/classic.min.css"/> <!-- 'classic' theme -->
|
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/@simonwep/pickr/dist/pickr.es5.min.js"></script>
|
|
||||||
<script type="text/javascript">
|
|
||||||
|
|
||||||
$(document).ready(function(){
|
|
||||||
$("#div_id_color").hide();
|
|
||||||
})
|
|
||||||
|
|
||||||
const pickr1 = new Pickr({
|
|
||||||
el: '#color-picker',
|
|
||||||
default: "{{object.color}}",
|
|
||||||
components: {
|
|
||||||
preview: false,
|
|
||||||
hue: true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
pickr1.on('changestop', function(){
|
|
||||||
var col = pickr1.getColor().toHEXA().toString();
|
|
||||||
pickr1.setColor(col);
|
|
||||||
$("#id_color").val(col);
|
|
||||||
});
|
|
||||||
|
|
||||||
var ua = window.navigator.userAgent;
|
|
||||||
var isIE = /MSIE|Trident/.test(ua);
|
|
||||||
if ( isIE ) {
|
|
||||||
//IE specific code goes here
|
|
||||||
setInterval(function()
|
|
||||||
{
|
|
||||||
checkValue();
|
|
||||||
},250);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var tempid = null;
|
|
||||||
var tempcounter = 0;
|
|
||||||
function addUserToArea(){
|
|
||||||
$.ajax(
|
|
||||||
{
|
|
||||||
type: "GET",
|
|
||||||
url: "/areas/areaajax",
|
|
||||||
data:{
|
|
||||||
userid: tempid,
|
|
||||||
action : 'adduser',
|
|
||||||
objectid : {{objectid}}
|
|
||||||
},
|
|
||||||
success: function( data )
|
|
||||||
{
|
|
||||||
clearSearchfield();
|
|
||||||
//Add User-Button
|
|
||||||
$("#added_users_button").append('<span id="span_btn_'+data['userid']+'" class="badge badge-pill badge-primary mr-2 mt-2"><a class="btn btn-primary" onclick="javascript:removeUserFromArea('+data['userid']+')">'+data['username_clean']+' <i class="fas fa-times"></i></a ></span>');
|
|
||||||
|
|
||||||
$("#usersfree").empty();
|
|
||||||
for (var i in data['remaining_users']) {
|
|
||||||
id = data['remaining_users'][i]['id'];
|
|
||||||
name = data['remaining_users'][i]['first_name'] + " " + data['remaining_users'][i]['last_name'];
|
|
||||||
$("#usersfree").append('<option id="'+id+'" value="'+name+'"></option>');
|
|
||||||
}
|
|
||||||
if(data['remaining_users_counter'] == 0){
|
|
||||||
$("#no_user_in_area").show();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$("#no_user_in_area").hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//Remove individual User from area, appened to the datalist!
|
|
||||||
function removeUserFromArea(user_id){
|
|
||||||
$.ajax(
|
|
||||||
{
|
|
||||||
type: "GET",
|
|
||||||
url: "/areas/areaajax",
|
|
||||||
data:{
|
|
||||||
userid: user_id,
|
|
||||||
action : 'remuser',
|
|
||||||
objectid : {{objectid}}
|
|
||||||
},
|
|
||||||
success: function( data )
|
|
||||||
{
|
|
||||||
//Remove User-Button
|
|
||||||
$("#span_btn_"+data['userid']).remove();
|
|
||||||
//Rebuilding the Datalist
|
|
||||||
$("#usersfree").empty();
|
|
||||||
for (var i in data['remaining_users']) {
|
|
||||||
id = data['remaining_users'][i]['id'];
|
|
||||||
name = data['remaining_users'][i]['first_name'] + " " + data['remaining_users'][i]['last_name'];
|
|
||||||
$("#usersfree").append('<option id="'+id+'" value="'+name+'"></option>');
|
|
||||||
}
|
|
||||||
if(data['remaining_users_counter'] == 0){
|
|
||||||
$("#no_user_in_area").show();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$("#no_user_in_area").hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//Clearing searchfield and set AddUser to false
|
|
||||||
function clearSearchfield(){
|
|
||||||
$("#searchusers").val("");
|
|
||||||
$("#addusertoareabtn").prop('disabled', true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//Check for valid input on inputfield
|
|
||||||
function checkValue(){
|
|
||||||
var g = $('#searchusers').val();
|
|
||||||
var id = $('#usersfree').find('option[value="' + g + '"]').attr('id');
|
|
||||||
if(id != undefined && id.length > 0){
|
|
||||||
tempid = id;
|
|
||||||
$("#addusertoareabtn").prop('disabled', false);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
tempid = null;
|
|
||||||
$("#addusertoareabtn").prop("disabled", true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
{% endblock content %}
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
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 .views import AreasManagement, AreasAddArea, AreaDeleteView, AreaUpdateView
|
|
||||||
from . import views
|
from . import views
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
@ -12,10 +12,6 @@ Permissions definiert in models.py bei USERS und dann hier vor die View geschrie
|
||||||
'''
|
'''
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', permission_required('users.areas_management')(AreasManagement.as_view(template_name="areas/areas_management.html")), name='areas-management'),
|
|
||||||
path('addarea/', permission_required('users.areas_management')(AreasAddArea.as_view(template_name="areas/areas_add.html")), name='areas-addarea'),
|
|
||||||
path('areas/<int:pk>/delete', permission_required('users.areas_management')(AreaDeleteView.as_view()), name='areas-delete'),
|
|
||||||
path('area/<int:pk>/', permission_required('users.areas_management')(AreaUpdateView.as_view()), name='areas-manage'),
|
|
||||||
path('areaajax/', views.area_addareas_ajax, name="area-ajaxview"),
|
path('areaajax/', views.area_addareas_ajax, name="area-ajaxview"),
|
||||||
path('updateorder/', views.area_neworder, name="area-ajaxorder")
|
path('updateorder/', views.area_neworder, name="area-ajaxorder")
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -9,98 +9,6 @@ from django.http import HttpResponse, JsonResponse
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
class AreasManagement(LoginRequiredMixin, ListView):
|
|
||||||
model = Areas
|
|
||||||
# Adding active_link
|
|
||||||
# Loading only user same agency
|
|
||||||
# Change context and return for template-data
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
# # Get all Users of the Same Agency as logged user
|
|
||||||
areas_of_agency = Areas.objects.filter(agency__pk=self.request.user.profile.agency.pk).order_by('areaorder')
|
|
||||||
|
|
||||||
context.update({'active_link' : 'areasmanagement', 'areas_of_agency':areas_of_agency})
|
|
||||||
return context
|
|
||||||
|
|
||||||
class AreasAddArea(LoginRequiredMixin, CreateView):
|
|
||||||
model = Areas
|
|
||||||
success_url = '/areas'
|
|
||||||
#fields = ['name', 'color', 'desc', 'usersfield']
|
|
||||||
form_class = AreaAddAreaForm
|
|
||||||
|
|
||||||
#def get(self,request,*args, **kwargs):
|
|
||||||
# # User ist der hier Aufgerufene, bzw. das Profil!
|
|
||||||
# return render (request, self.template_name, {'form':self.form_class(self.request.user), 'active_link': 'areasmanagement'})
|
|
||||||
|
|
||||||
|
|
||||||
# Adding active_link
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super().get_context_data(**kwargs)
|
|
||||||
context.update({'active_link' : 'areasmanagement'})
|
|
||||||
return context
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
# Send message to the site
|
|
||||||
messages.success(self.request, f'Bereich angelegt!')
|
|
||||||
# SAVE OBJECTS TO SIGNALE!
|
|
||||||
form.instance.agency = self.request.user.profile.agency
|
|
||||||
form.instance.created_area_by = self.request.user
|
|
||||||
return super().form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
class AreaDeleteView(LoginRequiredMixin, DeleteView):
|
|
||||||
model = Areas
|
|
||||||
success_url = '/areas'
|
|
||||||
template_name = 'areas/area_confirm_delete.html'
|
|
||||||
|
|
||||||
def delete(self, request, *args, **kwargs):
|
|
||||||
area = Areas.objects.get(pk=kwargs['pk'])
|
|
||||||
response = super(AreaDeleteView, self).delete(request, *args, **kwargs)
|
|
||||||
name = area.name
|
|
||||||
messages.success(request, f'Bereich ' +name+ ' wurde gelöscht!')
|
|
||||||
return response
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super(AreaDeleteView, self).get_context_data(**kwargs)
|
|
||||||
context['active_link'] = 'areasmanagement'
|
|
||||||
return context
|
|
||||||
|
|
||||||
# Hier andere Nutzer ändern, wenn man Usersmanagement darf!
|
|
||||||
class AreaUpdateView(LoginRequiredMixin, UpdateView):
|
|
||||||
model = Areas
|
|
||||||
template_name = 'areas/areas_update.html'
|
|
||||||
success_url = '/areas'
|
|
||||||
form_class = AreaAddAreaForm
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
|
||||||
# Send message to the site
|
|
||||||
messages.success(self.request, f'Bereich aktualisiert!')
|
|
||||||
print(form)
|
|
||||||
return super().form_valid(form)
|
|
||||||
|
|
||||||
# Form wird geladen; Checkboxen werden vorbereitet und hier rausgerendert.
|
|
||||||
#def get(self,request,*args, **kwargs):
|
|
||||||
# # User ist der hier Aufgerufene, bzw. das Profil!
|
|
||||||
# loggeduser = request.user
|
|
||||||
#
|
|
||||||
# return render (request, self.template_name, {'form':self.form_class(loggeduser), 'active_link': 'usersmanagement'})
|
|
||||||
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super(AreaUpdateView, self).get_context_data(**kwargs)
|
|
||||||
area = Areas.objects.get(pk=context['object'].pk)
|
|
||||||
# User still in Area
|
|
||||||
context['added_users'] = area.usersfield.all()
|
|
||||||
# Get all Users from same Agency which are NOT in context_added_users
|
|
||||||
possible_users = User.objects.filter(profile__agency__pk=self.request.user.profile.agency.pk).exclude(pk__in=context['added_users'])
|
|
||||||
context['possible_users'] = possible_users
|
|
||||||
# Active-Link for Base-Design
|
|
||||||
context['active_link'] = 'areasmanagement'
|
|
||||||
# Area ID
|
|
||||||
context['objectid'] = context['object'].pk
|
|
||||||
return context
|
|
||||||
|
|
||||||
|
|
||||||
def area_addareas_ajax(request):
|
def area_addareas_ajax(request):
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -27,7 +27,7 @@ SECRET_KEY = '_qv2t2lmsctjxpbb4rrp=op%_20_hxzonv^mvty1o85c)l$s^q'
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = True
|
DEBUG = True
|
||||||
|
|
||||||
ALLOWED_HOSTS = ['digitale-agentur.com', 'www.digitale-agentur.com', 'localhost', "0.0.0.0"]
|
ALLOWED_HOSTS = ['digitale-agentur.com', 'www.digitale-agentur.com', 'localhost']
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -45,9 +45,7 @@ INSTALLED_APPS = [
|
||||||
'news.apps.NewsConfig',
|
'news.apps.NewsConfig',
|
||||||
'crispy_forms',
|
'crispy_forms',
|
||||||
'colorful',
|
'colorful',
|
||||||
'ckeditor',
|
|
||||||
'django_summernote',
|
'django_summernote',
|
||||||
'ckeditor_uploader',
|
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'mathfilters',
|
'mathfilters',
|
||||||
'django.contrib.humanize',
|
'django.contrib.humanize',
|
||||||
|
|
@ -89,43 +87,6 @@ TEMPLATES = [
|
||||||
|
|
||||||
WSGI_APPLICATION = 'digitaleagentur.wsgi.application'
|
WSGI_APPLICATION = 'digitaleagentur.wsgi.application'
|
||||||
|
|
||||||
ASGI_APPLICATION = 'digitaleagentur.routing.application'
|
|
||||||
|
|
||||||
# CKEDITOR
|
|
||||||
CKEDITOR_JQUERY_URL = '//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'
|
|
||||||
|
|
||||||
CKEDITOR_UPLOAD_PATH = "uploadsCK/" # <-- this folder you uploaded image saved in s3 under media folder
|
|
||||||
CKEDITOR_RESTRICT_BY_USER = False
|
|
||||||
CKEDITOR_REQUIRE_STAFF=False
|
|
||||||
AWS_QUERYSTRING_AUTH = True
|
|
||||||
CKEDITOR_IMAGE_BACKEND = "pillow"
|
|
||||||
#CKEDITOR_PLUGINS.addExternal('youtube', "../ckeditorplugins/youtube/youtube/plugin.js");
|
|
||||||
|
|
||||||
CKEDITOR_CONFIGS = {
|
|
||||||
'default': {
|
|
||||||
'skin': 'moono-lisa',
|
|
||||||
'toolbar_Basic': [
|
|
||||||
['Source', '-', 'Bold', 'Italic']
|
|
||||||
],
|
|
||||||
'toolbar_YourCustomToolbarConfig': [
|
|
||||||
{'name': 'basicstyles',
|
|
||||||
'items': ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat']},
|
|
||||||
{'name': 'paragraph',
|
|
||||||
'items': ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-',
|
|
||||||
'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl',
|
|
||||||
'Language']},
|
|
||||||
{'name': 'links', 'items': ['Link', 'Unlink']},
|
|
||||||
{'name': 'styles', 'items': ['Styles', 'Format', 'Font', 'FontSize']},
|
|
||||||
{'name': 'colors', 'items': ['TextColor', 'BGColor']},
|
|
||||||
{'name': 'tools', 'items': ['Maximize', 'ShowBlocks']},
|
|
||||||
{'name': 'insert',
|
|
||||||
'items': ['Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak']},
|
|
||||||
'/', # put this to force next toolbar on new line
|
|
||||||
],
|
|
||||||
'toolbar': 'YourCustomToolbarConfig', # put selected toolbar config here
|
|
||||||
},
|
|
||||||
|
|
||||||
}
|
|
||||||
# Database
|
# Database
|
||||||
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
|
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ from django.conf import settings
|
||||||
from django.conf.urls.static import static
|
from django.conf.urls.static import static
|
||||||
from users.views import AgencyCreateView
|
from users.views import AgencyCreateView
|
||||||
from . import views
|
from . import views
|
||||||
from ckeditor_uploader.views import upload
|
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
@ -46,8 +45,3 @@ urlpatterns = [
|
||||||
] + 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)
|
||||||
|
|
||||||
#urlpatterns += [
|
|
||||||
# path('ckeditor/upload/', login_required(upload), name='ckeditor_upload'),
|
|
||||||
# path('ckeditor/', include('ckeditor_uploader.urls')),
|
|
||||||
#]
|
|
||||||
|
|
@ -2,11 +2,8 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% if request.user.profile.agency.module_news %}
|
{% if request.user.profile.agency.module_news %}
|
||||||
<div class="content-section col-12">
|
<div class="content-section col-12">
|
||||||
<h3>News</h3>
|
<h3>News <small><i data-toggle="tooltip" data-placement="top" title="Hier können aktuelle Nachrichten für die Agentur erstellt und verwaltet werden." class="far fa-question-circle"></i></small></h3>
|
||||||
<hr>
|
<hr>
|
||||||
<p>
|
|
||||||
Hier können aktuelle Nachrichten für die Agentur erstellt und verwaltet werden.
|
|
||||||
</p>
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="content-section col-4">
|
<div class="content-section col-4">
|
||||||
<a class="btn btn-primary" href="{% url 'news-add' %} " data-toggle="tooltip" data-placement="top" title="Neue News für Ihre Agentur erstellen"><i class="fas fa-plus"></i> News</a>
|
<a class="btn btn-primary" href="{% url 'news-add' %} " data-toggle="tooltip" data-placement="top" title="Neue News für Ihre Agentur erstellen"><i class="fas fa-plus"></i> News</a>
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -159,19 +159,6 @@
|
||||||
</li>
|
</li>
|
||||||
{%endif%}
|
{%endif%}
|
||||||
-->
|
-->
|
||||||
{% if perms.users.areas_management %}
|
|
||||||
{% if active_link == 'areasmanagement' %}
|
|
||||||
<li class="nav-item active">
|
|
||||||
{% else%}
|
|
||||||
<li class="nav-item">
|
|
||||||
{%endif%}
|
|
||||||
<a class="nav-link " href="{% url 'areas-management' %}" aria-expanded="true">
|
|
||||||
<i class="fas fa-fw fa-layer-group"></i>
|
|
||||||
<span>Bereiche</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{%endif%}
|
|
||||||
|
|
||||||
{% if perms.users.tasks_management %}
|
{% if perms.users.tasks_management %}
|
||||||
{% if active_link == 'tasksmanagement' %}
|
{% if active_link == 'tasksmanagement' %}
|
||||||
<li class="nav-item active">
|
<li class="nav-item active">
|
||||||
|
|
|
||||||
|
|
@ -1,262 +0,0 @@
|
||||||
{% extends "users/base.html" %}
|
|
||||||
{% load crispy_forms_tags %}
|
|
||||||
{% load static %}
|
|
||||||
{% block content %}
|
|
||||||
<script src="{% static 'users/js/cropper.min.js' %}"></script>
|
|
||||||
<script src="{% static 'users/js/jquery-cropper.js' %}"></script>
|
|
||||||
<div class="content-section">
|
|
||||||
<div class="media">
|
|
||||||
<img class="img-profile " id="profpic" width="17%" src="{{ prof_user.profile.get_photo_url }}">
|
|
||||||
<div class="media-body col-5">
|
|
||||||
<h2 class="account-heading">Profil von {{ prof_user.first_name }} {{ prof_user.last_name }}</h2>
|
|
||||||
<hr>
|
|
||||||
<div class="row mt-2">
|
|
||||||
<div class="col-md-6">
|
|
||||||
<h6><b>Name</b></h6>
|
|
||||||
<p>
|
|
||||||
{{ prof_user.first_name}} {{ prof_user.last_name }}
|
|
||||||
</p>
|
|
||||||
<h6><b>E-Mail</b></h6>
|
|
||||||
<p>
|
|
||||||
{{ prof_user.email }}
|
|
||||||
</p>
|
|
||||||
<h6><b>Agenturfunktion</b></h6>
|
|
||||||
<p>
|
|
||||||
{{ prof_user.profile.get_func_display }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<h6><b>Tätigkeit</b></h6>
|
|
||||||
<p>
|
|
||||||
{{ prof_user.profile.compfunc }}
|
|
||||||
</p>
|
|
||||||
<h6><b>Festnetz</b></h6>
|
|
||||||
<p>
|
|
||||||
{{ prof_user.profile.phoneland }}
|
|
||||||
</p>
|
|
||||||
<h6><b>Mobil</b></h6>
|
|
||||||
<p>
|
|
||||||
{{ prof_user.profile.phonemobile }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- Für das Speichern der Bilder enctype -->
|
|
||||||
<div class="col-7 mt-5">
|
|
||||||
<form method="POST" id="newprofiledata" enctype="multipart/form-data">
|
|
||||||
{% csrf_token %}
|
|
||||||
<fieldset class="form-group">
|
|
||||||
<legend class="border-bottom mb-4">
|
|
||||||
Profil bearbeiten
|
|
||||||
</legend>
|
|
||||||
<!-- FORMS LADEN -->
|
|
||||||
{{ profileform_form|crispy }}
|
|
||||||
<button type="button" id="" onclick="javascript:sendPassMail({{prof_user.pk}})" class="btn btn-success">E-Mail mit Link zur Passworterstellung senden</button> <span class="alert alert-success" id="mailsend" role="alert" style="display: none;"> E-Mail gesendet!</span>
|
|
||||||
</fieldset>
|
|
||||||
Übergeordneter Mitarbeiter: <span id="ps_act">{{prof_user.profile.parent.first_name}} {{prof_user.profile.parent.last_name}}</span>
|
|
||||||
<div class="input-group mb-3">
|
|
||||||
<input class="form-control" name="puser" id="puser" list="parentuser" type="text" onkeyup="javascript:checkValueAddParent()">
|
|
||||||
<div class="input-group-append">
|
|
||||||
<button type="button" id="addusertouserp" onclick="javascript:addUserParentUser()" class="btn btn-success" disabled>Festlegen</button>
|
|
||||||
<button type="button" onclick="javascript:clearSearchfield()" class="btn btn-secondary" ><i class="fas fa-times"></i></button>
|
|
||||||
</div>
|
|
||||||
<datalist id="parentuser" nmae="parentuser">
|
|
||||||
{% for us in possible_users %}
|
|
||||||
<option id="{{us.pk}}" value="{{us.first_name}} {{us.last_name}}"></option>
|
|
||||||
{% endfor %}
|
|
||||||
</datalist>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<hr>
|
|
||||||
<div class="form-group">
|
|
||||||
<button type="submit" class="btn btn-success">Speichern</button>
|
|
||||||
<a href="{% url 'users-management' %}" class="btn">Abbrechen</a>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- MODAL TO CROP THE IMAGE -->
|
|
||||||
<!-- MODAL TO CROP THE IMAGE -->
|
|
||||||
<div class="modal fade " id="modalCrop" data-backdrop="static" data-keyboard="false">
|
|
||||||
<div class="modal-dialog modal-xl">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h4 class="modal-title">Bereich bestimmen</h4>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close" onclick="clearImgField()">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="modal-body" id="imgmodbody">
|
|
||||||
<img src="" id="imagemod" style="max-width: 100%; max-height: 100%;">
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="btn-group pull-left" role="group">
|
|
||||||
<button type="button" class="btn btn-default js-zoom-in">
|
|
||||||
<span class="glyphicon glyphicon-zoom-in"></span>
|
|
||||||
</button>
|
|
||||||
<button type="button" class="btn btn-default js-zoom-out">
|
|
||||||
<span class="glyphicon glyphicon-zoom-out"></span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal" onclick="clearImgField()">Abbrechen</button>
|
|
||||||
<button type="button" class="btn btn-primary js-crop-and-upload">Ausschneiden</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% block javascript %}
|
|
||||||
<script>
|
|
||||||
|
|
||||||
$("#id_x").val(0);
|
|
||||||
$("#id_y").val(0);
|
|
||||||
$("#id_width").val($("#profpic")[0]['naturalWidth']);
|
|
||||||
$("#id_height").val($("#profpic")[0]['naturalHeight']);
|
|
||||||
|
|
||||||
function clearImgField(){
|
|
||||||
$("#id_image").val("");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* SCRIPT TO OPEN THE MODAL WITH THE PREVIEW */
|
|
||||||
$("#id_image").change(function () {
|
|
||||||
if (this.files && this.files[0]) {
|
|
||||||
var reader = new FileReader();
|
|
||||||
reader.onload = function (e) {
|
|
||||||
$("#imagemod").attr("src", e.target.result);
|
|
||||||
$("#modalCrop").modal("show");
|
|
||||||
}
|
|
||||||
reader.readAsDataURL(this.files[0]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var cropBoxData;
|
|
||||||
var canvasData;
|
|
||||||
var $image = $("#imagemod");
|
|
||||||
$("#modalCrop").on("shown.bs.modal", function () {
|
|
||||||
$image.cropper({
|
|
||||||
viewMode: 3,
|
|
||||||
aspectRatio: 1/1,
|
|
||||||
strict: false,
|
|
||||||
cropBoxMovable: true,
|
|
||||||
cropBoxResizable: true,
|
|
||||||
minCropBoxWidth: 200,
|
|
||||||
minCropBoxHeight: 200,
|
|
||||||
ready: function () {
|
|
||||||
$image.cropper("setCanvasData", canvasData);
|
|
||||||
$image.cropper("setCropBoxData", cropBoxData);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$("#imgmodbody").css({
|
|
||||||
"maxWidth": 465
|
|
||||||
});
|
|
||||||
|
|
||||||
}).on("hidden.bs.modal", function () {
|
|
||||||
cropBoxData = $image.cropper("getCropBoxData");
|
|
||||||
canvasData = $image.cropper("getCanvasData");
|
|
||||||
$image.cropper("destroy");
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".js-zoom-in").click(function () {
|
|
||||||
$image.cropper("zoom", 0.1);
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".js-zoom-out").click(function () {
|
|
||||||
$image.cropper("zoom", -0.1);
|
|
||||||
});
|
|
||||||
|
|
||||||
/* SCRIPT TO COLLECT THE DATA AND POST TO THE SERVER */
|
|
||||||
$(".js-crop-and-upload").click(function () {
|
|
||||||
var cropData = $image.cropper("getData");
|
|
||||||
$("#id_x").val(cropData["x"]);
|
|
||||||
$("#id_y").val(cropData["y"]);
|
|
||||||
$("#id_height").val(cropData["height"]);
|
|
||||||
$("#id_width").val(cropData["width"]);
|
|
||||||
$("#id_image").attr("src", $image);
|
|
||||||
$("#modalCrop").modal('toggle');
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
var ua = window.navigator.userAgent;
|
|
||||||
var isIE = /MSIE|Trident/.test(ua);
|
|
||||||
if ( isIE ) {
|
|
||||||
//IE specific code goes here
|
|
||||||
setInterval(function()
|
|
||||||
{
|
|
||||||
checkValueAddParent();
|
|
||||||
},250);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//Call Function in view to send e-mail with pass-reset-data
|
|
||||||
function sendPassMail(id){
|
|
||||||
$.ajax(
|
|
||||||
{
|
|
||||||
type: "GET",
|
|
||||||
url: "/dashboard/sendpassmail",
|
|
||||||
data:{
|
|
||||||
userid : {{prof_user.pk}}
|
|
||||||
},
|
|
||||||
success: function( data )
|
|
||||||
{
|
|
||||||
if(data["message"] == 0){
|
|
||||||
$("#mailsend").fadeIn().delay(4000).fadeOut();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
tempid = null;
|
|
||||||
function clearSearchfield(){
|
|
||||||
$("#puser").val("");
|
|
||||||
$("#addusertouserp").prop('disabled', true);
|
|
||||||
}
|
|
||||||
|
|
||||||
function addUserParentUser(){
|
|
||||||
$.ajax(
|
|
||||||
{
|
|
||||||
type: "GET",
|
|
||||||
url: "/dashboard/setuserparent",
|
|
||||||
data:{
|
|
||||||
userid: tempid,
|
|
||||||
action : 'adduserp',
|
|
||||||
objectid : {{prof_user.pk}}
|
|
||||||
},
|
|
||||||
success: function( data )
|
|
||||||
{
|
|
||||||
console.log(data);
|
|
||||||
clearSearchfield();
|
|
||||||
//Add User-Button
|
|
||||||
$("#ps_act").html(data['username_clean']);
|
|
||||||
$("#parentuser").empty();
|
|
||||||
for (var i in data['remaining_users']) {
|
|
||||||
id = data['remaining_users'][i]['id'];
|
|
||||||
name = data['remaining_users'][i]['first_name'] + " " + data['remaining_users'][i]['last_name'];
|
|
||||||
$("#parentuser").append('<option id="'+id+'" value="'+name+'"></option>');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkValueAddParent()
|
|
||||||
{
|
|
||||||
|
|
||||||
var g = $('#puser').val();
|
|
||||||
var id = $('#parentuser').find('option[value="' + g + '"]').attr('id');
|
|
||||||
if(id != undefined && id.length > 0){
|
|
||||||
tempid = id;
|
|
||||||
$("#addusertouserp").prop('disabled', false);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
tempid = null;
|
|
||||||
$("#addusertouserp").prop('disabled', true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
{% endblock content %}
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
<p>Alle vom Benutzer erstellen Standards werden dem aktuellen Benutzer zugewiesen.<br /><small>(Aktuller Benutzer: {{request.user.pre_name}} {{request.user.last_name}})</small></p>
|
<p>Alle vom Benutzer erstellen Standards werden dem aktuellen Benutzer zugewiesen.<br /><small>(Aktuller Benutzer: {{request.user.pre_name}} {{request.user.last_name}})</small></p>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<button type="submit" class="btn btn-danger">Benutzer löschen</button>
|
<button type="submit" class="btn btn-danger">Benutzer löschen</button>
|
||||||
<a href="{% url 'users-management' %}" class="btn btn-success">Abbrechen</a>
|
<a href="{% url 'dasettings' %}" class="btn btn-success">Abbrechen</a>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
{% extends "users/base.html" %}
|
|
||||||
{% load crispy_forms_tags %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="content-section col-6">
|
|
||||||
<h3>Neuer Benutzer</h3>
|
|
||||||
<hr>
|
|
||||||
<!-- FORMS LADEN users/userforms.py und users/views.py -->
|
|
||||||
<form method="POST">
|
|
||||||
{% csrf_token %}
|
|
||||||
{{ form|crispy }}
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" value="true" id="sendmailnewuser" name="sendmailnewuser">
|
|
||||||
<label class="form-check-label" for="sendmailnewuser" name="sendmailnewuser">
|
|
||||||
E-Mailbenachrichtigung schicken
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<small>*: Der Benutzer erhält direkt eine E-Mail mit einem Link zur Passworterstellung, wenn der Haken bei <i>E-Mailbenachrichtung schicken</i> gesetzt ist. Dies kann später auch wiederholt werden.</small>
|
|
||||||
<hr>
|
|
||||||
<button type="submit" class="btn btn-success" href="{% url 'users-adduser' %} ">Benutzer anlegen</button>
|
|
||||||
<a class="btn" href="{% url 'users-management' %} ">Abbrechen</a>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
{% endblock content %}
|
|
||||||
|
|
@ -1,81 +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 mb-3">
|
|
||||||
<div class="content-section col-4">
|
|
||||||
<a class="btn btn-primary" href="{% url 'users-adduser' %} ">Benutzer anlegen</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="form-group mb-2">
|
|
||||||
<input class="form-control" id="tableSearch" size="50" type="text" placeholder="Suche in Tabelle...">
|
|
||||||
</div>
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover">
|
|
||||||
<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>
|
|
||||||
<th scope="col">Telefon</th>
|
|
||||||
<th scope="col">Mobil</th>
|
|
||||||
<th scope="col"> </th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="tableresults">
|
|
||||||
{% 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>
|
|
||||||
<td>{{ item.profile.phoneland }}</td>
|
|
||||||
<td>{{ item.profile.phonemobile }}</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>
|
|
||||||
</a>
|
|
||||||
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink">
|
|
||||||
<div class="dropdown-header">Benutzerdaten</div>
|
|
||||||
<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="{% url 'users-areataskupdate' item.pk %}">Zuständigkeiten</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>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
$(document).ready(function(){
|
|
||||||
$("#tableSearch").on("keyup", function() {
|
|
||||||
var value = $(this).val().toLowerCase();
|
|
||||||
$("#tableresults tr").filter(function() {
|
|
||||||
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock content %}
|
|
||||||
|
|
@ -16,13 +16,13 @@ Permissions definiert in models.py bei USERS und dann hier vor die View geschrie
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.dashboard, name='users-dashboard'),
|
path('', views.dashboard, name='users-dashboard'),
|
||||||
path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='users-logout'),
|
path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='users-logout'),
|
||||||
path('usersman/', permission_required('users.users_usermanagement')(UsersManagement.as_view(template_name="users/users_management.html")), name='users-management'),
|
path('usersman/', permission_required('users.usermanager')(UsersManagement.as_view(template_name="users/users_management.html")), name='users-management'),
|
||||||
path('usersman/adduser/', permission_required('users.users_usermanagement')(UsersCreateUser.as_view(template_name="users/users_adduser.html")), name='users-adduser'),
|
path('usersman/adduser/', permission_required('users.usermanager')(UsersCreateUser.as_view(template_name="users/users_adduser.html")), name='users-adduser'),
|
||||||
#path('usersman/profile/', views.profile, name='users-profile'),
|
#path('usersman/profile/', views.profile, name='users-profile'),
|
||||||
#path('usersman/<int:pk>/', views.ProfileUpdateView, name='users-update'),
|
#path('usersman/<int:pk>/', views.ProfileUpdateView, name='users-update'),
|
||||||
#path('usersman/<int:pk>/', permission_required('users.users_usermanagement')(ProfileUpdateView.as_view()), name='users-update'),
|
#path('usersman/<int:pk>/', permission_required('users.usermanager')(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.usermanager')(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.usermanager')(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'),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue