User Stories Role Filter
parent
5974ca6ce3
commit
2744aa52f0
|
@ -140,6 +140,17 @@ class FilterBackend(OrderByFilterMixin):
|
||||||
pass
|
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
|
# Permissions filters
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
@ -420,18 +431,9 @@ class AssignedToFilter(BaseRelatedFieldsFilter):
|
||||||
filter_name = 'assigned_to'
|
filter_name = 'assigned_to'
|
||||||
|
|
||||||
|
|
||||||
class AssignedUsersFilter(BaseRelatedFieldsFilter):
|
class AssignedUsersFilter(FilterModelAssignedUsers, BaseRelatedFieldsFilter):
|
||||||
filter_name = 'assigned_users'
|
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):
|
def _get_queryparams(self, params):
|
||||||
param_name = self.param_name or self.filter_name
|
param_name = self.param_name or self.filter_name
|
||||||
raw_value = params.get(param_name, None)
|
raw_value = params.get(param_name, None)
|
||||||
|
@ -643,3 +645,25 @@ class RoleFilter(BaseRelatedFieldsFilter):
|
||||||
queryset = queryset.filter(assigned_to__in=memberships)
|
queryset = queryset.filter(assigned_to__in=memberships)
|
||||||
|
|
||||||
return FilterBackend.filter_queryset(self, request, queryset, view)
|
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,)
|
permission_classes = (permissions.UserStoryPermission,)
|
||||||
filter_backends = (base_filters.CanViewUsFilterBackend,
|
filter_backends = (base_filters.CanViewUsFilterBackend,
|
||||||
filters.EpicFilter,
|
filters.EpicFilter,
|
||||||
base_filters.RoleFilter,
|
base_filters.UserStoriesRoleFilter,
|
||||||
base_filters.OwnersFilter,
|
base_filters.OwnersFilter,
|
||||||
base_filters.AssignedToFilter,
|
base_filters.AssignedToFilter,
|
||||||
base_filters.AssignedUsersFilter,
|
base_filters.AssignedUsersFilter,
|
||||||
|
|
Loading…
Reference in New Issue