Zum Inhalt

Home-App-Referenz

Die Home-App stellt das Haupt-Dashboard, Progressive Web App (PWA)-Funktionalität, gemeinsame View- und Formular-Mixins, Template-Tags, einen Health-Check-Endpunkt und rechtliche Seiten bereit, die in der gesamten Anwendung verwendet werden.

Übersicht

Speicherort: app/home/

Zweck: Dashboard, PWA-Unterstützung, gemeinsame Mixins, Template-Tags, Health-Check, rechtliche Seiten

URL-Namespace: home:

Abhängigkeiten: hives, breeding, warehouse, organizations, notifications, systemconfig, users, dataexchange


Modelle

Die Home-App hat keine Datenbankmodelle. Sie aggregiert Daten aus anderen Apps.


Dateistruktur

home/
├── views.py               # Dashboard-Views (home, work)
├── views_pwa.py           # PWA-Views (manifest, offline, CSRF)
├── views_health.py        # Health-Check-Endpunkt für Container-Orchestrierung
├── views_legal.py         # Rechtliche Seiten (Cookie-Richtlinie)
├── mixins.py              # Gemeinsame View-Mixins für alle Apps
├── form_mixins.py         # Gemeinsame Formular-Mixins (Datumsbereich-Validierung)
├── urls.py                # URL-Routing + PWA-Routen
├── context_processors.py  # Globaler Template-Kontext (10 Prozessoren)
├── templatetags/
│   ├── icon_tags.py       # Zentralisiertes Entity-Icon-Register
│   ├── status_tags.py     # Status-Badge-Farben
│   └── table_helpers.py   # Sortierbare Tabellenkopf-Tags
├── management/
│   └── commands/
│       └── load_sample_data.py  # Beispieldaten-Lader
├── static/home/
│   ├── main.css           # Haupt-Anwendungsstile
│   ├── sidebar.css        # Seitenleisten-Navigationsstile
│   ├── sidebar.js         # Seitenleisten-Toggle-Logik
│   └── quick_create.js    # Schnellerstellung + Offline-Unterstützung
├── static/vendor/         # Lokal gehostete Drittanbieter-Bibliotheken (DSGVO)
│   ├── bootstrap/         # Bootstrap CSS + JS-Bundle
│   ├── bootstrap-icons/   # Bootstrap Icons Schriftart (CSS + woff/woff2)
│   ├── chart.js/          # Chart.js UMD-Bundle
│   ├── chartjs-adapter-date-fns/  # Chart.js Datums-Adapter
│   ├── leaflet/           # Leaflet Karten (CSS, JS, Marker-Bilder)
│   └── vis-network/       # vis-network Graph-Bibliothek (Standalone UMD)
├── static/pwa/
│   ├── service-worker.js  # Service Worker mit Caching-Strategien
│   ├── pwa-init.js        # PWA-Registrierung & Update-Handling
│   ├── offline-sync.js    # IndexedDB Offline-Warteschlange
│   └── icons/             # PWA-App-Icons (192x192, 512x512)
├── templates/home/
│   ├── base.html          # Haupt-Layout mit PWA-Meta-Tags
│   ├── _sidebar.html      # Seitenleisten-Navigation mit Badge
│   ├── _quick_create_panel.html
│   ├── home.html          # Dashboard-View
│   └── cookie_policy.html # Cookie-Richtlinie-Seite
└── templates/pwa/
    ├── manifest.json      # Dynamisches PWA-Manifest (Django-Template)
    └── offline.html       # Offline-Fallback-Seite

Views

Dashboard-Views

home(request) (views.py)

Haupt-Dashboard-View mit aggregierten Statistiken über alle Benutzerorganisationen.

  • URL: / -- Name: home-home
  • Authentifizierung: Optional (Startseite für anonyme, Dashboard für authentifizierte Benutzer)
  • Template: home/home.html

Kontextdaten (authentifizierte Benutzer):

Variable Typ Beschreibung
total_hives int Bienenstöcke gesamt über alle Organisationen
active_hives int Aktive Bienenstöcke (is_active=True)
hives_needing_inspection int Bienenstöcke ohne Durchsicht in den letzten 7 Tagen
total_honey_harvested Decimal Gesamte Honigernte (kg) dieses Jahr
recent_harvests QuerySet Letzte 5 Ernteeinträge
batches_this_year dict Chargen-Statistiken: total, open_count
jars_in_inventory int Gläser mit Status 'in_inventory'
upcoming_activities list Nächste 5 anstehende Arbeiten (sortiert nach Plandatum)
overdue_activities int Anzahl überfälliger Arbeiten
hives_by_health dict Bienenstockanzahl nach Gesundheitsstatus
health_status_choices QuerySet Konfigurierte Gesundheitsstatus-Optionen
queens_by_health dict Königinnenanzahl nach Gesundheitsstatus
total_queens int Aktive Königinnen gesamt
queens_young int Königinnen unter 1 Jahr
queens_prime int Königinnen 1-2 Jahre
aging_queens int Königinnen älter als 2 Jahre
recent_inspections QuerySet Letzte 5 Durchsichten
active_breeding int Aktive Zuchtprogramme
recent_splits int Völkerteilungen in den letzten 7 Tagen
low_stock_items int Inventarartikel unter Mindestmenge
total_sales Decimal Gesamtverkaufsbetrag dieses Jahr
recent_sales QuerySet Letzte 5 Produktverkäufe
current_year int Aktuelles Jahr

work(request) (views.py)

Arbeits-Dashboard-View. Derzeit ein Platzhalter für Aufgaben-/Projektverwaltung.

  • URL: /work -- Name: home-work

Health-Check-View

health_check(request) (views_health.py)

Einfacher Health-Check-Endpunkt für Container-Orchestrierung (Docker, Kubernetes).

  • URL: /health/ -- Name: health-check
  • Authentifizierung: Nicht erforderlich
  • CSRF: Ausgenommen
  • Antwort: JSON mit Gesundheitsstatus und Datenbankverbindung
  • HTTP-Status: 200 (gesund) oder 503 (nicht gesund)
  • Cache: 10 Sekunden (Cache-Control: public, max-age=10)

Rechtliche Views

cookie_policy(request) (views_legal.py)

Zeigt die Cookie-Richtlinie-Seite für DSGVO-Konformität an.

  • URL: /cookie-policy/ -- Name: cookie-policy
  • Authentifizierung: Nicht erforderlich

PWA-Views

manifest_json(request) (views_pwa.py)

Liefert ein dynamisches PWA-Web-App-Manifest.

  • URL: /pwa/manifest.json -- Name: pwa-manifest
  • Fügt org_colors.primary als theme_color ein
  • Unterstützt i18n (sprachspezifische Beschreibungen)
  • Content-Type: application/manifest+json

offline_view(request) (views_pwa.py)

Offline-Fallback-Seite, wenn der Benutzer keine Netzwerkverbindung hat.

  • URL: /pwa/offline/ -- Name: pwa-offline
  • Listet verfügbare gecachte Seiten
  • Lädt automatisch neu bei Verbindungswiederherstellung

csrf_token_view(request) (views_pwa.py)

Stellt frische CSRF-Tokens für Offline-Formular-Sync bereit.

  • URL: /accounts/csrf/ -- Name: csrf-token
  • Nie gecacht (Cache-Control: no-store)
  • Gibt JSON-Antwort zurück

Gemeinsame View-Mixins

Speicherort: app/home/mixins.py

Diese Mixins werden in allen Apps für konsistente Berechtigungsprüfung und Listen-Funktionalität verwendet.

Berechtigungs-Mixins

Mixin Zweck Verwendet von
OrgCreatePermissionMixin Prüft Org-Level-Erstellungsberechtigung CreateViews
ViewPermissionMixin Prüft Objekt-Level-Ansichtsberechtigung DetailViews
EditPermissionMixin Prüft Objekt-Level-Bearbeitungsberechtigung UpdateViews
DeletePermissionMixin Prüft Objekt-Level-Löschberechtigung DeleteViews
OrgFilterMixin Filtert QuerySet nach Benutzerorganisationen ListViews

Listen-View-Mixins

Mixin Zweck Verwendet von
SortableListMixin Spaltensortierung via GET-Parameter (sort, order) Sortierbare Tabellen
FilterableListMixin Filter-Formular-Unterstützung für ListViews Gefilterte Listen
SortableFilterableListMixin Kombinierte Sortierung + Filterung Listen mit beidem

Gemeinsame Formular-Mixins

Speicherort: app/home/form_mixins.py

Wiederverwendbare Formular-Mixins für gängige Validierungs- und Initialisierungsmuster.

Mixin Zweck Verwendet von
DateRangeValidationMixin Validiert, dass Enddatum nicht vor Startdatum liegt Filterformulare mit Datumsbereichen
DefaultDateRangeMixin Setzt Standard-Startdatum (1 Jahr zurück) und Enddatum (heute) Filterformulare mit Standardwerten
DateRangeFilterMixin Kombinierte Standardwerte + Validierung (empfohlen) Alle Datumsbereich-Filterformulare

Template-Tags

Icon-Tags (templatetags/icon_tags.py)

Zentralisiertes Entity-Icon-Register für konsistente visuelle Sprache.

Tags:

Tag Zweck Verwendung
entity_icon Icon-Klassen-String abrufen {% entity_icon 'hive' %} gibt bi-hexagon zurück
entity_icon_html Vollständiges HTML-Element abrufen {% entity_icon_html 'queen' 'me-1' %}
get_entity_icon_map Vollständige Map für JS/Iteration abrufen {% get_entity_icon_map as icons %}

Icon-Map (vollständig):

Entity Icon
hive bi-hexagon
queen bi-star
breeding_hive bi-hexagon-half
harvest bi-droplet
batch bi-archive
bucket bi-bucket
jar bi-cup
feeding bi-cup-straw
treatment bi-capsule
maintenance bi-tools
inspection bi-clipboard-check
breeding bi-diagram-3
split bi-diagram-2
lineage bi-diagram-3
warehouse bi-box-seam
inventory bi-box-seam
location bi-geo-alt
transaction bi-arrow-left-right
sale bi-currency-dollar
organization bi-building
weight bi-speedometer2
info bi-info-circle
notes bi-journal-text
reports bi-graph-up
dashboard bi-speedometer2
settings bi-gear
system bi-gear

Status-Tags (templatetags/status_tags.py)

Status-Badge-Farben für konsistentes Styling in allen Templates.

Tags:

Tag/Filter Zweck Verwendung
status_color Bootstrap-Farbklasse abrufen {% status_color 'completed' %} gibt success zurück
status_badge Vollständiges HTML-Badge {% status_badge jar.status jar.get_status_display %}
priority_badge Prioritäts-Badge (Komfort-Wrapper) {% priority_badge feeding.priority %}
get_item (Filter) Wörterbuchzugriff mit dynamischem Schlüssel {{ hives_by_health|get_item:choice.value }}

Tabellen-Hilfsfunktionen (templatetags/table_helpers.py)

Tags für sortierbare Tabellenköpfe und Query-String-Verwaltung bei Seitenumbrüchen.

Tags:

Tag/Filter Zweck Verwendung
sortable_header Sortierbares <th> mit Link und Sort-Icon {% sortable_header 'name' 'Item Name' current_sort current_order %}
query_string Query-String unter Beibehaltung von GET-Parametern erstellen {% query_string page=2 %}
table_sort_icon Nur Sort-Icon-Klasse abrufen {% table_sort_icon 'name' current_sort current_order %}
next_sort_order (Filter) Zwischen asc/desc umschalten {{ current_order|next_sort_order }}

Context Processors

Speicherort: app/home/context_processors.py

10 Context Processors, registriert in settings.py. In allen Templates verfügbar:

Variable Beschreibung
DOCS_URL Dokumentations-Link mit Sprachsuffix (/de/ für Deutsch)
user_role Benutzerrolle in aktueller Organisation
user_is_org_manager True wenn Benutzer Besitzer/Admin irgendeiner Organisation ist
user_is_org_owner True wenn Benutzer Besitzer der aktuellen Organisation ist
user_is_org_admin True wenn Benutzer Admin der aktuellen Organisation ist
org_colors Organisations-Farbschema (primär, sekundär)
VERSION Anwendungsversion
allow_self_registration Ob Selbstregistrierung aktiviert ist
disable_standard_login Verbirgt Standard-Anmeldeformular für reine OIDC-Konfigurationen
COOKIE_CONSENT_VERSION Cookie-Zustimmungsversion für DSGVO-Banner
COOKIE_CONSENT_ANALYTICS_ENABLED Ob Analyse-Cookies konfiguriert sind
user_theme_preference Benutzer-Theme: 'light', 'dark' oder 'system'
show_changelog_modal True wenn Benutzer das Changelog der aktuellen Version noch nicht gesehen hat
changelog_version Aktuelle Anwendungsversionszeichenfolge

Verwaltungsbefehle

load_sample_data

Lädt Beispieldaten für Entwicklung und Demonstration.

python manage.py load_sample_data
python manage.py load_sample_data --skip-check

Erstellt 5 Benutzer, 2 Organisationen und umfassende Imkereidaten einschließlich Bienenstöcke, Königinnen, Durchsichten, Ernten, Honigchargen, Zuchteinträge, Inventarartikel, Arbeiten und Benachrichtigungen. Delegiert an dataexchange.services.sample_data_service.


Progressive Web App (PWA)

Service Worker (static/pwa/service-worker.js)

Caching-Strategien:

  • Network-First: HTML-Seiten (3-Sekunden-Timeout, dann Cache-Fallback)
  • Cache-First: Statische Assets (CSS, JS, Bilder, Fonts, CDN-Ressourcen)
  • Network-Only: Admin, Auth, Mutations-Anfragen (POST/PUT/DELETE)

Vor-gecachte Assets: Home-Dashboard, Work-Dashboard, Offline-Seite, Main-CSS, Logo, lokale Vendor-Assets

Message-Handler:

  • ORG_SWITCH: Löscht dynamischen Cache, cacht Seiten für neue Organisation neu
  • LANG_CHANGE: Löscht HTML-Cache zur Aktualisierung der Übersetzungen
  • SKIP_WAITING: Erzwingt sofortige Aktivierung bei Update

Offline-Sync (static/pwa/offline-sync.js)

IndexedDB-Schema:

  • Datenbank: bifolk-offline
  • Store: pending-operations
  • Unterstützte Typen: feeding, treatment, maintenance, inspection, harvest

Sync-Verhalten:

  • Sync bei Seitenladung (wenn online)
  • Sync bei Verbindungswiederherstellung (online-Event)
  • Manueller Sync via Seitenleisten-Schaltfläche
  • Wiederholung mit exponentiellem Backoff (max. 3 Versuche)
  • CSRF-Token Auto-Refresh bei 403-Antwort

Globale API: window.bifolkOfflineSync stellt addOperation(), getPendingOperations(), getPendingCount(), syncPendingOperations() bereit

Quick-Create Offline-Unterstützung (static/home/quick_create.js)

Bei Offline-Zustand zeigt die Arbeitserfassung ein Modal statt weiterzuleiten. Der Benutzer gibt Datum und Notizen ein, und die Arbeit wird in IndexedDB für spätere Synchronisation eingereiht.


Konfiguration

# Umgebungsvariable
PWA_ENABLED=True  # PWA-Funktionalität aktivieren/deaktivieren

Siehe auch