Skip to content

Commit c3b6615

Browse files
fix engagements filters in 'engagements by product view'
1 parent 1fa0b59 commit c3b6615

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

dojo/engagement/views.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from django.db import DEFAULT_DB_ALIAS
2424

2525
from dojo.engagement.services import close_engagement, reopen_engagement
26-
from dojo.filters import EngagementFilter, EngagementDirectFilter, EngagementTestFilter
26+
from dojo.filters import EngagementFilter, EngagementDirectFilter, EngagementTestFilter, ProductEngagementsFilter
2727
from dojo.forms import CheckForm, \
2828
UploadThreatForm, RiskAcceptanceForm, NoteForm, DoneForm, \
2929
EngForm, TestForm, ReplaceRiskAcceptanceProofForm, AddFindingsRiskAcceptanceForm, DeleteEngagementForm, ImportScanForm, \
@@ -166,8 +166,9 @@ def engagements_all(request):
166166
products_with_engagements = products_with_engagements.filter(~Q(engagement=None)).distinct()
167167

168168
# count using prefetch instead of just using 'engagement__set_test_test` to avoid loading all test in memory just to count them
169+
engagement_query = Engagement.objects.annotate(test_count=Count('test__id'))
169170
filter_qs = products_with_engagements.prefetch_related(
170-
Prefetch('engagement_set', queryset=Engagement.objects.all().annotate(test_count=Count('test__id')))
171+
Prefetch('engagement_set', queryset=ProductEngagementsFilter(request.GET, engagement_query).qs)
171172
)
172173

173174
filter_qs = filter_qs.prefetch_related(
@@ -188,7 +189,7 @@ def engagements_all(request):
188189
)
189190

190191
prods = get_page_items(request, filtered.qs, 25)
191-
192+
prods.paginator.count = sum(len(prod.engagement_set.all()) for prod in prods)
192193
name_words = products_with_engagements.values_list('name', flat=True)
193194
eng_words = get_authorized_engagements(Permissions.Engagement_View).values_list('name', flat=True).distinct()
194195

dojo/filters.py

+17
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,23 @@ class Meta:
861861
model = Product
862862
fields = ['name', 'prod_type']
863863

864+
class ProductEngagementsFilter(DojoFilter):
865+
engagement__name = CharFilter(field_name='name', lookup_expr='icontains', label='Engagement name contains')
866+
engagement__lead = ModelChoiceFilter(field_name='lead', queryset=Dojo_User.objects.none(), label="Lead")
867+
engagement__version = CharFilter(field_name='version', lookup_expr='icontains', label='Engagement version')
868+
engagement__test__version = CharFilter(field_name='test__version', lookup_expr='icontains', label='Test version')
869+
engagement__status = MultipleChoiceFilter(field_name='status', choices=ENGAGEMENT_STATUS_CHOICES,
870+
label="Status")
871+
872+
def __init__(self, *args, **kwargs):
873+
super().__init__(*args, **kwargs)
874+
self.form.fields['engagement__lead'].queryset = get_authorized_users(Permissions.Product_Type_View) \
875+
.filter(engagement__lead__isnull=False).distinct()
876+
877+
class Meta:
878+
model = Engagement
879+
fields = []
880+
864881

865882
class ProductEngagementFilter(DojoFilter):
866883
lead = ModelChoiceFilter(queryset=Dojo_User.objects.none(), label="Lead")

0 commit comments

Comments
 (0)