From 78f36c1502f125f5930bf48e3a51102b003b9dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=AD=C3=B0ir=20Valberg=20Gu=C3=B0mundsson?= Date: Sun, 2 Feb 2025 14:29:35 +0100 Subject: [PATCH] Add assigned_to field to ServiceRequest. Ensure a administrator group exists. Close #66. --- src/services/admin.py | 5 ++-- src/services/apps.py | 14 +++++++++ .../0004_servicerequest_assigned_to.py | 29 +++++++++++++++++++ src/services/models.py | 12 ++++++++ 4 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/services/migrations/0004_servicerequest_assigned_to.py diff --git a/src/services/admin.py b/src/services/admin.py index c24642c..90fd1ff 100644 --- a/src/services/admin.py +++ b/src/services/admin.py @@ -10,8 +10,9 @@ from services.models import ServiceRequest class ServiceRequestAdmin(admin.ModelAdmin): """Admin for the ServiceRequest model.""" - list_display = ("member", "service", "request", "status") - list_filter = ("request", "status") + list_display = ("created", "member", "service", "request", "status", "assigned_to") + list_filter = ("request", "status", "assigned_to") + sortable_by = ("created",) @admin.register(ServiceAccess) diff --git a/src/services/apps.py b/src/services/apps.py index 8386f87..6cc190b 100644 --- a/src/services/apps.py +++ b/src/services/apps.py @@ -1,6 +1,16 @@ """Config for the services app.""" +from typing import Any + from django.apps import AppConfig +from django.apps import apps +from django.db.models.signals import post_migrate + + +def ensure_administrator_group(sender: Any, **kwargs: Any) -> None: # noqa: ANN401 + """Ensure that a group called "administrators" exists.""" + group_model = apps.get_model("auth.Group") + group_model.objects.get_or_create(name="administrators") class ServicesConfig(AppConfig): @@ -8,3 +18,7 @@ class ServicesConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "services" + + def ready(self) -> None: + """Connect signals when apps are ready.""" + post_migrate.connect(ensure_administrator_group, sender=self) diff --git a/src/services/migrations/0004_servicerequest_assigned_to.py b/src/services/migrations/0004_servicerequest_assigned_to.py new file mode 100644 index 0000000..b1dec32 --- /dev/null +++ b/src/services/migrations/0004_servicerequest_assigned_to.py @@ -0,0 +1,29 @@ +# Generated by Django 5.1.4 on 2025-02-02 13:24 + +import django.db.models.deletion +from django.db import migrations +from django.db import models + + +class Migration(migrations.Migration): + dependencies = [ + ("membership", "0014_alter_membership_options"), + ("services", "0003_alter_serviceaccess_unique_together_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="servicerequest", + name="assigned_to", + field=models.ForeignKey( + blank=True, + help_text="the admin team member assigned to this request", + limit_choices_to=models.Q(("groups__name", "administrators")), + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="assigned_service_requests", + to="membership.member", + verbose_name="assigned to", + ), + ), + ] diff --git a/src/services/models.py b/src/services/models.py index f6ebe6a..202c43a 100644 --- a/src/services/models.py +++ b/src/services/models.py @@ -4,6 +4,7 @@ import typing from django.contrib.sites.models import Site from django.db import models +from django.db.models import Q from django.db.models import TextChoices from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -80,6 +81,17 @@ class ServiceRequest(CreatedModifiedAbstract): blank=True, help_text=_("Readable by member: Notes from the admin / status updates, resolutions etc.") ) + assigned_to = models.ForeignKey( + "membership.Member", + verbose_name=_("assigned to"), + help_text=_("the admin team member assigned to this request"), + on_delete=models.CASCADE, + null=True, + blank=True, + related_name="assigned_service_requests", + limit_choices_to=Q(groups__name="administrators"), + ) + class Meta: verbose_name = _("service request") verbose_name_plural = _("service requests")