Add assigned_to field to ServiceRequest. Ensure a administrator group exists. Close #66.

This commit is contained in:
Víðir Valberg Guðmundsson 2025-02-02 14:29:35 +01:00
parent 314416740f
commit 78f36c1502
4 changed files with 58 additions and 2 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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",
),
),
]

View file

@ -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")