54 lines
1.2 KiB
Ruby
54 lines
1.2 KiB
Ruby
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
|