- 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
393 lines
22 KiB
HTML
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:'' }} {{ 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 %}
|