From 8c5a28a514e34c990e6302a6ad1e24848aba3cd9 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Wed, 5 Mar 2025 17:51:15 +0000 Subject: [PATCH] Selecting the profit status dependent on the provider type --- app/controllers/organisations_controller.rb | 2 +- .../controllers/organisations_controller.js | 16 +++++++++++--- app/helpers/organisations_helper.rb | 22 ++++++++++++++----- app/models/organisation.rb | 6 +++++ 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb index ea0b154e5..8c073d1af 100644 --- a/app/controllers/organisations_controller.rb +++ b/app/controllers/organisations_controller.rb @@ -341,7 +341,7 @@ private end def org_params - params.require(:organisation).permit(:name, :address_line1, :address_line2, :postcode, :phone, :holds_own_stock, :provider_type, :housing_registration_no, :active) + params.require(:organisation).permit(:name, :address_line1, :address_line2, :postcode, :phone, :holds_own_stock, :provider_type, :housing_registration_no, :active, :profit_status, :group_member, :group) end def rent_period_params diff --git a/app/frontend/controllers/organisations_controller.js b/app/frontend/controllers/organisations_controller.js index 0a8934418..56042e42b 100644 --- a/app/frontend/controllers/organisations_controller.js +++ b/app/frontend/controllers/organisations_controller.js @@ -1,16 +1,26 @@ import { Controller } from '@hotwired/stimulus' +const profitStatusSelect = document.getElementById('organisation-profit-status-field'); +const localAuthorityOption = profitStatusSelect.querySelector('option[value="local_authority"]'); +const nonProfitOption = profitStatusSelect.querySelector('option[value="non_profit"]'); +const profitOption = profitStatusSelect.querySelector('option[value="profit"]'); export default class extends Controller { updateProfitStatusOptions(event) { const providerType = event.target.value; - const profitStatusSelect = document.getElementById('organisation-profit-status-field'); if (profitStatusSelect) { profitStatusSelect.disabled = false; + localAuthorityOption.hidden = false; + nonProfitOption.hidden = false; + profitOption.hidden = false; if (providerType === "LA") { - profitStatusSelect.value = "3"; - profitStatusSelect.disabled = true; + profitStatusSelect.value = "local_authority"; + nonProfitOption.hidden = true; + profitOption.hidden = true; + } else if (providerType === "PRP") { + profitStatusSelect.value = ""; + localAuthorityOption.hidden = true; } } } diff --git a/app/helpers/organisations_helper.rb b/app/helpers/organisations_helper.rb index 90103cee7..2a011af64 100644 --- a/app/helpers/organisations_helper.rb +++ b/app/helpers/organisations_helper.rb @@ -24,7 +24,7 @@ module OrganisationsHelper attributes << { name: "Group number", value: organisation.group, editable: current_user.support? } end - attributes << { name: "For profit", value: organisation.profit_status, editable: current_user.support? } + attributes << { name: "For profit", value: organisation.display_profit_status, editable: current_user.support? } attributes << { name: "Rent periods", value: organisation.rent_period_labels, editable: true, format: :bullet } attributes << { name: "Data Sharing Agreement" } attributes << { name: "Status", value: status_tag(organisation.status) + delete_organisation_text(organisation), editable: false } @@ -79,12 +79,24 @@ module OrganisationsHelper end def group_organisation_options - null_option = [OpenStruct.new(id: "", name: "Select an option")] - organisations = Organisation.visible.map { |org| OpenStruct.new(id: org.id, name: org.name) } + null_option = [OpenStruct.new(id: "", name: "Select an option", group: nil)] + organisations = Organisation.visible.map { |org| OpenStruct.new(id: org.id, name: org.name, group: org.group) } null_option + organisations end - def profit_status_options - Organisation::PROFIT_STATUS.map { |key, value| OpenStruct.new(id: value, name: key.to_s.humanize) } + def profit_status_options(provider_type = nil) + null_option = [OpenStruct.new(id: "", name: "Select an option")] + profit_statuses = Organisation::PROFIT_STATUS.map do |key, _value| + OpenStruct.new(id: key, name: Organisation::DISPLAY_PROFIT_STATUS[key]) + end + + case provider_type + when "LA" + profit_statuses.select! { |option| option.id == :local_authority } + when "PRP" + profit_statuses.reject! { |option| option.id == :local_authority } + end + + null_option + profit_statuses end end diff --git a/app/models/organisation.rb b/app/models/organisation.rb index a1ccc95f8..5d292cb13 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -144,6 +144,12 @@ class Organisation < ApplicationRecord DISPLAY_PROVIDER_TYPE[provider_type.to_sym] end + DISPLAY_PROFIT_STATUS = { "non_profit": "Non-profit", "profit": "Profit", "local_authority": "Local Authority" }.freeze + + def display_profit_status + DISPLAY_PROFIT_STATUS.fetch(profit_status&.to_sym, "") + end + def has_managing_agents? managing_agents.count.positive? end