diff --git a/app/models/case_log.rb b/app/models/case_log.rb
index 495b91e7a..5a3274990 100644
--- a/app/models/case_log.rb
+++ b/app/models/case_log.rb
@@ -85,28 +85,28 @@ class CaseLog < ApplicationRecord
end
end
- def weekly_rent
- return unless brent && period
+ def weekly_value(field_value)
+ return unless field_value && period
- case rent_period
+ case period_label
when "Every 2 weeks"
- brent / 2
+ field_value / 2
when "Every 4 weeks"
- brent / 4
+ field_value / 4
when "Every calendar month"
- brent * 12 / 52
+ field_value * 12 / 52
when "Weekly for 50 weeks"
- brent / 52 * 50
+ field_value / 52 * 50
when "Weekly for 49 weeks"
- brent / 52 * 49
+ field_value / 52 * 49
when "Weekly for 48 weeks"
- brent / 52 * 48
+ field_value / 52 * 48
when "Weekly for 47 weeks"
- brent / 52 * 47
+ field_value / 52 * 47
when "Weekly for 46 weeks"
- brent / 52 * 46
+ field_value / 52 * 46
when "Weekly for 52 weeks"
- brent
+ field_value
end
end
@@ -256,7 +256,7 @@ class CaseLog < ApplicationRecord
reason == 1
end
- def rent_period
+ def period_label
return unless period
case period
@@ -354,7 +354,6 @@ private
self.totchild = get_totchild
self.totelder = get_totelder
self.totadult = get_totadult
- self.wrent = weekly_rent if brent.present? && period.present?
if %i[brent scharge pscharge supcharg].any? { |f| public_send(f).present? }
self.brent ||= 0
self.scharge ||= 0
@@ -362,6 +361,13 @@ private
self.supcharg ||= 0
self.tcharge = brent.to_f + scharge.to_f + pscharge.to_f + supcharg.to_f
end
+ if period.present?
+ self.wrent = weekly_value(brent) if brent.present?
+ self.wscharge = weekly_value(scharge) if scharge.present?
+ self.wpschrge = weekly_value(pscharge) if pscharge.present?
+ self.wsupchrg = weekly_value(supcharg) if supcharg.present?
+ self.wtcharge = weekly_value(tcharge) if tcharge.present?
+ end
self.has_benefits = get_has_benefits
self.nocharge = household_charge&.zero? ? 1 : 0
self.underoccupation_benefitcap = 3 if renewal == 1 && year == 2021
diff --git a/db/migrate/20220311151611_add_derived_fields.rb b/db/migrate/20220311151611_add_derived_fields.rb
index 58e63c9b1..147f380d0 100644
--- a/db/migrate/20220311151611_add_derived_fields.rb
+++ b/db/migrate/20220311151611_add_derived_fields.rb
@@ -4,8 +4,8 @@ class AddDerivedFields < ActiveRecord::Migration[7.0]
t.decimal :wrent, precision: 10, scale: 2
t.decimal :wscharge, precision: 10, scale: 2
t.decimal :wpschrge, precision: 10, scale: 2
- t.decimal :wsupchrge, precision: 10, scale: 2
- t.decimal :wtchrge, precision: 10, scale: 2
+ t.decimal :wsupchrg, precision: 10, scale: 2
+ t.decimal :wtcharge, precision: 10, scale: 2
t.decimal :wtshortfall, precision: 10, scale: 2
end
end
diff --git a/db/schema.rb b/db/schema.rb
index fbeccb685..79e41a8ea 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -221,8 +221,8 @@ ActiveRecord::Schema[7.0].define(version: 202202071123100) do
t.decimal "wrent", precision: 10, scale: 2
t.decimal "wscharge", precision: 10, scale: 2
t.decimal "wpschrge", precision: 10, scale: 2
- t.decimal "wsupchrge", precision: 10, scale: 2
- t.decimal "wtchrge", precision: 10, scale: 2
+ t.decimal "wsupchrg", precision: 10, scale: 2
+ t.decimal "wtcharge", precision: 10, scale: 2
t.decimal "wtshortfall", precision: 10, scale: 2
t.index ["managing_organisation_id"], name: "index_case_logs_on_managing_organisation_id"
t.index ["owning_organisation_id"], name: "index_case_logs_on_owning_organisation_id"
@@ -277,10 +277,10 @@ ActiveRecord::Schema[7.0].define(version: 202202071123100) do
t.string "last_sign_in_ip"
t.integer "role"
t.string "old_user_id"
- t.string "phone"
t.integer "failed_attempts", default: 0
t.string "unlock_token"
t.datetime "locked_at", precision: nil
+ t.string "phone"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["organisation_id"], name: "index_users_on_organisation_id"
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
diff --git a/spec/fixtures/exports/case_logs.xml b/spec/fixtures/exports/case_logs.xml
index 0d1b688be..0b6039cc9 100644
--- a/spec/fixtures/exports/case_logs.xml
+++ b/spec/fixtures/exports/case_logs.xml
@@ -161,10 +161,10 @@
1
0
100.0
-
-
-
-
+ 25.0
+ 20.0
+ 17.5
+ 162.5
diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb
index 4e97ab30f..dd28b3cf0 100644
--- a/spec/models/case_log_spec.rb
+++ b/spec/models/case_log_spec.rb
@@ -306,6 +306,34 @@ RSpec.describe CaseLog do
expect(case_log.wrent).to eq(50.0)
expect(record_from_db["wrent"]).to eq(50.0)
end
+
+ it "correctly derives and saves weekly service charge" do
+ case_log.update!(scharge: 100, period: 0)
+ record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wscharge).to eq(50.0)
+ expect(record_from_db["wscharge"]).to eq(50.0)
+ end
+
+ it "correctly derives and saves weekly personal service charge" do
+ case_log.update!(pscharge: 100, period: 0)
+ record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wpschrge).to eq(50.0)
+ expect(record_from_db["wpschrge"]).to eq(50.0)
+ end
+
+ it "correctly derives and saves weekly support charge" do
+ case_log.update!(supcharg: 100, period: 0)
+ record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wsupchrg).to eq(50.0)
+ expect(record_from_db["wsupchrg"]).to eq(50.0)
+ end
+
+ it "correctly derives and saves weekly total charge" do
+ case_log.update!(tcharge: 100, period: 0)
+ record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wtcharge).to eq(50.0)
+ expect(record_from_db["wtcharge"]).to eq(50.0)
+ end
end
context "when rent is paid every 4 weeks" do
@@ -315,6 +343,34 @@ RSpec.describe CaseLog do
expect(case_log.wrent).to eq(30.0)
expect(record_from_db["wrent"]).to eq(30.0)
end
+
+ it "correctly derives and saves weekly service charge" do
+ case_log.update!(scharge: 120, period: 1)
+ record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wscharge).to eq(30.0)
+ expect(record_from_db["wscharge"]).to eq(30.0)
+ end
+
+ it "correctly derives and saves weekly personal service charge" do
+ case_log.update!(pscharge: 120, period: 1)
+ record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wpschrge).to eq(30.0)
+ expect(record_from_db["wpschrge"]).to eq(30.0)
+ end
+
+ it "correctly derives and saves weekly support charge" do
+ case_log.update!(supcharg: 120, period: 1)
+ record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wsupchrg).to eq(30.0)
+ expect(record_from_db["wsupchrg"]).to eq(30.0)
+ end
+
+ it "correctly derives and saves weekly total charge" do
+ case_log.update!(tcharge: 120, period: 1)
+ record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wtcharge).to eq(30.0)
+ expect(record_from_db["wtcharge"]).to eq(30.0)
+ end
end
context "when rent is paid every calendar month" do
@@ -324,6 +380,34 @@ RSpec.describe CaseLog do
expect(case_log.wrent).to eq(30.0)
expect(record_from_db["wrent"]).to eq(30.0)
end
+
+ it "correctly derives and saves weekly service charge" do
+ case_log.update!(scharge: 130, period: 2)
+ record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wscharge).to eq(30.0)
+ expect(record_from_db["wscharge"]).to eq(30.0)
+ end
+
+ it "correctly derives and saves weekly personal service charge" do
+ case_log.update!(pscharge: 130, period: 2)
+ record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wpschrge).to eq(30.0)
+ expect(record_from_db["wpschrge"]).to eq(30.0)
+ end
+
+ it "correctly derives and saves weekly support charge" do
+ case_log.update!(supcharg: 130, period: 2)
+ record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wsupchrg).to eq(30.0)
+ expect(record_from_db["wsupchrg"]).to eq(30.0)
+ end
+
+ it "correctly derives and saves weekly total charge" do
+ case_log.update!(tcharge: 130, period: 2)
+ record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wtcharge).to eq(30.0)
+ expect(record_from_db["wtcharge"]).to eq(30.0)
+ end
end
context "when rent is paid weekly for 50 weeks" do
@@ -333,6 +417,34 @@ RSpec.describe CaseLog do
expect(case_log.wrent).to eq(125.0)
expect(record_from_db["wrent"]).to eq(125.0)
end
+
+ it "correctly derives and saves weekly service charge" do
+ case_log.update!(scharge: 130, period: 3)
+ record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wscharge).to eq(125.0)
+ expect(record_from_db["wscharge"]).to eq(125.0)
+ end
+
+ it "correctly derives and saves weekly personal service charge" do
+ case_log.update!(pscharge: 130, period: 3)
+ record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wpschrge).to eq(125.0)
+ expect(record_from_db["wpschrge"]).to eq(125.0)
+ end
+
+ it "correctly derives and saves weekly support charge" do
+ case_log.update!(supcharg: 130, period: 3)
+ record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wsupchrg).to eq(125.0)
+ expect(record_from_db["wsupchrg"]).to eq(125.0)
+ end
+
+ it "correctly derives and saves weekly total charge" do
+ case_log.update!(tcharge: 130, period: 3)
+ record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wtcharge).to eq(125.0)
+ expect(record_from_db["wtcharge"]).to eq(125.0)
+ end
end
context "when rent is paid weekly for 49 weeks" do
@@ -342,6 +454,34 @@ RSpec.describe CaseLog do
expect(case_log.wrent).to eq(122.5)
expect(record_from_db["wrent"]).to eq(122.5)
end
+
+ it "correctly derives and saves weekly service charge" do
+ case_log.update!(scharge: 130, period: 4)
+ record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wscharge).to eq(122.5)
+ expect(record_from_db["wscharge"]).to eq(122.5)
+ end
+
+ it "correctly derives and saves weekly personal service charge" do
+ case_log.update!(pscharge: 130, period: 4)
+ record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wpschrge).to eq(122.5)
+ expect(record_from_db["wpschrge"]).to eq(122.5)
+ end
+
+ it "correctly derives and saves weekly support charge" do
+ case_log.update!(supcharg: 130, period: 4)
+ record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wsupchrg).to eq(122.5)
+ expect(record_from_db["wsupchrg"]).to eq(122.5)
+ end
+
+ it "correctly derives and saves weekly total charge" do
+ case_log.update!(tcharge: 130, period: 4)
+ record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wtcharge).to eq(122.5)
+ expect(record_from_db["wtcharge"]).to eq(122.5)
+ end
end
context "when rent is paid weekly for 48 weeks" do
@@ -351,6 +491,34 @@ RSpec.describe CaseLog do
expect(case_log.wrent).to eq(120.0)
expect(record_from_db["wrent"]).to eq(120.0)
end
+
+ it "correctly derives and saves weekly service charge" do
+ case_log.update!(scharge: 130, period: 5)
+ record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wscharge).to eq(120.0)
+ expect(record_from_db["wscharge"]).to eq(120.0)
+ end
+
+ it "correctly derives and saves weekly personal service charge" do
+ case_log.update!(pscharge: 130, period: 5)
+ record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wpschrge).to eq(120.0)
+ expect(record_from_db["wpschrge"]).to eq(120.0)
+ end
+
+ it "correctly derives and saves weekly support charge" do
+ case_log.update!(supcharg: 130, period: 5)
+ record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wsupchrg).to eq(120.0)
+ expect(record_from_db["wsupchrg"]).to eq(120.0)
+ end
+
+ it "correctly derives and saves weekly total charge" do
+ case_log.update!(tcharge: 130, period: 5)
+ record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wtcharge).to eq(120.0)
+ expect(record_from_db["wtcharge"]).to eq(120.0)
+ end
end
context "when rent is paid weekly for 47 weeks" do
@@ -360,6 +528,34 @@ RSpec.describe CaseLog do
expect(case_log.wrent).to eq(117.5)
expect(record_from_db["wrent"]).to eq(117.5)
end
+
+ it "correctly derives and saves weekly service charge" do
+ case_log.update!(scharge: 130, period: 6)
+ record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wscharge).to eq(117.5)
+ expect(record_from_db["wscharge"]).to eq(117.5)
+ end
+
+ it "correctly derives and saves weekly personal service charge" do
+ case_log.update!(pscharge: 130, period: 6)
+ record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wpschrge).to eq(117.5)
+ expect(record_from_db["wpschrge"]).to eq(117.5)
+ end
+
+ it "correctly derives and saves weekly support charge" do
+ case_log.update!(supcharg: 130, period: 6)
+ record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wsupchrg).to eq(117.5)
+ expect(record_from_db["wsupchrg"]).to eq(117.5)
+ end
+
+ it "correctly derives and saves weekly total charge" do
+ case_log.update!(tcharge: 130, period: 6)
+ record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wtcharge).to eq(117.5)
+ expect(record_from_db["wtcharge"]).to eq(117.5)
+ end
end
context "when rent is paid weekly for 46 weeks" do
@@ -369,6 +565,34 @@ RSpec.describe CaseLog do
expect(case_log.wrent).to eq(115.0)
expect(record_from_db["wrent"]).to eq(115.0)
end
+
+ it "correctly derives and saves weekly service charge" do
+ case_log.update!(scharge: 130, period: 7)
+ record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wscharge).to eq(115.0)
+ expect(record_from_db["wscharge"]).to eq(115.0)
+ end
+
+ it "correctly derives and saves weekly personal service charge" do
+ case_log.update!(pscharge: 130, period: 7)
+ record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wpschrge).to eq(115.0)
+ expect(record_from_db["wpschrge"]).to eq(115.0)
+ end
+
+ it "correctly derives and saves weekly support charge" do
+ case_log.update!(supcharg: 130, period: 7)
+ record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wsupchrg).to eq(115.0)
+ expect(record_from_db["wsupchrg"]).to eq(115.0)
+ end
+
+ it "correctly derives and saves weekly total charge" do
+ case_log.update!(tcharge: 130, period: 7)
+ record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wtcharge).to eq(115.0)
+ expect(record_from_db["wtcharge"]).to eq(115.0)
+ end
end
context "when rent is paid weekly for 52 weeks" do
@@ -378,6 +602,34 @@ RSpec.describe CaseLog do
expect(case_log.wrent).to eq(130.0)
expect(record_from_db["wrent"]).to eq(130.0)
end
+
+ it "correctly derives and saves weekly service charge" do
+ case_log.update!(scharge: 130, period: 8)
+ record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wscharge).to eq(130.0)
+ expect(record_from_db["wscharge"]).to eq(130.0)
+ end
+
+ it "correctly derives and saves weekly personal service charge" do
+ case_log.update!(pscharge: 130, period: 8)
+ record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wpschrge).to eq(130.0)
+ expect(record_from_db["wpschrge"]).to eq(130.0)
+ end
+
+ it "correctly derives and saves weekly support charge" do
+ case_log.update!(supcharg: 130, period: 8)
+ record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wsupchrg).to eq(130.0)
+ expect(record_from_db["wsupchrg"]).to eq(130.0)
+ end
+
+ it "correctly derives and saves weekly total charge" do
+ case_log.update!(tcharge: 130, period: 8)
+ record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0]
+ expect(case_log.wtcharge).to eq(130.0)
+ expect(record_from_db["wtcharge"]).to eq(130.0)
+ end
end
end