Browse Source

CLDC-4151: Add new fields to bulk upload

use new fields as presented in bulk upload
CLDC-4151-new-referral-questions
Samuel Young 3 weeks ago
parent
commit
46c8d360df
  1. 154
      app/helpers/bulk_upload/lettings_log_to_csv.rb
  2. 1
      app/models/organisation.rb
  3. 6
      app/services/bulk_upload/lettings/year2026/csv_parser.rb
  4. 52
      app/services/bulk_upload/lettings/year2026/row_parser.rb

154
app/helpers/bulk_upload/lettings_log_to_csv.rb

@ -93,12 +93,162 @@ class BulkUpload::LettingsLogToCsv
def default_2026_field_numbers
# TODO: CLDC-4162 Replace with actual field numbers when 2026 format is known
(1..129).to_a
(1..132).to_a
end
def to_2026_row
# TODO: CLDC-4162: Implement when 2026 format is known
to_2025_row
owning_organisation = if overrides[:organisation_id]
then Organisation.find(overrides[:organisation_id])
else
log.owning_organisation
end
[
owning_organisation&.id, # 1
overrides[:managing_organisation_id] || log.managing_organisation&.old_visible_id,
log.assigned_to&.email,
log.needstype,
log.scheme&.id ? "S#{log.scheme&.id}" : "",
log.location&.id,
renewal,
log.startdate&.day,
log.startdate&.month,
log.startdate&.strftime("%y"), # 10
rent_type,
log.irproduct_other,
log.tenancycode,
log.propcode,
log.declaration,
log.rsnvac,
log.unitletas,
log.uprn,
log.address_line1&.tr(",", " "),
log.address_line2&.tr(",", " "), # 20
log.town_or_city&.tr(",", " "),
log.county&.tr(",", " "),
((log.postcode_full || "").split(" ") || [""]).first,
((log.postcode_full || "").split(" ") || [""]).last,
log.la,
log.unittype_gn,
log.builtype,
log.wchair,
log.beds,
log.voiddate&.day, # 30
log.voiddate&.month,
log.voiddate&.strftime("%y"),
log.mrcdate&.day,
log.mrcdate&.month,
log.mrcdate&.strftime("%y"),
log.sheltered,
log.joint,
log.startertenancy,
log.tenancy,
log.tenancyother, # 40
log.tenancylength,
log.age1 || overrides[:age1],
log.sex1,
log.ethnic,
log.nationality_all_group,
log.ecstat1,
relat_number(log.relat2),
log.age2 || overrides[:age2],
log.sex2,
log.ecstat2, # 50
relat_number(log.relat3),
log.age3 || overrides[:age3],
log.sex3,
log.ecstat3,
relat_number(log.relat4),
log.age4 || overrides[:age4],
log.sex4,
log.ecstat4,
relat_number(log.relat5),
log.age5 || overrides[:age5], # 60
log.sex5,
log.ecstat5,
relat_number(log.relat6),
log.age6 || overrides[:age6],
log.sex6,
log.ecstat6,
relat_number(log.relat7),
log.age7 || overrides[:age7],
log.sex7,
log.ecstat7, # 70
relat_number(log.relat8),
log.age8 || overrides[:age8],
log.sex8,
log.ecstat8,
log.armedforces,
log.leftreg,
log.reservist,
log.preg_occ,
log.housingneeds_a,
log.housingneeds_b, # 80
log.housingneeds_c,
log.housingneeds_f,
log.housingneeds_g,
log.housingneeds_h,
overrides[:illness] || log.illness,
log.illness_type_1,
log.illness_type_2,
log.illness_type_3,
log.illness_type_4,
log.illness_type_5, # 90
log.illness_type_6,
log.illness_type_7,
log.illness_type_8,
log.illness_type_9,
log.illness_type_10,
log.layear,
log.waityear,
log.reason,
log.reasonother,
log.prevten, # 100
homeless,
previous_postcode_known,
((log.ppostcode_full || "").split(" ") || [""]).first,
((log.ppostcode_full || "").split(" ") || [""]).last,
log.prevloc,
log.reasonpref,
log.rp_homeless,
log.rp_insan_unsat,
log.rp_medwel,
log.rp_hardship, # 110
log.rp_dontknow,
cbl,
chr,
cap,
accessible_register,
owning_organisation&.la? ? log.referral_register : nil,
net_income_known,
log.incfreq,
log.earnings,
log.hb, # 120
log.benefits,
log.household_charge,
log.period,
log.brent,
log.scharge,
log.pscharge,
log.supcharg,
log.hbrentshortfall,
log.tshortfall,
owning_organisation&.prp? ? log.referral_register : nil,
log.referral_noms,
log.referral_org, # 132
]
end
def to_2025_row

1
app/models/organisation.rb

@ -74,6 +74,7 @@ class Organisation < ApplicationRecord
before_save :clear_group_member_fields_if_not_group_member
alias_method :la?, :LA?
alias_method :prp?, :PRP?
validates :name, presence: { message: I18n.t("validations.organisation.name_missing") }
validates :name, uniqueness: { case_sensitive: false, message: I18n.t("validations.organisation.name_not_unique") }

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

@ -4,8 +4,8 @@ class BulkUpload::Lettings::Year2026::CsvParser
include CollectionTimeHelper
# TODO: CLDC-4162: Update when 2026 format is known
FIELDS = 129
MAX_COLUMNS = 130
FIELDS = 132
MAX_COLUMNS = 133
FORM_YEAR = 2026
attr_reader :path
@ -28,7 +28,7 @@ class BulkUpload::Lettings::Year2026::CsvParser
def cols
# TODO: CLDC-4162: Update when 2026 format is known
@cols ||= ("A".."DZ").to_a
@cols ||= ("A".."EC").to_a
end
def row_parsers

52
app/services/bulk_upload/lettings/year2026/row_parser.rb

@ -120,7 +120,7 @@ class BulkUpload::Lettings::Year2026::RowParser
field_113: "Was the letting made under the Common Allocation Policy (CAP)?",
field_114: "Was the letting made under the Common Housing Register (CHR)?",
field_115: "Was the letting made under the Accessible Register?",
field_116: "What was the source of referral for this letting?",
field_116: "What was the source of referral for this letting? - LA properties",
field_117: "Do you know the household’s combined total income after tax?",
field_118: "How often does the household receive income?",
field_119: "How much income does the household have in total?",
@ -134,6 +134,9 @@ class BulkUpload::Lettings::Year2026::RowParser
field_127: "What is the support charge?",
field_128: "After the household has received any housing-related benefits, will they still need to pay for rent and charges?",
field_129: "What do you expect the outstanding amount to be?",
field_130: "What was the source of referral for this letting? - PRP properties part 1",
field_131: "What was the source of referral for this letting? - PRP properties part 2",
field_132: "What was the source of referral for this letting? - PRP properties part 3",
}.freeze
RENT_TYPE_BU_MAPPING = {
@ -282,6 +285,9 @@ class BulkUpload::Lettings::Year2026::RowParser
attribute :field_127, :decimal
attribute :field_128, :integer
attribute :field_129, :decimal
attribute :field_130, :integer
attribute :field_131, :integer
attribute :field_132, :integer
validate :validate_valid_radio_option, on: :before_log
@ -1101,8 +1107,9 @@ private
accessible_register: %i[field_115],
letting_allocation: %i[field_112 field_113 field_114 field_115],
referral_type: %i[field_116],
referral: %i[field_116],
referral_register: %i[field_116 field_130],
referral_noms: %i[field_131],
referral_org: %i[field_132],
net_income_known: %i[field_117],
incfreq: %i[field_118],
@ -1287,8 +1294,9 @@ private
attributes["accessible_register"] = accessible_register
attributes["letting_allocation_unknown"] = letting_allocation_unknown
attributes["referral_type"] = referral_type
attributes["referral"] = field_116
attributes["referral_register"] = referral_register
attributes["referral_noms"] = referral_noms
attributes["referral_org"] = referral_org
attributes["net_income_known"] = net_income_known
attributes["earnings"] = earnings
@ -1681,21 +1689,29 @@ private
false
end
def referral_type
mapping = {
1 => [20, 2, 8],
2 => [21, 3, 4, 22],
3 => [1, 10, 23],
4 => [15, 9, 14, 24, 17],
5 => [18, 19],
6 => [7],
7 => [16],
}
def referral_register
return unless owning_organisation
mapping.each do |key, values|
return key if values.include?(field_116)
if owning_organisation.la?
field_116
else
field_130
end
end
0
def referral_noms
return unless owning_organisation
if owning_organisation.la?
field_131
end
end
def referral_org
return unless owning_organisation
if owning_organisation.la?
field_132
end
end
end

Loading…
Cancel
Save