Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions froide/foirequest/documents.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ class FoiRequestDocument(Document):
team = fields.IntegerField(attr="team_id")

public = fields.BooleanField()
project = fields.IntegerField(attr="project_id")
project_order = fields.IntegerField()

class Django:
model = FoiRequest
Expand Down
14 changes: 14 additions & 0 deletions froide/foirequest/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,10 @@ class BaseFoiRequestFilterSet(BaseSearchFilterSet):
widget=BootstrapSelect,
method="add_sort",
)
hide_project_duplicates = django_filters.BooleanFilter(
label=_("hide project duplicated"),
method="filter_hide_project_duplicates",
)

class Meta:
model = FoiRequest
Expand Down Expand Up @@ -326,6 +330,16 @@ def add_sort(self, qs, name, value):
return qs.add_sort("%s_message" % value)
return qs

def filter_hide_project_duplicates(self, qs, name, value):
if value:
return self.apply_filter(
qs,
name,
Q("bool", must_not={"exists": {"field": "project"}})
| Q("term", project_order=0),
)
return qs


class FoiRequestFilterSet(BaseFoiRequestFilterSet):
pass
16 changes: 1 addition & 15 deletions froide/foirequest/models/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,6 @@ def get_queryset(self):
def by_last_update(self):
return self.get_queryset().order_by("-last_message")

def for_list_view(self):
return (
self.by_last_update()
.filter(
same_as__isnull=True,
)
.filter(models.Q(project__isnull=True) | models.Q(project_order=0))
)

def get_resolution_count_by_public_body(self, obj):
from ..filters import REVERSE_FILTER_DICT

Expand Down Expand Up @@ -633,12 +624,7 @@ def is_public(self):
return self.visibility == self.VISIBILITY.VISIBLE_TO_PUBLIC

def in_public_search_index(self):
return (
self.is_public()
and self.is_foi
and self.same_as_id is None
and (self.project_id is None or self.project_order == 0)
)
return self.is_public() and self.is_foi and self.same_as_id is None

def get_redaction_regexes(self):
from ..utils import get_foi_mail_domains
Expand Down
11 changes: 10 additions & 1 deletion froide/foirequest/views/list_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
from django.urls import reverse
from django.utils.translation import gettext_lazy as _

from elasticsearch_dsl.query import Q

from froide.helper.search.views import BaseSearchView
from froide.publicbody.models import Jurisdiction

Expand Down Expand Up @@ -38,7 +40,14 @@ class BaseListRequestView(BaseSearchView):
filterset = FoiRequestFilterSet

def get_base_search(self):
return super().get_base_search().filter("term", public=True)
base_search = super().get_base_search().filter("term", public=True)
# TODO: move this into facet so it is not removed if other filter are applied, e.g. through the filter-dropdowns
if not self.request.GET.get("show_project_requests"):
base_search = base_search.filter(
Q("bool", must_not={"exists": {"field": "project"}})
| Q("term", project_order=0)
)
return base_search


class ListRequestView(BaseListRequestView):
Expand Down