Erster Zwischecommit für 0.8.2
This commit is contained in:
parent
8e8c7ac4aa
commit
d64a396f1f
|
|
@ -4,7 +4,6 @@ from .models import Data, DataFile
|
|||
|
||||
class CloudAddFileForm(forms.ModelForm):
|
||||
|
||||
|
||||
class Meta:
|
||||
model = Data
|
||||
labels = {
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -27,7 +27,14 @@ a.disabled {
|
|||
<h3>Dateien <small><i data-toggle="tooltip" data-placement="top" title="Hier können Sie Dateien und Ordner für ihre Agentur verwalten." class="far fa-question-circle"></i></small></h3>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
<div class="content-section col-12">
|
||||
|
||||
<div class="progress mb-2" style="height: 15px;">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="{{percent_quota}}" style="width: {{percent_quota}}%;" aria-valuemin="0" aria-valuemax="100"><b style="color: #000000; padding-left: 5px">Aktuelle Quota: {{actquota}} / 2 GB</b></div>
|
||||
</div>
|
||||
|
||||
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item" aria-current="page"><a href="{% url 'cloud-main' 'first' %}"><i class="fas fa-home"></i></a></li>
|
||||
|
|
@ -67,22 +74,24 @@ a.disabled {
|
|||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
|
||||
{% if d.visibleby.all|length == 0 %}
|
||||
{% setbool True %}
|
||||
{% endif %}
|
||||
|
||||
{% getbool as groupchecker %}
|
||||
|
||||
{% if groupchecker %}
|
||||
<tr id="dir_{{d.pk}}" class="droppable_tr">
|
||||
{% else %}
|
||||
<tr id="dir_{{d.pk}}" class="droppable_tr" data-toggle="popover" data-placement="top" data-trigger="hover" title="Zugriffsbeschränkung" data-content="Zugriff beschränkt auf {% for dgroup in d.visibleby.all %}{{dgroup.agencygroupname}}{% if forloop.counter < d.visibleby.all|length %}, {%endif%}{% endfor %}">
|
||||
{% endif %}
|
||||
<td id="dir_{{d.pk}}_icon"><i class="fas fa-folder" ></i>
|
||||
</td>
|
||||
<td>
|
||||
<td >
|
||||
{% if groupchecker %}
|
||||
<a href="{% url 'cloud-main' d.pk %}">{{d.name}}</a>
|
||||
{% else %}
|
||||
<span class="text-secondary"><i class="fas fa-lock"></i> {{d.name}}</span>
|
||||
</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{d.owner.first_name}} {{d.owner.last_name}}</td>
|
||||
|
|
@ -331,13 +340,14 @@ a.disabled {
|
|||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
|
||||
$('[data-toggle="popover"]').popover();
|
||||
$(".toast").toast({
|
||||
autohide: true,
|
||||
delay : 5000
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
//GROUPS
|
||||
function showGroupChangeModal(tochangeid){
|
||||
$("#changeGroupOfDataObj").modal("toggle");
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import os
|
|||
from .models import DataDir, DataFile
|
||||
from datetime import datetime
|
||||
from users.models import AgencyGroup
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
'''
|
||||
|
|
@ -55,6 +56,17 @@ def checkUserDirRights(request, startdir, userid):
|
|||
canview = False
|
||||
return canview
|
||||
|
||||
def folder_size(path='.'):
|
||||
total = 0
|
||||
for entry in os.scandir(path):
|
||||
if entry.is_file():
|
||||
total += entry.stat().st_size
|
||||
elif entry.is_dir():
|
||||
total += folder_size(entry.path)
|
||||
|
||||
total_gb = round(total/1024.0**3, 4)
|
||||
return total_gb
|
||||
|
||||
@login_required
|
||||
def CloudMain(request, pk):
|
||||
diragency = []
|
||||
|
|
@ -74,7 +86,9 @@ def CloudMain(request, pk):
|
|||
'parentid' : diragency.pk,
|
||||
'files' : DataFile.objects.filter(parent=diragency, agency=request.user.profile.agency).order_by("name"),
|
||||
'agencygroups' : AgencyGroup.objects.filter(agency=request.user.profile.agency).order_by("agencygroupname"),
|
||||
"rootid" : rootid
|
||||
"rootid" : rootid,
|
||||
"actquota" : folder_size(BASE_DIR + "/media/agencydata/agency_"+str(request.user.profile.agency.pk)+"/files"),
|
||||
"percent_quota" : int(folder_size(BASE_DIR + "/media/agencydata/agency_"+str(request.user.profile.agency.pk)+"/files")/(2/100))
|
||||
}
|
||||
else:
|
||||
|
||||
|
|
@ -98,7 +112,9 @@ def CloudMain(request, pk):
|
|||
'breadcrump' : breadcrump,
|
||||
'files' : DataFile.objects.filter(parent=vieweddir, agency=request.user.profile.agency).order_by("name"),
|
||||
'agencygroups' : AgencyGroup.objects.filter(agency=request.user.profile.agency).order_by("agencygroupname"),
|
||||
"rootid" : rootid
|
||||
"rootid" : rootid,
|
||||
"actquota" : folder_size(BASE_DIR + "/media/agencydata/agency_"+str(request.user.profile.agency.pk)+"/files"),
|
||||
"percent_quota" : int(folder_size(BASE_DIR + "/media/agencydata/agency_"+str(request.user.profile.agency.pk)+"/files")/(2/100))
|
||||
}
|
||||
else:
|
||||
context = {
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -22,9 +22,10 @@ class UsersNotificationForm(forms.ModelForm):
|
|||
"user_standard_public_mail" : "Veröffentlichung meiner Standards",
|
||||
"agency_new_standard_mail" : "Neue Agentur-Standards",
|
||||
'add_new_group_mail' : "Gruppenmitgliedschaften",
|
||||
'add_task_mail' : "Tätigkeitsbereich"
|
||||
'add_task_mail' : "Tätigkeitsbereich",
|
||||
'user_messages_mail' : "Mitteilungen"
|
||||
}
|
||||
fields = ['news_mail', 'news_push', 'user_standard_public_mail', 'user_standard_public_push', 'agency_new_standard_mail', 'agency_new_standard_push', 'add_new_group_mail', 'add_new_group_push', 'add_task_mail', 'add_task_push']
|
||||
fields = ['news_mail', 'news_push', 'user_standard_public_mail', 'user_standard_public_push', 'agency_new_standard_mail', 'agency_new_standard_push', 'add_new_group_mail', 'add_new_group_push', 'add_task_mail', 'add_task_push', 'user_messages_mail', 'user_messages_push']
|
||||
|
||||
# PERMISSION GROUPS FORM
|
||||
class AgencyGroupPerms(forms.Form):
|
||||
|
|
@ -54,8 +55,9 @@ class AgencyModulsForm(forms.ModelForm):
|
|||
'module_quicklinks' : "Quicklinks",
|
||||
'module_files' : "Dateien",
|
||||
'module_organigramm' : "Organigramm",
|
||||
'module_messages' : "Mitteilungen",
|
||||
}
|
||||
fields = ['module_news','module_quicklinks','module_files','module_organigramm']
|
||||
fields = ['module_news','module_quicklinks','module_files','module_organigramm', 'module_messages']
|
||||
|
||||
# NEW USER FORM
|
||||
class UserNewUserForm(forms.ModelForm):
|
||||
|
|
|
|||
|
|
@ -80,8 +80,8 @@ $(document).ready(function(){
|
|||
/* CROPPER */
|
||||
$("#id_x").val(0);
|
||||
$("#id_y").val(0);
|
||||
$("#id_width").val(1500);
|
||||
$("#id_height").val(750);
|
||||
$("#id_width").val(0);
|
||||
$("#id_height").val(0);
|
||||
$("#id_rotation").val(0);
|
||||
|
||||
function clearImgField(){
|
||||
|
|
@ -106,13 +106,10 @@ $(document).ready(function(){
|
|||
var $image = $("#imagemod");
|
||||
$("#modalCrop").on("shown.bs.modal", function () {
|
||||
$image.cropper({
|
||||
viewMode: 3,
|
||||
aspectRatio: 2/1,
|
||||
viewMode: 0,
|
||||
strict: false,
|
||||
cropBoxMovable: true,
|
||||
cropBoxResizable: true,
|
||||
minCropBoxWidth: 750,
|
||||
minCropBoxHeight: 350,
|
||||
ready: function () {
|
||||
$image.cropper("setCanvasData", canvasData);
|
||||
$image.cropper("setCropBoxData", cropBoxData);
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
<div id="newareaname_err" class="alert alert-danger mt-3" style="display: none">Falsche Eingabe! Keine Sonderzeichen!</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal">Abrechen</button>
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal">Abbrechen</button>
|
||||
<button id="doActionAreaModal" type="button" class="btn btn-success" data-dismiss="modal" onclick="javascript:mainmodalAreaSave()" disabled="true">Speichern</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -152,7 +152,7 @@
|
|||
<div id="newtaskname_err" class="alert alert-danger mt-3" style="display: none">Falsche Eingabe! Keine Sonderzeichen!</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal">Abrechen</button>
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal">Abbrechen</button>
|
||||
<button id="doActionTaskModal" type="button" class="btn btn-success" data-dismiss="modal" onclick="javascript:mainmodalTaskSave()" disabled="true">Speichern</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{% load counter_tag %}
|
||||
<a href="{% url 'newuserfirst' %}"class="btn btn-primary active" data-toggle="tooltip" data-placement="top" title="Fügen Sie hier einen weiteren Mitarbeiter Ihrer Agentur hinzu.">+ Mitarbeiter</a>
|
||||
<a href="{% url 'newuserfirst' %}"class="btn btn-primary active" data-toggle="tooltip" data-placement="top" title="Fügen Sie hier einen weiteren Mitarbeiter Ihrer Agentur hinzu."><i class="fas fa-plus"></i> Mitarbeiter</a>
|
||||
<hr>
|
||||
<div class="row">
|
||||
<div class="form-group mb-2">
|
||||
|
|
@ -12,6 +12,7 @@
|
|||
<th scope="col">Name</th>
|
||||
<th scope="col">E-Mail</th>
|
||||
<th scope="col">Agenturfunktion</th>
|
||||
<th scope="col">Letzter Login</th>
|
||||
<th scope="col">Tätigkeit</th>
|
||||
<th scope="col">Telefon</th>
|
||||
<th scope="col">Mobil</th>
|
||||
|
|
@ -24,6 +25,7 @@
|
|||
<td><a href="{% url 'user_updateprofile' item.pk 0 %}">{{item.first_name }} {{ item.last_name }}</a></td>
|
||||
<td>{{ item.email }}</td>
|
||||
<td>{% if item.profile.func == None %}-{%else%}{{ item.profile.func }}{%endif%}</td>
|
||||
<td>{% if item.last_login != Nonte %}{{ item.last_login }}{% endif %}</td>
|
||||
<td>{{ item.profile.compfunc }}</td>
|
||||
<td>{{ item.profile.phoneland }}</td>
|
||||
<td>{{ item.profile.phonemobile }}</td>
|
||||
|
|
|
|||
|
|
@ -61,8 +61,9 @@
|
|||
{{ mail }}
|
||||
</p>
|
||||
<div style="float: left">
|
||||
<a type="button" class="btn-primary btn-sm active" href="{% url 'changeusermaindata' vieweduser %}">Stammdaten ändern</a>
|
||||
<button type="button" id="" onclick="javascript:sendPassMail({{vieweduser}})" class="btn-primary btn-sm active mt-2">E-Mail mit Link zur Passworterstellung senden</button> <span class="alert alert-success" id="mailsend" role="alert" style="display: none;"> E-Mail gesendet!</span>
|
||||
<a href="{% url 'changeusermaindata' vieweduser %}">
|
||||
<button type="button" class="btn-primary btn-sm active" >Stammdaten ändern</button></a>
|
||||
<button type="button" id="" onclick="javascript:sendPassMail({{vieweduser}})" class="btn-primary btn-sm active" >E-Mail mit Link zur Passworterstellung senden</button> <span class="alert alert-success" id="mailsend" role="alert" style="display: none;"> E-Mail gesendet!</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -297,8 +298,8 @@ function addUserToGroup(userid, groupid){
|
|||
strict: false,
|
||||
cropBoxMovable: true,
|
||||
cropBoxResizable: true,
|
||||
minCropBoxWidth: 200,
|
||||
minCropBoxHeight: 200,
|
||||
minCropBoxWidth: 300,
|
||||
minCropBoxHeight: 300,
|
||||
ready: function () {
|
||||
$image.cropper("setCanvasData", canvasData);
|
||||
$image.cropper("setCropBoxData", cropBoxData);
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -38,6 +38,7 @@ INSTALLED_APPS = [
|
|||
'dasettings.apps.DASettingsConfig',
|
||||
'areas.apps.AreasConfig',
|
||||
'orga.apps.OrgaConfig',
|
||||
'message.apps.MessageConfig',
|
||||
'cloud.apps.CloudConfig',
|
||||
'tasks.apps.TasksConfig',
|
||||
'quicklinks.apps.QuicklinksConfig',
|
||||
|
|
@ -170,12 +171,21 @@ GRAPPELLI_CLEAN_INPUT_TYPES = False
|
|||
# EMAILs
|
||||
|
||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||
'''
|
||||
EMAIL_HOST = 'smtp.strato.de'
|
||||
EMAIL_PORT = 587
|
||||
EMAIL_USE_TLS = True
|
||||
EMAIL_HOST_USER = "support@digitale-agentur.com"
|
||||
EMAIL_HOST_PASSWORD = "aPx9m3!7x3m@8o!t"
|
||||
DEFAULT_FROM_EMAIL = "support@digitale-agentur.com"
|
||||
'''
|
||||
|
||||
EMAIL_HOST = 'gymhum.de'
|
||||
EMAIL_PORT = 587
|
||||
EMAIL_USE_TLS = True
|
||||
EMAIL_HOST_USER = "holger.trampe"
|
||||
EMAIL_HOST_PASSWORD = "Motte2016_!"
|
||||
DEFAULT_FROM_EMAIL = "holger.trampe@gymhum.de"
|
||||
|
||||
# FOR DATEPICKER
|
||||
BOOTSTRAP4 = {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ urlpatterns = [
|
|||
path('', include('users.urls'), name="dashboard-first"),
|
||||
path('admin/', admin.site.urls),
|
||||
path('dasettings/', include('dasettings.urls'), name="dasettings"),
|
||||
path('messages/', include('message.urls'), name="messages"),
|
||||
path('dashboard/', include('users.urls'), name="dashboard"),
|
||||
path('areas/', include('areas.urls'), name="areas-management"),
|
||||
path('tasks/', include('tasks.urls'), name="tasks-management"),
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
def registerdone(request):
|
||||
return render (request, 'users/registercomplete.html')
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class MessageConfig(AppConfig):
|
||||
name = 'message'
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
from django import forms
|
||||
from users.models import UserFullName
|
||||
|
||||
class MessageForm(forms.Form):
|
||||
def __init__(self, user, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['target_user'] = forms.ChoiceField(label="Mitarbeiter", choices=[(u.id, u) for u in UserFullName.objects.filter(profile__agency__pk=user.profile.agency.pk).exclude(pk=user.pk)])
|
||||
self.fields['message_content'] = forms.CharField(required=True, widget=forms.Textarea, label="Mitteilung")
|
||||
Binary file not shown.
|
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
{% extends "users/base.html" %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% block content %}
|
||||
{% if request.user.profile.agency.module_messages %}
|
||||
<div class="content-section col-6">
|
||||
<h3>Mitteilungen <small><i data-toggle="tooltip" data-placement="top" title="Verschicken Sie hier Nachrichten für Mitarbeiter." class="far fa-question-circle"></i></small></h3>
|
||||
<hr>
|
||||
<form method="POST" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{{form|crispy}}
|
||||
<p>Ihrer Mitteilung wird Automatisch eine Anrede und eine Verabscheidung hinzugefügt!</p>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-success">Mitteilung verschicken</button>
|
||||
<a href="{% url 'users-dashboard' %}" class="btn btn-success">Abbrechen</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
<h3>Das Modul Mitteilungen wurde in ihrer Agentur deaktiviert.</h3>
|
||||
{% endif %}
|
||||
{% endblock content %}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{% extends "users/base.html" %}
|
||||
{% load crispy_forms_tags %}
|
||||
{% block content %}
|
||||
{% if request.user.profile.agency.module_messages %}
|
||||
<div class="content-section col-6">
|
||||
<h3>Mitteilungen <small><i data-toggle="tooltip" data-placement="top" title="Verschicken Sie hier Nachrichten für Mitarbeiter." class="far fa-question-circle"></i></small></h3>
|
||||
<hr>
|
||||
Ihre Mitteilung wurde gesendet.
|
||||
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
<h3>Das Modul Mitteilungen wurde in ihrer Agentur deaktiviert.</h3>
|
||||
{% endif %}
|
||||
{% endblock content %}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
from django.contrib import admin
|
||||
from django.urls import path, include
|
||||
from django.contrib.auth import views as auth_views
|
||||
from . import views
|
||||
from django.contrib.auth.decorators import login_required
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.mainmessageview, name="messages"),
|
||||
]
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
from django.shortcuts import render, redirect
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from .forms import MessageForm
|
||||
from notificsys.models import UserNotification
|
||||
from django.core.mail import send_mail
|
||||
from django.template.loader import render_to_string
|
||||
# ALLE STANDARDS EINER AGENTUR
|
||||
@login_required
|
||||
def mainmessageview(request):
|
||||
if request.method == 'POST':
|
||||
context = {
|
||||
'active_link' : 'messages'
|
||||
}
|
||||
|
||||
targetuser_id = request.POST["target_user"]
|
||||
message = request.POST["message_content"]
|
||||
|
||||
targetuser = User.objects.get(pk=targetuser_id)
|
||||
|
||||
notificationtext = message + " Grüße, " + request.user.first_name + " " + request.user.last_name
|
||||
|
||||
if(targetuser.profile.user_messages_mail):
|
||||
|
||||
username = targetuser.first_name + " " + targetuser.last_name
|
||||
msg_html = render_to_string('notificsys/notification_mail.html', {'username': username, 'notificationtext' : notificationtext})
|
||||
send_mail(
|
||||
'Agentur-Benachrichtigung',
|
||||
'Hallo ' + targetuser.first_name + ' ' + targetuser.last_name + '! ' + notificationtext,
|
||||
'support@digitale-agentur.com',
|
||||
[targetuser.email],
|
||||
html_message=msg_html,
|
||||
fail_silently=False
|
||||
)
|
||||
|
||||
if(targetuser.profile.user_messages_push):
|
||||
newnotification = UserNotification(touser=targetuser, notificationtext='Hallo ' + targetuser.first_name + ' ' + targetuser.last_name + '! ' + notificationtext, notificationtype="messagereceived")
|
||||
newnotification.save()
|
||||
|
||||
return render (request, 'message/message_send.html', context)
|
||||
else:
|
||||
context = {
|
||||
'active_link' : 'messages',
|
||||
'form' : MessageForm(request.user)
|
||||
}
|
||||
# Adding active_link
|
||||
# Loading only user same agency
|
||||
# Change context and return for template-data
|
||||
# # Get all Users of the Same Agency as logged user
|
||||
|
||||
return render (request, 'message/message.html', context)
|
||||
|
|
@ -4,28 +4,35 @@
|
|||
<div class="content-section col-12">
|
||||
<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>
|
||||
{% if perms.users.modulenews %}
|
||||
<div class="row">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
{% endif %}
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<ul class="nav nav-tabs" id="news_tabs" role="tablist">
|
||||
{% if perms.users.modulenews %}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="act" data-toggle="tab" href="#t_act" role="tab" aria-controls="news" aria-selected="false">Aktuelle</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="coming" data-toggle="tab" href="#t_coming" role="tab" aria-controls="coming" aria-selected="false">Ausstehende</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="archiv" data-toggle="tab" href="#t_archiv" role="tab" aria-controls="archiv" aria-selected="false">Archiv</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="tab-content" id="tab_contents">
|
||||
{% if perms.users.modulenews %}
|
||||
<div class="tab-pane fade" id="t_act" role="tabpanel" aria-labelledby="act">
|
||||
<h5 class="mt-3"><a href="" style="color: #000000;">Aktuelle News</a></h5>
|
||||
<hr>
|
||||
|
|
@ -73,8 +80,8 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{% endif %}
|
||||
{% if perms.users.modulenews %}
|
||||
<div class="tab-pane fade" id="t_coming" role="tabpanel" aria-labelledby="coming">
|
||||
<h5 class="mt-3"><a href="" style="color: #000000;">Ausstehende News</a></h5>
|
||||
<hr>
|
||||
|
|
@ -119,7 +126,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -125,7 +125,6 @@
|
|||
<div style="font-family:Roboto;font-size:18px;line-height:1;text-align:left;color:#000000;">
|
||||
<p>Hallo {{username}},</p>
|
||||
<p>{{notificationtext}}</p>
|
||||
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
|
||||
<p>Mit freundlichen Grüßen</p>
|
||||
<p>Ihr Team von Digitale Agentur</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -103,6 +103,6 @@ def delSingleNotification(request):
|
|||
def delAllNotification(request):
|
||||
if request.method == 'GET':
|
||||
if request.GET['action'] == 'delall':
|
||||
todelnotification = UserNotification.objects.filter(touser__pk=request.user.pk).delete()
|
||||
UserNotification.objects.filter(touser__pk=request.user.pk).delete()
|
||||
|
||||
return JsonResponse({})
|
||||
|
|
@ -26,13 +26,9 @@ var data = [
|
|||
{ 'id' : '{{request.user.profile.agency.pk}}', 'parent' : "", 'role': "", 'name': '{{request.user.profile.agency.name}}', 'color': '#71AF17', "imageUrl": "", 'children' : []},
|
||||
{% for u in agencyuser %}
|
||||
{% if u.profile.parent == u %}
|
||||
|
||||
|
||||
|
||||
|
||||
{ 'id': '{{u.pk}}' , 'name': "{{u.first_name}} {{u.last_name}}",'role': '<b>{% if u.profile.func == None %} n.a. {% else %} {{u.profile.func}} {% endif %}</b></br >{{u.profile.compfunc}}', 'parent': "{{request.user.profile.agency.pk}}", 'color': '#1859B7', "imageUrl": "{{u.profile.get_photo_url}}", 'userid' : '{{u.pk}}', 'children' : [] },
|
||||
{ 'id': '{{u.pk}}' , 'name': "{{u.first_name}} {{u.last_name}}",'role': '<b>{% if u.profile.func != None %} {{u.profile.func}} {% endif %}</b></br >{{u.profile.compfunc}}', 'parent': "{{request.user.profile.agency.pk}}", 'color': '#1859B7', "imageUrl": "{{u.profile.get_photo_url}}", 'userid' : '{{u.pk}}', 'children' : [] },
|
||||
{% else %}
|
||||
{ 'id': '{{u.pk}}', 'name': "{{u.first_name}} {{u.last_name}}", 'role': '<b>{% if u.profile.func == None %} n.a. {% else %} {{u.profile.func}} {% endif %}</b></br >{{u.profile.compfunc}}', 'parent': '{{u.profile.parent.pk}}', 'color': '#1859B7', "imageUrl": "{{u.profile.get_photo_url }}", 'userid' : '{{u.pk}}', 'children' : []},
|
||||
{ 'id': '{{u.pk}}', 'name': "{{u.first_name}} {{u.last_name}}", 'role': '<b>{% if u.profile.func != None %} {{u.profile.func}} {% endif %}</b></br >{{u.profile.compfunc}}', 'parent': '{{u.profile.parent.pk}}', 'color': '#1859B7', "imageUrl": "{{u.profile.get_photo_url }}", 'userid' : '{{u.pk}}', 'children' : []},
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
];
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
{% block content %}
|
||||
<div class="content-section col-12">
|
||||
<h3>Standards <small><i data-toggle="tooltip" data-placement="top" title="Standards dokumentieren und erläutern verschiedenen Verfahren, strukturiert nach Bereichen und Aufgaben." class="far fa-question-circle"></i></small></h3>
|
||||
<h3>Standards <small><i data-toggle="tooltip" data-placement="top" title="Standards dokumentieren und erläutern verschiedenen Verfahren, strukturiert nach Bereichen und Tätigkeiten." class="far fa-question-circle"></i></small></h3>
|
||||
<small>Sichtbar sind alle veröffentlichten und von {{ user.first_name }} {{ user.last_name}} erstellten Standards.</small>
|
||||
<hr>
|
||||
<div class="row">
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
{% if groupchecker %}
|
||||
<p class="card-text"><a href="{% url 'standard-single' s.pk %}">{{s.name|truncatechars:28}}</a></p>
|
||||
{% else %}
|
||||
<p class="card-text text-secondary"><i class="fas fa-lock"></i> {{s.name|truncatechars:28}}</p>
|
||||
<p class="card-text text-secondary" data-toggle="popover" data-placement="top" data-trigger="hover" title="Zugriffsbeschränkung" data-content="Zugriff beschränkt auf {% for sgroup in s.visibleby.all %}{{sgroup.agencygroupname}}{% if forloop.counter < s.visibleby.all|length %},{%endif%}{% endfor %}"><i class="fas fa-lock"></i> {{s.name|truncatechars:28}}</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
|
@ -73,6 +73,7 @@
|
|||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
{% endfor %}
|
||||
<div class="tab-pane fade" id="t_userown" role="tabpanel" aria-labelledby="userown">
|
||||
|
|
@ -187,6 +188,7 @@
|
|||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function(){
|
||||
$('[data-toggle="popover"]').popover();
|
||||
$('#area_tabs li:first-child a').tab('show');
|
||||
|
||||
$("#tableSearch").on("keyup", function() {
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class StandardsManagement(LoginRequiredMixin, ListView):
|
|||
tasks_in_area = Tasks.objects.filter(agency__pk=self.request.user.profile.agency.pk, area__pk=a.pk).order_by("name")
|
||||
|
||||
for t in tasks_in_area:
|
||||
standardcontent[len(standardcontent)-1]['tasks'].append({"task" : t, "standards" : Standards.objects.filter(agency__pk=self.request.user.profile.agency.pk, area__pk=a.pk, task = t.pk, area = a.pk, public=True).order_by("created_standard_date")})
|
||||
standardcontent[len(standardcontent)-1]['tasks'].append({"task" : t, "standards" : Standards.objects.filter(agency__pk=self.request.user.profile.agency.pk, area__pk=a.pk, task = t.pk, area = a.pk, public=True).order_by("-created_standard_date")})
|
||||
|
||||
#context.update({'active_link' : 'standards', 'tasks': tasks, 'unpubstandards_of_user' : unpubstandards_of_user, 'standards_of_agency' : standards_of_agency, 'areas' : areas, 'standards_of_user' : standards_of_user, 'standardcontent' : standardcontent})
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ class Agency(models.Model):
|
|||
plz = models.CharField(default="", max_length=5, blank=True)
|
||||
agency_email = models.EmailField(default="", blank=True)
|
||||
phone = models.CharField(default="", max_length=50, blank=True)
|
||||
agencypic = models.ImageField(default='agencymain/default.jpg', upload_to=picturepath_agency, blank=True)
|
||||
agencypic = models.ImageField(default='ag_default.jpg', upload_to=picturepath_agency, blank=True)
|
||||
|
||||
# MONEY
|
||||
balance = models.FloatField(default=0.0, max_length=9, blank=True)
|
||||
|
|
@ -52,6 +52,10 @@ class Agency(models.Model):
|
|||
module_quicklinks = models.BooleanField(default=True)
|
||||
module_files = models.BooleanField(default=True)
|
||||
module_organigramm = models.BooleanField(default=True)
|
||||
module_messages = models.BooleanField(default=True)
|
||||
|
||||
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.name}'
|
||||
|
|
@ -65,7 +69,7 @@ class Agency(models.Model):
|
|||
if self.agencypic and hasattr(self.agencypic, 'url'):
|
||||
return self.agencypic.url
|
||||
else:
|
||||
return "/media/agencymain/default.jpg"
|
||||
return "/media/ag_default.jpg"
|
||||
|
||||
'''
|
||||
|
||||
|
|
@ -108,7 +112,7 @@ class Profile(models.Model):
|
|||
func = models.ForeignKey("AgencyJob", blank=True, null=True, default=None, on_delete=models.SET_NULL)
|
||||
# Wenn dieses Profil gelöscht wird, wird NICHT die Agency geslöscht
|
||||
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='default.jpg', upload_to=picturepath_user, blank=True)
|
||||
compfunc = models.CharField(max_length=60, blank=True)
|
||||
visible = models.BooleanField(default=True)
|
||||
persnumber = models.CharField(default="", max_length=50, blank=True)
|
||||
|
|
@ -142,6 +146,11 @@ class Profile(models.Model):
|
|||
add_task_mail = models.BooleanField(default=False)
|
||||
add_task_push = models.BooleanField(default=True)
|
||||
|
||||
# MESSAGES
|
||||
# Mitteilungen
|
||||
user_messages_mail = models.BooleanField(default=True)
|
||||
user_messages_push = models.BooleanField(default=True)
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.user.last_name}'
|
||||
|
||||
|
|
@ -212,7 +221,7 @@ class UserFullName(User):
|
|||
proxy = True
|
||||
|
||||
def __unicode__(self):
|
||||
return "MEIN NAME"
|
||||
return "placeholder"
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.first_name + " " + self.last_name}'
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 513 B |
|
|
@ -8,7 +8,7 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<link rel="shortcut icon" type="image/x-icon" href="{% static 'users/img/favicon.png' %}">
|
||||
<title>Digitale Agentur</title>
|
||||
|
||||
<!-- Custom fonts for this template-->
|
||||
|
|
@ -36,6 +36,12 @@
|
|||
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.15/dist/summernote.min.css" rel="stylesheet">
|
||||
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.15/dist/summernote.min.js"></script>
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||
<script src="{% static 'users/js/jsLists.js' %}"></script>
|
||||
<link href="{% static 'users/css/jsLists.css' %}" rel="stylesheet">
|
||||
|
|
@ -150,6 +156,21 @@
|
|||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if request.user.profile.agency.module_messages %}
|
||||
{% if active_link == 'messages' %}
|
||||
<li class="nav-item active">
|
||||
{% else%}
|
||||
<li class="nav-item">
|
||||
{%endif%}
|
||||
<a class="nav-link " href="{% url 'messages' %}" aria-expanded="true">
|
||||
<i class="fas fa-envelope"></i>
|
||||
<span>Mitteilungen</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
|
||||
<!--
|
||||
{% if perms.users.users_usermanagement %}
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@
|
|||
<h5 class="card-title">News
|
||||
{% if perms.users.modulenews %}
|
||||
<a class="btn btn-primary btn-sm ml-1" href="{% url 'news-add' %} " style="float: right;" data-toggle="tooltip" data-placement="top" title="Neue News für Ihre Agentur erstellen"><i class="fas fa-plus"></i></a>
|
||||
<a class="btn btn-secondary btn-sm" href="{% url 'news-management' %} " style="float: right;" data-toggle="tooltip" data-placement="top" title="Alle News und das News-Archiv betrachten"><i class="fas fa-list"></i></a>
|
||||
{% endif %}
|
||||
<a class="btn btn-secondary btn-sm" href="{% url 'news-management' %} " style="float: right;" data-toggle="tooltip" data-placement="top" title="Alle News und das News-Archiv betrachten"><i class="fas fa-list"></i></a>
|
||||
</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
|
|
@ -42,7 +42,7 @@
|
|||
{% if request.user.profile.agency.module_news %}
|
||||
<div class="card d-block mb-3" style="width: 34.8%">
|
||||
<div class="card-body">
|
||||
<img width="100%" src="{{ request.user.profile.agency.get_photo_url }}">
|
||||
<img style="max-height: 400px; max-width: 100%" src="{{ request.user.profile.agency.get_photo_url }}">
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
@ -61,14 +61,14 @@
|
|||
<tr>
|
||||
<th scope="col">Titel</th>
|
||||
<th scope="col">Erstellt von</th>
|
||||
<th scope="col">Erstellt am</th>
|
||||
<th scope="col">Zuletzt bearbeitet am</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for standard in standards_of_agency %}
|
||||
<tr>
|
||||
<td><a href="{% url 'standard-single' standard.pk %}">{{standard.name}}</a></td>
|
||||
<td>{{standard.created_standard_by.first_name}} {{standard.created_standard_by.last_name}}</td>
|
||||
<td>{{standard.created_standard_date|date:"d.m.Y, H:i"}}</td>
|
||||
<td>{{standard.last_modified_on|date:"d.m.Y, H:i"}}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
|
@ -79,7 +79,7 @@
|
|||
{% if not request.user.profile.agency.module_news %}
|
||||
<div class="card d-block mb-3" style="width: 34.8%">
|
||||
<div class="card-body">
|
||||
<img width="100%" src="{{ request.user.profile.agency.get_photo_url }}">
|
||||
<img style="max-height: 400px; max-width: 100%" src="{{ request.user.profile.agency.get_photo_url }}">
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
<p>Hallo {{username}},</p>
|
||||
<p>für Sie wurde ein Account in der Agentur <b>{{user.profile.agency.name}}</b> erstellt. Bitte gehen Sie auf folgenden Link, um ein Passwort zu erstellen:</p>
|
||||
<p><a href="https://digitale-agentur.com/password-reset">https://digitale-agentur.com/password-reset</a></p>
|
||||
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
|
||||
|
||||
<p>Mit freundlichen Grüßen</p>
|
||||
<p>Ihr Team von Digitale Agentur</p>
|
||||
</mj-text>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
<h4>Ihr Benutzername: {{ user.get_username }}</h4>
|
||||
</p>
|
||||
Sollten Sie kein Passwort angefordert haben, ignorieren Sie diese E-Mail.
|
||||
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
|
||||
|
||||
<p>Mit freundlichen Grüßen</p>
|
||||
<p>Ihr Team von Digitale Agentur</p>
|
||||
</mj-text>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<link rel="shortcut icon" type="image/x-icon" href="{% static 'users/img/favicon.png' %}">
|
||||
<title>Digitale Agentur</title>
|
||||
|
||||
<!-- Custom fonts for this template-->
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
<br />
|
||||
Weitere Informationen erhalten Sie in unserem Wiki <a href="https://wiki.digitale-agentur.com/">https://wiki.digitale-agentur.com/</a> oder per E-Mail an support@digitale-agentur.com!
|
||||
</p>
|
||||
<p>Weitere Informationen erhalten Sie von Ihrem Agenturleiter. Vielen Dank, dass Sie die Plattform <b>Digitale Agentur</b> nutzen!</p>
|
||||
|
||||
<p>Mit freundlichen Grüßen</p>
|
||||
<p>Ihr Team von Digitale Agentur</p>
|
||||
</mj-text>
|
||||
|
|
|
|||
|
|
@ -3,16 +3,16 @@
|
|||
{% block content %}
|
||||
<div class="content-section col-6">
|
||||
<h3>Supportanfrage stellen</h3>
|
||||
<small>Haben Sie schon in unserem <a href="https://wiki.digitale-agentur.com/" target="_blank">Wiki</a> nachgesehen? Dort finden Sie viele Tipps und Anregungen!</small>
|
||||
<hr>
|
||||
<form method="POST" enctype="multipart/form-data">
|
||||
{% csrf_token %}
|
||||
{{form|crispy}}
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-success">Supportanfrage verschicken</button>
|
||||
<a href="{% url 'users-management' %}" class="btn btn-success">Abbrechen</a>
|
||||
<a href="{% url 'users-dashboard' %}" class="btn btn-success">Abbrechen</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ class UsersAddProfileForm(forms.ModelForm):
|
|||
h = self.cleaned_data.get('height')
|
||||
image = Image.open(photo.image)
|
||||
cropped_image = image.crop((x, y, w+x, h+y))
|
||||
resized_image = cropped_image.resize((560, 560), Image.ANTIALIAS)
|
||||
resized_image = cropped_image.resize((300, 300), Image.ANTIALIAS)
|
||||
resized_image.save(photo.image.path)
|
||||
return photo
|
||||
except:
|
||||
|
|
@ -93,8 +93,8 @@ class AgencyUpdateForm(forms.ModelForm):
|
|||
image = Image.open(photo.agencypic)
|
||||
rotatet_image = image.rotate(rotation, expand=True)
|
||||
cropped_image = rotatet_image.crop((x, y, w+x, h+y))
|
||||
resized_image = cropped_image.resize((1500, 750), Image.ANTIALIAS)
|
||||
resized_image.save(photo.agencypic.path)
|
||||
#resized_image = cropped_image.resize((w, h), Image.ANTIALIAS)
|
||||
cropped_image.save(photo.agencypic.path)
|
||||
return photo
|
||||
except:
|
||||
print("no photo")
|
||||
|
|
|
|||
Loading…
Reference in New Issue