diff --git a/app/services/csv/sales_log_csv_service.rb b/app/services/csv/sales_log_csv_service.rb index 57f48c126..fbbd69625 100644 --- a/app/services/csv/sales_log_csv_service.rb +++ b/app/services/csv/sales_log_csv_service.rb @@ -48,6 +48,15 @@ module Csv }, }.freeze + PERSON_DETAILS = {}.tap { |hash| + (2..6).each do |i| + hash["age#{i}_known"] = { "refused_code" => "-9", "refused_label" => "Not known", "details_known_field" => "details_known_#{i}" } + hash["sex#{i}"] = { "refused_code" => "R", "refused_label" => "Prefers not to say", "details_known_field" => "details_known_#{i}" } + hash["relat#{i}"] = { "refused_code" => "R", "refused_label" => "Prefers not to say", "details_known_field" => "details_known_#{i}" } + hash["ecstat#{i}"] = { "refused_code" => "10", "refused_label" => "Prefers not to say", "details_known_field" => "details_known_#{i}" } + end + }.freeze + FIELDS_ALWAYS_EXPORTED_AS_CODES = %w[ la prevloc @@ -75,6 +84,13 @@ module Csv get_label(value, attribute, log) elsif DATE_FIELDS.include? attribute log.send(attribute)&.iso8601 + elsif PERSON_DETAILS.any? { |key, _value| key == attribute } && person_details_not_known?(log, attribute) + case @export_type + when "codes" + PERSON_DETAILS.find { |key, _value| key == attribute }[1]["refused_code"] + when "labels" + PERSON_DETAILS.find { |key, _value| key == attribute }[1]["refused_label"] + end else value = log.public_send(attribute) case @export_type @@ -125,5 +141,10 @@ module Csv non_question_fields = %w[id status created_at updated_at old_form_id collection_start_year creation_method is_dpo] non_question_fields + attributes end + + def person_details_not_known?(log, attribute) + details_known_field = PERSON_DETAILS.find { |key, _value| key == attribute }[1]["details_known_field"] + log[details_known_field] == 1 + end end end