Class: Spree::StockLocation
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Spree::StockLocation
- Defined in:
- app/models/spree/stock_location.rb
Instance Method Summary collapse
- #backorderable?(variant) ⇒ Boolean
- #count_on_hand(variant) ⇒ Object
- #fill_status(variant, quantity) ⇒ Object
- #move(variant, quantity, originator = nil) ⇒ Object
-
#propagate_variant(variant) ⇒ Object
Wrapper for creating a new stock item respecting the backorderable config.
- #restock(variant, quantity, originator = nil) ⇒ Object
- #restock_backordered(variant, quantity, originator = nil) ⇒ Object
-
#set_up_stock_item(variant) ⇒ Object
Return either an existing stock item or create a new one.
- #state_text ⇒ Object
- #stock_item(variant) ⇒ Object
- #stock_item_or_create(variant) ⇒ Object
- #unstock(variant, quantity, originator = nil) ⇒ Object
Instance Method Details
#backorderable?(variant) ⇒ Boolean
44 45 46 |
# File 'app/models/spree/stock_location.rb', line 44 def backorderable?(variant) stock_item(variant).try(:backorderable?) end |
#count_on_hand(variant) ⇒ Object
40 41 42 |
# File 'app/models/spree/stock_location.rb', line 40 def count_on_hand(variant) stock_item(variant).try(:count_on_hand) end |
#fill_status(variant, quantity) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/models/spree/stock_location.rb', line 69 def fill_status(variant, quantity) if item = stock_item(variant) if item.count_on_hand >= quantity on_hand = quantity backordered = 0 else on_hand = item.count_on_hand on_hand = 0 if on_hand < 0 backordered = item.backorderable? ? (quantity - on_hand) : 0 end [on_hand, backordered] else [0, 0] end end |
#move(variant, quantity, originator = nil) ⇒ Object
64 65 66 67 |
# File 'app/models/spree/stock_location.rb', line 64 def move(variant, quantity, originator = nil) stock_item_or_create(variant).stock_movements.create!(quantity: quantity, originator: originator) end |
#propagate_variant(variant) ⇒ Object
Wrapper for creating a new stock item respecting the backorderable config
21 22 23 |
# File 'app/models/spree/stock_location.rb', line 21 def propagate_variant(variant) self.stock_items.create!(variant: variant, backorderable: self.backorderable_default) end |
#restock(variant, quantity, originator = nil) ⇒ Object
48 49 50 |
# File 'app/models/spree/stock_location.rb', line 48 def restock(variant, quantity, originator = nil) move(variant, quantity, originator) end |
#restock_backordered(variant, quantity, originator = nil) ⇒ Object
52 53 54 55 56 57 58 |
# File 'app/models/spree/stock_location.rb', line 52 def restock_backordered(variant, quantity, originator = nil) item = stock_item_or_create(variant) item.update_columns( count_on_hand: item.count_on_hand + quantity, updated_at: Time.now ) end |
#set_up_stock_item(variant) ⇒ Object
Return either an existing stock item or create a new one. Useful in scenarios where the user might not know whether there is already a stock item for a given variant
28 29 30 |
# File 'app/models/spree/stock_location.rb', line 28 def set_up_stock_item(variant) self.stock_item(variant) || propagate_variant(variant) end |
#state_text ⇒ Object
16 17 18 |
# File 'app/models/spree/stock_location.rb', line 16 def state_text state.try(:abbr) || state.try(:name) || state_name end |
#stock_item(variant) ⇒ Object
32 33 34 |
# File 'app/models/spree/stock_location.rb', line 32 def stock_item(variant) stock_items.where(variant_id: variant).order(:id).first end |
#stock_item_or_create(variant) ⇒ Object
36 37 38 |
# File 'app/models/spree/stock_location.rb', line 36 def stock_item_or_create(variant) stock_item(variant) || stock_items.create(variant: variant) end |
#unstock(variant, quantity, originator = nil) ⇒ Object
60 61 62 |
# File 'app/models/spree/stock_location.rb', line 60 def unstock(variant, quantity, originator = nil) move(variant, -quantity, originator) end |