From 18cbe60d1d67d7e8e521e3d8068e56a56322178e Mon Sep 17 00:00:00 2001 From: SilviaAmAm Date: Thu, 2 May 2024 16:22:09 +0200 Subject: [PATCH] :sparkles: [maykinmedia/archiefbeheercomponent#340] Assign first reviewer on list creation --- .../destruction/api/serializers.py | 4 ++- .../destruction/api/viewsets.py | 1 + .../openarchiefbeheer/destruction/models.py | 32 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/backend/src/openarchiefbeheer/destruction/api/serializers.py b/backend/src/openarchiefbeheer/destruction/api/serializers.py index ffedf1c2..a88e29ff 100644 --- a/backend/src/openarchiefbeheer/destruction/api/serializers.py +++ b/backend/src/openarchiefbeheer/destruction/api/serializers.py @@ -67,7 +67,7 @@ def create(self, validated_data: dict) -> DestructionList: for item in items_data ] ) - DestructionListAssignee.objects.bulk_create( + assignees = DestructionListAssignee.objects.bulk_create( [ DestructionListAssignee( **{**assignee, "destruction_list": destruction_list} @@ -75,4 +75,6 @@ def create(self, validated_data: dict) -> DestructionList: for assignee in assignees_data ] ) + + destruction_list.assign(assignees[0]) return destruction_list diff --git a/backend/src/openarchiefbeheer/destruction/api/viewsets.py b/backend/src/openarchiefbeheer/destruction/api/viewsets.py index a976de45..33fcd9d7 100644 --- a/backend/src/openarchiefbeheer/destruction/api/viewsets.py +++ b/backend/src/openarchiefbeheer/destruction/api/viewsets.py @@ -21,4 +21,5 @@ def get_permissions(self): @transaction.atomic def create(self, request, *args, **kwargs): + # TODO log creation return super().create(request, *args, **kwargs) diff --git a/backend/src/openarchiefbeheer/destruction/models.py b/backend/src/openarchiefbeheer/destruction/models.py index 057259f4..89468bf9 100644 --- a/backend/src/openarchiefbeheer/destruction/models.py +++ b/backend/src/openarchiefbeheer/destruction/models.py @@ -1,4 +1,7 @@ +from django.conf import settings +from django.core.mail import send_mail from django.db import models +from django.utils import timezone from django.utils.translation import gettext_lazy as _ from ordered_model.models import OrderedModel @@ -63,6 +66,10 @@ class Meta: def __str__(self): return self.name + @staticmethod + def assign(assignee: "DestructionListAssignee") -> None: + assignee.assign() + class DestructionListItem(models.Model): destruction_list = models.ForeignKey( @@ -122,3 +129,28 @@ class Meta(OrderedModel.Meta): def __str__(self): return f"{self.user} ({self.destruction_list}, {self.order})" + + def assign(self) -> None: + # TODO Log assignment + self.destruction_list.assignee = self.user + self.assigned_on = timezone.now() + + self.destruction_list.save() + self.save() + + self.notify() + + # TODO refine what we want to do with notifications + def notify(self) -> None: + if not self.user.email: + return + + is_reviewer = self.user != self.destruction_list.author + if is_reviewer: + send_mail( + _("Destruction list review request"), + _("There is a destruction list review request for you."), + settings.DEFAULT_FROM_EMAIL, + [self.user.email], + fail_silently=False, + )