66from django .shortcuts import get_object_or_404
77from drf_spectacular .utils import extend_schema_serializer
88from rest_framework import serializers
9- from services .crisalid .serializers import ResearcherSerializerLight
10- from services .translator .serializers import AutoTranslatedModelSerializer
119
1210from apps .commons .fields import (
1311 HiddenPrimaryKeyRelatedField ,
3028from apps .projects .models import Project
3129from apps .skills .models import Skill
3230from apps .skills .serializers import SkillLightSerializer , TagSerializer
31+ from services .crisalid .serializers import ResearcherSerializerLight
32+ from services .translator .serializers import AutoTranslatedModelSerializer
3333
3434from .exceptions import (
3535 FeaturedProjectPermissionDeniedError ,
@@ -253,10 +253,9 @@ class Meta:
253253
254254
255255class PeopleGroupLightSerializer (
256- AutoTranslatedModelSerializer , serializers .ModelSerializer
256+ ModulesSerializers , AutoTranslatedModelSerializer , serializers .ModelSerializer
257257):
258258 header_image = ImageSerializer (read_only = True )
259- members_count = serializers .SerializerMethodField ()
260259 roles = serializers .SlugRelatedField (
261260 many = True ,
262261 slug_field = "name" ,
@@ -265,10 +264,6 @@ class PeopleGroupLightSerializer(
265264 )
266265 organization = serializers .SlugRelatedField (read_only = True , slug_field = "code" )
267266
268- # TODO(remi): replace this by modules
269- def get_members_count (self , group : PeopleGroup ) -> int :
270- return group .get_all_members ().count ()
271-
272267 class Meta :
273268 model = PeopleGroup
274269 read_only_fields = ["organization" , "is_root" , "publication_status" ]
@@ -280,12 +275,25 @@ class Meta:
280275 "short_description" ,
281276 "email" ,
282277 "header_image" ,
283- "members_count" ,
284278 "roles" ,
279+ "modules" ,
285280 ]
286281
282+ def get_modules (self , people_group : PeopleGroup ):
283+ context = self .context
284+ request = context .get ("request" )
285+
286+ modules_manager = people_group .get_related_module ()
287+ modules = modules_manager (people_group , request .user )
288+
289+ return {
290+ "members" : modules .members ().count (),
291+ "subgroups" : modules .subgroups ().count (),
292+ }
293+
287294
288295class PeopleGroupHierarchySerializer (
296+ ModulesSerializers ,
289297 AutoTranslatedModelSerializer ,
290298 serializers .ModelSerializer ,
291299):
@@ -308,13 +316,27 @@ class Meta:
308316 "header_image" ,
309317 "children" ,
310318 "roles" ,
319+ "modules" ,
311320 ]
312321 fields = read_only_fields
313322
323+ def get_modules (self , people_group : PeopleGroup ):
324+ context = self .context
325+ request = context .get ("request" )
326+
327+ modules_manager = people_group .get_related_module ()
328+ modules = modules_manager (people_group , request .user )
329+
330+ return {
331+ "members" : modules .members ().count (),
332+ "subgroups" : modules .subgroups ().count (),
333+ }
334+
314335 def get_children (self , people_group : PeopleGroup ) -> list [dict [str , str | int ]]:
315336 context = self .context
316337 request = context .get ("request" )
317338 mapping = context .get ("mapping" )
339+
318340 if not mapping :
319341 base_queryset = request .user .get_people_group_queryset ().filter (
320342 organization = people_group .organization
@@ -432,7 +454,6 @@ class PeopleGroupSerializer(
432454 slug_field = "code" , queryset = Organization .objects .all ()
433455 )
434456 hierarchy = serializers .SerializerMethodField ()
435- # children = serializers.SerializerMethodField()
436457 parent = serializers .PrimaryKeyRelatedField (
437458 queryset = PeopleGroup .objects .all (),
438459 required = False ,
0 commit comments