@ -192,52 +192,60 @@ class Form
def reset_checkbox_questions_if_not_routed ( log )
def reset_checkbox_questions_if_not_routed ( log )
checkbox_questions = routed_and_not_routed_questions_by_type ( log , type : " checkbox " )
checkbox_questions = routed_and_not_routed_questions_by_type ( log , type : " checkbox " )
checkbox_questions [ :not_routed ] . each do | not_routed_question |
clear_checkbox_attributes ( log , checkbox_questions [ :routed ] , checkbox_questions [ :not_routed ] )
valid_options = checkbox_questions [ :routed ]
. select { | q | q . id == not_routed_question . id }
checkbox_questions_recalculated = routed_and_not_routed_questions_by_type ( log , type : " checkbox " )
. flat_map { | q | q . answer_options . keys }
newly_not_routed_checkbox_questions = checkbox_questions_recalculated [ :not_routed ] . reject { | question | checkbox_questions [ :not_routed ] . include? ( question ) }
clear_checkbox_attributes ( log , checkbox_questions_recalculated [ :routed ] , newly_not_routed_checkbox_questions )
end
def reset_radio_questions_if_not_routed_or_invalid_answers ( log )
radio_questions = routed_and_not_routed_questions_by_type ( log , type : " radio " )
clear_radio_attributes ( log , radio_questions [ :routed ] , radio_questions [ :not_routed ] )
radio_questions_recalculated = routed_and_not_routed_questions_by_type ( log , type : " radio " )
newly_not_routed_radio_questions = radio_questions_recalculated [ :not_routed ] . reject { | question | radio_questions [ :not_routed ] . include? ( question ) }
clear_radio_attributes ( log , radio_questions_recalculated [ :routed ] , newly_not_routed_radio_questions )
end
def reset_free_user_input_questions_if_not_routed ( log )
non_radio_or_checkbox_questions = routed_and_not_routed_questions_by_type ( log )
clear_free_user_input_attributes ( log , non_radio_or_checkbox_questions [ :routed ] , non_radio_or_checkbox_questions [ :not_routed ] )
non_radio_or_checkbox_questions_recalculated = routed_and_not_routed_questions_by_type ( log )
newly_not_routed_non_radio_or_checkbox_questions = non_radio_or_checkbox_questions_recalculated [ :not_routed ] . reject { | question | non_radio_or_checkbox_questions [ :not_routed ] . include? ( question ) }
clear_free_user_input_attributes ( log , non_radio_or_checkbox_questions_recalculated [ :routed ] , newly_not_routed_non_radio_or_checkbox_questions )
end
def clear_checkbox_attributes ( log , routed_questions , not_routed_questions )
not_routed_questions . each do | not_routed_question |
valid_options = routed_questions
. select { | q | q . id == not_routed_question . id }
. flat_map { | q | q . answer_options . keys }
not_routed_question . answer_options . each_key do | invalid_option |
not_routed_question . answer_options . each_key do | invalid_option |
if ! log . respond_to? ( invalid_option ) || valid_options . include? ( invalid_option ) || log . public_send ( invalid_option ) . nil?
clear_attribute ( log , invalid_option ) if log . respond_to? ( invalid_option ) && valid_options . exclude? ( invalid_option ) && log . public_send ( invalid_option ) . present?
next
else
clear_attribute ( log , invalid_option )
end
end
end
end
end
end
end
def reset_radio_questions_if_not_routed_or_invalid_answers ( log )
def clear_radio_attributes ( log , routed_questions , not_routed_questions )
radio_questions = routed_and_not_routed_questions_by_type ( log , type : " radio " )
valid_radio_options = routed_questions
valid_radio_options = radio_questions [ :routed ]
. group_by ( & :id )
. group_by ( & :id )
. transform_values! { | q_array | q_array . flat_map { | q | q . answer_options . keys } }
. transform_values! { | q_array | q_array . flat_map { | q | q . answer_options . keys } }
not_routed_questions . each do | not_routed_question |
radio_questions [ :not_routed ] . each do | not_routed_question |
question_id = not_routed_question . id
question_id = not_routed_question . id
if ! log . respond_to? ( question_id ) || log . public_send ( question_id ) . nil? || valid_radio_options . key? ( question_id )
clear_attribute ( log , question_id ) if log . respond_to? ( question_id ) && log . public_send ( question_id ) . present? && ! valid_radio_options . key? ( question_id )
next
else
clear_attribute ( log , question_id )
end
end
end
valid_radio_options . each do | question_id , valid_options |
valid_radio_options . each do | question_id , valid_options |
if ! log . respond_to? ( question_id ) || valid_options . include? ( log . public_send ( question_id ) . to_s )
clear_attribute ( log , question_id ) if log . respond_to? ( question_id ) && valid_options . exclude? ( log . public_send ( question_id ) . to_s )
next
else
clear_attribute ( log , question_id )
end
end
end
end
end
def reset_free_user_input_questions_if_not_routed ( log )
def clear_free_user_input_attributes ( log , routed_questions , not_routed_questions )
non_radio_checkbox_questions = routed_and_not_routed_questions_by_type ( log )
enabled_question_ids = routed_questions . map ( & :id )
enabled_question_ids = non_radio_checkbox_questions [ :routed ] . map ( & :id )
not_routed_questions . each do | not_routed_question |
non_radio_checkbox_questions [ :not_routed ] . each do | not_routed_question |
question_id = not_routed_question . id
question_id = not_routed_question . id
if log . public_send ( question_id ) . nil? || enabled_question_ids . include? ( question_id )
clear_attribute ( log , question_id ) if log . public_send ( question_id ) . present? && enabled_question_ids . exclude? ( question_id )
next
else
clear_attribute ( log , question_id )
end
end
end
end
end