Class: Shipment

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/shipment.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#special_instructionsObject

Returns the value of attribute special_instructions.



13
14
15
# File 'app/models/shipment.rb', line 13

def special_instructions
  @special_instructions
end

Instance Method Details

#costObject

The adjustment amount associated with this shipment (if any.) Returns only the first adjustment to match the shipment but there should never really be more than one.



39
40
41
# File 'app/models/shipment.rb', line 39

def cost
  adjustment ? adjustment.amount : 0
end

#editable_by?(user) ⇒ Boolean

Returns:

  • (Boolean)


58
59
60
# File 'app/models/shipment.rb', line 58

def editable_by?(user)
  !shipped?
end

#line_itemsObject



69
70
71
72
73
74
75
# File 'app/models/shipment.rb', line 69

def line_items
  if order.complete? and Spree::Config[:track_inventory_levels]
    order.line_items.select {|li| inventory_units.map(&:variant_id).include?(li.variant_id)}
  else
    order.line_items
  end
end

#manifestObject



62
63
64
65
66
# File 'app/models/shipment.rb', line 62

def manifest
  inventory_units.group_by(&:variant).map do |i|
    OpenStruct.new(:variant => i.first, :quantity => i.last.length)
  end
end

#shipped=(value) ⇒ Object



32
33
34
35
# File 'app/models/shipment.rb', line 32

def shipped=(value)
  return unless value == "1" && shipped_at.nil?
  self.shipped_at = Time.now
end

#to_paramObject



26
27
28
29
30
# File 'app/models/shipment.rb', line 26

def to_param
  self.number if self.number
  generate_shipment_number unless self.number
  self.number.parameterize.to_s.upcase
end

#update!(order) ⇒ Object

Updates various aspects of the Shipment while bypassing any callbacks. Note that this method takes an explicit reference to the Order object. This is necessary because the association actually has a stale (and unsaved) copy of the Order and so it will not yield the correct results.



80
81
82
83
84
85
# File 'app/models/shipment.rb', line 80

def update!(order)
  old_state = self.state
  new_state = determine_state(order)
  update_attribute_without_callbacks "state", determine_state(order)
  after_ship if new_state == 'shipped' and old_state != 'shipped'
end