Zwischencommit Absence

This commit is contained in:
holger.trampe 2020-05-05 00:35:06 +02:00
parent 37070e045d
commit ce2bc15b61
22 changed files with 844 additions and 59 deletions

View File

@ -75,11 +75,21 @@ def area_neworder(request):
tempuser = User.objects.get(pk=request.GET['userid'])
neworderdata = json.loads(request.GET['finalod'])
for ele in neworderdata:
prio = list(Prio.objects.filter(user__pk=request.GET['userid'], task__pk=ele['id']))[0]
task = Tasks.objects.get(pk=ele['id'])
if(task.agency == request.user.profile.agency):
prio.prio = ele['neworder']
prio.save()
print(request.GET['userid'])
print(ele)
prio = Prio.objects.filter(user__pk=request.GET['userid'], task__pk=ele['id'])
# PRIO FOUND
if(len(prio) > 0):
task = Tasks.objects.get(pk=ele['id'])
if(task.agency == request.user.profile.agency):
prio[0].prio = ele['neworder']
prio[0].save()
# NO PRIO FOUND - CREATE, SET NEW ORDER AND SAVE
else:
task = Tasks.objects.get(pk=ele['id'])
if(task.agency == request.user.profile.agency):
newprio = Prio(user=tempuser, task=Tasks.objects.get(pk=ele['id']), prio=ele['neworder']).save()
return HttpResponse("UPDATED")
else:
return HttpResponse("Request method is not a GET")

View File

@ -11,7 +11,7 @@
<hr>
<h5>Ausstehende Einladungen</h5>
<div class="table-responsive">
<div class="table-responsive mt-2">
<table class="table table-hover">
<thead>
<tr>
@ -38,7 +38,8 @@
<hr>
<h5>Agenturen im Verbund{% if request.user.profile.showtooltips %}&nbsp;<small><i data-toggle="tooltip" data-placement="top" title="Verwalten Sie die Agenturen in Ihrem Verbund. Wählen Sie aus, ob Agenturen nur Mitglied sind oder ob sie Inhalte in den Verbund teilen dürfen. Alternativ können Sie eine Agentur als Administratives Mitglied festlegen. Dann kann diese Agentur ebenfalls alle Einstellungen des Agenturverbunds anpassen." class="far fa-question-circle"></i></small>{% endif %}</h5>
<div class="table-responsive">
{% if request.user.profile.agency in agn.adminagencys.all %}
<div class="table-responsive mt-2">
<table class="table hover" id="agnetworkagencys">
<thead>
<tr>
@ -76,7 +77,33 @@
</tbody>
</table>
</div>
{% else %}
<div class="table-responsive mt-2">
<table class="table hover" id="agnetworkagencys_onlyview">
<thead>
<tr>
<th scope="col">Agenturname</th>
<th scope="col">Rechte</th>
</tr>
</thead>
<tbody>
{% for agn_s in allagofagn %}
<tr id="agn_{{agn_s.pk}}">
<td>{{agn_s.name}}</td>
<td>
{% if agn_s in agn.adminagencys.all %}Administratives Mitglied
{% elif agn_s in agn.members.all %}Mitglied
{% elif agn_s in agn.sharemembers.all %}Inhalte teilen
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
</div>
@ -131,7 +158,7 @@
<script type="text/javascript">
$(document).ready(function(){
$('#agnetworkagencys').DataTable({
$('#agnetworkagencys_onlyview').DataTable({
"language": {
"search" : "Suche",
"info": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
@ -149,11 +176,31 @@
"className" : "btn-danger"
}
});
{% if request.user.profile.agency in agn.adminagencys.all %}
$('#agnetworkagencys').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"
},
},
"buttons" : {
"className" : "btn-danger"
}
});
{% endif %}
});
{% if request.user.profile.agency in agn.adminagencys.all %}
var workingagid = "";
function updateAgAgnRights(agency, newstatus){
$.ajax(
{
@ -219,5 +266,6 @@
$("#agname").html(name);
$("#delAgFromAgn").modal("toggle");
}
{% endif %}
</script>
{% endblock content %}

View File

@ -25,7 +25,7 @@
{% getoutstandinginvites agn.pk as outstanding %}
{% ifaginadminagn agn.pk request.user.profile.agency.pk as is_adminag %}
<tr id="agn_{{agn.pk}}">
<td>{% if is_adminag %} <a href="{% url 'managagn' agn.pk %}">{% endif %}{{agn.name}}{% if is_adminag %}</a>{% endif %}</td>
<td><a href="{% url 'managagn' agn.pk %}">{{agn.name}}</a></td>
<td>
{% if is_adminag %}
<a href="#" onclick="javascript:showAgnLink('{{agn.name}}', '{{agn.networkid}}', {{agn.pk}})"><i class="far fa-eye"></i></a>
@ -39,7 +39,7 @@
<td>{{agn.creator.first_name }} {{agn.creator.last_name }}</td>
<td>{{agn.created_on }}</td>
<td>{{agn.lastactivity}}</td>
<td>{% if is_adminag %} <a href="{% url 'managagn' agn.pk %}">{% endif %} {% if outstanding %}<i class="fas fa-info-circle" data-toggle="tooltip" data-placement="top" title="Es gibt ausstehende Einladung."></i> {% endif %}{{agsum}}{% if is_adminag %}</a>{% endif %}</td>
<td><a href="{% url 'managagn' agn.pk %}">{% if outstanding %}<i class="fas fa-info-circle" data-toggle="tooltip" data-placement="top" title="Es gibt ausstehende Einladung."></i> {% endif %}{{agsum}}</a></td>
<td>{{agn.standards.all|length}}</td>
<td>
{% if is_adminag %}

View File

@ -12,9 +12,6 @@
{% getsumofallag agn.pk as agsum %}
{% getsumofallstandards agn.pk as ag_standardsum %}
<h6><b>Gründeragentur</b> {{agn.creator_agency.name }}</h6>
<h6><b>Gegründet von</b> {{agn.creator.first_name }} {{agn.creator.last_name }}</h6>
<h6><b>Grüdungsdatum</b> {{agn.created_on }}</h6>
@ -32,14 +29,58 @@
{% for a in agn.adminagencys.all %}
&nbsp;{{a.name}}{% if forloop.counter < agn.adminagencys.all|length %},{% endif %}{% endfor %}
<br />
<a href="#\" onclick="javascript:showHiddenAgencys()" style=""><b>Mitgliedsagenturen betrachten</b></a>
{% if agn.members.all|length > 0 or agn.sharemembers.all|length %}
<a href="#\" onclick="javascript:showHiddenAgencys()" style=""><b id="textinfomembers">Mitgliedsagenturen betrachten</b></a>
<span id="agencys_of_ag" style="display: none;">
<br />
{% for a in agn.members.all %}
{{a.name}}{% if forloop.counter < agn.members.all|length %},{% endif %}{% endfor %}{% if agn.sharemembers.all|length > 0 %},&nbsp;{% endif %}{% for a in agn.sharemembers.all %}{{a.name}}{% if forloop.counter < agn.sharemembers.all|length %},
{% endif %}
{% endfor %}
</span>
<hr>
<div class="table-responsive mt-2">
<table class="table hover" id="agnetworkagencys_onlyview">
<thead>
<tr>
<th scope="col">Agenturname</th>
<th scope="col">Rechte</th>
</tr>
</thead>
<tbody>
{% for agn_s in agn.adminagencys.all %}
<tr id="agn_{{agn_s.pk}}">
<td>{{agn_s.name}}</td>
<td>
{% if agn_s in agn.adminagencys.all %}Administratives Mitglied
{% elif agn_s in agn.members.all %}Mitglied
{% elif agn_s in agn.sharemembers.all %}Inhalte teilen
{% endif %}
</td>
</tr>
{% endfor %}
{% for agn_s in agn.sharemembers.all %}
<tr id="agn_{{agn_s.pk}}">
<td>{{agn_s.name}}</td>
<td>
{% if agn_s in agn.adminagencys.all %}Administratives Mitglied
{% elif agn_s in agn.members.all %}Mitglied
{% elif agn_s in agn.sharemembers.all %}Inhalte teilen
{% endif %}
</td>
</tr>
{% endfor %}
{% for agn_s in agn.members.all %}
<tr id="agn_{{agn_s.pk}}">
<td>{{agn_s.name}}</td>
<td>
{% if agn_s in agn.adminagencys.all %}Administratives Mitglied
{% elif agn_s in agn.members.all %}Mitglied
{% elif agn_s in agn.sharemembers.all %}Inhalte teilen
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
</span>
</div>
</div>
<script type="text/javascript">
@ -49,12 +90,37 @@
if(hidden_ag){
$("#agencys_of_ag").show();
hidden_ag = false;
$("#textinfomembers").html("Mitgliedsagenturen ausblenden")
}
else{
$("#agencys_of_ag").hide();
$("#textinfomembers").html("Mitgliedsagenturen betrachten")
hidden_ag = true;
}
}
$(document).ready(function(){
$('#agnetworkagencys_onlyview').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"
},
},
"buttons" : {
"className" : "btn-danger"
}
});
});
</script>

View File

@ -18,9 +18,9 @@
<td>{{formfield.label_tag}}</td>
<td>{{formfield}}</td>
<td>
{% if formfield.name == 'module_organigramm' %}
{% if formfield.name == 'module_organigramm' and user.profile.agency.module_organigramm %}
<button type="button" class="btn btn-sm btn-primary" onclick="javascript:$('#modulesettings_{{formfield.name}}').modal('toggle');"><i class="fas fa-cog"></i></button>
{% elif formfield.name == 'module_timemanagement' %}
{% elif formfield.name == 'module_timemanagement' and user.profile.agency.module_timemanagement %}
<button type="button" class="btn btn-sm btn-primary" onclick="javascript:$('#modulesettings_{{formfield.name}}').modal('toggle');"><i class="fas fa-cog"></i></button>
{% endif %}
</td>
@ -54,12 +54,12 @@
{% else %}
Keine Einstellungen vorhanden.
{% endif %}
{% if formfield.name == 'module_organigramm' %}
{% if formfield.name == 'module_organigramm' and user.profile.agency.module_organigramm %}
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Schließen</button>&nbsp;
<button id="" type="button" onclick="javascript:updateOrganigrammSettings()" class="btn btn-success" data-dismiss="modal" >Speichern</button>
</div>
{% elif formfield.name == 'module_timemanagement' %}
{% elif formfield.name == 'module_timemanagement' and user.profile.agency.module_timemanagement %}
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Schließen</button>&nbsp;
<button id="" type="button" onclick="javascript:updateTmSettings()" class="btn btn-success" data-dismiss="modal" >Speichern</button>

View File

@ -183,6 +183,13 @@ def SettingsAgencyModuls(request, context):
agencymoduleform = AgencyModulsForm(request.POST, instance=request.user.profile.agency)
if agencymoduleform.is_valid():
agencymoduleform.save()
# Check, if Timemanagement is deactivate, to deactivate Zeiterfassung
if(request.user.profile.agency.module_timemanagement == False):
ag = request.user.profile.agency
ag.module_timemanagement_ze = False
ag.save()
context['modulform'] = AgencyModulsForm(instance=request.user.profile.agency)
messages.success(request, f'Moduleinstellungen aktualisiert!')
return render(request, 'dasettings/settings.html', context)
@ -632,7 +639,7 @@ def NewUserFirstStep(request):
'support@digitale-agentur.com',
[newuserform.cleaned_data.get('email')],
html_message=msg_html,
fail_silently=False,
fail_silently=True,
)
newuser = newuserform.save(commit=False)
newuser.username = newuser.email

View File

@ -46,7 +46,7 @@ def mainmessageview(request):
'support@digitale-agentur.com',
[targetuser.email],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
if(targetuser.profile.user_messages_push):

Binary file not shown.

View File

@ -15,14 +15,14 @@
{% if request.user.profile.agency.dynamicprofile %}
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle btn-sm mr-1" type="button" id="changeViewDynamic" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span id="view_info_drop_1" style="">Ausführend</span>
<span id="view_info_drop_0" style="">Ausführend</span>
<span id="view_info_drop_2" style="display: none;">Vertretend</span>
<span id="view_info_drop_0" style="display: none;">Verantwortlich</span>
<span id="view_info_drop_1" style="display: none;">Verantwortlich</span>
</button>
<div class="dropdown-menu" aria-labelledby="changeViewDynamic">
<a class="dropdown-item" href="#\" onclick="javascript:changeView(1)">Ausführend</a>
<a class="dropdown-item" href="#\" onclick="javascript:changeView(2)">Vertretend</a>
<a class="dropdown-item" href="#\" onclick="javascript:changeView(0)">Verantwortlich</a>
<div class="dropdown-menu" aria-labelledby="changeViewDynamic" >
<a class="dropdown-item" href="#\" id="view_0" onclick="javascript:changeView(0)">Ausführend</a>
<a class="dropdown-item" href="#\" id="view_2" onclick="javascript:changeView(2)">Vertretend</a>
<a class="dropdown-item" href="#\" id="view_1" onclick="javascript:changeView(1)">Verantwortlich</a>
</div>
</div>
{% endif %}
@ -67,6 +67,7 @@
</div>
</div>
<hr>
{% if request.user.profile.agency.dynamicprofile == False %}
<h4 class="ml-4">{{ user_first_name }} {{ user_last_name }}
{% if request.user.profile.agency.dynamicprofile %}
@ -129,6 +130,55 @@
</tr>
</tbody>
</table>
{% else %}
<div id="tablecontent_orgasingle">
</div>
<!-- LOADER OVERLAY -->
<div id="overlay" style="display: none;">
<div class="loader"></div>
</div>
{% endif %}
<style>
.loader {
position: relative;
border: 7px solid #d3d3d3;
border-radius: 50%;
border-top: 7px solid red;
width: 70px;
height: 70px;
left:50%;
top:35%;
-webkit-animation: spin 1s linear infinite; /* Safari */
animation: spin 1s linear infinite;
}
#overlay{
position: absolute;
top:0px;
left:0px;
width: 100%;
height: 100%;
background: black;
opacity: .4;
}
.container{
position:relative;
height: 300px;
width: 200px;
border:1px solid red;
}
/* Safari */
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
<style>
#orgasingle {
border-collapse: separate;
@ -136,9 +186,60 @@
}
</style>
</div>
{% if request.user.profile.agency.dynamicprofile %}
<script type="text/javascript">
var sortstatus = false;
/*
viewmode
0 - ex
1 - aut
2 - rep
*/
function initialLoad(viewmode=0){
$.ajax({
type: "GET",
url: "{% url 'orga-ajax' %}",
data:{
action : "getrenderedview",
viewmode : viewmode,
viewuser : {{user_id}}
},
beforeSend: function(request) {
$("#overlay").fadeIn();
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
},
success : function(data){
$("#overlay").fadeOut();
$("#tablecontent_orgasingle").html(data)
}
});
}
function changeView(newmode){
$("#view_info_drop_0").hide();
$("#view_info_drop_1").hide();
$("#view_info_drop_2").hide();
$("#view_info_drop_" + newmode).show();
{% if request.user.profile.agency.dynamicprofile %}
initialLoad(newmode);
{% endif %}
}
$( document ).ready(function() {
{% if request.user.profile.agency.dynamicprofile %}
initialLoad()
{% endif %}
});
</script>
{% else %}
<script type="text/javascript">
var sortstatus = false;
var sortablearea_ids = [{% for area in areas %} {{area.pk}},{% endfor %}];
{% if user|usergperm:"usermanager" %}
@ -203,8 +304,6 @@ $( document ).ready(function() {
$(".arrows_area_" + sortablearea_ids[i]).hide();
$( "#sortarea_" + sortablearea_ids[i]).sortable("disable");
}
$(document).find(".view_1").show();
$(document).find("#view_info_1").show();
@ -225,11 +324,9 @@ function changeView(newview){
$(document).find("#view_info_drop_1").hide();
$(document).find("#view_info_drop_2").hide();
$(document).find("#view_info_drop_" + newview).show();
$(document).find("#view_info_" + newview).show();
}
</script>
{% endif %}
{% endblock content %}

View File

@ -0,0 +1,164 @@
{% load counter_tag %}
<h4 class="ml-4">{{ user_first_name }} {{ user_last_name }}
<span>verantwortet:</span>
</h4>
<table class="table" id="orgasingle">
<thead>
<tr >
{% for area in areas %}
<td class="text-center" style="width: 20%; background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 0.3);"><h5 style="color: rgba(0,0,0, 1);"><b ><a style=" color: #000000;"href="{% url 'standard-area' area.pk %}">{{area.name}}</a></b></h5></td>
{% endfor %}
</tr>
</thead>
<tbody>
<tr>
{% for area in areas %}
<td class="text-center" style="background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 0.3)">
<div class="areaCollapseContent" id="sortarea_{{area.pk}}">
{% if request.user.profile.agency.dynamicprofile %}
{% for task in tasks %}
{% isUserInAuth task area user_id as checkIsUserAuth %}
{% if task.area.pk == area.pk and task.visible and checkIsUserAuth %}
<div style="none; background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 1)" class="mb-2 pt-3 pb-1 view_0" id="ele_{{task.pk}}">
<span ><h6 ><a style="color: #FFFFFF;"href="{% url 'standard-task' task.pk %}"><span class="arrows_area_{{area.pk}} ml-4" style="display:none; float: left;"><i class="fas fa-sort"></i></span>{{task.name}}</a></h6></span>
</div>
{% endif %}
{% endfor %}
{% else %}
{% for prio in prios %}
{% if prio.task.area.pk == area.pk and prio.task.visible %}
<div style="background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 1)" class="mb-2 pt-3 pb-1 " id="ele_{{prio.task.pk}}">
<span ><h6 ><a style=" color: #FFFFFF;"href="{% url 'standard-task' prio.task.pk %}"><span class="arrows_area_{{area.pk}} ml-4" style="display:none; float: left;"><i class="fas fa-sort"></i></span>{{prio.task.name}}</a></h6></span>
</div>
{% endif %}
{% endfor %}
</div>
</td>
{% endif %}
{% endfor %}
</tr>
</tbody>
</table>
<script type="text/javascript">
var sortstatus = false;
var sortablearea_ids = [{% for area in areas %} {{area.pk}},{% endfor %}];
{% if user|usergperm:"usermanager" %}
{% for area in areas %}
//Initial function for draggable areas
$( function() {
$( "#sortarea_{{area.pk}}" ).sortable
({
axis:"y",
update: function( event, ui )
{
datatoserver = [];
var rows = $( "#sortarea_{{area.pk}}" ).sortable( "widget" )[0]['children'];
for(i = 0; i < rows.length; i++){
tempid = rows[i]['id'].split("_")[1];
datatoserver.push({"id" : tempid, "neworder" : i});
}
console.log(datatoserver)
$.ajax(
{
type: "GET",
url: "/areas/updateorder",
data:{
action: "newtaskorder",
finalod : JSON.stringify(datatoserver),
userid : {{user_id}}
},
success: function( data ){}
});
}
});
});
{% endfor %}
function activateChangeTaskOrder(){
//Initial function for draggable areas
if(sortstatus == false){
sortstatus = true;
for(i = 0; i < sortablearea_ids.length; i++){
$("#changingorder").show();
$("#activatechangingorder").hide();
$(".arrows_area_" + sortablearea_ids[i]).show();
$( "#sortarea_" + sortablearea_ids[i] ).sortable("enable");
}
}
else{
sortstatus = false;
for(i = 0; i < sortablearea_ids.length; i++){
$("#changingorder").hide();
$("#activatechangingorder").show();
$(".arrows_area_" + sortablearea_ids[i]).hide();
$( "#sortarea_" + sortablearea_ids[i]).sortable("disable");
}
}
}
{% endif %}
/*
viewmode
0 - ex
1 - aut
2 - rep
*/
function initialLoad(viewmode=0){
$.ajax({
type: "GET",
url: "{% url 'orga-ajax' %}",
data:{
action : "getrenderedview",
viewmode : viewmode,
viewuser : {{user_id}}
},
beforeSend: function(request) {
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
$("#overlay").fadeIn();
},
success : function(data){
$("#overlay").fadeOut();
$("#tablecontent_orgasingle").html(data);
}
});
}
$( document ).ready(function() {
for(i = 0; i < sortablearea_ids.length; i++){
$(".arrows_area_" + sortablearea_ids[i]).hide();
$( "#sortarea_" + sortablearea_ids[i]).sortable("disable");
}
});
//function changeView(newview){
/*
$(document).find(".view_0").hide();
$(document).find(".view_1").hide();
$(document).find(".view_2").hide();
$(document).find(".view_" + newview).show();
$(document).find("#view_info_0").hide();
$(document).find("#view_info_1").hide();
$(document).find("#view_info_2").hide();
$(document).find("#view_info_drop_0").hide();
$(document).find("#view_info_drop_1").hide();
$(document).find("#view_info_drop_2").hide();
$(document).find("#view_info_drop_" + newview).show();
$(document).find("#view_info_" + newview).show();
*/
//}
</script>

View File

@ -0,0 +1 @@
<h3>Fehler beim Laden der Tabelle!</h3>

View File

@ -0,0 +1,163 @@
{% load counter_tag %}
<h4 class="ml-4">{{ user_first_name }} {{ user_last_name }}
<span>führt aus:</span>
</h4>
<table class="table" id="orgasingle">
<thead>
<tr >
{% for area in areas %}
<td class="text-center" style="width: 20%; background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 0.3);"><h5 style="color: rgba(0,0,0, 1);"><b ><a style=" color: #000000;"href="{% url 'standard-area' area.pk %}">{{area.name}}</a></b></h5></td>
{% endfor %}
</tr>
</thead>
<tbody>
<tr>
{% for area in areas %}
<td class="text-center" style="background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 0.3)">
<div class="areaCollapseContent" id="sortarea_{{area.pk}}">
{% if request.user.profile.agency.dynamicprofile %}
{% for task in tasks %}
{% isUserInEx task area user_id as checkIsUserEx %}
{% if task.area.pk == area.pk and task.visible and checkIsUserEx %}
<div style="background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 1)" class="mb-2 pt-3 pb-1 view_1" id="ele_{{task.pk}}">
<span ><h6 ><a style=" color: #FFFFFF;"href="{% url 'standard-task' task.pk %}"><span class="arrows_area_{{area.pk}} ml-4" style="display: none; float: left;"><i class="fas fa-sort"></i></span>{{task.name}}</a></h6></span>
</div>
{% endif %}
{% endfor %}
{% else %}
{% for prio in prios %}
{% if prio.task.area.pk == area.pk and prio.task.visible %}
<div style="background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 1)" class="mb-2 pt-3 pb-1 " id="ele_{{prio.task.pk}}">
<span ><h6 ><a style=" color: #FFFFFF;"href="{% url 'standard-task' prio.task.pk %}"><span class="arrows_area_{{area.pk}} ml-4" style="float: left;"><i class="fas fa-sort"></i></span>{{prio.task.name}}</a></h6></span>
</div>
{% endif %}
{% endfor %}
</div>
</td>
{% endif %}
{% endfor %}
</tr>
</tbody>
</table>
<script type="text/javascript">
var sortstatus = false;
var sortablearea_ids = [{% for area in areas %} {{area.pk}},{% endfor %}];
{% if user|usergperm:"usermanager" %}
{% for area in areas %}
//Initial function for draggable areas
$( function() {
$( "#sortarea_{{area.pk}}" ).sortable
({
axis:"y",
update: function( event, ui )
{
datatoserver = [];
var rows = $( "#sortarea_{{area.pk}}" ).sortable( "widget" )[0]['children'];
for(i = 0; i < rows.length; i++){
tempid = rows[i]['id'].split("_")[1];
datatoserver.push({"id" : tempid, "neworder" : i});
}
$.ajax(
{
type: "GET",
url: "/areas/updateorder",
data:{
action: "newtaskorder",
finalod : JSON.stringify(datatoserver),
userid : {{user_id}}
},
success: function( data ){}
});
}
});
});
{% endfor %}
function activateChangeTaskOrder(){
//Initial function for draggable areas
if(sortstatus == false){
sortstatus = true;
for(i = 0; i < sortablearea_ids.length; i++){
$("#changingorder").show();
$("#activatechangingorder").hide();
$(".arrows_area_" + sortablearea_ids[i]).show();
$( "#sortarea_" + sortablearea_ids[i] ).sortable("enable");
}
}
else{
sortstatus = false;
for(i = 0; i < sortablearea_ids.length; i++){
$("#changingorder").hide();
$("#activatechangingorder").show();
$(".arrows_area_" + sortablearea_ids[i]).hide();
$( "#sortarea_" + sortablearea_ids[i]).sortable("disable");
}
}
}
{% endif %}
/*
viewmode
0 - ex
1 - aut
2 - rep
*/
function initialLoad(viewmode=0){
$.ajax({
type: "GET",
url: "{% url 'orga-ajax' %}",
data:{
action : "getrenderedview",
viewmode : viewmode,
viewuser : {{user_id}}
},
beforeSend: function(request) {
$("#overlay").fadeIn();
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
},
success : function(data){
$("#overlay").fadeOut();
$("#tablecontent_orgasingle").html(data)
}
});
}
$( document ).ready(function() {
for(i = 0; i < sortablearea_ids.length; i++){
$(".arrows_area_" + sortablearea_ids[i]).hide();
$( "#sortarea_" + sortablearea_ids[i]).sortable("disable");
}
});
//function changeView(newview){
/*
$(document).find(".view_0").hide();
$(document).find(".view_1").hide();
$(document).find(".view_2").hide();
$(document).find(".view_" + newview).show();
$(document).find("#view_info_0").hide();
$(document).find("#view_info_1").hide();
$(document).find("#view_info_2").hide();
$(document).find("#view_info_drop_0").hide();
$(document).find("#view_info_drop_1").hide();
$(document).find("#view_info_drop_2").hide();
$(document).find("#view_info_drop_" + newview).show();
$(document).find("#view_info_" + newview).show();
*/
//}
</script>

View File

@ -0,0 +1,164 @@
{% load counter_tag %}
<h4 class="ml-4">{{ user_first_name }} {{ user_last_name }}
<span>vertritt:</span>
</h4>
<table class="table" id="orgasingle">
<thead>
<tr >
{% for area in areas %}
<td class="text-center" style="width: 20%; background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 0.3);"><h5 style="color: rgba(0,0,0, 1);"><b ><a style=" color: #000000;"href="{% url 'standard-area' area.pk %}">{{area.name}}</a></b></h5></td>
{% endfor %}
</tr>
</thead>
<tbody>
<tr>
{% for area in areas %}
<td class="text-center" style="background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 0.3)">
<div class="areaCollapseContent" id="sortarea_{{area.pk}}">
{% if request.user.profile.agency.dynamicprofile %}
{% for task in tasks %}
{% isUserInRep task area user_id as checkIsUserRep %}
{% if task.area.pk == area.pk and task.visible and checkIsUserRep %}
<div style="background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 1)" class="mb-2 pt-3 pb-1 view_2" id="ele_{{task.pk}}">
<span ><h6 ><a style=" color: #FFFFFF;"href="{% url 'standard-task' task.pk %}"><span class="arrows_area_{{area.pk}} ml-4" style="display:none; float: left;"><i class="fas fa-sort"></i></span>{{task.name}}</a></h6></span>
</div>
{% endif %}
{% endfor %}
{% else %}
{% for prio in prios %}
{% if prio.task.area.pk == area.pk and prio.task.visible %}
<div style="background-color: rgba({{area.color.0}},{{area.color.1}},{{area.color.2}}, 1)" class="mb-2 pt-3 pb-1 " id="ele_{{prio.task.pk}}">
<span ><h6 ><a style=" color: #FFFFFF;"href="{% url 'standard-task' prio.task.pk %}"><span class="arrows_area_{{area.pk}} ml-4" style="float: left;"><i class="fas fa-sort"></i></span>{{prio.task.name}}</a></h6></span>
</div>
{% endif %}
{% endfor %}
</div>
</td>
{% endif %}
{% endfor %}
</tr>
</tbody>
</table>
<script type="text/javascript">
var sortstatus = false;
var sortablearea_ids = [{% for area in areas %} {{area.pk}},{% endfor %}];
{% if user|usergperm:"usermanager" %}
{% for area in areas %}
//Initial function for draggable areas
$( function() {
$( "#sortarea_{{area.pk}}" ).sortable
({
axis:"y",
update: function( event, ui )
{
datatoserver = [];
var rows = $( "#sortarea_{{area.pk}}" ).sortable( "widget" )[0]['children'];
for(i = 0; i < rows.length; i++){
tempid = rows[i]['id'].split("_")[1];
datatoserver.push({"id" : tempid, "neworder" : i});
}
$.ajax(
{
type: "GET",
url: "/areas/updateorder",
data:{
action: "newtaskorder",
finalod : JSON.stringify(datatoserver),
userid : {{user_id}}
},
success: function( data ){}
});
}
});
});
{% endfor %}
function activateChangeTaskOrder(){
//Initial function for draggable areas
if(sortstatus == false){
sortstatus = true;
for(i = 0; i < sortablearea_ids.length; i++){
$("#changingorder").show();
$("#activatechangingorder").hide();
$(".arrows_area_" + sortablearea_ids[i]).show();
$( "#sortarea_" + sortablearea_ids[i] ).sortable("enable");
}
}
else{
sortstatus = false;
for(i = 0; i < sortablearea_ids.length; i++){
$("#changingorder").hide();
$("#activatechangingorder").show();
$(".arrows_area_" + sortablearea_ids[i]).hide();
$( "#sortarea_" + sortablearea_ids[i]).sortable("disable");
}
}
}
{% endif %}
/*
viewmode
0 - ex
1 - aut
2 - rep
*/
function initialLoad(viewmode=0){
$.ajax({
type: "GET",
url: "{% url 'orga-ajax' %}",
data:{
action : "getrenderedview",
viewmode : viewmode,
viewuser : {{user_id}}
},
beforeSend: function(request) {
$("#overlay").fadeIn();
request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
},
success : function(data){
$("#overlay").fadeOut();
$("#tablecontent_orgasingle").html(data)
}
});
}
$( document ).ready(function() {
for(i = 0; i < sortablearea_ids.length; i++){
$(".arrows_area_" + sortablearea_ids[i]).hide();
$( "#sortarea_" + sortablearea_ids[i]).sortable("disable");
}
});
//function changeView(newview){
/*
$(document).find(".view_0").hide();
$(document).find(".view_1").hide();
$(document).find(".view_2").hide();
$(document).find(".view_" + newview).show();
$(document).find("#view_info_0").hide();
$(document).find("#view_info_1").hide();
$(document).find("#view_info_2").hide();
$(document).find("#view_info_drop_0").hide();
$(document).find("#view_info_drop_1").hide();
$(document).find("#view_info_drop_2").hide();
$(document).find("#view_info_drop_" + newview).show();
$(document).find("#view_info_" + newview).show();
*/
//}
</script>

View File

@ -6,7 +6,8 @@ from . import views
urlpatterns = [
path('', views.mainorga, name='orga-main'),
path('single/<int:pk>', views.singleorga, name='orga-single')
path('single/<int:pk>', views.singleorga, name='orga-single'),
path('orgaajax/', views.OrgaSingleAjax, name='orga-ajax'),
]

View File

@ -102,7 +102,71 @@ def singleorga(request, pk):
return redirect('users-dashboard')
@login_required
def OrgaSingleAjax(request):
data = {}
if request.method == "GET":
if request.GET["action"] == "getrenderedview":
#try:
viewmode = int(request.GET["viewmode"])
viewuser = User.objects.get(pk=request.GET["viewuser"])
prios = Prio.objects.filter(user__pk=viewuser.pk).order_by('prio')
areas = list(Areas.objects.filter(agency__pk=request.user.profile.agency.pk).order_by('areaorder'))
alltasks = Tasks.objects.filter(agency__pk=request.user.profile.agency.pk).order_by('name')
tasks = []
for p in prios:
tasks.append(p.task)
for at in alltasks:
if at not in tasks:
tasks.append(at)
i = 0
for area in areas:
areas[i].hex = areas[i].color
areas[i].color = list(webcolors.hex_to_rgb(areas[i].color))
i += 1
user_first_name = viewuser.first_name
user_last_name = viewuser.last_name
user_id = viewuser.pk
try:
userfuncname = AgencyJob.objects.get(pk=viewuser.profile.func.pk).name
except:
userfuncname = "Nicht vergeben"
if(viewuser.profile.agency == request.user.profile.agency):
context = {
"user_first_name" : viewuser.first_name,
"user_last_name" : viewuser.last_name,
'areas' : areas,
'user_first_name' : user_first_name,
'user_last_name' : user_last_name,
'user_id' : user_id,
'prios' : prios,
'tasks' : tasks
}
# EX
if(viewmode == 0):
return render(request, "orga/orga_single_ex.html", context)
# AUT
elif(viewmode == 1):
return render(request, "orga/orga_single_aut.html", context)
# REP
elif(viewmode == 2):
return render(request, "orga/orga_single_rep.html", context)
#except:
# return render(request, "orga/orga_single_er.html")
else:
return render(request, "orga/orga_single_er.html")
else:
data = {
"success" : False
}
return JsonResponse(data)

View File

@ -1,7 +1,7 @@
{% extends "users/base.html" %}
{% block content %}
{% load counter_tag %}
{% if request.user.profile.agency.module_timemanagement %}
{% if request.user.profile.agency.module_timemanagement_ze %}
<div class="content-section col-12">
<h3>Zeiterfassung&nbsp;<small><i data-toggle="tooltip" data-placement="top" title="Bearbeiten Sie hier Ihre Zeiterfassung." class="far fa-question-circle"></i></small></h3>
<hr>

View File

@ -2,7 +2,7 @@
{% block content %}
{% load crispy_forms_tags %}
{% load counter_tag %}
{% if request.user.profile.agency.module_timemanagement_ze %}
{% if request.user.profile.agency.module_timemanagement %}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<div class="content-section col-12">

View File

@ -154,7 +154,7 @@ def AbsenceManagmenet(request, activemonth=False, activeyear=False):
"activemonth" : activemonth,
"activeyear" : activeyear,
"abscenceform" : AddAbsence(instance=request.user),
"userown" : Absence.objects.filter(agency=request.user.profile.agency, user=request.user).order_by("start")
"userown" : Absence.objects.filter(agency=request.user.profile.agency, user=request.user).order_by("-start")
}
if(request.user.has_perm("users.absencemanager")):

View File

@ -105,7 +105,7 @@ class Agency(models.Model):
module_timemanagement = models.BooleanField(default=False)
module_timemanagement_price = models.FloatField(default=10.0, max_length=9, blank=True)
# Zeiterfassung Ja/Nein
module_timemanagement_ze = models.BooleanField(default=True)
module_timemanagement_ze = models.BooleanField(default=False)
# Steckbrief dynamisch aus Standard

View File

@ -169,7 +169,7 @@ def adjust_group_notifications(instance, action, reverse, model, pk_set, using,
'support@digitale-agentur.com',
[user_touched.email],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
# A USER WAS ADDED TO A GROUP
@ -185,7 +185,7 @@ def adjust_group_notifications(instance, action, reverse, model, pk_set, using,
'support@digitale-agentur.com',
[user_touched.email],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
@ -218,7 +218,7 @@ def save_standard(sender, instance, **kwargs):
'support@digitale-agentur.com',
[user.email],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
if(user.profile.agency_new_standard_push):
@ -259,7 +259,7 @@ def save_news(sender, instance, **kwargs):
'support@digitale-agentur.com',
[user.email],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
if(user.profile.news_push):
@ -306,7 +306,7 @@ def adjust_group_notifications_task(instance, action, reverse, model, pk_set, us
'support@digitale-agentur.com',
[user_touched.email],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
# A USER WAS ADDED TO A GROUP
@ -322,7 +322,7 @@ def adjust_group_notifications_task(instance, action, reverse, model, pk_set, us
'support@digitale-agentur.com',
[user_touched.email],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
@receiver(signal=post_save, sender=AgencyNetworkPreperation)

View File

@ -205,7 +205,7 @@ def registerNewAgency(request):
'support@digitale-agentur.com',
[email],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
'''
return render (request, 'users/registercomplete.html')
@ -254,7 +254,7 @@ class AgencyCreateView(CreateView):
'support@digitale-agentur.com',
[form.cleaned_data.get('email')],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
return super().form_valid(form)
@ -332,7 +332,7 @@ class UsersCreateUser(LoginRequiredMixin, CreateView):
'support@digitale-agentur.com',
[form.cleaned_data.get('email')],
html_message=msg_html,
fail_silently=False,
fail_silently=True,
)
'''
return super().form_valid(form)
@ -817,7 +817,7 @@ def cronactions(request, code):
'support@digitale-agentur.com',
[user.email],
html_message=msg_html,
fail_silently=False
fail_silently=True
)
if(user.profile.news_push):