Class: Spree::StockLocation
- Inherits:
-
Base
- Object
- ActiveRecord::Base
- Base
- Spree::StockLocation
show all
- 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_id) ⇒ StockItem
Returns an instance of StockItem for the variant id.
-
#stock_item_or_create(variant_or_id) ⇒ 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
page
#clear_preferences, #default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference
Instance Method Details
#backorderable?(variant) ⇒ Boolean
65
66
67
|
# File 'app/models/spree/stock_location.rb', line 65
def backorderable?(variant)
stock_item(variant).try(:backorderable?)
end
|
#count_on_hand(variant) ⇒ Object
61
62
63
|
# File 'app/models/spree/stock_location.rb', line 61
def count_on_hand(variant)
stock_item(variant).try(:count_on_hand)
end
|
#fill_status(variant, quantity) ⇒ Object
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'app/models/spree/stock_location.rb', line 90
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
85
86
87
88
|
# File 'app/models/spree/stock_location.rb', line 85
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
23
24
25
|
# File 'app/models/spree/stock_location.rb', line 23
def propagate_variant(variant)
self.stock_items.create!(variant: variant, backorderable: self.backorderable_default)
end
|
#restock(variant, quantity, originator = nil) ⇒ Object
69
70
71
|
# File 'app/models/spree/stock_location.rb', line 69
def restock(variant, quantity, originator = nil)
move(variant, quantity, originator)
end
|
#restock_backordered(variant, quantity, originator = nil) ⇒ Object
73
74
75
76
77
78
79
|
# File 'app/models/spree/stock_location.rb', line 73
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
30
31
32
|
# File 'app/models/spree/stock_location.rb', line 30
def set_up_stock_item(variant)
self.stock_item(variant) || propagate_variant(variant)
end
|
#state_text ⇒ Object
18
19
20
|
# File 'app/models/spree/stock_location.rb', line 18
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.
39
40
41
|
# File 'app/models/spree/stock_location.rb', line 39
def stock_item(variant_id)
stock_items.where(variant_id: variant_id).order(:id).first
end
|
#stock_item_or_create(variant_or_id) ⇒ 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.
51
52
53
54
55
56
57
58
59
|
# File 'app/models/spree/stock_location.rb', line 51
def stock_item_or_create(variant_or_id)
vid = if variant_or_id.is_a?(Variant)
variant_or_id.id
else
ActiveSupport::Deprecation.warn "Passing a Variant ID is deprecated, and will be removed in Spree 3. Please pass a variant instance instead.", caller
variant_or_id
end
stock_item(vid) || stock_items.create(variant_id: vid)
end
|
#unstock(variant, quantity, originator = nil) ⇒ Object
81
82
83
|
# File 'app/models/spree/stock_location.rb', line 81
def unstock(variant, quantity, originator = nil)
move(variant, -quantity, originator)
end
|