diff --git a/app/main/forms.py b/app/main/forms.py index b33f3ef42..4dcf5818e 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -45,6 +45,7 @@ from app.main.validators import ( ValidEmail, ValidGovEmail, ) +from app.models.organisation import Organisation from app.models.roles_and_permissions import permissions, roles from app.utils import guess_name_from_email_address @@ -242,33 +243,23 @@ class ForgivingIntegerField(StringField): return super().__call__(value=value, **kwargs) -def organisation_type(label='Who runs this service?'): - return RadioField( - label, - choices=[ - ('central', 'Central government'), - ('local', 'Local government'), - ('nhs_central', 'NHS – central government agency or public body'), - ('nhs_local', 'NHS Trust or Clinical Commissioning Group'), - ('nhs_local', 'GP practice'), - ('emergency_service', 'Emergency service'), - ('school_or_college', 'School or college'), - ('other', 'Other'), - ], - validators=[DataRequired()], - ) - - -def nhs_organisation_type(label='Who runs this service?'): - return RadioField( - label, - choices=[ - ('nhs_central', 'NHS – central government agency or public body'), - ('nhs_local', 'NHS Trust or Clinical Commissioning Group'), - ('nhs_local', 'GP practice'), - ], - validators=[DataRequired()], - ) +class OrganisationTypeField(RadioField): + def __init__( + self, + *args, + include_only=None, + validators=None, + **kwargs + ): + super().__init__( + *args, + choices=[ + (value, label) for value, label in Organisation.TYPES + if not include_only or value in include_only + ], + validators=[DataRequired()] + (validators or []), + **kwargs + ) class FieldWithNoneOption(): @@ -544,7 +535,7 @@ class RenameOrganisationForm(StripWhitespaceForm): class OrganisationOrganisationTypeForm(StripWhitespaceForm): - organisation_type = organisation_type(label='What type of organisation is this?') + organisation_type = OrganisationTypeField('What type of organisation is this?') class OrganisationCrownStatusForm(StripWhitespaceForm): @@ -605,11 +596,14 @@ class CreateServiceForm(StripWhitespaceForm): validators=[ DataRequired(message='Can’t be empty') ]) - organisation_type = organisation_type() + organisation_type = OrganisationTypeField('Who runs this service?') class CreateNhsServiceForm(CreateServiceForm): - organisation_type = nhs_organisation_type() + organisation_type = OrganisationTypeField( + 'Who runs this service?', + include_only={'nhs_central', 'nhs_local', 'nhs_gp'}, + ) class NewOrganisationForm( diff --git a/app/models/organisation.py b/app/models/organisation.py index 5c6748f16..e617e295a 100644 --- a/app/models/organisation.py +++ b/app/models/organisation.py @@ -7,6 +7,17 @@ from app.notify_client.organisations_api_client import organisations_client class Organisation(JSONModel): + TYPES = ( + ('central', 'Central government'), + ('local', 'Local government'), + ('nhs_central', 'NHS – central government agency or public body'), + ('nhs_local', 'NHS Trust or Clinical Commissioning Group'), + ('nhs_gp', 'GP practice'), + ('emergency_service', 'Emergency service'), + ('school_or_college', 'School or college'), + ('other', 'Other'), + ) + ALLOWED_PROPERTIES = { 'id', 'name', @@ -98,6 +109,10 @@ class Organisation(JSONModel): def as_info_for_branding_request(self, fallback_domain): return self.name or 'Can’t tell (domain is {})'.format(fallback_domain) + @property + def organisation_type_label(self): + return dict(self.TYPES).get(self.organisation_type) + @property def crown_status_or_404(self): if self.crown is None: diff --git a/app/models/service.py b/app/models/service.py index f9dc2706b..5d4ce1df8 100644 --- a/app/models/service.py +++ b/app/models/service.py @@ -439,6 +439,10 @@ class Service(JSONModel): def organisation_type(self): return self.organisation.organisation_type or self._dict['organisation_type'] + @property + def organisation_type_label(self): + return dict(Organisation.TYPES).get(self.organisation_type) + @cached_property def inbound_number(self): return inbound_number_client.get_inbound_sms_number_for_service(self.id)['data'].get('number', '') diff --git a/app/templates/views/organisations/organisation/settings/index.html b/app/templates/views/organisations/organisation/settings/index.html index f45a6997e..793274947 100644 --- a/app/templates/views/organisations/organisation/settings/index.html +++ b/app/templates/views/organisations/organisation/settings/index.html @@ -25,15 +25,7 @@ {% endcall %} {% call row() %} {{ text_field('Sector') }} - {{ optional_text_field({ - 'central': 'Central government', - 'local': 'Local government', - 'nhs_central': 'NHS – central government agency or public body', - 'nhs_local': 'NHS Trust, GP practice or Clinical Commissioning Group', - 'emergency_service': 'Emergency service', - 'school_or_college': 'School or college', - 'other': 'Other', - }.get(current_org.organisation_type)) }} + {{ optional_text_field(current_org.organisation_type_label) }} {{ edit_field( 'Change', url_for('.edit_organisation_type', org_id=current_org.id) diff --git a/app/templates/views/service-settings.html b/app/templates/views/service-settings.html index 60d6b7acc..6f4febc85 100644 --- a/app/templates/views/service-settings.html +++ b/app/templates/views/service-settings.html @@ -260,7 +260,7 @@
{% if current_user.has_permissions('manage_service') %} - To remove these restrictions, you can send us a + To remove these restrictions, you can send us a request to go live. {% else %} Your service manager can ask to have these restrictions removed. @@ -324,15 +324,7 @@ {% endif %} {% if current_service.organisation_type %}