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_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

View File

@ -166,13 +166,25 @@
<input type="hidden" name="form_type" value="contract"> <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> <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="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>
{% 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> </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

View File

@ -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,

View File

@ -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):

View File

@ -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)
''' '''