class AppEarnings::Amazon::Reporter

Generates a report based on the data provided

Constants

AVAILABLE_FORMATS

Attributes

data[RW]

Public Class Methods

new(data) click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 7
def initialize(data)
  @data = data
  @payments_data = @data.find { |r| r[:report_type] == :payments }
  @earnings_data = (@data - [@payments_data]).first
  @exchange_info = fetch_exchange_info
end

Public Instance Methods

as_json() click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 83
def as_json
  puts JSON.generate(apps: @reports.map(&:to_json),
                     currency: 'USD',
                     total: full_amount)
end
as_text() click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 70
def as_text
  amount = AppEarnings::Report.formatted_amount('USD', full_amount)
  refund = AppEarnings::Report.formatted_amount('USD', refunds)
  puts @reports
  puts "Total of refunds: #{refund}"
  puts "Total of all transactions: #{amount}"

  if @payments_full_amount.round(2) != full_amount
    puts "Total from Payment Report: #{@payments_full_amount.round(2)}"
  end
  @reports
end
fetch_exchange_info() click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 14
def fetch_exchange_info
  @payments_full_amount = 0.0
  @payments_data[:summary].reduce({}) do |all_info, data|
    all_info[data[:marketplace]] = data[:fx_rate]
    @payments_full_amount += data[:total_payment].gsub(/,/, '').to_f
    all_info
  end
end
full_amount() click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 23
def full_amount
  total = @reports.reduce(0.0) { |a, e| a + e.amount.to_f }
  total - refunds
end
generate() click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 37
def generate
  @reports = []
  @data.each do |raw_data|
    if raw_data[:report_type] == :earnings
      by_apps = raw_data[:details].group_by { |element| element[:app] }
                                  .sort_by { |app| app }

      by_apps.each do |key, application|
        @reports << AmazonReport.new(key, application, @exchange_info)
      end
    end
  end
end
refunds() click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 28
def refunds
  @earnings_data[:summary].reduce(0.0) do |sum, marketplace|
    currency = marketplace[:refunds_currency_code]
    amount = marketplace[:refunds].gsub(/\(|\)/, '').to_f
    amount = amount * @exchange_info[currency].to_f if currency != 'USD'
    sum + amount
  end
end
render_as(format = 'text') click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 61
def render_as(format = 'text')
  case format
  when 'text'
    as_text
  when 'json'
    as_json
  end
end
report_as(format = 'text') click to toggle source
# File lib/app_earnings/amazon/reporter.rb, line 51
def report_as(format = 'text')
  unless AVAILABLE_FORMATS.include?(format)
    fail "#{format} Not supported. Available formats are: " +
         " #{AVAILABLE_FORMATS.join(", ")}"
  end

  generate
  render_as(format)
end