From ee42f74cdd2daa3643228eee7223e3325bd85245 Mon Sep 17 00:00:00 2001
From: Andreas Ellewsen <ae@uio.no>
Date: Wed, 27 Oct 2021 09:13:24 +0200
Subject: [PATCH] Remove id suffix from ou model fields

---
 .../sponsor/register/stepRegistration.tsx     |  2 +-
 greg/api/serializers/person.py                |  4 ++--
 greg/migrations/0011_role_remove_id_suffix.py | 23 +++++++++++++++++++
 greg/models.py                                |  4 ++--
 greg/tests/api/test_person.py                 | 20 ++++++++--------
 greg/tests/conftest.py                        |  4 ++--
 greg/tests/models/test_person.py              |  8 +++----
 greg/tests/test_expire_role.py                |  4 ++--
 greg/tests/test_notifications.py              | 12 +++++-----
 gregui/api/serializers/invitation.py          |  2 +-
 gregui/api/serializers/role.py                |  2 +-
 gregui/api/views/invitation.py                | 17 +++++++-------
 gregui/api/views/person.py                    |  4 ++--
 gregui/api/views/userinfo.py                  | 16 ++++++-------
 gregui/tests/api/test_invite_guest.py         |  2 +-
 gregui/tests/conftest.py                      |  4 ++--
 gregui/views.py                               |  6 ++---
 17 files changed, 78 insertions(+), 56 deletions(-)
 create mode 100644 greg/migrations/0011_role_remove_id_suffix.py

diff --git a/frontend/src/routes/sponsor/register/stepRegistration.tsx b/frontend/src/routes/sponsor/register/stepRegistration.tsx
index a93b29c9..8e4bd716 100644
--- a/frontend/src/routes/sponsor/register/stepRegistration.tsx
+++ b/frontend/src/routes/sponsor/register/stepRegistration.tsx
@@ -71,7 +71,7 @@ export default function StepRegistration() {
             ? null
             : format(formData.role_end as Date, 'yyyy-MM-dd'),
         comments: formData.comment,
-        orgunit_id: formData.ou_id,
+        orgunit: formData.ou_id,
       },
     }
 
diff --git a/greg/api/serializers/person.py b/greg/api/serializers/person.py
index 93958a21..16d362f7 100644
--- a/greg/api/serializers/person.py
+++ b/greg/api/serializers/person.py
@@ -15,8 +15,8 @@ class RoleSerializer(serializers.ModelSerializer):
             "id",
             "start_date",
             "end_date",
-            "sponsor_id",
-            "orgunit_id",
+            "sponsor",
+            "orgunit",
             "created",
             "updated",
             "type",
diff --git a/greg/migrations/0011_role_remove_id_suffix.py b/greg/migrations/0011_role_remove_id_suffix.py
new file mode 100644
index 00000000..8af30b8c
--- /dev/null
+++ b/greg/migrations/0011_role_remove_id_suffix.py
@@ -0,0 +1,23 @@
+# Generated by Django 3.2.8 on 2021-10-26 14:43
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('greg', '0010_roletype_max_days'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='role',
+            old_name='orgunit_id',
+            new_name='orgunit',
+        ),
+        migrations.RenameField(
+            model_name='role',
+            old_name='sponsor_id',
+            new_name='sponsor',
+        ),
+    ]
diff --git a/greg/models.py b/greg/models.py
index f0c4876f..a57558b7 100644
--- a/greg/models.py
+++ b/greg/models.py
@@ -203,7 +203,7 @@ class Role(BaseModel):
     type = models.ForeignKey(
         "RoleType", on_delete=models.PROTECT, related_name="persons"
     )
-    orgunit_id = models.ForeignKey(
+    orgunit = models.ForeignKey(
         "OrganizationalUnit", on_delete=models.PROTECT, related_name="unit_person_role"
     )
     # The start date can be null for people that are already
@@ -213,7 +213,7 @@ class Role(BaseModel):
     contact_person_unit = models.TextField(blank=True)
     comments = models.TextField(blank=True)
     available_in_search = models.BooleanField(default=False)
-    sponsor_id = models.ForeignKey(
+    sponsor = models.ForeignKey(
         "Sponsor", on_delete=models.PROTECT, related_name="sponsor_role"
     )
 
diff --git a/greg/tests/api/test_person.py b/greg/tests/api/test_person.py
index 9a09193c..791bd937 100644
--- a/greg/tests/api/test_person.py
+++ b/greg/tests/api/test_person.py
@@ -55,8 +55,8 @@ def role_data_guest(
         "type": "Test Guest",
         "start_date": "2021-06-10",
         "end_date": "2021-08-10",
-        "sponsor_id": sponsor_bar.id,
-        "orgunit_id": unit_foo.id,
+        "sponsor": sponsor_bar.id,
+        "orgunit": unit_foo.id,
     }
 
 
@@ -131,8 +131,8 @@ def test_add_role(
         "type": "visiting_professor",
         "start_date": "2021-06-10",
         "end_date": "2021-08-10",
-        "sponsor_id": "1",
-        "orgunit_id": "1",
+        "sponsor": "1",
+        "orgunit": "1",
     }
     response = client.post(url, role_data)
 
@@ -425,8 +425,8 @@ def test_add_duplicate_role_fails(client, person_foo: Person, role_person_foo):
         "type": role_person_foo.type.identifier,
         "start_date": role_person_foo.start_date,
         "end_date": role_person_foo.end_date,
-        "sponsor_id": role_person_foo.sponsor_id.id,
-        "orgunit_id": role_person_foo.unit_id,
+        "sponsor": role_person_foo.sponsor.id,
+        "orgunit": role_person_foo.unit_id,
     }
     response = client.post(url, role_data)
     # If the role cannot be create the return code is 400
@@ -453,8 +453,8 @@ def test_filter_active_includes_person_with_active_role(
         person=person_foo,
         type=role_type_test_guest,
         end_date=date_today + datetime.timedelta(days=1),
-        sponsor_id=sponsor_guy,
-        orgunit_id=unit_foo,
+        sponsor=sponsor_guy,
+        orgunit=unit_foo,
     )
 
     url = reverse("v1:person-list")
@@ -491,8 +491,8 @@ def test_filter_active_value_false(
         person=person_foo,
         type=role_type_test_guest,
         end_date=date_today - datetime.timedelta(days=1),
-        sponsor_id=sponsor_guy,
-        orgunit_id=unit_foo,
+        sponsor=sponsor_guy,
+        orgunit=unit_foo,
     )
 
     url = reverse("v1:person-list")
diff --git a/greg/tests/conftest.py b/greg/tests/conftest.py
index 1998517c..1650c63b 100644
--- a/greg/tests/conftest.py
+++ b/greg/tests/conftest.py
@@ -152,8 +152,8 @@ def role_person_foo(
         type=role_type_test_guest,
         start_date="2021-08-02",
         end_date="2021-08-06",
-        sponsor_id=sponsor_guy,
-        orgunit_id=unit_foo,
+        sponsor=sponsor_guy,
+        orgunit=unit_foo,
     )
     return Role.objects.get(id=role.id)
 
diff --git a/greg/tests/models/test_person.py b/greg/tests/models/test_person.py
index 396b0f0e..39be76df 100644
--- a/greg/tests/models/test_person.py
+++ b/greg/tests/models/test_person.py
@@ -98,14 +98,14 @@ def test_add_multiple_roles_to_person(
     role_with(
         person=person,
         type=role_type_foo,
-        orgunit_id=ou,
-        sponsor_id=Sponsor.objects.create(feide_id="foosponsor@uio.no"),
+        orgunit=ou,
+        sponsor=Sponsor.objects.create(feide_id="foosponsor@uio.no"),
     )
     role_with(
         person=person,
         type=role_type_bar,
-        orgunit_id=ou,
-        sponsor_id=Sponsor.objects.create(feide_id="barsponsor@uio.no"),
+        orgunit=ou,
+        sponsor=Sponsor.objects.create(feide_id="barsponsor@uio.no"),
     )
     assert person.roles.count() == 2
 
diff --git a/greg/tests/test_expire_role.py b/greg/tests/test_expire_role.py
index 77ca940c..0eda7855 100644
--- a/greg/tests/test_expire_role.py
+++ b/greg/tests/test_expire_role.py
@@ -33,12 +33,12 @@ def role(
     return Role.objects.create(
         person=person,
         type=role_type_bar,
-        orgunit_id=unit_foo,
+        orgunit=unit_foo,
         start_date="2020-03-05",
         end_date=datetime.today() + timedelta(days=30),
         contact_person_unit="Contact Person",
         available_in_search=True,
-        sponsor_id=sponsor_guy,
+        sponsor=sponsor_guy,
     )
 
 
diff --git a/greg/tests/test_notifications.py b/greg/tests/test_notifications.py
index ad147588..290fb5cf 100644
--- a/greg/tests/test_notifications.py
+++ b/greg/tests/test_notifications.py
@@ -73,8 +73,8 @@ def test_role_add_notification(
         type=role_type_foo,
         start_date="2021-05-06",
         end_date="2021-10-20",
-        orgunit_id=org_unit_bar,
-        sponsor_id=sponsor,
+        orgunit=org_unit_bar,
+        sponsor=sponsor,
     )
     notifications = Notification.objects.filter(object_type="Role")
     assert len(notifications) == 1
@@ -97,8 +97,8 @@ def test_role_update_notification(
         type=role_type_foo,
         start_date="2021-05-06",
         end_date="2021-10-20",
-        orgunit_id=org_unit_bar,
-        sponsor_id=sponsor,
+        orgunit=org_unit_bar,
+        sponsor=sponsor,
     )
     assert len(person.roles.all()) == 1
     person_role = person.roles.all()[0]
@@ -125,8 +125,8 @@ def test_role_delete_notification(
         type=role_type_foo,
         start_date="2021-05-06",
         end_date="2021-10-20",
-        orgunit_id=org_unit_bar,
-        sponsor_id=sponsor,
+        orgunit=org_unit_bar,
+        sponsor=sponsor,
     )
     assert len(person.roles.all()) == 1
     person_role = person.roles.all()[0]
diff --git a/gregui/api/serializers/invitation.py b/gregui/api/serializers/invitation.py
index b1dcda9e..c526a986 100644
--- a/gregui/api/serializers/invitation.py
+++ b/gregui/api/serializers/invitation.py
@@ -30,7 +30,7 @@ class InviteGuestSerializer(serializers.ModelSerializer):
                 source="greg",
             )
             role_data["person"] = person
-            role_data["sponsor_id"] = user.sponsor
+            role_data["sponsor"] = user.sponsor
             role = Role.objects.create(**role_data)
             invitation = Invitation.objects.create(role=role)
             InvitationLink.objects.create(
diff --git a/gregui/api/serializers/role.py b/gregui/api/serializers/role.py
index 26f3db97..f9791220 100644
--- a/gregui/api/serializers/role.py
+++ b/gregui/api/serializers/role.py
@@ -43,7 +43,7 @@ class RoleSerializerUi(serializers.ModelSerializer):
     class Meta:
         model = Role
         fields = [
-            "orgunit_id",
+            "orgunit",
             "start_date",
             "type",
             "end_date",
diff --git a/gregui/api/views/invitation.py b/gregui/api/views/invitation.py
index 98a0bd8e..5ffca10a 100644
--- a/gregui/api/views/invitation.py
+++ b/gregui/api/views/invitation.py
@@ -30,7 +30,7 @@ class CreateInvitationView(CreateAPIView):
         "last_name": "sss",
         "date_of_birth": null,
         "role": {
-            "orgunit_id": 1,
+            "orgunit": 1,
             "start_date": null,
             "type": 1,
             "end_date": "2021-12-15",
@@ -58,16 +58,15 @@ class CreateInvitationView(CreateAPIView):
         """
         sponsor_user = GregUserProfile.objects.get(user=request.user)
         serializer = self.serializer_class(
-            data=request.data, context={"request": request}
+            data=request.data,
+            context={"request": request, "sponsor": sponsor_user.sponsor},
         )
         serializer.is_valid(raise_exception=True)
-
-        # TODO: check that sponsor has access to OU
         person = serializer.save()
 
         invitationlink = InvitationLink.objects.filter(
-            invitation__role__person=person.id,
-            invitation__role__sponsor_id=sponsor_user.sponsor,
+            invitation__role__person_id=person.id,
+            invitation__role__sponsor_id=sponsor_user.sponsor_id,
         )
         # TODO: send email to invited guest
         print(invitationlink)
@@ -133,7 +132,7 @@ class InvitedGuestView(GenericAPIView):
         invite_link = InvitationLink.objects.get(uuid=invite_id)
         role = invite_link.invitation.role
         person = role.person
-        sponsor = role.sponsor_id
+        sponsor = role.sponsor
 
         # If the user is not logged in then tell the client to take him through the manual registration process
         session_type = (
@@ -165,8 +164,8 @@ class InvitedGuestView(GenericAPIView):
                 "last_name": sponsor.last_name,
             },
             "role": {
-                "ou_name_nb": role.orgunit_id.name_nb,
-                "ou_name_en": role.orgunit_id.name_en,
+                "ou_name_nb": role.orgunit.name_nb,
+                "ou_name_en": role.orgunit.name_en,
                 "role_name_nb": role.type.name_nb,
                 "role_name_en": role.type.name_en,
                 "start": role.start_date,
diff --git a/gregui/api/views/person.py b/gregui/api/views/person.py
index edf0239f..79326f42 100644
--- a/gregui/api/views/person.py
+++ b/gregui/api/views/person.py
@@ -34,8 +34,8 @@ class PersonView(APIView):
                     "id": role.id,
                     "name_nb": role.type.name_nb,
                     "name_en": role.type.name_en,
-                    "ou_nb": role.orgunit_id.name_nb,
-                    "ou_en": role.orgunit_id.name_en,
+                    "ou_nb": role.orgunit.name_nb,
+                    "ou_en": role.orgunit.name_en,
                     "start_date": role.start_date,
                     "end_date": role.end_date,
                     "max_days": role.type.max_days,
diff --git a/gregui/api/views/userinfo.py b/gregui/api/views/userinfo.py
index 3a4a0d41..980cbd31 100644
--- a/gregui/api/views/userinfo.py
+++ b/gregui/api/views/userinfo.py
@@ -68,16 +68,16 @@ class UserInfoView(APIView):
                         {
                             "roles": [
                                 {
-                                    "ou_name_nb": role.orgunit_id.name_nb,
-                                    "ou_name_en": role.orgunit_id.name_en,
+                                    "ou_name_nb": role.orgunit.name_nb,
+                                    "ou_name_en": role.orgunit.name_en,
                                     "role_name_nb": role.type.name_nb,
                                     "role_name_en": role.type.name_en,
                                     "start": role.start_date,
                                     "end": role.end_date,
                                     "comments": role.comments,
                                     "sponsor": {
-                                        "first_name": role.sponsor_id.first_name,
-                                        "last_name": role.sponsor_id.last_name,
+                                        "first_name": role.sponsor.first_name,
+                                        "last_name": role.sponsor.last_name,
                                     },
                                 }
                                 for role in roles.all()
@@ -105,16 +105,16 @@ class UserInfoView(APIView):
                 "passport": passports and passports.value,
                 "roles": [
                     {
-                        "ou_name_nb": role.orgunit_id.name_nb,
-                        "ou_name_en": role.orgunit_id.name_en,
+                        "ou_name_nb": role.orgunit.name_nb,
+                        "ou_name_en": role.orgunit.name_en,
                         "role_name_nb": role.type.name_nb,
                         "role_name_en": role.type.name_en,
                         "start": role.start_date,
                         "end": role.end_date,
                         "comments": role.comments,
                         "sponsor": {
-                            "first_name": role.sponsor_id.first_name,
-                            "last_name": role.sponsor_id.last_name,
+                            "first_name": role.sponsor.first_name,
+                            "last_name": role.sponsor.last_name,
                         },
                     }
                     for role in person.roles.all()
diff --git a/gregui/tests/api/test_invite_guest.py b/gregui/tests/api/test_invite_guest.py
index 55a962e3..46f8b108 100644
--- a/gregui/tests/api/test_invite_guest.py
+++ b/gregui/tests/api/test_invite_guest.py
@@ -16,7 +16,7 @@ def test_invite_guest(client, user_sponsor, unit_foo, role_type_foo):
         "role": {
             "start_date": "2019-08-06",
             "end_date": "2019-08-10",
-            "orgunit_id": unit_foo.id,
+            "orgunit": unit_foo.id,
             "type": role_type_foo.id,
         },
     }
diff --git a/gregui/tests/conftest.py b/gregui/tests/conftest.py
index f4cd467c..1bd22154 100644
--- a/gregui/tests/conftest.py
+++ b/gregui/tests/conftest.py
@@ -190,8 +190,8 @@ def person(person_foo_data) -> Person:
 def role(person, sponsor_guy, unit_foo, role_type_foo) -> Role:
     role = Role.objects.create(
         person=person,
-        sponsor_id=sponsor_guy,
-        orgunit_id=unit_foo,
+        sponsor=sponsor_guy,
+        orgunit=unit_foo,
         end_date="2050-10-15",
         type_id=role_type_foo.id,
     )
diff --git a/gregui/views.py b/gregui/views.py
index 15e6e264..4721cccb 100644
--- a/gregui/views.py
+++ b/gregui/views.py
@@ -113,8 +113,8 @@ class GuestInfoView(APIView):
                                 "id": role.id,
                                 "name_nb": role.type.name_nb,
                                 "name_en": role.type.name_en,
-                                "ou_nb": role.orgunit_id.name_nb,
-                                "ou_en": role.orgunit_id.name_en,
+                                "ou_nb": role.orgunit.name_nb,
+                                "ou_en": role.orgunit.name_en,
                                 "start_date": role.start_date,
                                 "end_date": role.end_date,
                                 "max_days": role.type.max_days,
@@ -123,7 +123,7 @@ class GuestInfoView(APIView):
                         ],
                     }
                     for person in Person.objects.filter(
-                        roles__sponsor_id=user.sponsor
+                        roles__sponsor=user.sponsor
                     ).distinct()
                 ]
             }
-- 
GitLab