From bb8aceea240f74e4577568aba687de15a85838fe Mon Sep 17 00:00:00 2001
From: Tore Brede <Tore.Brede@uib.no>
Date: Wed, 16 Feb 2022 09:33:40 +0100
Subject: [PATCH] GREG-214: Switching to showing orgreg ID in dropdown for
 units

---
 frontend/src/hooks/useOus/index.tsx           |  1 +
 .../sponsor/register/stepPersonForm.tsx       |  2 +-
 greg/api/serializers/organizational_unit.py   |  2 +-
 greg/models.py                                | 10 ++++++
 gregui/tests/api/views/test_ous.py            | 35 +++++++++++++++++++
 5 files changed, 48 insertions(+), 2 deletions(-)
 create mode 100644 gregui/tests/api/views/test_ous.py

diff --git a/frontend/src/hooks/useOus/index.tsx b/frontend/src/hooks/useOus/index.tsx
index 2defbb73..c2f1205b 100644
--- a/frontend/src/hooks/useOus/index.tsx
+++ b/frontend/src/hooks/useOus/index.tsx
@@ -5,6 +5,7 @@ type OuData = {
   id: number
   nb: string
   en: string
+  orgreg_id?: string
 }
 
 function useOus(): OuData[] | undefined {
diff --git a/frontend/src/routes/sponsor/register/stepPersonForm.tsx b/frontend/src/routes/sponsor/register/stepPersonForm.tsx
index 5ac3a41a..eadf6d0f 100644
--- a/frontend/src/routes/sponsor/register/stepPersonForm.tsx
+++ b/frontend/src/routes/sponsor/register/stepPersonForm.tsx
@@ -243,7 +243,7 @@ const StepPersonForm = forwardRef(
                   .sort(i18n.language === 'en' ? enSort : nbSort)
                   .map((ou) => (
                     <MenuItem key={ou.id.toString()} value={ou.id}>
-                      {getOuName(ou)} ({ou.id})
+                      {getOuName(ou)} ({ou.orgreg_id ?? ''})
                     </MenuItem>
                   ))}
               </TextField>
diff --git a/greg/api/serializers/organizational_unit.py b/greg/api/serializers/organizational_unit.py
index 1053f79b..15130f4f 100644
--- a/greg/api/serializers/organizational_unit.py
+++ b/greg/api/serializers/organizational_unit.py
@@ -29,4 +29,4 @@ class SponsorOrgUnitsSerializer(ModelSerializer):
 
     class Meta:
         model = OrganizationalUnit
-        fields = ["id", "nb", "en"]
+        fields = ["id", "nb", "en", "orgreg_id"]
diff --git a/greg/models.py b/greg/models.py
index fe55c06e..c75a5dd2 100644
--- a/greg/models.py
+++ b/greg/models.py
@@ -10,6 +10,7 @@ from django.db.models import Q
 from django.utils import timezone
 
 from greg.managers import PersonManager
+from gregsite.settings.base import ORGREG_NAME
 
 
 class BaseModel(DirtyFieldsMixin, models.Model):
@@ -472,6 +473,15 @@ class OrganizationalUnit(BaseModel):
     active = models.BooleanField(default=True)
     deleted = models.BooleanField(default=False)
 
+    @property
+    def orgreg_id(self) -> Optional[str]:
+        """The orgreg ID if it exists"""
+        return (
+            self.identifiers.filter(name=ORGREG_NAME)
+            .values_list("value", flat=True)
+            .first()
+        )
+
     def __repr__(self) -> str:
         return "{}(id={!r}, name_en={!r}, parent={!r})".format(
             self.__class__.__name__, self.pk, self.name_en, self.parent
diff --git a/gregui/tests/api/views/test_ous.py b/gregui/tests/api/views/test_ous.py
new file mode 100644
index 00000000..de64c656
--- /dev/null
+++ b/gregui/tests/api/views/test_ous.py
@@ -0,0 +1,35 @@
+import pytest
+from rest_framework.reverse import reverse
+
+from greg.models import OuIdentifier
+from gregsite.settings.base import ORGREG_NAME
+
+
+@pytest.mark.django_db
+def test_orgreg_field_populated_if_identifier_present(
+    unit_foo, client, log_in, user_sponsor, sponsor_foo
+):
+    orgreg_id = "200"
+    OuIdentifier.objects.create(
+        source="orgreg", name=ORGREG_NAME, value=orgreg_id, orgunit=unit_foo
+    )
+    log_in(user_sponsor)
+
+    resp = client.get(reverse("gregui-v1:ou-list"))
+    data = resp.json()
+
+    assert len(data) == 1
+    assert data[0]["orgreg_id"] == orgreg_id
+
+
+@pytest.mark.django_db
+def test_orgreg_field_empty_if_identifier_not_present(
+    unit_foo, client, log_in, user_sponsor, sponsor_foo
+):
+    log_in(user_sponsor)
+
+    resp = client.get(reverse("gregui-v1:ou-list"))
+    data = resp.json()
+
+    assert len(data) == 1
+    assert data[0]["orgreg_id"] is None
-- 
GitLab