diff --git a/app/models/form.rb b/app/models/form.rb index 80fed4444..4eb57fd1c 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -230,6 +230,21 @@ class Form questions.select { |q| q.type == "numeric" } end + def radio_questions_valid_options + questions.select { |q| q.type == "radio" } + .group_by(:id) + .transform_values! do |q_array| + q_array.flat_map { |q| q.answer_options.keys } + end + end + + def previous_page(page_ids, page_index, log, current_user) + prev_page = get_page(page_ids[page_index - 1]) + return prev_page.id if prev_page.routed_to?(log, current_user) + + previous_page(page_ids, page_index - 1, log, current_user) + end + def send_chain(arr, log) Array(arr).inject(log) { |o, a| o.public_send(*a) } end diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index cd1fffd22..daab8a34e 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -26,6 +26,7 @@ class LettingsLog < Log validates_with LettingsLogValidator before_validation :recalculate_start_year!, if: :startdate_changed? + before_validation :clear_invalid_radio_answers!, if: :startdate_changed? before_validation :reset_scheme_location!, if: :scheme_changed?, unless: :location_changed? before_validation :process_postcode_changes!, if: :postcode_full_changed? before_validation :process_previous_postcode_changes!, if: :ppostcode_full_changed? @@ -80,6 +81,10 @@ class LettingsLog < Log FormHandler.instance.form_name_from_start_year(collection_start_year, "lettings") end + def clear_invalid_radio_answers! + super if startdate_was && @start_year != FormHandler.instance.collection_start_year(startdate_was) + end + def self.editable_fields attribute_names - AUTOGENERATED_FIELDS end diff --git a/app/models/log.rb b/app/models/log.rb index 33d3c4547..5da5c037b 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -63,6 +63,14 @@ class Log < ApplicationRecord end end + def clear_invalid_radio_answers! + form.radio_questions_valid_options.each do |question_id, valid_options| + next unless (value = self[question_id]) + + self[question_id] = nil unless valid_options.include?(value.to_s) + end + end + def collection_start_year return @start_year if @start_year diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index ebb3ef4e3..c1fc7fbae 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -26,6 +26,7 @@ class SalesLog < Log validates_with SalesLogValidator before_validation :recalculate_start_year!, if: :saledate_changed? + before_validation :clear_invalid_radio_answers!, if: :saledate_changed? before_validation :reset_invalidated_dependent_fields! before_validation :process_postcode_changes!, if: :postcode_full_changed? before_validation :process_previous_postcode_changes!, if: :ppostcode_full_changed? @@ -76,6 +77,10 @@ class SalesLog < Log OPTIONAL_FIELDS + dynamically_not_required end + def clear_invalid_radio_answers! + super if saledate_was && @start_year != FormHandler.instance.collection_start_year(saledate_was) + end + def dynamically_not_required not_required = [] not_required << "proplen" if proplen_optional?