Zeiterfassung zurücksetzen und Ausgangsarbeitstage hinzugefügt

This commit is contained in:
holger.trampe 2020-12-16 19:22:05 +01:00
parent f775ef73a9
commit fd0976c79b
6 changed files with 110 additions and 9 deletions

View File

@ -334,9 +334,10 @@ class UserTimeForm(forms.ModelForm):
"wd_sa" : "Samstag",
"wd_so" : "Sonntag",
"usetime" : "Zeiterfassung" ,
"startcount" : "Bisheriges Gleitzeitkonto",
"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 = {
"startdate" : 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)
self.fields['startdate'].required = True
self.fields['usetime_start'].required = False
self.fields['startcount'].required = False
self.fields['usetime'].required = False
#self.fields['usetime'].widget.attrs['readonly'] = True
#self.fields['usetime_start'].widget.attrs['readonly'] = True

View File

@ -166,13 +166,25 @@
<input type="hidden" name="form_type" value="contract">
<h5>Zeiterfassung&nbsp;<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="col-3">
<div class="col-2">
{{usertime_form.usetime|as_crispy_field}}
</div>
<div class="col-5">
<div class="col-3">
{{usertime_form.usetime_start|as_crispy_field}}
</div>
</div>
<div class="col-3">
{{usertime_form.startcount|as_crispy_field}}
</div>
{% if usertochangefull.usertime.usetime %}
<div class="col-3">
Zurücksetzen
{% if request.user.profile.showtooltips %}&nbsp;<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">
$(document).ready(function(){
@ -301,6 +313,81 @@
</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>
/*
DYNAMIC HOLIDAY CHANGES

View File

@ -22,7 +22,7 @@ import webcolors
import datetime
from datetime import date
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.conf import settings
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"])),
}
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:
success = False
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)),
'user_years' : UserYearAbsenceInfo.objects.filter(user=usertochange),
'newuser' : newuser,
'usertochangefull' : usertochange,
'vieweduser' : usertochange.pk,
'parentuser' : parentuser,
'mail' : usertochange.email,
@ -1086,6 +1094,7 @@ def UserProfileUpdate(request, pk, newuser=0):
'usertime_form' : UserTimeForm(instance=UserTime.objects.get(user=usertochange)),
'user_years' : UserYearAbsenceInfo.objects.filter(user=usertochange),
'newuser' : newuser,
'usertochangefull' : usertochange,
'vieweduser' : usertochange.pk,
'parentuser' : parentuser,
'mail' : usertochange.email,
@ -1114,6 +1123,7 @@ def UserProfileUpdate(request, pk, newuser=0):
'newuser' : newuser,
'vieweduser' : usertochange.pk,
'parentuser' : parentuser,
'usertochangefull' : usertochange,
'mail' : usertochange.email,
'imagelink' : usertochange.profile.get_photo_url,
'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!')
context = {
'active_link' : 'dasettings',
'usertochangefull' : usertochange,
'user_fullname' : user_fullname,
'first_name' : usertochange.first_name,
'last_name' : usertochange.last_name,
@ -1159,6 +1170,7 @@ def UserProfileUpdate(request, pk, newuser=0):
'newuser' : newuser,
'mail' : usertochange.email,
'vieweduser' : usertochange.pk,
'usertochangefull' : usertochange,
'imagelink' : usertochange.profile.get_photo_url,
'profileform' : UserProfileForm(instance=usertochange.profile),
'parentuser' : parentuser,

View File

@ -589,7 +589,7 @@ def loadaccounttime(user):
today = date.today()
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:
@ -603,7 +603,7 @@ def loadaccounttime(user):
if ele.end != None and ele.start != None:
sum_break += (ele.end - ele.start).seconds
finalsum = ((workday.end - workday.start).seconds - sum_break)
finalsum = ((workday.end - workday.start).seconds - sum_break)
hastowork = datetime.timedelta(hours=workday.target)
final_info = (int(finalsum) - int(hastowork.total_seconds()))/60
@ -613,7 +613,6 @@ def loadaccounttime(user):
final_info = final_info * -1
finalaccounttimesum -= datetime.timedelta(minutes=final_info)
# Gesamtgleitzeit einmal schick darstellen mit rot und grün
# Wenn GLeitzeit NEGATIV ist
if(finalaccounttimesum.total_seconds() < 0):

View File

@ -314,6 +314,7 @@ class UserTime(models.Model):
wd_so = models.FloatField(default=0.0)
loose_holidedate = models.CharField(default="30.04.", max_length=6)
startdate = models.DateField(default=None, blank=True, null=True)
startcount = models.FloatField(default=0.0)
usetime = models.BooleanField(default=False)
usetime_start = models.DateField(default=None, blank=True, null=True)
'''