module XeroGateway::LineItemCalculations

Public Instance Methods

add_line_item(params = {}) click to toggle source
# File lib/xero_gateway/line_item_calculations.rb, line 4
def add_line_item(params = {})
  line_item = nil
  case params
    when Hash then      line_item = LineItem.new(params)
    when LineItem then  line_item = params
    else                raise InvalidLineItemError
  end
  @line_items << line_item
  line_item
end
sub_total() click to toggle source

Calculate the sub_total as the SUM(line_item.line_amount).

# File lib/xero_gateway/line_item_calculations.rb, line 22
def sub_total
  total_cache(:sub_total) || sum_line_items(line_items, :line_amount)
end
total() click to toggle source

Calculate the toal as sub_total + total_tax.

# File lib/xero_gateway/line_item_calculations.rb, line 32
def total
  total_cache(:total) || (sub_total + total_tax)
end
total_tax() click to toggle source

Calculate the total_tax as the SUM(line_item.tax_amount).

# File lib/xero_gateway/line_item_calculations.rb, line 27
def total_tax
  total_cache(:total_tax) || sum_line_items(line_items, :tax_amount)
end

Private Instance Methods

sum_line_items(lines, sum_type = :line_amount) click to toggle source
# File lib/xero_gateway/line_item_calculations.rb, line 42
def sum_line_items(lines, sum_type = :line_amount)
  lines.inject(BigDecimal('0')) do |sum, line|
    sum + BigDecimal(line.send(sum_type).to_s)
  end
end
total_cache(name) click to toggle source
# File lib/xero_gateway/line_item_calculations.rb, line 38
def total_cache(name)
  instance_variable_defined?("@#{name}") && instance_variable_get("@#{name}")
end