class Order include SimplyStored::Couch property :state, default: 'placed' # placed, active, delivered, cancelled, closed belongs_to :list belongs_to :user belongs_to :supplier belongs_to :section has_many :product_orders, dependent: :destroy #has_many :products, through: :product_orders validates :supplier_id, presence: true validates :user_id, presence: true view :active_for_supplier_view, type: :custom, map_function: %[function(doc){ if(doc.ruby_class == 'Order' && (doc.state == 'placed' || doc.state == 'active')){ emit(doc.supplier_id, 1); } }], reduce_function: '_sum' view :by_supplier_id_and_id, key: [:supplier_id, :_id] def self.active_for_supplier(supplier_id) database.view(active_for_supplier_view(key: supplier_id, reduce: false, include_docs: true)) end def table_number list.table.number end alias table_nr table_number def placed? state == 'placed' end def active? state == 'active' end def is_being_processed! self.state = 'active' save end def is_delivered! self.state = 'delivered' save end def close! self.state = 'closed' if placed? || active? save end end