From a20c9210ee6614bf73d1ee465e04781b74714772 Mon Sep 17 00:00:00 2001 From: "holger.trampe" Date: Mon, 18 Jan 2021 15:18:41 +0100 Subject: [PATCH] Automatische Neuberechnung fertig --- .../dasettings/data_absence_yeardata.html | 5 +- .../templates/dasettings/user_usprof.html | 11 +- dasettings/views.py | 108 +++++++++++++++++- dump.rdb | Bin 42940 -> 57278 bytes .../timemanagement_singleview.html | 2 +- .../timemanagement_teamview_single.html | 8 +- 6 files changed, 119 insertions(+), 15 deletions(-) diff --git a/dasettings/templates/dasettings/data_absence_yeardata.html b/dasettings/templates/dasettings/data_absence_yeardata.html index 89c9605..57a0f39 100644 --- a/dasettings/templates/dasettings/data_absence_yeardata.html +++ b/dasettings/templates/dasettings/data_absence_yeardata.html @@ -31,4 +31,7 @@ {% endfor %} - \ No newline at end of file + + \ No newline at end of file diff --git a/dasettings/templates/dasettings/user_usprof.html b/dasettings/templates/dasettings/user_usprof.html index 2bc3663..4468ce6 100644 --- a/dasettings/templates/dasettings/user_usprof.html +++ b/dasettings/templates/dasettings/user_usprof.html @@ -395,7 +395,10 @@ + @@ -441,12 +444,14 @@ function saveUpdateTableHolidays(){ userid: {{vieweduser}} }, beforeSend: function(){ + $("#text_recalc").html("Urlaubstage werden neu berechnet. Bitte warten und nicht das Fenster aktualisieren!") + $("#closeCalcButton").hide(); $("#calculatingAbsences").modal("show"); }, success: function( data ) { - - $("#calculatingAbsences").modal("hide"); + $("#text_recalc").html("Es wurden "+data["ab_counter"]+" Abwesenheiten anhand der neuen Infos neu berechnet. ") + $("#closeCalcButton").show(); $("#year_overview").html(data); $("#changeHolidayDataSave").hide(); $("#changeHolidayData").show(); diff --git a/dasettings/views.py b/dasettings/views.py index d83f5b9..5f7fa45 100644 --- a/dasettings/views.py +++ b/dasettings/views.py @@ -43,6 +43,9 @@ import io as BytesIO import base64 from django.http import HttpResponse +from django.db.models.signals import post_save +from users.signals import save_newabsence + def randomString(stringLength=10): """Generate a random string of fixed length """ letters = string.ascii_lowercase @@ -982,6 +985,18 @@ def SettingsAjaxRouter(request): # GET ELEMENTS newHolidayData = request.GET["new_data_info"].split("___") # EVERY ELEMENT GET ID AND SAVE NEW DAY-INFO + user_to_recalculate = User.objects.get(pk=request.GET["userid"]) + # DELETE ALL USED DAYS + absences = Absence.objects.filter(user=user_to_recalculate) + post_save.disconnect(save_newabsence, sender=Absence) + + for ab in absences: + ab.holidays_normal = 0.0 + ab.holidays_rest = 0.0 + ab.holidays_normal_next = 0.0 + ab.holidays_rest_next = 0.0 + ab.save() + for ele in newHolidayData: ele_elements = ele.split("__") @@ -991,20 +1006,33 @@ def SettingsAjaxRouter(request): temp_year = UserYearAbsenceInfo.objects.get(pk=ele_id, agency=request.user.profile.agency) if(ele_type == "nor"): temp_year.days = ele_elements[1] + elif(ele_type == "rest"): temp_year.restdays = ele_elements[1] + + temp_year.days_inuse = 0 temp_year.save() + context = { "user_years" : UserYearAbsenceInfo.objects.filter(user=User.objects.get(pk=request.GET["userid"])), } - user_to_recalculate = User.objects.get(pk=request.GET["userid"]) - + absences = Absence.objects.filter(user=user_to_recalculate) - + ab_counter = 0 + + # RECALCULATE ALL ABSENCES for ab in absences: - getFinalHolidayData(ab) + calculateNewAbsenceDate(ab) + ab_counter += 1 + post_save.connect(save_newabsence, sender=Absence) + tomany = "" + # After Absence checking + for year in UserYearAbsenceInfo.objects.filter(user=User.objects.get(pk=request.GET["userid"])): + if year.days_inuse > year.days+year.restdays: + tomany = "Es sind mehr Abwesenheiten eingetragen als verfügbar. Bitte prüfen Sie die Abwesenheiten des Mitarbeiters." + context.update({"ab_counter" : ab_counter, "tomanyinfo" : tomany}) return render(request, 'dasettings/data_absence_yeardata.html', context) # RESET TIMEMANAGEMENT elif request.method == "GET" and request.GET['action'] == "del_tmdata" : @@ -1040,6 +1068,76 @@ def SettingsAjaxRouter(request): ''' BERECHNUNG URLAUBSTAGE USW. ''' +def calculateNewAbsenceDate(instance): + + newdata = getFinalHolidayData(instance) + + abinfo = list(UserYearAbsenceInfo.objects.filter(user=instance.user, year=instance.start.year))[0] + abinfo_lastyear = "" + abinfo_nextyear = "" + + is_lastyear = False + + abinfo_lastyear = list(UserYearAbsenceInfo.objects.filter(user=instance.user, year=instance.start.year-1)) + if(len(abinfo_lastyear) > 0): + is_lastyear = True + abinfo_lastyear = abinfo_lastyear[0] + + is_nextyear = False + abinfo_nextyear = list(UserYearAbsenceInfo.objects.filter(user=instance.user, year=instance.start.year+1)) + if(len(abinfo_nextyear) > 0): + is_nextyear = True + abinfo_nextyear = abinfo_nextyear[0] + + multiple_info_needays = False + if(hasattr(newdata[3], "__len__")): + multiple_info_needays = True + + # Gleiches Jahr MIT Rest + if(multiple_info_needays and newdata[3][2] == False): + # Rest ist positiv, daher bleibt rest übrig, rest wird in absence gespeichert und vom rest des Jahres-Restes abgezogen + # Rest ist positiv, damit bleibt Rest übrig + if(newdata[3][0] > 0): + instance.holidays_rest = abinfo.restdays - newdata[3][0] + instance.save() + abinfo.restdays = newdata[3][0] + abinfo.save() + # Rest ist negativ + elif(newdata[3][0] < 0): + instance.holidays_rest = (abinfo.restdays - newdata[3][0]) - newdata[3][0]*(-1) + instance.holidays_normal = newdata[3][0]*(-1) + instance.save() + abinfo.restdays = 0 + abinfo.days_inuse = abinfo.days_inuse + newdata[3][0]*(-1) + abinfo.save() + # Rest ist Urlaubsdauer + else: + instance.holidays_rest = abinfo.restdays + instance.save() + #abinfo.days_inuse = abinfo.days_inuse + abinfo.restdays + abinfo.restdays = 0 + abinfo.save() + # Gleiches Jahr ohne Rest + elif(not multiple_info_needays): + abinfo.days_inuse = abinfo.days_inuse + newdata[3] + abinfo.save() + instance.holidays_normal = newdata[3] + instance.save() + # Mehrere Jahre + elif(multiple_info_needays and newdata[3][2] == True): + + abinfo.days_inuse = abinfo.days_inuse + newdata[3][0] + abinfo.save() + abinfo_nextyear.days_inuse = abinfo_nextyear.days_inuse + newdata[3][1] + abinfo_nextyear.restdays = abinfo_nextyear.restdays - newdata[3][3] + abinfo_nextyear.save() + + # Hier werden alle benötigten Tage von Vor- und Nächstem Jahr gespeichert + instance.holidays_normal = newdata[3][0] + instance.holidays_rest = 0 + instance.holidays_normal_next = newdata[3][1] + instance.holidays_rest_next = newdata[3][3] + instance.save() ''' AB HIER WIEDER RAUSNEHMEN ''' def getFinalHolidayData(abscence): @@ -1072,6 +1170,8 @@ def getFinalHolidayData(abscence): holiday_lastyear = yeardata.restdays holiday_nextyear = 0 + + try: holiday_nextyear = list(UserYearAbsenceInfo.objects.filter(user=user, agency=user.profile.agency, year=choosenyear+1))[0].days - list(UserYearAbsenceInfo.objects.filter(user=user, agency=user.profile.agency, diff --git a/dump.rdb b/dump.rdb index 723ed7396325ffcd332a5b8dbff06b9bcbce16e6..983a30d9898f51503b9a40355a6d11857accd041 100644 GIT binary patch literal 57278 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 F{{ftgit+#e diff --git a/timemanagement/templates/timemanagement/timemanagement_singleview.html b/timemanagement/templates/timemanagement/timemanagement_singleview.html index bcf8a41..54e4dff 100644 --- a/timemanagement/templates/timemanagement/timemanagement_singleview.html +++ b/timemanagement/templates/timemanagement/timemanagement_singleview.html @@ -10,7 +10,7 @@ {% loadmonthwork next_month user as monthwork %} - Arbeitszeit im Monat: {{monthwork}}
+ Gesamtarbeitszeit dieser Monat: {{monthwork}} Stunden
{% loadaccounttime user as actualaccounttime %} Gleitzeitkonto: {% if actualaccounttime.1 == 0 %} diff --git a/timemanagement/templates/timemanagement/timemanagement_teamview_single.html b/timemanagement/templates/timemanagement/timemanagement_teamview_single.html index c3f6124..74e1249 100644 --- a/timemanagement/templates/timemanagement/timemanagement_teamview_single.html +++ b/timemanagement/templates/timemanagement/timemanagement_teamview_single.html @@ -12,9 +12,7 @@ {% loadmonthwork next_month user as monthwork %} - - - Arbeitszeit im Monat: {{monthwork}}
+ Gesamtarbeitszeit dieser Monat: {{monthwork}} Stunden
{% loadaccounttime user as actualaccounttime %} Gleitzeitkonto: {% if actualaccounttime.1 == 0 %} @@ -22,9 +20,7 @@ {% else %} -{{actualaccounttime.0}} Stunden {% endif %} -
- - +