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']) tempuser = User.objects.get(pk=request.GET['userid'])
neworderdata = json.loads(request.GET['finalod']) neworderdata = json.loads(request.GET['finalod'])
for ele in neworderdata: for ele in neworderdata:
prio = list(Prio.objects.filter(user__pk=request.GET['userid'], task__pk=ele['id']))[0] 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']) task = Tasks.objects.get(pk=ele['id'])
if(task.agency == request.user.profile.agency): if(task.agency == request.user.profile.agency):
prio.prio = ele['neworder'] prio[0].prio = ele['neworder']
prio.save() 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") return HttpResponse("UPDATED")
else: else:
return HttpResponse("Request method is not a GET") return HttpResponse("Request method is not a GET")

View File

@ -11,7 +11,7 @@
<hr> <hr>
<h5>Ausstehende Einladungen</h5> <h5>Ausstehende Einladungen</h5>
<div class="table-responsive"> <div class="table-responsive mt-2">
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
@ -38,7 +38,8 @@
<hr> <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> <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"> <table class="table hover" id="agnetworkagencys">
<thead> <thead>
<tr> <tr>
@ -76,7 +77,33 @@
</tbody> </tbody>
</table> </table>
</div> </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> </div>
@ -131,6 +158,25 @@
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function(){ $(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"
}
});
{% if request.user.profile.agency in agn.adminagencys.all %}
$('#agnetworkagencys').DataTable({ $('#agnetworkagencys').DataTable({
"language": { "language": {
"search" : "Suche", "search" : "Suche",
@ -149,9 +195,10 @@
"className" : "btn-danger" "className" : "btn-danger"
} }
}); });
{% endif %}
}); });
{% if request.user.profile.agency in agn.adminagencys.all %}
var workingagid = ""; var workingagid = "";
function updateAgAgnRights(agency, newstatus){ function updateAgAgnRights(agency, newstatus){
@ -219,5 +266,6 @@
$("#agname").html(name); $("#agname").html(name);
$("#delAgFromAgn").modal("toggle"); $("#delAgFromAgn").modal("toggle");
} }
{% endif %}
</script> </script>
{% endblock content %} {% endblock content %}

View File

@ -25,7 +25,7 @@
{% getoutstandinginvites agn.pk as outstanding %} {% getoutstandinginvites agn.pk as outstanding %}
{% ifaginadminagn agn.pk request.user.profile.agency.pk as is_adminag %} {% ifaginadminagn agn.pk request.user.profile.agency.pk as is_adminag %}
<tr id="agn_{{agn.pk}}"> <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> <td>
{% if is_adminag %} {% if is_adminag %}
<a href="#" onclick="javascript:showAgnLink('{{agn.name}}', '{{agn.networkid}}', {{agn.pk}})"><i class="far fa-eye"></i></a> <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.creator.first_name }} {{agn.creator.last_name }}</td>
<td>{{agn.created_on }}</td> <td>{{agn.created_on }}</td>
<td>{{agn.lastactivity}}</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>{{agn.standards.all|length}}</td>
<td> <td>
{% if is_adminag %} {% if is_adminag %}

View File

@ -12,9 +12,6 @@
{% getsumofallag agn.pk as agsum %} {% getsumofallag agn.pk as agsum %}
{% getsumofallstandards agn.pk as ag_standardsum %} {% getsumofallstandards agn.pk as ag_standardsum %}
<h6><b>Gründeragentur</b> {{agn.creator_agency.name }}</h6> <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>Gegründet von</b> {{agn.creator.first_name }} {{agn.creator.last_name }}</h6>
<h6><b>Grüdungsdatum</b> {{agn.created_on }}</h6> <h6><b>Grüdungsdatum</b> {{agn.created_on }}</h6>
@ -32,13 +29,57 @@
{% for a in agn.adminagencys.all %} {% for a in agn.adminagencys.all %}
&nbsp;{{a.name}}{% if forloop.counter < agn.adminagencys.all|length %},{% endif %}{% endfor %} &nbsp;{{a.name}}{% if forloop.counter < agn.adminagencys.all|length %},{% endif %}{% endfor %}
<br /> <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;"> <span id="agencys_of_ag" style="display: none;">
<br /> <hr>
{% for a in agn.members.all %} <div class="table-responsive mt-2">
{{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 %}, <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 %} {% endif %}
</td>
</tr>
{% endfor %} {% 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> </span>
</div> </div>
</div> </div>
@ -49,12 +90,37 @@
if(hidden_ag){ if(hidden_ag){
$("#agencys_of_ag").show(); $("#agencys_of_ag").show();
hidden_ag = false; hidden_ag = false;
$("#textinfomembers").html("Mitgliedsagenturen ausblenden")
} }
else{ else{
$("#agencys_of_ag").hide(); $("#agencys_of_ag").hide();
$("#textinfomembers").html("Mitgliedsagenturen betrachten")
hidden_ag = true; 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> </script>

View File

@ -18,9 +18,9 @@
<td>{{formfield.label_tag}}</td> <td>{{formfield.label_tag}}</td>
<td>{{formfield}}</td> <td>{{formfield}}</td>
<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> <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> <button type="button" class="btn btn-sm btn-primary" onclick="javascript:$('#modulesettings_{{formfield.name}}').modal('toggle');"><i class="fas fa-cog"></i></button>
{% endif %} {% endif %}
</td> </td>
@ -54,12 +54,12 @@
{% else %} {% else %}
Keine Einstellungen vorhanden. Keine Einstellungen vorhanden.
{% endif %} {% endif %}
{% if formfield.name == 'module_organigramm' %} {% if formfield.name == 'module_organigramm' and user.profile.agency.module_organigramm %}
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Schließen</button>&nbsp; <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> <button id="" type="button" onclick="javascript:updateOrganigrammSettings()" class="btn btn-success" data-dismiss="modal" >Speichern</button>
</div> </div>
{% elif formfield.name == 'module_timemanagement' %} {% elif formfield.name == 'module_timemanagement' and user.profile.agency.module_timemanagement %}
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Schließen</button>&nbsp; <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> <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) agencymoduleform = AgencyModulsForm(request.POST, instance=request.user.profile.agency)
if agencymoduleform.is_valid(): if agencymoduleform.is_valid():
agencymoduleform.save() 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) context['modulform'] = AgencyModulsForm(instance=request.user.profile.agency)
messages.success(request, f'Moduleinstellungen aktualisiert!') messages.success(request, f'Moduleinstellungen aktualisiert!')
return render(request, 'dasettings/settings.html', context) return render(request, 'dasettings/settings.html', context)
@ -632,7 +639,7 @@ def NewUserFirstStep(request):
'support@digitale-agentur.com', 'support@digitale-agentur.com',
[newuserform.cleaned_data.get('email')], [newuserform.cleaned_data.get('email')],
html_message=msg_html, html_message=msg_html,
fail_silently=False, fail_silently=True,
) )
newuser = newuserform.save(commit=False) newuser = newuserform.save(commit=False)
newuser.username = newuser.email newuser.username = newuser.email

View File

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

Binary file not shown.

View File

@ -15,14 +15,14 @@
{% if request.user.profile.agency.dynamicprofile %} {% if request.user.profile.agency.dynamicprofile %}
<div class="dropdown"> <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"> <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_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> </button>
<div class="dropdown-menu" aria-labelledby="changeViewDynamic" > <div class="dropdown-menu" aria-labelledby="changeViewDynamic" >
<a class="dropdown-item" href="#\" onclick="javascript:changeView(1)">Ausführend</a> <a class="dropdown-item" href="#\" id="view_0" onclick="javascript:changeView(0)">Ausführend</a>
<a class="dropdown-item" href="#\" onclick="javascript:changeView(2)">Vertretend</a> <a class="dropdown-item" href="#\" id="view_2" onclick="javascript:changeView(2)">Vertretend</a>
<a class="dropdown-item" href="#\" onclick="javascript:changeView(0)">Verantwortlich</a> <a class="dropdown-item" href="#\" id="view_1" onclick="javascript:changeView(1)">Verantwortlich</a>
</div> </div>
</div> </div>
{% endif %} {% endif %}
@ -67,6 +67,7 @@
</div> </div>
</div> </div>
<hr> <hr>
{% if request.user.profile.agency.dynamicprofile == False %}
<h4 class="ml-4">{{ user_first_name }} {{ user_last_name }} <h4 class="ml-4">{{ user_first_name }} {{ user_last_name }}
{% if request.user.profile.agency.dynamicprofile %} {% if request.user.profile.agency.dynamicprofile %}
@ -129,6 +130,55 @@
</tr> </tr>
</tbody> </tbody>
</table> </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> <style>
#orgasingle { #orgasingle {
border-collapse: separate; border-collapse: separate;
@ -136,7 +186,58 @@
} }
</style> </style>
</div> </div>
{% if request.user.profile.agency.dynamicprofile %}
<script type="text/javascript">
/*
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"> <script type="text/javascript">
var sortstatus = false; var sortstatus = false;
var sortablearea_ids = [{% for area in areas %} {{area.pk}},{% endfor %}]; var sortablearea_ids = [{% for area in areas %} {{area.pk}},{% endfor %}];
@ -203,8 +304,6 @@ $( document ).ready(function() {
$(".arrows_area_" + sortablearea_ids[i]).hide(); $(".arrows_area_" + sortablearea_ids[i]).hide();
$( "#sortarea_" + sortablearea_ids[i]).sortable("disable"); $( "#sortarea_" + sortablearea_ids[i]).sortable("disable");
} }
$(document).find(".view_1").show(); $(document).find(".view_1").show();
$(document).find("#view_info_1").show(); $(document).find("#view_info_1").show();
@ -226,10 +325,8 @@ function changeView(newview){
$(document).find("#view_info_drop_2").hide(); $(document).find("#view_info_drop_2").hide();
$(document).find("#view_info_drop_" + newview).show(); $(document).find("#view_info_drop_" + newview).show();
$(document).find("#view_info_" + newview).show(); $(document).find("#view_info_" + newview).show();
} }
</script> </script>
{% endif %}
{% endblock content %} {% 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 = [ urlpatterns = [
path('', views.mainorga, name='orga-main'), 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') 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" %} {% extends "users/base.html" %}
{% block content %} {% block content %}
{% load counter_tag %} {% load counter_tag %}
{% if request.user.profile.agency.module_timemanagement %} {% if request.user.profile.agency.module_timemanagement_ze %}
<div class="content-section col-12"> <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> <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> <hr>

View File

@ -2,7 +2,7 @@
{% block content %} {% block content %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% load counter_tag %} {% 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"> <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<div class="content-section col-12"> <div class="content-section col-12">

View File

@ -154,7 +154,7 @@ def AbsenceManagmenet(request, activemonth=False, activeyear=False):
"activemonth" : activemonth, "activemonth" : activemonth,
"activeyear" : activeyear, "activeyear" : activeyear,
"abscenceform" : AddAbsence(instance=request.user), "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")): 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 = models.BooleanField(default=False)
module_timemanagement_price = models.FloatField(default=10.0, max_length=9, blank=True) module_timemanagement_price = models.FloatField(default=10.0, max_length=9, blank=True)
# Zeiterfassung Ja/Nein # Zeiterfassung Ja/Nein
module_timemanagement_ze = models.BooleanField(default=True) module_timemanagement_ze = models.BooleanField(default=False)
# Steckbrief dynamisch aus Standard # 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', 'support@digitale-agentur.com',
[user_touched.email], [user_touched.email],
html_message=msg_html, html_message=msg_html,
fail_silently=False fail_silently=True
) )
# A USER WAS ADDED TO A GROUP # 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', 'support@digitale-agentur.com',
[user_touched.email], [user_touched.email],
html_message=msg_html, html_message=msg_html,
fail_silently=False fail_silently=True
) )
@ -218,7 +218,7 @@ def save_standard(sender, instance, **kwargs):
'support@digitale-agentur.com', 'support@digitale-agentur.com',
[user.email], [user.email],
html_message=msg_html, html_message=msg_html,
fail_silently=False fail_silently=True
) )
if(user.profile.agency_new_standard_push): if(user.profile.agency_new_standard_push):
@ -259,7 +259,7 @@ def save_news(sender, instance, **kwargs):
'support@digitale-agentur.com', 'support@digitale-agentur.com',
[user.email], [user.email],
html_message=msg_html, html_message=msg_html,
fail_silently=False fail_silently=True
) )
if(user.profile.news_push): 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', 'support@digitale-agentur.com',
[user_touched.email], [user_touched.email],
html_message=msg_html, html_message=msg_html,
fail_silently=False fail_silently=True
) )
# A USER WAS ADDED TO A GROUP # 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', 'support@digitale-agentur.com',
[user_touched.email], [user_touched.email],
html_message=msg_html, html_message=msg_html,
fail_silently=False fail_silently=True
) )
@receiver(signal=post_save, sender=AgencyNetworkPreperation) @receiver(signal=post_save, sender=AgencyNetworkPreperation)

View File

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