From aa22e8dc151bba225cd0431106382582ac8b3b90 Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Fri, 17 Apr 2026 11:15:06 +0100 Subject: [PATCH] CLDC-4400: Buyer still serving answer remapping (#3310) * CLDC-4400: update 2025 options and hide 10 from ui * CLDC-4400: add rake task to remap values * CLDC-4400: tweak desc and rename * CLDC-4400: update spec * CLDC-4400: rename task file * CLDC-4400: rename task file * CLDC-4400: rename task file * CLDC-4400: refactor usage error * CLDC-4400: use datetime not date in case logs are made between release and rake task completion * CLDC-4400: before_date -> before_datetime * CLDC-4400: print log ids and use update! --- .../sales/questions/buyer_still_serving.rb | 11 +++++--- .../remap_2025_hhregresstill_values.rake | 24 +++++++++++++++++ .../questions/buyer_still_serving_spec.rb | 27 ++++++++++++++++--- 3 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 lib/tasks/remap_2025_hhregresstill_values.rake diff --git a/app/models/form/sales/questions/buyer_still_serving.rb b/app/models/form/sales/questions/buyer_still_serving.rb index fc7b9fcb2..6ef135f40 100644 --- a/app/models/form/sales/questions/buyer_still_serving.rb +++ b/app/models/form/sales/questions/buyer_still_serving.rb @@ -19,13 +19,18 @@ class Form::Sales::Questions::BuyerStillServing < ::Form::Question else { "4" => { "value" => "Yes" }, - "5" => { "value" => "No" }, - "6" => { "value" => "Buyer prefers not to say" }, + "5" => { "value" => "No - they left up to and including 2 years ago" }, + "6" => { "value" => "No - they left more than 2 years ago" }, "divider" => { "value" => true }, - "7" => { "value" => "Don’t know" }, + "9" => { "value" => "Don’t know" }, + "10" => { "value" => "No" }, }.freeze end end + def displayed_answer_options(_log, _user = nil) + answer_options.reject { |key, _v| key == "10" } + end + QUESTION_NUMBER_FROM_YEAR = { 2023 => 63, 2024 => 65, 2025 => 62, 2026 => 70 }.freeze end diff --git a/lib/tasks/remap_2025_hhregresstill_values.rake b/lib/tasks/remap_2025_hhregresstill_values.rake new file mode 100644 index 000000000..30ec38e10 --- /dev/null +++ b/lib/tasks/remap_2025_hhregresstill_values.rake @@ -0,0 +1,24 @@ +desc "Remaps hhregresstill values for manually created 2025/26 sales logs" +task :remap_2025_hhregresstill_values, %i[before_datetime] => :environment do |_task, args| + usage_message = "Usage: rake remap_2025_hhregresstill_values['before_datetime']. before_datetime must be in format YYYY-MM-DDTHH:MM:SS" + raise usage_message if args[:before_datetime].blank? + + before_datetime = Time.zone.parse(args[:before_datetime]) + raise usage_message if before_datetime.nil? + + logs = SalesLog.filter_by_year(2025).where(bulk_upload_id: nil).where(hhregresstill: [5, 6, 7]).where("created_at < ?", before_datetime) + puts "Updating #{logs.count} sales logs" + + updated_ids = [] + logs.find_each do |log| + new_value = case log.hhregresstill + when 5 then 10 + when 6, 7 then 9 + end + log.update!(hhregresstill: new_value) + updated_ids << log.id + end + + puts "Updated log IDs: #{updated_ids.join(', ')}" + puts "Done" +end diff --git a/spec/models/form/sales/questions/buyer_still_serving_spec.rb b/spec/models/form/sales/questions/buyer_still_serving_spec.rb index 4b89879f6..d9222fae2 100644 --- a/spec/models/form/sales/questions/buyer_still_serving_spec.rb +++ b/spec/models/form/sales/questions/buyer_still_serving_spec.rb @@ -32,10 +32,21 @@ RSpec.describe Form::Sales::Questions::BuyerStillServing, type: :model do it "has the correct answer_options" do expect(question.answer_options).to eq({ "4" => { "value" => "Yes" }, - "5" => { "value" => "No" }, - "6" => { "value" => "Buyer prefers not to say" }, + "5" => { "value" => "No - they left up to and including 2 years ago" }, + "6" => { "value" => "No - they left more than 2 years ago" }, "divider" => { "value" => true }, - "7" => { "value" => "Don’t know" }, + "9" => { "value" => "Don’t know" }, + "10" => { "value" => "No" }, + }) + end + + it "has the correct displayed_answer_options" do + expect(question.displayed_answer_options(nil)).to eq({ + "4" => { "value" => "Yes" }, + "5" => { "value" => "No - they left up to and including 2 years ago" }, + "6" => { "value" => "No - they left more than 2 years ago" }, + "divider" => { "value" => true }, + "9" => { "value" => "Don’t know" }, }) end end @@ -52,5 +63,15 @@ RSpec.describe Form::Sales::Questions::BuyerStillServing, type: :model do "9" => { "value" => "Don’t know" }, }) end + + it "has the correct displayed_answer_options" do + expect(question.displayed_answer_options(nil)).to eq({ + "4" => { "value" => "Yes" }, + "5" => { "value" => "No - they left up to and including 2 years ago" }, + "6" => { "value" => "No - they left more than 2 years ago" }, + "divider" => { "value" => true }, + "9" => { "value" => "Don’t know" }, + }) + end end end