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
page
#default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference
Instance Method Details
#backorderable?(variant) ⇒ Boolean
68
69
70
|
# File 'app/models/spree/stock_location.rb', line 68
def backorderable?(variant)
stock_item(variant).try(:backorderable?)
end
|
#count_on_hand(variant) ⇒ Object
64
65
66
|
# File 'app/models/spree/stock_location.rb', line 64
def count_on_hand(variant)
stock_item(variant).try(:count_on_hand)
end
|
#fill_status(variant, quantity) ⇒ Object
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'app/models/spree/stock_location.rb', line 96
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
88
89
90
91
92
93
94
|
# File 'app/models/spree/stock_location.rb', line 88
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
29
30
31
|
# File 'app/models/spree/stock_location.rb', line 29
def propagate_variant(variant)
self.stock_items.create!(variant: variant, backorderable: self.backorderable_default)
end
|
#restock(variant, quantity, originator = nil) ⇒ Object
72
73
74
|
# File 'app/models/spree/stock_location.rb', line 72
def restock(variant, quantity, originator = nil)
move(variant, quantity, originator)
end
|
#restock_backordered(variant, quantity, originator = nil) ⇒ Object
76
77
78
79
80
81
82
|
# File 'app/models/spree/stock_location.rb', line 76
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
36
37
38
|
# File 'app/models/spree/stock_location.rb', line 36
def set_up_stock_item(variant)
self.stock_item(variant) || propagate_variant(variant)
end
|
#state_text ⇒ Object
24
25
26
|
# File 'app/models/spree/stock_location.rb', line 24
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.
45
46
47
|
# File 'app/models/spree/stock_location.rb', line 45
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.
55
56
57
58
59
60
61
62
|
# File 'app/models/spree/stock_location.rb', line 55
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
84
85
86
|
# File 'app/models/spree/stock_location.rb', line 84
def unstock(variant, quantity, originator = nil)
move(variant, -quantity, originator)
end
|