Browse Source

lint and fix typos

pull/2945/head
Carolyn 3 weeks ago
parent
commit
6ab9f119bd
  1. 2
      app/helpers/bulk_upload/sales_log_to_csv.rb
  2. 96
      app/services/bulk_upload/sales/year2025/row_parser.rb
  3. 2
      config/locales/validations/sales/2025/bulk_upload.en.yml
  4. 1
      spec/services/bulk_upload/sales/year2025/row_parser_spec.rb

2
app/helpers/bulk_upload/sales_log_to_csv.rb

@ -417,7 +417,7 @@ class BulkUpload::SalesLogToCsv
log.proptype, log.proptype,
log.beds, log.beds,
log.builtype, log.builtype,
log.uprn, log.uprn,
log.address_line1&.tr(",", " "), # 20 log.address_line1&.tr(",", " "), # 20
log.address_line2&.tr(",", " "), log.address_line2&.tr(",", " "),

96
app/services/bulk_upload/sales/year2025/row_parser.rb

@ -273,7 +273,6 @@ class BulkUpload::Sales::Year2025::RowParser
attribute :field_120, :integer attribute :field_120, :integer
attribute :field_121, :integer attribute :field_121, :integer
validates :field_4, validates :field_4,
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "sale completion date (day)."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "sale completion date (day)."),
@ -507,7 +506,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "buyer 2's previous tenure."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "buyer 2's previous tenure."),
category: :setup, category: :setup,
if: :shared_or_discounted_but_not_staircasing? && two_buyers_share_address, if: :shared_or_discounted_but_not_staircasing? && :two_buyers_share_address?,
}, },
on: :after_log on: :after_log
@ -515,7 +514,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether a buyer has served in the armed forces."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether a buyer has served in the armed forces."),
category: :setup, category: :setup,
unless: staircasing?, unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -523,7 +522,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether a buyer is currently in the armed forces."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether a buyer is currently in the armed forces."),
category: :setup, category: :setup,
unless: staircasing?, unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -531,7 +530,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether a buyer's spouse recently died in service."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether a buyer's spouse recently died in service."),
category: :setup, category: :setup,
unless: staircasing?, unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -539,7 +538,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether any buyer has a disability."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether any buyer has a disability."),
category: :setup, category: :setup,
unless: staircasing?, unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -547,7 +546,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether any buyer uses a wheelchair."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether any buyer uses a wheelchair."),
category: :setup, category: :setup,
unless: staircasing?, unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -555,7 +554,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "buyer 1's annual income."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "buyer 1's annual income."),
category: :setup, category: :setup,
unless: staircasing?, unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -563,7 +562,8 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "buyer 2's annual income."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "buyer 2's annual income."),
category: :setup, category: :setup,
if: :joint_purchase && !:staircasing?, if: :joint_purchase,
unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -571,7 +571,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether buyers were receiving housing benefits."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether buyers were receiving housing benefits."),
category: :setup, category: :setup,
unless: staircasing?, unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -579,7 +579,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "the buyers' total savings."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "the buyers' total savings."),
category: :setup, category: :setup,
unless: staircasing?, unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -587,7 +587,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether the buyers have previously owned a property."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "whether the buyers have previously owned a property."),
category: :setup, category: :setup,
unless: staircasing?, unless: :staircasing?,
}, },
on: :after_log on: :after_log
@ -635,7 +635,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "number of bedrooms in previous property."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "number of bedrooms in previous property."),
category: :setup, category: :setup,
if: :shared_ownership_initial_purchase? & :buyer_1_previous_tenure_not_1_or_2?, if: :shared_ownership_initial_purchase? && :buyer_1_previous_tenure_not_1_or_2?,
}, },
on: :after_log on: :after_log
@ -643,7 +643,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "previous property type."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "previous property type."),
category: :setup, category: :setup,
if: :shared_ownership_initial_purchase? & :buyer_1_previous_tenure_not_1_or_2?, if: :shared_ownership_initial_purchase? && :buyer_1_previous_tenure_not_1_or_2?,
}, },
on: :after_log on: :after_log
@ -651,7 +651,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "buyer's previous tenure."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "buyer's previous tenure."),
category: :setup, category: :setup,
if: :shared_ownership_initial_purchase? & :buyer_1_previous_tenure_not_1_or_2?, if: :shared_ownership_initial_purchase? && :buyer_1_previous_tenure_not_1_or_2?,
}, },
on: :after_log on: :after_log
@ -692,7 +692,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "mortgage amount."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "mortgage amount."),
category: :setup, category: :setup,
if: :shared_ownership_initial_purchase? & :mortgage_used?, if: :shared_ownership_initial_purchase? && :mortgage_used?,
}, },
on: :after_log on: :after_log
@ -700,7 +700,7 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "mortgage length."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "mortgage length."),
category: :setup, category: :setup,
if: :shared_ownership_initial_purchase? & :mortgage_used?, if: :shared_ownership_initial_purchase? && :mortgage_used?,
}, },
on: :after_log on: :after_log
@ -716,7 +716,8 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "deposit amount."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "deposit amount."),
category: :setup, category: :setup,
if: :shared_ownership_initial_purchase? & !:social_homebuy?, if: :shared_ownership_initial_purchase?,
unless: :social_homebuy?,
}, },
on: :after_log on: :after_log
@ -819,7 +820,7 @@ class BulkUpload::Sales::Year2025::RowParser
validates :field_103, validates :field_103,
inclusion: { inclusion: {
in: [2, 3, 4, 5, 6, 7, 8, 9, 10 ], in: [2, 3, 4, 5, 6, 7, 8, 9, 10],
if: proc { field_103.present? }, if: proc { field_103.present? },
category: :setup, category: :setup,
question: QUESTIONS[:field_103].downcase, question: QUESTIONS[:field_103].downcase,
@ -886,7 +887,8 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "basic monthly rent after staircasing."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "basic monthly rent after staircasing."),
category: :setup, category: :setup,
if: :staircasing? && !:buyers_own_all?, if: :staircasing?,
unless: :buyers_own_all?,
}, },
on: :after_log on: :after_log
@ -910,7 +912,8 @@ class BulkUpload::Sales::Year2025::RowParser
presence: { presence: {
message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "amount of loan or subsidy."), message: I18n.t("#{ERROR_BASE_KEY}.not_answered", question: "amount of loan or subsidy."),
category: :setup, category: :setup,
if: :discounted_ownership? && !:rtb_like_sale_type?, if: :discounted_ownership?,
unless: :rtb_like_sale_type?,
}, },
on: :after_log on: :after_log
@ -1170,35 +1173,35 @@ private
field_8 == 1 && field_10 == 1 field_8 == 1 && field_10 == 1
end end
def two_buyers_share_address def two_buyers_share_address?
field_63 == 2 field_63 == 2
end end
def not_resale def not_resale?
field_78 == 2 field_78 == 2
end end
def buyer_1_previous_tenure_not_1_or_2 def buyer_1_previous_tenure_not_1_or_2?
field_58 != 1 && field_58 != 2 field_58 != 1 && field_58 != 2
end end
def mortgage_used def mortgage_used?
field_88 == 2 field_88 == 2
end end
def social_homebuy def social_homebuy?
field_9 == 18 field_9 == 18
end end
def buyers_own_all def buyers_own_all?
field_97 == 100 field_97 == 100
end end
def buyer_staircased_before def buyer_staircased_before?
field_99 == 1 field_99 == 1
end end
def rtb_like_sale_type def rtb_like_sale_type?
[9, 14, 27, 29].includes(field_11) [9, 14, 27, 29].includes(field_11)
end end
@ -1375,11 +1378,31 @@ private
attributes["sex5"] = field_52 attributes["sex5"] = field_52
attributes["sex6"] = field_56 attributes["sex6"] = field_56
attributes["relat2"] = field_34 == 1 ? "P" : (field_34 == 2 ? "X" : "R") attributes["relat2"] = if field_34 == 1
attributes["relat3"] = field_42 == 1 ? "P" : (field_42 == 2 ? "X" : "R") "P"
attributes["relat4"] = field_46 == 1 ? "P" : (field_46 == 2 ? "X" : "R") else
attributes["relat5"] = field_49 == 1 ? "P" : (field_49 == 2 ? "X" : "R") (field_34 == 2 ? "X" : "R")
attributes["relat6"] = field_54 == 1 ? "P" : (field_54 == 2 ? "X" : "R") end
attributes["relat3"] = if field_42 == 1
"P"
else
(field_42 == 2 ? "X" : "R")
end
attributes["relat4"] = if field_46 == 1
"P"
else
(field_46 == 2 ? "X" : "R")
end
attributes["relat5"] = if field_49 == 1
"P"
else
(field_49 == 2 ? "X" : "R")
end
attributes["relat6"] = if field_54 == 1
"P"
else
(field_54 == 2 ? "X" : "R")
end
attributes["ecstat1"] = field_32 attributes["ecstat1"] = field_32
attributes["ecstat2"] = field_39 attributes["ecstat2"] = field_39
@ -1519,7 +1542,9 @@ private
attributes["initialpurchase"] = initialpurchase attributes["initialpurchase"] = initialpurchase
attributes["management_fee"] = field_95 attributes["management_fee"] = field_95
attributes["has_management_fee"] = field_95.present? && field_95 > 0 ? 1 : 0 attributes["has_management_fee"] = field_95.present? && field_95.positive? ? 1 : 0
attributes
end end
def address_line1_input def address_line1_input
@ -1658,6 +1683,7 @@ private
return field_93 if shared_ownership_initial_purchase? return field_93 if shared_ownership_initial_purchase?
return field_111 if staircasing? return field_111 if staircasing?
end end
def mscharge def mscharge
return field_94 if shared_ownership? return field_94 if shared_ownership?
return field_121 if discounted_ownership? return field_121 if discounted_ownership?

2
config/locales/validations/sales/2025/bulk_upload.en.yml

@ -1,7 +1,7 @@
en: en:
validations: validations:
sales: sales:
2024: 2025:
bulk_upload: bulk_upload:
not_answered: "You must answer %{question}" not_answered: "You must answer %{question}"
invalid_option: "Enter a valid value for %{question}" invalid_option: "Enter a valid value for %{question}"

1
spec/services/bulk_upload/sales/year2025/row_parser_spec.rb

@ -1340,7 +1340,6 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do
end end
end end
describe "soft validations" do describe "soft validations" do
context "when soft validation is triggered" do context "when soft validation is triggered" do
let(:attributes) { valid_attributes.merge({ field_28: 22, field_32: 5 }) } let(:attributes) { valid_attributes.merge({ field_28: 22, field_32: 5 }) }

Loading…
Cancel
Save