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
76 77 78 |
# File 'app/models/spree/stock_location.rb', line 76 def backorderable?(variant) stock_item(variant).try(:backorderable?) end |
#count_on_hand(variant) ⇒ Object
72 73 74 |
# File 'app/models/spree/stock_location.rb', line 72 def count_on_hand(variant) stock_item(variant).try(:count_on_hand) end |
#fill_status(variant, quantity) ⇒ Object
104 105 106 107 108 109 110 |
# File 'app/models/spree/stock_location.rb', line 104 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
96 97 98 99 100 101 102 |
# File 'app/models/spree/stock_location.rb', line 96 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
37 38 39 |
# File 'app/models/spree/stock_location.rb', line 37 def propagate_variant(variant) stock_items.create!(variant: variant, backorderable: backorderable_default) end |
#restock(variant, quantity, originator = nil) ⇒ Object
80 81 82 |
# File 'app/models/spree/stock_location.rb', line 80 def restock(variant, quantity, originator = nil) move(variant, quantity, originator) end |
#restock_backordered(variant, quantity, _originator = nil) ⇒ Object
84 85 86 87 88 89 90 |
# File 'app/models/spree/stock_location.rb', line 84 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
44 45 46 |
# File 'app/models/spree/stock_location.rb', line 44 def set_up_stock_item(variant) stock_item(variant) || propagate_variant(variant) end |
#state_text ⇒ Object
32 33 34 |
# File 'app/models/spree/stock_location.rb', line 32 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.
53 54 55 |
# File 'app/models/spree/stock_location.rb', line 53 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.
63 64 65 66 67 68 69 70 |
# File 'app/models/spree/stock_location.rb', line 63 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
92 93 94 |
# File 'app/models/spree/stock_location.rb', line 92 def unstock(variant, quantity, originator = nil) move(variant, -quantity, originator) end |