diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb
index 960ecad52..ab604ea40 100644
--- a/app/models/derived_variables/lettings_log_variables.rb
+++ b/app/models/derived_variables/lettings_log_variables.rb
@@ -186,7 +186,7 @@ private
end
def get_refused
- return 1 if age_refused? || sex_refused? || relat_refused? || ecstat_refused?
+ return 1 if details_unknown? || age_refused? || sex_refused? || relat_refused? || ecstat_refused?
0
end
diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb
index 45d13a792..79a6837d3 100644
--- a/app/models/lettings_log.rb
+++ b/app/models/lettings_log.rb
@@ -703,6 +703,10 @@ private
[ecstat1, ecstat2, ecstat3, ecstat4, ecstat5, ecstat6, ecstat7, ecstat8].any?(10)
end
+ def details_unknown?
+ [details_known_2, details_known_3, details_known_4, details_known_5, details_known_6, details_known_7, details_known_8].any?(1)
+ end
+
def soft_value_for_period(value)
num_of_weeks = NUM_OF_WEEKS_FROM_PERIOD[period]
return "" unless value && num_of_weeks
diff --git a/app/services/exports/lettings_log_export_service.rb b/app/services/exports/lettings_log_export_service.rb
index 9bcc8676c..bff076908 100644
--- a/app/services/exports/lettings_log_export_service.rb
+++ b/app/services/exports/lettings_log_export_service.rb
@@ -210,6 +210,17 @@ module Exports
add_location_fields!(lettings_log.location, attribute_hash) if lettings_log.location
attribute_hash.delete("unittype_gn")
end
+
+ # details unknown fields
+ (2..8).each do |index|
+ next unless lettings_log["details_known_#{index}"] == 1
+
+ attribute_hash["age#{index}"] = -9
+ attribute_hash["sex#{index}"] = "R"
+ attribute_hash["relat#{index}"] = "R"
+ attribute_hash["ecstat#{index}"] = 10
+ end
+
attribute_hash
end
diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb
index 74a04f9e6..f2700138c 100644
--- a/spec/models/lettings_log_spec.rb
+++ b/spec/models/lettings_log_spec.rb
@@ -1810,22 +1810,41 @@ RSpec.describe LettingsLog do
end
context "when answering the household characteristics questions" do
- let!(:lettings_log) do
- described_class.create({
- managing_organisation: owning_organisation,
- owning_organisation:,
- created_by: created_by_user,
- age1_known: 1,
- sex1: "R",
- relat2: "R",
- ecstat1: 10,
- })
+ context "and some person details are refused" do
+ let!(:lettings_log) do
+ described_class.create({
+ managing_organisation: owning_organisation,
+ owning_organisation:,
+ created_by: created_by_user,
+ age1_known: 1,
+ sex1: "R",
+ relat2: "R",
+ ecstat1: 10,
+ })
+ end
+
+ it "correctly derives and saves refused" do
+ record_from_db = described_class.find(lettings_log.id)
+ expect(record_from_db["refused"]).to eq(1)
+ expect(lettings_log["refused"]).to eq(1)
+ end
end
- it "correctly derives and saves refused" do
- record_from_db = described_class.find(lettings_log.id)
- expect(record_from_db["refused"]).to eq(1)
- expect(lettings_log["refused"]).to eq(1)
+ context "and some person details are not known" do
+ let!(:lettings_log) do
+ described_class.create({
+ managing_organisation: owning_organisation,
+ owning_organisation:,
+ created_by: created_by_user,
+ details_known_2: 1,
+ })
+ end
+
+ it "correctly derives and saves refused" do
+ record_from_db = described_class.find(lettings_log.id)
+ expect(record_from_db["refused"]).to eq(1)
+ expect(lettings_log["refused"]).to eq(1)
+ end
end
end
diff --git a/spec/services/exports/lettings_log_export_service_spec.rb b/spec/services/exports/lettings_log_export_service_spec.rb
index 7b9f55b93..5402c19db 100644
--- a/spec/services/exports/lettings_log_export_service_spec.rb
+++ b/spec/services/exports/lettings_log_export_service_spec.rb
@@ -150,6 +150,32 @@ RSpec.describe Exports::LettingsLogExportService do
end
end
+ context "and one lettings log with unknown user details is available for export" do
+ let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, details_known_2: 1, created_by: user, propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", tenancycode: "BZ737", startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) }
+
+ def replace_person_details(export_file)
+ export_file.sub!("32", "-9")
+ export_file.sub!("6", "10")
+ export_file.sub!("M", "R")
+ export_file.sub!("P", "R")
+ export_file.sub!("0", "1")
+ export_file.sub!("4", "3")
+ export_file.sub!("2", "1")
+ end
+
+ it "generates an XML export file with the expected content within the ZIP file" do
+ expected_content = replace_entity_ids(lettings_log, xml_export_file.read)
+ expected_content = replace_person_details(expected_content)
+ expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) do |_, content|
+ entry = Zip::File.open_buffer(content).find_entry(expected_data_filename)
+ expect(entry).not_to be_nil
+ expect(entry.get_input_stream.read).to eq(expected_content)
+ end
+
+ export_service.export_xml_lettings_logs
+ end
+ end
+
context "with 23/24 collection period" do
before do
Timecop.freeze(Time.zone.local(2023, 4, 3))