Abwesenheiten Googlekalender fertig
This commit is contained in:
parent
31cf2714f8
commit
080b328165
|
|
@ -42,12 +42,17 @@
|
|||
<hr>
|
||||
<h4 >Externer Zugriff{% if request.user.profile.showtooltips %} <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;
|
||||
})
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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">×</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">×</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">×</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 %}
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
|
||||
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue