diff --git a/members/admin/union_admin.py b/members/admin/union_admin.py index 85176cd9..35f27ef3 100644 --- a/members/admin/union_admin.py +++ b/members/admin/union_admin.py @@ -99,6 +99,77 @@ class UnionAdmin(admin.ModelAdmin): actions = ["export_csv_union_info"] + def get_fieldsets(self, request, obj=None): + # 20241113: https://stackoverflow.com/questions/16102222/djangoremove-superuser-checkbox-from-django-admin-panel-when-login-staff-users + + if not obj: + return self.add_fieldsets + + info_fields = ( + "bank_main_org", + "bank_account", + "statues", + "founded_at", + "closed_at", + "gl_account", + ) + + if not request.user.has_perm("members.showledgeraccount"): + info_fields = ( + "bank_main_org", + "bank_account", + "statues", + "founded_at", + "closed_at", + ) + + return [ + ( + "Navn og Adresse", + { + "fields": ("name", "email", "address"), + "description": "

Udfyld navnet på foreningen (f.eks København, \ + vestjylland) og adressen

", + }, + ), + ( + "Bestyrelsen nye felter", + { + "fields": ( + "chairman", + "second_chair", + "cashier", + "secretary", + "board_members", + ) + }, + ), + ( + "Bestyrelsen gamle felter", + { + "fields": ( + "chairman_old", + "chairman_email_old", + "second_chair_old", + "second_chair_email_old", + "cashier_old", + "cashier_email_old", + "secretary_old", + "secretary_email_old", + "board_members_old", + ) + }, + ), + ( + "Info", + { + "fields": info_fields, + "description": "Indsæt et link til jeres vedtægter, hvornår I er stiftet (har holdt stiftende \ + generalforsamling) og jeres bankkonto hvis I har sådan en til foreningen.", + }, + ), + ] + # Solution found on https://stackoverflow.com/questions/57056994/django-model-form-with-only-view-permission-puts-all-fields-on-exclude # formfield_for_foreignkey described in documentation here: https://docs.djangoproject.com/en/4.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey def formfield_for_foreignkey(self, db_field, request, **kwargs): @@ -121,59 +192,6 @@ def get_queryset(self, request): return qs return qs.filter(adminuserinformation__user=request.user) - fieldsets = [ - ( - "Navn og Adresse", - { - "fields": ("name", "email", "address"), - "description": "

Udfyld navnet på foreningen (f.eks København, \ - vestjylland) og adressen

", - }, - ), - ( - "Bestyrelsen nye felter", - { - "fields": ( - "chairman", - "second_chair", - "cashier", - "secretary", - "board_members", - ) - }, - ), - ( - "Bestyrelsen gamle felter", - { - "fields": ( - "chairman_old", - "chairman_email_old", - "second_chair_old", - "second_chair_email_old", - "cashier_old", - "cashier_email_old", - "secretary_old", - "secretary_email_old", - "board_members_old", - ) - }, - ), - ( - "Info", - { - "fields": ( - "bank_main_org", - "bank_account", - "statues", - "founded_at", - "closed_at", - ), - "description": "Indsæt et link til jeres vedtægter, hvornår I er stiftet (har holdt stiftende \ - generalforsamling) og jeres bankkonto hvis I har sådan en til foreningen.", - }, - ), - ] - def union_link(self, item): url = reverse("admin:members_union_change", args=[item.id]) link = '%s' % (url, escape(item.name)) diff --git a/members/migrations/0058_alter_union_options_union_gl_account.py b/members/migrations/0058_alter_union_options_union_gl_account.py new file mode 100644 index 00000000..ea25f9c6 --- /dev/null +++ b/members/migrations/0058_alter_union_options_union_gl_account.py @@ -0,0 +1,42 @@ +# Generated by Django 4.2.11 on 2024-11-13 19:56 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("members", "0057_municipality"), + ] + + operations = [ + migrations.AlterModelOptions( + name="union", + options={ + "ordering": ["name"], + "permissions": ( + ("view_all_unions", "Can view all Foreninger"), + ("showledgeraccount", "Show General Ledger Account"), + ), + "verbose_name": "Forening", + "verbose_name_plural": "Foreninger", + }, + ), + migrations.AddField( + model_name="union", + name="gl_account", + field=models.CharField( + blank=True, + help_text="Kontonummer i formatet 1234", + max_length=4, + validators=[ + django.core.validators.RegexValidator( + message="Indtast kontonummer i det rigtige format.", + regex="^[0-9]{4}", + ) + ], + verbose_name="Finanskonto:", + ), + ), + ] diff --git a/members/migrations/0059_merge_20241113_2111.py b/members/migrations/0059_merge_20241113_2111.py new file mode 100644 index 00000000..470047be --- /dev/null +++ b/members/migrations/0059_merge_20241113_2111.py @@ -0,0 +1,16 @@ +# Generated by Django 4.2.11 on 2024-11-13 20:11 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ( + "members", + "0058_alter_municipality_options_remove_municipality_email_and_more", + ), + ("members", "0058_alter_union_options_union_gl_account"), + ] + + operations = [] diff --git a/members/migrations/0060_alter_union_options.py b/members/migrations/0060_alter_union_options.py new file mode 100644 index 00000000..23fedeb6 --- /dev/null +++ b/members/migrations/0060_alter_union_options.py @@ -0,0 +1,25 @@ +# Generated by Django 4.2.11 on 2024-11-13 21:20 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("members", "0059_merge_20241113_2111"), + ] + + operations = [ + migrations.AlterModelOptions( + name="union", + options={ + "ordering": ["name"], + "permissions": ( + ("view_all_unions", "Can view all Foreninger"), + ("show_ledger_account", "Show General Ledger Account"), + ), + "verbose_name": "Forening", + "verbose_name_plural": "Foreninger", + }, + ), + ] diff --git a/members/models/union.py b/members/models/union.py index 76c76568..6846a48d 100644 --- a/members/models/union.py +++ b/members/models/union.py @@ -10,7 +10,10 @@ class Meta: verbose_name_plural = "Foreninger" verbose_name = "Forening" ordering = ["name"] - permissions = (("view_all_unions", "Can view all Foreninger"),) + permissions = ( + ("view_all_unions", "Can view all Foreninger"), + ("show_ledger_account", "Show General Ledger Account"), + ) help_union = """Vi tilføjer automatisk "Coding Pirates" foran navnet når vi nævner det de fleste steder på siden.""" name = models.CharField("Foreningens navn", max_length=200, help_text=help_union) @@ -88,6 +91,18 @@ class Meta: ) ], ) + gl_account = models.CharField( + "Finanskonto:", + max_length=4, + blank=True, + help_text="Kontonummer i formatet 1234", + validators=[ + RegexValidator( + regex="^[0-9]{4}", + message="Indtast kontonummer i det rigtige format.", + ) + ], + ) def __str__(self): return self.name diff --git a/members/schema.py b/members/schema.py index f6b84130..7633b6fb 100644 --- a/members/schema.py +++ b/members/schema.py @@ -36,7 +36,7 @@ class Meta: class UnionType(DjangoObjectType): class Meta: model = Union - exclude = ("bank_main_org", "bank_account") + exclude = ("bank_main_org", "bank_account", "gl_account") class DepartmentType(DjangoObjectType):