From f88c6cb716ee57a3bbde8ddf4d0b2ebaa2dea455 Mon Sep 17 00:00:00 2001 From: "holger.trampe" Date: Mon, 22 Mar 2021 11:16:04 +0100 Subject: [PATCH] =?UTF-8?q?Arbeitstage=20werden=20nicht=20mehr=20gel=C3=B6?= =?UTF-8?q?scht=20aber=20markiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/settings.cpython-38.pyc | Bin 4787 -> 4787 bytes digitaleagentur/settings.py | 2 ++ digitaleagentur/utils.py | 10 +++++++-- .../__pycache__/counter_tag.cpython-38.pyc | Bin 24784 -> 24846 bytes standards/templatetags/counter_tag.py | 20 +++++++++--------- timemanagement/models.py | 1 + timemanagement/views.py | 18 ++++++++-------- users/views.py | 6 +++--- 8 files changed, 33 insertions(+), 24 deletions(-) diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index b4f6e55d83fa0203c2261835555b361cd932ed1d..29a46b9988be23c841df2bc0f84e0fe50cc3907d 100644 GIT binary patch delta 31 lcmdn2x>=Psl$V!_0SGMS1t;Wg=Psl$V!_0SF3Yyc3Kz^3E4zW@cg9yk3xn5ddzB29f{( diff --git a/digitaleagentur/settings.py b/digitaleagentur/settings.py index ca26fce..bd99ca0 100644 --- a/digitaleagentur/settings.py +++ b/digitaleagentur/settings.py @@ -24,8 +24,10 @@ from digitaleagentur.sec import * BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Nach zehn Stunden läuft der Cookie ab! +# TASK: Zehn stunden auto-auslog einmal checken Sekunden! SESSION_COOKIE_AGE = 8*60*60 + CHANNELS_PRESENCE_MAX_AGE = 30 # FOR SUMMERNOTE ORIGIN diff --git a/digitaleagentur/utils.py b/digitaleagentur/utils.py index 6ce8d3f..d0bca92 100644 --- a/digitaleagentur/utils.py +++ b/digitaleagentur/utils.py @@ -60,9 +60,15 @@ def checkAbsenceWorkdayCollide(absence): if(getIsAbsenceStartEndHalf(absence)): workday.target = workday.target / 2 workday.save() - # Ganzer Tag vorhanden, Arbeitstag wird gelöscht + # Ganzer Tag vorhanden, Arbeitstag wird als löschen markiert, aber nicht gelöscht else: - workday.delete() + workday.delflag = True + workday.save() + else: + # Sollte der ganze Tag mal als zu löschen markiert worden sein, wird dies hier zurückgenommen + if workday.delflag == True: + workday.delflag = False + workday.save() diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index 4dc78b4d18b297720a87147793a59c660cf7c269..bf5bbd965cf0d652405058b9fbc43b2657ed72e6 100644 GIT binary patch delta 3949 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 delta 3811 zcmbVPdr+0v5&!o4zWd!LDB+E~vn4t{cRk_IPaD8CETcXY+ zlj%^K?2MgGGaZ=DB=ud(q}q(;WmBiN@tG#gZIjw+%owecPN)Ca>0|fYi;#|~oqogl zanA19J-d5$&pG$o@4%I}A$CJdj7y>K;_cF}e|OiZ*xtGL#Vlu28IgiY00OF|SV}+( z=%!-As1^cK4XHt!1qZ0tql@C85$UHY0eeWb)Mmx2`3`Gh5or*)1YynJXX1^yyIo13 zs~(62aU476?Sm6|bKX-~KcOjID#7IErjCu;N@_!wa8*u`I;x?SGb^#m(k)xSPR)^` z1e~QxNFS`iV>!9)do9DV6UY9LV+`&c+(Gk=GMW{1Te@jGpl(q^j*yc^j_Al0a+rqY zvK(90B!w)u`@|etRsg{r4}n+1MY$>1kXsH%@VVTVGm=#H!37Db4(y8yl2nHp3$d#B zxq`=<(u?v)ET{x2bOB8UPY>84!Q+snDj~2SV2s&KZ5(Jx-G>L~mn0t{sjy=xD7FT> zd;MND62GGuR~?V{=V$AgATChU5_osOhlSp((ot>9VXEUm`{A@yQm*x=Vu`6YD?wLe zOnc%U^O!bX$YlQvA35}bH$96TeBdZ7Tq^&>yX=YPOH<``F^RbcWspwc#L zqY%=FuSGfAO+BRcQT9b^!|;h8u}$pIVX#XpTk5bVKPUNTOfMkt>e1b2!ZGa2U(y~a z9gp?|rJ4r}O$Tw6xLvGf@-wLOuyCHE!DAiMsDSq)6lB1D%qmDFEH79PBMq#Jg#0oN z7A!1$XqiYLwW5`Q6IPrd@EX&tW$G2YT<}y<)MWJusuB-42&wX~Q{*$|ZlqcNy+lkE zdl#k_l7|skneMveUH3Iu*1^d#qV%z%}L`S8A1KvO~J1 z2Rx?Iqls!u<36<*@*tKx&<2TS+N1|mkI_o!lQI(1%iNRsE?t^2Rh8siIVXA8?%&h3 zW2fmCU+JnXvL}&hWrgf-3Jw&`_2f?+U#N`?kmeMa#-CBsqQZ&bK%xR(vlNEx5B%nVm>=X zRVz19UVNYO=-^R$zSQg2~?L4LmXPm4;mNQ z;*;chF~m>QRVRa+xAo4y=o9yFdrfBIBU1*yUy}}}@l1`^9oY+3^9J6lIb_Tx3n)t} z9Vs}r;#=?<=C4d!zzHGJ*)|ysTUZU6B9X>nr||c7cK1=nixlRc!NHX)%z07?2~B=6 z)OlF4LE@S~hqW>W<5Z+Ux{m`o-N>q`j;iubjvUrTz;03@k3x`oK?lupT8e2Kg@DU6 zFtzq;@G>r|O|BTA=fwX}s3#^3-wOJb=>ie;oIAqVRtN*rl9Seraz zpQVIcmdkYX*u;HHms}UGD<3iq#BnC@jA3&2Sl;yBA*hZbc9Y) zrhAkgWFdE7iu8CoH_EZxBV&oCXBDmat1ES`2+Yn*#AjBog~fPu z^;O8h(9_k1JaLQh{L@7<&$5s#9qHw1)YoL^mXgx2W7yv*y8E{Fhi%<`JBR$@Bu#B| z?&$9y@|&GOzc_*QYXnr_SbYLsu&3hPHFZ!$qYP}UPg5%azpy9cei|0lXJU16>?G+{ zeJWJrKkIkHS=`l733WK5DFd%G)Vn`tV`y#i1#{MJgSFW2%fO>+n-bYgv6^A}oSDAl z_%%eN^NT~-ruXiq$7usD^%cW9lJzh8PZ8GbBZ+OU4}UnY%=OphVwyZjYK^tfB3Jb{ z*1&pvwQ;u5z{@t{rN(Mp)fk6aO?B>7OkznZU}Wyp5)I zbPg}Gf%JG?VkPy%F$0~$z5c!+WnggU(6r>`A0^XrS3WGtuz2%AIzYQNKM%X;gwtZYkyJ=omV03n*cG3FbzI^Biw zyv!cd+M8hnH??=9%XDJXL|J5pykaDE2(PuThi9Wlz7tn$*$De4zPIHXj2ve*{KJZV zlMq~Bc#q){13w(abq0R(hz}U}))pTzgc*L%@G-+D3^y5WG2CIe&+vdjVaqfIgTc-a z2StSO+~reV$f}&ry~PX_49gg*7?v|s 0): @@ -417,7 +417,7 @@ def loadmonthwork(nextmonth, user): if month == 0: month = 12 - workdays = Workday.objects.filter(user=user, agency=user.profile.agency, start__month=month) + workdays = Workday.objects.filter(user=user, agency=user.profile.agency, start__month=month, delflag = False) finalsum = 0 @@ -442,13 +442,13 @@ def loadmonthwork(nextmonth, user): # Return formatted Time-String @register.simple_tag def getformatedstarttime(user): - wd = list(Workday.objects.filter(user=user, agency=user.profile.agency, end=None))[0] + wd = list(Workday.objects.filter(user=user, agency=user.profile.agency, end=None, delflag = False))[0] return wd.start.strftime("%H:%M:%S") @register.simple_tag def getformattetstarttime_last_start(user): today = date.today() - wd = Workday.objects.filter(user=user, agency=user.profile.agency, start__day=today.day).order_by("start") + wd = Workday.objects.filter(user=user, agency=user.profile.agency, start__day=today.day, delflag = False).order_by("start") if(len(wd) == 0): return ("00:00:00") @@ -458,7 +458,7 @@ def getformattetstarttime_last_start(user): @register.simple_tag def getformattetstarttime_last_end(user): today = date.today() - wd = Workday.objects.filter(user=user, agency=user.profile.agency, end__day=today.day).order_by("end") + wd = Workday.objects.filter(user=user, agency=user.profile.agency, end__day=today.day, delflag = False).order_by("end") if(len(wd) == 0): return ("00:00:00") @@ -467,7 +467,7 @@ def getformattetstarttime_last_end(user): @register.simple_tag def getactualbreak(user): - wd = Workday.objects.filter(user=user, agency=user.profile.agency, end=None) + wd = Workday.objects.filter(user=user, agency=user.profile.agency, end=None, delflag = False) returnstat = 0 # ACTIVE WORKING DAY if(len(wd) > 0): @@ -486,7 +486,7 @@ def getactualbreak(user): @register.simple_tag def getactualbreakcounter(user): - wd = Workday.objects.filter(user=user, agency=user.profile.agency, end=None) + wd = Workday.objects.filter(user=user, agency=user.profile.agency, end=None, delflag = False) returnstat = False # ACTIVE WORKING DAY if(len(wd) > 0): @@ -503,7 +503,7 @@ def getactualbreakcounter(user): # GET ALL BREAK AS MILLISECOND-RESULT @register.simple_tag def getdailybreaktime(user): - wd = list(Workday.objects.filter(user=user, agency=user.profile.agency, end=None))[0] + wd = list(Workday.objects.filter(user=user, agency=user.profile.agency, end=None, delflag = False))[0] breaksum = 0 for b in wd.breaks.all(): if(b.end != None): @@ -513,7 +513,7 @@ def getdailybreaktime(user): @register.simple_tag def getdailybreaktimetoday(user): today = date.today() - wd = list(Workday.objects.filter(user=user, agency=user.profile.agency).order_by("start").exclude(end=None))[0] + wd = list(Workday.objects.filter(user=user, agency=user.profile.agency, delflag = False).order_by("start").exclude(end=None))[0] breaksum = 0 for b in wd.breaks.all(): if(b.end != None): @@ -739,7 +739,7 @@ def format_timedelta(td): def loadaccounttime(user): status = 0 today = date.today() - workdays = Workday.objects.filter(user=user, start__lt=today).exclude(end=None) + workdays = Workday.objects.filter(user=user, start__lt=today, delflag = False).exclude(end=None) finalaccounttimesum = datetime.timedelta(minutes=0) + datetime.timedelta(hours=UserTime.objects.get(user=user).startcount) diff --git a/timemanagement/models.py b/timemanagement/models.py index 8abc698..4dd30f9 100644 --- a/timemanagement/models.py +++ b/timemanagement/models.py @@ -10,6 +10,7 @@ from simple_history.models import HistoricalRecords # Create your models here. class Workday(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) + delflag = models.BooleanField(default=False) agency = models.ForeignKey(Agency, on_delete=models.CASCADE) breaks = models.ManyToManyField("Breaks", blank=True, related_name='breaks_at_day') start = models.DateTimeField(default=None, null=True, blank=True) diff --git a/timemanagement/views.py b/timemanagement/views.py index b2f5180..899f655 100644 --- a/timemanagement/views.py +++ b/timemanagement/views.py @@ -320,7 +320,7 @@ def TimeManagementTeamSingle(request, pk, activemonth=False, activeyear=False): prev_year = int(prev_year) - 1 # Initialprüfung, ob Arbeitstage vorliegen - tempworkday = Workday.objects.filter(agency=request.user.profile.agency, user=user).order_by("start").exclude(end=None)[:1] + tempworkday = Workday.objects.filter(agency=request.user.profile.agency, user=user, delflag = False).order_by("start").exclude(end=None)[:1] user_has_workdays = False if len(tempworkday) == 1: @@ -338,7 +338,7 @@ def TimeManagementTeamSingle(request, pk, activemonth=False, activeyear=False): "activemonth" : activemonth, "active_link" : "timemanagement", "days_this_month" : get_datetime_range(int(active_year), int(activemonth)), - "workdays" : Workday.objects.filter(agency=request.user.profile.agency, user=user, start__month=activemonth, start__year=active_year).order_by("start").exclude(end=None), + "workdays" : Workday.objects.filter(agency=request.user.profile.agency, user=user, start__month=activemonth, start__year=active_year, delflag = False).order_by("start").exclude(end=None), "userhasworkdays" : user_has_workdays, "user" : user } @@ -384,7 +384,7 @@ def TimeManagement(request, activemonth=False, activeyear=False): prev_year = int(prev_year) - 1 # Initialprüfung, ob Arbeitstage vorliegen - tempworkday = Workday.objects.filter(agency=request.user.profile.agency, user=request.user).order_by("start").exclude(end=None)[:1] + tempworkday = Workday.objects.filter(agency=request.user.profile.agency, user=request.user, delflag = False).order_by("start").exclude(end=None)[:1] user_has_workdays = False if len(tempworkday) == 1: @@ -402,7 +402,7 @@ def TimeManagement(request, activemonth=False, activeyear=False): "activemonth" : activemonth, "active_link" : "timemanagement", "days_this_month" : get_datetime_range(int(active_year), int(activemonth)), - "workdays" : Workday.objects.filter(agency=request.user.profile.agency, user=request.user, start__month=activemonth, start__year=active_year).order_by("start").exclude(end=None), + "workdays" : Workday.objects.filter(agency=request.user.profile.agency, user=request.user, start__month=activemonth, start__year=active_year, delflag = False).order_by("start").exclude(end=None), "userhasworkdays" : user_has_workdays } if(request.user.has_perm("users.timemanager")): @@ -597,7 +597,7 @@ def TimeAjax(request): targettime = targettime / 2 # Prpfung, ob bereits Arbeitstage an diesem Tag vorliegen - tempworkday = Workday.objects.filter(agency=request.user.profile.agency, user=request.user, start__day=today.day, start__month=today.month, start__year=today.year) + tempworkday = Workday.objects.filter(agency=request.user.profile.agency, user=request.user, start__day=today.day, start__month=today.month, start__year=today.year, delflag = False) user_has_workdays = False if len(tempworkday) == 1: @@ -617,7 +617,7 @@ def TimeAjax(request): } # END DAY elif request.GET["action"] == "end_day": - wd = list(Workday.objects.filter(user=request.user, agency=request.user.profile.agency, end=None))[0] + wd = list(Workday.objects.filter(user=request.user, agency=request.user.profile.agency, end=None, delflag = False))[0] # END ALL BREAKS for b in wd.breaks.all(): if b.end == None: @@ -638,7 +638,7 @@ def TimeAjax(request): } # START A BREAK elif request.GET["action"] == "start_break": - wd = list(Workday.objects.filter(user=request.user, agency=request.user.profile.agency, end=None))[0] + wd = list(Workday.objects.filter(user=request.user, agency=request.user.profile.agency, end=None, delflag = False))[0] newbreak = Breaks(workday=wd, user=request.user, agency=request.user.profile.agency, start=timezone.now()) newbreak.save() wd.breaks.add(newbreak) @@ -648,12 +648,12 @@ def TimeAjax(request): } # END BREAK elif request.GET["action"] == "end_break": - wd = list(Workday.objects.filter(user=request.user, agency=request.user.profile.agency, end=None))[0] + wd = list(Workday.objects.filter(user=request.user, agency=request.user.profile.agency, end=None, delflag = False))[0] toendbreak = list(wd.breaks.filter(end=None))[0] toendbreak.end = timezone.now() toendbreak.save() - wd = list(Workday.objects.filter(user=request.user, agency=request.user.profile.agency, end=None))[0] + wd = list(Workday.objects.filter(user=request.user, agency=request.user.profile.agency, end=None, delflag = False))[0] breaksum = 0 for b in wd.breaks.all(): if(b.end != None): diff --git a/users/views.py b/users/views.py index 3eba58c..f063301 100644 --- a/users/views.py +++ b/users/views.py @@ -1012,7 +1012,7 @@ def getDataFromToDelUser(request, pk): status = "Abgelehnt" writer.writerow(['Abwesenheit', str(ab.start), str(ab.end), 'Grund: '+ab.reason.name, 'Status: '+status]) - user_workdays = Workday.objects.filter(agency=request.user.profile.agency, user=user).order_by("-start") + user_workdays = Workday.objects.filter(agency=request.user.profile.agency, user=user, delflag = False).order_by("-start") for wd in user_workdays: breaks = Breaks.objects.filter(agency=request.user.profile.agency, user=user, workday=wd) breaks_string = "" @@ -1606,7 +1606,7 @@ def cronactionsdaily(request, code): # Arbeitstage beenden if(user.usertime.usetime): try: - workdays = Workday.objects.filter(user=user, end=None) + workdays = Workday.objects.filter(user=user, end=None, delflag = False) for wd in workdays: mailstatus += "\n WORKDAY AUTEND ID " + str(wd.pk) wd.end = datetime(wd.start.year, wd.start.month, wd.start.day, 23, 59) @@ -1619,7 +1619,7 @@ def cronactionsdaily(request, code): yesterday = date.today() - timedelta(days=1) weekday = yesterday.weekday() - workdays_yesterday = len(Workday.objects.filter(user=user, start__day=yesterday.day, start__month=yesterday.month, start__year=yesterday.year)) + workdays_yesterday = len(Workday.objects.filter(user=user, start__day=yesterday.day, start__month=yesterday.month, start__year=yesterday.year, delflag = False)) targettworktime = 0.0 # Mitarbeiter hat für den gestrigen Tag keine Zeiten erfasst, daher automatisch auf null wenn KEINE Abwesenheit eingetragen wurde