Compare commits

...

2 Commits

Author SHA1 Message Date
Samuel Young 61eb52516d
CLDC-4204: Update bulk upload fields sales (#3223) 3 days ago
Nat Dean-Lewis c95e33bf35
CLDC-4295: hhtype export updates (#3232) 3 days ago
  1. 1
      app/helpers/bulk_upload/lettings_log_to_csv.rb
  2. 76
      app/helpers/bulk_upload/sales_log_to_csv.rb
  3. 4
      app/services/bulk_upload/lettings/year2026/csv_parser.rb
  4. 4
      app/services/bulk_upload/sales/year2026/csv_parser.rb
  5. 1058
      app/services/bulk_upload/sales/year2026/row_parser.rb
  6. 32
      spec/fixtures/files/2026_27_sales_bulk_upload.csv
  7. 2
      spec/fixtures/files/sales_logs_csv_export_codes_26.csv
  8. 2
      spec/fixtures/files/sales_logs_csv_export_labels_26.csv
  9. 1
      spec/fixtures/variable_definitions/sales_download_26_27.csv
  10. 2
      spec/lib/tasks/log_variable_definitions_spec.rb
  11. 2
      spec/services/bulk_upload/sales/validator_spec.rb
  12. 2
      spec/services/bulk_upload/sales/year2026/csv_parser_spec.rb
  13. 504
      spec/services/bulk_upload/sales/year2026/row_parser_spec.rb

1
app/helpers/bulk_upload/lettings_log_to_csv.rb

@ -94,7 +94,6 @@ class BulkUpload::LettingsLogToCsv
end end
def to_2026_row def to_2026_row
# TODO: CLDC-4162: Implement when 2026 format is known
[ [
overrides[:organisation_id] || log.owning_organisation&.old_visible_id, # 1 overrides[:organisation_id] || log.owning_organisation&.old_visible_id, # 1
overrides[:managing_organisation_id] || log.managing_organisation&.old_visible_id, overrides[:managing_organisation_id] || log.managing_organisation&.old_visible_id,

76
app/helpers/bulk_upload/sales_log_to_csv.rb

@ -533,7 +533,6 @@ class BulkUpload::SalesLogToCsv
end end
def to_2026_row def to_2026_row
# TODO: CLDC-4162: Implement when 2026 template is available
[ [
log.saledate&.day, log.saledate&.day,
log.saledate&.month, log.saledate&.month,
@ -552,53 +551,66 @@ class BulkUpload::SalesLogToCsv
log.privacynotice, log.privacynotice,
log.uprn, log.uprn,
log.address_line1&.tr(",", " "), # 20 log.address_line1&.tr(",", " "),
log.address_line2&.tr(",", " "), log.address_line2&.tr(",", " "),
log.town_or_city&.tr(",", " "), log.town_or_city&.tr(",", " "),
log.county&.tr(",", " "), log.county&.tr(",", " "), # 20
((log.postcode_full || "").split(" ") || [""]).first, ((log.postcode_full || "").split(" ") || [""]).first,
((log.postcode_full || "").split(" ") || [""]).last, ((log.postcode_full || "").split(" ") || [""]).last,
log.la, log.la,
log.proptype, log.proptype,
log.buildheightclass,
log.beds, log.beds,
log.builtype, log.builtype,
log.wchair, log.wchair,
log.age1, log.age1,
log.sexrab1, log.sexrab1, # 30
log.ethnic, # 30 log.gender_same_as_sex1,
log.gender_description1,
log.ethnic,
log.nationality_all_group, log.nationality_all_group,
log.ecstat1, log.ecstat1,
log.buy1livein, log.buy1livein,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat2], { "P" => 1, "X" => 2, "R" => 3 }[log.relat2],
log.age2, log.age2,
log.sexrab2, log.sexrab2,
log.gender_same_as_sex2, # 40
log.gender_description2,
log.ethnic_group2, log.ethnic_group2,
log.nationality_all_buyer2_group, log.nationality_all_buyer2_group,
log.ecstat2, log.ecstat2,
log.buy2livein, # 40 log.buy2livein,
log.hholdcount, log.hholdcount,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat3], { "P" => 1, "X" => 2, "R" => 3 }[log.relat3],
log.age3, log.age3,
log.sexrab3, log.sexrab3,
log.gender_same_as_sex3, # 50
log.gender_description3,
log.ecstat3, log.ecstat3,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat4], { "P" => 1, "X" => 2, "R" => 3 }[log.relat4],
log.age4, log.age4,
log.sexrab4, log.sexrab4,
log.gender_same_as_sex4,
log.gender_description4,
log.ecstat4, log.ecstat4,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat5], # 50 { "P" => 1, "X" => 2, "R" => 3 }[log.relat5],
log.age5, log.age5, # 60
log.sexrab5, log.sexrab5,
log.gender_same_as_sex5,
log.gender_description5,
log.ecstat5, log.ecstat5,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat6], { "P" => 1, "X" => 2, "R" => 3 }[log.relat6],
log.age6, log.age6,
log.sexrab6, log.sexrab6,
log.ecstat6, log.gender_same_as_sex6,
log.gender_description6,
log.ecstat6, # 70
log.prevten, log.prevten,
log.ppcodenk, log.ppcodenk,
((log.ppostcode_full || "").split(" ") || [""]).first, # 60 ((log.ppostcode_full || "").split(" ") || [""]).first,
((log.ppostcode_full || "").split(" ") || [""]).last, ((log.ppostcode_full || "").split(" ") || [""]).last,
log.prevloc, log.prevloc,
log.buy2living, log.buy2living,
@ -606,32 +618,32 @@ class BulkUpload::SalesLogToCsv
log.hhregres, log.hhregres,
log.hhregresstill, log.hhregresstill,
log.armedforcesspouse, log.armedforcesspouse, # 80
log.disabled, log.disabled,
log.wheel, log.wheel,
log.income1, # 70 log.income1,
log.inc1mort, log.inc1mort,
log.income2, log.income2,
log.inc2mort, log.inc2mort,
log.hb, log.hb,
log.savings.present? || "R", log.savings.present? || "R",
log.prevown, log.prevown,
log.prevshared, log.prevshared, # 90
log.resale, log.resale,
log.proplen, log.proplen,
log.hodate&.day, # 80 log.hodate&.day,
log.hodate&.month, log.hodate&.month,
log.hodate&.strftime("%y"), log.hodate&.strftime("%y"),
log.frombeds, log.frombeds,
log.fromprop, log.fromprop,
log.socprevten, log.socprevten,
log.value, log.value,
log.equity, log.equity, # 100
log.mortgageused, log.mortgageused,
log.mortgage, log.mortgage,
log.mortlen, # 90 log.mortlen,
log.deposit, log.deposit,
log.cashdis, log.cashdis,
log.mrent, log.mrent,
@ -639,48 +651,34 @@ class BulkUpload::SalesLogToCsv
log.management_fee, log.management_fee,
log.stairbought, log.stairbought,
log.stairowned, log.stairowned, # 110
log.staircasesale, log.staircasesale,
log.firststair, log.firststair,
log.initialpurchase&.day, # 100 log.initialpurchase&.day,
log.initialpurchase&.month, log.initialpurchase&.month,
log.initialpurchase&.strftime("%y"), log.initialpurchase&.strftime("%y"),
log.numstair, log.numstair,
log.lasttransaction&.day, log.lasttransaction&.day,
log.lasttransaction&.month, log.lasttransaction&.month,
log.lasttransaction&.strftime("%y"), log.lasttransaction&.strftime("%y"),
log.value, log.value, # 120
log.equity, log.equity,
log.mortgageused, log.mortgageused,
log.mrentprestaircasing, # 110 log.mrentprestaircasing,
log.mrent, log.mrent,
log.hasservicechargeschanged,
log.newservicecharges,
log.proplen, log.proplen,
log.value, log.value,
log.grant, log.grant,
log.discount, log.discount, # 130
log.mortgageused, log.mortgageused,
log.mortgage, log.mortgage,
log.mortlen, log.mortlen,
log.extrabor, log.extrabor,
log.deposit, # 120 log.deposit,
log.mscharge, # 136
log.mscharge,
log.buildheightclass,
log.gender_same_as_sex1,
log.gender_description1,
log.gender_same_as_sex2,
log.gender_description2,
log.gender_same_as_sex3,
log.gender_description3,
log.gender_same_as_sex4,
log.gender_description4, # 130
log.gender_same_as_sex5,
log.gender_description5,
log.gender_same_as_sex6,
log.gender_description6,
log.hasservicechargeschanged,
log.newservicecharges, # 136
] ]
end end

4
app/services/bulk_upload/lettings/year2026/csv_parser.rb

@ -3,7 +3,6 @@ require "csv"
class BulkUpload::Lettings::Year2026::CsvParser class BulkUpload::Lettings::Year2026::CsvParser
include CollectionTimeHelper include CollectionTimeHelper
# TODO: CLDC-4162: Update when 2026 format is known
FIELDS = 147 FIELDS = 147
FORM_YEAR = 2026 FORM_YEAR = 2026
@ -26,8 +25,7 @@ class BulkUpload::Lettings::Year2026::CsvParser
end end
def cols def cols
# TODO: CLDC-4162: Update when 2026 format is known @cols ||= ("A".."ER").to_a
@cols ||= ("A".."FA").to_a
end end
def row_parsers def row_parsers

4
app/services/bulk_upload/sales/year2026/csv_parser.rb

@ -3,7 +3,6 @@ require "csv"
class BulkUpload::Sales::Year2026::CsvParser class BulkUpload::Sales::Year2026::CsvParser
include CollectionTimeHelper include CollectionTimeHelper
# TODO: CLDC-4162: Update when 2026 format is known
FIELDS = 136 FIELDS = 136
FORM_YEAR = 2026 FORM_YEAR = 2026
@ -26,8 +25,7 @@ class BulkUpload::Sales::Year2026::CsvParser
end end
def cols def cols
# TODO: CLDC-4162: Update when 2026 format is known @cols ||= ("A".."EG").to_a
@cols ||= ("A".."EF").to_a
end end
def row_parsers def row_parsers

1058
app/services/bulk_upload/sales/year2026/row_parser.rb

File diff suppressed because it is too large Load Diff

32
spec/fixtures/files/2026_27_sales_bulk_upload.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/sales_logs_csv_export_codes_26.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/sales_logs_csv_export_labels_26.csv vendored

File diff suppressed because one or more lines are too long

1
spec/fixtures/variable_definitions/sales_download_26_27.csv vendored

@ -20,3 +20,4 @@ gender_description6,If 'No', enter person 6's gender identity
hasservicechargeschanged,Will the service charge change after this staircasing transaction takes place? hasservicechargeschanged,Will the service charge change after this staircasing transaction takes place?
newservicecharges,What are the new total monthly service charges for the property? newservicecharges,What are the new total monthly service charges for the property?
hholdcount,In total, how many people live in the property? hholdcount,In total, how many people live in the property?
hhtype,Household type

1 sexrab1,What was buyer 1's sex at birth?
20 hasservicechargeschanged,Will the service charge change after this staircasing transaction takes place?
21 newservicecharges,What are the new total monthly service charges for the property?
22 hholdcount,In total, how many people live in the property?
23 hhtype,Household type

2
spec/lib/tasks/log_variable_definitions_spec.rb

@ -6,7 +6,7 @@ RSpec.describe "log_variable_definitions" do
subject(:task) { Rake::Task["data_import:add_variable_definitions"] } subject(:task) { Rake::Task["data_import:add_variable_definitions"] }
let(:path) { "spec/fixtures/variable_definitions" } let(:path) { "spec/fixtures/variable_definitions" }
let(:total_variable_definitions_count) { 466 } let(:total_variable_definitions_count) { 467 }
before do before do
Rake.application.rake_require("tasks/log_variable_definitions") Rake.application.rake_require("tasks/log_variable_definitions")

2
spec/services/bulk_upload/sales/validator_spec.rb

@ -127,7 +127,7 @@ RSpec.describe BulkUpload::Sales::Validator do
before do before do
log.owning_organisation = nil log.owning_organisation = nil
log.saledate = date log.saledate = date
file.write(log_to_csv.default_field_numbers_row) file.write(log_to_csv.default_field_numbers_row_for_year(year))
file.write(log_to_csv.to_csv_row) file.write(log_to_csv.to_csv_row)
file.rewind file.rewind
end end

2
spec/services/bulk_upload/sales/year2026/csv_parser_spec.rb

@ -166,7 +166,7 @@ RSpec.describe BulkUpload::Sales::Year2026::CsvParser do
it "returns correct column" do it "returns correct column" do
expect(service.column_for_field("field_1")).to eql("B") expect(service.column_for_field("field_1")).to eql("B")
expect(service.column_for_field("field_99")).to eql("CV") expect(service.column_for_field("field_112")).to eql("DI")
end end
end end
end end

504
spec/services/bulk_upload/sales/year2026/row_parser_spec.rb

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save