Browse Source

CLDC-3990: Fix lettings household charges & no charges logic issue (#3051)

* Update nocharge assignment logic for clarity in lettings_log_variables

* Add Rake tasks to update nocharge with household_charge for current and older logs

* Update nocharge field to be empty in general needs log XML files

* Update nocharge assignment to skip validation during save and add RSpec tests for bulk update task

* Remove nocharges from general needs tests
main
Manny Dinssa 5 days ago committed by GitHub
parent
commit
01aabdffa7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      app/models/derived_variables/lettings_log_variables.rb
  2. 56
      lib/tasks/recalculate_nocharges.rake
  3. 2
      spec/fixtures/exports/general_needs_log.xml
  4. 2
      spec/fixtures/exports/general_needs_log_23_24.xml
  5. 2
      spec/fixtures/exports/general_needs_log_24_25.xml
  6. 2
      spec/fixtures/exports/general_needs_log_25_26.xml
  7. 2
      spec/fixtures/files/lettings_log_csv_export_codes_23.csv
  8. 2
      spec/fixtures/files/lettings_log_csv_export_codes_24.csv
  9. 2
      spec/fixtures/files/lettings_log_csv_export_codes_25.csv
  10. 2
      spec/fixtures/files/lettings_log_csv_export_labels_23.csv
  11. 2
      spec/fixtures/files/lettings_log_csv_export_labels_24.csv
  12. 2
      spec/fixtures/files/lettings_log_csv_export_labels_25.csv
  13. 2
      spec/fixtures/files/lettings_log_csv_export_non_support_codes_23.csv
  14. 2
      spec/fixtures/files/lettings_log_csv_export_non_support_codes_24.csv
  15. 2
      spec/fixtures/files/lettings_log_csv_export_non_support_codes_25.csv
  16. 2
      spec/fixtures/files/lettings_log_csv_export_non_support_labels_23.csv
  17. 2
      spec/fixtures/files/lettings_log_csv_export_non_support_labels_24.csv
  18. 2
      spec/fixtures/files/lettings_log_csv_export_non_support_labels_25.csv
  19. 53
      spec/lib/tasks/recalculate_nocharges_spec.rb

2
app/models/derived_variables/lettings_log_variables.rb

@ -67,7 +67,7 @@ module DerivedVariables::LettingsLogVariables
end
self.has_benefits = get_has_benefits
self.tshortfall_known = 0 if tshortfall
self.nocharge = household_charge&.zero? ? 1 : 0
self.nocharge = household_charge # Nocharge: 0 = No, 1 = Yes, Household charge: 0 = Yes, 1 = No
if form.start_year_2024_or_later? && is_bedsit?
self.beds = 1
end

56
lib/tasks/recalculate_nocharges.rake

@ -0,0 +1,56 @@
namespace :bulk_update do
desc "Update nocharge with household_charge for current logs"
task update_current_logs_nocharges: :environment do
updated_logs_count = 0
status_changed_logs = []
logs = LettingsLog.where(startdate: Time.zone.local(2024, 4, 1)...Time.zone.local(2026, 4, 1)).where.not("nocharge = household_charge")
puts "Updating logs with startdate between 2024-04-01 and 2026-04-01"
puts "Total logs to update: #{logs.count}"
logs.find_each do |log|
status_pre_change = log.status
log.nocharge = log.household_charge
if log.save(validate: false)
updated_logs_count += 1
Rails.logger.info "Updated nocharge for log #{log.id}"
else
Rails.logger.error "Failed to update log #{log.id}: #{log.errors.full_messages.join(', ')}"
end
status_post_change = log.status
status_changed_logs << log.id if status_pre_change != status_post_change
end
puts "#{updated_logs_count} logs were updated."
puts "Logs with changed status: [#{status_changed_logs.join(', ')}]"
end
desc "Update nocharge with household_charge for older logs"
task update_older_logs_nocharges: :environment do
updated_logs_count = 0
status_changed_logs = []
logs = LettingsLog.where("startdate < ?", Time.zone.local(2024, 4, 1)).where.not("nocharge = household_charge")
logs.find_each do |log|
status_pre_change = log.status
log.skip_update_status = true
log.nocharge = log.household_charge
if log.save
updated_logs_count += 1
Rails.logger.info "Updated nocharge for log #{log.id}"
else
Rails.logger.error "Failed to update log #{log.id}: #{log.errors.full_messages.join(', ')}"
end
status_post_change = log.status
status_changed_logs << log.id if status_pre_change != status_post_change
end
puts "#{updated_logs_count} logs were updated."
puts "Logs with changed status: [#{status_changed_logs.join(', ')}]"
end
end

2
spec/fixtures/exports/general_needs_log.xml vendored

@ -100,7 +100,7 @@
<totchild>0</totchild>
<totelder>0</totelder>
<totadult>2</totadult>
<nocharge>0</nocharge>
<nocharge/>
<referral>2</referral>
<brent>200.0</brent>
<scharge>50.0</scharge>

2
spec/fixtures/exports/general_needs_log_23_24.xml vendored

@ -100,7 +100,7 @@
<totchild>0</totchild>
<totelder>0</totelder>
<totadult>2</totadult>
<nocharge>0</nocharge>
<nocharge/>
<referral>2</referral>
<brent>200.0</brent>
<scharge>50.0</scharge>

2
spec/fixtures/exports/general_needs_log_24_25.xml vendored

@ -99,7 +99,7 @@
<totchild>0</totchild>
<totelder>0</totelder>
<totadult>2</totadult>
<nocharge>0</nocharge>
<nocharge/>
<referral>2</referral>
<brent>200.0</brent>
<scharge>50.0</scharge>

2
spec/fixtures/exports/general_needs_log_25_26.xml vendored

@ -99,7 +99,7 @@
<totchild>0</totchild>
<totelder>0</totelder>
<totadult>2</totadult>
<nocharge>0</nocharge>
<nocharge/>
<referral>2</referral>
<brent>200.0</brent>
<scharge>50.0</scharge>

2
spec/fixtures/files/lettings_log_csv_export_codes_23.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_codes_24.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_codes_25.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_labels_23.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_labels_24.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_labels_25.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_non_support_codes_23.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_non_support_codes_24.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_non_support_codes_25.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_non_support_labels_23.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_non_support_labels_24.csv vendored

File diff suppressed because one or more lines are too long

2
spec/fixtures/files/lettings_log_csv_export_non_support_labels_25.csv vendored

File diff suppressed because one or more lines are too long

53
spec/lib/tasks/recalculate_nocharges_spec.rb

@ -0,0 +1,53 @@
require "rails_helper"
require "rake"
RSpec.describe "recalculate_nocharges", type: :task do
before do
Rake.application.rake_require("tasks/recalculate_nocharges")
Rake::Task.define_task(:environment)
task.reenable
end
describe "bulk_update:update_current_logs_nocharges" do
let(:task) { Rake::Task["bulk_update:update_current_logs_nocharges"] }
let(:organisation) { FactoryBot.create(:organisation, name: "MHCLG", provider_type: "LA", housing_registration_no: 1234) }
let(:user) { FactoryBot.create(:user, organisation:, email: "fake@email.com") }
let(:scheme) { FactoryBot.create(:scheme, :export, owning_organisation: organisation) }
let(:location) { FactoryBot.create(:location, :export, scheme:, startdate: Time.zone.local(2021, 4, 1), old_id: "1a") }
let(:log_to_update) do
build(:lettings_log, :completed, :sh, needstype: 2, scheme:, location:, assigned_to: user, startdate: Time.zone.local(2024, 6, 1), age1: 35, sex1: "F", age2: 32, sex2: "M", underoccupation_benefitcap: 4, sheltered: 1, household_charge: 0, nocharge: 1)
end
let(:log_not_to_update) do
build(:lettings_log, :completed, needstype: 2, household_charge: 1, nocharge: 1)
end
context "when running the task" do
before do
log_to_update.save!(validate: false)
log_not_to_update.save!(validate: false)
end
it "updates logs where household_charge and nocharge are different" do
expect(log_to_update.nocharge).to eq(1)
expect(log_to_update.household_charge).to eq(0)
task.invoke
log_to_update.reload
expect(log_to_update.nocharge).to eq(0)
end
it "does not update logs where household_charge and nocharge are the same" do
expect(log_not_to_update.nocharge).to eq(1)
expect(log_not_to_update.household_charge).to eq(1)
task.invoke
log_not_to_update.reload
expect(log_not_to_update.nocharge).to eq(1)
end
end
end
end
Loading…
Cancel
Save