fix: configure CI database connection properly
- 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
This commit is contained in:
16
app/stiftung/migrations/0023_remove_legacy_verpachtung.py
Normal file
16
app/stiftung/migrations/0023_remove_legacy_verpachtung.py
Normal file
@@ -0,0 +1,16 @@
|
||||
# Generated by Django 5.0.6 on 2025-08-31 20:25
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('stiftung', '0022_dokumentlink_land_verpachtung_id_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='Verpachtung',
|
||||
),
|
||||
]
|
||||
18
app/stiftung/migrations/0024_dokumentlink_abrechnung_id.py
Normal file
18
app/stiftung/migrations/0024_dokumentlink_abrechnung_id.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0.6 on 2025-08-31 21:22
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('stiftung', '0023_remove_legacy_verpachtung'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dokumentlink',
|
||||
name='abrechnung_id',
|
||||
field=models.UUIDField(blank=True, null=True, verbose_name='Abrechnung ID'),
|
||||
),
|
||||
]
|
||||
37
app/stiftung/migrations/0025_appconfiguration.py
Normal file
37
app/stiftung/migrations/0025_appconfiguration.py
Normal file
@@ -0,0 +1,37 @@
|
||||
# Generated by Django 5.0.6 on 2025-08-31 22:08
|
||||
|
||||
import uuid
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('stiftung', '0024_dokumentlink_abrechnung_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AppConfiguration',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||
('key', models.CharField(max_length=100, unique=True, verbose_name='Setting Key')),
|
||||
('display_name', models.CharField(max_length=200, verbose_name='Display Name')),
|
||||
('description', models.TextField(blank=True, null=True, verbose_name='Description')),
|
||||
('value', models.TextField(verbose_name='Value')),
|
||||
('default_value', models.TextField(verbose_name='Default Value')),
|
||||
('setting_type', models.CharField(choices=[('text', 'Text'), ('number', 'Number'), ('boolean', 'Boolean'), ('url', 'URL'), ('tag', 'Tag Name'), ('tag_id', 'Tag ID')], default='text', max_length=20, verbose_name='Type')),
|
||||
('category', models.CharField(choices=[('paperless', 'Paperless Integration'), ('general', 'General Settings'), ('notifications', 'Notifications'), ('system', 'System Settings')], default='general', max_length=50, verbose_name='Category')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Active')),
|
||||
('is_system', models.BooleanField(default=False, verbose_name='System Setting (read-only)')),
|
||||
('order', models.IntegerField(default=0, verbose_name='Display Order')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'App Configuration',
|
||||
'verbose_name_plural': 'App Configurations',
|
||||
'ordering': ['category', 'order', 'display_name'],
|
||||
},
|
||||
),
|
||||
]
|
||||
89
app/stiftung/migrations/0026_enhance_unterstuetzung_model.py
Normal file
89
app/stiftung/migrations/0026_enhance_unterstuetzung_model.py
Normal file
@@ -0,0 +1,89 @@
|
||||
# Generated by Django 5.0.6 on 2025-09-01 20:03
|
||||
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('stiftung', '0025_appconfiguration'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='destinataerunterstuetzung',
|
||||
name='ausgezahlt_am',
|
||||
field=models.DateField(blank=True, null=True, verbose_name='Ausgezahlt am'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='destinataerunterstuetzung',
|
||||
name='ausgezahlt_von',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Ausgezahlt von'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='destinataerunterstuetzung',
|
||||
name='empfaenger_iban',
|
||||
field=models.CharField(blank=True, max_length=34, verbose_name='Empfänger IBAN'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='destinataerunterstuetzung',
|
||||
name='empfaenger_name',
|
||||
field=models.CharField(blank=True, max_length=200, verbose_name='Empfänger Name'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='destinataerunterstuetzung',
|
||||
name='verwendungszweck',
|
||||
field=models.CharField(blank=True, max_length=140, verbose_name='Verwendungszweck'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='destinataerunterstuetzung',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('geplant', 'Geplant'), ('faellig', 'Fällig'), ('in_bearbeitung', 'In Bearbeitung'), ('ausgezahlt', 'Ausgezahlt'), ('storniert', 'Storniert')], default='geplant', max_length=20, verbose_name='Status'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UnterstuetzungWiederkehrend',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||
('betrag', models.DecimalField(decimal_places=2, max_digits=12, verbose_name='Betrag (€)')),
|
||||
('intervall', models.CharField(choices=[('monatlich', 'Monatlich'), ('quartalsweise', 'Vierteljährlich'), ('halbjaehrlich', 'Halbjährlich'), ('jaehrlich', 'Jährlich')], max_length=20, verbose_name='Intervall')),
|
||||
('beschreibung', models.CharField(blank=True, max_length=255, verbose_name='Beschreibung')),
|
||||
('empfaenger_iban', models.CharField(max_length=34, verbose_name='Empfänger IBAN')),
|
||||
('empfaenger_name', models.CharField(max_length=200, verbose_name='Empfänger Name')),
|
||||
('verwendungszweck', models.CharField(blank=True, max_length=140, verbose_name='Verwendungszweck')),
|
||||
('erste_zahlung_am', models.DateField(verbose_name='Erste Zahlung am')),
|
||||
('letzte_zahlung_am', models.DateField(blank=True, null=True, verbose_name='Letzte Zahlung am (optional)')),
|
||||
('naechste_generierung', models.DateField(verbose_name='Nächste Generierung')),
|
||||
('aktiv', models.BooleanField(default=True, verbose_name='Aktiv')),
|
||||
('erstellt_am', models.DateTimeField(auto_now_add=True)),
|
||||
('destinataer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='wiederkehrende_unterstuetzungen', to='stiftung.destinataer', verbose_name='Destinatär')),
|
||||
('erstellt_von', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Erstellt von')),
|
||||
('konto', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='stiftung.stiftungskonto', verbose_name='Zahlungskonto')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Wiederkehrende Unterstützung',
|
||||
'verbose_name_plural': 'Wiederkehrende Unterstützungen',
|
||||
'ordering': ['-erstellt_am'],
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='destinataerunterstuetzung',
|
||||
name='wiederkehrend_von',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='stiftung.unterstuetzungwiederkehrend', verbose_name='Wiederkehrende Zahlung'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='destinataerunterstuetzung',
|
||||
index=models.Index(fields=['wiederkehrend_von'], name='stiftung_de_wiederk_3d5afc_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='unterstuetzungwiederkehrend',
|
||||
index=models.Index(fields=['aktiv', 'naechste_generierung'], name='stiftung_un_aktiv_b957e5_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='unterstuetzungwiederkehrend',
|
||||
index=models.Index(fields=['destinataer', 'aktiv'], name='stiftung_un_destina_2232fc_idx'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,38 @@
|
||||
# Generated by Django 5.0.6 on 2025-09-02 19:56
|
||||
|
||||
import uuid
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('stiftung', '0026_enhance_unterstuetzung_model'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='HelpBox',
|
||||
fields=[
|
||||
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||
('page_key', models.CharField(choices=[('destinataer_new', 'Neuer Destinatär'), ('unterstuetzung_new', 'Neue Unterstützung'), ('foerderung_new', 'Neue Förderung'), ('paechter_new', 'Neuer Pächter'), ('laenderei_new', 'Neue Länderei'), ('verpachtung_new', 'Neue Verpachtung'), ('person_new', 'Neue Person'), ('konto_new', 'Neues Konto')], max_length=50, unique=True, verbose_name='Seite')),
|
||||
('title', models.CharField(max_length=200, verbose_name='Titel der Hilfsbox')),
|
||||
('content', models.TextField(help_text='Sie können Markdown verwenden: **fett**, *kursiv*, `code`, [Link](url), etc.', verbose_name='Inhalt (Markdown unterstützt)')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='Aktiv')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Erstellt am')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Aktualisiert am')),
|
||||
('created_by', models.CharField(blank=True, max_length=100, null=True, verbose_name='Erstellt von')),
|
||||
('updated_by', models.CharField(blank=True, max_length=100, null=True, verbose_name='Aktualisiert von')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Hilfs-Infobox',
|
||||
'verbose_name_plural': 'Hilfs-Infoboxen',
|
||||
'ordering': ['page_key'],
|
||||
},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='appconfiguration',
|
||||
name='category',
|
||||
field=models.CharField(choices=[('paperless', 'Paperless Integration'), ('general', 'General Settings'), ('corporate', 'Corporate Identity'), ('notifications', 'Notifications'), ('system', 'System Settings')], default='general', max_length=50, verbose_name='Category'),
|
||||
),
|
||||
]
|
||||
18
app/stiftung/migrations/0028_alter_helpbox_page_key.py
Normal file
18
app/stiftung/migrations/0028_alter_helpbox_page_key.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.0.6 on 2025-09-02 20:53
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('stiftung', '0027_helpbox_alter_appconfiguration_category'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='helpbox',
|
||||
name='page_key',
|
||||
field=models.CharField(choices=[('destinataer_new', 'Neuer Destinatär'), ('unterstuetzung_new', 'Neue Unterstützung'), ('foerderung_new', 'Neue Förderung'), ('paechter_new', 'Neuer Pächter'), ('laenderei_new', 'Neue Länderei'), ('verpachtung_new', 'Neue Verpachtung'), ('land_abrechnung_new', 'Neue Landabrechnung'), ('person_new', 'Neue Person'), ('konto_new', 'Neues Konto'), ('verwaltungskosten_new', 'Neue Verwaltungskosten'), ('rentmeister_new', 'Neuer Rentmeister'), ('dokument_new', 'Neues Dokument'), ('user_new', 'Neuer Benutzer'), ('csv_import_new', 'CSV Import'), ('destinataer_notiz_new', 'Destinatär Notiz')], max_length=50, unique=True, verbose_name='Seite'),
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user