From 642e1ee8bb2a779cf9cae7aaf357d51845f7eb23 Mon Sep 17 00:00:00 2001 From: Holger Trampe Date: Sat, 30 May 2020 12:25:09 +0200 Subject: [PATCH] Abwesenheit fertig ausser Benachrichtigungen --- timemanagement/forms.py | 48 ++ .../timemanagement/rendered_table.html | 3 +- .../templates/timemanagement/tm_ab_all.html | 9 +- .../timemanagement/tm_ab_management.html | 3 - .../timemanagement/tm_ab_update.html | 409 ++++++++++++++++++ timemanagement/urls.py | 3 +- timemanagement/views.py | 88 +++- 7 files changed, 555 insertions(+), 8 deletions(-) create mode 100644 timemanagement/templates/timemanagement/tm_ab_update.html diff --git a/timemanagement/forms.py b/timemanagement/forms.py index 6e24724..1362c51 100644 --- a/timemanagement/forms.py +++ b/timemanagement/forms.py @@ -45,6 +45,54 @@ class AddAbsence(forms.ModelForm): self.fields['activeyear'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput()) self.fields['userid'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput()) + + +class UpdateAbsence(forms.ModelForm): + + class Meta: + model = Absence + labels = { + "start" : "Beginn der Abwesenheit", + "start_ishalf" : "Halber Tag?", + "end" : "Ende der Abwesenheit", + "end_ishalf" : "Halber Tag?", + "reason" : "Abwesenheitsgrund", + "representator" : "Vertreter", + "info" : "Begründung", + "startday_info" : "", + "endday_info" : "" + } + widgets = { + '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') + self.fields['representator'].queryset = UserFullName.objects.filter(profile__agency=kwargs['instance'].profile.agency, ) + self.fields['info'].widget.attrs['rows'] = 3 + self.fields['start'].required = True + self.fields['end'].required = True + self.fields['reason'].required = True + + self.fields['nextmonth'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput()) + self.fields['prevmonth'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput()) + self.fields['nextyear'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput()) + self.fields['prevyear'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput()) + self.fields['activemonth'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput()) + self.fields['activeyear'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput()) + self.fields['userid'] = forms.CharField(initial="", required=False, widget=forms.HiddenInput()) + + self.fields['holidays_normal'] = forms.FloatField(required=False, widget=forms.HiddenInput()) + self.fields['holidays_rest'] = forms.FloatField(required=False, widget=forms.HiddenInput()) + self.fields['holidays_normal_next'] = forms.FloatField(required=False, widget=forms.HiddenInput()) + self.fields['holidays_rest_next'] = forms.FloatField(required=False, widget=forms.HiddenInput()) + ''' def clean(self): start_date = self.cleaned_data['start'] diff --git a/timemanagement/templates/timemanagement/rendered_table.html b/timemanagement/templates/timemanagement/rendered_table.html index 948a3ab..fb056a4 100644 --- a/timemanagement/templates/timemanagement/rendered_table.html +++ b/timemanagement/templates/timemanagement/rendered_table.html @@ -458,7 +458,8 @@ function recalculateChoosenDaysAfterInit(){ $("#detail_tocontract").html(data["need_days"]); $("#detail_tocontract_overall").html(data["need_days"]); - + $("#detail_next_rest").html(data["restholiday_nextyear_rest"]); + if(data["two_years"] == true){ $("#detail_tocontract").html(data["need_days_this"]); $("#two_years").show(); diff --git a/timemanagement/templates/timemanagement/tm_ab_all.html b/timemanagement/templates/timemanagement/tm_ab_all.html index 97c6651..4818540 100644 --- a/timemanagement/templates/timemanagement/tm_ab_all.html +++ b/timemanagement/templates/timemanagement/tm_ab_all.html @@ -23,7 +23,8 @@ {{abday.reason.name}} {{abday.info}} {% if abday.confirm_status == 0 %} Genehmigt {% elif abday.confirm_status == 1 %} Beantragt {% else %} Abgelehnt {% endif %} - + + @@ -33,6 +34,12 @@ + +{% endif %} +{% endblock content %} diff --git a/timemanagement/urls.py b/timemanagement/urls.py index 9b1cf57..f142e35 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 +from .views import TimeManagement, TimeAjax, AbsenceManagmenet, AbsenceUpdate ''' Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben! ''' @@ -10,6 +10,7 @@ urlpatterns = [ path('abs/', AbsenceManagmenet, name='tma-management'), path('abs//', AbsenceManagmenet, name='tma-management'), path('ajax/', TimeAjax, name='tm-ajax'), + path('abs/update//', AbsenceUpdate, name='tma-update'), #path('newsadd/', permission_required('users.modulenews')(views.NewsAdd), name='news-add'), #path('newsupdate//', permission_required('users.modulenews')(views.NewsUpdate), name='news-update'), #path('news//delete', permission_required('users.modulenews')(NewsDeleteView.as_view()), name='news-delete'), diff --git a/timemanagement/views.py b/timemanagement/views.py index 0fe0f4b..4664de2 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 +from .forms import AddAbsence, ConfirmAbsenceForm, UpdateAbsence from django.contrib import messages from users.models import UserFullName, UserYearAbsenceInfo from users.models import UserTime @@ -50,6 +50,90 @@ def get_datetime_range(year, month): nb_days = monthrange(year, month)[1] return [datetime.date(year, month, day) for day in range(1, nb_days+1)] +@login_required +def AbsenceUpdate(request, pk): + + if request.method == "GET": + absence = Absence.objects.get(pk=pk) + timeinfo_thisyear = list(UserYearAbsenceInfo.objects.filter(year=absence.start.year, user=absence.user))[0] + try: + timeinfo_nextyear = list(UserYearAbsenceInfo.objects.filter(year=absence.start.year+1, user=absence.user))[0] + except: + timeinfo_nextyear = False + + context = { + "active_link" : "abscence", + "form" : UpdateAbsence(instance=request.user), + "absence" : absence, + "timeinfo_thisyear" : timeinfo_thisyear, + "timeinfo_nextyear" : timeinfo_nextyear, + "start" : absence.start.strftime("%d.%m.%Y"), + "end" : absence.end.strftime("%d.%m.%Y"), + } + return render(request, 'timemanagement/tm_ab_update.html', context) + elif request.method == "POST": + absence = Absence.objects.get(pk=pk) + formtocheck = UpdateAbsence(request.POST, instance=request.user) + if(formtocheck.is_valid()): + + abinfo = list(UserYearAbsenceInfo.objects.filter(user=absence.user, year=absence.start.year))[0] + abinfo_lastyear = "" + abinfo_nextyear = "" + + is_lastyear = False + + abinfo_lastyear = list(UserYearAbsenceInfo.objects.filter(user=absence.user, year=absence.start.year-1)) + if(len(abinfo_lastyear) > 0): + is_lastyear = True + abinfo_lastyear = abinfo_lastyear[0] + + is_nextyear = False + abinfo_nextyear = list(UserYearAbsenceInfo.objects.filter(user=absence.user, year=absence.start.year+1)) + if(len(abinfo_nextyear) > 0): + is_nextyear = True + abinfo_nextyear = abinfo_nextyear[0] + + + print(formtocheck.cleaned_data["holidays_normal"]) + print(formtocheck.cleaned_data["holidays_rest"]) + + print(formtocheck.cleaned_data["startday_info"]) + print(formtocheck.cleaned_data["endday_info"]) + + abinfo.days_inuse -= formtocheck.cleaned_data["holidays_normal"] + abinfo.restdays -= formtocheck.cleaned_data["holidays_rest"] + abinfo.save() + + abinfo_nextyear.days_inuse -= formtocheck.cleaned_data["holidays_normal_next"] + abinfo_nextyear.restdays -= formtocheck.cleaned_data["holidays_rest_next"] + abinfo_nextyear.save() + + absence.start = formtocheck.cleaned_data["start"] + absence.end = formtocheck.cleaned_data["end"] + absence.startday_info = str(formtocheck.cleaned_data["startday_info"]) + absence.endday_info = str(formtocheck.cleaned_data["endday_info"]) + absence.reason = formtocheck.cleaned_data["reason"] + + rep = None + if(formtocheck.cleaned_data["representator"] != None): + rep = User.objects.get(pk=formtocheck.cleaned_data["representator"].pk) + absence.representator = rep + absence.info = formtocheck.cleaned_data["info"] + + absence.holidays_normal = 0.0 + absence.holidays_rest = 0.0 + absence.holidays_normal_next = 0.0 + absence.holidays_rest_next = 0.0 + + absence.save() + + messages.success(request, f'Abwesenheit aktualisiert!') + else: + messages.success(request, f'Fehler bei Abwesenheitsaktualisierung!') + context = { + "active_link" : "abscence", + } + return redirect("tma-management") @login_required def AbsenceManagmenet(request, activemonth=False, activeyear=False): @@ -530,7 +614,7 @@ def TimeAjax(request): days_nextyear_normal = temprest * -1 # POrüfen, ob es in diesem Zeitraum noch andere Abwesenheiten gibt - other_absences = Absence.objects.filter(start__lte=start_day_obj, end__gte=end_day_obj, agency=request.user.profile.agency) + other_absences = Absence.objects.filter(start__lte=start_day_obj, end__gte=end_day_obj, agency=request.user.profile.agency).exclude(user=user) other_absences_string = False if (len(other_absences) > 0):