Enhanced quarterly confirmation system with approval workflow and export improvements

Features added:
-  Fixed quarterly confirmation approval system with URL pattern
-  Added re-approval and status reset functionality for quarterly confirmations
-  Synchronized quarterly approval status with support payment system
-  Enhanced Destinataer export with missing fields (anrede, titel, mobil)
-  Added quarterly confirmation data and documents to export system
-  Fixed address field display issues in destinataer template
-  Added quarterly statistics dashboard to support payment lists
-  Implemented duplicate support payment prevention and cleanup
-  Added visual indicators for quarterly-linked support payments

Technical improvements:
- Enhanced create_quarterly_support_payment() with duplicate detection
- Added get_related_support_payment() method to VierteljahresNachweis model
- Improved quarterly confirmation workflow with proper status transitions
- Added computed address property to Destinataer model
- Fixed template field mismatches (anrede, titel, mobil vs strasse, plz, ort)
- Enhanced backup system with operation tracking and cancellation

Workflow enhancements:
- Quarterly confirmations now properly sync with support payments
- Single support payment per destinataer per quarter (no duplicates)
- Approval button works for both eingereicht and geprueft status
- Reset functionality allows workflow restart
- Export includes complete quarterly data with uploaded documents
This commit is contained in:
2025-09-28 19:09:08 +02:00
parent b00cf62d87
commit acac8695fd
73 changed files with 283380 additions and 206 deletions

View File

@@ -212,6 +212,47 @@
</div>
</div>
<!-- Quarterly Confirmation Statistics -->
<div class="row mb-4">
<div class="col-12">
<div class="card">
<div class="card-header bg-light">
<h6 class="card-title mb-0">
<i class="fas fa-chart-pie me-2"></i>
Vierteljahresnachweis Status Übersicht
</h6>
</div>
<div class="card-body py-2">
<div class="row text-center g-0">
<div class="col-lg-2 col-md-3 col-4 mb-2">
<div class="px-2">
<div class="h5 fw-bold text-primary mb-0">{{ total_quarterly }}</div>
<small class="text-muted">Gesamt</small>
</div>
</div>
{% for status_code, status_data in quarterly_stats.items %}
<div class="col-lg-2 col-md-3 col-4 mb-2">
<div class="px-2">
<div class="h6 fw-bold mb-0
{% if status_code == 'offen' %}text-secondary
{% elif status_code == 'teilweise' %}text-warning
{% elif status_code == 'eingereicht' %}text-info
{% elif status_code == 'geprueft' %}text-success
{% elif status_code == 'nachbesserung' %}text-danger
{% elif status_code == 'abgelehnt' %}text-dark
{% endif %}">
{{ status_data.count }}
</div>
<small class="text-muted">{{ status_data.name }}</small>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
<div class="card shadow">
<div class="card-body">
<div class="table-responsive">
@@ -258,7 +299,12 @@
{{ u.get_status_display }}
</span>
</td>
<td>{{ u.beschreibung }}</td>
<td>
{{ u.beschreibung }}
{% if "Q" in u.beschreibung and "/" in u.beschreibung %}
<i class="fas fa-file-contract text-primary ms-2" title="Verknüpft mit Vierteljahresnachweis" data-bs-toggle="tooltip"></i>
{% endif %}
</td>
<td>
<div class="btn-group btn-group-sm" role="group">
<a href="{% url 'stiftung:unterstuetzung_edit' pk=u.pk %}" class="btn btn-outline-warning"><i class="fas fa-edit"></i></a>
@@ -424,6 +470,12 @@ document.getElementById('exportForm').addEventListener('submit', function(e) {
// Initialize counts on page load
document.addEventListener('DOMContentLoaded', function() {
updateSelectedCount();
// Initialize tooltips for quarterly confirmation indicators
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl);
});
});
</script>