Implement waiter ordering and improvements
This commit is contained in:
+31
-23
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user