diff --git a/lib/tasks/update_manual_address_entry_selected_prexisting_logs.rake b/lib/tasks/update_manual_address_entry_selected_prexisting_logs.rake new file mode 100644 index 000000000..96e88e080 --- /dev/null +++ b/lib/tasks/update_manual_address_entry_selected_prexisting_logs.rake @@ -0,0 +1,48 @@ +namespace :bulk_update do + desc "Update logs with specific criteria and set manual_address_entry_selected to true" + task update_manual_address_entry_selected: :environment do + updated_lettings_logs_count = 0 + updated_sales_logs_count = 0 + lettings_logs = LettingsLog.filter_by_year(2024) + .where(status: %w[in_progress completed]) + .where(needstype: 1, manual_address_entry_selected: false, uprn: nil) + .where("(address_line1 IS NOT NULL AND address_line1 != '') OR (address_line2 IS NOT NULL AND address_line2 != '') OR (town_or_city IS NOT NULL AND town_or_city != '') OR (county IS NOT NULL AND county != '') OR (postcode_full IS NOT NULL AND postcode_full != '')") + + lettings_logs.find_each do |log| + status_pre_change = log.status + log.manual_address_entry_selected = true + if log.save + updated_lettings_logs_count += 1 + else + Rails.logger.info "Could not save changes to lettings log #{log.id}" + end + status_post_change = log.status + unless status_pre_change == status_post_change + Rails.logger.info "Status changed from #{status_pre_change} to #{status_post_change} for lettings log #{log.id}" + end + end + + puts "#{updated_lettings_logs_count} lettings logs updated." + + sales_logs = SalesLog.filter_by_year(2024) + .where(status: %w[in_progress completed]) + .where(manual_address_entry_selected: false, uprn: nil) + .where("(address_line1 IS NOT NULL AND address_line1 != '') OR (address_line2 IS NOT NULL AND address_line2 != '') OR (town_or_city IS NOT NULL AND town_or_city != '') OR (county IS NOT NULL AND county != '') OR (postcode_full IS NOT NULL AND postcode_full != '')") + + sales_logs.find_each do |log| + status_pre_change = log.status + log.manual_address_entry_selected = true + if log.save + updated_sales_logs_count += 1 + else + Rails.logger.info "Could not save changes to sales log #{log.id}" + end + status_post_change = log.status + unless status_pre_change == status_post_change + Rails.logger.info "Status changed from #{status_pre_change} to #{status_post_change} for sales log #{log.id}" + end + end + + puts "#{updated_sales_logs_count} sales logs updated." + end +end diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index ad81bca5d..62cc94a14 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -172,7 +172,7 @@ FactoryBot.define do if log.startdate >= Time.zone.local(2024, 4, 1) log.nationality_all_group = 826 log.uprn = evaluator.uprn || "10033558653" - log.uprn_selection = evaluator.uprn_selection || "10033558653" + log.uprn_selection = evaluator.uprn_selection || evaluator.uprn || "10033558653" end end end @@ -220,5 +220,38 @@ FactoryBot.define do instance.save!(validate: false) end end + trait :completed_without_uprn do + completed + manual_address_entry_selected { false } + after(:build) do |log| + log.uprn = nil + log.uprn_selection = nil + log.uprn_known = 0 + end + + after(:build) do |log| + log.address_line1 = "1 Test Street" + log.address_line2 = "Testville" + log.county = "Testshire" + log.town_or_city = "Testford" + log.postcode_full = "SW1 1AA" + end + end + trait :inprogress_without_address_fields do + completed + manual_address_entry_selected { false } + after(:build) do |log| + log.uprn = nil + log.uprn_selection = nil + log.uprn_known = 0 + log.address_line1 = nil + log.address_line2 = nil + log.county = nil + log.town_or_city = nil + log.postcode_full = nil + log.address_line1_input = nil + log.postcode_full_input = nil + end + end end end diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index 856a6d7e1..a2e3f7d4c 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -173,7 +173,7 @@ FactoryBot.define do log.nationality_all_group = 826 log.nationality_all_buyer2_group = 826 log.uprn = evaluator.uprn || "10033558653" - log.uprn_selection = evaluator.uprn_selection || "10033558653" + log.uprn_selection = evaluator.uprn_selection || evaluator.uprn || "10033558653" end if log.saledate >= Time.zone.local(2025, 4, 1) log.relat2 = "X" if log.relat2 == "C" @@ -235,6 +235,39 @@ FactoryBot.define do instance.save!(validate: false) end end + trait :completed_without_uprn do + completed + manual_address_entry_selected { false } + after(:build) do |log| + log.uprn = nil + log.uprn_selection = nil + log.uprn_known = 0 + end + + after(:build) do |log| + log.address_line1 = "1 Test Street" + log.address_line2 = "Testville" + log.county = "Testshire" + log.town_or_city = "Testford" + log.postcode_full = "SW1 1AA" + end + end + trait :inprogress_without_address_fields do + completed + manual_address_entry_selected { false } + after(:build) do |log| + log.uprn = nil + log.uprn_selection = nil + log.uprn_known = 0 + log.address_line1 = nil + log.address_line2 = nil + log.county = nil + log.town_or_city = nil + log.postcode_full = nil + log.address_line1_input = nil + log.postcode_full_input = nil + end + end trait :export do purchid { "123" } ownershipsch { 2 } diff --git a/spec/lib/tasks/update_manual_address_entry_selected_prexisting_logs_spec.rb b/spec/lib/tasks/update_manual_address_entry_selected_prexisting_logs_spec.rb new file mode 100644 index 000000000..9a9e81386 --- /dev/null +++ b/spec/lib/tasks/update_manual_address_entry_selected_prexisting_logs_spec.rb @@ -0,0 +1,121 @@ +require "rails_helper" +require "rake" + +RSpec.describe "bulk_update:update_manual_address_entry_selected", type: :task do + let(:task) { Rake::Task["bulk_update:update_manual_address_entry_selected"] } + + let(:lettings_log_uprn_entered) do + build(:lettings_log, :completed, startdate: Time.zone.local(2024, 6, 1), needstype: 1, manual_address_entry_selected: false) + end + + let(:lettings_log_uprn_found) do + build(:lettings_log, :completed, startdate: Time.zone.local(2024, 9, 1), needstype: 1, manual_address_entry_selected: false, address_line1_input: "1 Test Street", postcode_full_input: "SW1 1AA") + end + + let(:lettings_log_address_fields_not_entered) do + build(:lettings_log, :inprogress_without_address_fields, startdate: Time.zone.local(2024, 9, 1), needstype: 1) + end + + let(:lettings_log_address_manually_entered) do + build(:lettings_log, :completed_without_uprn, startdate: Time.zone.local(2024, 12, 1), needstype: 1) + end + + let(:sales_log_uprn_entered) do + build(:sales_log, :completed, saledate: Time.zone.local(2024, 12, 1), manual_address_entry_selected: false) + end + + let(:sales_log_uprn_found) do + build(:sales_log, :completed, saledate: Time.zone.local(2024, 7, 1), manual_address_entry_selected: false, address_line1_input: "1 Test Street", postcode_full_input: "SW1 1AA") + end + + let(:sales_log_address_fields_not_entered) do + build(:sales_log, :inprogress_without_address_fields, saledate: Time.zone.local(2024, 12, 30)) + end + + let(:sales_log_address_manually_entered) do + build(:sales_log, :completed_without_uprn, saledate: Time.zone.local(2024, 12, 30)) + end + + before do + Rake.application.rake_require("tasks/update_manual_address_entry_selected_prexisting_logs") + Rake::Task.define_task(:environment) + end + + context "when running the task" do + context "when logs do not meet the criteria" do + before do + lettings_log_uprn_found.save!(validate: false) + lettings_log_uprn_entered.save!(validate: false) + lettings_log_address_fields_not_entered.save!(validate: false) + sales_log_uprn_found.save!(validate: false) + sales_log_uprn_entered.save!(validate: false) + sales_log_address_fields_not_entered.save!(validate: false) + end + + it "does not update logs with a UPRN entered" do + task.invoke + lettings_log_uprn_entered.reload + sales_log_uprn_entered.reload + expect(lettings_log_uprn_entered.manual_address_entry_selected).to be false + expect(lettings_log_uprn_entered.uprn).to eq("10033558653") + expect(sales_log_uprn_entered.manual_address_entry_selected).to be false + expect(sales_log_uprn_entered.uprn).to eq("10033558653") + end + + it "does not update logs with a UPRN found" do + task.invoke + lettings_log_uprn_found.reload + sales_log_uprn_found.reload + expect(lettings_log_uprn_found.manual_address_entry_selected).to be false + expect(lettings_log_uprn_found.uprn).to eq("10033558653") + expect(sales_log_uprn_found.manual_address_entry_selected).to be false + expect(sales_log_uprn_found.uprn).to eq("10033558653") + end + + it "does not update logs with no UPRN or address fields entered" do + task.invoke + lettings_log_address_fields_not_entered.reload + sales_log_address_fields_not_entered.reload + expect(lettings_log_address_fields_not_entered.manual_address_entry_selected).to be false + expect(sales_log_address_fields_not_entered.manual_address_entry_selected).to be false + end + end + + context "when logs do meet the criteria" do + before do + lettings_log_address_manually_entered.manual_address_entry_selected = false + lettings_log_address_manually_entered.save!(validate: false) + sales_log_address_manually_entered.manual_address_entry_selected = false + sales_log_address_manually_entered.save!(validate: false) + end + + it "updates logs with an address manually entered" do + expect(lettings_log_address_manually_entered.manual_address_entry_selected).to be false + expect(lettings_log_address_manually_entered.address_line1).to eq("1 Test Street") + expect(lettings_log_address_manually_entered.address_line2).to eq("Testville") + expect(lettings_log_address_manually_entered.town_or_city).to eq("Testford") + expect(lettings_log_address_manually_entered.postcode_full).to eq("SW1 1AA") + expect(sales_log_address_manually_entered.manual_address_entry_selected).to be false + expect(sales_log_address_manually_entered.address_line1).to eq("1 Test Street") + expect(sales_log_address_manually_entered.address_line2).to eq("Testville") + expect(sales_log_address_manually_entered.town_or_city).to eq("Testford") + expect(sales_log_address_manually_entered.postcode_full).to eq("SW1 1AA") + + task.invoke + lettings_log_address_manually_entered.reload + sales_log_address_manually_entered.reload + + expect(lettings_log_address_manually_entered.manual_address_entry_selected).to be true + expect(lettings_log_address_manually_entered.address_line1).to eq("1 Test Street") + expect(lettings_log_address_manually_entered.address_line2).to eq("Testville") + expect(lettings_log_address_manually_entered.town_or_city).to eq("Testford") + expect(lettings_log_address_manually_entered.postcode_full).to eq("SW1 1AA") + expect(sales_log_address_manually_entered.manual_address_entry_selected).to be true + expect(sales_log_address_manually_entered.address_line1).to eq("1 Test Street") + expect(sales_log_address_manually_entered.address_line2).to eq("Testville") + expect(sales_log_address_manually_entered.town_or_city).to eq("Testford") + expect(sales_log_address_manually_entered.postcode_full).to eq("SW1 1AA") + end + end + end +end