{% extends "base.html" %} {% from "_macros.html" import avatar %} {% block title %}{{ user.first_name }} {{ user.last_name }}{% endblock %} {% block breadcrumb %}

Team / {{ user.first_name }} {{ user.last_name }}

{% endblock %} {% block heading %}{{ user.first_name }} {{ user.last_name }}{% endblock %} {% block topbar_actions %} Login bearbeiten {% endblock %} {% block content %}

Personalakte

Stammdaten, Arbeitsverhältnis, Urlaubsanspruch

{% if user.photo_path %} Foto {% else %} {{ (user.first_name[0] if user.first_name else '') ~ (user.last_name[0] if user.last_name else '') }} {% endif %}

{{ user.first_name }} {{ user.last_name }}

{{ user.username }} · {{ user.role_name or '—' }}

{% if user.photo_path %} {% endif %}
{% if user.is_active %} Aktiv {% else %} Inaktiv {% endif %}

Über "Login bearbeiten" oben rechts ändern

{# Standalone forms for photo upload/delete (must NOT be nested in HR form) #}

Urlaubskonto {{ "%d"|format(2026) }}

{% set pct = (balance.used * 100 / balance.entitled) if balance.entitled else 0 %}

Verfügbar

{{ balance.available }} T

Anspruch

{{ balance.entitled }} T

{{ balance.used }} T
Genommen
{{ balance.requested }} T
Beantragt
{{ balance.upcoming }} T
Anstehend
+ Urlaub beantragen

Level & Berechtigungen

Was diese Person im Programm darf — abgeleitet von der Rolle

Level {{ user.role_name or 'Kein Level' }}
{% if user_permissions %}
{% for group, perms in perm_groups %} {% set granted = [] %} {% for code, label in perms %}{% if code in user_permissions %}{% set _ = granted.append((code, label)) %}{% endif %}{% endfor %} {% if granted %}

{{ group }}

{% for code, label in granted %} ✓ {{ label }} {% endfor %}
{% endif %} {% endfor %}

Level & Rechte können in Einstellungen → Berechtigungen angepasst werden.

{% else %}

Keine Rechte zugewiesen — erst Level setzen oder in Einstellungen Rechte für diese Rolle aktivieren.

{% endif %}

Urlaubs-Historie

{{ requests|length }} Einträge

{% for r in requests %}
{{ r.start_date }} → {{ r.end_date }} {{ r.days }} T
{% if r.status == 'requested' %}Offen {% elif r.status == 'approved' %}Genehmigt {% elif r.status == 'rejected' %}Abgelehnt {% else %}Storniert{% endif %} {% if r.note %}{{ r.note }}{% endif %}
{% else %}
Noch keine Anträge.
{% endfor %}

Zeiterfassung — letzte 14 Tage

{% for e in time_entries %}
{{ e.started_at[:10] }} {% if e.entry_type == 'work' %}Arbeit{% else %}Pause{% endif %} {{ e.started_at[11:16] }}–{{ e.ended_at[11:16] if e.ended_at else 'läuft' }} {{ "%d:%02d"|format(e.minutes // 60, e.minutes % 60) }} h
{% else %}
Keine Stempelvorgänge.
{% endfor %}
{% endblock %}