Class: MerchantSidekick::Order
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- MerchantSidekick::Order
show all
- Includes:
- AASM
- Defined in:
- lib/merchant_sidekick/order.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.generate_unique_id ⇒ Object
hex digest 16 char in length TODO change this to customize number schema
118
119
120
121
122
|
# File 'lib/merchant_sidekick/order.rb', line 118
def generate_unique_id
value = Digest::MD5.hexdigest("#{Time.now.utc.to_i}#{rand(2 ** 128)}")[0..6]
value.encode! 'utf-8'
value
end
|
Instance Method Details
#build_addresses(options = {}) ⇒ Object
Builds billing, shipping and origin addresses
146
147
148
|
# File 'lib/merchant_sidekick/order.rb', line 146
def build_addresses(options={})
raise "override in purchase_order or sales_order"
end
|
#build_invoice ⇒ Object
abstract to be overriden inside puchase and sales orders
141
142
143
|
# File 'lib/merchant_sidekick/order.rb', line 141
def build_invoice
raise "override in purchase_order or sales_order"
end
|
#enter_approved ⇒ Object
77
|
# File 'lib/merchant_sidekick/order.rb', line 77
def enter_approved; end
|
#enter_canceled ⇒ Object
84
|
# File 'lib/merchant_sidekick/order.rb', line 84
def enter_canceled; end
|
#enter_created ⇒ Object
state transition callbacks, to be overwritten
75
|
# File 'lib/merchant_sidekick/order.rb', line 75
def enter_created; end
|
#enter_pending ⇒ Object
76
|
# File 'lib/merchant_sidekick/order.rb', line 76
def enter_pending; end
|
#enter_received ⇒ Object
80
|
# File 'lib/merchant_sidekick/order.rb', line 80
def enter_received; end
|
#enter_refunded ⇒ Object
83
|
# File 'lib/merchant_sidekick/order.rb', line 83
def enter_refunded; end
|
#enter_returned ⇒ Object
82
|
# File 'lib/merchant_sidekick/order.rb', line 82
def enter_returned; end
|
#enter_returning ⇒ Object
81
|
# File 'lib/merchant_sidekick/order.rb', line 81
def enter_returning; end
|
#enter_shipped ⇒ Object
79
|
# File 'lib/merchant_sidekick/order.rb', line 79
def enter_shipped; end
|
#enter_shipping ⇒ Object
78
|
# File 'lib/merchant_sidekick/order.rb', line 78
def enter_shipping; end
|
#evaluate ⇒ Object
updates the order and all contained line_items after an address has changed or an order item was added or removed. The order can only be evaluated if the created state is active. The order is saved if it is an existing order. Returns true if evaluation happend, false if not.
195
196
197
198
199
200
201
202
|
# File 'lib/merchant_sidekick/order.rb', line 195
def evaluate
if :created == current_state
self.line_items.each(&:evaluate)
self.calculate
return save(false) unless new_record?
end
false
end
|
#exit_approved ⇒ Object
88
|
# File 'lib/merchant_sidekick/order.rb', line 88
def exit_approved; end
|
#exit_canceled ⇒ Object
95
|
# File 'lib/merchant_sidekick/order.rb', line 95
def exit_canceled; end
|
#exit_created ⇒ Object
86
|
# File 'lib/merchant_sidekick/order.rb', line 86
def exit_created; end
|
#exit_pending ⇒ Object
87
|
# File 'lib/merchant_sidekick/order.rb', line 87
def exit_pending; end
|
#exit_received ⇒ Object
91
|
# File 'lib/merchant_sidekick/order.rb', line 91
def exit_received; end
|
#exit_refunded ⇒ Object
94
|
# File 'lib/merchant_sidekick/order.rb', line 94
def exit_refunded; end
|
#exit_returned ⇒ Object
93
|
# File 'lib/merchant_sidekick/order.rb', line 93
def exit_returned; end
|
#exit_returning ⇒ Object
92
|
# File 'lib/merchant_sidekick/order.rb', line 92
def exit_returning; end
|
#exit_shipped ⇒ Object
90
|
# File 'lib/merchant_sidekick/order.rb', line 90
def exit_shipped; end
|
#exit_shipping ⇒ Object
89
|
# File 'lib/merchant_sidekick/order.rb', line 89
def exit_shipping; end
|
#gross_total ⇒ Object
Gross amount including tax
163
164
165
|
# File 'lib/merchant_sidekick/order.rb', line 163
def gross_total
self.gross_amount = self.net_total + self.tax_total
end
|
#guard_approve_payment_from_pending ⇒ Object
99
|
# File 'lib/merchant_sidekick/order.rb', line 99
def guard_approve_payment_from_pending; true; end
|
#guard_cancel_from_created ⇒ Object
107
|
# File 'lib/merchant_sidekick/order.rb', line 107
def guard_cancel_from_created; true; end
|
#guard_cancel_from_pending ⇒ Object
108
|
# File 'lib/merchant_sidekick/order.rb', line 108
def guard_cancel_from_pending; true; end
|
#guard_confirm_reception_from_shipped ⇒ Object
102
|
# File 'lib/merchant_sidekick/order.rb', line 102
def guard_confirm_reception_from_shipped; true; end
|
#guard_confirm_return_from_returning ⇒ Object
104
|
# File 'lib/merchant_sidekick/order.rb', line 104
def guard_confirm_return_from_returning; true; end
|
#guard_confirm_return_from_shipped ⇒ Object
105
|
# File 'lib/merchant_sidekick/order.rb', line 105
def guard_confirm_return_from_shipped; true; end
|
#guard_process_payment_from_created ⇒ Object
event guard callbacks, to be overwritten
98
|
# File 'lib/merchant_sidekick/order.rb', line 98
def guard_process_payment_from_created; true; end
|
#guard_process_shipping_from_approved ⇒ Object
100
|
# File 'lib/merchant_sidekick/order.rb', line 100
def guard_process_shipping_from_approved; true; end
|
#guard_refund_from_returned ⇒ Object
106
|
# File 'lib/merchant_sidekick/order.rb', line 106
def guard_refund_from_returned; true; end
|
#guard_reject_from_received ⇒ Object
103
|
# File 'lib/merchant_sidekick/order.rb', line 103
def guard_reject_from_received; true; end
|
#guard_ship_from_shipping ⇒ Object
101
|
# File 'lib/merchant_sidekick/order.rb', line 101
def guard_ship_from_shipping; true; end
|
#invoice ⇒ Object
abstract overriden in sublcasses returns the invoice instance
136
137
138
|
# File 'lib/merchant_sidekick/order.rb', line 136
def invoice
raise "deprecated as we use has_many :invoices association"
end
|
#items_count ⇒ Object
total number of items purchased
179
180
181
182
183
184
185
186
187
188
189
|
# File 'lib/merchant_sidekick/order.rb', line 179
def items_count
counter = 0
self.line_items.each do |item|
if item.sellable && item.sellable.respond_to?(:quantity)
counter += item.sellable.quantity
else
counter += 1
end
end
counter
end
|
#line_items_count ⇒ Object
is the number of line items stored in the order, though not to be confused by the items_count
174
175
176
|
# File 'lib/merchant_sidekick/order.rb', line 174
def line_items_count
self.line_items.count
end
|
#net_total ⇒ Object
151
152
153
|
# File 'lib/merchant_sidekick/order.rb', line 151
def net_total
self.net_amount = line_items.inject(0.to_money) {|sum,l| sum + l.net_amount }
end
|
#number ⇒ Object
130
131
132
|
# File 'lib/merchant_sidekick/order.rb', line 130
def number
self[:number] ||= Order.generate_unique_id
end
|
#push(an_item_or_sellable) ⇒ Object
adds a line item or sellable to order and updates the order
205
206
207
208
209
210
211
212
213
214
215
|
# File 'lib/merchant_sidekick/order.rb', line 205
def push(an_item_or_sellable)
if !an_item_or_sellable.is_a?(LineItem) && an_item_or_sellable.respond_to?(:price)
li = LineItem.new(:sellable => an_item_or_sellable, :order => self)
elsif an_item_or_sellable.is_a?(LineItem)
li = an_item_or_sellable
end
if li
self.line_items.push(li)
self.evaluate
end
end
|
#tax_total ⇒ Object
Calculates tax and sets the tax_amount attribute It adds tax_amount across all line_items
157
158
159
160
|
# File 'lib/merchant_sidekick/order.rb', line 157
def tax_total
self.tax_amount = line_items.inject(0.to_money) {|sum,l| sum + l.tax_amount }
self.tax_amount
end
|
#total ⇒ Object
Same as gross_total with tax
168
169
170
|
# File 'lib/merchant_sidekick/order.rb', line 168
def total
self.gross_total
end
|