class Order include SimplyStored::Couch property :state, default: 'placed' # placed, active, delivered, cancelled belongs_to :list belongs_to :user belongs_to :supplier has_many :product_orders, dependent: :destroy #has_many :products, through: :product_orders validates :supplier_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' 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 end