class SoracomSummary::Billing

Attributes

amount[RW]
bill_item_name[RW]
date[RW]
device_id[RW]
imsi[RW]

Public Class Methods

group_by_origin(billings, time) click to toggle source
# File lib/soracom_summary/billing.rb, line 30
def group_by_origin(billings, time)
  day = time.strftime('%Y%m%d')

  # 対象期間の請求をフィルタする
  day_billings = billings.select { |billing| billing.date == day }
  
  day_billings_by_origin = day_billings
  .group_by { |billing| billing.imsi || billing.device_id || billing.bill_item_name }
  .map { |origin, group| [origin, sum(group)] }
  .to_h

  day_billings_by_origin
end
new( imsi:, device_id:, date:, bill_item_name:, amount:) click to toggle source
# File lib/soracom_summary/billing.rb, line 49
def initialize(
  imsi:,
  device_id:,
  date:,
  bill_item_name:,
  amount:)
  @imsi = imsi
  @device_id = device_id
  @date = date
  @bill_item_name = bill_item_name
  @amount = amount
end
sum(billings) click to toggle source
# File lib/soracom_summary/billing.rb, line 44
def sum(billings)
  billings.inject(0.0) { |sum, billing| sum + billing.amount.to_f }
end
summary(billings, time) click to toggle source
# File lib/soracom_summary/billing.rb, line 5
def summary(billings, time)
  month_text = time.strftime('%Y%m')
  day = time.strftime('%Y%m%d').to_i

  # 対象期間の請求をフィルタする
  month_billings = billings.select { |billing| billing.date[0, 6] == month_text && billing.date.to_i <= day }
  day_billings = billings.select { |billing| billing.date.to_i == day }
  billing_summary = { 'billings-month-total' => sum(month_billings), 'billings-day-total' => sum(day_billings) }

  # 請求を項目ごとにグループ化する
  month_billings_by_item = month_billings
    .group_by { |billing| billing.bill_item_name }
    .map { |item, group| ["billings-month-item-#{item}", sum(group) ]}
    .to_h
  billing_summary.merge!(month_billings_by_item)

  day_billings_by_item = day_billings
    .group_by { |billing| billing.bill_item_name }
    .map { |item, group| ["billings-day-item-#{item}", sum(group) ]}
    .to_h
  billing_summary.merge!(day_billings_by_item)

  billing_summary
end