Class: Spree::StockLocation

Inherits:
Base
  • Object
show all
Defined in:
app/models/spree/stock_location.rb

Instance Method Summary collapse

Methods inherited from Base

page

Methods included from Preferences::Preferable

#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_textObject


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