mirror of
https://github.com/ae-utbm/sith.git
synced 2026-06-21 07:22:40 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f15facd8f |
-52
@@ -11,7 +11,6 @@ from club.models import Club, Membership
|
|||||||
from club.schemas import (
|
from club.schemas import (
|
||||||
ClubSchema,
|
ClubSchema,
|
||||||
ClubSearchFilterSchema,
|
ClubSearchFilterSchema,
|
||||||
MembershipFilterSchema,
|
|
||||||
SimpleClubSchema,
|
SimpleClubSchema,
|
||||||
UserMembershipSchema,
|
UserMembershipSchema,
|
||||||
)
|
)
|
||||||
@@ -63,54 +62,3 @@ class UserClubController(ControllerBase):
|
|||||||
.filter(user=user)
|
.filter(user=user)
|
||||||
.select_related("club", "user", "role")
|
.select_related("club", "user", "role")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@api_controller("/club_members/{since_date}")
|
|
||||||
class ClubMembersController(ControllerBase):
|
|
||||||
@route.get(
|
|
||||||
"/new",
|
|
||||||
response=list[UserMembershipSchema],
|
|
||||||
auth=[ApiKeyAuth(), SessionAuth()],
|
|
||||||
permissions=[HasPerm("club.view_club")],
|
|
||||||
url_name="get_new_club_members_since_date",
|
|
||||||
)
|
|
||||||
def fetch_new_club_members(self, filters: Query[MembershipFilterSchema]):
|
|
||||||
"""give all the members of a club that have joined since a given date"""
|
|
||||||
memberships = Membership.objects.ongoing().filter(
|
|
||||||
start_date__gte=filters.since_date, end_date__isnull=True
|
|
||||||
)
|
|
||||||
club_ids = memberships.values_list("club_id")
|
|
||||||
clubs = Club.objects.filter(id__in=club_ids)
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
"club": club,
|
|
||||||
"user": membership.user,
|
|
||||||
"role": membership.role,
|
|
||||||
"joined_at": membership.start_date,
|
|
||||||
}
|
|
||||||
for club in clubs
|
|
||||||
for membership in memberships.filter(club=club)
|
|
||||||
]
|
|
||||||
|
|
||||||
@route.get(
|
|
||||||
"/former",
|
|
||||||
response=list[UserMembershipSchema],
|
|
||||||
auth=[ApiKeyAuth(), SessionAuth()],
|
|
||||||
permissions=[HasPerm("club.view_club")],
|
|
||||||
url_name="get_former_club_members_since_date",
|
|
||||||
)
|
|
||||||
def fetch_former_club_members(self, filters: Query[MembershipFilterSchema]):
|
|
||||||
"""give all the former members of a club that have left since a given date"""
|
|
||||||
memberships = Membership.objects.filter(end_date__gte=filters.since_date)
|
|
||||||
club_ids = memberships.values_list("club_id")
|
|
||||||
clubs = Club.objects.filter(id__in=club_ids)
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
"club": club,
|
|
||||||
"user": membership.user,
|
|
||||||
"role": membership.role,
|
|
||||||
"left_at": membership.end_date,
|
|
||||||
}
|
|
||||||
for club in clubs
|
|
||||||
for membership in memberships.filter(club=club)
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
from datetime import datetime
|
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
@@ -80,8 +79,3 @@ class UserMembershipSchema(ModelSchema):
|
|||||||
|
|
||||||
club: SimpleClubSchema
|
club: SimpleClubSchema
|
||||||
role: ClubRoleSchema
|
role: ClubRoleSchema
|
||||||
user: SimpleUserSchema
|
|
||||||
|
|
||||||
|
|
||||||
class MembershipFilterSchema(FilterSchema):
|
|
||||||
since_date: Annotated[datetime, FilterLookup("date__lte")] = None
|
|
||||||
|
|||||||
@@ -251,8 +251,12 @@ class ApplyElectionResultForm(forms.Form):
|
|||||||
user_id=c.user_id,
|
user_id=c.user_id,
|
||||||
club_id=c.role.club_role.club_id,
|
club_id=c.role.club_role.club_id,
|
||||||
role=c.role.club_role,
|
role=c.role.club_role,
|
||||||
|
description=(
|
||||||
|
c.role.title if c.role.title != c.role.club_role.name else ""
|
||||||
|
),
|
||||||
)
|
)
|
||||||
for c in candidates
|
for c in candidates
|
||||||
]
|
]
|
||||||
Membership.objects.bulk_create(memberships)
|
Membership.objects.bulk_create(memberships)
|
||||||
Membership._add_club_groups(memberships)
|
Membership._add_club_groups(memberships)
|
||||||
|
return memberships
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from pytest_django.asserts import assertRedirects
|
|||||||
from club.models import Club, ClubRole, Membership
|
from club.models import Club, ClubRole, Membership
|
||||||
from core.baker_recipes import subscriber_user
|
from core.baker_recipes import subscriber_user
|
||||||
from core.models import Group, User
|
from core.models import Group, User
|
||||||
|
from election.forms import ApplyElectionResultForm
|
||||||
from election.models import Candidature, Election, ElectionList, Role, Vote
|
from election.models import Candidature, Election, ElectionList, Role, Vote
|
||||||
|
|
||||||
|
|
||||||
@@ -155,6 +156,19 @@ class TestApplyResult(TestCase):
|
|||||||
response = self.client.post(self.url, data={"candidates": ids})
|
response = self.client.post(self.url, data={"candidates": ids})
|
||||||
assert response.status_code == 403
|
assert response.status_code == 403
|
||||||
|
|
||||||
|
def test_membership_description(self):
|
||||||
|
"""Test that if club role name and election role name are different,
|
||||||
|
then the election role name is used as membership description.
|
||||||
|
"""
|
||||||
|
form = ApplyElectionResultForm(
|
||||||
|
election=self.election, data={"candidates": [self.candidatures[0].id]}
|
||||||
|
)
|
||||||
|
assert form.is_valid()
|
||||||
|
memberships = form.save()
|
||||||
|
assert len(memberships) == 1
|
||||||
|
assert memberships[0].role == self.club_roles[0]
|
||||||
|
assert memberships[0].description == "election role 1"
|
||||||
|
|
||||||
def test_no_result_to_apply(self):
|
def test_no_result_to_apply(self):
|
||||||
self.election.roles.update(club_role=None)
|
self.election.roles.update(club_role=None)
|
||||||
user = baker.make(
|
user = baker.make(
|
||||||
|
|||||||
Reference in New Issue
Block a user