diff --git a/dasettings/views.py b/dasettings/views.py index b569c00..dc1b2fb 100644 --- a/dasettings/views.py +++ b/dasettings/views.py @@ -272,9 +272,15 @@ class AbsenceReasonDeleteView(LoginRequiredMixin, DeleteView): template_name = 'dasettings/absencereason_confirm_delete.html' def delete(self, request, *args, **kwargs): - response = super(AbsenceReasonDeleteView, self).delete(request, *args, **kwargs) - messages.success(request, f'Abwesenheitskategorie wurde gelöscht!') - return response + try: + response = super(AbsenceReasonDeleteView, self).delete(request, *args, **kwargs) + messages.success(request, f'Abwesenheitskategorie wurde gelöscht!') + return response + except: + + messages.success(request, f'Abwesenheitskategorie kann nicht gelöscht werden, da Abwesenheiten eingetragen wurden.') + return redirect('dasettings') + def get_context_data(self, **kwargs): context = super(AbsenceReasonDeleteView, self).get_context_data(**kwargs) diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index da4d707..4905362 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 59a01d1..f577032 100644 --- a/standards/templatetags/counter_tag.py +++ b/standards/templatetags/counter_tag.py @@ -1,6 +1,6 @@ from django import template from django.contrib.auth.models import Group, User -from users.models import AgencyGroup, Agency, AgencyNetwork, AgencyNetworkPreperation +from users.models import AgencyGroup, Agency, AgencyNetwork, AgencyNetworkPreperation, UserTime from standards.models import Standards, StandardCommentRate, StandardComments from timemanagement.models import Workday, FreeDays, Absence from message.models import Message @@ -498,3 +498,12 @@ def getUserIsRep(user): 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: + return False diff --git a/timemanagement/forms.py b/timemanagement/forms.py index 6809f55..6e24724 100644 --- a/timemanagement/forms.py +++ b/timemanagement/forms.py @@ -15,7 +15,9 @@ class AddAbsence(forms.ModelForm): "end_ishalf" : "Halber Tag?", "reason" : "Abwesenheitsgrund", "representator" : "Vertreter", - "info" : "Begründung" + "info" : "Begründung", + "startday_info" : "", + "endday_info" : "" } widgets = { 'start': DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}), @@ -23,7 +25,8 @@ class AddAbsence(forms.ModelForm): } - fields = ['start', 'start_ishalf', 'end','end_ishalf', 'reason', "representator", 'info'] + #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) diff --git a/timemanagement/models.py b/timemanagement/models.py index b91269a..1d80ed3 100644 --- a/timemanagement/models.py +++ b/timemanagement/models.py @@ -31,13 +31,21 @@ class AbsenceReason(models.Model): return f'{self.name}' class Absence(models.Model): + dayinfochoices = [ + (0, 'Ganzer Tag'), + (1, 'Nur Vormittags'), + (2, 'Nur Nachmittags') + ] + startday_info = models.CharField(max_length=2, choices=dayinfochoices, default=0) + endday_info = models.CharField(max_length=2, choices=dayinfochoices, default=0) user = models.ForeignKey(User, on_delete=models.CASCADE) agency = models.ForeignKey(Agency, on_delete=models.CASCADE) start = models.DateField(default=None, null=True, blank=True) end = models.DateField(default=None, null=True, blank=True) start_ishalf = models.BooleanField(default=False, blank=True) end_ishalf = models.BooleanField(default=False, blank=True) - reason = models.ForeignKey("AbsenceReason", on_delete=models.SET_NULL, null=True, blank=True) + + reason = models.ForeignKey("AbsenceReason", on_delete=models.PROTECT, null=True, blank=True) info = models.TextField(blank=True, verbose_name='Abwesenheitsbegründung', default="") ''' CONFIRM_STATUS INFOS @@ -52,6 +60,8 @@ class Absence(models.Model): representator = models.ForeignKey(User, blank=True, default=None, null=True, on_delete=models.CASCADE, related_name="Vertreter") holidays_normal = models.FloatField(default=0.0, max_length=9, blank=True) holidays_rest = models.FloatField(default=0.0, max_length=9, blank=True) + holidays_normal_next = models.FloatField(default=0.0, max_length=9, blank=True) + holidays_rest_next = models.FloatField(default=0.0, max_length=9, blank=True) class FreeDays(models.Model): diff --git a/timemanagement/templates/timemanagement/rendered_table.html b/timemanagement/templates/timemanagement/rendered_table.html index ca509ad..a2590dc 100644 --- a/timemanagement/templates/timemanagement/rendered_table.html +++ b/timemanagement/templates/timemanagement/rendered_table.html @@ -26,11 +26,14 @@ {% isfreeday user da as isfree %} {% isfreedayname user da as isfreename %} - {% getabscenceday user us da as abday %} - + {% getabscenceday user us da as abday %} + {% startdatecheck us da as startdatecheck %} {% if isfree %} + + {% elif startdatecheck == False %} + {% elif da.weekday == 5 or da.weekday == 6 %} @@ -38,40 +41,83 @@ {% if abday.confirm_status == 0 %} {% if user|usergperm:"absencemanager" %} - - {% else %} + {% elif abday.user == user %} - {% endif %} + {% endif %} data-toggle="tooltip" data-placement="top" title="{% if abday.user == user %} {{abday.reason.name}} {% else %} Abwesend {% endif %} {% if abday.representator != None %} | Vertreter {{abday.representator.first_name}} {{abday.representator.last_name}} {% endif %} "> + {% else %} + + {% endif %} {% elif abday.confirm_status == 1 %} {% if user|usergperm:"absencemanager" %} {% else %} + {% endif %} data-toggle="tooltip" data-placement="top" title="Nicht bestätigt | {% if abday.user == user %} {{abday.reason.name}} {% else %} Abwesend {% endif %} {% if abday.representator != None %} | Vertreten durch {{abday.representator.first_name}} {{abday.representator.last_name}} {% endif %}"> {% endif %} {% else %} @@ -309,11 +361,16 @@ function recalculateChoosenDays(){ userid : userid, startdate : date_start.getFullYear() + "__" + (date_start.getMonth()+1) + "__" + date_start.getDate(), enddate : date_end.getFullYear() + "__" + (date_end.getMonth()+1) + "__" + date_end.getDate(), - start_half : $("#id_start_ishalf").prop("checked"), - end_half : $("#id_end_ishalf").prop("checked"), + //start_half : $("#id_start_ishalf").prop("checked"), + //end_half : $("#id_end_ishalf").prop("checked"), + startday_info : $("#id_startday_info").val(), + endday_info : $("#id_endday_info").val(), }, success : function(data){ + + console.log(data); + $("#startAbsenceProgress").modal("show"); @@ -322,10 +379,11 @@ function recalculateChoosenDays(){ $("#detail_rest").html(data["restholiday_thisyear"]); $("#detail_resthol").html(data["restholiday_lastyear"]); $("#detail_next").html(data["restholiday_nextyear"]); - + $("#detail_next_rest").html(data["restholiday_nextyear_rest"]); $("#detail_tocontract").html(data["need_days"]); - - $("#detail_sum").html(data["restholiday_thisyear"]+data["restholiday_lastyear"]+data["restholiday_nextyear"]); + $("#detail_tocontract_overall").html(data["need_days"]); + + $("#detail_sum").html(data["restholiday_thisyear"]+data["restholiday_lastyear"]+data["restholiday_nextyear"]+data["restholiday_nextyear_rest"]); if(data["restholiday_thisyear"] < 0 || data["restholiday_lastyear"] < 0 || data["restholiday_nextyear"] < 0){ $("#start_absence_contract").prop("disabled", true); @@ -336,15 +394,17 @@ function recalculateChoosenDays(){ if(seldates.length == 1){ $("#div_id_end").hide(); - $("#div_id_end_ishalf").hide(); + $("#div_id_endday_info").hide(); + } + else{ + $("#div_id_end").show(); + $("#div_id_endday_info").show(); } } }); } function recalculateChoosenDaysAfterInit(){ - console.log(sameday); - new_start = $("#id_start").datepicker().val(); new_end = $("#id_end").datepicker().val(); @@ -368,19 +428,36 @@ function recalculateChoosenDaysAfterInit(){ userid : userid, startdate : new_start[2] + "__" + new_start[1] + "__" + new_start[0], enddate : new_end[2] + "__" + new_end[1] + "__" + new_end[0], - start_half : $("#id_start_ishalf").prop("checked"), - end_half : $("#id_end_ishalf").prop("checked"), + //start_half : $("#id_start_ishalf").prop("checked"), + //end_half : $("#id_end_ishalf").prop("checked"), + startday_info : $("#id_startday_info").val(), + endday_info : $("#id_endday_info").val(), }, success : function(data){ - + console.log(data); $("#restholidays").html(data["restholiday_thisyear"]); $("#detail_rest").html(data["restholiday_thisyear"]); $("#detail_resthol").html(data["restholiday_lastyear"]); $("#detail_next").html(data["restholiday_nextyear"]); $("#holidayyear").html(new_start[2]); - $("#detail_sum").html(data["restholiday_thisyear"]+data["restholiday_lastyear"]+data["restholiday_nextyear"]); + $("#detail_sum").html(data["restholiday_thisyear"]+data["restholiday_lastyear"]+data["restholiday_nextyear"]+data["restholiday_nextyear_rest"]); $("#detail_tocontract").html(data["need_days"]); + $("#detail_tocontract_overall").html(data["need_days"]); + + if(data["two_years"] == true){ + $("#detail_tocontract").html(data["need_days_this"]); + $("#two_years").show(); + $("#holidayyear_next").html(new_end[2]); + $("#detail_next_rest").html(data["restholiday_nextyear_rest"]); + $("#detail_next").html(data["restholiday_nextyear"]); + $("#detail_tocontract_next").html(data["need_days_next"]); + $("#restholidays_next").html(data["restholiday_nextyear"]); + $("#detail_tocontract_overall").html(data["need_days_next"]+data["need_days_this"]); + } + else{ + $("#two_years").hide(); + } behindcheck = false; if(+behindcheck_start == +behindcheck_end){ @@ -415,6 +492,7 @@ $("#id_end").blur(function(){ recalculateChoosenDaysAfterInit(); }) +/* $("#id_start_ishalf").change(function(){ recalculateChoosenDaysAfterInit(); }) @@ -422,6 +500,14 @@ $("#id_start_ishalf").change(function(){ $("#id_end_ishalf").change(function(){ recalculateChoosenDaysAfterInit(); }) +*/ +$("#id_startday_info").change(function(){ + recalculateChoosenDaysAfterInit(); +}) + +$("#id_endday_info").change(function(){ + recalculateChoosenDaysAfterInit(); +}) $( function() { @@ -537,3 +623,4 @@ $( function() { + diff --git a/timemanagement/templates/timemanagement/tm_ab_management.html b/timemanagement/templates/timemanagement/tm_ab_management.html index f5aae5c..d06d1ae 100644 --- a/timemanagement/templates/timemanagement/tm_ab_management.html +++ b/timemanagement/templates/timemanagement/tm_ab_management.html @@ -89,9 +89,18 @@