Class: Spree::StockLocation
- Defined in:
- app/models/spree/stock_location.rb
Overview
Records the name and addresses from which stock items are fulfilled in cartons.
Defined Under Namespace
Classes: InvalidMovementError
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_id) ⇒ StockItem
Returns an instance of StockItem for the variant id.
-
#stock_item_or_create(variant) ⇒ StockItem
Attempts to look up StockItem for the variant, and creates one if not found.
- #unstock(variant, quantity, originator = nil) ⇒ Object
Methods inherited from Base
display_includes, #initialize_preference_defaults, page, preference
Methods included from Preferences::Preferable
#admin_form_preference_names, #default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference
Instance Method Details
#backorderable?(variant) ⇒ Boolean
78 79 80 |
# File 'app/models/spree/stock_location.rb', line 78 def backorderable?(variant) stock_item(variant).try(:backorderable?) end |
#count_on_hand(variant) ⇒ Object
74 75 76 |
# File 'app/models/spree/stock_location.rb', line 74 def count_on_hand(variant) stock_item(variant).try(:count_on_hand) end |
#fill_status(variant, quantity) ⇒ Object
106 107 108 109 110 111 112 |
# File 'app/models/spree/stock_location.rb', line 106 def fill_status(variant, quantity) if item = stock_item(variant) item.fill_status(quantity) else [0, 0] end end |
#move(variant, quantity, originator = nil) ⇒ Object
98 99 100 101 102 103 104 |
# File 'app/models/spree/stock_location.rb', line 98 def move(variant, quantity, originator = nil) if quantity < 1 && !stock_item(variant) raise InvalidMovementError.new(I18n.t('spree.negative_movement_absent_item')) end 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
39 40 41 |
# File 'app/models/spree/stock_location.rb', line 39 def propagate_variant(variant) stock_items.create!(variant: variant, backorderable: backorderable_default) end |
#restock(variant, quantity, originator = nil) ⇒ Object
82 83 84 |
# File 'app/models/spree/stock_location.rb', line 82 def restock(variant, quantity, originator = nil) move(variant, quantity, originator) end |
#restock_backordered(variant, quantity, _originator = nil) ⇒ Object
86 87 88 89 90 91 92 |
# File 'app/models/spree/stock_location.rb', line 86 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.current ) 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
46 47 48 |
# File 'app/models/spree/stock_location.rb', line 46 def set_up_stock_item(variant) stock_item(variant) || propagate_variant(variant) end |
#state_text ⇒ Object
34 35 36 |
# File 'app/models/spree/stock_location.rb', line 34 def state_text state.try(:abbr) || state.try(:name) || state_name end |
#stock_item(variant_id) ⇒ StockItem
Returns an instance of StockItem for the variant id.
55 56 57 |
# File 'app/models/spree/stock_location.rb', line 55 def stock_item(variant_id) stock_items.where(variant_id: variant_id).order(:id).first end |
#stock_item_or_create(variant) ⇒ StockItem
Attempts to look up StockItem for the variant, and creates one if not found. This method accepts an id or instance of the variant since it is used in multiple ways. Other methods in this model attempt to pass a variant, but controller actions can pass just the variant id as a parameter.
65 66 67 68 69 70 71 72 |
# File 'app/models/spree/stock_location.rb', line 65 def stock_item_or_create(variant) vid = if variant.is_a?(Variant) variant.id else variant end stock_item(vid) || stock_items.create(variant_id: vid) end |
#unstock(variant, quantity, originator = nil) ⇒ Object
94 95 96 |
# File 'app/models/spree/stock_location.rb', line 94 def unstock(variant, quantity, originator = nil) move(variant, -quantity, originator) end |