Browse Source

Move question invalidation to form class

pull/871/head
baarkerlounger 3 years ago
parent
commit
031588bca3
  1. 24
      app/models/form.rb
  2. 33
      app/models/lettings_log.rb
  3. 12
      app/models/log.rb

24
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

33
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

12
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

Loading…
Cancel
Save