Class: Workarea::Payment
- Inherits:
-
Object
show all
- Includes:
- ApplicationDocument
- Defined in:
- app/models/workarea/payment.rb,
app/models/workarea/payment/refund.rb,
app/models/workarea/payment/status.rb,
app/models/workarea/payment/tender.rb,
app/models/workarea/payment/address.rb,
app/models/workarea/payment/capture.rb,
app/models/workarea/payment/profile.rb,
app/models/workarea/payment/operation.rb,
app/models/workarea/payment/processing.rb,
app/models/workarea/payment/credit_card.rb,
app/models/workarea/payment/transaction.rb,
app/models/workarea/payment/saved_credit_card.rb,
app/models/workarea/payment/store_credit_card.rb,
app/models/workarea/payment/insufficient_funds.rb,
app/models/workarea/payment/refund/credit_card.rb,
app/models/workarea/payment/tender/credit_card.rb,
app/models/workarea/payment/capture/credit_card.rb,
app/models/workarea/payment/refund/store_credit.rb,
app/models/workarea/payment/tender/store_credit.rb,
app/models/workarea/payment/capture/store_credit.rb,
app/models/workarea/payment/purchase/credit_card.rb,
app/models/workarea/payment/authorize/credit_card.rb,
app/models/workarea/payment/credit_card_operation.rb,
app/models/workarea/payment/purchase/store_credit.rb,
app/models/workarea/payment/authorize/store_credit.rb,
app/models/workarea/payment/operation_implementation.rb
Defined Under Namespace
Modules: Authorize, CreditCard, CreditCardOperation, OperationImplementation, Processing, Purchase, Status
Classes: Address, Capture, InsufficientFunds, MissingReference, Operation, Profile, Refund, SavedCreditCard, StoreCreditCard, Tender, Transaction
Class Method Summary
collapse
Instance Method Summary
collapse
#releasable?
add_worker, assert_valid_config!, async, caching_classes?, disable, enable, inline, #run_callbacks, workers, workers_list
#embedded_children
Class Method Details
.lookup(id, postal_code) ⇒ Payment?
Finds the payment order for the given ID and postal code. Both must match the payment order. Used to lookup orders for checking order status anonymously.
35
36
37
38
|
# File 'app/models/workarea/payment.rb', line 35
def self.lookup(id, postal_code)
payment = find_or_initialize_by(id: id)
payment.try(:postal_code) == postal_code ? payment : nil
end
|
Instance Method Details
#adjust_tender_amounts(new_total) ⇒ Boolean
Adjust tender amounts to meet an order total. Used in checkout when updating payment.
99
100
101
102
103
104
105
106
107
108
109
110
111
|
# File 'app/models/workarea/payment.rb', line 99
def adjust_tender_amounts(new_total)
set_store_credit if store_credit_balance > 0.to_m
tenders.each do |tender|
tender.amount = new_total
new_total -= tender.amount
end
save
end
|
#authorize!(options = {}) ⇒ Object
147
148
149
150
|
# File 'app/models/workarea/payment.rb', line 147
def authorize!(options = {})
transactions = tenders.map { |t| t.build_transaction(action: 'authorize') }
perform_operation(transactions, options)
end
|
#clear_credit_card ⇒ Object
Remove the current card for the payment. Used for clearing out a card when updating payment so another payment option could be selected
117
118
119
|
# File 'app/models/workarea/payment.rb', line 117
def clear_credit_card
self.credit_card = nil
end
|
#credit_card? ⇒ Boolean
139
140
141
|
# File 'app/models/workarea/payment.rb', line 139
def credit_card?
credit_card.present?
end
|
For compatibility with admin features, models must respond to this method
44
45
46
|
# File 'app/models/workarea/payment.rb', line 44
def name
id
end
|
#purchasable?(total_amount) ⇒ Boolean
Whether or not the order is purchasable. This is defined as the tenders amount equals the amount passed in (the Order#total). Used in checkout to determine whether we should try to purchase the order.
If the order is not purchasable then all relavant validation errors will be added to the order.
131
132
133
|
# File 'app/models/workarea/payment.rb', line 131
def purchasable?(total_amount)
tenders.all?(&:valid?) && tendered_amount == total_amount
end
|
#purchase!(options = {}) ⇒ Object
152
153
154
155
|
# File 'app/models/workarea/payment.rb', line 152
def purchase!(options = {})
transactions = tenders.map { |t| t.build_transaction(action: 'purchase') }
perform_operation(transactions, options)
end
|
#saved_credit_cards ⇒ Object
52
53
54
|
# File 'app/models/workarea/payment.rb', line 52
def saved_credit_cards
profile.try(:credit_cards) || []
end
|
#set_address(attrs) ⇒ Object
73
74
75
76
77
|
# File 'app/models/workarea/payment.rb', line 73
def set_address(attrs)
build_address unless address
address.attributes = attrs
save
end
|
#set_credit_card(attrs) ⇒ Object
79
80
81
82
83
84
85
86
|
# File 'app/models/workarea/payment.rb', line 79
def set_credit_card(attrs)
build_credit_card unless credit_card
credit_card.saved_card_id = nil
credit_card.attributes = attrs.slice(
*Workarea.config.credit_card_attributes
)
save
end
|
#set_store_credit ⇒ Object
88
89
90
91
|
# File 'app/models/workarea/payment.rb', line 88
def set_store_credit
build_store_credit unless store_credit
save
end
|
#status ⇒ Object
157
158
159
160
|
# File 'app/models/workarea/payment.rb', line 157
def status
calculators = Workarea.config.payment_status_calculators.map(&:constantize)
StatusCalculator.new(calculators, self).result
end
|
#store_credit? ⇒ Boolean
143
144
145
|
# File 'app/models/workarea/payment.rb', line 143
def store_credit?
store_credit.present?
end
|
#store_credit_balance ⇒ Object
48
49
50
|
# File 'app/models/workarea/payment.rb', line 48
def store_credit_balance
profile.try(:store_credit) || 0.to_m
end
|
#tendered_amount ⇒ Object
135
136
137
|
# File 'app/models/workarea/payment.rb', line 135
def tendered_amount
tenders.map(&:amount).sum.to_m
end
|
#tenders ⇒ Object
67
68
69
70
71
|
# File 'app/models/workarea/payment.rb', line 67
def tenders
Workarea.config.tender_types.flat_map do |type|
send(type)
end.compact
end
|
#total ⇒ Object
63
64
65
|
# File 'app/models/workarea/payment.rb', line 63
def total
tenders.map(&:amount).sum || 0.to_m
end
|
#transactions ⇒ Object
TODO in v4 - change this to get transactions by foreign key. Currently, this doesn’t return all transactions for this payment if a tender failed validation.
59
60
61
|
# File 'app/models/workarea/payment.rb', line 59
def transactions
tenders.map(&:transactions).flatten
end
|