From 0c2b586e40c614edd844be1c7375203b30d5a847 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Thu, 11 Nov 2021 14:35:55 +0000 Subject: [PATCH] Make organisations natively sortable --- app/main/views/organisations.py | 2 +- app/models/__init__.py | 6 +++ app/models/organisation.py | 9 ++++- app/models/service.py | 7 +--- app/templates/views/organisations/index.html | 2 +- .../views/organisations/test_organisations.py | 40 +++++++++++++------ 6 files changed, 45 insertions(+), 21 deletions(-) diff --git a/app/main/views/organisations.py b/app/main/views/organisations.py index ac4a3e221..5c9eea7d0 100644 --- a/app/main/views/organisations.py +++ b/app/main/views/organisations.py @@ -116,7 +116,7 @@ def add_organisation_from_nhs_local_service(service_id): form = AddNHSLocalOrganisationForm(organisation_choices=[ (organisation.id, organisation.name) - for organisation in AllOrganisations() + for organisation in sorted(AllOrganisations()) if organisation.organisation_type == Organisation.TYPE_NHS_LOCAL ]) diff --git a/app/models/__init__.py b/app/models/__init__.py index 0acd9a31a..2fd7bf723 100644 --- a/app/models/__init__.py +++ b/app/models/__init__.py @@ -60,3 +60,9 @@ class PaginatedModelList(ModelList): self.items = response[self.response_key] self.prev_page = response.get('links', {}).get('prev', None) self.next_page = response.get('links', {}).get('next', None) + + +class SortByNameMixin(): + + def __lt__(self, other): + return self.name.lower() < other.name.lower() diff --git a/app/models/organisation.py b/app/models/organisation.py index bfb0fe9f2..cb9aa53ac 100644 --- a/app/models/organisation.py +++ b/app/models/organisation.py @@ -1,13 +1,18 @@ from flask import abort from werkzeug.utils import cached_property -from app.models import JSONModel, ModelList, SerialisedModelCollection +from app.models import ( + JSONModel, + ModelList, + SerialisedModelCollection, + SortByNameMixin, +) from app.notify_client.email_branding_client import email_branding_client from app.notify_client.letter_branding_client import letter_branding_client from app.notify_client.organisations_api_client import organisations_client -class Organisation(JSONModel): +class Organisation(JSONModel, SortByNameMixin): TYPE_CENTRAL = 'central' TYPE_LOCAL = 'local' diff --git a/app/models/service.py b/app/models/service.py index ce77234c5..2a995c6d8 100644 --- a/app/models/service.py +++ b/app/models/service.py @@ -2,7 +2,7 @@ from flask import abort, current_app from notifications_utils.serialised_model import SerialisedModelCollection from werkzeug.utils import cached_property -from app.models import JSONModel +from app.models import JSONModel, SortByNameMixin from app.models.contact_list import ContactLists from app.models.job import ( ImmediateJobs, @@ -27,7 +27,7 @@ from app.notify_client.template_folder_api_client import ( from app.utils import get_default_sms_sender -class Service(JSONModel): +class Service(JSONModel, SortByNameMixin): ALLOWED_PROPERTIES = { 'active', @@ -78,9 +78,6 @@ class Service(JSONModel): def from_id(cls, service_id): return cls(service_api_client.get_service(service_id)['data']) - def __lt__(self, other): - return self.name.lower() < other.name.lower() - @property def permissions(self): return self._dict.get('permissions', self.TEMPLATE_TYPES) diff --git a/app/templates/views/organisations/index.html b/app/templates/views/organisations/index.html index c9a6fd8e3..71ae2752a 100644 --- a/app/templates/views/organisations/index.html +++ b/app/templates/views/organisations/index.html @@ -14,7 +14,7 @@