diff --git a/app/frontend/controllers/index.js b/app/frontend/controllers/index.js index 944e32e2d..35385e46e 100644 --- a/app/frontend/controllers/index.js +++ b/app/frontend/controllers/index.js @@ -19,6 +19,8 @@ import FilterLayoutController from './filter_layout_controller.js' import TabsController from './tabs_controller.js' +import OrganisationsController from './organisations_controller.js' + application.register('accessible-autocomplete', AccessibleAutocompleteController) application.register('conditional-filter', ConditionalFilterController) application.register('conditional-question', ConditionalQuestionController) @@ -27,3 +29,4 @@ application.register('numeric-question', NumericQuestionController) application.register('filter-layout', FilterLayoutController) application.register('search', SearchController) application.register('tabs', TabsController) +application.register('organisations', OrganisationsController) diff --git a/app/frontend/controllers/organisations_controller.js b/app/frontend/controllers/organisations_controller.js new file mode 100644 index 000000000..855081dab --- /dev/null +++ b/app/frontend/controllers/organisations_controller.js @@ -0,0 +1,14 @@ +import { Controller } from '@hotwired/stimulus' + +export default class extends Controller { + static targets = ["groupSelect"] + + connect() { + this.toggleGroupSelect() + } + + toggleGroupSelect() { + const groupMemberYes = this.element.querySelector('input[name="organisation[group_member]"]:checked')?.value === 'true' + this.groupSelectTarget.style.display = groupMemberYes ? 'block' : 'none' + } +} diff --git a/app/models/organisation.rb b/app/models/organisation.rb index c3d0a8ca0..a1ccc95f8 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -53,7 +53,16 @@ class Organisation < ApplicationRecord PRP: 2, }.freeze + PROFIT_STATUS = { + non_profit: 1, + profit: 2, + local_authority: 3, + }.freeze + enum :provider_type, PROVIDER_TYPE + enum :profit_status, PROFIT_STATUS + + attribute :group_member, :boolean alias_method :la?, :LA? diff --git a/app/views/organisations/new.html.erb b/app/views/organisations/new.html.erb index 20d4d2cc6..0b3c85cbd 100644 --- a/app/views/organisations/new.html.erb +++ b/app/views/organisations/new.html.erb @@ -56,6 +56,37 @@ :name, legend: { text: "Does the organisation hold its own stock?", size: "m" } %> + <%= f.govuk_collection_radio_buttons :group_member, + [OpenStruct.new(id: true, name: "Yes"), OpenStruct.new(id: false, name: "No")], + :id, + :name, + legend: { text: "Is this organisation part of a housing provider group structure?", size: "m" }, + "data-action": "change->group-member#toggleGroupSelect" %> + + <% group_organisation_options = Organisation.visible.map { |org| OpenStruct.new(id: org.id, name: org.name) } %> + +
+ <%= f.govuk_collection_select :group, + group_organisation_options, + :id, + :name, + label: { text: "Search for an organisation that is part of the same group as this organisation", size: "m" }, + "data-controller": %w[accessible-autocomplete conditional-filter organisations] %> +
+ + <% profit_options = [ + OpenStruct.new(id: 1, name: "Non-profit"), + OpenStruct.new(id: 2, name: "Profit"), + OpenStruct.new(id: 3, name: "Local authority") + ] %> + + <%= f.govuk_collection_select :profit_status, + profit_options, + :id, + :name, + label: { text: "Is the organisation for-profit?", size: "m" }, + options: { disabled: [""], selected: @organisation.profit_status || "" } %> + <%= f.govuk_check_boxes_fieldset :rent_periods, legend: { text: "What are the rent periods for the organisation?" } do %> <% @rent_periods.map do |key, period| %> diff --git a/db/migrate/20250227085622_add_new_question_fields_to_organisation.rb b/db/migrate/20250227085622_add_new_question_fields_to_organisation.rb new file mode 100644 index 000000000..08b3ff2bf --- /dev/null +++ b/db/migrate/20250227085622_add_new_question_fields_to_organisation.rb @@ -0,0 +1,7 @@ +class AddNewQuestionFieldsToOrganisation < ActiveRecord::Migration[7.2] + def change + add_column :organisations, :profit_status, :integer + add_column :organisations, :group_member, :boolean + add_column :organisations, :group, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 894bb1638..f00ffb5d4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2025_01_10_150609) do +ActiveRecord::Schema[7.2].define(version: 2025_02_27_085622) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -84,7 +84,7 @@ ActiveRecord::Schema[7.2].define(version: 2025_01_10_150609) do t.datetime "last_accessed" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.check_constraint "log_type::text = ANY (ARRAY['lettings'::character varying, 'sales'::character varying]::text[])", name: "log_type_check" + t.check_constraint "log_type::text = ANY (ARRAY['lettings'::character varying::text, 'sales'::character varying::text])", name: "log_type_check" t.check_constraint "year >= 2000 AND year <= 2099", name: "year_check" end @@ -245,14 +245,14 @@ ActiveRecord::Schema[7.2].define(version: 2025_01_10_150609) do t.integer "hb" t.integer "hbrentshortfall" t.integer "property_relet" - t.datetime "mrcdate", precision: nil + t.datetime "mrcdate" t.integer "incref" - t.datetime "startdate", precision: nil + t.datetime "startdate" t.integer "armedforces" t.integer "first_time_property_let_as_social_housing" t.integer "unitletas" t.integer "builtype" - t.datetime "voiddate", precision: nil + t.datetime "voiddate" t.bigint "owning_organisation_id" t.bigint "managing_organisation_id" t.integer "renttype" @@ -373,6 +373,8 @@ ActiveRecord::Schema[7.2].define(version: 2025_01_10_150609) do t.integer "partner_under_16_value_check" t.integer "multiple_partners_value_check" t.bigint "created_by_id" + t.boolean "manual_address_entry_selected", default: false + t.integer "referral_type" t.index ["assigned_to_id"], name: "index_lettings_logs_on_assigned_to_id" t.index ["bulk_upload_id"], name: "index_lettings_logs_on_bulk_upload_id" t.index ["created_by_id"], name: "index_lettings_logs_on_created_by_id" @@ -546,6 +548,9 @@ ActiveRecord::Schema[7.2].define(version: 2025_01_10_150609) do t.datetime "available_from" t.datetime "discarded_at" t.datetime "schemes_deduplicated_at" + t.integer "profit_status" + t.boolean "group_member" + t.integer "group" t.index ["absorbing_organisation_id"], name: "index_organisations_on_absorbing_organisation_id" t.index ["name"], name: "index_organisations_on_name", unique: true t.index ["old_visible_id"], name: "index_organisations_on_old_visible_id", unique: true @@ -762,13 +767,14 @@ ActiveRecord::Schema[7.2].define(version: 2025_01_10_150609) do t.integer "partner_under_16_value_check" t.integer "multiple_partners_value_check" t.bigint "created_by_id" - t.integer "has_management_fee" - t.decimal "management_fee", precision: 10, scale: 2 t.integer "firststair" t.integer "numstair" t.decimal "mrentprestaircasing", precision: 10, scale: 2 t.datetime "lasttransaction" t.datetime "initialpurchase" + t.integer "has_management_fee" + t.decimal "management_fee", precision: 10, scale: 2 + t.boolean "manual_address_entry_selected", default: false t.index ["assigned_to_id"], name: "index_sales_logs_on_assigned_to_id" t.index ["bulk_upload_id"], name: "index_sales_logs_on_bulk_upload_id" t.index ["created_by_id"], name: "index_sales_logs_on_created_by_id" @@ -822,8 +828,8 @@ ActiveRecord::Schema[7.2].define(version: 2025_01_10_150609) do t.string "name" t.bigint "organisation_id" t.integer "sign_in_count", default: 0, null: false - t.datetime "current_sign_in_at", precision: nil - t.datetime "last_sign_in_at", precision: nil + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" t.integer "role"