Class: Spree::StockLocation
- Inherits:
-
Base
- Object
- ActiveRecord::Base
- Base
- Spree::StockLocation
show all
- Defined in:
- app/models/spree/stock_location.rb
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
#default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference
Instance Method Details
#backorderable?(variant) ⇒ Boolean
71
72
73
|
# File 'app/models/spree/stock_location.rb', line 71
def backorderable?(variant)
stock_item(variant).try(:backorderable?)
end
|
#count_on_hand(variant) ⇒ Object
67
68
69
|
# File 'app/models/spree/stock_location.rb', line 67
def count_on_hand(variant)
stock_item(variant).try(:count_on_hand)
end
|
#fill_status(variant, quantity) ⇒ Object
99
100
101
102
103
104
105
|
# File 'app/models/spree/stock_location.rb', line 99
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
91
92
93
94
95
96
97
|
# File 'app/models/spree/stock_location.rb', line 91
def move(variant, quantity, originator = nil)
if quantity < 1 && !stock_item(variant)
raise InvalidMovementError.new(Spree.t(: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
32
33
34
|
# File 'app/models/spree/stock_location.rb', line 32
def propagate_variant(variant)
stock_items.create!(variant: variant, backorderable: backorderable_default)
end
|
#restock(variant, quantity, originator = nil) ⇒ Object
75
76
77
|
# File 'app/models/spree/stock_location.rb', line 75
def restock(variant, quantity, originator = nil)
move(variant, quantity, originator)
end
|
#restock_backordered(variant, quantity, _originator = nil) ⇒ Object
79
80
81
82
83
84
85
|
# File 'app/models/spree/stock_location.rb', line 79
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
39
40
41
|
# File 'app/models/spree/stock_location.rb', line 39
def set_up_stock_item(variant)
stock_item(variant) || propagate_variant(variant)
end
|
#state_text ⇒ Object
27
28
29
|
# File 'app/models/spree/stock_location.rb', line 27
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.
48
49
50
|
# File 'app/models/spree/stock_location.rb', line 48
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.
58
59
60
61
62
63
64
65
|
# File 'app/models/spree/stock_location.rb', line 58
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
87
88
89
|
# File 'app/models/spree/stock_location.rb', line 87
def unstock(variant, quantity, originator = nil)
move(variant, -quantity, originator)
end
|