From 1882602a4e7a439b07d7fe2c7869628da90325b1 Mon Sep 17 00:00:00 2001 From: Holger Trampe Date: Tue, 2 Jun 2020 10:06:59 +0200 Subject: [PATCH] QS 0.9.1 Bugs bearbeitet --- .cred | 1 + dasettings/views.py | 2 +- .../__pycache__/counter_tag.cpython-38.pyc | Bin 14470 -> 15197 bytes standards/templatetags/counter_tag.py | 46 ++++++++++- .../timemanagement/rendered_confirmform.html | 11 +++ .../timemanagement/rendered_table.html | 52 ++++++++++--- .../timemanagement_management.html | 5 +- .../timemanagement/tm_ab_management.html | 18 ++++- timemanagement/views.py | 72 +++++++++++++++--- users/signals.py | 20 ++++- 10 files changed, 193 insertions(+), 34 deletions(-) diff --git a/.cred b/.cred index 1e9b8f8..ea260ec 100644 --- a/.cred +++ b/.cred @@ -1,2 +1,3 @@ https://holger.trampe:Zerogoogle123_@git.vhevents.de/ https://holger.trampe:Zerogoogle123_@git.vhevents.de/ +https://holger.trampe:Zerogoogle123_@git.vhevents.de/ diff --git a/dasettings/views.py b/dasettings/views.py index 8642d5f..fe966c9 100644 --- a/dasettings/views.py +++ b/dasettings/views.py @@ -942,7 +942,7 @@ def UserProfileUpdate(request, pk, newuser=0): } return render(request, 'dasettings/user_usprof.html', context) else: - messages.success(request, f'Fehlerhafte Eingabe!') + messages.success(request, f'Fehlerhafte Eingabe! Das Verfallsdatum muss im Format TAG.MONAT. sein und existieren!') context = { 'active_link' : 'dasettings', 'user_fullname' : user_fullname, diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index 4e1b812a967e1a443fa3f7608871c813a9d0f0a9..3c4a07f548d6fa363d95181c43493d8dd0078660 100644 GIT binary patch delta 6176 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 delta 5631 zcmai2X>eQB7525Y*_ISk$I5sawy4+nMw!KIrR8HtI{2r6j9N`t>HIiP}}k zfF4wW3%UU%ps{D0pDR;Zc$vD4SF5dB%WZ8u=jNW{W%n|rov4>DA=W{xhSw4c0qf*- zy#6HP4ZMzIVbbvNMq*vWmU2I_ZemS5K&*#)2dQ^650WfGvKC&S1Cz^mD+!mAu#FVk zc?Zc>kSs*9P97pz6l85Y%)5y766@wY#QKOu_;OoSeypPx*v0OhNAUZ^J zkPi_XCN|7Rh>Z|i$w!H;B({pLCN@fJjE@srMQjaUOKdfQTSsgQ-%4yfv2FZ%VjGA}^6kVn65GLVAa*seoqQLu zYl!XUxjjTT5xtS`C3Y>boA}MdCip(}I+7@SKS?$dyM=#+*cM_3c#POqVz+XY*fwHQ zJWlL-Vw`KlCXwa%G@l{5ojxAq31T~-LT@0+ZTt{Pb`nc+o!Bm7DV`>_o7gPBo!A~? zf@g@`NX+0_VtcuBcUk1{C%6(L%yh~BRQQ=)Hrh7JjO}$6kp1=)YnD&jBfX8FA_Bz_ z1Zp~FG~=);{Ls#n1C&*WW%4uo=!g&6;>z6;sW^0N!EQF{=3=5v9&jXChy1OhhlS*4 zj%ZEZBRUi9a=^L1qXC-p%&eRd>Fn%OI-Ml%17b(>N`6?E8-A1M6xZy*y=(U0x%ug9f^#QiBy>73BE9-l&WiHbvC03BOO1e#Sayl zmhV=kR<%OcNV#dx%qA0t7$l}t@dR`rky2@B`mFUeKkA^ot18A?mYZ!u^~a|^0> z%k$pOBF#^|50q+dy`&lNS7#2YLen*UN)ttCdVR^suDk<`-mHWYNO2X`8I3Dq7u!%Q zQ#FAikFsVt+b`Q!G|1oAY_FlwyU-(<8qSZ{8`;#O?BQlb$PVDHDJ2q>1+xLJjT;UQbi*htM6oo77X;Q zn!+wvYl0)p07NRpL2M@g%&JRvva>~2KCJI>=%5fUm*<=PvaMllE{^&xp&A;GO&wJn zsWhz_GEUXvFl|X#38FM$bT$nTv009Lpsjf0XP_rI3rUkW( zA^+46bj*TyA*2T1D7#f|^EGWuV^=pqL1KY|zgtm?{>U?~FTP-~(3d>pi!veq)u^#C zxw>)W7P3Rj+^TCZU^-_-8a5S8OrklQ_IZcMVB4V2xY%O}PTmw}#)zp|emcd0!id(xwi)W3rh{Y1A30jDIL>3(#K`6+Pe0*t`9Ya$Smp4@> zv{|8LAkC2E!`hb{oc4FIyQp|x^j|$iiNoQV6&ehJCfOxC7)3tQhmkJkMBrq=u4bsh zfI>qHX893rRte3>id5+?E4MdA**&zFPBpDjzKXWc&F8N0=JD|4cz8GLV>G{4^qNB# zE-1TcBcW@Na%;NpMoWdM>I`(V`(R|*$;DAARTO3{#?_+&%`CVc7#OEtaWBXs9#Ic} zOuLarwbC%8H|QUrJ%FMlE5|{9-Wt332AaJap)i=e!7=s_29wJN~; zgn}q6bEPq$5>3DZ*m@8l9}yYDh{QJ$3ZejN%Hz$$?1VhmJeOO{J)D`?Y0pHY^8bd5 zCdk#I1Jf}jH1*KJo@pz{{@2lg^9ZN!rH;L@wAHwgRg?62kjXb%n%N`rqn4K_607dT zNwD$B#R{5+D-L@x7V$8~M~6}!If%5xv%wDK1X5>dPJ(fq%`y4&@51KNbFdUCevlP&FW$)hEg&?wU8&S zCXz={OYUw9vL|G^Z7yFoR^eivtdgO?mQc-F)$+xw2dl+&YInqwS*{i2uOwi*mA1ud zZWNEB$I^)9~`%K@5{%O*gc>R4ZNLcZ4#WzS1TX#d2w(dc&oAVb9wh^J6$ z7vDvVXAqu6cn;zF2nBhQFN6lzX;@wj^3#w)Mk7vZNnAD{=x$adQn+7{`R}2*o4Gu_=m_F5Z4x1hPF`FP{y& z*^6*X*td%oF|K~RGI_DkKs{~%}`Op88C{WEJ3icLAEb*^hE4tRWdy@qj5Zst*U(myJ2FKYIO<@ z!?*?s%M=Z4M`Q&%OBHh}GCe>+F>waEz%X!-rv0dM)8g8QLlyNZgbC_W3tyM10!|``~2l^C0L068nP*XFS_%RaOjL?q4p@u^> z-RV>^ky`d7#~@7Vpj9pU=5}Fa5E9LC~+@HvPQxS{_uWarKbMTv8C(jAnQfFs!T$kO=>Yioe|Bb zv<#sQ0bl!~9ib1QA7KPxrQACf&F#nL0R$D{5Q2_?j}{>i?nF3-a2LWo2=^g8gm41k z5roGOoAbwesenheit für {{absence.user.first_name}} {{absence.user.last_name}} annehmen/ablehnen
Informationen der Abwesenheit
@@ -49,3 +53,10 @@ Informationen: {{absence.info}}
absencestring_confirm = 'Sicher, dass Sie die Abwesenheit für {{absence.user.first_name}} {{absence.user.last_name}} vom {{absence.start|date:"d.m Y"}} bis {{absence.end|date:"d.m Y"}} annehmen wollen?' absencestring_noconfirm = 'Sicher, dass Sie die Abwesenheit für {{absence.user.first_name}} {{absence.user.last_name}} vom {{absence.start|date:"d.m Y"}} bis {{absence.end|date:"d.m Y"}} ablehnen wollen?' + +{% else %} + +
Abwesenheit für {{absence.user.first_name}} {{absence.user.last_name}} annehmen/ablehnen
+
+Diese Daten dürfen Sie nicht abrufen. +{% endif %} \ No newline at end of file diff --git a/timemanagement/templates/timemanagement/rendered_table.html b/timemanagement/templates/timemanagement/rendered_table.html index 48d75ec..14e7f52 100644 --- a/timemanagement/templates/timemanagement/rendered_table.html +++ b/timemanagement/templates/timemanagement/rendered_table.html @@ -8,8 +8,9 @@ - {% for da in days_this_month %} - {{da|date:"d D"}} + {% for da in days_this_month %} + {% isfreeday user da as isfree %} + {{da|date:"d D"}} {% endfor %} @@ -20,20 +21,26 @@ {{us.get_full_name}} + {% if user|usergperm:"absencemanager" %} + {% kontingent us as userkontingent %} + {{userkontingent}} + {% endif %} - {% for da in days_this_month %} - + {% for da in days_this_month %} {% isfreeday user da as isfree %} {% isfreedayname user da as isfreename %} {% getabscenceday user us da as abday %} - {% startdatecheck us da as startdatecheck %} + {% startdatecheck us da as startdatecheck %} + {% getthisdaynotworking us da as thisdaynotworking %} {% if isfree %} {% elif startdatecheck == False %} - + + {% elif thisdaynotworking == True %} + {% elif da.weekday == 5 or da.weekday == 6 %} @@ -146,9 +153,13 @@ {% endif %} - {% else %} - + + {% elif today == da %} + + + {% else %} + {% endif %} {% endfor %} @@ -368,7 +379,7 @@ function recalculateChoosenDays(){ }, success : function(data){ - + console.log(data) if(data["other_absences"] != false){ $("#otherholidays").show(); $("#otherholidays_users").html(data["other_absences"]); @@ -377,6 +388,16 @@ function recalculateChoosenDays(){ $("#otherholidays").hide(); } + if(data["userown_absences"] != false){ + $("#ownholidays").show(); + $("#ownholidays_users").html(data["userown_absences"]); + } + else{ + $("#ownholidays").hide(); + } + + + $("#startAbsenceProgress").modal("show"); @@ -441,6 +462,8 @@ function recalculateChoosenDaysAfterInit(){ }, success : function(data){ + console.log(data); + if(data["other_absences"] != false){ $("#otherholidays").show(); $("#otherholidays_users").html(data["other_absences"]); @@ -448,6 +471,14 @@ function recalculateChoosenDaysAfterInit(){ else{ $("#otherholidays").hide(); } + + if(data["userown_absences"] != false){ + $("#ownholidays").show(); + $("#ownholidays_users").html(data["userown_absences"]); + } + else{ + $("#ownholidays").hide(); + } $("#restholidays").html(data["restholiday_thisyear"]); $("#detail_rest").html(data["restholiday_thisyear"]); @@ -482,7 +513,8 @@ function recalculateChoosenDaysAfterInit(){ behindcheck = true; } - if(behindcheck == false || data["restholiday_thisyear"] < 0 || data["restholiday_lastyear"] < 0 || data["restholiday_nextyear"] < 0 && data["startendcheck"] || data["restholiday_thisyear"] < 0 || data["restholiday_nextyear"] < 0 ){ + if(behindcheck == false || data["restholiday_thisyear"] < 0 || data["restholiday_lastyear"] < 0 || data["restholiday_nextyear"] < 0 && data["startendcheck"] || data["restholiday_thisyear"] < 0 || data["restholiday_nextyear"] < 0 || data["userown_absences"] != false) + { $("#start_absence_contract").prop("disabled", true); } else{ diff --git a/timemanagement/templates/timemanagement/timemanagement_management.html b/timemanagement/templates/timemanagement/timemanagement_management.html index 2cbb12a..3effae4 100644 --- a/timemanagement/templates/timemanagement/timemanagement_management.html +++ b/timemanagement/templates/timemanagement/timemanagement_management.html @@ -63,8 +63,7 @@ - - + {% if user.usertime.usetime_start == None %} @@ -328,7 +334,6 @@ $("#show_detailview").hover( ); */ - function confirmAbscenceFinal(){ $.ajax({ type: "GET", @@ -491,6 +496,11 @@ $('#absencetabs a').on('click', function (e) { {% endif %} diff --git a/timemanagement/views.py b/timemanagement/views.py index 5b56271..44bc949 100644 --- a/timemanagement/views.py +++ b/timemanagement/views.py @@ -276,6 +276,7 @@ def AbsenceManagmenet(request, activemonth=False, activeyear=False): "final_reasons" : final_reasons, "yearinfo" : yearinfo, "kontingent" : kontingent, + "today" : date.today(), "abscenceform" : AddAbsence(instance=request.user), "userown" : Absence.objects.filter(agency=request.user.profile.agency, user=request.user).order_by("-start") } @@ -569,7 +570,6 @@ def TimeAjax(request): if(tempTime.startdate == None): missinguserdata.append(user) - context = { "active_link" : "abscence", "usersofagency" : User.objects.filter(profile__agency=request.user.profile.agency).order_by("-last_name"), @@ -580,7 +580,8 @@ def TimeAjax(request): "nextmonth" : nextmonth, "prevmonth" : prevmonth, "nextyear" : nextyear, - "prevyear" : prevyear + "prevyear" : prevyear, + "today" : date.today(), } return render(request, "timemanagement/rendered_table.html", context) @@ -641,7 +642,7 @@ def TimeAjax(request): new_stat = request.GET["newconfstat"] info = request.GET["info"] - + # Eingeloggter Nutzer hat Rechte, Urlaube einzutragen if(absence.user.profile.agency == request.user.profile.agency and request.user.has_perm("users.absencemanager")): absence.confirm_status = new_stat absence.confirm_info = info @@ -657,6 +658,7 @@ def TimeAjax(request): "activemonth" : request.GET["activemonth"], "activeyear" : request.GET["activeyear"] } + # Berechnung starten, da Urlaub vorhanden ist elif request.GET["action"] == "getrestholidays": user = User.objects.get(pk=request.GET["userid"]) usertimedata = UserTime.objects.get(user=user) @@ -709,10 +711,10 @@ def TimeAjax(request): if(end_day_obj.year == start_day_obj.year): # Startt des Urlaubs NACH Verfallsdatum - nur aktuelles JAhr und die Zahl interessiert if(start_day_obj > holidayloose_date): - need_days = (calculateHolidays(request, start_day_obj, end_day_obj, start_half, end_half))*(-1) + need_days = (calculateHolidays(request, start_day_obj, end_day_obj, start_half, end_half, user))*(-1) holiday_thisyear = yeardata.days - yeardata.days_inuse - need_days else: - need_days = (calculateHolidays(request, start_day_obj, end_day_obj, start_half, end_half))*(-1) + need_days = (calculateHolidays(request, start_day_obj, end_day_obj, start_half, end_half, user))*(-1) # Kein Resturlaub if(yeardata.restdays == 0.0): holiday_thisyear = yeardata.days - yeardata.days_inuse - need_days @@ -732,17 +734,17 @@ def TimeAjax(request): holiday_lastyear = yeardata.restdays date_splitter = datetime.date(end_day_obj.year, 1, 1) - need_days_this = (calculateHolidays(request, start_day_obj, date_splitter, start_half, False))*(-1) + need_days_this = (calculateHolidays(request, start_day_obj, date_splitter, start_half, False), user)*(-1) - need_days_next = (calculateHolidays(request, date_splitter, end_day_obj, False, end_half))*(-1) + need_days_next = (calculateHolidays(request, date_splitter, end_day_obj, False, end_half, user))*(-1) - need_days = (calculateHolidays(request, start_day_obj, date_splitter, start_half, False))*(-1) + (calculateHolidays(request, date_splitter, end_day_obj, False, end_half))*(-1) + need_days = (calculateHolidays(request, start_day_obj, date_splitter, start_half, False, user))*(-1) + (calculateHolidays(request, date_splitter, end_day_obj, False, end_half))*(-1) holiday_thisyear = yeardata.days - yeardata.days_inuse - need_days_this days_nextyear_normal = 0 days_nextyear_rest = 0 # Urlaub nächstes Jahr MIT und OHNE Rest if(holiday_nextyear_rest == 0.0): - holiday_nextyear = holiday_nextyear - (calculateHolidays(request, date_splitter, end_day_obj, False, end_half))*(-1) + holiday_nextyear = holiday_nextyear - (calculateHolidays(request, date_splitter, end_day_obj, False, end_half, user))*(-1) else: temprest = holiday_nextyear_rest - need_days_next # Rest reicht! @@ -766,6 +768,16 @@ def TimeAjax(request): for a in other_absences: other_absences_string += a.user.first_name + " " + a.user.last_name + " - Vom " + a.start.strftime("%d.%m.%Y") + " bis " + a.end.strftime("%d.%m.%Y") + "
" + # Prüfen, ob der Nutzer selbst schon Abwesenheiten in diesem Zeitraum hat + + userown_absences = Absence.objects.filter(start__lte=start_day_obj, end__gte=end_day_obj, agency=request.user.profile.agency, user=user) + print(userown_absences) + userown_absences_string = False + if (len(userown_absences) > 0): + userown_absences_string = "" + for a in userown_absences: + userown_absences_string += a.reason.name + " - Vom " + a.start.strftime("%d.%m.%Y") + " bis " + a.end.strftime("%d.%m.%Y") + "
" + data = { "restholiday_thisyear" : holiday_thisyear, "restholiday_lastyear" : holiday_lastyear, @@ -775,7 +787,8 @@ def TimeAjax(request): "need_days" : need_days, "need_days_next" : need_days_next, "need_days_this" : need_days_this, - "other_absences" : other_absences_string + "other_absences" : other_absences_string, + "userown_absences" : userown_absences_string } # REQUEST USER NO RIGHTS else: @@ -798,7 +811,7 @@ Berücksichtigt sowohl Wochenende als auch in der Agentur hinterlegte Freitage/S ''' @login_required -def calculateHolidays(request, start, end, start_half, end_half): +def calculateHolidays(request, start, end, start_half, end_half, user): restdays = 0 allfreedays = FreeDays.objects.filter(agency=request.user.profile.agency) if(end == start): @@ -825,7 +838,24 @@ def calculateHolidays(request, start, end, start_half, end_half): for freeday in allfreedays.all(): if(dt == freeday.day): freedaycounter += 1 - + + # Prüfung, ob der Mitarbeiter an diesem Tag überhaupt arbeitet. Wenn nicht, wird der Freedaycounter einfach erhöht + if(dt.isoweekday() == 1): + if user.usertime.wd_mo == 0.0: + freedaycounter += 1 + elif(dt.isoweekday() == 2): + if user.usertime.wd_tu == 0.0:# + freedaycounter += 1 + elif(dt.isoweekday() == 3): + if user.usertime.wd_we == 0.0: + freedaycounter += 1 + elif(dt.isoweekday() == 4): + if user.usertime.wd_th == 0.0: + freedaycounter += 1 + elif(dt.isoweekday() == 5): + if user.usertime.wd_fr == 0.0: + freedaycounter += 1 + return restdays - counter + freedaycounter @@ -856,10 +886,28 @@ def calculatingHolidaysByAbsence(request, absence): if dt.isoweekday() not in weekdays: finalholidayinabsence += 1 + # Prüfung, ob freie Tage vorhanden sind for freeday in allfreedays.all(): # FREEDAY FOUND if(dt == freeday.day): freedaycounter += 1 + # Prüfung, ob der Mitarbeiter an diesem Tag überhaupt arbeitet. Wenn nicht, wird der Freedaycounter einfach erhöht + stat = False + if(dt.isoweekday() == 1): + if absence.user.usertime.wd_mo == 0.0: + freedaycounter += 1 + elif(dt.isoweekday() == 2): + if absence.user.usertime.wd_tu == 0.0:# + freedaycounter += 1 + elif(dt.isoweekday() == 3): + if absence.user.usertime.wd_we == 0.0: + freedaycounter += 1 + elif(dt.isoweekday() == 4): + if absence.user.usertime.wd_th == 0.0: + freedaycounter += 1 + elif(dt.isoweekday() == 5): + if absence.user.usertime.wd_fr == 0.0: + freedaycounter += 1 return finalholidayinabsence - freedaycounter diff --git a/users/signals.py b/users/signals.py index f427edc..b9976e1 100644 --- a/users/signals.py +++ b/users/signals.py @@ -417,8 +417,7 @@ def save_newabsence(sender, instance, **kwargs): 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] - + abinfo_nextyear = abinfo_nextyear[0] multiple_info_needays = False if(hasattr(newdata[3], "__len__")): @@ -463,7 +462,7 @@ def save_newabsence(sender, instance, **kwargs): abinfo_nextyear.restdays = abinfo_nextyear.restdays - newdata[3][3] abinfo_nextyear.save() - # Hier werd der REST als vorjahreswert und NORMAL als nächstes Jahr gespeichert + # 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] @@ -646,6 +645,21 @@ def calculateHolidays(user, start, end, start_half, end_half): if(dt == freeday.day): freedaycounter += 1 + if(dt.isoweekday() == 1): + if user.usertime.wd_mo == 0.0: + freedaycounter += 1 + elif(dt.isoweekday() == 2): + if user.usertime.wd_tu == 0.0:# + freedaycounter += 1 + elif(dt.isoweekday() == 3): + if user.usertime.wd_we == 0.0: + freedaycounter += 1 + elif(dt.isoweekday() == 4): + if user.usertime.wd_th == 0.0: + freedaycounter += 1 + elif(dt.isoweekday() == 5): + if user.usertime.wd_fr == 0.0: + freedaycounter += 1 return restdays - counter + freedaycounter