Zeiterfassung vorbereitet, Abwesenheit fehlt noch bearbeiten
This commit is contained in:
parent
763a3a5247
commit
9719fe6457
|
|
@ -7,16 +7,6 @@ from bootstrap_datepicker_plus import DatePickerInput
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
from timemanagement.models import AbsenceReason
|
from timemanagement.models import AbsenceReason
|
||||||
|
|
||||||
class AgencyTimeManagement(forms.ModelForm):
|
|
||||||
class Meta:
|
|
||||||
model = Agency
|
|
||||||
|
|
||||||
fields = ['module_timemanagement_ze']
|
|
||||||
|
|
||||||
labels = {
|
|
||||||
'module_timemanagement_ze' : "Zeiterfassung aktivieren"
|
|
||||||
}
|
|
||||||
|
|
||||||
class AgencyOrganigrammForm(forms.ModelForm):
|
class AgencyOrganigrammForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Agency
|
model = Agency
|
||||||
|
|
@ -36,7 +26,6 @@ class AgencyNetworkForm(forms.ModelForm):
|
||||||
"publicjoin" : "Beitritt ohne Bestätigung"
|
"publicjoin" : "Beitritt ohne Bestätigung"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Change logged Users Data (Usernamen an Email) NUR HIER MÖGLICH!
|
# Change logged Users Data (Usernamen an Email) NUR HIER MÖGLICH!
|
||||||
class UsersSelfChangeForm(forms.ModelForm):
|
class UsersSelfChangeForm(forms.ModelForm):
|
||||||
email = forms.EmailField()
|
email = forms.EmailField()
|
||||||
|
|
@ -75,15 +64,20 @@ class UserTimeForm(forms.ModelForm):
|
||||||
"wd_we" : "Mittwoch",
|
"wd_we" : "Mittwoch",
|
||||||
"wd_th" : "Donnerstag",
|
"wd_th" : "Donnerstag",
|
||||||
"wd_fr" : "Freitag",
|
"wd_fr" : "Freitag",
|
||||||
|
"usetime" : "Zeiterfassung" ,
|
||||||
|
"usetime_start" : "Zeiterfassung ab"
|
||||||
}
|
}
|
||||||
fields = ["startdate", "wd_mo", "wd_tu", "wd_we", "wd_th", "wd_fr", "loose_holidedate"]
|
fields = ["startdate", "usetime", "usetime_start", "wd_mo", "wd_tu", "wd_we", "wd_th", "wd_fr", "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'})
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
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'].required = False
|
||||||
|
|
||||||
|
|
||||||
# PERMISSION GROUPS FORM
|
# PERMISSION GROUPS FORM
|
||||||
|
|
@ -116,8 +110,8 @@ class AgencyModulsForm(forms.ModelForm):
|
||||||
'module_organigramm' : "Organigramm",
|
'module_organigramm' : "Organigramm",
|
||||||
'module_messages' : "Mitteilungen",
|
'module_messages' : "Mitteilungen",
|
||||||
'module_chat' : "Chat",
|
'module_chat' : "Chat",
|
||||||
#'module_timemanagement' : "Abwesenheits- und Zeiterfassung",
|
'module_timemanagement' : "Abwesenheits- und Zeiterfassung",
|
||||||
'module_timemanagement' : "Abwesenheitsplanung",
|
#'module_timemanagement' : "Abwesenheitsplanung",
|
||||||
}
|
}
|
||||||
fields = ['module_news','module_organizer','module_files','module_organigramm', 'module_messages', 'module_chat', 'module_timemanagement']
|
fields = ['module_news','module_organizer','module_files','module_organigramm', 'module_messages', 'module_chat', 'module_timemanagement']
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: "{% url 'modsettings-tm' %}",
|
url: "{% url 'modsettings-tm' %}",
|
||||||
data:{
|
data:{
|
||||||
aze: $("#id_module_timemanagement_ze").prop('checked')
|
//aze: $("#id_module_timemanagement_ze").prop('checked')
|
||||||
},
|
},
|
||||||
success: function( data )
|
success: function( data )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,15 @@
|
||||||
<form method="POST" enctype="multipart/form-data" name="usertime_basic">
|
<form method="POST" enctype="multipart/form-data" name="usertime_basic">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<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>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-3">
|
||||||
|
{{usertime_form.usetime|as_crispy_field}}
|
||||||
|
</div>
|
||||||
|
<div class="col-5">
|
||||||
|
{{usertime_form.usetime_start|as_crispy_field}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<h5>Arbeitszeiten <small><i data-toggle="tooltip" data-placement="top" title="Legen Sie fest, an welchen Tagen dieser Mitarbeiter wie viele Stunden arbeitet." class="far fa-question-circle"></i></small></h5>
|
<h5>Arbeitszeiten <small><i data-toggle="tooltip" data-placement="top" title="Legen Sie fest, an welchen Tagen dieser Mitarbeiter wie viele Stunden arbeitet." class="far fa-question-circle"></i></small></h5>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table">
|
<table class="table">
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from django.shortcuts import render, redirect
|
from django.shortcuts import render, redirect
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.http import HttpResponseRedirect,HttpResponse, JsonResponse
|
from django.http import HttpResponseRedirect,HttpResponse, JsonResponse
|
||||||
from .forms import UsersSelfChangeForm, UsersNotificationForm, AgencyGroupPerms, AgencyModulsForm, UserNewUserForm, UserProfileForm, AgencyNetworkForm, AgencyOrganigrammForm, UserTimeForm, AgencyTimeManagement, AbsenceReasonForm
|
from .forms import UsersSelfChangeForm, UsersNotificationForm, AgencyGroupPerms, AgencyModulsForm, UserNewUserForm, UserProfileForm, AgencyNetworkForm, AgencyOrganigrammForm, UserTimeForm, AbsenceReasonForm
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth import update_session_auth_hash
|
from django.contrib.auth import update_session_auth_hash
|
||||||
from django.contrib.auth.forms import PasswordChangeForm
|
from django.contrib.auth.forms import PasswordChangeForm
|
||||||
|
|
@ -78,8 +78,8 @@ def getAllForms(request, context):
|
||||||
context.update({'modsettings_organigramm' : modsettings_organigramm})
|
context.update({'modsettings_organigramm' : modsettings_organigramm})
|
||||||
|
|
||||||
#Modulsettings ABWESENHEIT- UND ZEITERFASSUNG
|
#Modulsettings ABWESENHEIT- UND ZEITERFASSUNG
|
||||||
modsettings_tm = AgencyTimeManagement(instance=request.user.profile.agency)
|
#modsettings_tm = AgencyTimeManagement(instance=request.user.profile.agency)
|
||||||
context.update({'modsettings_tm' : modsettings_tm})
|
#context.update({'modsettings_tm' : modsettings_tm})
|
||||||
context.update({"modsettings_tm_abcat" : AbsenceReason.objects.filter(agency=request.user.profile.agency).order_by("name") })
|
context.update({"modsettings_tm_abcat" : AbsenceReason.objects.filter(agency=request.user.profile.agency).order_by("name") })
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -335,7 +335,7 @@ def SettingsAgencyModuls(request, context):
|
||||||
# Check, if Timemanagement is deactivate, to deactivate Zeiterfassung
|
# Check, if Timemanagement is deactivate, to deactivate Zeiterfassung
|
||||||
if(request.user.profile.agency.module_timemanagement == False):
|
if(request.user.profile.agency.module_timemanagement == False):
|
||||||
ag = request.user.profile.agency
|
ag = request.user.profile.agency
|
||||||
ag.module_timemanagement_ze = False
|
#ag.module_timemanagement_ze = False
|
||||||
|
|
||||||
if(request.user.has_perm("users.modulesconfig")):
|
if(request.user.has_perm("users.modulesconfig")):
|
||||||
FreeDays.objects.filter(agency=request.user.profile.agency).delete()
|
FreeDays.objects.filter(agency=request.user.profile.agency).delete()
|
||||||
|
|
@ -1283,8 +1283,11 @@ def ModSettingsOrga(request):
|
||||||
else:
|
else:
|
||||||
return JsonResponse({})
|
return JsonResponse({})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def ModSettingsTm(request):
|
def ModSettingsTm(request):
|
||||||
|
return JsonResponse({})
|
||||||
|
'''
|
||||||
if request.method == 'GET' and request.user.has_perm("users.modulesconfig"):
|
if request.method == 'GET' and request.user.has_perm("users.modulesconfig"):
|
||||||
if(request.GET['aze'] == "true"):
|
if(request.GET['aze'] == "true"):
|
||||||
ag = request.user.profile.agency
|
ag = request.user.profile.agency
|
||||||
|
|
@ -1297,4 +1300,4 @@ def ModSettingsTm(request):
|
||||||
return JsonResponse({})
|
return JsonResponse({})
|
||||||
else:
|
else:
|
||||||
return JsonResponse({})
|
return JsonResponse({})
|
||||||
|
'''
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{% load crispy_forms_tags %}
|
{% load crispy_forms_tags %}
|
||||||
{% load mathfilters %}
|
{% load mathfilters %}
|
||||||
<h5>Abwesenheit für {{absence.user.first_name}} {{absence.user.last_name}} annehmen oder ablehnen</h5>
|
<h5>Abwesenheit für {{absence.user.first_name}} {{absence.user.last_name}} annehmen/ablehnen</h5>
|
||||||
<hr>
|
<hr>
|
||||||
<h6>Informationen der Abwesenheit</h6>
|
<h6>Informationen der Abwesenheit</h6>
|
||||||
Von: {{absence.start|date:"d.m Y"}}<br />
|
Von: {{absence.start|date:"d.m Y"}}<br />
|
||||||
|
|
@ -25,6 +25,16 @@ Informationen: {{absence.info}}<br />
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
{% if other_absences_string != False %}
|
||||||
|
<div id="otherholidays">
|
||||||
|
<hr>
|
||||||
|
<h5>Andere Abwesenheiten in diesem Zeitraum</h5>
|
||||||
|
{% for ele in other_absences_string %}
|
||||||
|
{{ele}}<br />
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
{% endif %}
|
||||||
<form method="POST">
|
<form method="POST">
|
||||||
<input type="hidden" name="form_type" value="confirmform">
|
<input type="hidden" name="form_type" value="confirmform">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{% extends "users/base.html" %}
|
{% extends "users/base.html" %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% load counter_tag %}
|
{% load counter_tag %}
|
||||||
{% if request.user.profile.agency.module_timemanagement_ze %}
|
{% if request.user.profile.agency.module_timemanagement %}
|
||||||
<div class="content-section col-12">
|
<div class="content-section col-12">
|
||||||
<h3>Zeiterfassung <small><i data-toggle="tooltip" data-placement="top" title="Bearbeiten Sie hier Ihre Zeiterfassung." class="far fa-question-circle"></i></small></h3>
|
<h3>Zeiterfassung <small><i data-toggle="tooltip" data-placement="top" title="Bearbeiten Sie hier Ihre Zeiterfassung." class="far fa-question-circle"></i></small></h3>
|
||||||
<hr>
|
<hr>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@
|
||||||
<table class="table table-hover" id="table_allabsences">
|
<table class="table table-hover" id="table_allabsences">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">Mitarbeiter</th>
|
<th scope="col">Vorname</th>
|
||||||
|
<th scope="col">Nachname</th>
|
||||||
<th scope="col">Start</th>
|
<th scope="col">Start</th>
|
||||||
<th scope="col">Ende</th>
|
<th scope="col">Ende</th>
|
||||||
<th scope="col">Grund</th>
|
<th scope="col">Grund</th>
|
||||||
|
|
@ -15,7 +16,8 @@
|
||||||
<tbody id="">
|
<tbody id="">
|
||||||
{% for abday in allabsences %}
|
{% for abday in allabsences %}
|
||||||
<tr id="tableele_ab_{{abday.pk}}">
|
<tr id="tableele_ab_{{abday.pk}}">
|
||||||
<td>{{abday.user.first_name}} {{abday.user.last_name}}</td>
|
<td>{{abday.user.first_name}}</td>
|
||||||
|
<td>{{abday.user.last_name}}</td>
|
||||||
<td>{{abday.start|date:"d.M Y"}}</td>
|
<td>{{abday.start|date:"d.M Y"}}</td>
|
||||||
<td>{{abday.end|date:"d.M Y"}}</td>
|
<td>{{abday.end|date:"d.M Y"}}</td>
|
||||||
<td>{{abday.reason.name}}</td>
|
<td>{{abday.reason.name}}</td>
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,12 @@
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<!-- CANVAS -->
|
<!-- CANVAS -->
|
||||||
<h6>Urlaubsübersicht</h6>
|
<h6>Urlaubsübersicht {{activeyear}}</h6>
|
||||||
<div class="chart-container" style="">
|
<div class="chart-container" style="">
|
||||||
<canvas id="datainfo_reason"></canvas>
|
<canvas id="datainfo_reason"></canvas>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<h6>Übersicht nach Abwesenheitskategorien</h6>
|
<h6>Übersicht nach Abwesenheitskategorien {{activeyear}}</h6>
|
||||||
<div class="chart-container" style="">
|
<div class="chart-container" style="">
|
||||||
<canvas id="datainfo_restdays"></canvas>
|
<canvas id="datainfo_restdays"></canvas>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -167,10 +167,11 @@ def AbsenceManagmenet(request, activemonth=False, activeyear=False):
|
||||||
|
|
||||||
|
|
||||||
# ABSENCE AUFLISTUNG NACH GRUND
|
# ABSENCE AUFLISTUNG NACH GRUND
|
||||||
|
|
||||||
allreasons = AbsenceReason.objects.filter(agency=request.user.profile.agency).order_by("name")
|
allreasons = AbsenceReason.objects.filter(agency=request.user.profile.agency).order_by("name")
|
||||||
final_reasons = []
|
final_reasons = []
|
||||||
for ar in allreasons:
|
for ar in allreasons:
|
||||||
tempabsece = Absence.objects.filter(reason=ar, user=request.user)
|
tempabsece = Absence.objects.filter(reason=ar, user=request.user, start__year=activeyear)
|
||||||
temp_sum = 0.0
|
temp_sum = 0.0
|
||||||
for t in tempabsece:
|
for t in tempabsece:
|
||||||
temp_sum += calculatingHolidaysByAbsence(request, t)
|
temp_sum += calculatingHolidaysByAbsence(request, t)
|
||||||
|
|
@ -387,9 +388,21 @@ def TimeAjax(request):
|
||||||
except:
|
except:
|
||||||
timeinfo_nextyear = False
|
timeinfo_nextyear = False
|
||||||
|
|
||||||
|
|
||||||
|
# POrüfen, ob es in diesem Zeitraum noch andere Abwesenheiten gibt
|
||||||
|
other_absences = Absence.objects.filter(start__lte=absence.start, end__gte=absence.end, agency=request.user.profile.agency).exclude(user=absence.user)
|
||||||
|
|
||||||
|
other_absences_string = False
|
||||||
|
if (len(other_absences) > 0):
|
||||||
|
other_absences_string = []
|
||||||
|
for a in other_absences:
|
||||||
|
other_absences_string.append(a.user.first_name + " " + a.user.last_name + " - Vom " + a.start.strftime("%d.%m.%Y") + " bis " + a.end.strftime("%d.%m.%Y"))
|
||||||
|
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
"confirmform" : ConfirmAbsenceForm(instance=request.user),
|
"confirmform" : ConfirmAbsenceForm(instance=request.user),
|
||||||
"absence" : absence,
|
"absence" : absence,
|
||||||
|
"other_absences_string" : other_absences_string,
|
||||||
"timeinfo_thisyear" : timeinfo_thisyear,
|
"timeinfo_thisyear" : timeinfo_thisyear,
|
||||||
"timeinfo_nextyear" : timeinfo_nextyear
|
"timeinfo_nextyear" : timeinfo_nextyear
|
||||||
}
|
}
|
||||||
|
|
@ -516,7 +529,8 @@ def TimeAjax(request):
|
||||||
days_nextyear_rest = need_days_next + temprest
|
days_nextyear_rest = need_days_next + temprest
|
||||||
days_nextyear_normal = temprest * -1
|
days_nextyear_normal = temprest * -1
|
||||||
|
|
||||||
other_absences = Absence.objects.filter(start__lte=start_day_obj, end__gte=end_day_obj, agency=request.user.profile.agency) | Absence.objects.filter(start__lte=start_day_obj, end__lte=end_day_obj, agency=request.user.profile.agency) | Absence.objects.filter(start__gte=start_day_obj, end__lte=start_day_obj, agency=request.user.profile.agency) | Absence.objects.filter(start__lte=end_day_obj, end__gte=end_day_obj, agency=request.user.profile.agency)
|
# 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_string = False
|
other_absences_string = False
|
||||||
if (len(other_absences) > 0):
|
if (len(other_absences) > 0):
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ class Agency(models.Model):
|
||||||
module_timemanagement = models.BooleanField(default=False)
|
module_timemanagement = models.BooleanField(default=False)
|
||||||
module_timemanagement_price = models.FloatField(default=10.0, max_length=9, blank=True)
|
module_timemanagement_price = models.FloatField(default=10.0, max_length=9, blank=True)
|
||||||
# Zeiterfassung Ja/Nein
|
# Zeiterfassung Ja/Nein
|
||||||
module_timemanagement_ze = models.BooleanField(default=False)
|
#module_timemanagement_ze = models.BooleanField(default=False)
|
||||||
|
|
||||||
vve = models.CharField(default="", max_length=200, blank=True)
|
vve = models.CharField(default="", max_length=200, blank=True)
|
||||||
|
|
||||||
|
|
@ -262,6 +262,8 @@ class UserTime(models.Model):
|
||||||
wd_fr = models.FloatField(default=8.0)
|
wd_fr = models.FloatField(default=8.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)
|
||||||
|
usetime = models.BooleanField(default=False)
|
||||||
|
usetime_start = models.DateField(default=None, blank=True, null=True)
|
||||||
|
|
||||||
|
|
||||||
class UserYearAbsenceInfo(models.Model):
|
class UserYearAbsenceInfo(models.Model):
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,7 @@
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if request.user.profile.agency.module_timemanagement_ze %}
|
{% if request.user.usertime.usetime %}
|
||||||
{% if active_link == 'timemanagement' %}
|
{% if active_link == 'timemanagement' %}
|
||||||
<li class="nav-item active">
|
<li class="nav-item active">
|
||||||
{% else%}
|
{% else%}
|
||||||
|
|
@ -310,7 +310,7 @@
|
||||||
</style>
|
</style>
|
||||||
<!-- Topbar Navbar -->
|
<!-- Topbar Navbar -->
|
||||||
<ul class="navbar-nav ml-auto ">
|
<ul class="navbar-nav ml-auto ">
|
||||||
{% if request.user.profile.agency.module_timemanagement_ze %}
|
{% if request.user.usertime.usetime %}
|
||||||
<li class="nav-item dropdown no-arrow mx-1">
|
<li class="nav-item dropdown no-arrow mx-1">
|
||||||
<a class="nav-link dropdown-toggle" onclick="" id="timemanagement_realtime" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<a class="nav-link dropdown-toggle" onclick="" id="timemanagement_realtime" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
<i class="far fa-clock"></i>
|
<i class="far fa-clock"></i>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue