Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create a membership history when updating a membership #3301

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion lego/apps/users/views/memberships.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
from datetime import datetime
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For consistency, use django.utils.timzone

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


Expand Down Expand Up @@ -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"
)
Comment on lines +48 to +50
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do serializer.is_valid() and use the serialized value in the create below and you can throw away this.

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)