Abwesenheiten Googlekalender fertig

This commit is contained in:
holger.trampe 2021-01-07 16:27:14 +01:00
parent 31cf2714f8
commit 080b328165
6 changed files with 147 additions and 18 deletions

View File

@ -42,12 +42,17 @@
<hr> <hr>
<h4 >Externer Zugriff{% if request.user.profile.showtooltips %}&nbsp;<small><i data-toggle="tooltip" data-placement="top" title="Legen Sie fest, wie Mitarbeiter auf die Abwesenheitsinformationen zugreifen können. Sollten Sie hier den öffentlichen Zugriff ohne Authentifizierung wählen, dürfen die Links nicht weitergegeben werden, da sonst Unbefugte Zugriff auf agenturinterne Daten haben. Ihre Agentur trägt für die Geheimhaltung dieser Links die Verantwortung." class="far fa-question-circle"></i></small>{% endif %} <h4 >Externer Zugriff{% if request.user.profile.showtooltips %}&nbsp;<small><i data-toggle="tooltip" data-placement="top" title="Legen Sie fest, wie Mitarbeiter auf die Abwesenheitsinformationen zugreifen können. Sollten Sie hier den öffentlichen Zugriff ohne Authentifizierung wählen, dürfen die Links nicht weitergegeben werden, da sonst Unbefugte Zugriff auf agenturinterne Daten haben. Ihre Agentur trägt für die Geheimhaltung dieser Links die Verantwortung." class="far fa-question-circle"></i></small>{% endif %}
</h4> </h4>
<div class="form-check"> <!--<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="allowExternalAccess" {% if request.user.profile.agency.agencycal_publicstatus == 1 %} checked {% endif %} onchange="javascript:updateExAccess()"> <input class="form-check-input" type="checkbox" value="" id="allowExternalAccess" {% if request.user.profile.agency.agencycal_publicstatus == 1 %} checked {% endif %} onchange="javascript:updateExAccessModal()">
<label class="form-check-label" for="allowExternalAccess"> <label class="form-check-label" for="allowExternalAccess">
Öffentlichen Zugriff ohne Anmeldung erlauben (z.B. für Google-Kalender) Öffentlichen Zugriff ohne Anmeldung erlauben (z.B. für Google-Kalender)
</label> </label>
</div> </div>-->
{% if request.user.profile.agency.agencycal_publicstatus == 1 %}
Externer Zugriff erlaubt. <button type="button" class="btn btn-primary" onclick="javascript:closeExAccessModal()">Sperren</button>
{% else %}
Externer Zugriff gesperrt. <button type="button" class="btn btn-primary" onclick="javascript:allowExAccess()">Erlauben</button>
{% endif %}
<hr> <hr>
<a class="btn btn-primary mb-2" href="{% url 'tm-managemenetfreedays' %}">Feiertage bearbeiten</a> <a class="btn btn-primary mb-2" href="{% url 'tm-managemenetfreedays' %}">Feiertage bearbeiten</a>
@ -56,13 +61,17 @@
<script type="text/javascript"> <script type="text/javascript">
function updateExAccess(){ function updateExAccessModal(){
$("#externalAccessConfirm").modal("toggle");
}
function closeExAccessModal(){
$.ajax( $.ajax(
{ {
type: "GET", type: "GET",
url: "{% url 'dasettings-ajax' %}", url: "{% url 'dasettings-ajax' %}",
data:{ data:{
newvalue : $("#allowExternalAccess").prop("checked"), newvalue : "false",
agency : {{request.user.profile.agency.pk}}, agency : {{request.user.profile.agency.pk}},
action : 'changeexternalaccess' action : 'changeexternalaccess'
}, },
@ -70,7 +79,9 @@
{ {
$("#modulesettings_module_timemanagement").modal("toggle"); $("#modulesettings_module_timemanagement").modal("toggle");
$("#externalAccessUpdate").modal("show"); $("#externalAccessUpdate").modal("show");
$('#externalAccessUpdate').on('hidden.bs.modal', function (e) {
location.href = location.href;
})
} }
}); });

View File

@ -437,13 +437,13 @@ $(document).ready(function(){
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Externer Zugriff aktualisiert</h5> <h5 class="modal-title" id="exampleModalLabel">Externer Zugriff gesperrt</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
Die Zugriffseinstellung für den externen Zugriff wurden aktualisiert. Der externe Zugriff wurde gesperrt.
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Schließen</button> <button type="button" class="btn btn-primary" data-dismiss="modal">Schließen</button>
@ -452,13 +452,79 @@ $(document).ready(function(){
</div> </div>
</div> </div>
<div class="modal fade" id="externalAccessUpdateAllow" tabindex="20" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Externer Zugriff erlaubt</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
Der externe Zugriff ist nun erlaubt. Kopieren Sie die entsprechenden Links unter Abwesenheiten in Ihre Kalender ein.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Schließen</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="externalAccessConfirm" tabindex="20" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Externen Zugriff aktivieren</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
Möchten Sie wirklich den externen Zugriff per Link auf Ihre Abwesenheitsinformationen aktivieren (nötig für z.B. Google-Kalender)? Stellen Sie sicher, dass diese Links nicht an Dritte weitergegeben werden!
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" onclick="javascript:updateExAccess()">Ja, Zugriff aktivieren</button>
<button type="button" class="btn " data-dismiss="modal">Abbrechen</button>
</div>
</div>
</div>
</div>
<script src="https://www.youtube.com/iframe_api"></script> <script src="https://www.youtube.com/iframe_api"></script>
<!-- YOUTUBE PART ENDE --> <!-- YOUTUBE PART ENDE -->
<!-- Abwesenheit -->
<script type="text/javascript">
function allowExAccess(){
$("#modulesettings_module_timemanagement").modal("toggle");
$("#externalAccessConfirm").modal("toggle");
}
function updateExAccess(){
$.ajax(
{
type: "GET",
url: "{% url 'dasettings-ajax' %}",
data:{
newvalue : "true",
agency : {{request.user.profile.agency.pk}},
action : 'changeexternalaccess'
},
success: function( data )
{
$("#externalAccessConfirm").modal("toggle");
$("#externalAccessUpdateAllow").modal("show");
$('#externalAccessUpdateAllow').on('hidden.bs.modal', function (e) {
location.href = location.href;
})
}
});
}
</script>
{% endblock content %} {% endblock content %}

View File

@ -1017,9 +1017,7 @@ def SettingsAjaxRouter(request):
request.user.profile.agency.save() request.user.profile.agency.save()
else: else:
success = False success = False
print("DER NICHT")
return JsonResponse({"success" : success, "data" : data}) return JsonResponse({"success" : success, "data" : data})
else: else:
success = False success = False
@ -1027,7 +1025,7 @@ def SettingsAjaxRouter(request):
def randomStringNum(stringLength=20): def randomStringNum(stringLength=20):
"""Generate a random string of fixed length """ """Generate a random string of fixed length """
lettersAndNumbers = string.ascii_lowercase + string.digits lettersAndNumbers = string.ascii_lowercase + string.digits + string.ascii_uppercase
return ''.join(random.choice(lettersAndNumbers) for i in range(stringLength)) return ''.join(random.choice(lettersAndNumbers) for i in range(stringLength))
@ -1712,10 +1710,9 @@ class BillPlanUpdate(UpdateView):
start_date = month start_date = month
start_date_string = month.strftime("%d.%m.%Y") start_date_string = month.strftime("%d.%m.%Y")
end_date = month + relativedelta(months=plan) end_date = month + relativedelta(days=30)
end_date_string= end_date.strftime("%d.%m.%Y") end_date_string= end_date.strftime("%d.%m.%Y")
voucher_date_today = date.today().strftime("%Y-%m-%d") voucher_date_today = date.today().strftime("%Y-%m-%d")
# TASK: Was passiert bei Änderungen der Agenturdaten? # TASK: Was passiert bei Änderungen der Agenturdaten?

BIN
dump.rdb

Binary file not shown.

View File

@ -42,7 +42,10 @@ urlpatterns = [
path('dacronbill/<slug:code>', views.cronactionsbill, name="cronmainbill"), path('dacronbill/<slug:code>', views.cronactionsbill, name="cronmainbill"),
path('isalive/', views.isAlive, name="isalive"), path('isalive/', views.isAlive, name="isalive"),
path('ics/<int:ag>', views.getICSFile, name="getics"), path('ics/<int:ag>', views.getICSFile, name="getics"),
path('icsall/<int:ag>', views.getICSFileAll, name="geticsall") path('icsall/<int:ag>', views.getICSFileAll, name="geticsall"),
path('icspublic/<slug:code>/<int:ag>', views.getICSFileEx, name="getics"),
path('icspublicall/<slug:code>/<int:ag>', views.getICSFileExAll, name="geticsall"),
] ]

View File

@ -59,7 +59,6 @@ import base64
from django.contrib.auth import authenticate from django.contrib.auth import authenticate
def getICSFile(request, ag): def getICSFile(request, ag):
#if request.user.profile.agency.pk == ag:
if 'HTTP_AUTHORIZATION' in request.META: if 'HTTP_AUTHORIZATION' in request.META:
auth = request.META['HTTP_AUTHORIZATION'].split() auth = request.META['HTTP_AUTHORIZATION'].split()
if len(auth) == 2: if len(auth) == 2:
@ -94,7 +93,6 @@ def getICSFile(request, ag):
def getICSFileAll(request, ag): def getICSFileAll(request, ag):
#if request.user.profile.agency.pk == ag:
if 'HTTP_AUTHORIZATION' in request.META: if 'HTTP_AUTHORIZATION' in request.META:
auth = request.META['HTTP_AUTHORIZATION'].split() auth = request.META['HTTP_AUTHORIZATION'].split()
if len(auth) == 2: if len(auth) == 2:
@ -126,6 +124,60 @@ def getICSFileAll(request, ag):
return response return response
def getICSFileEx(request, code, ag):
try:
agency = Agency.objects.get(pk=ag)
if agency != None and agency.agencycal_publicstatus == 1 and code == agency.agencycalurl:
c = Calendar()
absencedays = Absence.objects.filter(agency=ag)
for ab in absencedays:
e = Event()
e.name = ab.user.first_name + " " + ab.user.last_name + " abwesend "
e.uid = "da-ab-" + str(ab.pk)
e.begin = ab.start
e.end = ab.end
e.allday = True
c.events.add(e)
return HttpResponse(c, content_type='text/calendar')
else:
realm = ""
response = HttpResponse()
response.status_code = 401
return response
except:
realm = ""
response = HttpResponse()
response.status_code = 401
return response
def getICSFileExAll(request, code, ag):
try:
agency = Agency.objects.get(pk=ag)
if agency != None and agency.agencycal_publicstatus == 1 and code == agency.agencycalurl_all:
c = Calendar()
absencedays = Absence.objects.filter(agency=ag)
for ab in absencedays:
e = Event()
e.name = ab.user.first_name + " " + ab.user.last_name + " | " + ab.reason.name
e.uid = "da-ab-" + str(ab.pk)
e.begin = ab.start
e.end = ab.end
e.allday = True
c.events.add(e)
return HttpResponse(c, content_type='text/calendar')
else:
realm = ""
response = HttpResponse()
response.status_code = 401
return response
except:
realm = ""
response = HttpResponse()
response.status_code = 401
return response
''' '''
@ -212,7 +264,7 @@ def randomString(stringLength=10):
def randomStringNum(stringLength=20): def randomStringNum(stringLength=20):
"""Generate a random string of fixed length """ """Generate a random string of fixed length """
lettersAndNumbers = string.ascii_lowercase + string.digits lettersAndNumbers = string.ascii_lowercase + string.digits + string.ascii_uppercase
return ''.join(random.choice(lettersAndNumbers) for i in range(stringLength)) return ''.join(random.choice(lettersAndNumbers) for i in range(stringLength))
@login_required @login_required