Class: Spree::StockLocation

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

Instance Method Summary collapse

Instance Method Details

#backorderable?(variant) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#count_on_hand(variant) ⇒ Object



40
41
42
# File 'app/models/spree/stock_location.rb', line 40

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

#fill_status(variant, quantity) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'app/models/spree/stock_location.rb', line 69

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



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

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



21
22
23
# File 'app/models/spree/stock_location.rb', line 21

def propagate_variant(variant)
  self.stock_items.create!(variant: variant, backorderable: self.backorderable_default)
end

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



48
49
50
# File 'app/models/spree/stock_location.rb', line 48

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

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



52
53
54
55
56
57
58
# File 'app/models/spree/stock_location.rb', line 52

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



28
29
30
# File 'app/models/spree/stock_location.rb', line 28

def set_up_stock_item(variant)
  self.stock_item(variant) || propagate_variant(variant)
end

#state_textObject



16
17
18
# File 'app/models/spree/stock_location.rb', line 16

def state_text
  state.try(:abbr) || state.try(:name) || state_name
end

#stock_item(variant) ⇒ Object



32
33
34
# File 'app/models/spree/stock_location.rb', line 32

def stock_item(variant)
  stock_items.where(variant_id: variant).order(:id).first
end

#stock_item_or_create(variant) ⇒ Object



36
37
38
# File 'app/models/spree/stock_location.rb', line 36

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

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



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

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