Class: Spree::Stock::Package
- Inherits:
-
Object
- Object
- Spree::Stock::Package
- Defined in:
- app/models/spree/stock/package.rb
Instance Attribute Summary collapse
-
#contents ⇒ Object
readonly
Returns the value of attribute contents.
-
#shipping_rates ⇒ Object
Returns the value of attribute shipping_rates.
-
#stock_location ⇒ Object
readonly
Returns the value of attribute stock_location.
Instance Method Summary collapse
-
#add(inventory_unit, state = :on_hand) ⇒ Object
Adds an inventory unit to this package.
-
#add_multiple(inventory_units, state = :on_hand) ⇒ Object
Adds multiple inventory units to this package.
-
#backordered ⇒ Array<Spree::Stock::ContentItem>
The content items in this package which are backordered.
-
#currency ⇒ String
The currency of the order this package belongs to.
-
#empty? ⇒ Boolean
True if there are no inventory units in this package.
-
#find_item(inventory_unit, state = nil) ⇒ Object
Find a content item in this package by inventory unit and optionally state.
-
#initialize(stock_location, contents = []) ⇒ Package
constructor
A new instance of Package.
-
#on_hand ⇒ Array<Spree::Stock::ContentItem>
The content items in this package which are on hand.
-
#order ⇒ Spree::Order
The order associated with this package.
-
#quantity(state = nil) ⇒ Fixnum
The number of inventory units in the package, counting only those in the given state if it was specified.
-
#remove(inventory_unit) ⇒ Object
Removes a given inventory unit from this package.
-
#shipping_categories ⇒ Array<Spree::ShippingCategory>
The shipping categories of the variants in this package.
-
#shipping_methods ⇒ Array<Spree::ShippingMethod>
The shipping methods available for this pacakges shipping categories.
-
#to_shipment ⇒ Spree::Shipment
A new shipment containing this package’s inventory units, with the appropriate shipping rates and associated with the correct stock location.
-
#weight ⇒ Float
The summed weight of the contents of this package.
Constructor Details
#initialize(stock_location, contents = []) ⇒ Package
Returns a new instance of Package.
9 10 11 12 13 |
# File 'app/models/spree/stock/package.rb', line 9 def initialize(stock_location, contents=[]) @stock_location = stock_location @contents = contents @shipping_rates = Array.new end |
Instance Attribute Details
#contents ⇒ Object (readonly)
Returns the value of attribute contents.
4 5 6 |
# File 'app/models/spree/stock/package.rb', line 4 def contents @contents end |
#shipping_rates ⇒ Object
Returns the value of attribute shipping_rates.
5 6 7 |
# File 'app/models/spree/stock/package.rb', line 5 def shipping_rates @shipping_rates end |
#stock_location ⇒ Object (readonly)
Returns the value of attribute stock_location.
4 5 6 |
# File 'app/models/spree/stock/package.rb', line 4 def stock_location @stock_location end |
Instance Method Details
#add(inventory_unit, state = :on_hand) ⇒ Object
Adds an inventory unit to this package.
21 22 23 |
# File 'app/models/spree/stock/package.rb', line 21 def add(inventory_unit, state = :on_hand) contents << ContentItem.new(inventory_unit, state) unless find_item(inventory_unit) end |
#add_multiple(inventory_units, state = :on_hand) ⇒ Object
Adds multiple inventory units to this package.
31 32 33 |
# File 'app/models/spree/stock/package.rb', line 31 def add_multiple(inventory_units, state = :on_hand) inventory_units.each { |inventory_unit| add(inventory_unit, state) } end |
#backordered ⇒ Array<Spree::Stock::ContentItem>
Returns the content items in this package which are backordered.
64 65 66 |
# File 'app/models/spree/stock/package.rb', line 64 def backordered contents.select(&:backordered?) end |
#currency ⇒ String
Returns the currency of the order this package belongs to.
98 99 100 |
# File 'app/models/spree/stock/package.rb', line 98 def currency order.currency end |
#empty? ⇒ Boolean
Returns true if there are no inventory units in this package.
93 94 95 |
# File 'app/models/spree/stock/package.rb', line 93 def empty? quantity == 0 end |
#find_item(inventory_unit, state = nil) ⇒ Object
Find a content item in this package by inventory unit and optionally state.
75 76 77 78 79 80 |
# File 'app/models/spree/stock/package.rb', line 75 def find_item(inventory_unit, state = nil) contents.detect do |item| item.inventory_unit == inventory_unit && (!state || item.state.to_s == state.to_s) end end |
#on_hand ⇒ Array<Spree::Stock::ContentItem>
Returns the content items in this package which are on hand.
58 59 60 |
# File 'app/models/spree/stock/package.rb', line 58 def on_hand contents.select(&:on_hand?) end |
#order ⇒ Spree::Order
Returns the order associated with this package.
45 46 47 48 49 |
# File 'app/models/spree/stock/package.rb', line 45 def order # Fix regression that removed package.order. # Find it dynamically through an inventory_unit. contents.detect {|item| !!item.try(:inventory_unit).try(:order) }.try(:inventory_unit).try(:order) end |
#quantity(state = nil) ⇒ Fixnum
Returns the number of inventory units in the package, counting only those in the given state if it was specified.
86 87 88 89 |
# File 'app/models/spree/stock/package.rb', line 86 def quantity(state = nil) matched_contents = state.nil? ? contents : contents.select { |c| c.state.to_s == state.to_s } matched_contents.map(&:quantity).sum end |
#remove(inventory_unit) ⇒ Object
Removes a given inventory unit from this package.
39 40 41 42 |
# File 'app/models/spree/stock/package.rb', line 39 def remove(inventory_unit) item = find_item(inventory_unit) @contents -= [item] if item end |
#shipping_categories ⇒ Array<Spree::ShippingCategory>
Returns the shipping categories of the variants in this package.
104 105 106 |
# File 'app/models/spree/stock/package.rb', line 104 def shipping_categories contents.map { |item| item.variant.shipping_category }.compact.uniq end |
#shipping_methods ⇒ Array<Spree::ShippingMethod>
Returns the shipping methods available for this pacakges shipping categories.
110 111 112 |
# File 'app/models/spree/stock/package.rb', line 110 def shipping_methods shipping_categories.map(&:shipping_methods).reduce(:&).to_a end |
#to_shipment ⇒ Spree::Shipment
Returns a new shipment containing this package’s inventory units, with the appropriate shipping rates and associated with the correct stock location.
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'app/models/spree/stock/package.rb', line 117 def to_shipment # At this point we should only have one content item per inventory unit # across the entire set of inventory units to be shipped, which has # been taken care of by the Prioritizer contents.each { |content_item| content_item.inventory_unit.state = content_item.state.to_s } Spree::Shipment.new( stock_location: stock_location, shipping_rates: shipping_rates, inventory_units: contents.map(&:inventory_unit) ) end |
#weight ⇒ Float
Returns the summed weight of the contents of this package.
52 53 54 |
# File 'app/models/spree/stock/package.rb', line 52 def weight contents.sum(&:weight) end |