- 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>
133 lines
4.4 KiB
Python
133 lines
4.4 KiB
Python
# Phase 4: Generalize EmailEingang + Rechnungsworkflow
|
|
# - Rename DestinataerEmailEingang → EmailEingang
|
|
# - Add kategorie, verwaltungskosten FK, land FK, verpachtung FK
|
|
# - Expand status choices (rechnung_erfasst, zahlung_gebucht)
|
|
# - Add verwaltungskosten FK to DokumentDatei
|
|
|
|
from django.db import migrations, models
|
|
import django.db.models.deletion
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('stiftung', '0049_phase3_email_dms_m2m'),
|
|
]
|
|
|
|
operations = [
|
|
# 1. Rename model (preserves DB table, updates Django state)
|
|
migrations.RenameModel(
|
|
old_name='DestinataerEmailEingang',
|
|
new_name='EmailEingang',
|
|
),
|
|
|
|
# 2. Add kategorie field to EmailEingang
|
|
migrations.AddField(
|
|
model_name='emaileingang',
|
|
name='kategorie',
|
|
field=models.CharField(
|
|
choices=[
|
|
('destinataer', 'Destinataer'),
|
|
('rechnung', 'Rechnung'),
|
|
('land_pacht', 'Grundstueck / Pacht'),
|
|
('allgemein', 'Allgemein'),
|
|
],
|
|
default='allgemein',
|
|
max_length=20,
|
|
verbose_name='Kategorie',
|
|
),
|
|
),
|
|
|
|
# 3. Add verwaltungskosten FK to EmailEingang
|
|
migrations.AddField(
|
|
model_name='emaileingang',
|
|
name='verwaltungskosten',
|
|
field=models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name='email_eingaenge',
|
|
to='stiftung.verwaltungskosten',
|
|
verbose_name='Verwaltungskosten / Rechnung',
|
|
),
|
|
),
|
|
|
|
# 4. Add land FK to EmailEingang
|
|
migrations.AddField(
|
|
model_name='emaileingang',
|
|
name='land',
|
|
field=models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name='email_eingaenge',
|
|
to='stiftung.land',
|
|
verbose_name='Laenderei',
|
|
),
|
|
),
|
|
|
|
# 5. Add verpachtung FK to EmailEingang
|
|
migrations.AddField(
|
|
model_name='emaileingang',
|
|
name='verpachtung',
|
|
field=models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name='email_eingaenge',
|
|
to='stiftung.landverpachtung',
|
|
verbose_name='Verpachtung',
|
|
),
|
|
),
|
|
|
|
# 6. Update status choices on EmailEingang
|
|
migrations.AlterField(
|
|
model_name='emaileingang',
|
|
name='status',
|
|
field=models.CharField(
|
|
choices=[
|
|
('neu', 'Neu / Unbearbeitet'),
|
|
('zugewiesen', 'Destinataer zugewiesen'),
|
|
('verarbeitet', 'Verarbeitet'),
|
|
('rechnung_erfasst', 'Rechnung erfasst'),
|
|
('zahlung_gebucht', 'Zahlung gebucht'),
|
|
('unbekannt', 'Unbekannter Absender'),
|
|
('fehler', 'Fehler bei Verarbeitung'),
|
|
],
|
|
default='neu',
|
|
max_length=20,
|
|
verbose_name='Status',
|
|
),
|
|
),
|
|
|
|
# 7. Update Meta on EmailEingang
|
|
migrations.AlterModelOptions(
|
|
name='emaileingang',
|
|
options={
|
|
'ordering': ['-eingangsdatum'],
|
|
'verbose_name': 'E-Mail-Eingang',
|
|
'verbose_name_plural': 'E-Mail-Eingaenge',
|
|
},
|
|
),
|
|
|
|
# 8. Set kategorie='destinataer' for existing emails that have a destinataer FK
|
|
migrations.RunSQL(
|
|
sql="UPDATE stiftung_emaileingang SET kategorie = 'destinataer' WHERE destinataer_id IS NOT NULL;",
|
|
reverse_sql=migrations.RunSQL.noop,
|
|
),
|
|
|
|
# 9. Add verwaltungskosten FK to DokumentDatei
|
|
migrations.AddField(
|
|
model_name='dokumentdatei',
|
|
name='verwaltungskosten',
|
|
field=models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name='dms_dokumente',
|
|
to='stiftung.verwaltungskosten',
|
|
verbose_name='Verwaltungskosten / Rechnung',
|
|
),
|
|
),
|
|
]
|