Skip to content

Commit 8ecabdd

Browse files
nathangthomascielf
andauthored
5037 default the quantity per individual to 50 in the data (#5080)
* Add migration to set default distribution quantity * Set default distribution quantity in after_initialize if new record * Display default value in the form * Add tests * Remove changes to form view * Remove unecessary valid? call * Update Schema version to match main * WIP * Add Gemfile.lock to gitignore * Update values for recent addition to children_served_report_service_spec * Update values for recent addition to children_served_report_service_spec * Update values for recent addition to children_served_report_service_spec * Attempt to remove Gemfile and .gitignore from PR. * Attempt to remove Gemfile and .gitignore from PR. * Add distribution_quantity of 1 to items in test setup * Add distribution_quantity of one to kit items * Update total_people_served_with_loose_supplies_per_month to exclude kits * Merge main * Fix merge main mistake. * Add new line to fix linting error --------- Co-authored-by: CL Fisher <[email protected]>
1 parent bdb2332 commit 8ecabdd

File tree

6 files changed

+42
-12
lines changed

6 files changed

+42
-12
lines changed

app/models/item.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class Item < ApplicationRecord
2929
include Exportable
3030
include Valuable
3131

32+
after_initialize :set_default_distribution_quantity, if: :new_record?
3233
after_update :update_associated_kit_name, if: -> { kit.present? }
3334
before_create :set_reporting_category
3435
before_destroy :validate_destroy, prepend: true
@@ -194,6 +195,10 @@ def set_reporting_category
194195
self.reporting_category = base_item.reporting_category if base_item.reporting_category
195196
end
196197

198+
def set_default_distribution_quantity
199+
self.distribution_quantity ||= kit_id.present? ? 1 : 50
200+
end
201+
197202
def update_associated_kit_name
198203
kit.update(name: name)
199204
end

app/services/reports/adult_incontinence_report_service.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def total_people_served_with_loose_supplies_per_month
127127
.distributions
128128
.for_year(year)
129129
.joins(line_items: :item)
130-
.merge(Item.adult_incontinence)
130+
.merge(Item.adult_incontinence.where(kit_id: nil)) # exclude kits
131131
.sum('line_items.quantity / COALESCE(items.distribution_quantity, 50.0)')
132132
total_quantity.to_f / 12.0
133133
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class SetDefaultDistributionQuantity < ActiveRecord::Migration[7.2]
2+
def up
3+
Item.where(distribution_quantity: nil).find_each do |item|
4+
item.update_column(:distribution_quantity, item.kit_id.present? ? 1 : 50)
5+
end
6+
end
7+
8+
def down
9+
raise ActiveRecord::IrreversibleMigration
10+
end
11+
end

spec/models/item_spec.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,20 @@
409409
end
410410
end
411411

412+
describe "when distribution_quantity is set by default" do
413+
it "should set distribution_quantity to 50 for regular items" do
414+
item = Item.new
415+
expect(item.distribution_quantity).to eq(50)
416+
end
417+
418+
it "should set distribution_quantity to 1 for kits" do
419+
organization = create(:organization)
420+
kit = create(:kit, organization: organization)
421+
item = Item.new(kit: kit)
422+
expect(item.distribution_quantity).to eq(1)
423+
end
424+
end
425+
412426
describe "distribution_quantity and package size" do
413427
it "have nil values if an empty string is passed" do
414428
expect(create(:item, distribution_quantity: '').distribution_quantity).to be_nil

spec/services/reports/adult_incontinence_report_service_spec.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@
4141
non_adult_incontinence_item = organization.items.where.not(id: organization.items.adult_incontinence).first
4242

4343
# kits
44-
adult_incontinence_kit_item_1 = create(:item, name: "Adult Briefs (Medium)", reporting_category: "adult_incontinence")
45-
adult_incontinence_kit_item_2 = create(:item, name: "Adult Briefs (Large)", reporting_category: "adult_incontinence")
46-
adult_incontinence_kit_item_3 = create(:item, name: "Adult Briefs (Small)", reporting_category: "adult_incontinence")
44+
adult_incontinence_kit_item_1 = create(:item, name: "Adult Briefs (Medium)", reporting_category: "adult_incontinence", distribution_quantity: 1)
45+
adult_incontinence_kit_item_2 = create(:item, name: "Adult Briefs (Large)", reporting_category: "adult_incontinence", distribution_quantity: 1)
46+
adult_incontinence_kit_item_3 = create(:item, name: "Adult Briefs (Small)", reporting_category: "adult_incontinence", distribution_quantity: 1)
4747
non_adult_incontinence_kit_item = create(:item, name: "Baby Wipes", reporting_category: "other")
4848

4949
donation_1 = create(:donation)
@@ -129,7 +129,7 @@
129129
end
130130

131131
it "returns an accurate number of adult served per month" do
132-
expect(report.adults_served_per_month.round).to eq(109)
132+
expect(report.adults_served_per_month.round).to eq(108)
133133
end
134134

135135
it "should return the number of loose adult incontinence supplies distributed" do
@@ -154,9 +154,9 @@
154154
expect(report.report[:entries]).to match(hash_including({
155155
"% adult incontinence bought" => "60%",
156156
"% adult incontinence supplies donated" => "40%",
157-
"Adults Assisted Per Month" => 233.83,
157+
"Adults Assisted Per Month" => 233.33,
158158
"Adult incontinence supplies distributed" => "51,800",
159-
"Adult incontinence supplies per adult per month" => 18.46,
159+
"Adult incontinence supplies per adult per month" => 18.5,
160160
"Money spent purchasing adult incontinence supplies" => "$30.00"
161161
}))
162162
expect(report.report[:entries]['Adult incontinence supplies'].split(', '))
@@ -183,8 +183,8 @@
183183
"% adult incontinence bought" => "60%",
184184
"% adult incontinence supplies donated" => "40%",
185185
"Adult incontinence supplies distributed" => "51,800",
186-
"Adults Assisted Per Month" => 108.83,
187-
"Adult incontinence supplies per adult per month" => 39.66,
186+
"Adults Assisted Per Month" => 108.33,
187+
"Adult incontinence supplies per adult per month" => 39.85,
188188
"Money spent purchasing adult incontinence supplies" => "$30.00"
189189
}))
190190
expect(report.report[:entries]['Adult incontinence supplies'].split(', '))

spec/services/reports/children_served_report_service_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
create(:line_item, item: infant_disposable_kit_item)
4040
])
4141

42-
create(:item, name: "Kit 1", kit: kit_1, organization:)
43-
create(:item, name: "Kit 2", kit: kit_2, organization:)
42+
create(:item, name: "Kit 1", kit: kit_1, organization:, distribution_quantity: 1)
43+
create(:item, name: "Kit 2", kit: kit_2, organization:, distribution_quantity: 1)
4444

4545
# Distributions
4646
distributions = create_list(:distribution, 2, issued_at: within_time, organization: organization)
@@ -88,7 +88,7 @@
8888
create(:line_item, item: infant_disposable_kit_item)
8989
])
9090

91-
create(:item, name: "Kit 1", kit:, organization:)
91+
create(:item, name: "Kit 1", kit:, organization:, distribution_quantity: 1)
9292

9393
# Distributions
9494
distributions = create_list(:distribution, 2, issued_at: within_time, organization: organization)

0 commit comments

Comments
 (0)