Browse Source

CLDC-4204: Update bulk upload fields sales (#3223)

* CLDC-4204: Renumber fields to match spec

* CLDC-4204: Update log to csv for 2026

* CLDC-4204: Cleanup BU todo commments

* CLDC-4204: Replace BU example file

* CLDC-4204: Update row parser question titles to match form

* fixup! CLDC-4204: Update row parser question titles to match form

fix sales log typo

Co-authored-by: Oscar Richardson <116292912+oscar-richardson-softwire@users.noreply.github.com>

* fixup! CLDC-4204: Renumber fields to match spec

update dupe fields comment

Co-authored-by: Oscar Richardson <116292912+oscar-richardson-softwire@users.noreply.github.com>

* fixup! CLDC-4204: Renumber fields to match spec

check the same field as before

---------

Co-authored-by: Oscar Richardson <116292912+oscar-richardson-softwire@users.noreply.github.com>
main
Samuel Young 2 days ago committed by GitHub
parent
commit
61eb52516d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  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/services/bulk_upload/sales/validator_spec.rb
  8. 2
      spec/services/bulk_upload/sales/year2026/csv_parser_spec.rb
  9. 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
def to_2026_row
# TODO: CLDC-4162: Implement when 2026 format is known
[
overrides[:organisation_id] || log.owning_organisation&.old_visible_id, # 1
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
def to_2026_row
# TODO: CLDC-4162: Implement when 2026 template is available
[
log.saledate&.day,
log.saledate&.month,
@ -552,53 +551,66 @@ class BulkUpload::SalesLogToCsv
log.privacynotice,
log.uprn,
log.address_line1&.tr(",", " "), # 20
log.address_line1&.tr(",", " "),
log.address_line2&.tr(",", " "),
log.town_or_city&.tr(",", " "),
log.county&.tr(",", " "),
log.county&.tr(",", " "), # 20
((log.postcode_full || "").split(" ") || [""]).first,
((log.postcode_full || "").split(" ") || [""]).last,
log.la,
log.proptype,
log.buildheightclass,
log.beds,
log.builtype,
log.wchair,
log.age1,
log.sexrab1,
log.ethnic, # 30
log.sexrab1, # 30
log.gender_same_as_sex1,
log.gender_description1,
log.ethnic,
log.nationality_all_group,
log.ecstat1,
log.buy1livein,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat2],
log.age2,
log.sexrab2,
log.gender_same_as_sex2, # 40
log.gender_description2,
log.ethnic_group2,
log.nationality_all_buyer2_group,
log.ecstat2,
log.buy2livein, # 40
log.buy2livein,
log.hholdcount,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat3],
log.age3,
log.sexrab3,
log.gender_same_as_sex3, # 50
log.gender_description3,
log.ecstat3,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat4],
log.age4,
log.sexrab4,
log.gender_same_as_sex4,
log.gender_description4,
log.ecstat4,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat5], # 50
log.age5,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat5],
log.age5, # 60
log.sexrab5,
log.gender_same_as_sex5,
log.gender_description5,
log.ecstat5,
{ "P" => 1, "X" => 2, "R" => 3 }[log.relat6],
log.age6,
log.sexrab6,
log.ecstat6,
log.gender_same_as_sex6,
log.gender_description6,
log.ecstat6, # 70
log.prevten,
log.ppcodenk,
((log.ppostcode_full || "").split(" ") || [""]).first, # 60
((log.ppostcode_full || "").split(" ") || [""]).first,
((log.ppostcode_full || "").split(" ") || [""]).last,
log.prevloc,
log.buy2living,
@ -606,32 +618,32 @@ class BulkUpload::SalesLogToCsv
log.hhregres,
log.hhregresstill,
log.armedforcesspouse,
log.armedforcesspouse, # 80
log.disabled,
log.wheel,
log.income1, # 70
log.income1,
log.inc1mort,
log.income2,
log.inc2mort,
log.hb,
log.savings.present? || "R",
log.prevown,
log.prevshared,
log.prevshared, # 90
log.resale,
log.proplen,
log.hodate&.day, # 80
log.hodate&.day,
log.hodate&.month,
log.hodate&.strftime("%y"),
log.frombeds,
log.fromprop,
log.socprevten,
log.value,
log.equity,
log.equity, # 100
log.mortgageused,
log.mortgage,
log.mortlen, # 90
log.mortlen,
log.deposit,
log.cashdis,
log.mrent,
@ -639,48 +651,34 @@ class BulkUpload::SalesLogToCsv
log.management_fee,
log.stairbought,
log.stairowned,
log.stairowned, # 110
log.staircasesale,
log.firststair,
log.initialpurchase&.day, # 100
log.initialpurchase&.day,
log.initialpurchase&.month,
log.initialpurchase&.strftime("%y"),
log.numstair,
log.lasttransaction&.day,
log.lasttransaction&.month,
log.lasttransaction&.strftime("%y"),
log.value,
log.value, # 120
log.equity,
log.mortgageused,
log.mrentprestaircasing, # 110
log.mrentprestaircasing,
log.mrent,
log.hasservicechargeschanged,
log.newservicecharges,
log.proplen,
log.value,
log.grant,
log.discount,
log.discount, # 130
log.mortgageused,
log.mortgage,
log.mortlen,
log.extrabor,
log.deposit, # 120
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
log.deposit,
log.mscharge, # 136
]
end

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

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

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

@ -3,7 +3,6 @@ require "csv"
class BulkUpload::Sales::Year2026::CsvParser
include CollectionTimeHelper
# TODO: CLDC-4162: Update when 2026 format is known
FIELDS = 136
FORM_YEAR = 2026
@ -26,8 +25,7 @@ class BulkUpload::Sales::Year2026::CsvParser
end
def cols
# TODO: CLDC-4162: Update when 2026 format is known
@cols ||= ("A".."EF").to_a
@cols ||= ("A".."EG").to_a
end
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/services/bulk_upload/sales/validator_spec.rb

@ -127,7 +127,7 @@ RSpec.describe BulkUpload::Sales::Validator do
before do
log.owning_organisation = nil
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.rewind
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
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

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

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