chore: initialize public repository
CI / checks (push) Has been cancelled

This commit is contained in:
maddin
2026-03-22 12:55:55 +00:00
commit 9794362f39
143 changed files with 19832 additions and 0 deletions
+127
View File
@@ -0,0 +1,127 @@
{% from "ui/chip.html" import chip %}
{% macro status_badge_form(csrf_token, day, return_to, kind) -%}
{% if kind == 'vacation' %}
<form method="post"
action="/vacation/day/toggle"
class="inline-form"
data-async-refresh="view">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}" />
<input type="hidden" name="date" value="{{ day.date.isoformat() }}" />
<input type="hidden" name="return_to" value="{{ return_to }}" />
<button type="submit" class="day-status-badge is-vacation" title="Urlaub entfernen" aria-label="Urlaub entfernen">U</button>
</form>
{% elif kind == 'holiday' %}
<form method="post"
action="/special-day/toggle"
class="inline-form"
data-async-refresh="view">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}" />
<input type="hidden" name="date" value="{{ day.date.isoformat() }}" />
<input type="hidden" name="status" value="holiday" />
<input type="hidden" name="return_to" value="{{ return_to }}" />
<button type="submit" class="day-status-badge is-holiday" title="Feiertag entfernen" aria-label="Feiertag entfernen">F</button>
</form>
{% elif kind == 'sick' %}
<form method="post"
action="/special-day/toggle"
class="inline-form"
data-async-refresh="view">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}" />
<input type="hidden" name="date" value="{{ day.date.isoformat() }}" />
<input type="hidden" name="status" value="sick" />
<input type="hidden" name="return_to" value="{{ return_to }}" />
<button type="submit" class="day-status-badge is-sick" title="Krankheitstag entfernen" aria-label="Krankheitstag entfernen">K</button>
</form>
{% elif kind == 'overtime' %}
<form method="post" action="/overtime-adjustment/clear" class="inline-form">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}" />
<input type="hidden" name="date" value="{{ day.date.isoformat() }}" />
<input type="hidden" name="return_to" value="{{ return_to }}" />
<button type="submit" class="day-status-badge is-overtime" title="Stundenausgleich entfernen" aria-label="Stundenausgleich entfernen">S</button>
</form>
{% endif %}
{%- endmacro %}
{% macro add_menu_status_form(action_url, csrf_token, day, return_to, label, status='') -%}
<form method="post"
action="{{ action_url }}"
class="inline-form"
data-async-refresh="view">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}" />
<input type="hidden" name="date" value="{{ day.date.isoformat() }}" />
<input type="hidden" name="return_to" value="{{ return_to }}" />
{% if status %}<input type="hidden" name="status" value="{{ status }}" />{% endif %}
<button type="submit" class="day-row__add-menu-item">{{ label }}</button>
</form>
{%- endmacro %}
{% macro day_row(day, csrf_token, date_label, return_to='/dashboard', mode='week') -%}
{% set is_vacation = day.is_vacation if day.is_vacation is defined else false %}
{% set special_status = day.special_status if day.special_status is defined else None %}
{% set overtime_adjustment_minutes = day.overtime_adjustment_minutes if day.overtime_adjustment_minutes is defined else 0 %}
{% set has_status = is_vacation or special_status in ['holiday', 'sick'] or overtime_adjustment_minutes %}
{% set is_weekend = day.is_weekend if day.is_weekend is defined else day.date.weekday() >= 5 %}
{% set is_today = today_date is defined and day.date == today_date %}
{% set status_edit_url = None %}
{% if overtime_adjustment_minutes %}
{% set status_edit_url = '/overtime-adjustment/edit?date=' ~ day.date.isoformat() %}
{% elif is_vacation %}
{% set status_edit_url = '/day-status/edit?date=' ~ day.date.isoformat() ~ '&status=vacation' %}
{% elif special_status == 'holiday' %}
{% set status_edit_url = '/day-status/edit?date=' ~ day.date.isoformat() ~ '&status=holiday' %}
{% elif special_status == 'sick' %}
{% set status_edit_url = '/day-status/edit?date=' ~ day.date.isoformat() ~ '&status=sick' %}
{% endif %}
<article class="day-row day-row--{{ mode }} {% if is_weekend %}day-row--weekend{% endif %} {% if is_today %}day-row--today{% endif %} {% if has_status %}day-row--has-status{% endif %}">
<div class="day-row__label" title="{{ date_label }}">{{ date_label }}</div>
<div class="day-row__cells {% if not day.entry %}day-row__cells--empty{% endif %}">
{% if day.entry %}
{{ chip(minutes_to_hhmm(day.entry.start_minutes) ~ ' → ' ~ minutes_to_hhmm(day.entry.end_minutes), 'time') }}
{{ chip('Pause: ' ~ day.entry.break_minutes ~ ' min', 'break') }}
{{ chip('Netto: ' ~ minutes_to_hhmm(day.net_minutes), 'net') }}
{% else %}
{{ chip('Keinen Eintrag', 'empty') }}
{% endif %}
</div>
<div class="day-row__actions">
{% if is_vacation %}{{ status_badge_form(csrf_token, day, return_to, 'vacation') }}{% endif %}
{% if special_status == 'holiday' %}{{ status_badge_form(csrf_token, day, return_to, 'holiday') }}{% endif %}
{% if special_status == 'sick' %}{{ status_badge_form(csrf_token, day, return_to, 'sick') }}{% endif %}
{% if overtime_adjustment_minutes %}{{ status_badge_form(csrf_token, day, return_to, 'overtime') }}{% endif %}
{% if day.entry %}
<a class="icon-button" href="/entry/{{ day.entry.id }}/edit" title="Eintrag bearbeiten" aria-label="Eintrag bearbeiten">
<img class="dash-icon" src="/static/icons/edit.svg" alt="" />
</a>
<form method="post" action="/entry/{{ day.entry.id }}/delete" class="inline-form">
<input type="hidden" name="csrf_token" value="{{ csrf_token }}" />
<button type="submit" class="icon-button" title="Eintrag löschen" aria-label="Eintrag löschen">
<img class="dash-icon" src="/static/icons/delete.svg" alt="" />
</button>
</form>
{% else %}
{% if has_status and status_edit_url %}
<a class="icon-button" href="{{ status_edit_url }}" title="Tag bearbeiten" aria-label="Tag bearbeiten">
<img class="dash-icon" src="/static/icons/edit.svg" alt="" />
</a>
{% endif %}
<details class="day-row__add-menu">
<summary class="icon-button" title="Optionen hinzufügen" aria-label="Optionen hinzufügen">
<img class="dash-icon" src="/static/icons/add.svg" alt="" />
</summary>
<div class="day-row__add-menu-panel">
<a class="day-row__add-menu-item" href="/entry/new?date={{ day.date.isoformat() }}">Zeit</a>
{{ add_menu_status_form('/vacation/day/toggle', csrf_token, day, return_to, 'Urlaub (U)') }}
{{ add_menu_status_form('/special-day/toggle', csrf_token, day, return_to, 'Feiertag (F)', 'holiday') }}
{{ add_menu_status_form('/special-day/toggle', csrf_token, day, return_to, 'Krankheit (K)', 'sick') }}
<a class="day-row__add-menu-item" href="/overtime-adjustment/edit?date={{ day.date.isoformat() }}">Stundenausgleich (S)</a>
</div>
</details>
{% endif %}
</div>
</article>
{%- endmacro %}