diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc
index 5142079..b1928e8 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 d65c8bf..21357aa 100644
--- a/standards/templatetags/counter_tag.py
+++ b/standards/templatetags/counter_tag.py
@@ -22,7 +22,7 @@ def setvar(value):
return ''
@register.simple_tag
-def getvar():
+def getvar():
global b
return b
@@ -30,9 +30,9 @@ def getvar():
def incvar():
global b
b += 1
- return ''
+ return ''
+
-
@register.filter(name='has_group')
def has_group(user, group_name):
group = Group.objects.get(name=group_name)
@@ -41,7 +41,7 @@ def has_group(user, group_name):
if g.name == group_name:
in_group = True
return in_group
-
+
@register.simple_tag
def setbool(value):
global groupbool
@@ -49,8 +49,8 @@ def setbool(value):
return ''
@register.simple_tag
-def getbool():
- global groupbool
+def getbool():
+ global groupbool
return groupbool
@@ -72,9 +72,9 @@ def getmesscounter(user):
'''
@register.filter(name="usergperm")
def usergperm(user, perm):
- stat = False
+ stat = False
if user.has_perm('users.'+perm):
- stat = True
+ stat = True
return stat
@register.filter(name="useringroupbyid")
@@ -94,7 +94,7 @@ def filename(value):
# Gibt die Summe aller Agenturen eines Agentuverbundes zurück
@register.simple_tag
-def getsumofallag(agn_id):
+def getsumofallag(agn_id):
return len(AgencyNetwork.objects.get(pk=agn_id).adminagencys.all()) + len(AgencyNetwork.objects.get(pk=agn_id).members.all()) + len(AgencyNetwork.objects.get(pk=agn_id).sharemembers.all())
# Gibt die Summe aller Standards in einem Agenturverband zurück
@@ -123,7 +123,7 @@ def ifaginadminagn(agn_id, agencyid):
agency_is_admin = True
return agency_is_admin
-
+
@register.simple_tag
def ifmember(agn_id, agencyid):
@@ -135,7 +135,7 @@ def ifmember(agn_id, agencyid):
ismember = True
return ismember
-
+
@register.simple_tag
def ifsharemember(agn_id, agencyid):
agn = AgencyNetwork.objects.get(pk=agn_id)
@@ -167,7 +167,7 @@ def getoutstandinginvites(agnetwork):
@register.simple_tag
def checkifsharedstandardinagency(agency, standard):
-
+
checkstandard = Standards.objects.filter(agency=agency, parent_standard=standard)
in_agency = False
@@ -185,7 +185,7 @@ def getcommentsdown(comment):
counter_down = len(StandardCommentRate.objects.filter(oncomment=comment, rate_stats=0))
return counter_down
-
+
@register.simple_tag
def getcommentsup(comment):
comment_ratings = StandardCommentRate.objects.filter(oncomment_id=comment)
@@ -201,10 +201,10 @@ def getcommentstat_user(comment, user):
comment_rating = list(StandardCommentRate.objects.filter(oncomment_id=comment, rated_by=user))
stat = "nostat"
-
+
if len(comment_rating) == 1:
stat = comment_rating[0].rate_stats
-
+
return stat
@register.simple_tag
@@ -230,7 +230,7 @@ def isUserInAuth(task, area, user_id):
if len(st_auth) > 0:
found = True
-
+
return found
@register.simple_tag
@@ -246,10 +246,10 @@ def isUserInEx(task, area, user_id):
if len(st_auth) > 0:
found = True
-
+
return found
-
+
@register.simple_tag
def isUserInRep(task, area, user_id):
@@ -268,11 +268,11 @@ def isUserInRep(task, area, user_id):
# Check for active WorkDay
@register.simple_tag
def getactualworkingday(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)
returnstat = 0
if(len(wd) > 0):
- returnstat = list(wd)[0].start
+ returnstat = list(wd)[0].start
return returnstat
# Return formatted Time-String
@@ -303,7 +303,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)
returnstat = 0
# ACTIVE WORKING DAY
if(len(wd) > 0):
@@ -314,26 +314,26 @@ def getactualbreak(user):
# Check if all Breaks ended
wdbreak = wd.breaks.filter(end=None)
if(len(wdbreak) > 0):
- returnstat = True
-
+ returnstat = True
+
else:
returnstat = False
return returnstat
@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)
returnstat = False
# ACTIVE WORKING DAY
if(len(wd) > 0):
wd = list(wd)[0]
if(len(wd.breaks.all()) > 0):
- wdbreak = wd.breaks.filter(end=None)
+ wdbreak = wd.breaks.filter(end=None)
if(len(wdbreak) > 0):
now = timezone.now()
breakstart = list(wdbreak)[0].start
- returnstat = (now - breakstart).seconds * 1000
+ returnstat = (now - breakstart).seconds * 1000
return returnstat
# GET ALL BREAK AS MILLISECOND-RESULT
@@ -343,7 +343,7 @@ def getdailybreaktime(user):
breaksum = 0
for b in wd.breaks.all():
if(b.end != None):
- breaksum += (b.end - b.start).seconds
+ breaksum += (b.end - b.start).seconds
return breaksum*1000
@register.simple_tag
@@ -353,7 +353,7 @@ def getdailybreaktimetoday(user):
breaksum = 0
for b in wd.breaks.all():
if(b.end != None):
- breaksum += (b.end - b.start).seconds
+ breaksum += (b.end - b.start).seconds
return breaksum*1000
@register.simple_tag
@@ -362,10 +362,10 @@ def getsumworkday(workday):
sum_break = 0
if(len(workday.breaks.all()) > 0):
-
+
for ele in workday.breaks.all():
- sum_break += (ele.end - ele.start).seconds
-
+ sum_break += (ele.end - ele.start).seconds
+
finalsum = ((workday.end - workday.start).seconds - sum_break)
mon, sec = divmod(finalsum, 60)
@@ -387,10 +387,10 @@ def getsumbreak(workday):
sum_break = 0
if(len(workday.breaks.all()) > 0):
-
+
for ele in workday.breaks.all():
- sum_break += (ele.end - ele.start).seconds
-
+ sum_break += (ele.end - ele.start).seconds
+
return int(sum_break/60)
# DATE TIME HELPTER
@@ -410,7 +410,7 @@ def getactdateforloopcounter():
@register.simple_tag
def isfreeday(user, daytocheck):
returnstat = False
- fd = FreeDays.objects.filter(agency=user.profile.agency, day=daytocheck)
+ fd = FreeDays.objects.filter(agency=user.profile.agency, day=daytocheck)
if len(fd) > 0:
returnstat = True
return returnstat
@@ -418,10 +418,10 @@ def isfreeday(user, daytocheck):
@register.simple_tag
def isfreedayname(user, daytocheck):
returnstat = False
- fd = FreeDays.objects.filter(agency=user.profile.agency, day=daytocheck)
+ fd = FreeDays.objects.filter(agency=user.profile.agency, day=daytocheck)
if len(fd) > 0:
returnstat = True
- returnstat = fd[0].name
+ returnstat = fd[0].name
return returnstat
# RETURN ALL ABSENCE ELEMENTS FOR THAT DAY
@@ -430,7 +430,7 @@ def getabscenceday(loggeduser, user, daytocheck):
returnstat = False
if(loggeduser.has_perm("users.absencemanager")):
- absencedays = Absence.objects.filter(agency=user.profile.agency, user=user, start=daytocheck) | (Absence.objects.filter(agency=user.profile.agency, user=user, start__lt=daytocheck) & Absence.objects.filter(agency=user.profile.agency, user=user, end__gt=daytocheck)) | Absence.objects.filter(agency=user.profile.agency, user=user, end=daytocheck)
+ absencedays = Absence.objects.filter(agency=user.profile.agency, user=user, start=daytocheck) | (Absence.objects.filter(agency=user.profile.agency, user=user, start__lt=daytocheck) & Absence.objects.filter(agency=user.profile.agency, user=user, end__gt=daytocheck)) | Absence.objects.filter(agency=user.profile.agency, user=user, end=daytocheck)
else:
absencedays = (Absence.objects.filter(agency=user.profile.agency, user=loggeduser, confirm_status=1) | Absence.objects.filter(agency=user.profile.agency, user=user, confirm_status=0)) & (Absence.objects.filter(agency=user.profile.agency, user=user, start=daytocheck) | (Absence.objects.filter(agency=user.profile.agency, user=user, start__lt=daytocheck) & Absence.objects.filter(agency=user.profile.agency, user=user, end__gt=daytocheck)) | Absence.objects.filter(agency=user.profile.agency, user=user, end=daytocheck) )
if(len(absencedays) > 0):
@@ -481,7 +481,7 @@ def getMessageDayInfo(info):
return True
else:
return False
-
+
@register.simple_tag
def getUserIsRep(user):
# REPRESENTATOR
@@ -502,15 +502,15 @@ def getUserIsRep(user):
absence_holiday = Absence.objects.filter(agency=user.profile.agency, user=user, start__lte=today, end__gte=today, reason__is_holiday=True, confirm_status=0)
if(len(absence_holiday) > 0):
- repstring = "Wir wünschen Ihnen noch bis zum " + absence_holiday[0].end.strftime("%d.%m.%Y") + " einen schönen Urlaub!"
+ repstring = "Wir wünschen Ihnen noch bis zum " + absence_holiday[0].end.strftime("%d.%m.%Y") + " einen schönen Urlaub!"
- return repstring
+ return repstring
# Check, if a user is behind a day in agency (working startdate)
@register.simple_tag
def startdatecheck(usertocheck, day):
uertime = list(UserTime.objects.filter(user=usertocheck))[0]
-
+
if uertime.startdate < day:
return True
else:
@@ -522,13 +522,13 @@ 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
-
+ 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
@@ -551,24 +551,30 @@ def gettimeoveralldiff(workday, user):
# Ladet das aktuelle Gleitzeitkonto
+'''
+
+ Es werden nur Tage berücksichtigt, die in der Vergangenheit liegen!
+
+'''
@register.simple_tag
def loadaccounttime(user):
status = 0
- workdays = Workday.objects.filter(user=user).exclude(end=None)
+ today = date.today()
+ workdays = Workday.objects.filter(user=user, start__lt=today).exclude(end=None)
finalaccounttimesum = datetime.timedelta(minutes=0)
-
+
for workday in workdays:
- # Zeit, die der Mitarbeiter gearbeitet haben MUSS
+ # 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
-
+ 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
@@ -579,7 +585,7 @@ def loadaccounttime(user):
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):
@@ -588,7 +594,7 @@ def loadaccounttime(user):
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]
@@ -615,13 +621,13 @@ def getthisdaynotworking(user, day):
elif(day.isoweekday() == 4):
if user.usertime.wd_th == 0.0:
stat = True
- elif(day.isoweekday() == 5):
+ elif(day.isoweekday() == 5):
if user.usertime.wd_fr == 0.0:
stat = True
- elif(day.isoweekday() == 6):
+ elif(day.isoweekday() == 6):
if user.usertime.wd_sa == 0.0:
stat = True
- elif(day.isoweekday() == 7):
+ elif(day.isoweekday() == 7):
if user.usertime.wd_so == 0.0:
stat = True
return stat
diff --git a/timemanagement/forms.py b/timemanagement/forms.py
index 19a7210..b507256 100644
--- a/timemanagement/forms.py
+++ b/timemanagement/forms.py
@@ -9,8 +9,8 @@ class AddAbsence(forms.ModelForm):
class Meta:
model = Absence
labels = {
- "start" : "Beginn der Abwesenheit",
- "start_ishalf" : "Halber Tag?",
+ "start" : "Beginn der Abwesenheit",
+ "start_ishalf" : "Halber Tag?",
"end" : "Ende der Abwesenheit",
"end_ishalf" : "Halber Tag?",
"reason" : "Abwesenheitsgrund",
@@ -20,14 +20,14 @@ class AddAbsence(forms.ModelForm):
"endday_info" : ""
}
widgets = {
- 'start': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
- 'end': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
+ 'start': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
+ 'end': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
}
#fields = ['start', 'start_ishalf', 'end','end_ishalf', 'reason', "representator", 'info']
fields = ['start', 'startday_info', 'end','endday_info', 'reason', "representator", 'info']
-
+
def __init__(self, *arg, **kwargs):
super(AddAbsence, self).__init__(*arg, **kwargs)
self.fields['reason'].queryset = AbsenceReason.objects.filter(agency=kwargs['instance'].profile.agency).order_by('-name')
@@ -48,12 +48,12 @@ class AddAbsence(forms.ModelForm):
class UpdateAbsence(forms.ModelForm):
-
+
class Meta:
model = Absence
labels = {
- "start" : "Beginn der Abwesenheit",
- "start_ishalf" : "Halber Tag?",
+ "start" : "Beginn der Abwesenheit",
+ "start_ishalf" : "Halber Tag?",
"end" : "Ende der Abwesenheit",
"end_ishalf" : "Halber Tag?",
"reason" : "Abwesenheitsgrund",
@@ -63,14 +63,14 @@ class UpdateAbsence(forms.ModelForm):
"endday_info" : ""
}
widgets = {
- 'start': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
- 'end': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
+ 'start': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
+ 'end': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
}
#fields = ['start', 'start_ishalf', 'end','end_ishalf', 'reason', "representator", 'info']
fields = ['start', 'startday_info', 'end','endday_info', 'reason', "representator", 'info', 'holidays_normal', 'holidays_rest', 'holidays_normal_next', 'holidays_rest_next' ]
-
+
def __init__(self, *arg, **kwargs):
super(UpdateAbsence, self).__init__(*arg, **kwargs)
self.fields['reason'].queryset = AbsenceReason.objects.filter(agency=kwargs['instance'].profile.agency).order_by('-name')
@@ -107,7 +107,7 @@ class ConfirmAbsenceForm(forms.ModelForm):
class Meta:
model = Absence
- labels = {
+ labels = {
"confirm_info" : "Begründung zur Annahme/zur Ablehnung"
}
fields = ['confirm_info']
@@ -130,7 +130,7 @@ class AddFreeDayForm(forms.ModelForm):
"name", "day"
]
widgets = {
- 'day': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
+ 'day': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
}
def __init__(self, *arg, **kwargs):
@@ -153,15 +153,38 @@ class UpdateWorkdayForm(forms.ModelForm):
"start", "end", "target"
]
widgets = {
- 'start': DatePickerInput(options={"format":'HH:mm', "locale":'de'}),
- 'end': DatePickerInput(options={"format":'HH:mm', "locale":'de'}),
+ '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 WORKDAY FORM
+class AddWorkdayForm(forms.ModelForm):
+ class Meta:
+ model = Workday
+ labels = {
+ "start" : "Start",
+ "end" : "Ende",
+ "target" : "Zielarbeitszeit"
+ }
+
+ fields = [
+ "start", "end", "target"
+ ]
+ widgets = {
+ 'start': DatePickerInput(options={"format":'DD.MM.YYYY HH:mm', "locale":'de'}),
+ 'end': DatePickerInput(options={"format":'DD.MM.YYYY HH:mm', "locale":'de'}),
+ }
+
+ def __init__(self, *arg, **kwargs):
+ super(AddWorkdayForm, self).__init__(*arg, **kwargs)
+ self.fields['start'].required = True
+ self.fields['end'].required = True
+
# ADD BREAK FORM
class AddBreakForm(forms.ModelForm):
class Meta:
@@ -175,11 +198,11 @@ class AddBreakForm(forms.ModelForm):
"start", "end"
]
widgets = {
- 'start': DatePickerInput(options={"format":'HH:mm', "locale":'de'}),
- 'end': DatePickerInput(options={"format":'HH:mm', "locale":'de'}),
+ '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
+ self.fields['end'].required = True
diff --git a/timemanagement/templates/timemanagement/timemanagement_add.html b/timemanagement/templates/timemanagement/timemanagement_add.html
new file mode 100644
index 0000000..41e2744
--- /dev/null
+++ b/timemanagement/templates/timemanagement/timemanagement_add.html
@@ -0,0 +1,22 @@
+{% extends "users/base.html" %}
+{% block content %}
+{% load crispy_forms_tags %}
+{% load counter_tag %}
+{% if request.user.profile.agency.module_timemanagement %}
+
+
Arbeitstag hinzufügen
+
+
Start- und Endzeitpunkt
+
+
+
+
Abbrechen
+
Arbeitstag hinzufügen
+
+
+{% endif %}
+{% endblock content %}
diff --git a/timemanagement/templates/timemanagement/timemanagement_management.html b/timemanagement/templates/timemanagement/timemanagement_management.html
index b8255e6..77dccc7 100644
--- a/timemanagement/templates/timemanagement/timemanagement_management.html
+++ b/timemanagement/templates/timemanagement/timemanagement_management.html
@@ -4,7 +4,7 @@
{% if request.user.profile.agency.module_timemanagement %}
Zeiterfassung
- Arbeitstag
+ Arbeitstag
@@ -15,48 +15,130 @@
{{active_month}} {{active_year}}
-{% for workday in workdays %}
-{% if workday.start.weekday == 0 and forloop.counter > 1%}
-
-
-
-
{{workday.start|date:"W"}}. Woche
-
-{% elif forloop.counter == 1 %}
-
-
-
{{workday.start|date:"W"}}. Woche
-
-{% endif %}
-
-
-
{{workday.start|date:"l"}}, {{workday.start|date:"d.m"}}
- Von {{workday.start|date:"H:i"}} bis {{workday.end|date:"H:i"}}
-
- {% getsumworkdayexcludebreak workday as sumworkday %}
- Arbeitszeit: {{ sumworkday }}
- {% getsumbreak workday as sumbreakofday %}
- Pausen: {{sumbreakofday}} min. ({{workday.breaks.all|length}})
- {% getsumworkday workday as sumwd %}
- Gesamtzeit: {{sumwd}}
- Gleitzeit:
- {% gettimeoveralldiff workday user as erg%}
- {% if erg.1 == 0 %}
- +{{erg.0}}
- {% elif erg.1 == 1 %}
- {{erg.0}}
- {% else %}
- -{{erg.0}}
- {% endif %}
-
-
-
+
+
+
+
+
+
+
+
+
+ Start
+ Ende
+ Arbeitszeit
+ Pausen
+ Gesamtzeit
+ Gleitzeit
+
+
+
+
+ {% for da in days_this_month %}
+
+ {% getabscenceday request.user request.user da as abday %}
+
+
+
+ {{da|date:"l"}}
+
+
+ {{da|date:"d.m.y"}}
+
+
+ {% if abday != False %}
+ {{abday.reason}}
+ {% else %}
+ {% if abday == False %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+ {{workday.start|date:"H:i"}}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% endif %}
+
+
+ {% if abday == False %}
+ {% for workday in workdays %}
+ {% if workday.end|date:"d-m-y" == da|date:"d-m-y" %}
+ {{workday.end|date:"H:i"}}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+
+ {% if abday == False %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+ {% getsumworkdayexcludebreak workday as sumworkday %}
+ {{ sumworkday }}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+
+ {% if abday == False %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+ {% getsumbreak workday as sumbreakofday %}
+ {{sumbreakofday}} min. ({{workday.breaks.all|length}})
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+
+ {% if abday == False %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+ {% getsumworkday workday as sumwd %}
+ {{sumwd}}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+
+ {% if abday == False %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+ {% gettimeoveralldiff workday user as erg%}
+ {% if erg.1 == 0 %}
+ +{{erg.0}}
+ {% elif erg.1 == 1 %}
+ {{erg.0}}
+ {% else %}
+ -{{erg.0}}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+
+ {% if abday == False %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+
+ {% endfor %}
+
+
-
-{% endfor %}
-
+
+
+
+
{% if user.usertime.usetime_start == None %}
@@ -99,7 +181,7 @@
- Es wurden keine Arbeitstage bis zum Beginn der Zeiterfassung am {{user.usertime.usetime_start|date:"d.m.Y"}} gefunden. Sollen diese Tage mit der Regelarbeitszeit aufgefüllt werden, welche bei den Vertragsdaten hinterlegt wurde?
+ Es wurden keine Arbeitstage bis zum Beginn der Zeiterfassung am {{user.usertime.usetime_start|date:"d.m.Y"}} gefunden. Sollen diese Tage mit der Regelarbeitszeit aufgefüllt werden, welche bei den Vertragsdaten hinterlegt wurde? Abwesenheiten werden nicht berücksichtigt!
+
+{% elif userhasworkdays == False %}
+
+
+
+
+
+ Es wurden keine Arbeitstage bis zum Beginn der Zeiterfassung am {{user.usertime.usetime_start|date:"d.m.Y"}} gefunden. Sollen diese Tage mit der Regelarbeitszeit aufgefüllt werden, welche bei den Vertragsdaten hinterlegt wurde? Abwesenheiten werden nicht berücksichtigt!
+
+
+
+
+
+
+
+{% endif %}
+
+{% for workday in workdays %}
+
+
+
+
+
+ Möchten Sie wirklich den Arbeitstag am {{workday.start|date:"d.m"}} löschen?
+
+
+
+
+
+
+{% endfor %}
+
+
+{% else %}
+
Das Modul Abwesenheits- und Zeiterfassung wurde in ihrer Agentur deaktiviert oder die Zeiterfassung wurde im Modul deaktiviert.
+{% endif %}
+{% endblock content %}
diff --git a/timemanagement/templates/timemanagement/timemanagement_update.html b/timemanagement/templates/timemanagement/timemanagement_update.html
index fc43925..e9f82ac 100644
--- a/timemanagement/templates/timemanagement/timemanagement_update.html
+++ b/timemanagement/templates/timemanagement/timemanagement_update.html
@@ -4,7 +4,7 @@
{% load counter_tag %}
{% if request.user.profile.agency.module_timemanagement %}
-
+
Arbeitstag am {{workday.start|date:"d.m.Y"}} bearbeiten
Start- und Endzeitpunkt
@@ -12,11 +12,11 @@
Pausen
-
+
@@ -24,8 +24,8 @@
#
Start
- Ende
-
+ Ende
+
@@ -59,7 +59,7 @@
@@ -75,12 +75,12 @@
action : "remove_break",
break: {{break.pk}},
},
- success: function( data )
- {
+ success: function( data )
+ {
$("#wd_break_{{break.pk}}").remove();
$("#confirm-delete_{{break.pk}}").modal("toggle");
}
- });
+ });
});
{% endfor %}
@@ -95,7 +95,7 @@ $("#id_start").blur(function(){
checkBreaks();
})
-function checkBreaks(){
+function checkBreaks(){
$('.ui-datepicker-calendar').hide();
$('.ui-datepicker-header').hide();
@@ -111,4 +111,4 @@ function checkBreaks(){
}
{% endif %}
-{% endblock content %}
\ No newline at end of file
+{% endblock content %}
diff --git a/timemanagement/urls.py b/timemanagement/urls.py
index 63be21f..0024adf 100644
--- a/timemanagement/urls.py
+++ b/timemanagement/urls.py
@@ -1,6 +1,6 @@
from django.urls import path
from django.contrib.auth.decorators import login_required, permission_required
-from .views import TimeManagement, TimeAjax, AbsenceManagmenet, AbsenceUpdate, TimeUpdate, AddBreak
+from .views import TimeManagement, TimeAjax, AbsenceManagmenet, AbsenceUpdate, TimeUpdate, AddBreak, TimeAdd
'''
Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben!
'''
@@ -9,6 +9,7 @@ urlpatterns = [
path('', TimeManagement, name='tm-management'),
path('/', TimeManagement, name='tm-management'),
path('update/', TimeUpdate, name='tm-update'),
+ path('add/', TimeAdd, name='tm-add'),
path('update//addbreak/', AddBreak, name='add-break'),
path('abs/', AbsenceManagmenet, name='tma-management'),
path('abs//', AbsenceManagmenet, name='tma-management'),
diff --git a/timemanagement/views.py b/timemanagement/views.py
index 5b8fc4e..3600cae 100644
--- a/timemanagement/views.py
+++ b/timemanagement/views.py
@@ -11,7 +11,7 @@ from django.contrib.auth.models import User
from calendar import monthrange
import datetime
import calendar
-from .forms import AddAbsence, ConfirmAbsenceForm, UpdateAbsence, UpdateWorkdayForm, AddBreakForm
+from .forms import AddAbsence, ConfirmAbsenceForm, UpdateAbsence, UpdateWorkdayForm, AddBreakForm, AddWorkdayForm
from django.contrib import messages
from users.models import UserFullName, UserYearAbsenceInfo
from users.models import UserTime
@@ -328,9 +328,11 @@ def TimeManagement(request, activemonth=False, activeyear=False):
"active_year" : active_year,
"active_month" : active_month,
"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),
"userhasworkdays" : user_has_workdays
}
+
return render(request, 'timemanagement/timemanagement_management.html', context)
@login_required
@@ -358,6 +360,42 @@ def TimeUpdate(request, pk):
}
return render(request, 'timemanagement/timemanagement_update.html', context)
+@login_required
+def TimeAdd(request):
+ if(request.method == "POST"):
+ form = AddWorkdayForm(request.POST, instance=request.user)
+ if form.is_valid():
+ #start = datetime.datetime(int(workday.start.year), int(workday.start.month), int(workday.start.day), int(((str(form["start"].value()).split(":"))[0])), int(((str(form["start"].value()).split(":"))[1])))
+
+ #end = datetime.datetime(int(workday.end.year), int(workday.end.month), int(workday.end.day), int(((str(form["end"].value()).split(":"))[0])), int(((str(form["end"].value()).split(":"))[1])))
+
+ workday = Workday(start=form.cleaned_data["start"], end=form.cleaned_data["end"], target=form.cleaned_data["target"], user=request.user, agency=request.user.profile.agency)
+
+ if workday.start.day != workday.end.day or workday.start.month != workday.end.month or workday.start.year != workday.end.year or workday.start > workday.end:
+ messages.success(request, f'Der Arbeitstag darf nur an einem Tag stattfinden und das Ende muss nach dem Anfang liegen.')
+ context = {
+ "active_link" : "timemanagement",
+ "form" : AddWorkdayForm()
+ }
+ return render(request, 'timemanagement/timemanagement_add.html', context)
+ else:
+ workday.save()
+ messages.success(request, f'Arbeitstag hinzugefügt')
+ return redirect('tm-management')
+ else:
+ messages.success(request, f'Bitte valide Daten eingeben!')
+ context = {
+ "active_link" : "timemanagement",
+ "form" : AddWorkdayForm()
+ }
+ return render(request, 'timemanagement/timemanagement_add.html', context)
+ else:
+ context = {
+ "active_link" : "timemanagement",
+ "form" : AddWorkdayForm()
+ }
+ return render(request, 'timemanagement/timemanagement_add.html', context)
+
@login_required
def AddBreak(request, pk):
if(request.method == "POST"):