diff --git a/app/models/form.rb b/app/models/form.rb index fd8e66317..a463e497f 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -155,6 +155,30 @@ class Form questions.reject { |q| q.page.routed_to?(log, current_user) || q.derived? || callback_questions.include?(q.id) } || [] end + def reset_not_routed_questions(log) + enabled_questions = enabled_page_questions(log) + enabled_question_ids = enabled_questions.map(&:id) + + invalidated_page_questions(log).each do |question| + if %w[radio checkbox].include?(question.type) + enabled_answer_options = enabled_question_ids.include?(question.id) ? enabled_questions.find { |q| q.id == question.id }.answer_options : {} + current_answer_option_valid = enabled_answer_options.present? ? enabled_answer_options.key?(log.public_send(question.id).to_s) : false + if !current_answer_option_valid && log.respond_to?(question.id.to_s) + Rails.logger.debug("Cleared #{question.id} value") + log.public_send("#{question.id}=", nil) + else + (question.answer_options.keys - enabled_answer_options.keys).map do |invalid_answer_option| + Rails.logger.debug("Cleared #{invalid_answer_option} value") + log.public_send("#{invalid_answer_option}=", nil) if log.respond_to?(invalid_answer_option) + end + end + else + Rails.logger.debug("Cleared #{question.id} value") + log.public_send("#{question.id}=", nil) unless enabled_question_ids.include?(question.id) + end + end + end + def enabled_page_questions(log) questions - invalidated_page_questions(log) end diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 2db5e2101..33d5974ce 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -505,30 +505,6 @@ private PIO = PostcodeService.new - def reset_not_routed_questions - enabled_questions = form.enabled_page_questions(self) - enabled_question_ids = enabled_questions.map(&:id) - - form.invalidated_page_questions(self).each do |question| - if %w[radio checkbox].include?(question.type) - enabled_answer_options = enabled_question_ids.include?(question.id) ? enabled_questions.find { |q| q.id == question.id }.answer_options : {} - current_answer_option_valid = enabled_answer_options.present? ? enabled_answer_options.key?(public_send(question.id).to_s) : false - if !current_answer_option_valid && respond_to?(question.id.to_s) - Rails.logger.debug("Cleared #{question.id} value") - public_send("#{question.id}=", nil) - else - (question.answer_options.keys - enabled_answer_options.keys).map do |invalid_answer_option| - Rails.logger.debug("Cleared #{invalid_answer_option} value") - public_send("#{invalid_answer_option}=", nil) if respond_to?(invalid_answer_option) - end - end - else - Rails.logger.debug("Cleared #{question.id} value") - public_send("#{question.id}=", nil) unless enabled_question_ids.include?(question.id) - end - end - end - def reset_derived_questions dependent_questions = { waityear: [{ key: :renewal, value: 0 }], referral: [{ key: :renewal, value: 0 }], @@ -546,12 +522,6 @@ private end end - def reset_created_by - return unless created_by && owning_organisation - - self.created_by = nil if created_by.organisation != owning_organisation - end - def reset_scheme return unless scheme && owning_organisation @@ -559,11 +529,10 @@ private end def reset_invalidated_dependent_fields! - return unless form + super reset_created_by reset_scheme - reset_not_routed_questions reset_derived_questions end diff --git a/app/models/log.rb b/app/models/log.rb index d0a866ae9..e24a205fc 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -58,4 +58,16 @@ private subsection_statuses = form.subsections.map { |subsection| subsection.status(self) }.uniq subsection_statuses.all? { |status| not_started_statuses.include?(status) } end + + def reset_created_by + return unless created_by && owning_organisation + + self.created_by = nil if created_by.organisation != owning_organisation + end + + def reset_invalidated_dependent_fields! + return unless form + + form.reset_not_routed_questions(self) + end end