2012-04-16 08:48:01 +02:00
|
|
|
# encoding: utf-8
|
2009-02-06 16:26:35 +01:00
|
|
|
class StockArticle < Article
|
2011-05-27 14:09:01 +02:00
|
|
|
acts_as_paranoid
|
|
|
|
|
2009-02-06 16:26:35 +01:00
|
|
|
has_many :stock_changes
|
|
|
|
|
2011-05-11 12:21:21 +02:00
|
|
|
scope :available, :conditions => "quantity > 0"
|
2009-02-06 16:26:35 +01:00
|
|
|
|
2009-02-12 18:32:20 +01:00
|
|
|
before_destroy :check_quantity
|
|
|
|
|
2009-02-06 16:26:35 +01:00
|
|
|
# Update the quantity of items in stock
|
|
|
|
def update_quantity!
|
|
|
|
update_attribute :quantity, stock_changes.collect(&:quantity).sum
|
|
|
|
end
|
|
|
|
|
|
|
|
# Check for unclosed orders and substract its ordered quantity
|
2012-07-31 17:37:32 +02:00
|
|
|
def quantity_available
|
|
|
|
quantity - OrderArticle.where(article_id: id).
|
|
|
|
joins(:order).where("orders.state = 'open' OR orders.state = 'finished'").sum(:units_to_order)
|
2009-02-06 16:26:35 +01:00
|
|
|
end
|
2009-02-12 18:32:20 +01:00
|
|
|
|
2009-08-04 13:41:28 +02:00
|
|
|
def self.stock_value
|
|
|
|
available.collect { |a| a.quantity * a.gross_price }.sum
|
|
|
|
end
|
2013-01-28 20:46:35 +01:00
|
|
|
|
|
|
|
def self.elements_for_index
|
|
|
|
StockArticle.includes(:supplier, :article_category).
|
|
|
|
order('suppliers.name, article_categories.name, articles.name')
|
|
|
|
end
|
2009-08-04 13:41:28 +02:00
|
|
|
|
2009-02-12 18:32:20 +01:00
|
|
|
protected
|
|
|
|
|
|
|
|
def check_quantity
|
|
|
|
raise "#{name} kann nicht gelöscht werden. Der Lagerbestand ist nicht null." unless quantity == 0
|
|
|
|
end
|
2009-05-17 16:26:31 +02:00
|
|
|
|
|
|
|
# Overwrite Price history of Article. For StockArticles isn't it necessary.
|
|
|
|
def update_price_history
|
|
|
|
true
|
|
|
|
end
|
2009-02-06 16:26:35 +01:00
|
|
|
end
|
2011-05-07 20:50:39 +02:00
|
|
|
|