Browse Source

Allow reimporting details for any single missing person

pull/1925/head
Kat 3 years ago
parent
commit
2514f7ce41
  1. 50
      app/services/imports/lettings_logs_field_import_service.rb
  2. 120
      spec/services/imports/lettings_logs_field_import_service_spec.rb

50
app/services/imports/lettings_logs_field_import_service.rb

@ -309,23 +309,39 @@ module Imports
record = LettingsLog.find_by(old_id:)
return @logger.warn("lettings log with old id #{old_id} not found") unless record
return @logger.info("lettings log #{record.id} person 2 details are not known, skipping update") if record.details_known_2 == 1
return @logger.info("lettings log #{record.id} has details for person 2, skipping update") if record.has_any_person_details?(2)
record.age2_known = record.age3_known
record.age2 = record.age3
record.sex2 = record.sex3
record.ecstat2 = record.ecstat3
record.relat2 = record.relat3
@logger.info("lettings log #{record.id}'s person 3 details moved to person 2 details")
record.age3 = safe_string_as_integer(xml_doc, "P4Age")
record.age3_known = age_known(xml_doc, 4)
record.sex3 = sex(xml_doc, 4)
record.ecstat3 = unsafe_string_as_integer(xml_doc, "P4Eco")
record.relat3 = relat(xml_doc, 4)
@logger.info("lettings log #{record.id}, reimported person 3 details")
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
(2..record.hhmemb - 1).each do |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")
next
end
record["details_known_#{person_index}"] = record["details_known_#{person_index + 1}"]
record["age#{person_index}"] = record["age#{person_index + 1}"]
record["age#{person_index}_known"] = record["age#{person_index + 1}_known"]
record["sex#{person_index}"] = record["sex#{person_index + 1}"]
record["ecstat#{person_index}"] = record["ecstat#{person_index + 1}"]
record["relat#{person_index}"] = record["relat#{person_index + 1}"]
record["details_known_#{person_index + 1}"] = nil
record["age#{person_index + 1}"] = nil
record["age#{person_index + 1}_known"] = nil
record["sex#{person_index + 1}"] = nil
record["ecstat#{person_index + 1}"] = nil
record["relat#{person_index + 1}"] = nil
@logger.info("lettings log #{record.id}'s person #{person_index + 1} details moved to person #{person_index} details")
end
record["age#{record.hhmemb}"] = safe_string_as_integer(xml_doc, "P#{record.hhmemb + 1}Age")
record["age#{record.hhmemb}_known"] = age_known(xml_doc, record.hhmemb + 1)
record["sex#{record.hhmemb}"] = sex(xml_doc, record.hhmemb + 1)
record["ecstat#{record.hhmemb}"] = unsafe_string_as_integer(xml_doc, "P#{record.hhmemb + 1}Eco")
record["relat#{record.hhmemb}"] = relat(xml_doc, record.hhmemb + 1)
record["details_known_#{record.hhmemb}"] = record.has_any_person_details?(record.hhmemb) ? 0 : 1
@logger.info("lettings log #{record.id}, reimported person #{record.hhmemb} details")
record.values_updated_at = Time.zone.now
record.save!

120
spec/services/imports/lettings_logs_field_import_service_spec.rb

@ -1034,6 +1034,11 @@ RSpec.describe Imports::LettingsLogsFieldImportService do
lettings_log_xml.at_xpath("//xmlns:P4Sex").content = "Male"
lettings_log_xml.at_xpath("//xmlns:P4Rel").content = "Child"
lettings_log_xml.at_xpath("//xmlns:P4Eco").content = "9) Child under 16"
lettings_log_xml.at_xpath("//xmlns:P7Age").content = 7
lettings_log_xml.at_xpath("//xmlns:P7Sex").content = "Male"
lettings_log_xml.at_xpath("//xmlns:P7Rel").content = "Child"
lettings_log_xml.at_xpath("//xmlns:P7Eco").content = "9) Child under 16"
end
context "when the lettings log has no details for person 2" do
@ -1052,6 +1057,7 @@ RSpec.describe Imports::LettingsLogsFieldImportService do
expect(lettings_log.sex2).to eq("F")
expect(lettings_log.ecstat2).to eq(10)
expect(lettings_log.relat2).to eq("X")
expect(lettings_log.age3_known).to eq(0)
expect(lettings_log.age3).to eq(7)
expect(lettings_log.sex3).to eq("M")
@ -1061,6 +1067,116 @@ RSpec.describe Imports::LettingsLogsFieldImportService do
end
end
context "when the lettings log has no details for person 2 and there are 6 household members" do
before do
lettings_log.update(details_known_2: 0, age2_known: nil, age2: nil, sex2: nil, ecstat2: nil, relat2: nil, hhmemb: 6,
details_known_3: 0, age3_known: 0, age3: 19, sex3: "F", ecstat3: 10, relat3: "X",
details_known_4: 1, age4_known: nil, age4: nil, sex4: nil, ecstat4: nil, relat4: nil,
details_known_5: 0, age5_known: 0, age5: 21, sex5: "M", ecstat5: 1, relat5: "P",
details_known_6: 0, age6_known: 0, age6: 22, sex6: "R", ecstat6: 10, relat6: "R")
end
it "moves the details of all the household members" do
expect(logger).to receive(:info).with(/lettings log \d+'s person 3 details moved to person 2 details/)
expect(logger).to receive(:info).with(/lettings log \d+'s person 4 details moved to person 3 details/)
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/)
import_service.send(:update_person_details, lettings_log_xml)
lettings_log.reload
expect(lettings_log.age2_known).to eq(0)
expect(lettings_log.age2).to eq(19)
expect(lettings_log.sex2).to eq("F")
expect(lettings_log.ecstat2).to eq(10)
expect(lettings_log.relat2).to eq("X")
expect(lettings_log.details_known_3).to eq(1)
expect(lettings_log.age3_known).to eq(nil)
expect(lettings_log.age3).to eq(nil)
expect(lettings_log.sex3).to eq(nil)
expect(lettings_log.ecstat3).to eq(nil)
expect(lettings_log.relat3).to eq(nil)
expect(lettings_log.details_known_4).to eq(0)
expect(lettings_log.age4_known).to eq(0)
expect(lettings_log.age4).to eq(21)
expect(lettings_log.sex4).to eq("M")
expect(lettings_log.ecstat4).to eq(1)
expect(lettings_log.relat4).to eq("P")
expect(lettings_log.details_known_5).to eq(0)
expect(lettings_log.age5_known).to eq(0)
expect(lettings_log.age5).to eq(22)
expect(lettings_log.sex5).to eq("R")
expect(lettings_log.ecstat5).to eq(10)
expect(lettings_log.relat5).to eq("R")
expect(lettings_log.details_known_6).to eq(0)
expect(lettings_log.age6_known).to eq(0)
expect(lettings_log.age6).to eq(7)
expect(lettings_log.sex6).to eq("M")
expect(lettings_log.ecstat6).to eq(9)
expect(lettings_log.relat6).to eq("C")
expect(lettings_log.values_updated_at).not_to be_nil
end
end
context "when the lettings log has no details for person 4 and there are 6 household members" do
before do
lettings_log.update(details_known_2: 1, age2_known: nil, age2: nil, sex2: nil, ecstat2: nil, relat2: nil, hhmemb: 6,
details_known_3: 0, age3_known: 0, age3: 19, sex3: "F", ecstat3: 10, relat3: "X",
details_known_4: 0, age4_known: nil, age4: nil, sex4: nil, ecstat4: nil, relat4: nil,
details_known_5: 0, age5_known: 0, age5: 21, sex5: "M", ecstat5: 1, relat5: "P",
details_known_6: 0, age6_known: 0, age6: 22, sex6: "R", ecstat6: 10, relat6: "R")
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+'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/)
import_service.send(:update_person_details, lettings_log_xml)
lettings_log.reload
expect(lettings_log.details_known_2).to eq(1)
expect(lettings_log.age2_known).to eq(nil)
expect(lettings_log.age2).to eq(nil)
expect(lettings_log.sex2).to eq(nil)
expect(lettings_log.ecstat2).to eq(nil)
expect(lettings_log.relat2).to eq(nil)
expect(lettings_log.age3_known).to eq(0)
expect(lettings_log.age3).to eq(19)
expect(lettings_log.sex3).to eq("F")
expect(lettings_log.ecstat3).to eq(10)
expect(lettings_log.relat3).to eq("X")
expect(lettings_log.details_known_4).to eq(0)
expect(lettings_log.age4_known).to eq(0)
expect(lettings_log.age4).to eq(21)
expect(lettings_log.sex4).to eq("M")
expect(lettings_log.ecstat4).to eq(1)
expect(lettings_log.relat4).to eq("P")
expect(lettings_log.details_known_5).to eq(0)
expect(lettings_log.age5_known).to eq(0)
expect(lettings_log.age5).to eq(22)
expect(lettings_log.sex5).to eq("R")
expect(lettings_log.ecstat5).to eq(10)
expect(lettings_log.relat5).to eq("R")
expect(lettings_log.details_known_6).to eq(0)
expect(lettings_log.age6_known).to eq(0)
expect(lettings_log.age6).to eq(7)
expect(lettings_log.sex6).to eq("M")
expect(lettings_log.ecstat6).to eq(9)
expect(lettings_log.relat6).to eq("C")
expect(lettings_log.values_updated_at).not_to be_nil
end
end
context "when the lettings log has details for person 2" do
let(:lettings_log) { LettingsLog.find_by(old_id: lettings_log_id) }
@ -1069,7 +1185,7 @@ RSpec.describe Imports::LettingsLogsFieldImportService do
end
it "does not update the lettings_log person details" 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 all household member details, skipping update/)
import_service.send(:update_person_details, lettings_log_xml)
lettings_log.reload
expect(lettings_log.values_updated_at).to be_nil
@ -1084,7 +1200,7 @@ RSpec.describe Imports::LettingsLogsFieldImportService do
end
it "does not update the lettings_log person details" do
expect(logger).to receive(:info).with(/lettings log \d+ person 2 details are not known, skipping update/)
expect(logger).to receive(:info).with(/lettings log \d+ has all household member details, skipping update/)
import_service.send(:update_person_details, lettings_log_xml)
lettings_log.reload
expect(lettings_log.values_updated_at).to be_nil

Loading…
Cancel
Save