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 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 Meta:
|
||||
model = Agency
|
||||
|
|
@ -36,7 +26,6 @@ class AgencyNetworkForm(forms.ModelForm):
|
|||
"publicjoin" : "Beitritt ohne Bestätigung"
|
||||
}
|
||||
|
||||
|
||||
# Change logged Users Data (Usernamen an Email) NUR HIER MÖGLICH!
|
||||
class UsersSelfChangeForm(forms.ModelForm):
|
||||
email = forms.EmailField()
|
||||
|
|
@ -74,16 +63,21 @@ class UserTimeForm(forms.ModelForm):
|
|||
"wd_tu" : "Dienstag",
|
||||
"wd_we" : "Mittwoch",
|
||||
"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 = {
|
||||
"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):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['startdate'].required = True
|
||||
self.fields['usetime_start'].required = False
|
||||
self.fields['usetime'].required = False
|
||||
|
||||
|
||||
# PERMISSION GROUPS FORM
|
||||
|
|
@ -116,8 +110,8 @@ class AgencyModulsForm(forms.ModelForm):
|
|||
'module_organigramm' : "Organigramm",
|
||||
'module_messages' : "Mitteilungen",
|
||||
'module_chat' : "Chat",
|
||||
#'module_timemanagement' : "Abwesenheits- und Zeiterfassung",
|
||||
'module_timemanagement' : "Abwesenheitsplanung",
|
||||
'module_timemanagement' : "Abwesenheits- und Zeiterfassung",
|
||||
#'module_timemanagement' : "Abwesenheitsplanung",
|
||||
}
|
||||
fields = ['module_news','module_organizer','module_files','module_organigramm', 'module_messages', 'module_chat', 'module_timemanagement']
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
type: "GET",
|
||||
url: "{% url 'modsettings-tm' %}",
|
||||
data:{
|
||||
aze: $("#id_module_timemanagement_ze").prop('checked')
|
||||
//aze: $("#id_module_timemanagement_ze").prop('checked')
|
||||
},
|
||||
success: function( data )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -164,9 +164,17 @@
|
|||
<form method="POST" enctype="multipart/form-data" name="usertime_basic">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="form_type" value="contract">
|
||||
|
||||
<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">
|
||||
<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>
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td>{{usertime_form.wd_mo|as_crispy_field}}</td>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
from django.shortcuts import render, redirect
|
||||
from django.contrib.auth.decorators import login_required
|
||||
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.auth import update_session_auth_hash
|
||||
from django.contrib.auth.forms import PasswordChangeForm
|
||||
|
|
@ -78,8 +78,8 @@ def getAllForms(request, context):
|
|||
context.update({'modsettings_organigramm' : modsettings_organigramm})
|
||||
|
||||
#Modulsettings ABWESENHEIT- UND ZEITERFASSUNG
|
||||
modsettings_tm = AgencyTimeManagement(instance=request.user.profile.agency)
|
||||
context.update({'modsettings_tm' : modsettings_tm})
|
||||
#modsettings_tm = AgencyTimeManagement(instance=request.user.profile.agency)
|
||||
#context.update({'modsettings_tm' : modsettings_tm})
|
||||
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
|
||||
if(request.user.profile.agency.module_timemanagement == False):
|
||||
ag = request.user.profile.agency
|
||||
ag.module_timemanagement_ze = False
|
||||
#ag.module_timemanagement_ze = False
|
||||
|
||||
if(request.user.has_perm("users.modulesconfig")):
|
||||
FreeDays.objects.filter(agency=request.user.profile.agency).delete()
|
||||
|
|
@ -1282,9 +1282,12 @@ def ModSettingsOrga(request):
|
|||
return JsonResponse({})
|
||||
else:
|
||||
return JsonResponse({})
|
||||
|
||||
|
||||
|
||||
@login_required
|
||||
def ModSettingsTm(request):
|
||||
return JsonResponse({})
|
||||
'''
|
||||
if request.method == 'GET' and request.user.has_perm("users.modulesconfig"):
|
||||
if(request.GET['aze'] == "true"):
|
||||
ag = request.user.profile.agency
|
||||
|
|
@ -1297,4 +1300,4 @@ def ModSettingsTm(request):
|
|||
return JsonResponse({})
|
||||
else:
|
||||
return JsonResponse({})
|
||||
|
||||
'''
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{% load crispy_forms_tags %}
|
||||
{% 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>
|
||||
<h6>Informationen der Abwesenheit</h6>
|
||||
Von: {{absence.start|date:"d.m Y"}}<br />
|
||||
|
|
@ -25,6 +25,16 @@ Informationen: {{absence.info}}<br />
|
|||
</tr>
|
||||
</tbody>
|
||||
</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">
|
||||
<input type="hidden" name="form_type" value="confirmform">
|
||||
{% csrf_token %}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{% extends "users/base.html" %}
|
||||
{% block content %}
|
||||
{% load counter_tag %}
|
||||
{% if request.user.profile.agency.module_timemanagement_ze %}
|
||||
{% if request.user.profile.agency.module_timemanagement %}
|
||||
<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>
|
||||
<hr>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@
|
|||
<table class="table table-hover" id="table_allabsences">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Mitarbeiter</th>
|
||||
<th scope="col">Vorname</th>
|
||||
<th scope="col">Nachname</th>
|
||||
<th scope="col">Start</th>
|
||||
<th scope="col">Ende</th>
|
||||
<th scope="col">Grund</th>
|
||||
|
|
@ -15,7 +16,8 @@
|
|||
<tbody id="">
|
||||
{% for abday in allabsences %}
|
||||
<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.end|date:"d.M Y"}}</td>
|
||||
<td>{{abday.reason.name}}</td>
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@
|
|||
<div class="card">
|
||||
<div class="card-body">
|
||||
<!-- CANVAS -->
|
||||
<h6>Urlaubsübersicht</h6>
|
||||
<h6>Urlaubsübersicht {{activeyear}}</h6>
|
||||
<div class="chart-container" style="">
|
||||
<canvas id="datainfo_reason"></canvas>
|
||||
</div>
|
||||
<hr>
|
||||
<h6>Übersicht nach Abwesenheitskategorien</h6>
|
||||
<h6>Übersicht nach Abwesenheitskategorien {{activeyear}}</h6>
|
||||
<div class="chart-container" style="">
|
||||
<canvas id="datainfo_restdays"></canvas>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -167,10 +167,11 @@ def AbsenceManagmenet(request, activemonth=False, activeyear=False):
|
|||
|
||||
|
||||
# ABSENCE AUFLISTUNG NACH GRUND
|
||||
|
||||
allreasons = AbsenceReason.objects.filter(agency=request.user.profile.agency).order_by("name")
|
||||
final_reasons = []
|
||||
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
|
||||
for t in tempabsece:
|
||||
temp_sum += calculatingHolidaysByAbsence(request, t)
|
||||
|
|
@ -379,7 +380,7 @@ def TimeAjax(request):
|
|||
}
|
||||
# GET FORM FOR CONFIRM ABSENCE
|
||||
elif request.GET["action"] == "getrenderedform":
|
||||
|
||||
|
||||
absence = Absence.objects.get(pk=request.GET["abscenceid"])
|
||||
timeinfo_thisyear = list(UserYearAbsenceInfo.objects.filter(year=absence.start.year, user=absence.user))[0]
|
||||
try:
|
||||
|
|
@ -387,9 +388,21 @@ def TimeAjax(request):
|
|||
except:
|
||||
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 = {
|
||||
"confirmform" : ConfirmAbsenceForm(instance=request.user),
|
||||
"absence" : absence,
|
||||
"other_absences_string" : other_absences_string,
|
||||
"timeinfo_thisyear" : timeinfo_thisyear,
|
||||
"timeinfo_nextyear" : timeinfo_nextyear
|
||||
}
|
||||
|
|
@ -516,7 +529,8 @@ def TimeAjax(request):
|
|||
days_nextyear_rest = need_days_next + temprest
|
||||
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
|
||||
if (len(other_absences) > 0):
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ class Agency(models.Model):
|
|||
module_timemanagement = models.BooleanField(default=False)
|
||||
module_timemanagement_price = models.FloatField(default=10.0, max_length=9, blank=True)
|
||||
# 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)
|
||||
|
||||
|
|
@ -262,6 +262,8 @@ class UserTime(models.Model):
|
|||
wd_fr = models.FloatField(default=8.0)
|
||||
loose_holidedate = models.CharField(default="30.04.", max_length=6)
|
||||
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):
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@
|
|||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if request.user.profile.agency.module_timemanagement_ze %}
|
||||
{% if request.user.usertime.usetime %}
|
||||
{% if active_link == 'timemanagement' %}
|
||||
<li class="nav-item active">
|
||||
{% else%}
|
||||
|
|
@ -309,8 +309,8 @@
|
|||
}
|
||||
</style>
|
||||
<!-- Topbar Navbar -->
|
||||
<ul class="navbar-nav ml-auto ">
|
||||
{% if request.user.profile.agency.module_timemanagement_ze %}
|
||||
<ul class="navbar-nav ml-auto ">
|
||||
{% if request.user.usertime.usetime %}
|
||||
<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">
|
||||
<i class="far fa-clock"></i>
|
||||
|
|
|
|||
Loading…
Reference in New Issue