- Move test email form to a standalone card at the top of the page
(was buried at the bottom of SMTP settings)
- Add 'An mich' button that fills in the logged-in user's email
- Send HTML + plain text test email (multi-alternative) styled like
actual Stiftung emails, instead of plain text only
- Include diagnostic info (SMTP server, sender, user) in test email
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix preview bug: preview event handlers were never attached when
Summernote failed to load (fallback returned early at line 240)
- Restructure layout with Bootstrap tabs (Editor | Vorschau) instead
of stacked editor+hidden preview
- Preview loads automatically when switching to the Vorschau tab
- Editor content getter works in all modes (Summernote, code, fallback)
- Editor now uses full viewport height for more editing space
- Variables sidebar gets 3 cols (was 4) giving editor 9 cols (was 8)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The 'Abgeschlossen' column was redundant after 'Überwiesen' since no further
action occurs after a payment is transferred. The pipeline is now 4 stages:
Offen → Nachweis eingereicht → Freigegeben → Überwiesen.
Existing 'abgeschlossen' records are merged into the 'Überwiesen' column.
Financial reports and queries are unaffected as they already include both statuses.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
These are required for the WYSIWYG template editor to work.
Without them, Summernote doesn't load and the preview button is non-functional.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- veranstaltungen_anzeigen: list events with participant counts
- veranstaltung_teilnehmer_anzeigen: list participants by event
- veranstaltung_teilnehmer_anlegen: add single participant
- veranstaltung_teilnehmer_importieren: bulk import via JSON array
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Save cover email body as DMS document with new 'email' context type
- Show email body separately from attachments in email detail view
- Add per-category DMS document assignment in quarterly confirmation
(Studiennachweis, Einkommenssituation, Vermögenssituation)
- Add VERSION file and context processor for automatic version display
- Add MCP server, agent system, import/export, and new migrations
- Update compose files and production environment template
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Refactors the Berichte section from a single hardcoded Jahresbericht into
a modular report-building system. Jahresbericht now uses PDFGenerator for
corporate identity (logo, colors, headers/footers, cover page). 8 reusable
section templates can be freely combined. 6 predefined report templates
(Jahres-, Destinatär-, Grundstücks-, Finanz-, Förder-, Pachtbericht) with
HTML preview and PDF export. New Bericht-Baukasten UI lets users compose
custom reports from individual sections.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When an ALKIS identifier is set on a Land record, the button links to
ogc-api.nrw.de detail view instead of the imprecise TIM-Online search.
Falls back to TIM-Online when no ALKIS number is present.
Closes STI-57
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Display current branch, local/remote main commit with message
- Warn if local main is ahead of Gitea remote
- Show last 5 commits on main before deploying
- Update server address to deployment@217.154.84.225
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add DokumentDatei, EmailEingang, Verwaltungskosten, and
GeschichteSeite to post-restore verification table checks.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Display linked PDFs/documents in the edit form with download links
- Fix "Details ansehen" button to link to detail page
- Redirect edit save to detail page instead of list
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New detail view at /geschaeftsfuehrung/verwaltungskosten/<pk>/
showing invoice data, status, linked DMS documents, and emails
- Status change form in sidebar for quick workflow updates
- Link Verwaltungskosten list items to detail page
- Update email detail to link to VK detail instead of edit
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- DMS edit view: add Destinatär, Land, Pächter, Verpachtung dropdowns
so documents can be assigned to entities after upload
- Geschichte: add M2M dokumente field on GeschichteSeite model
- Geschichte form: checkboxes to select/link Stiftungsgeschichte docs
- Geschichte detail: show linked documents in sidebar with download
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rename DestinataerEmailEingang → EmailEingang with category support
(destinataer, rechnung, land_pacht, stiftungsgeschichte, allgemein)
- Add invoice capture workflow: create Verwaltungskosten from email,
link DMS documents as invoice attachments, track payment status
- Add Stiftungsgeschichte email category with auto-detection patterns
(Ahnenforschung, Genealogie, Chronik, etc.) and DMS integration
- Update poll_emails task with category detection and DMS context mapping
- Show available history documents in Geschichte editor sidebar
- Consolidate DMS views, remove legacy dokument templates
- Update all detail/form templates for DMS document linking
- Add deploy.sh script and streamline compose.yml
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- When manually assigning an email to a Destinatär, also update
associated DokumentLink records so attachments appear in the
Destinatär's Dokumente tab
- Add email delete functionality (view, URL, buttons in list and detail)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
User requested the create form to look exactly like the detail page.
Now uses the same two-column table-based card layout with matching
card headers, gradient header bar, and field organization as the
Stammdaten tab on the detail page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace custom CSS (.form-section, gradients, var(--racing-green)) with
standard Bootstrap card-based layout matching the rest of the modernized UI:
dark card headers, responsive grid rows, consistent shadow-sm styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Paperless-ngx post_document returns a task UUID string, not a document
ID directly. The code assumed it was a dict and called .get() on a
string, causing AttributeError. Now polls the task status endpoint to
retrieve the actual integer document ID.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add 120s IMAP socket timeout (was unlimited, could hang on large emails)
- Increase Paperless upload timeout from 60s to 300s for large attachments
- Increase manual poll UI timeout from 60s to 300s
- Show error count in UI when emails fail to process
- Log warning when attachment payload is empty/corrupted
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Email settings page at /administration/email/ with IMAP config form
- Connection test button to verify IMAP connectivity
- Sidebar link "E-Mail Eingang" for quick access
- AppConfiguration model extended with email category and password type
- init_config command includes IMAP default settings
- DB-based IMAP config with env var fallback
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The manual "Jetzt abrufen" button now runs synchronously and searches all
emails from the last 30 days instead of only unread ones. This fixes the
issue where already-read emails in IMAP were invisible to the poll task.
Duplicate detection (by sender+date+subject) prevents re-imports.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaces the old multi-card layout (1368 lines) with a compact, modern
tabbed interface (Stammdaten | Nachweise | Zahlungen | Timeline | Dokumente | Notizen).
All information is now accessible from one page without excessive clicking.
- Add timeline events to destinataer_detail view (merged from timeline view logic)
- Compact profile header with avatar initials, status badges, key contact info
- Inline editing preserved with table-based layout for cleaner data display
- Tab state persisted in URL hash for bookmarkable deep links
- Dropdown menu for less-used actions (export, archive, delete)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The redirect() calls in email_eingang_poll_trigger and email_eingang_detail
were missing the 'stiftung:' namespace prefix, causing NoReverseMatch errors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add migrate_to_landverpachtung management command that converts
old Land-level pacht fields (aktueller_paechter, pachtbeginn, etc.)
into proper LandVerpachtung records
- Fix SyntaxError in system.py (fancy Unicode quotes in f-strings)
- Ran migration: 1 LandVerpachtung record created for Jens Bodden
The old system stored pacht data directly on the Land model.
The new LandVerpachtung model supports multiple leases per Land.
The verpachtung_list view queries LandVerpachtung, which was empty.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Make Destinatär names clickable in list view (link to detail page)
- Nachweis-Board: auto-create missing VierteljahresNachweis records
for active Destinatäre when viewing a year (fixes missing Q1 2026)
- Add archive/deactivate toggle for Destinatäre (button on detail page)
with AuditLog entry and confirmation dialog
- Default Destinatär list to show active only (filter preset to "Aktiv")
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The Paechter model's reverse relation from LandVerpachtung uses
related_name='neue_verpachtungen', not the default 'landverpachtung'.
Fixed the annotate() query in top_paechter section of paechter_workflow view.
The Land model's ForeignKey from LandAbrechnung uses related_name='abrechnungen',
not the default 'landabrechnung'. Fixed the exclude() query in paechter_workflow view.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The nachweis_board.html template used a get_item filter that was never
defined. Added it to help_tags.py and loaded the tag library in the template.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Alle bestehenden, nicht commiteten Änderungen als Ausgangsbasis für den
vision-2026 Branch übernommen (Veranstaltungsmodul, Serienbrief, etc.).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Neues System zur automatischen Verarbeitung eingehender E-Mails von
Destinatären. IMAP-Polling alle 15 Minuten via Celery Beat, automatische
Zuordnung zu Destinatären anhand der E-Mail-Adresse, Upload von Anhängen
zu Paperless-NGX.
Umfasst:
- DestinataerEmailEingang Model mit Status-Tracking
- Celery Task für IMAP-Polling und Paperless-Integration
- Web-UI (Liste + Detail) mit Such- und Filterfunktion
- Admin-Interface mit Bulk-Actions
- Agent-Dokumentation (SysAdmin, RentmeisterAI)
- Dev-Environment Modernisierung (docker compose v2)
Reviewed by: SysAdmin (STI-15), RentmeisterAI (STI-16)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Gramps Web service to both development and production compose files
- Configure Django-Gramps API integration environment variables
- Update production environment template with Gramps configuration
- Enable genealogy features for foundation family tree management
- Gramps Web will be accessible at /ahnenforschung in production
- Add @login_required decorator to home view function
- Ensures all views now require user authentication
- Prevents unauthorized access to homepage and dashboard
- Part of comprehensive authentication security implementation