Abwesenheit fertig ausser Benachrichtigungen
This commit is contained in:
parent
9719fe6457
commit
642e1ee8bb
|
|
@ -45,6 +45,54 @@ class AddAbsence(forms.ModelForm):
|
||||||
self.fields['activeyear'] = 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['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):
|
def clean(self):
|
||||||
start_date = self.cleaned_data['start']
|
start_date = self.cleaned_data['start']
|
||||||
|
|
|
||||||
|
|
@ -458,7 +458,8 @@ function recalculateChoosenDaysAfterInit(){
|
||||||
|
|
||||||
$("#detail_tocontract").html(data["need_days"]);
|
$("#detail_tocontract").html(data["need_days"]);
|
||||||
$("#detail_tocontract_overall").html(data["need_days"]);
|
$("#detail_tocontract_overall").html(data["need_days"]);
|
||||||
|
$("#detail_next_rest").html(data["restholiday_nextyear_rest"]);
|
||||||
|
|
||||||
if(data["two_years"] == true){
|
if(data["two_years"] == true){
|
||||||
$("#detail_tocontract").html(data["need_days_this"]);
|
$("#detail_tocontract").html(data["need_days_this"]);
|
||||||
$("#two_years").show();
|
$("#two_years").show();
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@
|
||||||
<td>{{abday.reason.name}}</td>
|
<td>{{abday.reason.name}}</td>
|
||||||
<td>{{abday.info}}</td>
|
<td>{{abday.info}}</td>
|
||||||
<td>{% if abday.confirm_status == 0 %} Genehmigt {% elif abday.confirm_status == 1 %} Beantragt {% else %} Abgelehnt {% endif %}</td>
|
<td>{% if abday.confirm_status == 0 %} Genehmigt {% elif abday.confirm_status == 1 %} Beantragt {% else %} Abgelehnt {% endif %}</td>
|
||||||
<td>
|
<td style="float: right;">
|
||||||
|
<button type="button " class="btn btn-secondary btn-sm mr-1" onclick="javascript:changeAbsence({{abday.pk}})"><i class="fas fa-pen"></i></button>
|
||||||
<button type="button " class="btn btn-secondary btn-sm" onclick="javascript:$('#confirm-delete_{{abday.pk}}').modal('toggle')"><i class="fas fa-trash"></i></button>
|
<button type="button " class="btn btn-secondary btn-sm" onclick="javascript:$('#confirm-delete_{{abday.pk}}').modal('toggle')"><i class="fas fa-trash"></i></button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
@ -33,6 +34,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
|
||||||
|
function changeAbsence(abscencepk){
|
||||||
|
location.href = "/tm/abs/update/" + abscencepk + "/"
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
|
||||||
$('#table_allabsences').DataTable({
|
$('#table_allabsences').DataTable({
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,7 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-content" id="absencetabsContent">
|
<div class="tab-content" id="absencetabsContent">
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,409 @@
|
||||||
|
{% extends "users/base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
{% load crispy_forms_tags %}
|
||||||
|
{% load counter_tag %}
|
||||||
|
{% load l10n %}
|
||||||
|
{% load mathfilters %}
|
||||||
|
{% if request.user.profile.agency.module_timemanagement %}
|
||||||
|
<div class="content-section col-8">
|
||||||
|
|
||||||
|
<h3>Abwesenheit von {{absence.user.first_name}} {{absence.user.last_name}} Bearbeiten</h3>
|
||||||
|
<hr>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6">
|
||||||
|
<form method="POST" class="">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{form.media}}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6">
|
||||||
|
{{form.start |as_crispy_field }}
|
||||||
|
{{form.startday_info |as_crispy_field }}
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
{{form.end |as_crispy_field }}
|
||||||
|
{{form.endday_info |as_crispy_field }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="row" >
|
||||||
|
<div class="col-6">
|
||||||
|
{{form.reason|as_crispy_field}}
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
{{form.representator|as_crispy_field}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
{{form.info|as_crispy_field}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-5 ml-3">
|
||||||
|
<div id="restholidays_container">
|
||||||
|
<h5>Übersicht Urlaubstage</h5>
|
||||||
|
<!-- ONE YEAR -->
|
||||||
|
<h5>
|
||||||
|
<b style="color: red">
|
||||||
|
<span id="detail_tocontract"></span> Tage / <span id="restholidays"></span> verbleibend im Jahr <span id="holidayyear"></span>
|
||||||
|
</b>
|
||||||
|
</h5>
|
||||||
|
<!-- TWO YEARS -->
|
||||||
|
<div id="two_years" style="display: none;">
|
||||||
|
<h5><b style="color: red"><span id="detail_tocontract_next"></span> Tage / <span id="restholidays_next"></span> verbleibend im Jahr <span id="holidayyear_next"></span></b>
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div id="holiday_detail_div">
|
||||||
|
<div class="col-12" style="margin-left: -10px">
|
||||||
|
<table class="table table-sm">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Gewünschte Tage</td>
|
||||||
|
<td><span id="detail_tocontract_overall"></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Resturlaub</td>
|
||||||
|
<td><span id="detail_rest"></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Urlaub nächstes Jahr</td>
|
||||||
|
<td><span id="detail_next"></span> + Rest (<span id="detail_next_rest"></span>)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><b>Summe Urlaubstage</b></td>
|
||||||
|
<td><b><span id="detail_sum"></span></b></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div id="otherholidays" style="display: none;">
|
||||||
|
<hr>
|
||||||
|
In diesem Zeitraum haben bereits folgende Mitarbeiter Abwesenheiten:
|
||||||
|
<br />
|
||||||
|
<div id="otherholidays_users"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="noholidays_container" style="display: none;">
|
||||||
|
<h5>Abwesenheitsgrund ohne Urlaubsanspruch</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div style="display: none;">
|
||||||
|
{{form.holidays_normal}}
|
||||||
|
{{form.holidays_rest}}
|
||||||
|
{{form.holidays_normal_next}}
|
||||||
|
{{form.holidays_rest_next}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a class="btn" href="{% url 'tma-management' %} ">Abbrechen</a>
|
||||||
|
<button type="submit" class="btn btn-primary" style="float: right" id="updateAbsence">Abwesenheit aktualisieren</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var sameday = false;
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
date_start = "{{start}}";
|
||||||
|
date_end = "{{end}}";
|
||||||
|
|
||||||
|
$('#id_reason option[value="{{absence.reason.pk}}"]').attr("selected",true);
|
||||||
|
$('#id_representator option[value="{{absence.representator.pk}}"]').attr("selected",true);
|
||||||
|
$('#id_startday_info option[value="{{absence.startday_info}}"]').attr("selected",true);
|
||||||
|
$('#id_endday_info option[value="{{absence.endday_info}}"]').attr("selected",true);
|
||||||
|
|
||||||
|
$("#id_holidays_normal").val({{absence.holidays_normal|unlocalize}});
|
||||||
|
$("#id_holidays_rest").val({{absence.holidays_rest|unlocalize}});
|
||||||
|
$("#id_holidays_normal_next").val({{absence.holidays_normal_next|unlocalize}});
|
||||||
|
$("#id_holidays_rest_next").val({{absence.holidays_rest_next|unlocalize}});
|
||||||
|
|
||||||
|
new_start = date_start.split(".");
|
||||||
|
new_end = date_end.split(".");
|
||||||
|
|
||||||
|
date_start = new Date(new_start[2], (parseInt(new_start[1])-1), new_start[0]);
|
||||||
|
date_end = new Date(new_end[2], (parseInt(new_end[1])-1), new_end[0]);
|
||||||
|
|
||||||
|
$("#id_start").data("DateTimePicker").date(date_start);
|
||||||
|
$("#id_end").data("DateTimePicker").date(date_end);
|
||||||
|
|
||||||
|
if(+new_start == +new_end){
|
||||||
|
sameday = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
sameday = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sameday){
|
||||||
|
date_end = date_start;
|
||||||
|
new_end = new_start;
|
||||||
|
}
|
||||||
|
|
||||||
|
reasonid = $('#id_reason :selected').val();
|
||||||
|
//Get required-rep
|
||||||
|
$.ajax(
|
||||||
|
{
|
||||||
|
type: "GET",
|
||||||
|
url: "{% url 'tm-ajax' %}",
|
||||||
|
data:{
|
||||||
|
action : "checkrequired",
|
||||||
|
rid : reasonid
|
||||||
|
},
|
||||||
|
success : function(data){
|
||||||
|
//CHANGE REPRESENTOR
|
||||||
|
if(data["isreq"]){
|
||||||
|
$("#id_representator").prop('required',true);
|
||||||
|
$("label[for*='id_representator']").html("Vertreter*");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#id_representator").prop('required',false);
|
||||||
|
$("label[for*='id_representator']").html("Vertreter");
|
||||||
|
}
|
||||||
|
//CHANGE HOLIDAYCOUNT
|
||||||
|
if(data["isholiday"] == false){
|
||||||
|
$("#noholidays_container").show();
|
||||||
|
$("#restholidays_container").hide();
|
||||||
|
$("#start_absence_contract").prop("disabled", false);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#noholidays_container").hide();
|
||||||
|
$("#restholidays_container").show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: "{% url 'tm-ajax' %}",
|
||||||
|
data:{
|
||||||
|
action : "getrestholidays",
|
||||||
|
userid : {{absence.user.pk}},
|
||||||
|
startdate : date_start.getFullYear() + "__" + (date_start.getMonth()+1) + "__" + date_start.getDate(),
|
||||||
|
enddate : date_end.getFullYear() + "__" + (date_end.getMonth()+1) + "__" + date_end.getDate(),
|
||||||
|
startday_info : $("#id_startday_info").val(),
|
||||||
|
endday_info : $("#id_endday_info").val(),
|
||||||
|
},
|
||||||
|
success : function(data){
|
||||||
|
|
||||||
|
|
||||||
|
if(data["other_absences"] != false){
|
||||||
|
$("#otherholidays").show();
|
||||||
|
$("#otherholidays_users").html(data["other_absences"]);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#otherholidays").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#restholidays").html(data["restholiday_thisyear"] + parseFloat($("#id_holidays_normal").val()) + parseFloat($("#id_holidays_rest").val()));
|
||||||
|
$("#detail_rest").html(data["restholiday_thisyear"] + parseFloat($("#id_holidays_normal").val()) + parseFloat($("#id_holidays_rest").val()));
|
||||||
|
$("#detail_resthol").html(data["restholiday_lastyear"]);
|
||||||
|
$("#detail_next").html(data["restholiday_nextyear"] + parseFloat($("#id_holidays_normal_next").val()) + parseFloat($("#id_holidays_rest_next").val()));
|
||||||
|
$("#holidayyear").html(new_start[2]);
|
||||||
|
$("#detail_sum").html(data["restholiday_thisyear"]+data["restholiday_lastyear"]+data["restholiday_nextyear"]+data["restholiday_nextyear_rest"] + parseFloat($("#id_holidays_normal").val()) + parseFloat($("#id_holidays_rest").val()));
|
||||||
|
|
||||||
|
$("#detail_tocontract").html(data["need_days"]);
|
||||||
|
$("#detail_tocontract_overall").html(data["need_days"]);
|
||||||
|
|
||||||
|
$("#detail_next_rest").html(data["restholiday_nextyear_rest"]+parseFloat($("#id_holidays_rest_next").val()));
|
||||||
|
|
||||||
|
if(data["two_years"] == true){
|
||||||
|
$("#detail_tocontract").html(data["need_days_this"]);
|
||||||
|
$("#two_years").show();
|
||||||
|
$("#holidayyear_next").html(new_end[2]);
|
||||||
|
$("#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();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data["other_absences"] != false){
|
||||||
|
$("#otherholidays").show();
|
||||||
|
$("#otherholidays_users").html(data["other_absences"]);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#otherholidays").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data["restholiday_thisyear"] < 0 || data["restholiday_lastyear"] < 0 || data["restholiday_nextyear"] < 0){
|
||||||
|
$("#start_absence_contract").prop("disabled", true);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#start_absence_contract").prop("disabled", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
CHANGE LISTENER
|
||||||
|
*/
|
||||||
|
$("#id_start").blur(function(){
|
||||||
|
recalculateChoosenDays();
|
||||||
|
})
|
||||||
|
|
||||||
|
$("#id_end").blur(function(){
|
||||||
|
recalculateChoosenDays();
|
||||||
|
})
|
||||||
|
|
||||||
|
/*
|
||||||
|
$("#id_start_ishalf").change(function(){
|
||||||
|
recalculateChoosenDays();
|
||||||
|
})
|
||||||
|
|
||||||
|
$("#id_end_ishalf").change(function(){
|
||||||
|
recalculateChoosenDays();
|
||||||
|
})
|
||||||
|
*/
|
||||||
|
$("#id_startday_info").change(function(){
|
||||||
|
recalculateChoosenDays();
|
||||||
|
})
|
||||||
|
|
||||||
|
$("#id_endday_info").change(function(){
|
||||||
|
recalculateChoosenDays();
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function recalculateChoosenDays(){
|
||||||
|
|
||||||
|
date_start = $("#id_start").datepicker().val();
|
||||||
|
date_end = $("#id_end").datepicker().val();
|
||||||
|
|
||||||
|
new_start = date_start.split(".");
|
||||||
|
new_end = date_end.split(".");
|
||||||
|
|
||||||
|
date_start = new Date(new_start[2], (parseInt(new_start[1])-1), new_start[0]);
|
||||||
|
date_end = new Date(new_end[2], (parseInt(new_end[1])-1), new_end[0]);
|
||||||
|
$('.ui-datepicker-calendar').hide();
|
||||||
|
$('.ui-datepicker-header').hide();
|
||||||
|
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: "{% url 'tm-ajax' %}",
|
||||||
|
data:{
|
||||||
|
action : "getrestholidays",
|
||||||
|
userid : {{absence.user.pk}},
|
||||||
|
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"),
|
||||||
|
startday_info : $("#id_startday_info").val(),
|
||||||
|
endday_info : $("#id_endday_info").val(),
|
||||||
|
},
|
||||||
|
success : function(data){
|
||||||
|
|
||||||
|
if(data["other_absences"] != false){
|
||||||
|
$("#otherholidays").show();
|
||||||
|
$("#otherholidays_users").html(data["other_absences"]);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#otherholidays").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#restholidays").html(data["restholiday_thisyear"] + parseFloat($("#id_holidays_normal").val()) + parseFloat($("#id_holidays_rest").val()));
|
||||||
|
$("#detail_rest").html(data["restholiday_thisyear"] + parseFloat($("#id_holidays_normal").val()) + parseFloat($("#id_holidays_rest").val()));
|
||||||
|
$("#detail_resthol").html(data["restholiday_lastyear"]);
|
||||||
|
$("#detail_next").html(data["restholiday_nextyear"] + parseFloat($("#id_holidays_normal_next").val()) + parseFloat($("#id_holidays_rest_next").val()));
|
||||||
|
$("#holidayyear").html(new_start[2]);
|
||||||
|
$("#detail_sum").html(data["restholiday_thisyear"]+data["restholiday_lastyear"]+data["restholiday_nextyear"]+data["restholiday_nextyear_rest"] + parseFloat($("#id_holidays_normal").val()) + parseFloat($("#id_holidays_rest").val()));
|
||||||
|
|
||||||
|
$("#holidayyear").html(date_start.getFullYear());
|
||||||
|
$("#detail_next_rest").html(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]+parseFloat($("#id_holidays_normal").val()));
|
||||||
|
$("#detail_next_rest").html(data["restholiday_nextyear_rest"]+ parseFloat($("#id_holidays_rest").val()));
|
||||||
|
$("#detail_next").html(data["restholiday_nextyear"]+ parseFloat($("#id_holidays_normal").val()));
|
||||||
|
$("#detail_tocontract_next").html(data["need_days_next"]);
|
||||||
|
$("#restholidays_next").html(data["restholiday_nextyear"]+ parseFloat($("#id_holidays_normal").val()));
|
||||||
|
$("#detail_tocontract_overall").html(data["need_days_next"]+data["need_days_this"]);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#two_years").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#detail_sum").html(data["restholiday_thisyear"]+data["restholiday_lastyear"]+data["restholiday_nextyear"]+data["restholiday_nextyear_rest"]);
|
||||||
|
|
||||||
|
sum_thisyear = data["restholiday_thisyear"] + parseFloat($("#id_holidays_normal").val()) + parseFloat($("#id_holidays_rest").val());
|
||||||
|
|
||||||
|
sum_nextyear = data["restholiday_nextyear"]+ parseFloat($("#id_holidays_normal").val())
|
||||||
|
|
||||||
|
if(+date_start == +date_end){
|
||||||
|
if(data["restholiday_thisyear"] < 0 || data["restholiday_lastyear"] < 0 || data["restholiday_nextyear"] < 0 || sum_thisyear < 0 || sum_nextyear < 0){
|
||||||
|
$("#updateAbsence").prop("disabled", true);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#updateAbsence").prop("disabled", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(+date_start < +date_end == true){
|
||||||
|
if(data["restholiday_thisyear"] < 0 || data["restholiday_lastyear"] < 0 || data["restholiday_nextyear"] < 0 || sum_thisyear < 0 || sum_nextyear < 0){
|
||||||
|
$("#updateAbsence").prop("disabled", true);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#updateAbsence").prop("disabled", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#updateAbsence").prop("disabled", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set required repr or not
|
||||||
|
document.getElementById("id_reason").addEventListener("change", function(){
|
||||||
|
reasonid = $('#id_reason :selected').val();
|
||||||
|
//Get required-rep
|
||||||
|
$.ajax(
|
||||||
|
{
|
||||||
|
type: "GET",
|
||||||
|
url: "{% url 'tm-ajax' %}",
|
||||||
|
data:{
|
||||||
|
action : "checkrequired",
|
||||||
|
rid : reasonid
|
||||||
|
},
|
||||||
|
success : function(data){
|
||||||
|
//CHANGE REPRESENTOR
|
||||||
|
if(data["isreq"]){
|
||||||
|
$("#id_representator").prop('required',true);
|
||||||
|
$("label[for*='id_representator']").html("Vertreter*");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#id_representator").prop('required',false);
|
||||||
|
$("label[for*='id_representator']").html("Vertreter");
|
||||||
|
}
|
||||||
|
//CHANGE HOLIDAYCOUNT
|
||||||
|
if(data["isholiday"] == false){
|
||||||
|
$("#noholidays_container").show();
|
||||||
|
$("#restholidays_container").hide();
|
||||||
|
$("#start_absence_contract").prop("disabled", false);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$("#noholidays_container").hide();
|
||||||
|
$("#restholidays_container").show();
|
||||||
|
recalculateChoosenDays();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
{% endblock content %}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from django.urls import path
|
from django.urls import path
|
||||||
from django.contrib.auth.decorators import login_required, permission_required
|
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!
|
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('abs/<int:activemonth>/<int:activeyear>', AbsenceManagmenet, name='tma-management'),
|
path('abs/<int:activemonth>/<int:activeyear>', AbsenceManagmenet, name='tma-management'),
|
||||||
path('ajax/', TimeAjax, name='tm-ajax'),
|
path('ajax/', TimeAjax, name='tm-ajax'),
|
||||||
|
path('abs/update/<int:pk>/', AbsenceUpdate, name='tma-update'),
|
||||||
#path('newsadd/', permission_required('users.modulenews')(views.NewsAdd), name='news-add'),
|
#path('newsadd/', permission_required('users.modulenews')(views.NewsAdd), name='news-add'),
|
||||||
#path('newsupdate/<int:id>/', permission_required('users.modulenews')(views.NewsUpdate), name='news-update'),
|
#path('newsupdate/<int:id>/', permission_required('users.modulenews')(views.NewsUpdate), name='news-update'),
|
||||||
#path('news/<int:pk>/delete', permission_required('users.modulenews')(NewsDeleteView.as_view()), name='news-delete'),
|
#path('news/<int:pk>/delete', permission_required('users.modulenews')(NewsDeleteView.as_view()), name='news-delete'),
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ from django.contrib.auth.models import User
|
||||||
from calendar import monthrange
|
from calendar import monthrange
|
||||||
import datetime
|
import datetime
|
||||||
import calendar
|
import calendar
|
||||||
from .forms import AddAbsence, ConfirmAbsenceForm
|
from .forms import AddAbsence, ConfirmAbsenceForm, UpdateAbsence
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from users.models import UserFullName, UserYearAbsenceInfo
|
from users.models import UserFullName, UserYearAbsenceInfo
|
||||||
from users.models import UserTime
|
from users.models import UserTime
|
||||||
|
|
@ -50,6 +50,90 @@ def get_datetime_range(year, month):
|
||||||
nb_days = monthrange(year, month)[1]
|
nb_days = monthrange(year, month)[1]
|
||||||
return [datetime.date(year, month, day) for day in range(1, nb_days+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
|
@login_required
|
||||||
def AbsenceManagmenet(request, activemonth=False, activeyear=False):
|
def AbsenceManagmenet(request, activemonth=False, activeyear=False):
|
||||||
|
|
@ -530,7 +614,7 @@ def TimeAjax(request):
|
||||||
days_nextyear_normal = temprest * -1
|
days_nextyear_normal = temprest * -1
|
||||||
|
|
||||||
# POrüfen, ob es in diesem Zeitraum noch andere Abwesenheiten gibt
|
# 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
|
other_absences_string = False
|
||||||
if (len(other_absences) > 0):
|
if (len(other_absences) > 0):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue