feat: add comprehensive GitHub workflow and development tools

This commit is contained in:
Stiftung Development
2025-09-06 18:31:54 +02:00
commit ab23d7187e
10224 changed files with 2075210 additions and 0 deletions

View File

@@ -0,0 +1,227 @@
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Stiftung Jahresbericht {{ jahr }}</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
margin: 0;
padding: 20px;
color: #333;
}
.header {
text-align: center;
border-bottom: 3px solid #2c3e50;
padding-bottom: 20px;
margin-bottom: 30px;
}
.header h1 {
color: #2c3e50;
margin: 0;
font-size: 2.5em;
}
.header .subtitle {
color: #7f8c8d;
font-size: 1.2em;
margin-top: 10px;
}
.section {
margin-bottom: 30px;
page-break-inside: avoid;
}
.section h2 {
color: #34495e;
border-bottom: 2px solid #3498db;
padding-bottom: 10px;
margin-bottom: 20px;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-bottom: 20px;
}
.stat-card {
background: #f8f9fa;
border: 1px solid #dee2e6;
border-radius: 8px;
padding: 20px;
text-align: center;
}
.stat-card .value {
font-size: 2em;
font-weight: bold;
color: #2c3e50;
}
.stat-card .label {
color: #7f8c8d;
margin-top: 5px;
}
table {
border-collapse: collapse;
width: 100%;
margin-bottom: 20px;
}
th, td {
border: 1px solid #dee2e6;
padding: 12px;
text-align: left;
}
th {
background-color: #f8f9fa;
font-weight: 600;
color: #2c3e50;
}
tr:nth-child(even) {
background-color: #f8f9fa;
}
.amount {
text-align: right;
font-family: 'Courier New', monospace;
}
.status-badge {
padding: 4px 8px;
border-radius: 4px;
font-size: 0.9em;
font-weight: 500;
}
.status-beantragt { background-color: #fff3cd; color: #856404; }
.status-genehmigt { background-color: #d1ecf1; color: #0c5460; }
.status-ausgezahlt { background-color: #d4edda; color: #155724; }
.status-abgelehnt { background-color: #f8d7da; color: #721c24; }
.status-storniert { background-color: #e2e3e5; color: #383d41; }
.footer {
margin-top: 40px;
padding-top: 20px;
border-top: 1px solid #dee2e6;
text-align: center;
color: #7f8c8d;
font-size: 0.9em;
}
@media print {
body { margin: 0; padding: 15px; }
.section { page-break-inside: avoid; }
}
</style>
</head>
<body>
<div class="header">
<h1>Stiftung Jahresbericht {{ jahr }}</h1>
<div class="subtitle">Jahresübersicht über Förderungen und Verpachtungen</div>
<div class="subtitle">Erstellt am {{ "now"|date:"d.m.Y" }}</div>
</div>
<!-- Executive Summary -->
<div class="section">
<h2>Zusammenfassung</h2>
<div class="stats-grid">
<div class="stat-card">
<div class="value">€{{ total_foerderungen|floatformat:2 }}</div>
<div class="label">Gesamtförderungen</div>
</div>
<div class="stat-card">
<div class="value">€{{ total_pachtzins|floatformat:2 }}</div>
<div class="label">Gesamtpachtzins</div>
</div>
<div class="stat-card">
<div class="value">{{ foerderungen.count }}</div>
<div class="label">Förderungen</div>
</div>
<div class="stat-card">
<div class="value">{{ verpachtungen.count }}</div>
<div class="label">Aktive Verpachtungen</div>
</div>
</div>
</div>
<!-- Förderungen Section -->
{% if foerderungen %}
<div class="section">
<h2>Förderungen im Jahr {{ jahr }}</h2>
<table>
<thead>
<tr>
<th>Begünstigter</th>
<th>Kategorie</th>
<th>Betrag</th>
<th>Status</th>
<th>Antragsdatum</th>
</tr>
</thead>
<tbody>
{% for foerderung in foerderungen %}
<tr>
<td>{{ foerderung.person.get_full_name }}</td>
<td>{{ foerderung.get_kategorie_display }}</td>
<td class="amount">€{{ foerderung.betrag|floatformat:2 }}</td>
<td>
<span class="status-badge status-{{ foerderung.status }}">
{{ foerderung.get_status_display }}
</span>
</td>
<td>{{ foerderung.antragsdatum|date:"d.m.Y" }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
<!-- Verpachtungen Section -->
{% if verpachtungen %}
<div class="section">
<h2>Aktive Verpachtungen im Jahr {{ jahr }}</h2>
<table>
<thead>
<tr>
<th>Länderei</th>
<th>Pächter</th>
<th>Vertragsnummer</th>
<th>Verpachtete Fläche</th>
<th>Jährlicher Pachtzins</th>
<th>Pachtende</th>
</tr>
</thead>
<tbody>
{% for verpachtung in verpachtungen %}
<tr>
<td>{{ verpachtung.land }}</td>
<td>{{ verpachtung.paechter.get_full_name }}</td>
<td>{{ verpachtung.vertragsnummer }}</td>
<td>{{ verpachtung.verpachtete_flaeche|floatformat:2 }} qm</td>
<td class="amount">€{{ verpachtung.pachtzins_jaehrlich|floatformat:2 }}</td>
<td>{{ verpachtung.pachtende|date:"d.m.Y" }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}
<!-- Financial Summary -->
<div class="section">
<h2>Finanzielle Übersicht</h2>
<div class="stats-grid">
<div class="stat-card">
<div class="value">€{{ total_foerderungen|floatformat:2 }}</div>
<div class="label">Ausgaben (Förderungen)</div>
</div>
<div class="stat-card">
<div class="value">€{{ total_pachtzins|floatformat:2 }}</div>
<div class="label">Einnahmen (Pachtzins)</div>
</div>
<div class="stat-card">
<div class="value">€{{ total_pachtzins|add:total_foerderungen|floatformat:2 }}</div>
<div class="label">Netto-Position</div>
</div>
</div>
</div>
<div class="footer">
<p>Dieser Bericht wurde automatisch generiert von der Stiftungsverwaltung.</p>
<p>Bei Fragen wenden Sie sich bitte an die Verwaltung.</p>
</div>
</body>
</html>