User Stories Role Filter
parent
5974ca6ce3
commit
2744aa52f0
|
@ -140,6 +140,17 @@ class FilterBackend(OrderByFilterMixin):
|
|||
pass
|
||||
|
||||
|
||||
class FilterModelAssignedUsers:
|
||||
def get_assigned_users_filter(self, model, value):
|
||||
assigned_users_ids = model.objects.order_by().filter(
|
||||
assigned_users__in=value, id=OuterRef('pk')).values('pk')
|
||||
|
||||
assigned_user_filter = Q(pk__in=Subquery(assigned_users_ids))
|
||||
assigned_to_filter = Q(assigned_to__in=value)
|
||||
|
||||
return Q(assigned_user_filter | assigned_to_filter)
|
||||
|
||||
|
||||
#####################################################################
|
||||
# Permissions filters
|
||||
#####################################################################
|
||||
|
@ -420,18 +431,9 @@ class AssignedToFilter(BaseRelatedFieldsFilter):
|
|||
filter_name = 'assigned_to'
|
||||
|
||||
|
||||
class AssignedUsersFilter(BaseRelatedFieldsFilter):
|
||||
class AssignedUsersFilter(FilterModelAssignedUsers, BaseRelatedFieldsFilter):
|
||||
filter_name = 'assigned_users'
|
||||
|
||||
def get_assigned_users_filter(self, us_model, value):
|
||||
assigned_users_ids = us_model.objects.order_by().filter(
|
||||
assigned_users__in=value, id=OuterRef('pk')).values('pk')
|
||||
|
||||
assigned_user_filter = Q(pk__in=Subquery(assigned_users_ids))
|
||||
assigned_to_filter = Q(assigned_to__in=value)
|
||||
|
||||
return Q(assigned_user_filter | assigned_to_filter)
|
||||
|
||||
def _get_queryparams(self, params):
|
||||
param_name = self.param_name or self.filter_name
|
||||
raw_value = params.get(param_name, None)
|
||||
|
@ -643,3 +645,25 @@ class RoleFilter(BaseRelatedFieldsFilter):
|
|||
queryset = queryset.filter(assigned_to__in=memberships)
|
||||
|
||||
return FilterBackend.filter_queryset(self, request, queryset, view)
|
||||
|
||||
|
||||
class UserStoriesRoleFilter(FilterModelAssignedUsers, BaseRelatedFieldsFilter):
|
||||
filter_name = "role_id"
|
||||
param_name = "role"
|
||||
|
||||
def filter_queryset(self, request, queryset, view):
|
||||
Membership = apps.get_model('projects', 'Membership')
|
||||
query = self._get_queryparams(request.QUERY_PARAMS)
|
||||
|
||||
if query:
|
||||
if isinstance(query, dict):
|
||||
memberships = Membership.objects.filter(**query).values_list("user_id", flat=True)
|
||||
else:
|
||||
memberships = Membership.objects.filter(query).values_list("user_id", flat=True)
|
||||
if memberships:
|
||||
user_story_model = apps.get_model("userstories", "UserStory")
|
||||
queryset = queryset.filter(
|
||||
self.get_assigned_users_filter(user_story_model, memberships)
|
||||
)
|
||||
|
||||
return FilterBackend.filter_queryset(self, request, queryset, view)
|
||||
|
|
|
@ -62,7 +62,7 @@ class UserStoryViewSet(OCCResourceMixin, VotedResourceMixin, HistoryResourceMixi
|
|||
permission_classes = (permissions.UserStoryPermission,)
|
||||
filter_backends = (base_filters.CanViewUsFilterBackend,
|
||||
filters.EpicFilter,
|
||||
base_filters.RoleFilter,
|
||||
base_filters.UserStoriesRoleFilter,
|
||||
base_filters.OwnersFilter,
|
||||
base_filters.AssignedToFilter,
|
||||
base_filters.AssignedUsersFilter,
|
||||
|
|
Loading…
Reference in New Issue