diff --git a/app/policies/location_policy.rb b/app/policies/location_policy.rb index f10f96ef5..5d6d6d467 100644 --- a/app/policies/location_policy.rb +++ b/app/policies/location_policy.rb @@ -16,14 +16,14 @@ class LocationPolicy if location == Location user.data_coordinator? else - user.data_coordinator? && user.organisation == scheme&.owning_organisation + user.data_coordinator? && scheme_owned_by_user_org_or_stock_owner end end def update? return true if user.support? - user.data_coordinator? && scheme&.owning_organisation == user.organisation + user.data_coordinator? && scheme_owned_by_user_org_or_stock_owner end %w[ @@ -51,7 +51,7 @@ class LocationPolicy define_method method_name do return true if user.support? - user.data_coordinator? && scheme&.owning_organisation == user.organisation + user.data_coordinator? && scheme_owned_by_user_org_or_stock_owner end end @@ -62,7 +62,7 @@ class LocationPolicy define_method method_name do return true if user.support? - user.organisation.parent_organisations.exists?(scheme&.owning_organisation_id) || scheme&.owning_organisation == user.organisation + scheme_owned_by_user_org_or_stock_owner end end @@ -71,4 +71,8 @@ private def scheme location.scheme end + + def scheme_owned_by_user_org_or_stock_owner + scheme&.owning_organisation == user.organisation || user.organisation.stock_owners.exists?(scheme&.owning_organisation_id) + end end diff --git a/app/views/schemes/details.html.erb b/app/views/schemes/details.html.erb index 06c841dc7..9b8e84e66 100644 --- a/app/views/schemes/details.html.erb +++ b/app/views/schemes/details.html.erb @@ -48,7 +48,10 @@ :description, legend: { text: "Is this scheme registered under the Care Standards Act 2000?", size: "m" } %> - <% organisations = Organisation.all.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> + <% all_orgs = Organisation.all.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> + <% user_org = [OpenStruct.new(id: current_user.organisation_id, name: current_user.organisation.name)] %> + <% stock_owners = current_user.organisation.stock_owners.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> + <% organisations = current_user.support? ? all_orgs : user_org + stock_owners %> <% if current_user.data_coordinator? && current_user.organisation.stock_owners.nil? %> <%= f.hidden_field :owning_organisation_id, value: current_user.organisation.id %> diff --git a/app/views/schemes/edit_name.html.erb b/app/views/schemes/edit_name.html.erb index f9b9af99c..b5f18f422 100644 --- a/app/views/schemes/edit_name.html.erb +++ b/app/views/schemes/edit_name.html.erb @@ -25,7 +25,10 @@ label: { text: "This scheme contains confidential information" } %> <% end %> - <% organisations = Organisation.all.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> + <% all_orgs = Organisation.all.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> + <% user_org = [OpenStruct.new(id: current_user.organisation_id, name: current_user.organisation.name)] %> + <% stock_owners = current_user.organisation.stock_owners.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> + <% organisations = current_user.support? ? all_orgs : user_org + stock_owners %> <% if current_user.data_coordinator? && current_user.organisation.stock_owners.nil? %> <%= f.hidden_field :owning_organisation_id, value: current_user.organisation.id %> diff --git a/app/views/schemes/new.html.erb b/app/views/schemes/new.html.erb index d9c80bb6a..2dadbe852 100644 --- a/app/views/schemes/new.html.erb +++ b/app/views/schemes/new.html.erb @@ -26,10 +26,6 @@ label: { text: "This scheme contains confidential information" } %> <% end %> - <% null_option = [OpenStruct.new(id: "", name: "Select an option")] %> - <% organisations = Organisation.all.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> - <% answer_options = null_option + organisations %> - <% scheme_types_selection = Scheme.scheme_types.keys.excluding("Missing").map { |key, _| OpenStruct.new(id: key, name: key.to_s.humanize) } %> <%= f.govuk_collection_radio_buttons :scheme_type, scheme_types_selection, @@ -48,6 +44,12 @@ :description, legend: { text: "Is this scheme registered under the Care Standards Act 2000?", size: "m" } %> + <% null_option = [OpenStruct.new(id: "", name: "Select an option")] %> + <% all_orgs = Organisation.all.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> + <% user_org = [OpenStruct.new(id: current_user.organisation_id, name: current_user.organisation.name)] %> + <% stock_owners = current_user.organisation.stock_owners.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> + <% answer_options = current_user.support? ? null_option + all_orgs : null_option + user_org + stock_owners %> + <% if current_user.data_coordinator? && current_user.organisation.stock_owners.nil? %> <%= f.hidden_field :owning_organisation_id, value: current_user.organisation.id %> <% else %>