Skip to content

Commit

Permalink
[#2975] Move option to fetch eHerkenning zaken with RSIN to ZGW API g…
Browse files Browse the repository at this point in the history
…roup config
  • Loading branch information
Paul Schilling authored and pi-sigma committed Jan 29, 2025
1 parent 1bab681 commit a344ddc
Show file tree
Hide file tree
Showing 19 changed files with 135 additions and 53 deletions.
2 changes: 1 addition & 1 deletion src/open_inwoner/cms/cases/views/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def dispatch(self, request, *args, **kwargs):
elif request.user.kvk:
identifier = self.request.user.kvk
config = OpenZaakConfig.get_solo()
if config.fetch_eherkenning_zaken_with_rsin:
if api_group.fetch_eherkenning_zaken_with_rsin:
identifier = self.request.user.rsin

vestigingsnummer = get_kvk_branch_number(self.request.session)
Expand Down
8 changes: 6 additions & 2 deletions src/open_inwoner/cms/cases/views/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,9 @@ def get_submissions_for_api_group(
raise ValueError(f"{group} has no `forms_client`")

return group.forms_client.fetch_open_submissions(
**get_user_fetch_parameters(self.request, check_rsin=False)
**get_user_fetch_parameters(
self.request, use_rsin=group.fetch_eherkenning_zaken_with_rsin
)
)

def get_submissions(self) -> list[SubmissionWithApiGroup]:
Expand Down Expand Up @@ -192,7 +194,9 @@ def get_cases(self) -> list[ZaakWithApiGroup]:

def _get_cases_for_api_group(self, group: ZGWApiGroupConfig) -> list[Zaak]:
raw_cases = group.zaken_client.fetch_cases(
**get_user_fetch_parameters(self.request)
**get_user_fetch_parameters(
self.request, use_rsin=group.fetch_eherkenning_zaken_with_rsin
)
)
resolved_cases = self.resolve_cases(raw_cases, group)

Expand Down
1 change: 0 additions & 1 deletion src/open_inwoner/configurations/bootstrap/zgw.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ class Meta:
"max_upload_size",
"skip_notification_statustype_informeren",
"reformat_esuite_zaak_identificatie",
"fetch_eherkenning_zaken_with_rsin",
"derive_zaak_titel_from",
"order_statuses_by_date_set",
"title_text",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ openzaak_config:
max_upload_size: 50
skip_notification_statustype_informeren: false
reformat_esuite_zaak_identificatie: true
fetch_eherkenning_zaken_with_rsin: false
derive_zaak_titel_from: zaaktype_omschrijving
order_statuses_by_date_set: false
title_text: title text from setup configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ openzaak_config:
max_upload_size: 50
skip_notification_statustype_informeren: false
reformat_esuite_zaak_identificatie: true
fetch_eherkenning_zaken_with_rsin: false
derive_zaak_titel_from: zaaktype_omschrijving
order_statuses_by_date_set: false
title_text: title text from setup configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ openzaak_config:
max_upload_size: 50
skip_notification_statustype_informeren: false
reformat_esuite_zaak_identificatie: true
fetch_eherkenning_zaken_with_rsin: false
derive_zaak_titel_from: zaaktype_omschrijving
order_statuses_by_date_set: false
title_text: title text from setup configuration
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ def assert_openzaak_config_defaults(self):
self.assertEqual(config.enable_categories_filtering_with_zaken, False)
self.assertEqual(config.skip_notification_statustype_informeren, False)
self.assertEqual(config.reformat_esuite_zaak_identificatie, False)
self.assertEqual(config.fetch_eherkenning_zaken_with_rsin, False)

def test_configure_full_sets_the_correct_fields(self):
execute_single_step(
Expand Down Expand Up @@ -120,7 +119,6 @@ def test_configure_full_sets_the_correct_fields(self):
self.assertEqual(config.enable_categories_filtering_with_zaken, True)
self.assertEqual(config.skip_notification_statustype_informeren, False)
self.assertEqual(config.reformat_esuite_zaak_identificatie, True)
self.assertEqual(config.fetch_eherkenning_zaken_with_rsin, False)

def test_configure_raises_on_missing_groups(self):
with self.assertRaises(PrerequisiteFailed):
Expand Down
1 change: 0 additions & 1 deletion src/open_inwoner/openzaak/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ class OpenZaakConfigAdmin(SingletonModelAdmin):
"fields": [
"skip_notification_statustype_informeren",
"reformat_esuite_zaak_identificatie",
"fetch_eherkenning_zaken_with_rsin",
"derive_zaak_titel_from",
],
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Generated by Django 4.2.16 on 2025-01-23 11:13

import logging

from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
from django.db import migrations, models

logger = logging.getLogger(__name__)


def migrate_fetch_eherkenning_zaken_with_rsin(apps, _):
OpenZaakConfig = apps.get_model("openzaak", "OpenZaakConfig")
ZGWApiGroupConfig = apps.get_model("openzaak", "ZGWApiGroupConfig")

try:
zgw_group_config = ZGWApiGroupConfig.objects.get()
except ObjectDoesNotExist:
logger.info(
"No zgw_api_group_config found. "
"Skipping migration of fetch_eherkenning_zaken_with_rsin"
)
return
except MultipleObjectsReturned:
logger.info(
"Multiple zgw_api_group_config instances found. "
"Skipping migration of fetch_eherkenning_zaken_with_rsin"
)
return

zaak_config = OpenZaakConfig.objects.first()

zgw_group_config.fetch_eherkenning_zaken_with_rsin = (
zaak_config.fetch_eherkenning_zaken_with_rsin
)
zgw_group_config.save()


class Migration(migrations.Migration):

dependencies = [
("openzaak", "0059_openzaakconfig_show_cases_without_status"),
]

operations = [
migrations.AddField(
model_name="zgwapigroupconfig",
name="fetch_eherkenning_zaken_with_rsin",
field=models.BooleanField(
default=False,
help_text="If enabled, Zaken for eHerkenning users are fetched using the company RSIN (Open Zaak). If not enabled, Zaken are fetched using the KvK number (eSuite).",
verbose_name="Fetch Zaken for users authenticated with eHerkenning using RSIN",
),
),
migrations.RunPython(
code=migrate_fetch_eherkenning_zaken_with_rsin,
reverse_code=migrations.RunPython.noop,
),
migrations.RemoveField(
model_name="openzaakconfig",
name="fetch_eherkenning_zaken_with_rsin",
),
]
16 changes: 16 additions & 0 deletions src/open_inwoner/openzaak/migrations/0061_merge_20250124_1149.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Generated by Django 4.2.16 on 2025-01-24 10:49

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
(
"openzaak",
"0060_remove_openzaakconfig_use_zaak_omschrijving_as_title_and_more",
),
("openzaak", "0060_zgwapigroupconfig_fetch_eherkenning_zaken_with_rsin"),
]

operations = []
21 changes: 11 additions & 10 deletions src/open_inwoner/openzaak/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,17 @@ def forms_client(self):
if self.form_service:
return cast(FormClient, self._build_client_from_attr("form_service"))

fetch_eherkenning_zaken_with_rsin = models.BooleanField(
verbose_name=_(
"Fetch Zaken for users authenticated with eHerkenning using RSIN"
),
help_text=_(
"If enabled, Zaken for eHerkenning users are fetched using the company RSIN (Open Zaak). "
"If not enabled, Zaken are fetched using the KvK number (eSuite)."
),
default=False,
)

class Meta:
verbose_name = _("ZGW API set")
verbose_name_plural = _("ZGW API sets")
Expand Down Expand Up @@ -401,16 +412,6 @@ def form_service(self, service):
default=False,
)

fetch_eherkenning_zaken_with_rsin = models.BooleanField(
verbose_name=_(
"Fetch Zaken for users authenticated with eHerkenning using RSIN"
),
help_text=_(
"If enabled, Zaken for eHerkenning users are fetched using the company RSIN (Open Zaak). "
"If not enabled, Zaken are fetched using the KvK number (eSuite)."
),
default=False,
)
derive_zaak_titel_from = models.CharField(
choices=ZaakTitleDisplayChoices.choices,
default=ZaakTitleDisplayChoices.zaaktype_omschrijving,
Expand Down
13 changes: 7 additions & 6 deletions src/open_inwoner/openzaak/notifications.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
UserCaseInfoObjectNotification,
UserCaseStatusNotification,
ZaakTypeConfig,
ZaakTypeStatusTypeConfig,
ZGWApiGroupConfig,
)
from open_inwoner.openzaak.utils import (
get_zaak_type_config,
Expand All @@ -35,8 +37,6 @@
from open_inwoner.utils.logentry import system_action as log_system_action
from open_inwoner.utils.url import build_absolute_url

from .models import ZaakTypeStatusTypeConfig, ZGWApiGroupConfig

logger = logging.getLogger(__name__)


Expand Down Expand Up @@ -85,7 +85,7 @@ def handle_zaken_notification(notification: Notification):
)
return

inform_users = _get_initiator_users_from_roles(roles)
inform_users = _get_initiator_users_from_roles(roles, api_group=api_group)
if not inform_users:
log_system_action(
f"ignored {r} notification: no users with bsn/nnp_id as (mede)initiators in case {case_url}",
Expand Down Expand Up @@ -656,7 +656,9 @@ def _get_nnp_initiator_nnp_id_from_roles(roles: list[Rol]) -> list[str]:
return list(ret)


def _get_initiator_users_from_roles(roles: list[Rol]) -> list[User]:
def _get_initiator_users_from_roles(
roles: list[Rol], api_group: ZGWApiGroupConfig
) -> list[User]:
"""
iterate over Rollen and return User objects for initiators
"""
Expand All @@ -668,8 +670,7 @@ def _get_initiator_users_from_roles(roles: list[Rol]) -> list[User]:

nnp_id_list = _get_nnp_initiator_nnp_id_from_roles(roles)
if nnp_id_list:
config = OpenZaakConfig.get_solo()
if config.fetch_eherkenning_zaken_with_rsin:
if api_group.fetch_eherkenning_zaken_with_rsin:
id_filter = {"rsin__in": nnp_id_list}
else:
id_filter = {"kvk__in": nnp_id_list}
Expand Down
1 change: 1 addition & 0 deletions src/open_inwoner/openzaak/tests/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class ZGWApiGroupConfigFactory(factory.django.DjangoModelFactory):
drc_service = factory.SubFactory(ServiceFactory, api_type=APITypes.drc)
ztc_service = factory.SubFactory(ServiceFactory, api_type=APITypes.ztc)
form_service = factory.SubFactory(ServiceFactory, api_type=APITypes.orc)
fetch_eherkenning_zaken_with_rsin = factory.Faker("boolean")

class Meta:
model = ZGWApiGroupConfig
Expand Down
16 changes: 12 additions & 4 deletions src/open_inwoner/openzaak/tests/test_case_detail.py
Original file line number Diff line number Diff line change
Expand Up @@ -1453,10 +1453,14 @@ def test_page_displays_expected_data_for_eherkenning_user(self, m, cm_client_moc
with self.subTest(
fetch_eherkenning_zaken_with_rsin=fetch_eherkenning_zaken_with_rsin
):
self.config.fetch_eherkenning_zaken_with_rsin = (
self.api_group.fetch_eherkenning_zaken_with_rsin = (
fetch_eherkenning_zaken_with_rsin
)
self.config.save()
self.api_group.save()
self.api_group_alt.fetch_eherkenning_zaken_with_rsin = (
fetch_eherkenning_zaken_with_rsin
)
self.api_group_alt.save()

response = self.app.get(
self.eherkenning_case_detail_url,
Expand Down Expand Up @@ -1500,10 +1504,14 @@ def test_page_displays_expected_data_for_eherkenning_user_with_vestigingsnummer(
with self.subTest(
fetch_eherkenning_zaken_with_rsin=fetch_eherkenning_zaken_with_rsin
):
self.config.fetch_eherkenning_zaken_with_rsin = (
self.api_group.fetch_eherkenning_zaken_with_rsin = (
fetch_eherkenning_zaken_with_rsin
)
self.config.save()
self.api_group.save()
self.api_group_alt.fetch_eherkenning_zaken_with_rsin = (
fetch_eherkenning_zaken_with_rsin
)
self.api_group_alt.save()

response = self.client.get(self.eherkenning_case_detail_url)

Expand Down
25 changes: 12 additions & 13 deletions src/open_inwoner/openzaak/tests/test_cases.py
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,7 @@ def setUp(self):
zrc_service__api_root=zaken_root,
ztc_service__api_root=catalogi_root,
form_service=None,
fetch_eherkenning_zaken_with_rsin=False,
)
)
self.mocks.append(
Expand Down Expand Up @@ -705,10 +706,11 @@ def test_list_cases_for_eherkenning_user(self, m):
with self.subTest(
fetch_eherkenning_zaken_with_rsin=fetch_eherkenning_zaken_with_rsin
):
self.config.fetch_eherkenning_zaken_with_rsin = (
fetch_eherkenning_zaken_with_rsin
)
self.config.save()
for group in self.api_groups:
group.fetch_eherkenning_zaken_with_rsin = (
fetch_eherkenning_zaken_with_rsin
)
group.save()

m.reset_mock()

Expand Down Expand Up @@ -804,9 +806,6 @@ def test_list_cases_for_kvk_user_with_vestigingsnummer(self, m):

self.client.force_login(user=self.eherkenning_user)

self.config.fetch_eherkenning_zaken_with_rsin = False
self.config.save()

m.reset_mock()

response = self.client.get(self.inner_url, HTTP_HX_REQUEST="true")
Expand Down Expand Up @@ -869,9 +868,6 @@ def test_list_cases_for_rsin_user_with_vestigingsnummer(self, m):

self.client.force_login(user=self.eherkenning_user)

self.config.fetch_eherkenning_zaken_with_rsin = True
self.config.save()

m.reset_mock()

response = self.client.get(self.inner_url, HTTP_HX_REQUEST="true")
Expand Down Expand Up @@ -928,12 +924,13 @@ def test_list_cases_for_eherkenning_user_missing_rsin(self, m):
for mock in self.mocks:
mock._setUpMocks(m)

for group in self.api_groups:
group.fetch_eherkenning_zaken_with_rsin = True
group.save()

self.eherkenning_user.rsin = ""
self.eherkenning_user.save()

self.config.fetch_eherkenning_zaken_with_rsin = True
self.config.save()

m.reset_mock()

self.client.force_login(user=self.eherkenning_user)
Expand Down Expand Up @@ -1179,10 +1176,12 @@ def setUp(self):
ZGWApiGroupConfigFactory(
zrc_service__api_root=ZAKEN_ROOT,
form_service__api_root=FORMS_ROOT,
fetch_eherkenning_zaken_with_rsin=False,
)
ZGWApiGroupConfigFactory(
zrc_service__api_root=ANOTHER_ZAKEN_ROOT,
form_service__api_root=ANOTHER_FORMS_ROOT,
fetch_eherkenning_zaken_with_rsin=False,
)

@requests_mock.Mocker()
Expand Down
1 change: 1 addition & 0 deletions src/open_inwoner/openzaak/tests/test_notification_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ def setUpServices(cls):
zrc_service__api_root=ZAKEN_ROOT,
drc_service__api_root=DOCUMENTEN_ROOT,
form_service=None,
fetch_eherkenning_zaken_with_rsin=False,
)


Expand Down
3 changes: 2 additions & 1 deletion src/open_inwoner/openzaak/tests/test_notification_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class NotificationHandlerUtilsTestCase(TestCase):
def setUp(self):
self.api_group = ZGWApiGroupConfigFactory(
zrc_service__api_root=ZAKEN_ROOT,
fetch_eherkenning_zaken_with_rsin=False,
)

def test_send_case_update_email(self):
Expand Down Expand Up @@ -236,6 +237,6 @@ def test_get_initiator_users_from_roles(self):

# of all the Users with Roles only these match all conditions
expected = {user_1, user_2}
actual = _get_initiator_users_from_roles(roles)
actual = _get_initiator_users_from_roles(roles, api_group=self.api_group)

self.assertEqual(set(actual), expected)
Loading

0 comments on commit a344ddc

Please sign in to comment.