Browse Source

CLDC-3197 Export correct fields based on year (#2230)

* Export correct fields based on year

* Fix export test file

* Remove default value
pull/2253/head
kosiakkatrina 10 months ago committed by GitHub
parent
commit
60a810aa84
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 14
      app/services/exports/lettings_log_export_constants.rb
  2. 9
      app/services/exports/lettings_log_export_service.rb
  3. 164
      spec/fixtures/exports/general_needs_log_24_25.xml
  4. 30
      spec/services/exports/lettings_log_export_service_spec.rb

14
app/services/exports/lettings_log_export_constants.rb

@ -138,7 +138,9 @@ module Exports::LettingsLogExportConstants
"location_status",
"created_by",
"amended_by",
"duplicate_set_id"
"duplicate_set_id",
"accessible_register",
"nationality_all"
]
(1..8).each do |index|
@ -155,4 +157,14 @@ module Exports::LettingsLogExportConstants
%w[a b c d e f g h].each do |letter|
EXPORT_FIELDS << "housingneeds_#{letter}"
end
POST_2024_EXPORT_FIELDS = Set[
"accessible_register",
"nationality_all"
]
PRE_2024_EXPORT_FIELDS = Set[
"national",
"offered"
]
end

9
app/services/exports/lettings_log_export_service.rb

@ -193,6 +193,7 @@ module Exports
attribute_hash["cbl"] = 2 if attribute_hash["cbl"]&.zero?
attribute_hash["cap"] = 2 if attribute_hash["cap"]&.zero?
attribute_hash["chr"] = 2 if attribute_hash["chr"]&.zero?
attribute_hash["accessible_register"] = 2 if attribute_hash["accessible_register"]&.zero?
# Age refused
(1..8).each do |index|
@ -258,12 +259,14 @@ module Exports
attributes.reject! { |attribute| is_omitted_field?(attribute) }
end
def is_omitted_field?(field_name)
def is_omitted_field?(field_name, lettings_log)
pattern_age = /age\d_known/
details_known_prefix = "details_known_"
field_name.starts_with?(details_known_prefix) ||
pattern_age.match(field_name) ||
!EXPORT_FIELDS.include?(field_name)
!EXPORT_FIELDS.include?(field_name) ||
(lettings_log.form.start_year_after_2024? && PRE_2024_EXPORT_FIELDS.include?(field_name)) ||
(!lettings_log.form.start_year_after_2024? && POST_2024_EXPORT_FIELDS.include?(field_name))
end
def build_export_xml(lettings_logs)
@ -274,7 +277,7 @@ module Exports
form = doc.create_element("form")
doc.at("forms") << form
attribute_hash.each do |key, value|
if is_omitted_field?(key)
if is_omitted_field?(key, lettings_log)
next
else
form << doc.create_element(key, value)

164
spec/fixtures/exports/general_needs_log_24_25.xml vendored

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="UTF-8"?>
<forms>
<form>
<status>1</status>
<tenancycode>BZ737</tenancycode>
<age1>35</age1>
<sex1>F</sex1>
<ethnic>2</ethnic>
<prevten>6</prevten>
<ecstat1>0</ecstat1>
<hhmemb>2</hhmemb>
<age2>32</age2>
<sex2>M</sex2>
<ecstat2>6</ecstat2>
<age3/>
<sex3/>
<ecstat3/>
<age4/>
<sex4/>
<ecstat4/>
<age5/>
<sex5/>
<ecstat5/>
<age6/>
<sex6/>
<ecstat6/>
<age7/>
<sex7/>
<ecstat7/>
<age8/>
<sex8/>
<ecstat8/>
<homeless>1</homeless>
<underoccupation_benefitcap>4</underoccupation_benefitcap>
<leftreg>4</leftreg>
<reservist>1</reservist>
<illness>1</illness>
<preg_occ>2</preg_occ>
<startertenancy>1</startertenancy>
<tenancylength>5</tenancylength>
<tenancy>4</tenancy>
<ppostcode_full>A1 1AA</ppostcode_full>
<rsnvac>6</rsnvac>
<unittype_gn>7</unittype_gn>
<beds>3</beds>
<wchair>1</wchair>
<earnings>268</earnings>
<incfreq>1</incfreq>
<benefits>1</benefits>
<period>2</period>
<layear>2</layear>
<waityear>7</waityear>
<postcode_full>SE2 6RT</postcode_full>
<reasonpref>1</reasonpref>
<cbl>2</cbl>
<chr>1</chr>
<cap>2</cap>
<reasonother/>
<housingneeds_a>1</housingneeds_a>
<housingneeds_b>0</housingneeds_b>
<housingneeds_c>0</housingneeds_c>
<housingneeds_f>0</housingneeds_f>
<housingneeds_g>0</housingneeds_g>
<housingneeds_h>0</housingneeds_h>
<illness_type_1>0</illness_type_1>
<illness_type_2>1</illness_type_2>
<illness_type_3>0</illness_type_3>
<illness_type_4>0</illness_type_4>
<illness_type_8>0</illness_type_8>
<illness_type_5>0</illness_type_5>
<illness_type_6>0</illness_type_6>
<illness_type_7>0</illness_type_7>
<illness_type_9>0</illness_type_9>
<illness_type_10>0</illness_type_10>
<rp_homeless>0</rp_homeless>
<rp_insan_unsat>1</rp_insan_unsat>
<rp_medwel>0</rp_medwel>
<rp_hardship>0</rp_hardship>
<rp_dontknow>0</rp_dontknow>
<tenancyother/>
<irproduct_other/>
<reason>4</reason>
<propcode>123</propcode>
<la>E09000003</la>
<prevloc>E07000105</prevloc>
<hb>6</hb>
<hbrentshortfall>1</hbrentshortfall>
<mrcdate>2022-05-05T10:36:49+01:00</mrcdate>
<incref>0</incref>
<startdate>2024-04-02T10:36:49+01:00</startdate>
<armedforces>1</armedforces>
<unitletas>2</unitletas>
<builtype>1</builtype>
<voiddate>2021-11-03T00:00:00+00:00</voiddate>
<renttype>2</renttype>
<needstype>1</needstype>
<lettype>7</lettype>
<totchild>0</totchild>
<totelder>0</totelder>
<totadult>2</totadult>
<nocharge>0</nocharge>
<referral>2</referral>
<brent>200.0</brent>
<scharge>50.0</scharge>
<pscharge>40.0</pscharge>
<supcharg>35.0</supcharg>
<tcharge>325.0</tcharge>
<tshortfall>12.0</tshortfall>
<chcharge/>
<ppcodenk>0</ppcodenk>
<has_benefits>1</has_benefits>
<renewal>0</renewal>
<wrent>100.0</wrent>
<wscharge>25.0</wscharge>
<wpschrge>20.0</wpschrge>
<wsupchrg>17.5</wsupchrg>
<wtcharge>162.5</wtcharge>
<wtshortfall>6.0</wtshortfall>
<refused>0</refused>
<housingneeds>1</housingneeds>
<wchchrg/>
<newprop>2</newprop>
<relat2>P</relat2>
<relat3/>
<relat4/>
<relat5/>
<relat6/>
<relat7/>
<relat8/>
<lar>2</lar>
<irproduct/>
<joint>3</joint>
<sheltered/>
<hhtype>4</hhtype>
<new_old>2</new_old>
<vacdays>698</vacdays>
<uprn/>
<uprn_known>0</uprn_known>
<uprn_confirmed/>
<address_line1>fake address</address_line1>
<address_line2/>
<town_or_city>London</town_or_city>
<county/>
<discarded_at/>
<creation_method>1</creation_method>
<duplicate_set_id/>
<nationality_all/>
<accessible_register>2</accessible_register>
<formid>{id}</formid>
<owningorgid>{owning_org_id}</owningorgid>
<owningorgname>DLUHC</owningorgname>
<hcnum>1234</hcnum>
<maningorgid>{managing_org_id}</maningorgid>
<maningorgname>DLUHC</maningorgname>
<manhcnum>1234</manhcnum>
<createddate>2024-04-03T00:00:00+01:00</createddate>
<uploaddate>2024-04-03T00:00:00+01:00</uploaddate>
<log_id>{log_id}</log_id>
<created_by>test1@example.com</created_by>
<amended_by/>
<renttype_detail>2</renttype_detail>
<providertype>1</providertype>
</form>
</forms>

30
spec/services/exports/lettings_log_export_service_spec.rb

@ -459,6 +459,36 @@ RSpec.describe Exports::LettingsLogExportService do
export_service.export_xml_lettings_logs
end
end
context "with 24/25 collection period" do
before do
Timecop.freeze(Time.zone.local(2024, 4, 3))
Singleton.__init__(FormHandler)
end
after do
Timecop.unfreeze
Singleton.__init__(FormHandler)
end
context "and one lettings log is available for export" do
let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, created_by: user, ppostcode_full: "A1 1AA", nationality_all_group: 13, propcode: "123", postcode_full: "SE2 6RT", tenancycode: "BZ737", startdate: Time.zone.local(2024, 4, 2, 10, 36, 49), voiddate: Time.zone.local(2021, 11, 3), mrcdate: Time.zone.local(2022, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) }
let(:expected_zip_filename) { "core_2024_2025_apr_mar_f0001_inc0001.zip" }
let(:expected_data_filename) { "core_2024_2025_apr_mar_f0001_inc0001_pt001.xml" }
let(:xml_export_file) { File.open("spec/fixtures/exports/general_needs_log_24_25.xml", "r:UTF-8") }
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)
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
end
end
context "when exporting a supported housing lettings logs in XML" do

Loading…
Cancel
Save