Class: Spree::Stock::Coordinator
- Inherits:
-
Object
- Object
- Spree::Stock::Coordinator
- Defined in:
- app/models/spree/stock/coordinator.rb
Instance Attribute Summary collapse
-
#inventory_units ⇒ Object
readonly
Returns the value of attribute inventory_units.
-
#order ⇒ Object
readonly
Returns the value of attribute order.
Instance Method Summary collapse
-
#build_packages(packages = Array.new) ⇒ Object
Build packages as per stock location.
-
#initialize(order, inventory_units = nil) ⇒ Coordinator
constructor
A new instance of Coordinator.
- #packages ⇒ Object
- #shipments ⇒ Object
Constructor Details
#initialize(order, inventory_units = nil) ⇒ Coordinator
Returns a new instance of Coordinator.
6 7 8 9 |
# File 'app/models/spree/stock/coordinator.rb', line 6 def initialize(order, inventory_units = nil) @order = order @inventory_units = inventory_units || InventoryUnitBuilder.new(order).units end |
Instance Attribute Details
#inventory_units ⇒ Object (readonly)
Returns the value of attribute inventory_units.
4 5 6 |
# File 'app/models/spree/stock/coordinator.rb', line 4 def inventory_units @inventory_units end |
#order ⇒ Object (readonly)
Returns the value of attribute order.
4 5 6 |
# File 'app/models/spree/stock/coordinator.rb', line 4 def order @order end |
Instance Method Details
#build_packages(packages = Array.new) ⇒ Object
Build packages as per stock location
It needs to check whether each stock location holds at least one stock item for the order. In case none is found it wouldn’t make any sense to build a package because it would be empty. Plus we avoid errors down the stack because it would assume the stock location has stock items for the given order
Returns an array of Package instances
32 33 34 35 36 37 38 39 40 |
# File 'app/models/spree/stock/coordinator.rb', line 32 def build_packages(packages = Array.new) StockLocation.active.each do |stock_location| next unless stock_location.stock_items.where(:variant_id => inventory_units.map(&:variant_id).uniq).exists? packer = build_packer(stock_location, inventory_units) packages += packer.packages end packages end |
#packages ⇒ Object
17 18 19 20 21 |
# File 'app/models/spree/stock/coordinator.rb', line 17 def packages packages = build_packages packages = prioritize_packages(packages) packages = estimate_packages(packages) end |
#shipments ⇒ Object
11 12 13 14 15 |
# File 'app/models/spree/stock/coordinator.rb', line 11 def shipments packages.map do |package| package.to_shipment.tap { |s| s.address = order.ship_address } end end |