From 4054e2ccdb89769d2ba1f3774f9df35d772b083a Mon Sep 17 00:00:00 2001 From: Benjamin Eskola Date: Thu, 7 Aug 2025 09:52:30 +0100 Subject: [PATCH] Initialise case record for planning application in a hook --- app/controllers/planning_applications_controller.rb | 3 --- app/models/case_record.rb | 4 +++- app/models/concerns/caseable.rb | 1 + app/models/local_authority.rb | 7 +++++-- app/models/planning_application.rb | 6 ++++++ app/services/planning_applications_creation.rb | 6 +++--- .../app/services/bops_api/application/creation_service.rb | 6 +----- .../bops_submissions/application/creation_service.rb | 5 +---- 8 files changed, 20 insertions(+), 18 deletions(-) diff --git a/app/controllers/planning_applications_controller.rb b/app/controllers/planning_applications_controller.rb index 970fa19485..0857055de3 100644 --- a/app/controllers/planning_applications_controller.rb +++ b/app/controllers/planning_applications_controller.rb @@ -230,9 +230,6 @@ def supply_documents def build_planning_application @planning_application = current_local_authority.planning_applications.new - @planning_application.case_record = CaseRecord.new(local_authority: current_local_authority) - - @planning_application end def planning_application_params diff --git a/app/models/case_record.rb b/app/models/case_record.rb index 73f8bdd535..4a2909f0c7 100644 --- a/app/models/case_record.rb +++ b/app/models/case_record.rb @@ -3,7 +3,9 @@ require "securerandom" class CaseRecord < ApplicationRecord - delegated_type :caseable, types: %w[Enforcement PlanningApplication], dependent: :destroy + CASEABLE_TYPES = %w[Enforcement PlanningApplication].freeze + + delegated_type :caseable, types: CASEABLE_TYPES, dependent: :destroy has_many :tasks, -> { order(:position) }, as: :parent, dependent: :destroy, autosave: true has_many :documents, dependent: :destroy diff --git a/app/models/concerns/caseable.rb b/app/models/concerns/caseable.rb index caea97ab36..26d968756e 100644 --- a/app/models/concerns/caseable.rb +++ b/app/models/concerns/caseable.rb @@ -6,6 +6,7 @@ module Caseable included do has_one :case_record, as: :caseable, touch: true, dependent: :destroy delegate :local_authority, to: :case_record + delegate :local_authority=, to: :case_record delegate :submission, to: :case_record delegate :user, to: :case_record end diff --git a/app/models/local_authority.rb b/app/models/local_authority.rb index c043f14072..efc7c6f39d 100644 --- a/app/models/local_authority.rb +++ b/app/models/local_authority.rb @@ -5,7 +5,6 @@ class LocalAuthority < ApplicationRecord with_options dependent: :destroy do has_many :users - has_many :planning_applications, -> { kept } has_many :constraints has_many :contacts has_many :informatives @@ -19,6 +18,11 @@ class LocalAuthority < ApplicationRecord has_many :case_records end + with_options dependent: :destroy, through: :case_records, source: :caseable do + has_many :enforcements, source_type: "Enforcement" + has_many :planning_applications, -> { kept }, source_type: "PlanningApplication" + end + with_options through: :planning_applications do has_many :audits has_many :consultations @@ -27,7 +31,6 @@ class LocalAuthority < ApplicationRecord end has_many :neighbour_responses, through: :consultations - has_many :enforcements, through: :case_records, source: :caseable, source_type: "Enforcement" class Accessibility < Struct.new(:postal_address, :phone_number, :email_address); end diff --git a/app/models/planning_application.rb b/app/models/planning_application.rb index d02ec9fcfb..00dbc3b369 100644 --- a/app/models/planning_application.rb +++ b/app/models/planning_application.rb @@ -1045,6 +1045,10 @@ def application_short_case pre_application? ? "pre-application" : "application" end + def case_record + attributes[:case_record] ||= CaseRecord.new + end + private def create_fee_calculation @@ -1210,6 +1214,8 @@ def determination_date_is_not_in_the_future end def set_application_number + pp case_record + pp case_record.local_authority max_application_number = local_authority.planning_applications.with_discarded.maximum(:application_number) self.application_number = max_application_number ? max_application_number + 1 : 100 diff --git a/app/services/planning_applications_creation.rb b/app/services/planning_applications_creation.rb index d92fbc1520..9204fe9251 100644 --- a/app/services/planning_applications_creation.rb +++ b/app/services/planning_applications_creation.rb @@ -65,9 +65,9 @@ def perform attr_reader(*ATTRIBUTES) def importer - pa = PlanningApplication.find_or_initialize_by(reference: reference) - pa.update!(case_record: CaseRecord.new(local_authority: planning_application_attributes[:local_authority]), - **planning_application_attributes) + case_record = CaseRecord.new(local_authority: planning_application_attributes[:local_authority]) + case_record.caseable = PlanningApplication.find_or_initialize_by(reference: reference) + pa.update!(**planning_application_attributes) rescue => e Rails.logger.debug { "[IMPORT ERROR] #{e.class}: #{e.message}" } Rails.logger.debug pa.errors.full_messages.join(", ") if pa 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 8bc494e50e..5d2311ebc4 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 @@ -27,11 +27,7 @@ def files end def build_planning_application - PlanningApplication.new(planning_application_params).tap do |pa| - pa.api_user_id = user.id - pa.local_authority_id = local_authority.id - pa.case_record = CaseRecord.new(local_authority:) - end + local_authority.planning_applications.new(api_user: user, **planning_application_params) end def planning_application_params diff --git a/engines/bops_submissions/app/services/bops_submissions/application/creation_service.rb b/engines/bops_submissions/app/services/bops_submissions/application/creation_service.rb index 9cf354070c..021453d9e7 100644 --- a/engines/bops_submissions/app/services/bops_submissions/application/creation_service.rb +++ b/engines/bops_submissions/app/services/bops_submissions/application/creation_service.rb @@ -32,10 +32,7 @@ def create_planning_application! end def build_planning_application - PlanningApplication.new(planning_application_params).tap do |pa| - pa.case_record = CaseRecord.new(local_authority:, submission:) - pa.local_authority_id = local_authority.id - end + local_authority.planning_applications.new(planning_application_params) end def planning_application_params