Class: Spree::StockLocation

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

Instance Method Summary collapse

Methods inherited from Base

belongs_to_required_by_default, page, spree_base_scopes

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

Returns:

  • (Boolean)


63
64
65
# File 'app/models/spree/stock_location.rb', line 63

def backorderable?(variant)
  stock_item(variant).try(:backorderable?)
end

#count_on_hand(variant) ⇒ Object



59
60
61
# File 'app/models/spree/stock_location.rb', line 59

def count_on_hand(variant)
  stock_item(variant).try(:count_on_hand)
end

#fill_status(variant, quantity) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/models/spree/stock_location.rb', line 88

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



83
84
85
86
# File 'app/models/spree/stock_location.rb', line 83

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)
  stock_items.create!(variant: variant, backorderable: backorderable_default)
end

#restock(variant, quantity, originator = nil) ⇒ Object



67
68
69
# File 'app/models/spree/stock_location.rb', line 67

def restock(variant, quantity, originator = nil)
  move(variant, quantity, originator)
end

#restock_backordered(variant, quantity, _originator = nil) ⇒ Object



71
72
73
74
75
76
77
# File 'app/models/spree/stock_location.rb', line 71

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



30
31
32
# File 'app/models/spree/stock_location.rb', line 30

def set_up_stock_item(variant)
  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.

Parameters:

  • variant_id (String)

    The id of a variant.

Returns:

  • (StockItem)

    Corresponding StockItem for the StockLocation’s variant.



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) ⇒ StockItem

Attempts to look up StockItem for the variant, and creates one if not found. This method accepts an instance of the variant. Other methods in this model attempt to pass a variant, but controller actions can pass just the variant id as a parameter.

Parameters:

  • variant (Variant)

    Variant instance.

Returns:

  • (StockItem)

    Corresponding StockItem for the StockLocation’s variant.



55
56
57
# File 'app/models/spree/stock_location.rb', line 55

def stock_item_or_create(variant)
  stock_item(variant) || stock_items.create(variant_id: variant.id)
end

#stocks?(variant) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'app/models/spree/stock_location.rb', line 43

def stocks?(variant)
  stock_items.exists?(variant: variant)
end

#unstock(variant, quantity, originator = nil) ⇒ Object



79
80
81
# File 'app/models/spree/stock_location.rb', line 79

def unstock(variant, quantity, originator = nil)
  move(variant, -quantity, originator)
end