Method: Piggybak::LineItem#preprocess_sellable

Defined in:
app/models/piggybak/line_item.rb

#preprocess_sellableObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'app/models/piggybak/line_item.rb', line 43

def preprocess_sellable
  if self.sellable_id.nil?
    self.errors.add(:sellable_id, "Sellable can't be blank")
    return
  end

  sellable = Piggybak::Sellable.where(id: self.sellable_id).first

  return if sellable.nil?

  # Inventory check
  quantity_change = 0
  if self.new_record?
    quantity_change = self.quantity.to_i
  elsif self.changes.keys.include?("quantity") && self.quantity > self.quantity_was
    quantity_change = self.quantity - self.quantity_was
  end
  if sellable.quantity < quantity_change && !sellable.unlimited_inventory
    self.errors.add(:sellable_id, "Insufficient inventory by #{quantity_change - sellable.quantity} unit(s).")
    return
  end

  self.description = sellable.description
  self.unit_price = sellable.price
  self.price = self.unit_price*self.quantity.to_i
end