Zeiterfassung zurücksetzen und Ausgangsarbeitstage hinzugefügt
This commit is contained in:
parent
f775ef73a9
commit
fd0976c79b
|
|
@ -334,9 +334,10 @@ class UserTimeForm(forms.ModelForm):
|
||||||
"wd_sa" : "Samstag",
|
"wd_sa" : "Samstag",
|
||||||
"wd_so" : "Sonntag",
|
"wd_so" : "Sonntag",
|
||||||
"usetime" : "Zeiterfassung" ,
|
"usetime" : "Zeiterfassung" ,
|
||||||
|
"startcount" : "Bisheriges Gleitzeitkonto",
|
||||||
"usetime_start" : "Zeiterfassung ab"
|
"usetime_start" : "Zeiterfassung ab"
|
||||||
}
|
}
|
||||||
fields = ["startdate", "usetime", "usetime_start", "wd_mo", "wd_tu", "wd_we", "wd_th", "wd_fr", "wd_sa", "wd_so", "loose_holidedate"]
|
fields = ["startcount", "startdate", "usetime", "usetime_start", "wd_mo", "wd_tu", "wd_we", "wd_th", "wd_fr", "wd_sa", "wd_so", "loose_holidedate"]
|
||||||
widgets = {
|
widgets = {
|
||||||
"startdate" : DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
|
"startdate" : DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}),
|
||||||
"usetime_start" : DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'})
|
"usetime_start" : DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'})
|
||||||
|
|
@ -346,6 +347,7 @@ class UserTimeForm(forms.ModelForm):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.fields['startdate'].required = True
|
self.fields['startdate'].required = True
|
||||||
self.fields['usetime_start'].required = False
|
self.fields['usetime_start'].required = False
|
||||||
|
self.fields['startcount'].required = False
|
||||||
self.fields['usetime'].required = False
|
self.fields['usetime'].required = False
|
||||||
#self.fields['usetime'].widget.attrs['readonly'] = True
|
#self.fields['usetime'].widget.attrs['readonly'] = True
|
||||||
#self.fields['usetime_start'].widget.attrs['readonly'] = True
|
#self.fields['usetime_start'].widget.attrs['readonly'] = True
|
||||||
|
|
|
||||||
|
|
@ -166,13 +166,25 @@
|
||||||
<input type="hidden" name="form_type" value="contract">
|
<input type="hidden" name="form_type" value="contract">
|
||||||
<h5>Zeiterfassung <small><i data-toggle="tooltip" data-placement="top" title="Legen Sie fest, ob dieser Mitarbeit seine Arbeitszeit erfassen soll." class="far fa-question-circle"></i></small></h5>
|
<h5>Zeiterfassung <small><i data-toggle="tooltip" data-placement="top" title="Legen Sie fest, ob dieser Mitarbeit seine Arbeitszeit erfassen soll." class="far fa-question-circle"></i></small></h5>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-3">
|
<div class="col-2">
|
||||||
{{usertime_form.usetime|as_crispy_field}}
|
{{usertime_form.usetime|as_crispy_field}}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5">
|
<div class="col-3">
|
||||||
{{usertime_form.usetime_start|as_crispy_field}}
|
{{usertime_form.usetime_start|as_crispy_field}}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
{{usertime_form.startcount|as_crispy_field}}
|
||||||
</div>
|
</div>
|
||||||
|
{% if usertochangefull.usertime.usetime %}
|
||||||
|
<div class="col-3">
|
||||||
|
Zurücksetzen
|
||||||
|
{% if request.user.profile.showtooltips %} <small><i data-toggle="tooltip" data-placement="top" title="Setzen Sie hier alle bisherigen Arbeitstage zurück." class="far fa-question-circle"></i></small>{% endif %}
|
||||||
|
<br />
|
||||||
|
<button type="button" onclick="javascript:$('#resetTimeManagementConfirm').modal('toggle');" class="btn btn-primary mt-2" >Zeiterfassung zurücksetzen</button>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
|
@ -301,6 +313,81 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- RESET TIMEMANAGEMENT -->
|
||||||
|
<div class="modal fade " id="resetTimeManagementConfirm" data-backdrop="static" data-keyboard="false">
|
||||||
|
<div class="modal-dialog modal-xl">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h4 class="modal-title">Zeiterfassung zurücksetzen</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="">
|
||||||
|
<h3>Achtung!</h3>
|
||||||
|
Hiermit löschen Sie unwiderruflich alle vergangenen Arbeitstage, welche über die Zeiterfassung erstellt wurden, bis zum Datum des Beginns der Zeiterfassung. Dieser Vorgang kann nicht rückgängig gemacht werden.<br />
|
||||||
|
<hr>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" value="" id="confirmDel" onclick="javascript:toggleDoDelBtn()">
|
||||||
|
<label class="form-check-label" for="confirmDel">
|
||||||
|
Ja, alle Arbeitstage bis zum {{usertochangefull.usertime.usetime_start|date:"d.m.Y"}} von <b>{{user_fullname}}</b> löschen!
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-default" data-dismiss="modal">Abbrechen</button>
|
||||||
|
<button type="button" class="btn btn-primary" disabled="true" id="dodeltmdata" onclick="javascript:delTMData({{vieweduser}})">Bestätigen</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal fade " id="resetTimeManagementMessage" data-backdrop="static" data-keyboard="false">
|
||||||
|
<div class="modal-dialog modal-xl">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h4 class="modal-title">Zeiterfassung zurücksetzen</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="">
|
||||||
|
Die Zeiterfassung von <b>{{user_fullname}}</b> wurde zurückgesetzt.
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-primary" data-dismiss="modal">Schließen</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function toggleDoDelBtn(){
|
||||||
|
if($('#confirmDel').prop('checked')){
|
||||||
|
$('#dodeltmdata').attr('disabled', false);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$('#dodeltmdata').attr('disabled', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function delTMData(userid){
|
||||||
|
$("#resetTimeManagementConfirm").modal("toggle");
|
||||||
|
$.ajax(
|
||||||
|
{
|
||||||
|
type: "GET",
|
||||||
|
url: "{% url 'dasettings-ajax' %}",
|
||||||
|
data:{
|
||||||
|
action : "del_tmdata",
|
||||||
|
userid: {{vieweduser}}
|
||||||
|
},
|
||||||
|
success: function( data )
|
||||||
|
{
|
||||||
|
$("#resetTimeManagementMessage").modal("toggle");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
/*
|
/*
|
||||||
DYNAMIC HOLIDAY CHANGES
|
DYNAMIC HOLIDAY CHANGES
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import webcolors
|
||||||
import datetime
|
import datetime
|
||||||
from datetime import date
|
from datetime import date
|
||||||
from standards.models import Standards
|
from standards.models import Standards
|
||||||
from timemanagement.models import AbsenceReason, FreeDays
|
from timemanagement.models import AbsenceReason, FreeDays, Workday
|
||||||
from django.core.mail import send_mail
|
from django.core.mail import send_mail
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
import re, os, csv, requests
|
import re, os, csv, requests
|
||||||
|
|
@ -958,8 +958,15 @@ def SettingsAjaxRouter(request):
|
||||||
"user_years" : UserYearAbsenceInfo.objects.filter(user=User.objects.get(pk=request.GET["userid"])),
|
"user_years" : UserYearAbsenceInfo.objects.filter(user=User.objects.get(pk=request.GET["userid"])),
|
||||||
}
|
}
|
||||||
return render(request, 'dasettings/data_absence_yeardata.html', context)
|
return render(request, 'dasettings/data_absence_yeardata.html', context)
|
||||||
|
# RESET TIMEMANAGEMENT
|
||||||
|
elif request.method == "GET" and request.GET['action'] == "del_tmdata" :
|
||||||
|
|
||||||
|
|
||||||
|
tempuser = User.objects.get(pk=request.GET['userid'])
|
||||||
|
if(request.user.has_perm('users.usermanager') and request.user.profile.agency == tempuser.profile.agency):
|
||||||
|
deluntildate = tempuser.usertime.usetime_start
|
||||||
|
delete_days = Workday.objects.filter(user=tempuser, start__lt=deluntildate).delete()
|
||||||
|
return JsonResponse({"success" : success, "data" : data})
|
||||||
else:
|
else:
|
||||||
success = False
|
success = False
|
||||||
return JsonResponse({"success" : success, "data" : data})
|
return JsonResponse({"success" : success, "data" : data})
|
||||||
|
|
@ -1063,6 +1070,7 @@ def UserProfileUpdate(request, pk, newuser=0):
|
||||||
'usertime_form' : UserTimeForm(instance=UserTime.objects.get(user=usertochange)),
|
'usertime_form' : UserTimeForm(instance=UserTime.objects.get(user=usertochange)),
|
||||||
'user_years' : UserYearAbsenceInfo.objects.filter(user=usertochange),
|
'user_years' : UserYearAbsenceInfo.objects.filter(user=usertochange),
|
||||||
'newuser' : newuser,
|
'newuser' : newuser,
|
||||||
|
'usertochangefull' : usertochange,
|
||||||
'vieweduser' : usertochange.pk,
|
'vieweduser' : usertochange.pk,
|
||||||
'parentuser' : parentuser,
|
'parentuser' : parentuser,
|
||||||
'mail' : usertochange.email,
|
'mail' : usertochange.email,
|
||||||
|
|
@ -1086,6 +1094,7 @@ def UserProfileUpdate(request, pk, newuser=0):
|
||||||
'usertime_form' : UserTimeForm(instance=UserTime.objects.get(user=usertochange)),
|
'usertime_form' : UserTimeForm(instance=UserTime.objects.get(user=usertochange)),
|
||||||
'user_years' : UserYearAbsenceInfo.objects.filter(user=usertochange),
|
'user_years' : UserYearAbsenceInfo.objects.filter(user=usertochange),
|
||||||
'newuser' : newuser,
|
'newuser' : newuser,
|
||||||
|
'usertochangefull' : usertochange,
|
||||||
'vieweduser' : usertochange.pk,
|
'vieweduser' : usertochange.pk,
|
||||||
'parentuser' : parentuser,
|
'parentuser' : parentuser,
|
||||||
'mail' : usertochange.email,
|
'mail' : usertochange.email,
|
||||||
|
|
@ -1114,6 +1123,7 @@ def UserProfileUpdate(request, pk, newuser=0):
|
||||||
'newuser' : newuser,
|
'newuser' : newuser,
|
||||||
'vieweduser' : usertochange.pk,
|
'vieweduser' : usertochange.pk,
|
||||||
'parentuser' : parentuser,
|
'parentuser' : parentuser,
|
||||||
|
'usertochangefull' : usertochange,
|
||||||
'mail' : usertochange.email,
|
'mail' : usertochange.email,
|
||||||
'imagelink' : usertochange.profile.get_photo_url,
|
'imagelink' : usertochange.profile.get_photo_url,
|
||||||
'profileform' : UserProfileForm(instance=usertochange.profile),
|
'profileform' : UserProfileForm(instance=usertochange.profile),
|
||||||
|
|
@ -1124,6 +1134,7 @@ def UserProfileUpdate(request, pk, newuser=0):
|
||||||
messages.success(request, f'Fehlerhafte Eingabe! Das Verfallsdatum muss im Format TAG.MONAT. sein und existieren!')
|
messages.success(request, f'Fehlerhafte Eingabe! Das Verfallsdatum muss im Format TAG.MONAT. sein und existieren!')
|
||||||
context = {
|
context = {
|
||||||
'active_link' : 'dasettings',
|
'active_link' : 'dasettings',
|
||||||
|
'usertochangefull' : usertochange,
|
||||||
'user_fullname' : user_fullname,
|
'user_fullname' : user_fullname,
|
||||||
'first_name' : usertochange.first_name,
|
'first_name' : usertochange.first_name,
|
||||||
'last_name' : usertochange.last_name,
|
'last_name' : usertochange.last_name,
|
||||||
|
|
@ -1159,6 +1170,7 @@ def UserProfileUpdate(request, pk, newuser=0):
|
||||||
'newuser' : newuser,
|
'newuser' : newuser,
|
||||||
'mail' : usertochange.email,
|
'mail' : usertochange.email,
|
||||||
'vieweduser' : usertochange.pk,
|
'vieweduser' : usertochange.pk,
|
||||||
|
'usertochangefull' : usertochange,
|
||||||
'imagelink' : usertochange.profile.get_photo_url,
|
'imagelink' : usertochange.profile.get_photo_url,
|
||||||
'profileform' : UserProfileForm(instance=usertochange.profile),
|
'profileform' : UserProfileForm(instance=usertochange.profile),
|
||||||
'parentuser' : parentuser,
|
'parentuser' : parentuser,
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -589,7 +589,7 @@ def loadaccounttime(user):
|
||||||
today = date.today()
|
today = date.today()
|
||||||
workdays = Workday.objects.filter(user=user, start__lt=today).exclude(end=None)
|
workdays = Workday.objects.filter(user=user, start__lt=today).exclude(end=None)
|
||||||
|
|
||||||
finalaccounttimesum = datetime.timedelta(minutes=0)
|
finalaccounttimesum = datetime.timedelta(minutes=0) + datetime.timedelta(hours=UserTime.objects.get(user=user).startcount)
|
||||||
|
|
||||||
|
|
||||||
for workday in workdays:
|
for workday in workdays:
|
||||||
|
|
@ -613,7 +613,6 @@ def loadaccounttime(user):
|
||||||
final_info = final_info * -1
|
final_info = final_info * -1
|
||||||
finalaccounttimesum -= datetime.timedelta(minutes=final_info)
|
finalaccounttimesum -= datetime.timedelta(minutes=final_info)
|
||||||
|
|
||||||
|
|
||||||
# Gesamtgleitzeit einmal schick darstellen mit rot und grün
|
# Gesamtgleitzeit einmal schick darstellen mit rot und grün
|
||||||
# Wenn GLeitzeit NEGATIV ist
|
# Wenn GLeitzeit NEGATIV ist
|
||||||
if(finalaccounttimesum.total_seconds() < 0):
|
if(finalaccounttimesum.total_seconds() < 0):
|
||||||
|
|
|
||||||
|
|
@ -314,6 +314,7 @@ class UserTime(models.Model):
|
||||||
wd_so = models.FloatField(default=0.0)
|
wd_so = models.FloatField(default=0.0)
|
||||||
loose_holidedate = models.CharField(default="30.04.", max_length=6)
|
loose_holidedate = models.CharField(default="30.04.", max_length=6)
|
||||||
startdate = models.DateField(default=None, blank=True, null=True)
|
startdate = models.DateField(default=None, blank=True, null=True)
|
||||||
|
startcount = models.FloatField(default=0.0)
|
||||||
usetime = models.BooleanField(default=False)
|
usetime = models.BooleanField(default=False)
|
||||||
usetime_start = models.DateField(default=None, blank=True, null=True)
|
usetime_start = models.DateField(default=None, blank=True, null=True)
|
||||||
'''
|
'''
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue