Implement waiter ordering and improvements

This commit is contained in:
2014-03-24 10:02:57 +01:00
parent 474d5f88c6
commit 6c2427e082
24 changed files with 128 additions and 48 deletions
+31 -23
View File
@@ -17,6 +17,7 @@ class List
belongs_to :supplier
belongs_to :section
has_and_belongs_to_many :users, storing_keys: true
has_and_belongs_to_many :employees, storing_keys: true
attr_protected :supplier_id
@@ -76,6 +77,17 @@ class List
list
end
# Create, a list given a table and a employee
def self.from_table_by_employee table, employee
unless list = table.active_list
list = new table: table, section_id: table.section_id
list.supplier_id = table.supplier_id
list.add_employee employee
list.save
end
list
end
def self.for_supplier(supplier, options = {})
total_entries = database.view(for_supplier_view({startkey: ["#{supplier.id}\u9999"], endkey: [supplier.id], include_docs: false, reduce: true, descending: true}))
options[:total_entries] = total_entries
@@ -142,9 +154,7 @@ class List
def needs_help!
self.needs_help = true
if save
for user_id in user_ids
broadcast_user user_id, 'list_needs_help', id: id
end
broadcast_users 'list_needs_help', id: id
broadcast_supplier(supplier_id, 'list_needs_help', id: id)
end
end
@@ -152,9 +162,7 @@ class List
def is_helped!
self.needs_help = false
if save
for user_id in user_ids
broadcast_user user_id, 'list_helped', id: id
end
broadcast_users 'list_helped', id: id
broadcast_supplier supplier_id, 'list_helped', id: id
end
end
@@ -162,9 +170,7 @@ class List
def needs_payment!
self.needs_payment = true
if save
for user_id in user_ids
broadcast_user user_id, 'list_needs_payment', id: id
end
broadcast_users 'list_needs_payment', id: id
broadcast_supplier supplier_id, 'list_needs_payment', id: id
end
end
@@ -173,9 +179,7 @@ class List
self.is_paid = true
self.paid_at ||= Time.now
if save
for user_id in user_ids
broadcast_user user_id, 'list_is_paid', id: id
end
broadcast_users 'list_is_paid', id: id
broadcast_supplier supplier_id, 'list_is_paid', id: id
end
end
@@ -192,9 +196,7 @@ class List
order.section_id = self.section_id
order.save
end
for user_id in user_ids
broadcast_user user_id, 'list_changed_table', list: as_json, section_title: to_table.section.try(:title), from_table_id: from_table
end
broadcast_users 'list_changed_table', list: as_json, section_title: to_table.section.try(:title), from_table_id: from_table
broadcast_supplier supplier_id, 'list_changed_table', list: as_json, section_title: to_table.section.try(:title), from_table_id: from_table
end
end
@@ -214,7 +216,7 @@ class List
def unlink_user(user)
changed = join_requests.delete(user.id)
changed ||= user_ids.delete(user.id)
changed ||= Array.wrap(user_ids).delete(user.id)
if user.active_list_id == id
user.active_list_id = nil
user.save
@@ -265,10 +267,9 @@ class List
state == 'active'
end
def place_order(user, products)
def place_order(products, user: nil, employee: nil)
return false unless products.any?
return false unless user
order = Order.create list: self, supplier: supplier, user: user, section_id: section_id
order = Order.create list: self, supplier: supplier, user: user, employee: employee, section_id: section_id
return unless order.id
orders_placed_count = supplier.increment_orders_placed_count!
loaded_products = self.class.database.load_document products.keys
@@ -279,16 +280,23 @@ class List
end
set_price
save
for user_id in user_ids
broadcast_user user_id, 'new_order', order: order.with_products_as_json, total_amount: price
broadcast_user user_id, 'orders_placed_count', count: orders_placed_count
end
broadcast_users 'new_order', order: order.with_products_as_json, total_amount: price
broadcast_users 'orders_placed_count', count: orders_placed_count
broadcast_supplier supplier.id, 'list_update', active_model_serializer.new(self).as_json
broadcast_supplier supplier.id, 'new_order', OrderSerializer.new(order)
broadcast_supplier supplier.id, 'orders_placed_count', count: orders_placed_count
order
end
def broadcast_users(message, content = {})
for user_id in Array.wrap(user_ids)
broadcast_user user_id, message, content
end
end
def as_json(*args)
super.merge(id: id, table_number: table_number, has_active_orders: has_active_orders? )
end