diff --git a/app/services/imports/lettings_logs_field_import_service.rb b/app/services/imports/lettings_logs_field_import_service.rb index 4de3063ad..ff54dc9f2 100644 --- a/app/services/imports/lettings_logs_field_import_service.rb +++ b/app/services/imports/lettings_logs_field_import_service.rb @@ -314,17 +314,17 @@ module Imports if (2..record.hhmemb).all? { |person_index| record.has_any_person_details?(person_index) || record["details_known_#{person_index}"] == 1 } return @logger.info("lettings log #{record.id} has all household member details, skipping update") end - if record.hhmemb == 8 || (record.hhmemb + 1..8).none? { |person_index| file_contains_person_details?(xml_doc, person_index) } + if record.hhmemb == 8 || ((record.hhmemb + 1)..8).none? { |person_index| file_contains_person_details?(xml_doc, person_index) } return @logger.info("lettings log #{record.id} has no additional household member details, skipping update") end person_index = 2 next_person_index = person_index + 1 - while person_index <= record.hhmemb - if next_person_index <= record.hhmemb + while person_exists_on_the_log?(record, person_index) + if person_exists_on_the_log?(record, next_person_index) if record.has_any_person_details?(person_index) || record["details_known_#{person_index}"] == 1 - @logger.info("lettings log #{record.id} has details for person #{person_index}, skipping update") + @logger.info("lettings log #{record.id} has details for person #{person_index}, skipping person") person_index += 1 next_person_index += 1 next @@ -335,35 +335,13 @@ module Imports next end - record["details_known_#{person_index}"] = record["details_known_#{next_person_index}"] - record["age#{person_index}"] = record["age#{next_person_index}"] - record["age#{person_index}_known"] = record["age#{next_person_index}_known"] - record["sex#{person_index}"] = record["sex#{next_person_index}"] - record["ecstat#{person_index}"] = record["ecstat#{next_person_index}"] - record["relat#{person_index}"] = record["relat#{next_person_index}"] - - record["details_known_#{next_person_index}"] = nil - record["age#{next_person_index}"] = nil - record["age#{next_person_index}_known"] = nil - record["sex#{next_person_index}"] = nil - record["ecstat#{next_person_index}"] = nil - record["relat#{next_person_index}"] = nil - - @logger.info("lettings log #{record.id}'s person #{next_person_index} details moved to person #{person_index} details") - - person_index += 1 - next_person_index += 1 + move_person_details(record, person_index, next_person_index) else - record["age#{person_index}"] = safe_string_as_integer(xml_doc, "P#{next_person_index}Age") - record["age#{person_index}_known"] = age_known(xml_doc, next_person_index) - record["sex#{person_index}"] = sex(xml_doc, next_person_index) - record["ecstat#{person_index}"] = unsafe_string_as_integer(xml_doc, "P#{next_person_index}Eco") - record["relat#{person_index}"] = relat(xml_doc, next_person_index) - record["details_known_#{person_index}"] = details_known(person_index, record) - @logger.info("lettings log #{record.id}, reimported person #{person_index} details") - person_index += 1 - next_person_index += 1 + reimport_person_details(record, xml_doc, person_index, next_person_index) end + + person_index += 1 + next_person_index += 1 end record.values_updated_at = Time.zone.now @@ -399,5 +377,37 @@ module Imports unsafe_string_as_integer(xml_doc, "P#{person_index}Eco").present? || string_or_nil(xml_doc, "P#{person_index}Rel").present? end + + def move_person_details(record, person_index, next_person_index) + record["details_known_#{person_index}"] = record["details_known_#{next_person_index}"] + record["age#{person_index}"] = record["age#{next_person_index}"] + record["age#{person_index}_known"] = record["age#{next_person_index}_known"] + record["sex#{person_index}"] = record["sex#{next_person_index}"] + record["ecstat#{person_index}"] = record["ecstat#{next_person_index}"] + record["relat#{person_index}"] = record["relat#{next_person_index}"] + + record["details_known_#{next_person_index}"] = nil + record["age#{next_person_index}"] = nil + record["age#{next_person_index}_known"] = nil + record["sex#{next_person_index}"] = nil + record["ecstat#{next_person_index}"] = nil + record["relat#{next_person_index}"] = nil + + @logger.info("lettings log #{record.id}'s person #{next_person_index} details moved to person #{person_index} details") + end + + def reimport_person_details(record, xml_doc, person_index, next_person_index) + record["age#{person_index}"] = safe_string_as_integer(xml_doc, "P#{next_person_index}Age") + record["age#{person_index}_known"] = age_known(xml_doc, next_person_index) + record["sex#{person_index}"] = sex(xml_doc, next_person_index) + record["ecstat#{person_index}"] = unsafe_string_as_integer(xml_doc, "P#{next_person_index}Eco") + record["relat#{person_index}"] = relat(xml_doc, next_person_index) + record["details_known_#{person_index}"] = details_known(person_index, record) + @logger.info("lettings log #{record.id}, reimported person #{person_index} details") + end + + def person_exists_on_the_log?(record, person_index) + person_index <= record.hhmemb + end end end diff --git a/spec/services/imports/lettings_logs_field_import_service_spec.rb b/spec/services/imports/lettings_logs_field_import_service_spec.rb index c696cd63c..7f7c8bf3c 100644 --- a/spec/services/imports/lettings_logs_field_import_service_spec.rb +++ b/spec/services/imports/lettings_logs_field_import_service_spec.rb @@ -1134,8 +1134,8 @@ RSpec.describe Imports::LettingsLogsFieldImportService do end it "moves the details of all the household members" do - expect(logger).to receive(:info).with(/lettings log \d+ has details for person 2, skipping update/) - expect(logger).to receive(:info).with(/lettings log \d+ has details for person 3, skipping update/) + expect(logger).to receive(:info).with(/lettings log \d+ has details for person 2, skipping person/) + expect(logger).to receive(:info).with(/lettings log \d+ has details for person 3, skipping person/) expect(logger).to receive(:info).with(/lettings log \d+'s person 5 details moved to person 4 details/) expect(logger).to receive(:info).with(/lettings log \d+'s person 6 details moved to person 5 details/) expect(logger).to receive(:info).with(/lettings log \d+, reimported person 6 details/) @@ -1189,8 +1189,8 @@ RSpec.describe Imports::LettingsLogsFieldImportService do end it "moves the details of all the relevant household members" do - expect(logger).to receive(:info).with(/lettings log \d+ has details for person 2, skipping update/) - expect(logger).to receive(:info).with(/lettings log \d+ has details for person 3, skipping update/) + expect(logger).to receive(:info).with(/lettings log \d+ has details for person 2, skipping person/) + expect(logger).to receive(:info).with(/lettings log \d+ has details for person 3, skipping person/) expect(logger).to receive(:info).with(/lettings log \d+'s person 6 details moved to person 4 details/) expect(logger).to receive(:info).with(/lettings log \d+, reimported person 5 details/) expect(logger).to receive(:info).with(/lettings log \d+, reimported person 6 details/)