From 23f85d87630616ee4e0177b5b4c5f154a4f17ff9 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 17 May 2024 11:07:22 +0100 Subject: [PATCH] Extract and more sales methods --- app/services/csv/sales_log_csv_service.rb | 168 +++++++++++----------- 1 file changed, 88 insertions(+), 80 deletions(-) diff --git a/app/services/csv/sales_log_csv_service.rb b/app/services/csv/sales_log_csv_service.rb index 61bef2972..844491fee 100644 --- a/app/services/csv/sales_log_csv_service.rb +++ b/app/services/csv/sales_log_csv_service.rb @@ -89,68 +89,6 @@ module Csv ORDERED_ADDRESS_FIELDS = %w[uprn address_line1 address_line2 town_or_city county postcode_full is_la_inferred la_label la uprn_selection address_search_value_check address_line1_input postcode_full_input address_line1_as_entered address_line2_as_entered town_or_city_as_entered county_as_entered postcode_full_as_entered la_as_entered].freeze - def value(attribute, log) - if CUSTOM_CALL_CHAINS.key? attribute.to_sym - call_chain = CUSTOM_CALL_CHAINS[attribute.to_sym][@export_type.to_sym] - call_chain.reduce(log) { |object, next_call| object&.public_send(next_call) } - elsif FIELDS_ALWAYS_EXPORTED_AS_CODES.include? attribute - log.send(attribute) - elsif FIELDS_ALWAYS_EXPORTED_AS_LABELS.key? attribute - attribute = FIELDS_ALWAYS_EXPORTED_AS_LABELS[attribute] - value = log.send(attribute) - get_label(value, attribute, log) - elsif SYSTEM_DATE_FIELDS.include? attribute - log.public_send(attribute)&.iso8601 - elsif PERSON_DETAILS.key?(attribute) && (person_details_not_known?(log, attribute) || age_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 - when "codes" - value - when "labels" - answer_label = get_label(value, attribute, log) - answer_label || label_if_boolean_value(value) || value - end - end - end - - def get_label(value, attribute, log) - log.form - .get_question(attribute, log) - &.label_from_value(value) - end - - def label_if_boolean_value(value) - return "Yes" if value == true - return "No" if value == false - end - - def attribute_mappings - mappings = { - "saledate" => %w[day month year], - "exdate" => %w[exday exmonth exyear], - "hodate" => %w[hoday homonth hoyear], - "ppostcode_full" => %w[ppostc1 ppostc2], - "la" => %w[la la_label], - "prevloc" => %w[prevloc prevloc_label], - "assigned_to_id" => %w[created_by assigned_to], - "owning_organisation_id" => %w[owning_organisation_name], - "managing_organisation_id" => %w[managing_organisation_name], - "value" => %w[value value_value_check], - "mscharge" => %w[mscharge mscharge_value_check], - } - unless @user.support? && @year >= 2024 - mappings["postcode_full"] = %w[pcode1 pcode2] - end - mappings - end - SUPPORT_ONLY_ATTRIBUTES = %w[address_line1_as_entered address_line2_as_entered town_or_city_as_entered county_as_entered postcode_full_as_entered la_as_entered created_by value_value_check mscharge_value_check].freeze SUPPORT_ATTRIBUTE_NAME_MAPPINGS = { @@ -206,10 +144,25 @@ module Csv "uprn_confirmed" => "UPRNCONFIRMED", }.freeze + def formatted_attribute_headers + return @attributes unless @user.support? + + @attributes.map do |attribute| + SUPPORT_ATTRIBUTE_NAME_MAPPINGS[attribute] || attribute.upcase + end + end + def sales_log_attributes ordered_questions = FormHandler.instance.ordered_questions_for_year(@year, "sales") ordered_questions.reject! { |q| q.id.match?(/((? %w[day month year], + "exdate" => %w[exday exmonth exyear], + "hodate" => %w[hoday homonth hoyear], + "ppostcode_full" => %w[ppostc1 ppostc2], + "la" => %w[la la_label], + "prevloc" => %w[prevloc prevloc_label], + "assigned_to_id" => %w[created_by assigned_to], + "owning_organisation_id" => %w[owning_organisation_name], + "managing_organisation_id" => %w[managing_organisation_name], + "value" => %w[value value_value_check], + "mscharge" => %w[mscharge mscharge_value_check], + } + unless @user.support? && @year >= 2024 + mappings["postcode_full"] = %w[pcode1 pcode2] + end + mappings + end + + def order_address_fields_for_support(attributes) if @user.support? && @year >= 2024 first_address_field_index = attributes.find_index { |q| all_address_fields.include?(q) } if first_address_field_index @@ -225,18 +201,6 @@ module Csv attributes.insert(first_address_field_index, *ORDERED_ADDRESS_FIELDS) end end - final_attributes = non_question_fields + attributes - @user.support? ? final_attributes : final_attributes - SUPPORT_ONLY_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] == 2 # 1 for lettings logs, 2 for sales logs - end - - def age_not_known?(log, attribute) - age_known_field = PERSON_DETAILS.find { |key, _value| key == attribute }[1]["age_known_field"] - log[age_known_field] == 1 end def non_question_fields @@ -256,12 +220,56 @@ module Csv ORDERED_ADDRESS_FIELDS + %w[uprn_confirmed] end - def formatted_attribute_headers - return @attributes unless @user.support? - - @attributes.map do |attribute| - SUPPORT_ATTRIBUTE_NAME_MAPPINGS[attribute] || attribute.upcase + def value(attribute, log) + if CUSTOM_CALL_CHAINS.key? attribute.to_sym + call_chain = CUSTOM_CALL_CHAINS[attribute.to_sym][@export_type.to_sym] + call_chain.reduce(log) { |object, next_call| object&.public_send(next_call) } + elsif FIELDS_ALWAYS_EXPORTED_AS_CODES.include? attribute + log.send(attribute) + elsif FIELDS_ALWAYS_EXPORTED_AS_LABELS.key? attribute + attribute = FIELDS_ALWAYS_EXPORTED_AS_LABELS[attribute] + value = log.send(attribute) + get_label(value, attribute, log) + elsif SYSTEM_DATE_FIELDS.include? attribute + log.public_send(attribute)&.iso8601 + elsif PERSON_DETAILS.key?(attribute) && (person_details_not_known?(log, attribute) || age_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 + when "codes" + value + when "labels" + answer_label = get_label(value, attribute, log) + answer_label || label_if_boolean_value(value) || value + end end 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] == 2 # 1 for lettings logs, 2 for sales logs + end + + def age_not_known?(log, attribute) + age_known_field = PERSON_DETAILS.find { |key, _value| key == attribute }[1]["age_known_field"] + log[age_known_field] == 1 + end + + def get_label(value, attribute, log) + log.form + .get_question(attribute, log) + &.label_from_value(value) + end + + def label_if_boolean_value(value) + return "Yes" if value == true + return "No" if value == false + end end end