feat: add comprehensive GitHub workflow and development tools
This commit is contained in:
384
app/templates/stiftung/land_verpachtung_form.html
Normal file
384
app/templates/stiftung/land_verpachtung_form.html
Normal file
@@ -0,0 +1,384 @@
|
||||
{% 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 %}
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-4 text-end">
|
||||
<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>
|
||||
</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="aktueller_paechter" required>
|
||||
<option value="">Bitte wählen...</option>
|
||||
{% for paechter in paechter_list %}
|
||||
<option value="{{ paechter.pk }}"
|
||||
{% if 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:'' }} {{ 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_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_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_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_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_edit and land.zahlungsweise == 'halbjaehrlich' %}selected{% endif %}>Halbjährlich</option>
|
||||
<option value="vierteljaehrlich" {% if is_edit and land.zahlungsweise == 'vierteljaehrlich' %}selected{% endif %}>Vierteljährlich</option>
|
||||
<option value="monatlich" {% if 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_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_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 %}
|
||||
Reference in New Issue
Block a user