diff --git a/app/models/log.rb b/app/models/log.rb index 10e2078ee..d99399da1 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -210,7 +210,7 @@ class Log < ApplicationRecord end def nationality_uk_or_prefers_not_to_say? - nationality_all_group == 0 || nationality_all_group == 826 + nationality_all_group&.zero? || nationality_all_group == 826 end private diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index 4e8d64f18..3f47dea80 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -475,6 +475,6 @@ class SalesLog < Log end def nationality2_uk_or_prefers_not_to_say? - nationality_all_buyer2_group == 0 || nationality_all_buyer2_group == 826 + nationality_all_buyer2_group&.zero? || nationality_all_buyer2_group == 826 end end diff --git a/app/services/bulk_upload/sales/year2024/row_parser.rb b/app/services/bulk_upload/sales/year2024/row_parser.rb index 99d45aea2..037fb8eef 100644 --- a/app/services/bulk_upload/sales/year2024/row_parser.rb +++ b/app/services/bulk_upload/sales/year2024/row_parser.rb @@ -675,7 +675,8 @@ private ecstat6: %i[field_60], ethnic_group: %i[field_33], ethnic: %i[field_33], - national: %i[field_34], + nationality_all: %i[field_34], + nationality_all_group: %i[field_34], income1nk: %i[field_77], income1: %i[field_77], income2nk: %i[field_79], @@ -767,7 +768,8 @@ private ethnic_group2: %i[field_40], ethnicbuy2: %i[field_40], - nationalbuy2: %i[field_41], + nationality_all_buyer2: %i[field_41], + nationality_all_buyer2_group: %i[field_41], buy2living: %i[field_70], prevtenbuy2: %i[field_71], @@ -831,7 +833,8 @@ private attributes["ethnic_group"] = ethnic_group_from_ethnic attributes["ethnic"] = field_33 - attributes["national"] = field_34 + attributes["nationality_all"] = field_34 + attributes["nationality_all_group"] = nationality_group(attributes["nationality_all"]) attributes["income1nk"] = field_77 == "R" ? 1 : 0 attributes["income1"] = field_77.to_i if attributes["income1nk"]&.zero? && field_77&.match(/\A\d+\z/) @@ -938,7 +941,8 @@ private attributes["ethnic_group2"] = infer_buyer2_ethnic_group_from_ethnic attributes["ethnicbuy2"] = field_40 - attributes["nationalbuy2"] = field_41 + attributes["nationality_all_buyer2"] = field_41 + attributes["nationality_all_buyer2_group"] = nationality_group(attributes["nationality_all_buyer2"]) attributes["buy2living"] = field_70 attributes["prevtenbuy2"] = prevtenbuy2 @@ -1202,6 +1206,14 @@ private created_by&.organisation || bulk_upload.user.organisation end + def nationality_group(nationality_value) + return unless nationality_value + return 0 if nationality_value.zero? + return 826 if nationality_value == 826 + + 12 + end + def validate_managing_org_related if owning_organisation && managing_organisation && !owning_organisation.can_be_managed_by?(organisation: managing_organisation) block_log_creation! diff --git a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb index fa5ad2ee7..bf1b70482 100644 --- a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb @@ -1067,11 +1067,151 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do end end - describe "#nationalbuy2" do - let(:attributes) { setup_section_params.merge({ field_41: "18" }) } + describe "#nationality_all" do + context "when field_34 is a 3 digit nationality code" do + let(:attributes) { setup_section_params.merge({ field_34: "036" }) } - it "is correctly set" do - expect(parser.log.nationalbuy2).to be(18) + it "is correctly set" do + expect(parser.log.nationality_all).to be(36) + expect(parser.log.nationality_all_group).to be(12) + end + end + + context "when field_34 is a nationality code without the trailing 0s" do + let(:attributes) { setup_section_params.merge({ field_34: "36" }) } + + it "is correctly set" do + expect(parser.log.nationality_all).to be(36) + expect(parser.log.nationality_all_group).to be(12) + end + end + + context "when field_34 is a nationality code with trailing 0s" do + let(:attributes) { setup_section_params.merge({ field_34: "0036" }) } + + it "is correctly set" do + expect(parser.log.nationality_all).to be(36) + expect(parser.log.nationality_all_group).to be(12) + end + end + + context "when field_34 is 0" do + let(:attributes) { setup_section_params.merge({ field_34: "0" }) } + + it "is correctly set" do + expect(parser.log.nationality_all).to be(0) + expect(parser.log.nationality_all_group).to be(0) + end + end + + context "when field_34 is 000" do + let(:attributes) { setup_section_params.merge({ field_34: "000" }) } + + it "is correctly set" do + expect(parser.log.nationality_all).to be(0) + expect(parser.log.nationality_all_group).to be(0) + end + end + + context "when field_34 is 0000" do + let(:attributes) { setup_section_params.merge({ field_34: "0000" }) } + + it "is correctly set" do + expect(parser.log.nationality_all).to be(0) + expect(parser.log.nationality_all_group).to be(0) + end + end + + context "when field_34 is 826" do + let(:attributes) { setup_section_params.merge({ field_34: "826" }) } + + it "is correctly set" do + expect(parser.log.nationality_all).to be(826) + expect(parser.log.nationality_all_group).to be(826) + end + end + + context "when field_34 is 826 with trailing 0s" do + let(:attributes) { setup_section_params.merge({ field_34: "0826" }) } + + it "is correctly set" do + expect(parser.log.nationality_all).to be(826) + expect(parser.log.nationality_all_group).to be(826) + end + end + end + + describe "#nationality_all_buyer2" do + context "when field_41 is a 3 digit nationality code" do + let(:attributes) { setup_section_params.merge({ field_41: "036" }) } + + it "is correctly set" do + expect(parser.log.nationality_all_buyer2).to be(36) + expect(parser.log.nationality_all_buyer2_group).to be(12) + end + end + + context "when field_41 is a nationality code without the trailing 0s" do + let(:attributes) { setup_section_params.merge({ field_41: "36" }) } + + it "is correctly set" do + expect(parser.log.nationality_all_buyer2).to be(36) + expect(parser.log.nationality_all_buyer2_group).to be(12) + end + end + + context "when field_41 is a nationality code with trailing 0s" do + let(:attributes) { setup_section_params.merge({ field_41: "0036" }) } + + it "is correctly set" do + expect(parser.log.nationality_all_buyer2).to be(36) + expect(parser.log.nationality_all_buyer2_group).to be(12) + end + end + + context "when field_41 is 0" do + let(:attributes) { setup_section_params.merge({ field_41: "0" }) } + + it "is correctly set" do + expect(parser.log.nationality_all_buyer2).to be(0) + expect(parser.log.nationality_all_buyer2_group).to be(0) + end + end + + context "when field_41 is 000" do + let(:attributes) { setup_section_params.merge({ field_41: "000" }) } + + it "is correctly set" do + expect(parser.log.nationality_all_buyer2).to be(0) + expect(parser.log.nationality_all_buyer2_group).to be(0) + end + end + + context "when field_41 is 0000" do + let(:attributes) { setup_section_params.merge({ field_41: "0000" }) } + + it "is correctly set" do + expect(parser.log.nationality_all_buyer2).to be(0) + expect(parser.log.nationality_all_buyer2_group).to be(0) + end + end + + context "when field_41 is 826" do + let(:attributes) { setup_section_params.merge({ field_41: "826" }) } + + it "is correctly set" do + expect(parser.log.nationality_all_buyer2).to be(826) + expect(parser.log.nationality_all_buyer2_group).to be(826) + end + end + + context "when field_41 is 826 with trailing 0s" do + let(:attributes) { setup_section_params.merge({ field_41: "0826" }) } + + it "is correctly set" do + expect(parser.log.nationality_all_buyer2).to be(826) + expect(parser.log.nationality_all_buyer2_group).to be(826) + end end end