Class: Pay::Charge

Inherits:
ApplicationRecord show all
Defined in:
app/models/pay/charge.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.find_by_processor_and_id(processor, processor_id) ⇒ Object



57
58
59
# File 'app/models/pay/charge.rb', line 57

def self.find_by_processor_and_id(processor, processor_id)
  joins(:customer).find_by(processor_id: processor_id, pay_customers: {processor: processor})
end

.pay_processor_for(name) ⇒ Object



61
62
63
# File 'app/models/pay/charge.rb', line 61

def self.pay_processor_for(name)
  "Pay::#{name.to_s.classify}::Charge".constantize
end

Instance Method Details

#amount_refunded_with_currencyObject



98
99
100
# File 'app/models/pay/charge.rb', line 98

def amount_refunded_with_currency
  Pay::Currency.format(amount_refunded, currency: currency)
end

#amount_with_currencyObject



94
95
96
# File 'app/models/pay/charge.rb', line 94

def amount_with_currency
  Pay::Currency.format(amount, currency: currency)
end

#captured?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'app/models/pay/charge.rb', line 73

def captured?
  amount_captured > 0
end

#charged_toObject



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'app/models/pay/charge.rb', line 102

def charged_to
  case payment_method_type
  when "card"
    "#{brand.titleize} (**** **** **** #{last4})"
  when "paypal"
    "#{brand} (#{email})"

  # Braintree
  when "venmo"
    "#{brand.titleize} #{username}"
  when "us_bank_account"
    "#{bank} #{last4}"

  # Stripe
  when "acss_debit"
    "#{bank} #{last4}"
  when "eps", "fpx", "ideal", "p24"
    bank

  when "au_becs_debit"
    "BECS Debit #{last4}"

  when "bacs_debit"
    "Bacs Debit #{last4}"

  when "sepa_debit"
    "SEPA Debit #{last4}"

  else
    payment_method_type&.titleize
  end
end

#full_refund?Boolean

Returns:

  • (Boolean)


86
87
88
# File 'app/models/pay/charge.rb', line 86

def full_refund?
  refunded? && amount == amount_refunded
end

#line_itemsObject



135
136
137
# File 'app/models/pay/charge.rb', line 135

def line_items
  Array.wrap(super)
end

#partial_refund?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'app/models/pay/charge.rb', line 90

def partial_refund?
  refunded? && !full_refund?
end

#payment_processorObject



65
66
67
# File 'app/models/pay/charge.rb', line 65

def payment_processor
  @payment_processor ||= self.class.pay_processor_for(customer.processor).new(self)
end

#processor_chargeObject



69
70
71
# File 'app/models/pay/charge.rb', line 69

def processor_charge
  payment_processor.charge
end

#refund!(refund_amount = nil) ⇒ Object



77
78
79
80
# File 'app/models/pay/charge.rb', line 77

def refund!(refund_amount = nil)
  refund_amount ||= amount
  payment_processor.refund!(refund_amount)
end

#refunded?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'app/models/pay/charge.rb', line 82

def refunded?
  amount_refunded.to_i > 0
end