From 5ca35ff44a2ecd18c31486246960c64eb02b2342 Mon Sep 17 00:00:00 2001 From: Evangelos Giataganas Date: Mon, 24 Feb 2025 12:44:05 +0200 Subject: [PATCH 1/6] Create LocalAuthorityApplicationType --- ...659_create_local_authority_application_types.rb | 14 ++++++++++++++ db/schema.rb | 14 +++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20250224101659_create_local_authority_application_types.rb diff --git a/db/migrate/20250224101659_create_local_authority_application_types.rb b/db/migrate/20250224101659_create_local_authority_application_types.rb new file mode 100644 index 000000000..4513cafd4 --- /dev/null +++ b/db/migrate/20250224101659_create_local_authority_application_types.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +class CreateLocalAuthorityApplicationTypes < ActiveRecord::Migration[7.2] + def change + create_table :local_authority_application_types do |t| + t.references :local_authority, null: false, foreign_key: true + t.references :application_type, null: false, foreign_key: true + + t.timestamps + end + + add_index :local_authority_application_types, [:local_authority_id, :application_type_id], unique: true, name: "index_local_authority_application_types" + end +end diff --git a/db/schema.rb b/db/schema.rb index d09ca3b86..47005e7fe 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_02_18_160812) do +ActiveRecord::Schema[7.2].define(version: 2025_02_24_101659) do # These are extensions that must be enabled in order to support this database enable_extension "btree_gin" enable_extension "plpgsql" @@ -513,6 +513,16 @@ t.index ["subdomain"], name: "index_local_authorities_on_subdomain", unique: true end + create_table "local_authority_application_types", force: :cascade do |t| + t.bigint "local_authority_id", null: false + t.bigint "application_type_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["application_type_id"], name: "ix_local_authority_application_types_on_application_type_id" + t.index ["local_authority_id", "application_type_id"], name: "index_local_authority_application_types", unique: true + t.index ["local_authority_id"], name: "ix_local_authority_application_types_on_local_authority_id" + end + create_table "local_authority_informatives", force: :cascade do |t| t.bigint "local_authority_id" t.string "title" @@ -1164,6 +1174,8 @@ add_foreign_key "evidence_groups", "immunity_details" add_foreign_key "fee_calculations", "planning_applications" add_foreign_key "immunity_details", "planning_applications" + add_foreign_key "local_authority_application_types", "application_types" + add_foreign_key "local_authority_application_types", "local_authorities" add_foreign_key "local_authority_policy_areas", "local_authorities" add_foreign_key "local_authority_policy_areas_references", "local_authority_policy_areas", column: "policy_area_id" add_foreign_key "local_authority_policy_areas_references", "local_authority_policy_references", column: "policy_reference_id" From 68f5b9595ddc11a08e5b0efc938232238cf4c6e2 Mon Sep 17 00:00:00 2001 From: Evangelos Giataganas Date: Mon, 24 Feb 2025 12:58:12 +0200 Subject: [PATCH 2/6] Migrate data to local_authority_application_types table --- app/models/application_type.rb | 3 +++ app/models/local_authority.rb | 3 +++ app/models/local_authority/application_type.rb | 8 ++++++++ ...4_migrate_local_authority_application_type.rb | 16 ++++++++++++++++ db/schema.rb | 2 +- 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 app/models/local_authority/application_type.rb create mode 100644 db/migrate/20250224104514_migrate_local_authority_application_type.rb diff --git a/app/models/application_type.rb b/app/models/application_type.rb index 6b8a93901..ca3afeb3c 100644 --- a/app/models/application_type.rb +++ b/app/models/application_type.rb @@ -36,6 +36,9 @@ class ApplicationType < ApplicationRecord belongs_to :legislation, optional: true has_many :planning_applications, -> { kept }, dependent: :restrict_with_exception + has_many :local_authority_application_types, class_name: "LocalAuthority::ApplicationType", dependent: :destroy + has_many :local_authorities, through: :local_authority_application_types + accepts_nested_attributes_for :legislation, :document_tags scope :not_retired, -> { where.not(status: "retired") } diff --git a/app/models/local_authority.rb b/app/models/local_authority.rb index 3ff67dde2..4e9ce8a56 100644 --- a/app/models/local_authority.rb +++ b/app/models/local_authority.rb @@ -31,6 +31,9 @@ class LocalAuthority < ApplicationRecord has_many :neighbour_responses, through: :consultations + has_many :local_authority_application_types, class_name: "LocalAuthority::ApplicationType", dependent: :destroy + has_many :application_types, through: :local_authority_application_types + with_options presence: true do validates :council_code, :subdomain validates :short_name, :council_name diff --git a/app/models/local_authority/application_type.rb b/app/models/local_authority/application_type.rb new file mode 100644 index 000000000..a0e270ad9 --- /dev/null +++ b/app/models/local_authority/application_type.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class LocalAuthority < ApplicationRecord + class ApplicationType < ApplicationRecord + belongs_to :local_authority + belongs_to :application_type + end +end diff --git a/db/migrate/20250224104514_migrate_local_authority_application_type.rb b/db/migrate/20250224104514_migrate_local_authority_application_type.rb new file mode 100644 index 000000000..345b76cc8 --- /dev/null +++ b/db/migrate/20250224104514_migrate_local_authority_application_type.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class MigrateLocalAuthorityApplicationType < ActiveRecord::Migration[7.2] + def change + up_only do + PlanningApplication.find_each do |planning_application| + next unless planning_application.local_authority_id.present? && planning_application.application_type_id.present? + + LocalAuthority::ApplicationType.find_or_create_by!( + local_authority_id: planning_application.local_authority_id, + application_type_id: planning_application.application_type_id + ) + end + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 47005e7fe..85a28067e 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_02_24_101659) do +ActiveRecord::Schema[7.2].define(version: 2025_02_24_104514) do # These are extensions that must be enabled in order to support this database enable_extension "btree_gin" enable_extension "plpgsql" From 11c50d71ea3e1c27298c8dd3ac78b24e066839a5 Mon Sep 17 00:00:00 2001 From: Evangelos Giataganas Date: Mon, 24 Feb 2025 15:20:12 +0200 Subject: [PATCH 3/6] Add determination_period_days to LocalAuthorityApplicationType --- ...ays_to_local_authority_application_type.rb | 33 +++++++++++++++++++ db/schema.rb | 3 +- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20250224131628_add_determination_period_days_to_local_authority_application_type.rb diff --git a/db/migrate/20250224131628_add_determination_period_days_to_local_authority_application_type.rb b/db/migrate/20250224131628_add_determination_period_days_to_local_authority_application_type.rb new file mode 100644 index 000000000..7f8f5b67e --- /dev/null +++ b/db/migrate/20250224131628_add_determination_period_days_to_local_authority_application_type.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class AddDeterminationPeriodDaysToLocalAuthorityApplicationType < ActiveRecord::Migration[7.2] + disable_ddl_transaction! + + def change + add_column :local_authority_application_types, :determination_period_days, :integer + + reversible do |dir| + dir.up do + application_types = ApplicationType.pluck(:code, :id).to_h + + LocalAuthority.find_each do |local_authority| + next if local_authority.application_type_overrides.blank? + + local_authority.application_type_overrides.each do |override| + application_type_id = application_types[override["code"]] + next unless application_type_id + + lap = LocalAuthority::ApplicationType.find_or_initialize_by( + local_authority_id: local_authority.id, + application_type_id: application_type_id + ) + + if lap.new_record? || lap.determination_period_days != override["determination_period_days"] + lap.update!(determination_period_days: override["determination_period_days"]) + end + end + end + end + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 85a28067e..61ca9bb6f 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_02_24_104514) do +ActiveRecord::Schema[7.2].define(version: 2025_02_24_131628) do # These are extensions that must be enabled in order to support this database enable_extension "btree_gin" enable_extension "plpgsql" @@ -518,6 +518,7 @@ t.bigint "application_type_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "determination_period_days" t.index ["application_type_id"], name: "ix_local_authority_application_types_on_application_type_id" t.index ["local_authority_id", "application_type_id"], name: "index_local_authority_application_types", unique: true t.index ["local_authority_id"], name: "ix_local_authority_application_types_on_local_authority_id" From f6d04ec7cf67e9b027a46dded32e4dde495eea25 Mon Sep 17 00:00:00 2001 From: Evangelos Giataganas Date: Thu, 27 Feb 2025 02:23:51 +0200 Subject: [PATCH 4/6] Migrate application_type_overrides --- app/models/application_type_overrides.rb | 13 ----------- app/models/local_authority.rb | 10 ++------ .../local_authority/application_type.rb | 14 +++++++++++ app/models/planning_application.rb | 2 +- .../determination_periods_controller.rb | 23 ++++++++++--------- .../bops_admin/settings_controller.rb | 10 +++++--- .../determination_periods/edit.html.erb | 22 ++++++++++-------- .../views/bops_admin/settings/show.html.erb | 2 +- engines/bops_admin/config/locales/en.yml | 2 ++ .../spec/system/application_settings_spec.rb | 5 ++-- spec/factories/local_authorities.rb | 10 +++----- .../local_authority_application_type.rb | 13 +++++++++++ 12 files changed, 71 insertions(+), 55 deletions(-) delete mode 100644 app/models/application_type_overrides.rb create mode 100644 spec/factories/local_authority_application_type.rb diff --git a/app/models/application_type_overrides.rb b/app/models/application_type_overrides.rb deleted file mode 100644 index 2a1f35990..000000000 --- a/app/models/application_type_overrides.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -class ApplicationTypeOverrides - include StoreModel::Model - - attribute :code, :string - attribute :determination_period_days, :integer - - validates :determination_period_days, presence: true - validates :determination_period_days, numericality: {only_integer: true} - validates :determination_period_days, numericality: {greater_than_or_equal_to: 1} - validates :determination_period_days, numericality: {less_than_or_equal_to: 99} -end diff --git a/app/models/local_authority.rb b/app/models/local_authority.rb index 4e9ce8a56..91d099d23 100644 --- a/app/models/local_authority.rb +++ b/app/models/local_authority.rb @@ -1,14 +1,6 @@ # frozen_string_literal: true class LocalAuthority < ApplicationRecord - include StoreModel::NestedAttributes - - attribute :application_type_overrides, ApplicationTypeOverrides.to_array_type - - validates :application_type_overrides, store_model: {merge_errors: true} - - accepts_nested_attributes_for :application_type_overrides - with_options dependent: :destroy do has_many :users has_many :planning_applications, -> { kept } @@ -34,6 +26,8 @@ class LocalAuthority < ApplicationRecord has_many :local_authority_application_types, class_name: "LocalAuthority::ApplicationType", dependent: :destroy has_many :application_types, through: :local_authority_application_types + accepts_nested_attributes_for :local_authority_application_types + with_options presence: true do validates :council_code, :subdomain validates :short_name, :council_name diff --git a/app/models/local_authority/application_type.rb b/app/models/local_authority/application_type.rb index a0e270ad9..7193662d4 100644 --- a/app/models/local_authority/application_type.rb +++ b/app/models/local_authority/application_type.rb @@ -4,5 +4,19 @@ class LocalAuthority < ApplicationRecord class ApplicationType < ApplicationRecord belongs_to :local_authority belongs_to :application_type + + scope :with_code, ->(code) { joins(:application_type).where(application_types: {code: code}) } + scope :pre_app, -> { with_code("preApp") } + + validates :determination_period_days, presence: true, if: :pre_app? + validates :determination_period_days, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 99}, if: :pre_app? + + delegate :code, to: :application_type + + private + + def pre_app? + application_type&.code == "preApp" + end end end diff --git a/app/models/planning_application.rb b/app/models/planning_application.rb index 34f9bd297..6928d10e5 100644 --- a/app/models/planning_application.rb +++ b/app/models/planning_application.rb @@ -989,7 +989,7 @@ def application_type_determination_period end def determination_period_days_for_pre_app - local_authority.application_type_overrides.find { |ato| ato.code == "preApp" }&.determination_period_days if pre_application? + local_authority.local_authority_application_types.pre_app.pick(:determination_period_days) end def set_change_access_id diff --git a/engines/bops_admin/app/controllers/bops_admin/determination_periods_controller.rb b/engines/bops_admin/app/controllers/bops_admin/determination_periods_controller.rb index e7016304b..0689f647e 100644 --- a/engines/bops_admin/app/controllers/bops_admin/determination_periods_controller.rb +++ b/engines/bops_admin/app/controllers/bops_admin/determination_periods_controller.rb @@ -2,6 +2,8 @@ module BopsAdmin class DeterminationPeriodsController < ApplicationController + before_action :set_pre_app_local_authority_application_type, only: %i[edit update] + def edit respond_to do |format| format.html @@ -10,10 +12,8 @@ def edit def update respond_to do |format| - if current_local_authority.update(application_type_overrides_params, :application_type_overrides) - format.html do - redirect_to setting_path, notice: t(".success") - end + if @pre_app_application_type.update(determination_period_days_params) + format.html { redirect_to setting_path, notice: t(".success") } else format.html { render :edit } end @@ -22,15 +22,16 @@ def update private - def application_type_overrides_params - params.require(:local_authority).permit(application_type_overrides_attributes:) + def determination_period_days_params + params.require(:local_authority_application_type).permit(:determination_period_days) end - def application_type_overrides_attributes - [ - :code, - :determination_period_days - ] + def set_pre_app_local_authority_application_type + @pre_app_application_type = current_local_authority.local_authority_application_types.pre_app.take + + unless @pre_app_application_type + redirect_to setting_path, alert: t(".not_found") + end end end end diff --git a/engines/bops_admin/app/controllers/bops_admin/settings_controller.rb b/engines/bops_admin/app/controllers/bops_admin/settings_controller.rb index 6732f8560..37621c160 100644 --- a/engines/bops_admin/app/controllers/bops_admin/settings_controller.rb +++ b/engines/bops_admin/app/controllers/bops_admin/settings_controller.rb @@ -2,7 +2,7 @@ module BopsAdmin class SettingsController < ApplicationController - before_action :set_application_type_overrides + before_action :set_pre_app_local_authority_application_type, only: %i[show] def show respond_to do |format| @@ -12,8 +12,12 @@ def show private - def set_application_type_overrides - @application_type_overrides = current_local_authority.application_type_overrides + def set_pre_app_local_authority_application_type + @pre_app_application_type = current_local_authority.local_authority_application_types.pre_app.take + + unless @pre_app_application_type + redirect_to setting_path, alert: t(".not_found") + end end end end diff --git a/engines/bops_admin/app/views/bops_admin/determination_periods/edit.html.erb b/engines/bops_admin/app/views/bops_admin/determination_periods/edit.html.erb index bdea8c008..7c7e638fb 100644 --- a/engines/bops_admin/app/views/bops_admin/determination_periods/edit.html.erb +++ b/engines/bops_admin/app/views/bops_admin/determination_periods/edit.html.erb @@ -11,20 +11,24 @@ <%= render "side_navigation" %>
- <%= form_with model: current_local_authority, url: [:setting, :determination_period] do |form| %> + <% if @pre_app_application_type %> + <%= form_with model: @pre_app_application_type, url: setting_determination_period_path, method: :patch do |form| %> <%= form.govuk_error_summary %> - <%= form.fields_for :application_type_overrides do |ff| %> - <%= ff.hidden_field :code, value: :preApp %> - <%= ff.govuk_text_field :determination_period_days, width: 5, - label: {text: t(".set_determination_period"), size: "l"}, - hint: {text: t(".hint")}, - suffix_text: t(".days"), - value: current_local_authority&.application_type_overrides&.map(&:determination_period_days) %> - <% end %> + <%= form.hidden_field :id %> + <%= form.hidden_field :application_type_id %> + + <%= form.govuk_text_field :determination_period_days, width: 5, + label: {text: t(".set_determination_period"), size: "l"}, + hint: {text: t(".hint")}, + suffix_text: t(".days"), + value: @pre_app_application_type.determination_period_days %> <%= form.govuk_submit(t(".save")) %> <%= govuk_button_link_to t("back"), setting_path, secondary: true %> <% end %> + <% else %> +

<%= t(".no_pre_app_found") %>

+ <% end %>
diff --git a/engines/bops_admin/app/views/bops_admin/settings/show.html.erb b/engines/bops_admin/app/views/bops_admin/settings/show.html.erb index 2fd1649ac..fb95e1582 100644 --- a/engines/bops_admin/app/views/bops_admin/settings/show.html.erb +++ b/engines/bops_admin/app/views/bops_admin/settings/show.html.erb @@ -15,7 +15,7 @@ <%= govuk_summary_list do |summary_list| summary_list.with_row do |row| row.with_key { t(".pre_app_determination_period") } - row.with_value { t(".determination_period_including_bank_holidays", count: @application_type_overrides.map(&:determination_period_days).join(" ")) if @application_type_overrides.map(&:determination_period_days).join(" ") } + row.with_value { t(".determination_period_including_bank_holidays", count: @pre_app_application_type.determination_period_days) } row.with_action(text: t(".change"), href: url_for([:edit, :setting, :determination_period]), visually_hidden_text: t(".determination_period")) end end %> diff --git a/engines/bops_admin/config/locales/en.yml b/engines/bops_admin/config/locales/en.yml index a7d13a738..6121a22fd 100644 --- a/engines/bops_admin/config/locales/en.yml +++ b/engines/bops_admin/config/locales/en.yml @@ -54,6 +54,7 @@ en: days: days determination_period: Determination period hint: Choose the length of the determination period for the pre-application type. + no_pre_app_found: No pre-application type found save: Save set_determination_period: Set determination period update: @@ -312,6 +313,7 @@ en: determination_period_including_bank_holidays: one: 1 day - bank holidays included other: "%{count} days - bank holidays included" + not_found: Determination period not found pre_app_determination_period: Pre-application determination period tokens: create: diff --git a/engines/bops_admin/spec/system/application_settings_spec.rb b/engines/bops_admin/spec/system/application_settings_spec.rb index 4bd3e76a6..6f686acb4 100644 --- a/engines/bops_admin/spec/system/application_settings_spec.rb +++ b/engines/bops_admin/spec/system/application_settings_spec.rb @@ -6,6 +6,8 @@ let(:local_authority) { create(:local_authority, :default, :with_api_user) } let(:user) { create(:user, :administrator, local_authority:) } + let!(:local_authority_application_type) { create(:local_authority_application_type, :pre_app, local_authority: local_authority) } + before do sign_in(user) end @@ -73,7 +75,6 @@ expect(page).to have_content("Determination period successfully updated") - expect(local_authority.reload.application_type_overrides.first&.code).to eq("preApp") - expect(local_authority.reload.application_type_overrides.first&.determination_period_days).to eq(25) + expect(local_authority_application_type.reload.determination_period_days).to eq(25) end end diff --git a/spec/factories/local_authorities.rb b/spec/factories/local_authorities.rb index 6ebc4d290..b8e6b3a49 100644 --- a/spec/factories/local_authorities.rb +++ b/spec/factories/local_authorities.rb @@ -14,13 +14,9 @@ feedback_email { "feedback_email@buckinghamshire.gov.uk" } email_reply_to_id { "4896bb50-4f4c-4b4d-ad67-2caddddde125" } active { true } - application_type_overrides do - [ - { - code: :preApp, - determination_period_days: 30 - } - ] + + after(:create) do |local_authority| + create(:local_authority_application_type, local_authority: local_authority) end trait :default do diff --git a/spec/factories/local_authority_application_type.rb b/spec/factories/local_authority_application_type.rb new file mode 100644 index 000000000..b5cbf1ada --- /dev/null +++ b/spec/factories/local_authority_application_type.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :local_authority_application_type, class: "LocalAuthority::ApplicationType" do + local_authority + application_type + + trait :pre_app do + association :application_type, :pre_application + determination_period_days { 30 } + end + end +end From e6f9bc2f272e5a50be69f99444ed00c43653f2aa Mon Sep 17 00:00:00 2001 From: Evangelos Giataganas Date: Thu, 27 Feb 2025 16:50:05 +0200 Subject: [PATCH 5/6] Find application_type and store it on LA --- app/models/local_authority/application_type.rb | 6 ++++-- .../bops_admin/determination_periods_controller.rb | 2 +- .../app/services/bops_api/application/creation_service.rb | 2 +- .../bops_api/application/parsers/application_type_parser.rb | 4 +++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/models/local_authority/application_type.rb b/app/models/local_authority/application_type.rb index 7193662d4..f35d117a7 100644 --- a/app/models/local_authority/application_type.rb +++ b/app/models/local_authority/application_type.rb @@ -8,8 +8,10 @@ class ApplicationType < ApplicationRecord scope :with_code, ->(code) { joins(:application_type).where(application_types: {code: code}) } scope :pre_app, -> { with_code("preApp") } - validates :determination_period_days, presence: true, if: :pre_app? - validates :determination_period_days, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 99}, if: :pre_app? + with_options on: :application_type_overrides do + validates :determination_period_days, presence: true, if: :pre_app? + validates :determination_period_days, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 99}, if: :pre_app? + end delegate :code, to: :application_type diff --git a/engines/bops_admin/app/controllers/bops_admin/determination_periods_controller.rb b/engines/bops_admin/app/controllers/bops_admin/determination_periods_controller.rb index 0689f647e..e29f1b6d9 100644 --- a/engines/bops_admin/app/controllers/bops_admin/determination_periods_controller.rb +++ b/engines/bops_admin/app/controllers/bops_admin/determination_periods_controller.rb @@ -12,7 +12,7 @@ def edit def update respond_to do |format| - if @pre_app_application_type.update(determination_period_days_params) + if @pre_app_application_type.update(determination_period_days_params, :application_type_overrides) format.html { redirect_to setting_path, notice: t(".success") } else format.html { render :edit } diff --git a/engines/bops_api/app/services/bops_api/application/creation_service.rb b/engines/bops_api/app/services/bops_api/application/creation_service.rb index 45a17610a..a53a65aff 100644 --- a/engines/bops_api/app/services/bops_api/application/creation_service.rb +++ b/engines/bops_api/app/services/bops_api/application/creation_service.rb @@ -57,7 +57,7 @@ def parsers "AgentParser" => data_params[:applicant][:agent], "FeeParser" => data_params[:application][:fee], "AddressParser" => data_params[:property][:address], - "ApplicationTypeParser" => data_params[:application][:type], + "ApplicationTypeParser" => data_params[:application][:type].merge(local_authority: local_authority), "PreAssessmentParser" => params[:preAssessment], "ProposalParser" => data_params[:proposal], "ProposalDetailsParser" => params[:responses] diff --git a/engines/bops_api/app/services/bops_api/application/parsers/application_type_parser.rb b/engines/bops_api/app/services/bops_api/application/parsers/application_type_parser.rb index 1c3946300..71ac35346 100644 --- a/engines/bops_api/app/services/bops_api/application/parsers/application_type_parser.rb +++ b/engines/bops_api/app/services/bops_api/application/parsers/application_type_parser.rb @@ -17,7 +17,9 @@ def parse private def application_type - ApplicationType.active.find_by!(code: params[:value]) + application_type = ApplicationType.active.find_by!(code: params[:value]) + params[:local_authority].local_authority_application_types.find_or_create_by!(application_type_id: application_type.id) + application_type end end end From 2e6cf756b38966c71e77b0e08e3ce2447f8dc448 Mon Sep 17 00:00:00 2001 From: Evangelos Giataganas Date: Fri, 28 Feb 2025 12:59:52 +0200 Subject: [PATCH 6/6] Test --- app/models/application_type.rb | 8 ++++++-- .../local_authority/application_type.rb | 20 ++++++------------- app/models/planning_application.rb | 2 +- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/app/models/application_type.rb b/app/models/application_type.rb index ca3afeb3c..a33b5f318 100644 --- a/app/models/application_type.rb +++ b/app/models/application_type.rb @@ -36,8 +36,12 @@ class ApplicationType < ApplicationRecord belongs_to :legislation, optional: true has_many :planning_applications, -> { kept }, dependent: :restrict_with_exception - has_many :local_authority_application_types, class_name: "LocalAuthority::ApplicationType", dependent: :destroy - has_many :local_authorities, through: :local_authority_application_types + has_many :local_authority_application_types + + with_options through: :local_authority_application_types do + has_many :local_authorities, + has_many :planning_applications + end accepts_nested_attributes_for :legislation, :document_tags diff --git a/app/models/local_authority/application_type.rb b/app/models/local_authority/application_type.rb index f35d117a7..715fde4e7 100644 --- a/app/models/local_authority/application_type.rb +++ b/app/models/local_authority/application_type.rb @@ -3,22 +3,14 @@ class LocalAuthority < ApplicationRecord class ApplicationType < ApplicationRecord belongs_to :local_authority - belongs_to :application_type + belongs_to :application_type, class_name: "::ApplicationType" - scope :with_code, ->(code) { joins(:application_type).where(application_types: {code: code}) } - scope :pre_app, -> { with_code("preApp") } + has_many :planning_applications - with_options on: :application_type_overrides do - validates :determination_period_days, presence: true, if: :pre_app? - validates :determination_period_days, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 99}, if: :pre_app? - end - - delegate :code, to: :application_type - - private - - def pre_app? - application_type&.code == "preApp" + def determination_period_in_days + super || application_type.determination_period_in_days end end + + has_many :application_types end diff --git a/app/models/planning_application.rb b/app/models/planning_application.rb index 6928d10e5..dd3e56bc1 100644 --- a/app/models/planning_application.rb +++ b/app/models/planning_application.rb @@ -120,7 +120,7 @@ class WithdrawOrCancelError < RuntimeError; end belongs_to :api_user, optional: true belongs_to :boundary_created_by, class_name: "User", optional: true belongs_to :local_authority - belongs_to :application_type + belongs_to :application_type, class_name: "LocalAuthority::ApplicationType" scope :by_created_at_desc, -> { order(created_at: :desc) } scope :by_determined_at_desc, -> { order(determined_at: :desc) }