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>
<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>
<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()">
<!--<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:updateExAccessModal()">
<label class="form-check-label" for="allowExternalAccess">
Öffentlichen Zugriff ohne Anmeldung erlauben (z.B. für Google-Kalender)
</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>
<a class="btn btn-primary mb-2" href="{% url 'tm-managemenetfreedays' %}">Feiertage bearbeiten</a>
@ -56,13 +61,17 @@
<script type="text/javascript">
function updateExAccess(){
function updateExAccessModal(){
$("#externalAccessConfirm").modal("toggle");
}
function closeExAccessModal(){
$.ajax(
{
type: "GET",
url: "{% url 'dasettings-ajax' %}",
data:{
newvalue : $("#allowExternalAccess").prop("checked"),
newvalue : "false",
agency : {{request.user.profile.agency.pk}},
action : 'changeexternalaccess'
},
@ -70,7 +79,9 @@
{
$("#modulesettings_module_timemanagement").modal("toggle");
$("#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-content">
<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">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
Die Zugriffseinstellung für den externen Zugriff wurden aktualisiert.
Der externe Zugriff wurde gesperrt.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Schließen</button>
@ -452,13 +452,79 @@ $(document).ready(function(){
</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>
<!-- 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 %}

View File

@ -1017,9 +1017,7 @@ def SettingsAjaxRouter(request):
request.user.profile.agency.save()
else:
success = False
print("DER NICHT")
return JsonResponse({"success" : success, "data" : data})
else:
success = False
@ -1027,7 +1025,7 @@ def SettingsAjaxRouter(request):
def randomStringNum(stringLength=20):
"""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))
@ -1712,10 +1710,9 @@ class BillPlanUpdate(UpdateView):
start_date = month
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")
voucher_date_today = date.today().strftime("%Y-%m-%d")
# 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('isalive/', views.isAlive, name="isalive"),
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
def getICSFile(request, ag):
#if request.user.profile.agency.pk == ag:
if 'HTTP_AUTHORIZATION' in request.META:
auth = request.META['HTTP_AUTHORIZATION'].split()
if len(auth) == 2:
@ -94,7 +93,6 @@ def getICSFile(request, ag):
def getICSFileAll(request, ag):
#if request.user.profile.agency.pk == ag:
if 'HTTP_AUTHORIZATION' in request.META:
auth = request.META['HTTP_AUTHORIZATION'].split()
if len(auth) == 2:
@ -126,6 +124,60 @@ def getICSFileAll(request, ag):
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):
"""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))
@login_required