Browse Source

Move person details if some persons are skipped

pull/1903/head
Kat 3 years ago
parent
commit
ed5972d2d7
  1. 25
      app/services/imports/lettings_logs_import_service.rb
  2. 137
      spec/services/imports/lettings_logs_import_service_spec.rb

25
app/services/imports/lettings_logs_import_service.rb

@ -77,13 +77,15 @@ module Imports
attributes["rent_type"] = rent_type(xml_doc, attributes["lar"], attributes["irproduct"]) attributes["rent_type"] = rent_type(xml_doc, attributes["lar"], attributes["irproduct"])
attributes["hhmemb"] = household_members(xml_doc, previous_status) attributes["hhmemb"] = household_members(xml_doc, previous_status)
(1..8).each do |index| (1..8).each do |index|
attributes["age#{index}"] = safe_string_as_integer(xml_doc, "P#{index}Age") person_index = people_with_details_ids(xml_doc)[index - 1] || index
attributes["age#{index}_known"] = age_known(xml_doc, index, attributes["hhmemb"]) attributes["age#{index}"] = safe_string_as_integer(xml_doc, "P#{person_index}Age")
attributes["sex#{index}"] = sex(xml_doc, index) attributes["age#{index}_known"] = age_known(xml_doc, index, person_index, attributes["hhmemb"])
attributes["ecstat#{index}"] = unsafe_string_as_integer(xml_doc, "P#{index}Eco") attributes["sex#{index}"] = sex(xml_doc, person_index)
attributes["ecstat#{index}"] = unsafe_string_as_integer(xml_doc, "P#{person_index}Eco")
end end
(2..8).each do |index| (2..8).each do |index|
attributes["relat#{index}"] = relat(xml_doc, index) person_index = people_with_details_ids(xml_doc)[index - 1] || index
attributes["relat#{index}"] = relat(xml_doc, person_index)
attributes["details_known_#{index}"] = details_known(index, attributes) attributes["details_known_#{index}"] = details_known(index, attributes)
# Trips validation # Trips validation
@ -455,10 +457,10 @@ module Imports
end end
end end
def age_known(xml_doc, index, hhmemb) def age_known(xml_doc, index, person_index, hhmemb)
return nil if hhmemb.present? && index > hhmemb return nil if hhmemb.present? && index > hhmemb
age_refused = string_or_nil(xml_doc, "P#{index}AR") age_refused = string_or_nil(xml_doc, "P#{person_index}AR")
if age_refused.present? if age_refused.present?
if age_refused.casecmp?("AGE_REFUSED") || age_refused.casecmp?("No") if age_refused.casecmp?("AGE_REFUSED") || age_refused.casecmp?("No")
return 1 # No return 1 # No
@ -583,6 +585,15 @@ module Imports
((2..8).map { |x| string_or_nil(xml_doc, "P#{x}Rel") } + [string_or_nil(xml_doc, "P1Sex")]).compact ((2..8).map { |x| string_or_nil(xml_doc, "P#{x}Rel") } + [string_or_nil(xml_doc, "P1Sex")]).compact
end end
def people_with_details_ids(xml_doc)
[1] + (2..8).select do |x|
string_or_nil(xml_doc, "P#{x}Rel").present? ||
string_or_nil(xml_doc, "P#{x}Sex").present? ||
string_or_nil(xml_doc, "P#{x}Age").present? ||
string_or_nil(xml_doc, "P#{x}Eco").present?
end
end
def tshortfall_known?(xml_doc, attributes) def tshortfall_known?(xml_doc, attributes)
if attributes["tshortfall"].blank? && attributes["hbrentshortfall"] == 1 && overridden?(xml_doc, "xmlns", "Q18dyes") if attributes["tshortfall"].blank? && attributes["hbrentshortfall"] == 1 && overridden?(xml_doc, "xmlns", "Q18dyes")
1 1

137
spec/services/imports/lettings_logs_import_service_spec.rb

@ -1282,6 +1282,143 @@ RSpec.describe Imports::LettingsLogsImportService do
expect(lettings_log.status).to eq("completed") expect(lettings_log.status).to eq("completed")
end end
end end
context "and there are several household members" do
context "and one person details are skipped" do
before do
lettings_log_xml.at_xpath("//xmlns:HHMEMB").content = 2
lettings_log_xml.at_xpath("//xmlns:P2AR").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Age").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Sex").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Rel").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Eco").content = nil
lettings_log_xml.at_xpath("//xmlns:P3Age").content = 7
lettings_log_xml.at_xpath("//xmlns:P3Sex").content = "Male"
lettings_log_xml.at_xpath("//xmlns:P3Rel").content = "Child"
lettings_log_xml.at_xpath("//xmlns:P3Eco").content = "9) Child under 16"
end
it "correctly moves person details" do
lettings_log_service.send(:create_log, lettings_log_xml)
lettings_log = LettingsLog.where(old_id: lettings_log_id).first
expect(lettings_log&.hhmemb).to eq(2)
expect(lettings_log&.details_known_2).to eq(0)
expect(lettings_log&.age2_known).to eq(0)
expect(lettings_log&.age2).to eq(7)
expect(lettings_log&.sex2).to eq("M")
expect(lettings_log&.relat2).to eq("C")
end
end
context "and several consecutive person details are skipped" do
before do
lettings_log_xml.at_xpath("//xmlns:HHMEMB").content = 4
lettings_log_xml.at_xpath("//xmlns:P2AR").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Age").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Sex").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Rel").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Eco").content = nil
lettings_log_xml.at_xpath("//xmlns:P3AR").content = nil
lettings_log_xml.at_xpath("//xmlns:P3Age").content = nil
lettings_log_xml.at_xpath("//xmlns:P3Sex").content = nil
lettings_log_xml.at_xpath("//xmlns:P3Rel").content = nil
lettings_log_xml.at_xpath("//xmlns:P3Eco").content = nil
lettings_log_xml.at_xpath("//xmlns:P4Age").content = 7
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:P5Age").content = nil
lettings_log_xml.at_xpath("//xmlns:P5Sex").content = "Male"
lettings_log_xml.at_xpath("//xmlns:P5Rel").content = nil
lettings_log_xml.at_xpath("//xmlns:P5Eco").content = nil
lettings_log_xml.at_xpath("//xmlns:P6Age").content = 12
lettings_log_xml.at_xpath("//xmlns:P6Sex").content = "Female"
lettings_log_xml.at_xpath("//xmlns:P6Rel").content = "Child"
lettings_log_xml.at_xpath("//xmlns:P6Eco").content = "9) Child under 16"
end
it "correctly moves person details" do
lettings_log_service.send(:create_log, lettings_log_xml)
lettings_log = LettingsLog.where(old_id: lettings_log_id).first
expect(lettings_log&.hhmemb).to eq(4)
expect(lettings_log&.details_known_2).to eq(0)
expect(lettings_log&.age2_known).to eq(0)
expect(lettings_log&.age2).to eq(7)
expect(lettings_log&.sex2).to eq("M")
expect(lettings_log&.relat2).to eq("C")
expect(lettings_log&.details_known_3).to eq(0)
expect(lettings_log&.age3_known).to eq(0)
expect(lettings_log&.age3).to eq(nil)
expect(lettings_log&.sex3).to eq("M")
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(12)
expect(lettings_log&.sex4).to eq("F")
expect(lettings_log&.relat4).to eq("C")
end
end
context "and several non consecutive person details are skipped" do
before do
lettings_log_xml.at_xpath("//xmlns:HHMEMB").content = 4
lettings_log_xml.at_xpath("//xmlns:P2AR").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Age").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Sex").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Rel").content = nil
lettings_log_xml.at_xpath("//xmlns:P2Eco").content = nil
lettings_log_xml.at_xpath("//xmlns:P3Age").content = 7
lettings_log_xml.at_xpath("//xmlns:P3Sex").content = "Male"
lettings_log_xml.at_xpath("//xmlns:P3Rel").content = "Child"
lettings_log_xml.at_xpath("//xmlns:P3Eco").content = "9) Child under 16"
lettings_log_xml.at_xpath("//xmlns:P4AR").content = nil
lettings_log_xml.at_xpath("//xmlns:P4Age").content = nil
lettings_log_xml.at_xpath("//xmlns:P4Sex").content = nil
lettings_log_xml.at_xpath("//xmlns:P4Rel").content = nil
lettings_log_xml.at_xpath("//xmlns:P4Eco").content = nil
lettings_log_xml.at_xpath("//xmlns:P5Age").content = nil
lettings_log_xml.at_xpath("//xmlns:P5Sex").content = "Male"
lettings_log_xml.at_xpath("//xmlns:P5Rel").content = nil
lettings_log_xml.at_xpath("//xmlns:P5Eco").content = nil
lettings_log_xml.at_xpath("//xmlns:P6Age").content = 12
lettings_log_xml.at_xpath("//xmlns:P6Sex").content = "Female"
lettings_log_xml.at_xpath("//xmlns:P6Rel").content = "Child"
lettings_log_xml.at_xpath("//xmlns:P6Eco").content = "9) Child under 16"
end
it "correctly moves person details" do
lettings_log_service.send(:create_log, lettings_log_xml)
lettings_log = LettingsLog.where(old_id: lettings_log_id).first
expect(lettings_log&.hhmemb).to eq(4)
expect(lettings_log&.details_known_2).to eq(0)
expect(lettings_log&.age2_known).to eq(0)
expect(lettings_log&.age2).to eq(7)
expect(lettings_log&.sex2).to eq("M")
expect(lettings_log&.relat2).to eq("C")
expect(lettings_log&.details_known_3).to eq(0)
expect(lettings_log&.age3_known).to eq(0)
expect(lettings_log&.age3).to eq(nil)
expect(lettings_log&.sex3).to eq("M")
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(12)
expect(lettings_log&.sex4).to eq("F")
expect(lettings_log&.relat4).to eq("C")
end
end
end
end end
end end

Loading…
Cancel
Save