diff --git a/timemanagement/templates/timemanagement/timemanagement_add.html b/timemanagement/templates/timemanagement/timemanagement_add.html
index 41e2744..a8c093f 100644
--- a/timemanagement/templates/timemanagement/timemanagement_add.html
+++ b/timemanagement/templates/timemanagement/timemanagement_add.html
@@ -4,7 +4,7 @@
{% load counter_tag %}
{% if request.user.profile.agency.module_timemanagement %}
-
Arbeitstag hinzufügen
+
Arbeitstag {% if team == 1 %} von {{user.get_full_name}} {% endif %} hinzufügen
Start- und Endzeitpunkt
diff --git a/timemanagement/templates/timemanagement/timemanagement_overview.html b/timemanagement/templates/timemanagement/timemanagement_overview.html
deleted file mode 100644
index d5f2850..0000000
--- a/timemanagement/templates/timemanagement/timemanagement_overview.html
+++ /dev/null
@@ -1 +0,0 @@
-ÜBERSICHT
\ No newline at end of file
diff --git a/timemanagement/templates/timemanagement/timemanagement_teamview.html b/timemanagement/templates/timemanagement/timemanagement_teamview.html
index 715b5da..e877d7a 100644
--- a/timemanagement/templates/timemanagement/timemanagement_teamview.html
+++ b/timemanagement/templates/timemanagement/timemanagement_teamview.html
@@ -16,8 +16,8 @@
{% for item in usersofagency %}
- | {{item.first_name }} |
- {{ item.last_name }} |
+ {{item.first_name }} |
+ {{ item.last_name }} |
{{ item.email }} |
{% if item.profile.func == None %}-{%else%}{{ item.profile.func }}{%endif%} |
@@ -34,21 +34,20 @@
|
{% if item.last_login != Nonte %}{{ item.last_login }}{% endif %} |
- {% if item != request.user %}
-
- {% endif %}
+ {% if item.usertime.usetime %}
+ {% else %}
+ Mitarbeiter macht keine Zeiterfassung.
+ {% endif %}
|
{% endfor %}
-
\ No newline at end of file
diff --git a/timemanagement/templates/timemanagement/timemanagement_teamview_single.html b/timemanagement/templates/timemanagement/timemanagement_teamview_single.html
new file mode 100644
index 0000000..bc18e46
--- /dev/null
+++ b/timemanagement/templates/timemanagement/timemanagement_teamview_single.html
@@ -0,0 +1,431 @@
+{% extends "users/base.html" %}
+{% block content %}
+{% load counter_tag %}
+
Zeiterfassung von {{user.get_full_name}} bearbeiten
+ Arbeitstag
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ |
+ Start |
+ Ende |
+ Arbeitszeit |
+ Pausen |
+ Gesamtzeit |
+ Gleitzeit |
+ |
+
+
+
+ {% for da in days_this_month %}
+
+ {% getabscenceday user user da as abday %}
+
+
+ |
+ {{da|date:"l"}}
+ |
+
+ {{da|date:"d.m.y"}}
+ |
+
+ {% if abday != False %}
+ {{abday.reason}}
+ {% if abday.start == da%}
+ {% if abday.startday_info == "1" %}
+ (nur Vormittags)
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {{workday.start|date:"H:i"}} - {{workday.end|date:"H:i"}},
+ {% getsumworkdayexcludebreak workday as sumworkday %}
+ {{ sumworkday }},
+ {% getsumbreak workday as sumbreakofday %}
+ {{sumbreakofday}} min. ({{workday.breaks.all|length}}),
+ {% getsumworkday workday as sumwd %}
+ {{sumwd}},
+ {% gettimeoveralldiff workday user as erg%}
+ {% if erg.1 == 0 %}
+ +{{erg.0}}
+ {% elif erg.1 == 1 %}
+ {{erg.0}}
+ {% else %}
+ -{{erg.0}}
+ {% endif %}
+
+
+
+
+ {% endif %}
+ {% endfor %}
+
+
+
+ {% elif abday.startday_info == "2" %}
+ (nur Nachmittags)
+
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {{workday.start|date:"H:i"}} - {{workday.end|date:"H:i"}}
+ {% getsumworkdayexcludebreak workday as sumworkday %}
+ {{ sumworkday }},
+ {% getsumbreak workday as sumbreakofday %}
+ {{sumbreakofday}} min. ({{workday.breaks.all|length}}),
+ {% getsumworkday workday as sumwd %}
+ {{sumwd}},
+ {% gettimeoveralldiff workday user as erg%}
+ {% if erg.1 == 0 %}
+ +{{erg.0}}
+ {% elif erg.1 == 1 %}
+ {{erg.0}}
+ {% else %}
+ -{{erg.0}}
+ {% endif %}
+
+
+
+
+
+ {% endif %}
+ {% endfor %}
+
+ {% endif %}
+ {% elif abday.end == da%}
+ {% if abday.endday_info == "1" %}
+ (nur Vormittags)
+
+
+
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {{workday.start|date:"H:i"}} - {{workday.end|date:"H:i"}}
+ {% getsumworkdayexcludebreak workday as sumworkday %}
+ {{ sumworkday }},
+ {% getsumbreak workday as sumbreakofday %}
+ {{sumbreakofday}} min. ({{workday.breaks.all|length}}),
+ {% getsumworkday workday as sumwd %}
+ {{sumwd}},
+ {% gettimeoveralldiff workday user as erg%}
+ {% if erg.1 == 0 %}
+ +{{erg.0}}
+ {% elif erg.1 == 1 %}
+ {{erg.0}}
+ {% else %}
+ -{{erg.0}}
+ {% endif %}
+
+
+
+
+
+
+ {% endif %}
+ {% endfor %}
+
+ {% elif abday.endday_info == "2" %}
+ (nur Nachmittags)
+
+
+
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {{workday.start|date:"H:i"}} - {{workday.end|date:"H:i"}}
+ {% getsumworkdayexcludebreak workday as sumworkday %}
+ {{ sumworkday }},
+ {% getsumbreak workday as sumbreakofday %}
+ {{sumbreakofday}} min. ({{workday.breaks.all|length}}),
+ {% getsumworkday workday as sumwd %}
+ {{sumwd}},
+ {% gettimeoveralldiff workday user as erg%}
+ {% if erg.1 == 0 %}
+ +{{erg.0}}
+ {% elif erg.1 == 1 %}
+ {{erg.0}}
+ {% else %}
+ -{{erg.0}}
+ {% endif %}
+
+
+
+
+
+ {% endif %}
+ {% endfor %}
+
+ {% endif %}
+ {% endif %}
+
+ {% else %}
+ {% if abday == False %}
+ {% counterWDreset %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {% getCounterWD as wd_counter %}
+
+ {% if wd_counter > 0 %}
+
+ {% endif %}
+
+
+ {% counterWDUp %}
+ {{workday.start|date:"H:i"}}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% endif %}
+ |
+ {% if abday == False %}
+
+ {% counterWDreset %}
+ {% for workday in workdays %}
+ {% if workday.end|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {% getCounterWD as wd_counter %}
+
+ {% if wd_counter > 0 %}
+
+ {% endif %}
+
+
+ {% counterWDUp %}
+
+ {{workday.end|date:"H:i"}}
+ {% endif %}
+ {% endfor %}
+
+ |
+
+ {% counterWDreset %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {% getCounterWD as wd_counter %}
+
+ {% if wd_counter > 0 %}
+
+ {% endif %}
+
+
+ {% counterWDUp %}
+
+ {% getsumworkdayexcludebreak workday as sumworkday %}
+ {{ sumworkday }}
+ {% endif %}
+ {% endfor %}
+
+ |
+
+ {% counterWDreset %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {% getCounterWD as wd_counter %}
+
+ {% if wd_counter > 0 %}
+
+ {% endif %}
+
+ {% counterWDUp %}
+
+ {% getsumbreak workday as sumbreakofday %}
+ {{sumbreakofday}} min. ({{workday.breaks.all|length}})
+ {% endif %}
+ {% endfor %}
+
+ |
+
+
+ {% counterWDreset %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {% getCounterWD as wd_counter %}
+
+ {% if wd_counter > 0 %}
+
+ {% endif %}
+
+
+ {% counterWDUp %}
+
+ {% getsumworkday workday as sumwd %}
+ {{sumwd}}
+ {% endif %}
+ {% endfor %}
+
+ |
+
+
+ {% counterWDreset %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {% getCounterWD as wd_counter %}
+
+ {% if wd_counter > 0 %}
+
+ {% endif %}
+ {% counterWDUp %}
+ {% gettimeoveralldiff workday user as erg%}
+ {% if erg.1 == 0 %}
+ +{{erg.0}}
+ {% elif erg.1 == 1 %}
+ {{erg.0}}
+ {% else %}
+ -{{erg.0}}
+ {% endif %}
+ {% endif %}
+ {% endfor %}
+
+ |
+
+
+ {% counterWDreset %}
+ {% for workday in workdays %}
+ {% if workday.start|date:"d-m-y" == da|date:"d-m-y" %}
+
+ {% getCounterWD as wd_counter %}
+
+ {% if wd_counter > 0 %}
+
+ {% endif %}
+
+
+ {% counterWDUp %}
+
+
+
+
+ {% endif %}
+ {% endfor %}
+ |
+ {% else %}
+ | | | | | |
+ {% endif %}
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+ {% getsomeyears active_year as years %}
+
+
+ {% getsomemonths as months %}
+ {% for m in months %}
+
+ {% endfor %}
+
+
+
+
+
+
+{% for workday in workdays %}
+
+
+
+
+
+ Möchten Sie wirklich den Arbeitstag am {{workday.start|date:"d.m"}} löschen?
+
+
+
+
+
+
+{% endfor %}
+
+
+
+
+{% endblock content %}
\ No newline at end of file
diff --git a/timemanagement/templates/timemanagement/timemanagement_update.html b/timemanagement/templates/timemanagement/timemanagement_update.html
index b5413ff..8d83637 100644
--- a/timemanagement/templates/timemanagement/timemanagement_update.html
+++ b/timemanagement/templates/timemanagement/timemanagement_update.html
@@ -5,7 +5,7 @@
{% if request.user.profile.agency.module_timemanagement %}
-
Arbeitstag am {{workday.start|date:"d.m.Y"}} bearbeiten
+
Arbeitstag am {{workday.start|date:"d.m.Y"}} {% if team == 1 %} von {{user.get_full_name}} {% endif %} bearbeiten
Start- und Endzeitpunkt
@@ -16,7 +16,11 @@
Pausen
+ {% if team == 1 %}
+
+ {% else %}
+ {% endif %}
+{% if team == 1 %}
Abbrechen
+{% else %}
+
Abbrechen
+{% endif %}
diff --git a/timemanagement/urls.py b/timemanagement/urls.py
index 0024adf..efa88ae 100644
--- a/timemanagement/urls.py
+++ b/timemanagement/urls.py
@@ -1,18 +1,24 @@
from django.urls import path
from django.contrib.auth.decorators import login_required, permission_required
-from .views import TimeManagement, TimeAjax, AbsenceManagmenet, AbsenceUpdate, TimeUpdate, AddBreak, TimeAdd
+from .views import TimeManagement, TimeAjax, AbsenceManagmenet, AbsenceUpdate, TimeUpdate, AddBreak, TimeAdd, TimeManagementTeamSingle
'''
Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben!
'''
urlpatterns = [
path('', TimeManagement, name='tm-management'),
+ path('tm/team/
', TimeManagementTeamSingle, name='tm-team-single'),
+ path('tm/team///', TimeManagementTeamSingle, name='tm-team-single'),
path('/', TimeManagement, name='tm-management'),
path('update/', TimeUpdate, name='tm-update'),
+ path('update//', TimeUpdate, name='tm-update'),
path('add/', TimeAdd, name='tm-add'),
+ path('add//', TimeAdd, name='tm-add'),
path('update//addbreak/', AddBreak, name='add-break'),
+ path('update//addbreak/', AddBreak, name='add-break'),
path('abs/', AbsenceManagmenet, name='tma-management'),
path('abs//', AbsenceManagmenet, name='tma-management'),
path('ajax/', TimeAjax, name='tm-ajax'),
path('abs/update//', AbsenceUpdate, name='tma-update'),
+
]
diff --git a/timemanagement/views.py b/timemanagement/views.py
index 6fcf9b9..7ff883c 100644
--- a/timemanagement/views.py
+++ b/timemanagement/views.py
@@ -285,6 +285,71 @@ def AbsenceManagmenet(request, activemonth=False, activeyear=False):
return render(request, 'timemanagement/tm_ab_management.html', context)
+@login_required
+def TimeManagementTeamSingle(request, pk, activemonth=False, activeyear=False):
+ if(request.user.has_perm("users.usersmanager")):
+ # Setzt die Monatsausgabe auf Deutsch
+ locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8')
+ user = User.objects.get(pk=pk)
+ # Hier wird der Monat und das Jahr für die Buttons gebaut
+ if(activemonth == False):
+ today = datetime.datetime.today()
+ active_month = str(today.strftime("%B"))
+ active_year = str(today.strftime("%Y"))
+ activemonth = today.month
+ else:
+ today = datetime.datetime(activeyear, activemonth, 1)
+ active_month = activemonth
+ active_month = str(today.strftime("%B"))
+ active_year = str(today.strftime("%Y"))
+
+ prev_year = active_year
+ next_year = active_year
+
+ next_month = today.month + 1
+ if(next_month == 13):
+ next_month = 1
+ next_year = int(next_year) + 1
+
+ prev_month = today.month - 1
+ if(prev_month == 0):
+ prev_month = 12
+ prev_year = int(prev_year) - 1
+
+ # Initialprüfung, ob Arbeitstage vorliegen
+ tempworkday = Workday.objects.filter(agency=request.user.profile.agency, user=user).order_by("start").exclude(end=None)[:1]
+
+ user_has_workdays = False
+ if len(tempworkday) == 1:
+ user_has_workdays = True
+
+ # Hier werden nur die Arbeitstage gefiltert, die auch aktuell zur Ansicht stehen sollen
+ context = {
+ "next_month" : next_month,
+ "breakmonthline" : date.today() - timedelta(days=30),
+ "prev_month" : prev_month,
+ "next_year" : next_year,
+ "prev_year" : prev_year,
+ "active_year" : int(active_year),
+ "active_month" : active_month,
+ "activemonth" : activemonth,
+ "active_link" : "timemanagement",
+ "days_this_month" : get_datetime_range(int(active_year), int(activemonth)),
+ "workdays" : Workday.objects.filter(agency=request.user.profile.agency, user=user, start__month=activemonth, start__year=active_year).order_by("start").exclude(end=None),
+ "userhasworkdays" : user_has_workdays,
+ "user" : user
+ }
+
+ return render(request, 'timemanagement/timemanagement_teamview_single.html', context)
+
+
+
+ # Requestet User has no rights...
+ else:
+ messages.success(request, f'Das würfen Sie nicht!')
+ return redirect("timemanagement")
+
+
@login_required
def TimeManagement(request, activemonth=False, activeyear=False):
# Setzt die Monatsausgabe auf Deutsch
@@ -344,10 +409,15 @@ def TimeManagement(request, activemonth=False, activeyear=False):
return render(request, 'timemanagement/timemanagement_management.html', context)
@login_required
-def TimeUpdate(request, pk):
+def TimeUpdate(request, pk, team=0):
+ workday = Workday.objects.get(pk=pk)
+ user = workday.user
+
if(request.method == "POST"):
- form = UpdateWorkdayForm(request.POST, instance=request.user)
- workday = Workday.objects.get(pk=pk)
+ if(team == 0):
+ form = UpdateWorkdayForm(request.POST, instance=request.user)
+ else:
+ form = UpdateWorkdayForm(request.POST, instance=user)
start = datetime.datetime(int(workday.start.year), int(workday.start.month), int(workday.start.day), int(((str(form["start"].value()).split(":"))[0])), int(((str(form["start"].value()).split(":"))[1])))
@@ -358,74 +428,112 @@ def TimeUpdate(request, pk):
workday.target = form["target"].value()
workday.save()
messages.success(request, f'Arbeitstag aktualisiert')
-
- return redirect('tm-management')
+ if(team == 1):
+ return redirect('tm-team-single', user.pk, workday.start.month, workday.start.year)
+ else:
+ return redirect('tm-management')
else:
context = {
"active_link" : "timemanagement",
"workday" : Workday.objects.get(pk=pk),
- "form" : UpdateWorkdayForm(instance= Workday.objects.get(pk=pk))
+ "form" : UpdateWorkdayForm(instance= Workday.objects.get(pk=pk)),
+ "team" : team,
+ "user" : workday.user
}
return render(request, 'timemanagement/timemanagement_update.html', context)
@login_required
-def TimeAdd(request):
- if(request.method == "POST"):
+def TimeAdd(request, team=0, pk=0):
+ if(team == 0):
+ user = request.user
form = AddWorkdayForm(request.POST, instance=request.user)
+ else:
+ user = User.objects.get(pk=pk)
+ form = AddWorkdayForm(request.POST, instance=user)
+
+ if(request.method == "POST"):
if form.is_valid():
#start = datetime.datetime(int(workday.start.year), int(workday.start.month), int(workday.start.day), int(((str(form["start"].value()).split(":"))[0])), int(((str(form["start"].value()).split(":"))[1])))
#end = datetime.datetime(int(workday.end.year), int(workday.end.month), int(workday.end.day), int(((str(form["end"].value()).split(":"))[0])), int(((str(form["end"].value()).split(":"))[1])))
- workday = Workday(start=form.cleaned_data["start"], end=form.cleaned_data["end"], target=form.cleaned_data["target"], user=request.user, agency=request.user.profile.agency)
+ workday = Workday(start=form.cleaned_data["start"], end=form.cleaned_data["end"], target=form.cleaned_data["target"], user=user, agency=request.user.profile.agency)
if workday.start.day != workday.end.day or workday.start.month != workday.end.month or workday.start.year != workday.end.year or workday.start > workday.end:
messages.success(request, f'Der Arbeitstag darf nur an einem Tag stattfinden und das Ende muss nach dem Anfang liegen.')
context = {
"active_link" : "timemanagement",
- "form" : AddWorkdayForm()
+ "form" : AddWorkdayForm(),
+ "team" : team,
+ "user" : user
}
return render(request, 'timemanagement/timemanagement_add.html', context)
else:
workday.save()
messages.success(request, f'Arbeitstag hinzugefügt')
- return redirect('tm-management')
+
+ if (team == 1):
+ return redirect('tm-team-single', user.pk, workday.start.month, workday.start.year)
+ else:
+ return redirect('tm-management')
else:
messages.success(request, f'Bitte valide Daten eingeben!')
context = {
"active_link" : "timemanagement",
- "form" : AddWorkdayForm()
+ "form" : AddWorkdayForm(),
+ "team" : team,
+ "user" : user
}
return render(request, 'timemanagement/timemanagement_add.html', context)
else:
context = {
"active_link" : "timemanagement",
- "form" : AddWorkdayForm()
- }
+ "form" : AddWorkdayForm(),
+ "team" : team,
+ "user" : user
+ }
return render(request, 'timemanagement/timemanagement_add.html', context)
@login_required
-def AddBreak(request, pk):
+def AddBreak(request, pk, team=0):
+ workday = Workday.objects.get(pk=pk)
+ user = workday.user
if(request.method == "POST"):
- workday = Workday.objects.get(pk=pk)
- form = AddBreakForm(request.POST, instance=request.user)
+ if(team == 0):
+ form = AddBreakForm(request.POST, instance=request.user)
+ else:
+ form = AddBreakForm(request.POST, instance=user)
start = datetime.datetime(int(workday.start.year), int(workday.start.month), int(workday.start.day), int(((str(form["start"].value()).split(":"))[0])), int(((str(form["start"].value()).split(":"))[1])))
end = datetime.datetime(int(workday.end.year), int(workday.end.month), int(workday.end.day), int(((str(form["end"].value()).split(":"))[0])), int(((str(form["end"].value()).split(":"))[1])))
- newbreak = Breaks.objects.create(workday=workday, user=request.user, agency=request.user.profile.agency, start=start, end=end)
+ if(team == 0):
+ newbreak = Breaks.objects.create(workday=workday, user=request.user, agency=request.user.profile.agency, start=start, end=end)
+ else:
+ newbreak = Breaks.objects.create(workday=workday, user=user, agency=user.profile.agency, start=start, end=end)
workday.breaks.add(newbreak)
workday.save()
messages.success(request, f'Pause hinzugefügt')
- return redirect('tm-update', pk=pk)
+
+ if(team == 0):
+ return redirect('tm-update', pk=pk)
+ else:
+ return redirect('tm-team-single', user.pk, workday.start.month, workday.start.year)
else:
- context = {
- "active_link" : "timemanagement",
- "workday" : Workday.objects.get(pk=pk),
- "form" : AddBreakForm(instance=request.user)
- }
+ if(team == 0):
+ context = {
+ "active_link" : "timemanagement",
+ "workday" : Workday.objects.get(pk=pk),
+ "form" : AddBreakForm(instance=request.user)
+ }
+ else:
+ context = {
+ "active_link" : "timemanagement",
+ "workday" : Workday.objects.get(pk=pk),
+ "form" : AddBreakForm(instance=user)
+ }
return render(request, 'timemanagement/timemanagement_break.html', context)
@login_required
@@ -511,7 +619,7 @@ def TimeAjax(request):
# REMOVE WORKDAY
elif request.GET["action"] == "remove_workday":
wd = Workday.objects.get(pk=request.GET.get("workday"))
- if(wd.user == request.user and wd.agency == request.user.profile.agency):
+ if(wd.agency == request.user.profile.agency):
wd.delete()
data = {
"success" : True
@@ -521,7 +629,7 @@ def TimeAjax(request):
# REMOVE BREAK
elif request.GET["action"] == "remove_break":
breakwd = Breaks.objects.get(pk=request.GET.get("break"))
- if(breakwd.user == request.user and breakwd.agency == request.user.profile.agency):
+ if(breakwd.agency == request.user.profile.agency):
breakwd.delete()
data = {
"success" : True