Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/services/reports.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class << self
# @return [Array<Reports::Report>]
def all_reports(year:, organization:)
[
Reports::AcquisitionReportService.new(year: year, organization: organization).report,
Reports::DiaperReportService.new(year: year, organization: organization).report,
Reports::WarehouseReportService.new(year: year, organization: organization).report,
Reports::AdultIncontinenceReportService.new(year: year, organization: organization).report,
Reports::PeriodSupplyReportService.new(year: year, organization: organization).report,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module Reports
class AcquisitionReportService
class DiaperReportService
include ActionView::Helpers::NumberHelper
attr_reader :year, :organization

Expand All @@ -12,39 +12,39 @@ def initialize(year:, organization:)

# @return [Hash]
def report
@report ||= { name: 'Diaper Acquisition',
entries: {
'Disposable diapers distributed' => number_with_delimiter(total_disposable_diapers_distributed),
'Cloth diapers distributed' => number_with_delimiter(distributed_cloth_diapers),
'Average monthly disposable diapers distributed' => number_with_delimiter(monthly_disposable_diapers),
'Total product drives' => annual_drives.count,
'Disposable diapers collected from drives' => number_with_delimiter(disposable_diapers_from_drives),
'Cloth diapers collected from drives' => number_with_delimiter(cloth_diapers_from_drives),
'Money raised from product drives' => number_to_currency(money_from_drives),
'Total product drives (virtual)' => virtual_product_drives.count,
'Money raised from product drives (virtual)' => number_to_currency(money_from_virtual_drives),
'Disposable diapers collected from drives (virtual)' => number_with_delimiter(disposable_diapers_from_virtual_drives),
'Cloth diapers collected from drives (virtual)' => number_with_delimiter(cloth_diapers_from_virtual_drives),
'Disposable diapers donated' => number_with_delimiter(donated_disposable_diapers),
'% disposable diapers donated' => "#{percent_disposable_donated.round}%",
'% cloth diapers donated' => "#{percent_cloth_diapers_donated.round}%",
'Disposable diapers purchased' => number_with_delimiter(purchased_loose_disposable_diapers),
'% disposable diapers purchased' => "#{percent_disposable_diapers_purchased.round}%",
'% cloth diapers purchased' => "#{percent_cloth_diapers_purchased.round}%",
'Money spent purchasing diapers' => number_to_currency(money_spent_on_diapers),
'Purchased from' => purchased_from,
'Vendors diapers purchased through' => vendors_purchased_from
} }
@report ||= {name: "Diapers",
entries: {
"Disposable diapers distributed" => number_with_delimiter(total_disposable_diapers_distributed),
"Cloth diapers distributed" => number_with_delimiter(distributed_cloth_diapers),
"Average monthly disposable diapers distributed" => number_with_delimiter(monthly_disposable_diapers),
"Total product drives" => annual_drives.count,
"Disposable diapers collected from drives" => number_with_delimiter(disposable_diapers_from_drives),
"Cloth diapers collected from drives" => number_with_delimiter(cloth_diapers_from_drives),
"Money raised from product drives" => number_to_currency(money_from_drives),
"Total product drives (virtual)" => virtual_product_drives.count,
"Money raised from product drives (virtual)" => number_to_currency(money_from_virtual_drives),
"Disposable diapers collected from drives (virtual)" => number_with_delimiter(disposable_diapers_from_virtual_drives),
"Cloth diapers collected from drives (virtual)" => number_with_delimiter(cloth_diapers_from_virtual_drives),
"Disposable diapers donated" => number_with_delimiter(donated_disposable_diapers),
"% disposable diapers donated" => "#{percent_disposable_donated.round}%",
"% cloth diapers donated" => "#{percent_cloth_diapers_donated.round}%",
"Disposable diapers purchased" => number_with_delimiter(purchased_loose_disposable_diapers),
"% disposable diapers purchased" => "#{percent_disposable_diapers_purchased.round}%",
"% cloth diapers purchased" => "#{percent_cloth_diapers_purchased.round}%",
"Money spent purchasing diapers" => number_to_currency(money_spent_on_diapers),
"Purchased from" => purchased_from,
"Vendors diapers purchased through" => vendors_purchased_from
}}
end

# @return [Integer]
def distributed_loose_disposable_diapers
@distributed_loose_disposable_diapers ||= organization
.distributions
.for_year(year)
.joins(line_items: :item)
.merge(Item.disposable)
.sum('line_items.quantity')
.distributions
.for_year(year)
.joins(line_items: :item)
.merge(Item.disposable)
.sum("line_items.quantity")
end

def distributed_disposable_diapers_from_kits
Expand All @@ -71,7 +71,7 @@ def distributed_disposable_diapers_from_kits

result = ActiveRecord::Base.connection.execute(sanitized_sql)

result.first['sum'].to_i
result.first["sum"].to_i
end

def total_disposable_diapers_distributed
Expand All @@ -80,11 +80,11 @@ def total_disposable_diapers_distributed

def distributed_cloth_diapers
@distributed_cloth_diapers ||= organization
.distributions
.for_year(year)
.joins(line_items: :item)
.merge(Item.cloth_diapers)
.sum('line_items.quantity')
.distributions
.for_year(year)
.joins(line_items: :item)
.merge(Item.cloth_diapers)
.sum("line_items.quantity")
end

# @return [Integer]
Expand All @@ -100,12 +100,12 @@ def annual_drives
# @return [Integer]
def disposable_diapers_from_drives
@disposable_diapers_from_drives ||=
annual_drives.joins(donations: { line_items: :item }).merge(Item.disposable).sum(:quantity)
annual_drives.joins(donations: {line_items: :item}).merge(Item.disposable).sum(:quantity)
end

def cloth_diapers_from_drives
@cloth_diapers_from_drives ||=
annual_drives.joins(donations: { line_items: :item }).merge(Item.cloth_diapers).sum(:quantity)
annual_drives.joins(donations: {line_items: :item}).merge(Item.cloth_diapers).sum(:quantity)
end

# @return [Float]
Expand All @@ -126,17 +126,17 @@ def money_from_virtual_drives
# @return [Integer]
def disposable_diapers_from_virtual_drives
@disposable_diapers_from_virtual_drives ||= virtual_product_drives
.joins(donations: { line_items: :item })
.merge(Item.disposable)
.sum(:quantity)
.joins(donations: {line_items: :item})
.merge(Item.disposable)
.sum(:quantity)
end

# @return [Integer]
def cloth_diapers_from_virtual_drives
@cloth_diapers_from_virtual_drives ||= virtual_product_drives
.joins(donations: { line_items: :item })
.merge(Item.cloth_diapers)
.sum(:quantity)
.joins(donations: {line_items: :item})
.merge(Item.cloth_diapers)
.sum(:quantity)
end

# @return [Float]
Expand Down Expand Up @@ -181,7 +181,7 @@ def purchased_from
.distinct
.pluck(:purchased_from)
.compact
.join(', ')
.join(", ")
end

# @return [String]
Expand All @@ -194,25 +194,25 @@ def vendors_purchased_from
.distinct
.pluck(:business_name)
.compact
.join(', ')
.join(", ")
end

###### HELPER METHODS ######

# @return [Integer]
def purchased_loose_disposable_diapers
@purchased_disposable_diapers ||= LineItem.joins(:item)
.merge(Item.disposable)
.where(itemizable: organization.purchases.for_year(year))
.sum(:quantity)
.merge(Item.disposable)
.where(itemizable: organization.purchases.for_year(year))
.sum(:quantity)
end

# @return [Integer]
def purchased_cloth_diapers
@purchased_cloth_diapers ||= LineItem.joins(:item)
.merge(Item.cloth_diapers)
.where(itemizable: organization.purchases.for_year(year))
.sum(:quantity)
.merge(Item.cloth_diapers)
.where(itemizable: organization.purchases.for_year(year))
.sum(:quantity)
end

# @return [Integer]
Expand All @@ -228,17 +228,17 @@ def total_cloth_diapers_acquired
# @return [Integer]
def donated_disposable_diapers
@donated_diapers ||= LineItem.joins(:item)
.merge(Item.disposable)
.where(itemizable: organization.donations.for_year(year))
.sum(:quantity)
.merge(Item.disposable)
.where(itemizable: organization.donations.for_year(year))
.sum(:quantity)
end

# @return [Integer]
def donated_cloth_diapers
@donated_cloth_diapers ||= LineItem.joins(:item)
.merge(Item.cloth_diapers)
.where(itemizable: organization.donations.for_year(year))
.sum(:quantity)
.merge(Item.cloth_diapers)
.where(itemizable: organization.donations.for_year(year))
.sum(:quantity)
end
end
end
Loading