forked from spree/spree
/
shipment.rb
48 lines (41 loc) · 1.35 KB
/
shipment.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class Shipment < ActiveRecord::Base
belongs_to :order
belongs_to :shipping_method
belongs_to :address
before_create :generate_shipment_number
# after_save :recalculate_tax
after_save :transition_order
attr_accessor :special_instructions
accepts_nested_attributes_for :address
def shipped?
self.shipped_at
end
def shipped=(value)
return unless value == "1" && shipped_at.nil?
self.shipped_at = Time.now
end
private
def generate_shipment_number
record = true
while record
random = Array.new(11){rand(9)}.join
record = Shipment.find(:first, :conditions => ["number = ?", random])
end
self.number = random
end
def transition_order
# transition order to shipped if all shipments have been shipped
return unless shipped_at_changed?
order.shipments.each do |shipment|
return unless shipment.shipped?
end
current_user_session = UserSession.find
current_user = current_user_session.user if current_user_session
order.ship!
order.state_events.create(:name => I18n.t('ship'), :user => current_user, :previous_state => order.state_was)
end
# def recalculate_tax
# return unless order && order.respond_to?(:calculate_tax)
# order.update_attribute("tax_amount", order.calculate_tax)
# end
end