Skip to content

Commit 0fc6796

Browse files
Merge pull request #8157 from 4teamwork/amo/TI-TI-2279/dossier_inactive_responsible_filter
Filtering by inactive dossier responsible is now available.
2 parents 217bd31 + adb8b04 commit 0fc6796

4 files changed

Lines changed: 140 additions & 1 deletion

File tree

changes/TI-2279.other

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
extend @listing endpoint with inactive user filter .[amo]

docs/public/dev-manual/api/api_changelog.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Breaking Changes
1212

1313
Other Changes
1414
^^^^^^^^^^^^^
15-
15+
``@listing``: Filtering by inactive dossier responsible is now available.
1616

1717
2025.6.0 (2025-04-07)
1818
---------------------

opengever/api/listing.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from opengever.document.behaviors.customproperties import IDocumentCustomProperties
88
from opengever.dossier.behaviors.customproperties import IDossierCustomProperties
99
from opengever.dossier.indexers import ParticipationIndexHelper
10+
from opengever.ogds.models.service import ogds_service
1011
from plone.registry.interfaces import IRegistry
1112
from plone.uuid.interfaces import IUUID
1213
from zExceptions import BadRequest
@@ -190,6 +191,13 @@ def preprocess_filters(self, filters):
190191
helper.participant_id_and_role_to_index_value(
191192
participant_id, role))
192193
filters['participations'] = participations
194+
195+
if 'inactive_responsibles' in filters:
196+
inactive_responsibles_flag = filters.pop('inactive_responsibles')
197+
if inactive_responsibles_flag:
198+
if 'responsible' not in filters:
199+
inactive_responsibles = ogds_service().inactive_users()
200+
filters['responsible'] = [user.userid for user in inactive_responsibles]
193201
return filters
194202

195203
def extract_sort(self, params, query):

opengever/api/tests/test_listing.py

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -989,6 +989,136 @@ def test_filter_supports_unicode(self, browser):
989989
u'Abgeschlossene Vertr\xe4ge'],
990990
titles)
991991

992+
@browsing
993+
def test_filter_by_responsible(self, browser):
994+
self.login(self.regular_user, browser=browser)
995+
996+
view = ('@listing?name=dossiers&columns:list=title&columns:list=responsible')
997+
browser.open(self.leaf_repofolder, view=view, headers=self.api_headers)
998+
items = browser.json['items']
999+
1000+
# Assert all items
1001+
self.assertEqual(17, len(items))
1002+
1003+
# filter by dossier_responsible
1004+
view = (
1005+
'@listing?name=dossiers'
1006+
'&columns:list=title'
1007+
'&columns:list=responsible'
1008+
'&filters.responsible:record:list={}'.format(self.dossier_responsible))
1009+
browser.open(self.leaf_repofolder, view=view, headers=self.api_headers)
1010+
items = browser.json['items']
1011+
1012+
self.assertEqual(10, len(items))
1013+
self.assertTrue([dossier["responsible"] == self.dossier_responsible for dossier in items])
1014+
1015+
@browsing
1016+
def test_filter_by_dossier_inactive_responsible(self, browser):
1017+
self.login(self.regular_user, browser=browser)
1018+
inactive_user_1 = create(
1019+
Builder('ogds_user')
1020+
.having(active=False, userid="inactive_user_1")
1021+
)
1022+
inactive_user_2 = create(
1023+
Builder('ogds_user')
1024+
.having(active=False, userid="inactive_user_2")
1025+
)
1026+
1027+
create(
1028+
Builder('dossier')
1029+
.titled(u'Dossier with inactive responsible 1')
1030+
.within(self.leaf_repofolder)
1031+
.having(responsible="{}".format(inactive_user_1.userid))
1032+
)
1033+
create(
1034+
Builder('dossier')
1035+
.titled(u'Dossier with inactive responsible 2')
1036+
.within(self.leaf_repofolder)
1037+
.having(responsible="{}".format(inactive_user_2.userid))
1038+
)
1039+
1040+
self.commit_solr()
1041+
1042+
view = ('@listing?name=dossiers&columns:list=title&columns:list=responsible')
1043+
browser.open(self.leaf_repofolder, view=view, headers=self.api_headers)
1044+
items = browser.json['items']
1045+
1046+
# Assert all items
1047+
self.assertEqual(19, len(items))
1048+
1049+
# filter by inactive users
1050+
view = (
1051+
'@listing?name=dossiers'
1052+
'&columns:list=title'
1053+
'&columns:list=responsible'
1054+
'&filters.inactive_responsibles:record:boolean=true')
1055+
browser.open(self.leaf_repofolder, view=view, headers=self.api_headers)
1056+
items = browser.json['items']
1057+
1058+
self.assertEqual(2, len(items))
1059+
self.assertTrue([dossier["responsible"] == [inactive_user_1, inactive_user_2] for dossier in items])
1060+
1061+
@browsing
1062+
def test_filter_by_dossier_inactive_responsible_with_specific_user(self, browser):
1063+
self.login(self.regular_user, browser=browser)
1064+
inactive_user_1 = create(
1065+
Builder('ogds_user')
1066+
.having(active=False, userid="inactive_user_1")
1067+
)
1068+
inactive_user_2 = create(
1069+
Builder('ogds_user')
1070+
.having(active=False, userid="inactive_user_2")
1071+
)
1072+
1073+
create(
1074+
Builder('dossier')
1075+
.titled(u'Dossier with inactive responsible 1')
1076+
.within(self.leaf_repofolder)
1077+
.having(responsible="{}".format(inactive_user_1.userid))
1078+
)
1079+
create(
1080+
Builder('dossier')
1081+
.titled(u'Dossier with inactive responsible 2')
1082+
.within(self.leaf_repofolder)
1083+
.having(responsible="{}".format(inactive_user_2.userid))
1084+
)
1085+
1086+
self.commit_solr()
1087+
self.login(self.regular_user, browser=browser)
1088+
1089+
view = ('@listing?name=dossiers&columns:list=title&columns:list=responsible')
1090+
browser.open(self.leaf_repofolder, view=view, headers=self.api_headers)
1091+
items = browser.json['items']
1092+
1093+
# Assert all items
1094+
self.assertEqual(19, len(items))
1095+
1096+
# filter by inactive users
1097+
view = (
1098+
'@listing?name=dossiers'
1099+
'&columns:list=title'
1100+
'&columns:list=responsible'
1101+
'&filters.inactive_responsibles:record:boolean=true')
1102+
browser.open(self.leaf_repofolder, view=view, headers=self.api_headers)
1103+
items = browser.json['items']
1104+
1105+
self.assertEqual(2, len(items))
1106+
self.assertTrue([dossier["responsible"] == [inactive_user_1, inactive_user_2] for dossier in items])
1107+
1108+
# filter by specific inactive user
1109+
view = (
1110+
'@listing?name=dossiers'
1111+
'&columns:list=title'
1112+
'&columns:list=responsible'
1113+
'&filters.inactive_responsibles:record:boolean=true'
1114+
'&filters.responsible:record:list={}'.format(inactive_user_1.userid))
1115+
browser.open(self.leaf_repofolder, view=view, headers=self.api_headers)
1116+
items = browser.json['items']
1117+
1118+
self.assertEqual(1, len(items))
1119+
self.assertTrue([dossier["responsible"] == inactive_user_1 for dossier in items])
1120+
self.assertTrue([dossier["title"] == 'Dossier with inactive responsible 1' for dossier in items])
1121+
9921122
@browsing
9931123
def test_workspaces_listing(self, browser):
9941124
self.login(self.workspace_member, browser=browser)

0 commit comments

Comments
 (0)