class StripeInvoice

Public Class Methods

stripe_class() click to toggle source
# File lib/stripe_model_callbacks/models/stripe_invoice.rb, line 14
def self.stripe_class
  Stripe::Invoice
end

Public Instance Methods

assign_from_stripe(object) click to toggle source
# File lib/stripe_model_callbacks/models/stripe_invoice.rb, line 18
def assign_from_stripe(object)
  assign_attributes(
    stripe_charge_id: object.charge,
    stripe_customer_id: object.customer,
    stripe_subscription_id: object.subscription,
    due_date: object.due_date ? Time.zone.at(object.due_date) : nil,
    period_start: Time.zone.at(object.period_start),
    period_end: Time.zone.at(object.period_end)
  )

  assign_created(object)
  assign_amounts(object)

  StripeModelCallbacks::AttributesAssignerService.execute!(
    model: self, stripe_model: object,
    attributes: %w[
      attempted attempt_count billing closed currency description forgiven id livemode
      ending_balance forgiven next_payment_attempt number paid receipt_number
      starting_balance statement_descriptor tax_percent
    ]
  )

  assign_invoice_items(object)
end

Private Instance Methods

assign_amounts(object) click to toggle source
# File lib/stripe_model_callbacks/models/stripe_invoice.rb, line 45
def assign_amounts(object)
  assign_attributes(
    amount_due: Money.new(object.amount_due, object.currency),
    application_fee: object.application_fee ? Money.new(object.application_fee, object.currency) : nil,
    stripe_discount_id: stripe_discount_id_from_object(object),
    subtotal: Money.new(object.subtotal, object.currency),
    tax: object.tax ? Money.new(object.tax, object.currency) : nil,
    total: object.total ? Money.new(object.total, object.currency) : nil
  )
end
assign_created(object) click to toggle source
# File lib/stripe_model_callbacks/models/stripe_invoice.rb, line 56
def assign_created(object)
  # The date-field was renamed to created on 2019-03-14
  if object.respond_to?(:date)
    self.created = Time.zone.at(object.date)
  else
    self.created = Time.zone.at(object.created)
  end
end
assign_invoice_items(object) click to toggle source
# File lib/stripe_model_callbacks/models/stripe_invoice.rb, line 65
def assign_invoice_items(object)
  object.lines.each do |item|
    # Has to be found this way to actually update the values
    invoice_item = stripe_invoice_items.find do |invoice_item_i|
      invoice_item_i.stripe_id == item.id &&
        invoice_item_i.stripe_subscription_item_id == item.subscription_item &&
        invoice_item_i.stripe_plan_id == item.plan&.id
    end

    invoice_item ||= stripe_invoice_items.build
    invoice_item.stripe_invoice_id = object.id
    invoice_item&.assign_from_stripe(item)
  end
end
stripe_discount_id_from_object(object) click to toggle source
# File lib/stripe_model_callbacks/models/stripe_invoice.rb, line 80
def stripe_discount_id_from_object(object)
  return nil unless object.discount

  response = StripeModelCallbacks::Customer::DiscountUpdatedService.execute(object: object.discount)
  raise response.errors.join(". ") if response.errors.any?

  response.result.id
end