Class: Spree::StockTransfer

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

Defined Under Namespace

Classes: InvalidTransferMovement

Instance Method Summary collapse

Methods inherited from Base

page

Methods included from Preferences::Preferable

#default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference

Instance Method Details

#close(closed_by) ⇒ Object



90
91
92
93
94
95
96
97
# File 'app/models/spree/stock_transfer.rb', line 90

def close(closed_by)
  if receivable?
    self.update_attributes({ closed_at: Time.now, closed_by: closed_by })
  else
    errors.add(:base, Spree.t(:stock_transfer_must_be_receivable))
    false
  end
end

#closed?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'app/models/spree/stock_transfer.rb', line 31

def closed?
  closed_at.present?
end

#destination_movementsObject



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

def destination_movements
  stock_movements.joins(:stock_item)
    .where('spree_stock_items.stock_location_id' => destination_location_id)
end

#expected_item_countObject



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

def expected_item_count
  transfer_items.sum(:expected_quantity)
end

#finalizable?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'app/models/spree/stock_transfer.rb', line 39

def finalizable?
  !finalized? && !shipped? && !closed?
end

#finalize(finalized_by) ⇒ Object



69
70
71
72
73
74
75
76
# File 'app/models/spree/stock_transfer.rb', line 69

def finalize(finalized_by)
  if finalizable?
    self.update_attributes({ finalized_at: Time.now, finalized_by: finalized_by })
  else
    errors.add(:base, Spree.t(:stock_transfer_cannot_be_finalized))
    false
  end
end

#finalized?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'app/models/spree/stock_transfer.rb', line 27

def finalized?
  finalized_at.present?
end

#receivable?Boolean

Returns:

  • (Boolean)


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

def receivable?
  finalized? && shipped? && !closed?
end

#received_item_countObject



51
52
53
# File 'app/models/spree/stock_transfer.rb', line 51

def received_item_count
  transfer_items.sum(:received_quantity)
end

#ship(tracking_number: nil, shipped_at: nil) ⇒ Object



47
48
49
# File 'app/models/spree/stock_transfer.rb', line 47

def ship(tracking_number: nil, shipped_at: nil)
  update_attributes!(tracking_number: tracking_number, shipped_at: shipped_at)
end

#shipped?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'app/models/spree/stock_transfer.rb', line 35

def shipped?
  shipped_at.present?
end

#source_movementsObject



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

def source_movements
  stock_movements.joins(:stock_item)
    .where('spree_stock_items.stock_location_id' => source_location_id)
end

#to_paramObject



23
24
25
# File 'app/models/spree/stock_transfer.rb', line 23

def to_param
  number
end

#transferObject



78
79
80
81
82
83
84
85
86
87
88
# File 'app/models/spree/stock_transfer.rb', line 78

def transfer
  transaction do
    transfer_items.each do |item|
      raise InvalidTransferMovement unless item.valid?
      source_location.unstock(item.variant, item.expected_quantity, self)
    end
  end
rescue InvalidTransferMovement
  errors.add(:base, Spree.t(:not_enough_stock))
  false
end