Skip to content

Commit

Permalink
✨ [maykinmedia/archiefbeheercomponent#340] Assign first reviewer on l…
Browse files Browse the repository at this point in the history
…ist creation
  • Loading branch information
SilviaAmAm committed May 2, 2024
1 parent 4e31223 commit 18cbe60
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 1 deletion.
4 changes: 3 additions & 1 deletion backend/src/openarchiefbeheer/destruction/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,14 @@ 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}
)
for assignee in assignees_data
]
)

destruction_list.assign(assignees[0])
return destruction_list
1 change: 1 addition & 0 deletions backend/src/openarchiefbeheer/destruction/api/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
32 changes: 32 additions & 0 deletions backend/src/openarchiefbeheer/destruction/models.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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,
)

0 comments on commit 18cbe60

Please sign in to comment.