data_host = ''
window.Quser=
handle_active_list: (callback) ->
$.get(data_host + '/user/list_info.json', (res) ->
if !res.list_active
window.location = '/user?list_closed=true'
return
window.active_list = res
callback.call() if callback
Quser.handle_active_list_default_actions(res)
)
handle_active_list_default_actions: (response)->
response ||= {}
if response.table_number
$('.table-number').text(response.table_number)
if response.supplier_name
$('.supplier-name').text(response.supplier_name)
Quser.list_needs_payment_default_action(response)
Quser.list_needs_help_default_action(response)
# join_request_active is to ensure that there are no more modals loaded when one is still active
# console.log('join_request_active=' + window.join_request_active)
if !window.join_request_active && response.join_requests && response.join_requests.length
window.join_request_active = true
for join_request in response.join_requests
wrapper = $('
')
join_callback = ( (request)->
->
$.post(data_host + '/user/approve_join_request', {user_id: request.user_id}, -> window.join_request_active = false; wrapper.modal('hide') )
)(join_request)
reject_callback = ( (request)->
->
$.post(data_host + '/user/reject_join_request', {user_id: request.user_id}, -> window.join_request_active = false; wrapper.modal('hide' ))
)(join_request)
header = $('')
.append('× ')
.append('Join request ').appendTo(wrapper)
body = $('
')
body.append(join_request.user_email + ' wants to join the table')
body.appendTo(wrapper)
footer = $('')
.append($('Reject ').click(reject_callback))
.append($('Approve ').click(join_callback))
.appendTo(wrapper)
wrapper.modal()
list_needs_help_default_action: (response)->
response ||= window.active_list
needs_help_container = $('#list-needs-help-button')
if needs_help_container.length
if response.needs_help
needs_help_container.data('needs-help', true)
needs_help_container.addClass('active')
else
needs_help_container.data('needs-help', false)
needs_help_container.removeClass('active')
unless needs_help_container.data('click-initialized')
needs_help_container.click( ->
if $(this).data('needs-help')
Qwaiter.alert(t('list_needs_help.help_is_on_its_way'))
else
Qwaiter.confirm(
title: t('list_needs_help.title')
content: t('list_needs_help.content')
ok: Quser.list_needs_help
)
)
needs_help_container.data('click-initialized', true)
list_needs_help: ->
return unless window.active_list && !window.active_list.needs_help
$.post(data_host + '/user/needs_help.json', (res) -> window.active_list = res; Quser.list_needs_help_default_action(res))
list_needs_payment_default_action: (response)->
response ||= window.active_list
needs_payment_container = $('#list-needs-payment-button')
if needs_payment_container.length
if response.needs_payment
needs_payment_container.data('needs-payment', true)
needs_payment_container.addClass('active')
else
needs_payment_container.data('needs-payment', false)
needs_payment_container.removeClass('active')
unless needs_payment_container.data('click-initialized')
needs_payment_container.click( ->
if $(this).data('needs-payment')
Qwaiter.alert(t('list_needs_payment.payment_already_requested'))
else
Qwaiter.confirm(
title: t('list_needs_payment.title')
content: t('list_needs_payment.content')
ok: Quser.list_needs_payment
)
)
needs_payment_container.data('click-initialized', true)
list_needs_payment: ->
return unless window.active_list && !window.active_list.needs_payment
$.post(data_host + '/user/list_needs_payment.json', (res) -> window.active_list = res; Quser.list_needs_payment_default_action(res))
load_active_list: () ->
$.get(data_host + '/user/active_list.json', (res) ->
window.active_list = res
unless res.list_active
window.location = '/user/list_history/'+res._id + '?list_closed=true'
return
Quser.handle_active_list_default_actions(res)
body = $('#active-list-table tbody')
foot = $('#active-list-table tfoot')
Quser.build_list_table(body, foot, res)
)
load_history_list: (list_id) ->
$.get(data_host + '/user/list_history/'+list_id+'.json', (res) ->
body = $('#history-list-table tbody')
foot = $('#history-list-table tfoot')
Quser.build_list_table(body, foot, res)
)
build_list_table: (body, foot, res) ->
body.find('tr').remove()
foot.find('tr').remove()
if !res.orders && !res.orders.length
alert('No orders in list')
return
for order in res.orders
order_txts = []
row = $(' ').appendTo(body)
row.addClass(order.state)
#if(order.state == 'placed') row.addClass('info');
#if(order.state == 'delivered') row.addClass('success');
row.addClass('error') if order.state == 'cancelled'
for product in order.products
order_txts.push(product.name + ' (' + product['number'] + ')')
row.append($(' ').text(order_txts.join(', ')))
row.append($(' ').html(currency(order.total_amount)))
foot.append(''+currency(res.total_amount)+' ')
order_selected_products: (h)->
return if $.isEmptyObject(window.active_products_list)
h ||= {}
for product_id, info of window.active_products_list
h['products['+product_id+']'] = info.number
$.post(data_host + '/user/order_selected_products', h, ((res) -> Quser.handle_response(res)), 'json')
handle_response: (res) ->
if(typeof(res) == 'string')
return unless res.length
if res[0] == '{'
res = JSON.parse(res)
else
eval(res)
return
window.location = '/user' if res['message'] && !res['ok']
window.location = res.location || '/user/list_products' if res['ok']
build_product_list: ->
table = $('#active-order-table')
tbody = table.find('tbody')
tbody = $(' ').appendTo(table) unless tbody.length
tbody.find('tr').remove()
total = 0.0
for product_id, info of window.active_products_list
total += info.product.price * info.number
row = $(' ').attr('id', 'active-order-row-'+product_id).appendTo(tbody)
row.append(''+info.product.name+' ')
row.append(''+info.number+' ')
row.append(''+currency(info.product.price * info.number)+' ')
x_btn = $('x ').click(-> delete(window.active_products_list[product_id]) && Quser.build_product_list() )
row.append($(' ').append(x_btn))
$('#active-order-total').html(currency(total))
table.show()
load_active_list_products: ->
Quser.populate_products_table('/user/list_products.json', true)
load_table_products: (table_id, occupied)->
Quser.populate_products_table('/user/list_products_for_table.json?table_id='+table_id, !occupied)
populate_products_table: (src, include_order_buttons)->
$.get(data_host + src, (res) ->
body = $('#products-table tbody')
if res.table_number
$('.table-number').text(res.table_number)
delete(res['table_number'])
if res.supplier_name
$('.supplier-name').text(res.supplier_name)
delete(res['supplier_name'])
body.find('tr').remove()
for category, products of res
body.append(''+category+' ')
for product in products
row = $(' ')
row.append(''+product.name+' ')
if include_order_buttons
button = $('Add ')
callback = ((prod) ->
->
product_count_holder = $('#order-product-count-'+prod._id)
count = parseInt(product_count_holder.text())
product_count_holder.text(1)
Quser.add_product(prod, count)
)(product)
button.click(callback)
order_product_count = $('1 ')
order_count_minus = $('- ')
order_count_minus.click(->
val_holder = $(this).siblings('.order-product-count')
val = parseInt(val_holder.text())
val_holder.text(val - 1) if val > 1
)
order_count_plus = $('+ ')
order_count_plus.click(->
val_holder = $(this).siblings('.order-product-count')
val = parseInt(val_holder.text())
val_holder.text(val + 1)
)
row.append($(' ').append(order_count_minus).append(' ').append(order_product_count).append(' ').append(order_count_plus))
row.append(''+currency(product.price)+' ')
row.append($(' ').append(button)) if include_order_buttons
body.append(row)
)
actions_for_table: (table)->
table = JSON.parse(table) if typeof(table) == 'string'
$.get(data_host + '/user/table_info.json?table_id='+table.table_id, (res)->
if res.current_table_id
if res.other_supplier
redirect_to 'user_root', {message: 'table_is_from_other_supplier'}
else if res.current_table_id == table.table_id
#nothing has changed, show product list
redirect_to 'list_products'
else if res.current_table_id != table.table_id
if res.occupied
redirect_to 'user_root', {message: 'table_is_occupied'}
else if res.reserved
redirect_to 'user_root', {message: 'table_is_reserved'}
else if table.closed
redirect_to 'user_root', {message: 'table_is_closed'}
else if res.supplier_closed
redirect_to 'user_root', {message: 'supplier_is_closed'}
else
#TODO Offer to move table
Qwaiter.confirm(
ok: ->
$.post(data_host + '/user/move_table', {table_id: table.table_id}, (res2)->
if res2.occupied
alert('Cannot move to occupied table')
else
redirect_to 'list_products', {message: 'moved_to_another_table'}
)
cancel: ->
redirect_to 'list_products'
title: t('confirmations.move_to_another_table_title')
content: t('confirmations.move_to_another_table')
)
else
if res.occupied
redirect_to 'join_occupied_table', {table_id: table.table_id}
else if res.supplier_closed
redirect_to 'user_root', {message: 'supplier_is_closed'}
else
#$.post(data_host + '/user/create_list.json', {table_id: table.table_id}, (res)-> Quser.handle_response(res))
redirect_to 'list_products_for_table', {table_id: table.table_id}
, 'json')
join_occupied_table: (table_id) ->
$('.form-actions').remove()
cont = $('#join-occupied-table-progress-container')
cont.html('')
cont.append $(' ')
cont.append $('Waiting for approval of the person on this table
')
$.post(data_host + '/user/join_occupied_table', {table_id: table_id})
setInterval('Quser.check_if_can_join_occupied_table("'+table_id+'")', 7500)
check_if_can_join_occupied_table: (table_id)->
$.post(data_host + '/user/check_table_join_status', {table_id: table_id}, (res) ->
res ||= {}
if res.approved
redirect_to 'list_products'
else if res.waiting
# do nothing, keep waiting....
else
redirect_to 'user_root', {message: 'join_request_rejected'}
)
add_product: (product, count) ->
count ||= 1
window.active_products_list = {} unless window.active_products_list
window.active_products_list[product._id] = {product: product, number: 0} unless window.active_products_list[product._id]
window.active_products_list[product._id].number += count
Quser.build_product_list()
clear_selected_products: ->
window.active_products_list = {}
$('#active-order-table').hide()