class Reji::InvoiceLineItem

Attributes

invoice[R]

Get the Stripe model instance.

Public Class Methods

new(invoice, item) click to toggle source
# File lib/reji/invoice_line_item.rb, line 5
def initialize(invoice, item)
  @invoice = invoice
  @item = item
end

Public Instance Methods

as_stripe_invoice_line_item() click to toggle source

Get the underlying Stripe invoice line item.

# File lib/reji/invoice_line_item.rb, line 58
def as_stripe_invoice_line_item
  @item
end
both_inclusive_and_exclusive_tax?() click to toggle source

Determine if the line item has both inclusive and exclusive tax.

# File lib/reji/invoice_line_item.rb, line 16
def both_inclusive_and_exclusive_tax?
  inclusive_tax_percentage > 0 && exclusive_tax_percentage > 0
end
end_date() click to toggle source

Get a human readable date for the end date.

# File lib/reji/invoice_line_item.rb, line 45
def end_date
  subscription? ? Time.zone.at(@item.period.end).strftime('%b %d, %Y') : nil
end
exclusive_tax_percentage() click to toggle source

Get the total percentage of the default exclusive tax for the invoice line item.

# File lib/reji/invoice_line_item.rb, line 28
def exclusive_tax_percentage
  return calculate_tax_percentage_by_tax_amount(false) if @invoice.not_tax_exempt?

  calculate_tax_percentage_by_tax_rate(false)
end
inclusive_tax_percentage() click to toggle source

Get the total percentage of the default inclusive tax for the invoice line item.

# File lib/reji/invoice_line_item.rb, line 21
def inclusive_tax_percentage
  return calculate_tax_percentage_by_tax_amount(true) if @invoice.not_tax_exempt?

  calculate_tax_percentage_by_tax_rate(true)
end
method_missing(key) click to toggle source

Dynamically access the Stripe invoice line item instance.

# File lib/reji/invoice_line_item.rb, line 63
def method_missing(key)
  @item[key]
end
respond_to_missing?(method_name, include_private = false) click to toggle source
Calls superclass method
# File lib/reji/invoice_line_item.rb, line 67
def respond_to_missing?(method_name, include_private = false)
  super
end
start_date() click to toggle source

Get a human readable date for the start date.

# File lib/reji/invoice_line_item.rb, line 40
def start_date
  subscription? ? Time.zone.at(@item.period.start).strftime('%b %d, %Y') : nil
end
subscription?() click to toggle source

Determine if the invoice line item is for a subscription.

# File lib/reji/invoice_line_item.rb, line 50
def subscription?
  @item.type == 'subscription'
end
tax_rates?() click to toggle source

Determine if the invoice line item has tax rates.

# File lib/reji/invoice_line_item.rb, line 35
def tax_rates?
  @invoice.not_tax_exempt? ? !@item.tax_amounts.empty? : !@item.tax_rates.empty?
end
total() click to toggle source

Get the total for the invoice line item.

# File lib/reji/invoice_line_item.rb, line 11
def total
  format_amount(@item.amount)
end

Protected Instance Methods

calculate_tax_percentage_by_tax_amount(inclusive) click to toggle source

Calculate the total tax percentage for either the inclusive or exclusive tax by tax amount.

# File lib/reji/invoice_line_item.rb, line 82
          def calculate_tax_percentage_by_tax_amount(inclusive)
  return 0 if @item[:tax_amounts].blank?

  @item.tax_amounts
    .select { |tax_amount| tax_amount.inclusive == inclusive }
    .inject(0) { |sum, tax_amount| sum + tax_amount[:tax_rate][:percentage] }
    .to_i
end
calculate_tax_percentage_by_tax_rate(inclusive) click to toggle source

Calculate the total tax percentage for either the inclusive or exclusive tax by tax rate.

# File lib/reji/invoice_line_item.rb, line 72
          def calculate_tax_percentage_by_tax_rate(inclusive)
  return 0 if @item[:tax_rates].empty?

  @item.tax_rates
    .select { |tax_rate| tax_rate[:inclusive] == inclusive }
    .inject(0) { |sum, tax_rate| sum + tax_rate[:percentage] }
    .to_i
end
format_amount(amount) click to toggle source

Format the given amount into a displayable currency.

# File lib/reji/invoice_line_item.rb, line 92
          def format_amount(amount)
  Reji.format_amount(amount, @item.currency)
end