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 @@
- Tage / verbleibend im Jahr
-
- Tage / verbleibend im Jahr
+
+
+
+ Tage / verbleibend im Jahr
+
+
+
+
+
+ Tage / verbleibend im Jahr
+
+
@@ -100,7 +109,7 @@
| Gewünschte Tage |
- |
+ |
| Resturlaub |
@@ -108,7 +117,7 @@
| Urlaub nächstes Jahr |
- |
+ + Rest () |
| Summe Urlaubstage |
@@ -116,32 +125,7 @@
-
-
+
{{abscenceform.nextmonth}}
{{abscenceform.prevmonth}}
diff --git a/timemanagement/templates/timemanagement/tm_ab_userown.html b/timemanagement/templates/timemanagement/tm_ab_userown.html
index 1db3531..f6d52c0 100644
--- a/timemanagement/templates/timemanagement/tm_ab_userown.html
+++ b/timemanagement/templates/timemanagement/tm_ab_userown.html
@@ -1,39 +1,57 @@
{% load l10n %}
{% load mathfilters %}
-
+
+ Urlaubsübersicht
+
+
+
+
+ Übersicht nach Abwesenheitskategorien
- Übersicht
+
+
+ Übersicht nach Abwesenheitskategorien
- | Gesamturlaub |
+ Verfügbare Urlaube |
{{yearinfo.days}} Tage |
| Genommener Urlaub |
{{yearinfo.days_inuse}} Tage |
-
- | Resturlaub |
- {{yearinfo.days|sub:yearinfo.days_inuse}} Tage |
+ Resturlaub aus Vorjahr |
+ {{yearinfo.restdays}} Tage |
-
-
+
+ Übersicht nach Abwesenheitskategorien
+
+
+ {% for ele in final_reasons %}
+
+ | {{ele.0}} |
+ {{ele.1}} Tage |
+
+ {% endfor %}
+
+
+
-
+
@@ -85,7 +103,37 @@
{% endblock content %}
diff --git a/users/usersforms.py b/users/usersforms.py
index 8c0ef91..c2d4ce1 100644
--- a/users/usersforms.py
+++ b/users/usersforms.py
@@ -160,7 +160,7 @@ class SupportForm(forms.Form):
self.fields['name'] = forms.CharField(required=True, label="Name", initial=user_name)
self.fields['mail'] = forms.EmailField(required=True, label="E-Mail", initial=user.email)
self.fields['problemconc'] = forms.CharField(required=True, label="Problemzusammenfassung")
- self.fields['problem'] = forms.CharField(required=True, widget=forms.Textarea, label="Ausführliche Beschreibung")
+ self.fields['problem'] = forms.CharField(required=True, widget=forms.Textarea, label="Ausführliche Problembeschreibung")
self.fields['name'].widget.attrs['readonly'] = True
self.fields['mail'].widget.attrs['readonly'] = True
diff --git a/users/views.py b/users/views.py
index ae4a637..e2e585c 100644
--- a/users/views.py
+++ b/users/views.py
@@ -757,7 +757,7 @@ def support(request):
"email": mail,
"subject": 'Digitale Agentur: '+problemconc,
"ip": "1.1.1.1",
- "message": "*****************************\nAgentur: "+ request.user.profile.agency.name +" (ID: "+ str(request.user.profile.agency.pk) +")\nBenutzer: "+request.user.first_name+" "+request.user.last_name+" (ID: "+ str(request.user.pk) +")\n*******************************\n\n" + problem
+ "message": "data/html;charset=utf-8;*****************************\nAgentur: "+ request.user.profile.agency.name +" (ID: "+ str(request.user.profile.agency.pk) +")\nBenutzer: "+request.user.first_name+" "+request.user.last_name+" (ID: "+ str(request.user.pk) +")\n*******************************\n\n" + problem
}
json_data = json.dumps(ostdata)
|