foodsoft/app/models/group_order.rb

43 lines
1.6 KiB
Ruby
Raw Normal View History

# == Schema Information
# Schema version: 20090120184410
#
# Table name: group_orders
#
# id :integer(4) not null, primary key
# ordergroup_id :integer(4) default(0), not null
# order_id :integer(4) default(0), not null
# price :decimal(8, 2) default(0.0), not null
# lock_version :integer(4) default(0), not null
# updated_on :datetime not null
# updated_by_user_id :integer(4)
2009-01-06 11:49:19 +01:00
#
# A GroupOrder represents an Order placed by an Ordergroup.
2009-01-06 11:49:19 +01:00
class GroupOrder < ActiveRecord::Base
belongs_to :order
belongs_to :ordergroup
2009-01-06 11:49:19 +01:00
has_many :group_order_articles, :dependent => :destroy
has_many :order_articles, :through => :group_order_articles
belongs_to :updated_by, :class_name => "User", :foreign_key => "updated_by_user_id"
validates_presence_of :order_id
validates_presence_of :ordergroup_id
2009-01-06 11:49:19 +01:00
validates_numericality_of :price
validates_uniqueness_of :ordergroup_id, :scope => :order_id # order groups can only order once per order
2009-01-06 11:49:19 +01:00
named_scope :open, lambda { {:conditions => ["order_id IN (?)", Order.open.collect{|o| o.id}]} }
named_scope :finished, lambda { {:conditions => ["order_id IN (?)", Order.finished.collect{|o| o.id}]} }
2009-01-06 11:49:19 +01:00
# Updates the "price" attribute.
# This will be the maximum value of a current order
def update_price!
2009-01-06 11:49:19 +01:00
total = 0
for article in group_order_articles.find(:all, :include => :order_article)
total += article.order_article.article.fc_price * (article.quantity + article.tolerance)
2009-01-06 11:49:19 +01:00
end
update_attribute(:price, total)
2009-01-06 11:49:19 +01:00
end
end