Class: MerchantSidekick::Order

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
AASM
Defined in:
lib/merchant_sidekick/order.rb

Direct Known Subclasses

PurchaseOrder, SalesOrder

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.generate_unique_idObject

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_invoiceObject

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_approvedObject



77
# File 'lib/merchant_sidekick/order.rb', line 77

def enter_approved; end

#enter_canceledObject



84
# File 'lib/merchant_sidekick/order.rb', line 84

def enter_canceled; end

#enter_createdObject

state transition callbacks, to be overwritten



75
# File 'lib/merchant_sidekick/order.rb', line 75

def enter_created; end

#enter_pendingObject



76
# File 'lib/merchant_sidekick/order.rb', line 76

def enter_pending; end

#enter_receivedObject



80
# File 'lib/merchant_sidekick/order.rb', line 80

def enter_received; end

#enter_refundedObject



83
# File 'lib/merchant_sidekick/order.rb', line 83

def enter_refunded; end

#enter_returnedObject



82
# File 'lib/merchant_sidekick/order.rb', line 82

def enter_returned; end

#enter_returningObject



81
# File 'lib/merchant_sidekick/order.rb', line 81

def enter_returning; end

#enter_shippedObject



79
# File 'lib/merchant_sidekick/order.rb', line 79

def enter_shipped; end

#enter_shippingObject



78
# File 'lib/merchant_sidekick/order.rb', line 78

def enter_shipping; end

#evaluateObject

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_approvedObject



88
# File 'lib/merchant_sidekick/order.rb', line 88

def exit_approved; end

#exit_canceledObject



95
# File 'lib/merchant_sidekick/order.rb', line 95

def exit_canceled; end

#exit_createdObject



86
# File 'lib/merchant_sidekick/order.rb', line 86

def exit_created; end

#exit_pendingObject



87
# File 'lib/merchant_sidekick/order.rb', line 87

def exit_pending; end

#exit_receivedObject



91
# File 'lib/merchant_sidekick/order.rb', line 91

def exit_received; end

#exit_refundedObject



94
# File 'lib/merchant_sidekick/order.rb', line 94

def exit_refunded; end

#exit_returnedObject



93
# File 'lib/merchant_sidekick/order.rb', line 93

def exit_returned; end

#exit_returningObject



92
# File 'lib/merchant_sidekick/order.rb', line 92

def exit_returning; end

#exit_shippedObject



90
# File 'lib/merchant_sidekick/order.rb', line 90

def exit_shipped; end

#exit_shippingObject



89
# File 'lib/merchant_sidekick/order.rb', line 89

def exit_shipping; end

#gross_totalObject

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_pendingObject



99
# File 'lib/merchant_sidekick/order.rb', line 99

def guard_approve_payment_from_pending; true; end

#guard_cancel_from_createdObject



107
# File 'lib/merchant_sidekick/order.rb', line 107

def guard_cancel_from_created; true; end

#guard_cancel_from_pendingObject



108
# File 'lib/merchant_sidekick/order.rb', line 108

def guard_cancel_from_pending; true; end

#guard_confirm_reception_from_shippedObject



102
# File 'lib/merchant_sidekick/order.rb', line 102

def guard_confirm_reception_from_shipped; true; end

#guard_confirm_return_from_returningObject



104
# File 'lib/merchant_sidekick/order.rb', line 104

def guard_confirm_return_from_returning; true; end

#guard_confirm_return_from_shippedObject



105
# File 'lib/merchant_sidekick/order.rb', line 105

def guard_confirm_return_from_shipped; true; end

#guard_process_payment_from_createdObject

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_approvedObject



100
# File 'lib/merchant_sidekick/order.rb', line 100

def guard_process_shipping_from_approved; true; end

#guard_refund_from_returnedObject



106
# File 'lib/merchant_sidekick/order.rb', line 106

def guard_refund_from_returned; true; end

#guard_reject_from_receivedObject



103
# File 'lib/merchant_sidekick/order.rb', line 103

def guard_reject_from_received; true; end

#guard_ship_from_shippingObject



101
# File 'lib/merchant_sidekick/order.rb', line 101

def guard_ship_from_shipping; true; end

#invoiceObject

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_countObject

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_countObject

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_totalObject

Net total amount



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

#numberObject



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_totalObject

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

#totalObject

Same as gross_total with tax



168
169
170
# File 'lib/merchant_sidekick/order.rb', line 168

def total
  self.gross_total
end