M1: Grundgerüst, Datenmodell und Admin

Django-5.2-Projekt mit uv, django-environ und Docker-Compose-Setup
(web + Postgres, WeasyPrint-Systembibliotheken im Image). Vollständiges
Datenmodell (Firma, Therapeut, Auftraggeber, Teilnehmer, Leistungsart,
Leistung, InvoiceLog, InvoiceCounter) mit Admin, Login-Flow und
Platzhalter-Dashboard. Fortschritt in FORTSCHRITT.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yy3uodsai6Ytt3GJ7tBdz
This commit is contained in:
Claude
2026-07-10 23:53:56 +00:00
parent 7b60be2933
commit cfa2266dd9
31 changed files with 2044 additions and 0 deletions

53
templates/base.html Normal file
View File

@@ -0,0 +1,53 @@
{% load static %}
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}Abrechnungssystem{% endblock %}</title>
<style>
:root { --bg:#f6f7f9; --fg:#1c2430; --brand:#2b5c8a; --border:#d9dde3; }
* { box-sizing: border-box; }
body { margin:0; font-family: system-ui, sans-serif; color:var(--fg); background:var(--bg); }
header.app { background:var(--brand); color:#fff; padding:.6rem 1.2rem; display:flex; align-items:center; gap:1.2rem; }
header.app a { color:#fff; text-decoration:none; }
header.app nav { display:flex; gap:1rem; margin-left:auto; font-size:.95rem; }
main { max-width:1100px; margin:1.4rem auto; padding:0 1.2rem; }
.card { background:#fff; border:1px solid var(--border); border-radius:8px; padding:1.2rem 1.4rem; }
.messages { list-style:none; padding:0; margin:0 0 1rem; }
.messages li { padding:.6rem 1rem; border-radius:6px; margin-bottom:.5rem; }
.messages li.success { background:#e5f4ea; color:#1c5b34; }
.messages li.error { background:#fbe6e6; color:#7a1f1f; }
.messages li.warning { background:#fdf3e0; color:#7a5a1f; }
.messages li.info { background:#e7eefb; color:#22406e; }
</style>
{% block extrahead %}{% endblock %}
</head>
<body>
<header class="app">
<a href="{% url 'dashboard' %}"><strong>Abrechnungssystem</strong></a>
<nav>
{% if user.is_authenticated %}
<a href="{% url 'dashboard' %}">Dashboard</a>
<a href="{% url 'admin:index' %}">Stammdaten</a>
<form action="{% url 'logout' %}" method="post" style="display:inline">
{% csrf_token %}
<button type="submit" style="background:none;border:none;color:#fff;cursor:pointer;font:inherit;">Abmelden</button>
</form>
{% else %}
<a href="{% url 'login' %}">Anmelden</a>
{% endif %}
</nav>
</header>
<main>
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li class="{{ message.tags }}">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% block content %}{% endblock %}
</main>
</body>
</html>