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,360 @@
{% extends 'base.html' %}
{% load static %}
{% block title %}{{ abrechnung }} - Stiftungsverwaltung{% endblock %}
{% block content %}
<!-- Header -->
<div class="row mb-4">
<div class="col-md-8">
<h1 class="h3">
<i class="fas fa-calculator text-success me-2"></i>
Landabrechnung {{ abrechnung.abrechnungsjahr }}
</h1>
<p class="text-muted">
<a href="{% url 'stiftung:land_detail' land.pk %}">{{ land }}</a>
{% if land.aktueller_paechter %} | Pächter: {{ land.aktueller_paechter.get_full_name }}{% endif %}
</p>
</div>
<div class="col-md-4 text-end">
<div class="btn-group" role="group">
<a href="{% url 'stiftung:land_abrechnung_update' abrechnung.pk %}" class="btn btn-warning">
<i class="fas fa-edit me-2"></i>Bearbeiten
</a>
<a href="{% url 'stiftung:land_abrechnung_delete' abrechnung.pk %}" class="btn btn-danger"
onclick="return confirm('Sind Sie sicher, dass Sie diese Abrechnung löschen möchten?')">
<i class="fas fa-trash me-2"></i>Löschen
</a>
</div>
<div class="mt-2">
<a href="{% url 'stiftung:land_abrechnung_list' %}" class="btn btn-outline-secondary btn-sm">
<i class="fas fa-arrow-left me-2"></i>Zurück zur Liste
</a>
</div>
</div>
</div>
<!-- Ergebnis-Übersicht -->
<div class="row mb-4">
<div class="col-md-3">
<div class="card border-left-success shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-success text-uppercase mb-1">
Einnahmen gesamt
</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
€{{ abrechnung.einnahmen_gesamt|floatformat:2 }}
</div>
</div>
<div class="col-auto">
<i class="fas fa-arrow-up fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card border-left-danger shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-danger text-uppercase mb-1">
Ausgaben gesamt
</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
€{{ abrechnung.ausgaben_gesamt|floatformat:2 }}
</div>
</div>
<div class="col-auto">
<i class="fas fa-arrow-down fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card border-left-{% if abrechnung.nettoergebnis >= 0 %}success{% else %}danger{% endif %} shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-{% if abrechnung.nettoergebnis >= 0 %}success{% else %}danger{% endif %} text-uppercase mb-1">
Nettoergebnis
</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
€{{ abrechnung.nettoergebnis|floatformat:2 }}
</div>
</div>
<div class="col-auto">
<i class="fas fa-{% if abrechnung.nettoergebnis >= 0 %}plus{% else %}minus{% endif %} fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card border-left-info shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-info text-uppercase mb-1">
USt-Zahllast
</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">
€{{ abrechnung.ust_pacht_betrag|floatformat:2 }}
</div>
</div>
<div class="col-auto">
<i class="fas fa-percentage fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<!-- Left Column - Einnahmen & Ausgaben -->
<div class="col-lg-8">
<!-- Einnahmen -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-success">
<i class="fas fa-arrow-up me-2"></i>Einnahmen {{ abrechnung.abrechnungsjahr }}
</h6>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<table class="table table-borderless">
<tr>
<td><strong>Pacht vereinnahmt:</strong></td>
<td class="text-end">€{{ abrechnung.pacht_vereinnahmt|floatformat:2 }}</td>
</tr>
<tr>
<td><strong>Umlagen vereinnahmt:</strong></td>
<td class="text-end">€{{ abrechnung.umlagen_vereinnahmt|floatformat:2 }}</td>
</tr>
<tr>
<td><strong>Sonstige Einnahmen:</strong></td>
<td class="text-end">€{{ abrechnung.sonstige_einnahmen|floatformat:2 }}</td>
</tr>
<tr class="border-top">
<td><strong>Gesamt (netto):</strong></td>
<td class="text-end"><strong class="text-success">€{{ abrechnung.einnahmen_gesamt|floatformat:2 }}</strong></td>
</tr>
</table>
</div>
<div class="col-md-6">
{% if land.ust_option %}
<table class="table table-borderless">
<tr>
<td><strong>USt-Satz:</strong></td>
<td class="text-end">{{ land.ust_satz|floatformat:1 }}%</td>
</tr>
<tr>
<td><strong>USt auf Pacht:</strong></td>
<td class="text-end">€{{ abrechnung.ust_pacht_betrag|floatformat:2 }}</td>
</tr>
<tr class="border-top">
<td><strong>Brutto-Einnahmen:</strong></td>
<td class="text-end"><strong>€{{ abrechnung.einnahmen_gesamt|add:abrechnung.ust_pacht_betrag|floatformat:2 }}</strong></td>
</tr>
</table>
{% else %}
<div class="text-center text-muted">
<i class="fas fa-info-circle fa-2x mb-2"></i>
<p>Keine USt-Option gewählt</p>
</div>
{% endif %}
</div>
</div>
</div>
</div>
<!-- Ausgaben -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-danger">
<i class="fas fa-arrow-down me-2"></i>Ausgaben {{ abrechnung.abrechnungsjahr }}
</h6>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<table class="table table-borderless">
<tr>
<td><strong>Grundsteuer:</strong></td>
<td class="text-end">€{{ abrechnung.grundsteuer_betrag|floatformat:2 }}</td>
</tr>
{% if abrechnung.grundsteuer_bescheid_nr %}
<tr>
<td colspan="2"><small class="text-muted">Bescheid: {{ abrechnung.grundsteuer_bescheid_nr }}</small></td>
</tr>
{% endif %}
<tr>
<td><strong>Versicherungen:</strong></td>
<td class="text-end">€{{ abrechnung.versicherungen_betrag|floatformat:2 }}</td>
</tr>
<tr>
<td><strong>Verbandsbeiträge:</strong></td>
<td class="text-end">€{{ abrechnung.verbandsbeitraege_betrag|floatformat:2 }}</td>
</tr>
<tr>
<td><strong>Sonstige Abgaben:</strong></td>
<td class="text-end">€{{ abrechnung.sonstige_abgaben_betrag|floatformat:2 }}</td>
</tr>
</table>
</div>
<div class="col-md-6">
<table class="table table-borderless">
<tr>
<td><strong>Instandhaltung:</strong></td>
<td class="text-end">€{{ abrechnung.instandhaltung_betrag|floatformat:2 }}</td>
</tr>
<tr>
<td><strong>Verwaltung/Recht:</strong></td>
<td class="text-end">€{{ abrechnung.verwaltung_recht_betrag|floatformat:2 }}</td>
</tr>
<tr>
<td><strong>Vorsteuer:</strong></td>
<td class="text-end">€{{ abrechnung.vorsteuer_aus_umlagen|floatformat:2 }}</td>
</tr>
<tr class="border-top">
<td><strong>Gesamt:</strong></td>
<td class="text-end"><strong class="text-danger">€{{ abrechnung.ausgaben_gesamt|floatformat:2 }}</strong></td>
</tr>
</table>
</div>
</div>
</div>
</div>
<!-- Bemerkungen -->
{% if abrechnung.bemerkungen %}
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<i class="fas fa-sticky-note me-2"></i>Bemerkungen
</h6>
</div>
<div class="card-body">
<p class="mb-0">{{ abrechnung.bemerkungen|linebreaks }}</p>
</div>
</div>
{% endif %}
</div>
<!-- Right Column - Info & Dokumente -->
<div class="col-lg-4">
<!-- Länderei-Info -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<i class="fas fa-map me-2"></i>Länderei-Details
</h6>
</div>
<div class="card-body">
<table class="table table-sm table-borderless">
<tr>
<td><strong>Gesamtgröße:</strong></td>
<td>{{ land.groesse_qm|floatformat:0 }} qm<br><small>({{ land.groesse_hektar|floatformat:2 }} ha)</small></td>
</tr>
{% if land.pachtzins_pauschal %}
<tr>
<td><strong>Pachtzins/Jahr:</strong></td>
<td>€{{ land.pachtzins_pauschal|floatformat:2 }}</td>
</tr>
{% endif %}
<tr>
<td><strong>Zahlungsweise:</strong></td>
<td>{{ land.get_zahlungsweise_display }}</td>
</tr>
</table>
</div>
</div>
<!-- Verknüpfte Dokumente (Paperless) -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<i class="fas fa-link me-2"></i>Verknüpfte Dokumente
</h6>
</div>
<div class="card-body">
{% if land.dokumentlink_set.all %}
{% for dokument in land.dokumentlink_set.all %}
<div class="border rounded p-2 mb-2">
<div class="d-flex justify-content-between align-items-center">
<div>
<strong>{{ dokument.titel }}</strong>
<br><small class="text-muted">{{ dokument.get_kontext_display }}</small>
</div>
<a href="{{ dokument.get_paperless_url }}" target="_blank" class="btn btn-sm btn-outline-primary">
<i class="fas fa-external-link-alt"></i>
</a>
</div>
</div>
{% endfor %}
{% else %}
<p class="text-muted text-center mb-3">Keine Dokumente verknüpft</p>
{% endif %}
<div class="d-grid gap-2">
<a href="{% url 'stiftung:dokument_management' %}" class="btn btn-outline-primary btn-sm">
<i class="fas fa-link me-2"></i>Dokumente verknüpfen
</a>
<a href="mailto:paperless@vhtv-stiftung.de?subject=Dokumente für {{ land }}" class="btn btn-outline-info btn-sm">
<i class="fas fa-envelope me-2"></i>E-Mail an Paperless
</a>
</div>
</div>
</div>
<!-- Offene Posten -->
{% if abrechnung.offene_posten != 0 %}
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-warning">
<i class="fas fa-exclamation-triangle me-2"></i>Offene Posten
</h6>
</div>
<div class="card-body">
<div class="text-center">
<h4 class="text-warning">€{{ abrechnung.offene_posten|floatformat:2 }}</h4>
<p class="text-muted">Noch nicht bezahlte Pacht/Umlagen</p>
</div>
</div>
</div>
{% endif %}
<!-- System Information -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<i class="fas fa-cog me-2"></i>Systeminformationen
</h6>
</div>
<div class="card-body">
<table class="table table-sm table-borderless">
<tr>
<td><small class="text-muted">Erstellt:</small></td>
<td><small class="text-muted">{{ abrechnung.erstellt_am|date:"d.m.Y H:i" }}</small></td>
</tr>
<tr>
<td><small class="text-muted">Aktualisiert:</small></td>
<td><small class="text-muted">{{ abrechnung.aktualisiert_am|date:"d.m.Y H:i" }}</small></td>
</tr>
<tr>
<td><small class="text-muted">ID:</small></td>
<td><small class="text-muted font-monospace">{{ abrechnung.id }}</small></td>
</tr>
</table>
</div>
</div>
</div>
</div>
{% endblock %}