Files
stiftung-management-system/app/templates/stiftung/land_verpachtung_form.html
Stiftung Development 35ba089a84 fix: configure CI database connection properly
- Add dotenv loading to Django settings
- Update CI workflow to use correct environment variables
- Set POSTGRES_* variables instead of DATABASE_URL
- Add environment variables to all Django management commands
- Fixes CI test failures due to database connection issues
2025-09-06 18:47:23 +02:00

393 lines
22 KiB
HTML

{% extends 'base.html' %}
{% load static %}
{% block title %}Verpachtung erstellen - {{ land }} - Stiftungsverwaltung{% endblock %}
{% block content %}
<!-- Header -->
<div class="row mb-4">
<div class="col-md-8">
<h1 class="h3">
<i class="fas fa-handshake text-success me-2"></i>
{% if is_edit %}Verpachtung bearbeiten{% else %}Neue Verpachtung erstellen{% endif %}
</h1>
<p class="text-muted">
Länderei: <a href="{% url 'stiftung:land_detail' land.pk %}">{{ land }}</a>
{% if is_edit and land.aktueller_paechter %} | Aktueller Pächter: {{ land.aktueller_paechter.get_full_name }}{% endif %}
{% if is_update %} | Bearbeitung von {{ landverpachtung.vertragsnummer }}{% endif %}
</p>
</div>
<div class="col-md-4 text-end">
{% if is_update %}
<a href="{% url 'stiftung:land_verpachtung_detail' landverpachtung.pk %}" class="btn btn-outline-secondary">
<i class="fas fa-arrow-left me-2"></i>Zurück zur Verpachtung
</a>
{% else %}
<a href="{% url 'stiftung:land_detail' land.pk %}" class="btn btn-outline-secondary">
<i class="fas fa-arrow-left me-2"></i>Zurück zur Länderei
</a>
{% endif %}
</div>
</div>
<form method="post">
{% csrf_token %}
<div class="row">
<!-- Main Form -->
<div class="col-lg-8">
<div class="card shadow">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<i class="fas fa-user-tie me-2"></i>Verpachtungsdetails
</h6>
</div>
<div class="card-body">
<!-- Pächter und Grunddaten -->
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="aktueller_paechter" class="form-label">Pächter auswählen *</label>
<select class="form-select" id="aktueller_paechter" name="paechter" required>
<option value="">Bitte wählen...</option>
{% for paechter in paechter_list %}
<option value="{{ paechter.pk }}"
{% if is_update and landverpachtung.paechter and paechter.pk == landverpachtung.paechter.pk %}selected
{% elif is_edit and land.aktueller_paechter and paechter.pk == land.aktueller_paechter.pk %}selected{% endif %}
data-name="{{ paechter.get_full_name }}"
data-anschrift="{{ paechter.strasse|default:'' }}&#10;{{ paechter.plz|default:'' }} {{ paechter.ort|default:'' }}">
{{ paechter.get_full_name }}
{% if paechter.ort %} ({{ paechter.ort }}){% endif %}
</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="verpachtete_flaeche" class="form-label">Verpachtete Fläche (qm) *</label>
<input type="number" step="0.01" class="form-control" id="verpachtete_flaeche" name="verpachtete_flaeche"
value="{% if is_update %}{{ landverpachtung.verpachtete_flaeche }}{% elif is_edit %}{{ land.verp_flaeche_aktuell|default:verfuegbare_flaeche }}{% else %}{{ verfuegbare_flaeche|default:land.groesse_qm }}{% endif %}"
max="{{ verfuegbare_flaeche|default:land.groesse_qm }}" required>
<small class="text-muted">Verfügbar: {{ verfuegbare_flaeche|default:land.groesse_qm|floatformat:0 }} qm | Gesamt: {{ land.groesse_qm|floatformat:0 }} qm</small>
</div>
</div>
</div>
<!-- Vertragslaufzeit -->
<div class="row">
<div class="col-md-4">
<div class="mb-3">
<label for="pachtbeginn" class="form-label">Pachtbeginn *</label>
<input type="date" class="form-control" id="pachtbeginn" name="pachtbeginn"
value="{% if is_update %}{{ landverpachtung.pachtbeginn|date:'Y-m-d' }}{% elif is_edit and land.pachtbeginn %}{{ land.pachtbeginn|date:'Y-m-d' }}{% endif %}" required>
</div>
</div>
<div class="col-md-4">
<div class="mb-3">
<label for="pachtende" class="form-label">Pachtende</label>
<input type="date" class="form-control" id="pachtende" name="pachtende"
value="{% if is_update and landverpachtung.pachtende %}{{ landverpachtung.pachtende|date:'Y-m-d' }}{% elif is_edit and land.pachtende %}{{ land.pachtende|date:'Y-m-d' }}{% endif %}">
<small class="text-muted">Leer = unbefristet</small>
</div>
</div>
<div class="col-md-4">
<div class="mb-3">
<div class="form-check mt-4">
<input class="form-check-input" type="checkbox" id="verlaengerung_klausel" name="verlaengerung_klausel"
{% if is_update and landverpachtung.verlaengerung_klausel %}checked{% elif is_edit and land.verlaengerung_klausel %}checked{% endif %}>
<label class="form-check-label" for="verlaengerung_klausel">
Automatische Verlängerung
</label>
</div>
</div>
</div>
</div>
<!-- Verpachtete Fläche -->
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="verpachtete_flaeche" class="form-label">Verpachtete Fläche (qm) *</label>
<input type="number" step="0.01" class="form-control" id="verpachtete_flaeche" name="verpachtete_flaeche"
value="{% if is_edit %}{{ land.verp_flaeche_aktuell|default:land.groesse_qm }}{% else %}{{ land.groesse_qm }}{% endif %}"
max="{{ land.groesse_qm }}" required>
<small class="text-muted">Max. verfügbar: {{ land.groesse_qm|floatformat:2 }} qm</small>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label class="form-label">Verpachtete Fläche in Hektar</label>
<input type="text" class="form-control" id="verpachtete_flaeche_ha" readonly>
<small class="text-muted">Wird automatisch berechnet</small>
</div>
</div>
</div>
<!-- Pachtzins -->
<div class="row">
<div class="col-md-4">
<div class="mb-3">
<label for="pachtzins_pauschal" class="form-label">Pachtzins pauschal/Jahr (€) *</label>
<input type="number" step="0.01" class="form-control" id="pachtzins_pauschal" name="pachtzins_pauschal"
value="{% if is_edit %}{{ land.pachtzins_pauschal|default:'' }}{% endif %}" required>
</div>
</div>
<div class="col-md-4">
<div class="mb-3">
<label for="pachtzins_pro_ha" class="form-label">Pachtzins pro ha (€)</label>
<input type="number" step="0.01" class="form-control" id="pachtzins_pro_ha" name="pachtzins_pro_ha"
value="{% if is_edit %}{{ land.pachtzins_pro_ha|default:'' }}{% endif %}">
<small class="text-muted">Optional für Vergleiche</small>
</div>
</div>
<div class="col-md-4">
<div class="mb-3">
<label for="zahlungsweise" class="form-label">Zahlungsweise</label>
<select class="form-select" id="zahlungsweise" name="zahlungsweise">
<option value="jaehrlich" {% if is_edit and land.zahlungsweise == 'jaehrlich' %}selected{% endif %}>Jährlich</option>
<option value="halbjaehrlich" {% if is_update and landverpachtung.zahlungsweise == 'halbjaehrlich' %}selected{% elif is_edit and land.zahlungsweise == 'halbjaehrlich' %}selected{% endif %}>Halbjährlich</option>
<option value="vierteljaehrlich" {% if is_update and landverpachtung.zahlungsweise == 'vierteljaehrlich' %}selected{% elif is_edit and land.zahlungsweise == 'vierteljaehrlich' %}selected{% endif %}>Vierteljährlich</option>
<option value="monatlich" {% if is_update and landverpachtung.zahlungsweise == 'monatlich' %}selected{% elif is_edit and land.zahlungsweise == 'monatlich' %}selected{% endif %}>Monatlich</option>
</select>
</div>
</div>
</div>
<!-- Umsatzsteuer -->
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="ust_option" name="ust_option"
{% if is_update and landverpachtung.ust_option %}checked{% elif is_edit and land.ust_option %}checked{% endif %}>
<label class="form-check-label" for="ust_option">
<strong>USt-Option</strong> (Pacht mit Umsatzsteuer)
</label>
</div>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="ust_satz" class="form-label">USt-Satz (%)</label>
<input type="number" step="0.01" class="form-control" id="ust_satz" name="ust_satz"
value="{% if is_update %}{{ landverpachtung.ust_satz|default:'19.00' }}{% elif is_edit %}{{ land.ust_satz|default:'19.00' }}{% else %}19.00{% endif %}">
<small class="text-muted">Standard: 19%</small>
</div>
</div>
</div>
</div>
</div>
<!-- Umlagen und Durchreichungen -->
<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-exchange-alt me-2"></i>Umlagen & Durchreichungen
</h6>
</div>
<div class="card-body">
<p class="text-muted mb-3">Welche Kosten werden an den Pächter durchgereicht?</p>
<div class="row">
<div class="col-md-6">
<div class="form-check mb-3">
<input class="form-check-input" type="checkbox" id="grundsteuer_umlage" name="grundsteuer_umlage"
{% if is_edit %}{% if land.grundsteuer_umlage %}checked{% endif %}{% else %}checked{% endif %}>
<label class="form-check-label" for="grundsteuer_umlage">
<strong>Grundsteuer umlagefähig</strong>
<br><small class="text-muted">Grundsteuer wird an Pächter durchgereicht</small>
</label>
</div>
<div class="form-check mb-3">
<input class="form-check-input" type="checkbox" id="versicherungen_umlage" name="versicherungen_umlage"
{% if is_edit %}{% if land.versicherungen_umlage %}checked{% endif %}{% else %}checked{% endif %}>
<label class="form-check-label" for="versicherungen_umlage">
<strong>Versicherungen umlagefähig</strong>
<br><small class="text-muted">Gebäude-/Haftpflichtversicherung</small>
</label>
</div>
</div>
<div class="col-md-6">
<div class="form-check mb-3">
<input class="form-check-input" type="checkbox" id="verbandsbeitraege_umlage" name="verbandsbeitraege_umlage"
{% if is_edit %}{% if land.verbandsbeitraege_umlage %}checked{% endif %}{% else %}checked{% endif %}>
<label class="form-check-label" for="verbandsbeitraege_umlage">
<strong>Verbandsbeiträge umlagefähig</strong>
<br><small class="text-muted">Wasser-/Bodenverbände, Deiche</small>
</label>
</div>
<div class="form-check mb-3">
<input class="form-check-input" type="checkbox" id="jagdpacht_anteil_umlage" name="jagdpacht_anteil_umlage"
{% if is_edit and land.jagdpacht_anteil_umlage %}checked{% endif %}>
<label class="form-check-label" for="jagdpacht_anteil_umlage">
<strong>Jagdpachtanteile umlagefähig</strong>
<br><small class="text-muted">Sofern vertraglich geregelt</small>
</label>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Sidebar Info -->
<div class="col-lg-4">
<div class="card shadow">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">
<i class="fas fa-info-circle me-2"></i>Länderei-Info
</h6>
</div>
<div class="card-body">
<table class="table table-sm table-borderless">
<tr>
<td><strong>Gemeinde:</strong></td>
<td>{{ land.gemeinde }}</td>
</tr>
<tr>
<td><strong>Gemarkung:</strong></td>
<td>{{ land.gemarkung }}</td>
</tr>
<tr>
<td><strong>Flur/Flurstück:</strong></td>
<td>{{ land.flur }}/{{ land.flurstueck }}</td>
</tr>
<tr>
<td><strong>Größe:</strong></td>
<td>{{ land.groesse_qm|floatformat:0 }} qm<br><small>({{ land.groesse_hektar|floatformat:2 }} ha)</small></td>
</tr>
{% if land.adresse %}
<tr>
<td><strong>Adresse:</strong></td>
<td>{{ land.adresse }}</td>
</tr>
{% endif %}
</table>
{% if land.aktueller_paechter %}
<div class="alert alert-warning mt-3">
<strong>Achtung:</strong> Diese Länderei ist bereits an
<strong>{{ land.aktueller_paechter.get_full_name }}</strong> verpachtet!
</div>
{% endif %}
</div>
</div>
<div class="card shadow mt-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-success">
<i class="fas fa-lightbulb me-2"></i>Hinweise
</h6>
</div>
<div class="card-body">
<ul class="list-unstyled mb-0">
<li><i class="fas fa-check text-success me-2"></i>Pächter-Daten werden automatisch übernommen</li>
<li><i class="fas fa-check text-success me-2"></i>Umlagen können später konfiguriert werden</li>
<li><i class="fas fa-check text-success me-2"></i>Jahresabrechnungen können erstellt werden</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Submit Buttons -->
<div class="row mt-4">
<div class="col-12">
<div class="card shadow">
<div class="card-body">
<div class="d-flex justify-content-between">
<a href="{% url 'stiftung:land_detail' land.pk %}" class="btn btn-secondary">
<i class="fas fa-times me-2"></i>Abbrechen
</a>
<button type="submit" class="btn btn-success">
<i class="fas fa-handshake me-2"></i>Verpachtung erstellen
</button>
</div>
</div>
</div>
</div>
</div>
</form>
{% endblock %}
{% block javascript %}
<script>
document.addEventListener('DOMContentLoaded', function() {
// Automatische Berechnung Pachtzins pro ha und Hektar-Anzeige
const pachtzinsPauschal = document.getElementById('pachtzins_pauschal');
const pachtzinsProHa = document.getElementById('pachtzins_pro_ha');
const verpachteteFlaeche = document.getElementById('verpachtete_flaeche');
const verpachteteFlaeheHa = document.getElementById('verpachtete_flaeche_ha');
function berechneHektar() {
const flaeche = parseFloat(verpachteteFlaeche.value) || 0;
const hektar = flaeche / 10000;
verpachteteFlaeheHa.value = hektar.toFixed(4) + ' ha';
}
function berechneProHa() {
const pauschal = parseFloat(pachtzinsPauschal.value) || 0;
const flaeche = parseFloat(verpachteteFlaeche.value) || 0;
if (pauschal > 0 && flaeche > 0) {
const hektar = flaeche / 10000;
const proHa = pauschal / hektar;
pachtzinsProHa.value = proHa.toFixed(2);
}
berechneHektar();
}
function berechnePauschal() {
const proHa = parseFloat(pachtzinsProHa.value) || 0;
const flaeche = parseFloat(verpachteteFlaeche.value) || 0;
if (proHa > 0 && flaeche > 0) {
const hektar = flaeche / 10000;
const pauschal = proHa * hektar;
pachtzinsPauschal.value = pauschal.toFixed(2);
}
}
// Event Listeners
pachtzinsPauschal.addEventListener('input', berechneProHa);
verpachteteFlaeche.addEventListener('input', function() {
berechneHektar();
berechneProHa();
});
pachtzinsProHa.addEventListener('input', berechnePauschal);
// Initiale Berechnung
berechneHektar();
// USt-Satz aktivieren/deaktivieren
const ustOption = document.getElementById('ust_option');
const ustSatz = document.getElementById('ust_satz');
function toggleUstSatz() {
ustSatz.disabled = !ustOption.checked;
if (!ustOption.checked) {
ustSatz.style.opacity = '0.5';
} else {
ustSatz.style.opacity = '1';
}
}
ustOption.addEventListener('change', toggleUstSatz);
toggleUstSatz(); // Initial state
// Pächter-Auswahl: Anschrift automatisch übernehmen
const paechterSelect = document.getElementById('aktueller_paechter');
paechterSelect.addEventListener('change', function() {
const selectedOption = this.options[this.selectedIndex];
if (selectedOption.value) {
// Hier könnten weitere automatische Übernahmen erfolgen
console.log('Pächter gewählt:', selectedOption.dataset.name);
}
});
});
</script>
{% endblock %}