diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index 4905362..7758693 100644 Binary files a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc and b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc differ diff --git a/standards/templatetags/counter_tag.py b/standards/templatetags/counter_tag.py index f577032..a326b38 100644 --- a/standards/templatetags/counter_tag.py +++ b/standards/templatetags/counter_tag.py @@ -8,7 +8,7 @@ import os from django.conf import settings from django.utils import timezone from datetime import date - +import datetime register = template.Library() b = 0 @@ -273,7 +273,7 @@ def getactualworkingday(user): returnstat = 0 if(len(wd) > 0): - returnstat = list(wd)[0].start + returnstat = list(wd)[0].start return returnstat # Return formatted Time-String @@ -350,7 +350,7 @@ def getdailybreaktime(user): @register.simple_tag def getdailybreaktimetoday(user): today = date.today() - wd = list(Workday.objects.filter(user=user, agency=user.profile.agency, start__day=today.day).order_by("start"))[0] + wd = list(Workday.objects.filter(user=user, agency=user.profile.agency).order_by("start").exclude(end=None))[0] breaksum = 0 for b in wd.breaks.all(): if(b.end != None): @@ -372,7 +372,16 @@ def getsumworkday(workday): mon, sec = divmod(finalsum, 60) hr, mon = divmod(mon, 60) #return ("%d Stunden und %02d:%02d" % (hr, mon, sec)) - return ("%d Stunden, %02d Minuten" % (hr, mon)) + return ("%d:%02d" % (hr, mon)) + +@register.simple_tag +def getsumworkdayexcludebreak(workday): + finalsum = ((workday.end - workday.start).seconds) + + mon, sec = divmod(finalsum, 60) + hr, mon = divmod(mon, 60) + #return ("%d Stunden und %02d:%02d" % (hr, mon, sec)) + return ("%d:%02d" % (hr, mon)) @register.simple_tag def getsumbreak(workday): @@ -507,3 +516,81 @@ def startdatecheck(usertocheck, day): return True else: return False + +# Gibt Minus/Null/Plus Gleitzeit für einen Arbeitstag +@register.simple_tag +def gettimeoveralldiff(workday, user): + sum_break = 0 + + if(len(workday.breaks.all()) > 0): + + for ele in workday.breaks.all(): + sum_break += (ele.end - ele.start).seconds + + finalsum = ((workday.end - workday.start).seconds - sum_break) + hastowork = datetime.timedelta(hours=workday.target) + + # Finale Summe Arbeitszeit inkl. Pausen und Arbeitszeit an diesem Tag + final_info = (int(finalsum) - int(hastowork.total_seconds()))/60 + + status = 0 + # NEGATIVE GLEITZEIT + if(final_info < 0): + final_info = final_info * -1 + status = 2 + # Positive Gleitzeit + elif (final_info == 0): + status = 1 + else: + status = 0 + + final_timeinfo = str(datetime.timedelta(minutes=final_info)) + final_info_data = final_timeinfo.split(":") + final_info = str(final_info_data[0]) + ":" + str(final_info_data[1]) + + return [final_info, status] + + +# Ladet das aktuelle Gleitzeitkonto +@register.simple_tag +def loadaccounttime(user): + status = 0 + workdays = Workday.objects.filter(user=user).exclude(end=None) + + finalaccounttimesum = datetime.timedelta(minutes=0) + + + for workday in workdays: + # Zeit, die der Mitarbeiter gearbeitet haben MUSS + + sum_break = 0 + + if(len(workday.breaks.all()) > 0): + + for ele in workday.breaks.all(): + sum_break += (ele.end - ele.start).seconds + + finalsum = ((workday.end - workday.start).seconds - sum_break) + hastowork = datetime.timedelta(hours=workday.target) + final_info = (int(finalsum) - int(hastowork.total_seconds()))/60 + + if(final_info >= 0.0): + finalaccounttimesum += datetime.timedelta(minutes=final_info) + else: + final_info = final_info * -1 + finalaccounttimesum -= datetime.timedelta(minutes=final_info) + + + # Gesamtgleitzeit einmal schick darstellen mit rot und grün + # Wenn GLeitzeit NEGATIV ist + if(finalaccounttimesum.total_seconds() < 0): + status = 1 + final_info_data = str(datetime.timedelta(seconds=finalaccounttimesum.total_seconds()*(-1))).split(":") + else: + status = 0 + final_info_data = str(datetime.timedelta(seconds=finalaccounttimesum.total_seconds())).split(":") + + final_info = str(final_info_data[0]) + ":" + str(final_info_data[1]) + + return [final_info, status] + diff --git a/timemanagement/forms.py b/timemanagement/forms.py index 1362c51..19a7210 100644 --- a/timemanagement/forms.py +++ b/timemanagement/forms.py @@ -1,7 +1,7 @@ from bootstrap_datepicker_plus import DatePickerInput from django import forms from django.forms import ModelForm -from .models import Absence, AbsenceReason, FreeDays +from .models import Absence, AbsenceReason, FreeDays, Workday, Breaks from users.models import UserFullName from django.forms import HiddenInput @@ -136,4 +136,50 @@ class AddFreeDayForm(forms.ModelForm): def __init__(self, *arg, **kwargs): super(AddFreeDayForm, self).__init__(*arg, **kwargs) self.fields['name'].required = True - self.fields['day'].required = True \ No newline at end of file + self.fields['day'].required = True + + +# UPDATE WORK FORM +class UpdateWorkdayForm(forms.ModelForm): + class Meta: + model = Workday + labels = { + "start" : "Start", + "end" : "Ende", + "target" : "Zielarbeitszeit" + } + + fields = [ + "start", "end", "target" + ] + widgets = { + 'start': DatePickerInput(options={"format":'HH:mm', "locale":'de'}), + 'end': DatePickerInput(options={"format":'HH:mm', "locale":'de'}), + } + + def __init__(self, *arg, **kwargs): + super(UpdateWorkdayForm, self).__init__(*arg, **kwargs) + self.fields['start'].required = True + self.fields['end'].required = True + +# ADD BREAK FORM +class AddBreakForm(forms.ModelForm): + class Meta: + model = Breaks + labels = { + "start" : "Start", + "end" : "Ende" + } + + fields = [ + "start", "end" + ] + widgets = { + 'start': DatePickerInput(options={"format":'HH:mm', "locale":'de'}), + 'end': DatePickerInput(options={"format":'HH:mm', "locale":'de'}), + } + + def __init__(self, *arg, **kwargs): + super(AddBreakForm, self).__init__(*arg, **kwargs) + self.fields['start'].required = True + self.fields['end'].required = True \ No newline at end of file diff --git a/timemanagement/models.py b/timemanagement/models.py index 1d80ed3..11aeef9 100644 --- a/timemanagement/models.py +++ b/timemanagement/models.py @@ -11,6 +11,7 @@ class Workday(models.Model): breaks = models.ManyToManyField("Breaks", blank=True, related_name='breaks_at_day') start = models.DateTimeField(default=None, null=True, blank=True) end = models.DateTimeField(default=None, null=True, blank=True) + target = models.FloatField(default=8.0) class Breaks(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) diff --git a/timemanagement/templates/timemanagement/realtime_dropdown.html b/timemanagement/templates/timemanagement/realtime_dropdown.html index d68fa6d..7e3a745 100644 --- a/timemanagement/templates/timemanagement/realtime_dropdown.html +++ b/timemanagement/templates/timemanagement/realtime_dropdown.html @@ -29,7 +29,13 @@
-Gleitzeitkonto: +00:13 Stunden +{% loadaccounttime user as actualaccounttime %} +Gleitzeitkonto: +{% if actualaccounttime.1 == 0 %} + +{{actualaccounttime.0}} Stunden +{% else %} + -{{actualaccounttime.0}} Stunden +{% endif %} + +{% endif %} +{% endblock content %} \ No newline at end of file diff --git a/timemanagement/templates/timemanagement/timemanagement_management.html b/timemanagement/templates/timemanagement/timemanagement_management.html index 601fd96..2cbb12a 100644 --- a/timemanagement/templates/timemanagement/timemanagement_management.html +++ b/timemanagement/templates/timemanagement/timemanagement_management.html @@ -14,9 +14,8 @@ Ende Arbeitszeit Pausen - Gesamtzeit - Abwesenheit - Gleitzeit in h + Gesamtzeit + Gleitzeit   @@ -27,31 +26,36 @@ {{forloop.counter}} - {{workday.start}} + {{workday.start|date:"d.m.y H:i"}} - {{workday.end}} + {{workday.end|date:"d.m.y H:i"}} - {{ workday.end|timeuntil:workday.start }} + {% getsumworkdayexcludebreak workday as sumworkday %} + {{ sumworkday }} {% getsumbreak workday as sumbreakofday %} - {{sumbreakofday}} min. ({{workday.breaks.all|length}}) - + {{sumbreakofday}} min. ({{workday.breaks.all|length}}) {% getsumworkday workday as sumwd %} {{sumwd}} - - - DROPDOWN + + + {% gettimeoveralldiff workday user as erg%} + {% if erg.1 == 0 %} + +{{erg.0}} + {% elif erg.1 == 1 %} + {{erg.0}} + {% else %} + -{{erg.0}} + {% endif %} - - - - + + @@ -60,6 +64,82 @@ + +{% if user.usertime.usetime_start == None %} + + + +{% elif workdays|length == 0 %} + + +{% endif %} + {% for workday in workdays %} - - - - {% endif %}