diff --git a/lego/apps/users/views/memberships.py b/lego/apps/users/views/memberships.py index b07c85237..f741f1b9c 100644 --- a/lego/apps/users/views/memberships.py +++ b/lego/apps/users/views/memberships.py @@ -1,10 +1,16 @@ +from datetime import datetime +from typing import Any + +from django.http import HttpRequest +from django.utils import timezone from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters, viewsets +from rest_framework.response import Response from lego.apps.permissions.api.filters import LegoPermissionFilter from lego.apps.permissions.api.views import AllowedPermissionsMixin from lego.apps.users.filters import MembershipFilterSet -from lego.apps.users.models import AbakusGroup, Membership +from lego.apps.users.models import AbakusGroup, Membership, MembershipHistory, User from lego.apps.users.serializers.memberships import MembershipSerializer @@ -33,3 +39,21 @@ def get_queryset(self): def create(self, request, *args, **kwargs): request.data["abakus_group"] = kwargs["group_pk"] return super(MembershipViewSet, self).create(request, *args, **kwargs) + + def update(self, request: HttpRequest, *args: Any, **kwargs: Any) -> Response: + """Create a new membership history object when a membership is updated""" + + user = User.objects.get(pk=request.data["membership"]["id"]) + group = AbakusGroup.objects.get(pk=request.data["membership"]["abakus_group"]) + start_date = datetime.strptime( + request.data["membership"]["created_at"], "%Y-%m-%dT%H:%M:%S.%fZ" + ) + MembershipHistory.objects.create( + user=user, + abakus_group=group, + role=request.data["role"], + start_date=start_date, + end_date=timezone.now(), + ) + + return super(MembershipViewSet, self).update(request, *args, **kwargs)