224 lines
10 KiB
CoffeeScript
224 lines
10 KiB
CoffeeScript
root = exports ? this
|
||
root.Qrammer =
|
||
alert: (msg) ->
|
||
alert(msg)
|
||
confirm: (callback, content) ->
|
||
content ||= 'Are you sure?'
|
||
wrapper = $('<div class="modal"></div>')
|
||
callback_wrapper = ->
|
||
wrapper.modal('hide')
|
||
callback()
|
||
header = $('<div class="modal-header"></div>')
|
||
.append('<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>')
|
||
.append('<h3>Confirm</h3>').appendTo(wrapper)
|
||
body = $('<div class="modal-body"></div>').append('<p>'+content+'</p>').appendTo(wrapper)
|
||
footer = $('<div class="modal-footer"></div>')
|
||
.append($('<a href="#" class="btn">Close</a>').click(-> wrapper.modal('hide')))
|
||
.append($('<a href="#" class="btn btn-primary">Yes</a>').click(callback_wrapper))
|
||
.appendTo(wrapper)
|
||
wrapper.modal()
|
||
currency: (num) ->
|
||
num = 0.0 if isNaN(num) || num == '' || num == null
|
||
'€ ' + parseFloat(num).toFixed(2)
|
||
add_product: (product) ->
|
||
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 += 1
|
||
Qrammer.build_product_list()
|
||
build_product_list: ->
|
||
table = $('#active-order-table')
|
||
tbody = table.find('tbody')
|
||
tbody = $('<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 = $('<tr></tr>').attr('id', 'active-order-row-'+product_id).appendTo(tbody)
|
||
row.append('<td>'+info.product.name+'</td>')
|
||
row.append('<td>'+info.number+'</td>')
|
||
row.append('<td class="currency">'+Qrammer.currency(info.product.price * info.number)+'</td>')
|
||
x_btn = $('<button class="btn btn-warning btn-mini">x</button>').click(-> delete(window.active_products_list[product_id]) && Qrammer.build_product_list() )
|
||
row.append($('<td></td>').append(x_btn))
|
||
$('#active-order-total').html(Qrammer.currency(total))
|
||
table.show()
|
||
clear_active_list: ->
|
||
window.active_products_list = {}
|
||
$('#active-order-table').hide()
|
||
order_active_products_list: (post_uri)->
|
||
h = {list_id: active_list_id}
|
||
for product_id, info of window.active_products_list
|
||
h['products['+product_id+']'] = info.number
|
||
$.post(post_uri, h, ((res) -> Qrammer.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 = '/' if res['message'] && !res['ok']
|
||
window.location = '/view_active_list' if res['ok']
|
||
load_active_orders: (supplier_id) ->
|
||
$.get('/suppliers/'+supplier_id+'/active_orders.json', (res) ->
|
||
body = $('#active-orders-table tbody')
|
||
body.find('tr').remove()
|
||
foot = $('#active-orders-table tfoot')
|
||
if(!res.orders && !res.orders.length)
|
||
alert('No orders in list');
|
||
return;
|
||
for order in res.orders
|
||
order_txts = []
|
||
row = $('<tr></tr>').appendTo(body)
|
||
process_btn = $('<button class="btn btn-success">In process!</button>')
|
||
process_callback = ( (ord) ->
|
||
->
|
||
my_btn = $(this)
|
||
$.post('/orders/'+ord.id+'/is_being_processed', {}, (res)-> my_btn.remove())
|
||
)(order)
|
||
process_btn.click(process_callback)
|
||
|
||
delivered_btn = $('<button class="btn btn-inverse">Is delivered!</button>')
|
||
delivered_callback = ( (ord, r) ->
|
||
->
|
||
my_btn = $(this)
|
||
$.post('/orders/'+ord.id+'/is_delivered', {}, (res)-> r.slideUp('slow'))
|
||
)(order, row)
|
||
delivered_btn.click(delivered_callback)
|
||
for product in order.products
|
||
order_txts.push(product.name + ' (' + product['number'] + ')')
|
||
row.append($('<td></td>').text(order_txts.join(', ')))
|
||
row.append($('<td class="numeric"></td>').text(order.table_number))
|
||
row.append($('<td class="currency"></td>').html(Qrammer.currency(order.total_amount)))
|
||
td_buttons = $('<td class="actions"></td>')
|
||
td_buttons.append(process_btn).append(' ') if order.state == 'placed'
|
||
td_buttons.append(delivered_btn)
|
||
row.append(td_buttons)
|
||
#foot.append('<tr><td></td><td class="currency"><strong>'+Qrammer.currency(res.total_amount)+'</strong></td></tr>');
|
||
)
|
||
|
||
handle_active_user_list: (callback) ->
|
||
$.get('/user_list_info.json', (res) ->
|
||
if !res.list_active
|
||
window.location = '/phone_home?list_closed=true'
|
||
return
|
||
window.active_list = res
|
||
callback.call() if callback
|
||
Qrammer.handle_active_user_list_default_actions()
|
||
)
|
||
handle_active_user_list_default_actions: ->
|
||
Qrammer.list_needs_payment_default_action()
|
||
Qrammer.list_needs_help_default_action()
|
||
list_needs_help_default_action: ->
|
||
needs_help_container = $('#list-needs-help-button')
|
||
if needs_help_container.length
|
||
if window.active_list.needs_help
|
||
needs_help_container.html('<i class="icon-hand-up"></i>')
|
||
else
|
||
needs_help_container.html($('<button class="btn btn-info">I have a question</button>').click(Qrammer.list_needs_help)) #TODO TEXT
|
||
list_needs_help: ->
|
||
return unless window.active_list && !window.active_list.needs_help
|
||
$.post('/active_user_list_needs_help.json', (res) -> window.active_list = res; Qrammer.list_needs_help_default_action())
|
||
list_needs_payment_default_action: ->
|
||
needs_payment_container = $('#list-needs-payment-button')
|
||
if needs_payment_container.length
|
||
if window.active_list.needs_payment
|
||
needs_payment_container.html('<i class="icon-check"></i>')
|
||
else
|
||
needs_payment_container.html($('<button class="btn btn-warning">Check please</button>').click(Qrammer.list_needs_payment)) #TODO TEXT
|
||
list_needs_payment: ->
|
||
return unless window.active_list && !window.active_list.needs_payment
|
||
$.post('/active_user_list_needs_payment.json', (res) -> window.active_list = res; Qrammer.list_needs_payment_default_action())
|
||
|
||
load_active_lists: (supplier_id) ->
|
||
$.get('/suppliers/'+supplier_id+'/active_lists.json', (res) ->
|
||
body = $('#active-lists-table tbody')
|
||
body.find('tr').remove()
|
||
foot = $('#active-lists-table tfoot')
|
||
for list in res.lists
|
||
order_txts = []
|
||
row = $('<tr></tr>').appendTo(body)
|
||
close_btn = $('<button class="btn btn-warning">Close!</button>')
|
||
close_callback = ( (lst, r) ->
|
||
->
|
||
my_btn = $(this)
|
||
$.post('/lists/'+lst._id+'/is_closed', {}, (res)-> r.slideUp('slow'))
|
||
)(list, row)
|
||
close_btn.click(close_callback)
|
||
|
||
needs_help_btn = $('<button class="btn btn-info">Question answered!</button>')
|
||
needs_help_callback = ( (lst, r) ->
|
||
->
|
||
my_btn = $(this)
|
||
$.post('/lists/'+lst._id+'/is_helped', {}, (res)-> my_btn.remove() )
|
||
)(list, row)
|
||
needs_help_btn.click(needs_help_callback)
|
||
|
||
|
||
icons_td = $('<td class="status-icons"></td>').appendTo(row)
|
||
icons_td.append('<i class="icon-hand-up"></i>').append(' ') if list.needs_help # or icon-bell
|
||
icons_td.append('<i class="icon-check"></i>') if list.needs_payment
|
||
|
||
row.append($('<td></td>').text(list.table_number))
|
||
row.append($('<td class="currency"></td>').html(Qrammer.currency(list.total_amount)))
|
||
td_buttons = $('<td class="actions"></td>')
|
||
td_buttons.append(needs_help_btn).append(' ') if list.needs_help
|
||
td_buttons.append(close_btn)
|
||
row.append(td_buttons)
|
||
#foot.append('<tr><td></td><td class="currency"><strong>'+Qrammer.currency(res.total_amount)+'</strong></td></tr>');
|
||
)
|
||
active_user_list: (list_id) ->
|
||
$.get('/lists/'+list_id+'/current.json', (res) ->
|
||
window.active_list = res
|
||
Qrammer.handle_active_user_list_default_actions()
|
||
body = $('#active-list-table tbody')
|
||
foot = $('#active-list-table tfoot')
|
||
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 = $('<tr></tr>').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($('<td></td>').text(order_txts.join(', ')))
|
||
row.append($('<td class="currency"></td>').html(Qrammer.currency(order.total_amount)))
|
||
foot.append('<tr><td></td><td class="currency"><strong>'+Qrammer.currency(res.total_amount)+'</strong></td></tr>')
|
||
)
|
||
|
||
build_product_list_as_modal: ->
|
||
wrapper = $('<div class="modal"></div>')
|
||
callback_wrapper = ->
|
||
wrapper.modal('hide')
|
||
callback()
|
||
header = $('<div class="modal-header"></div>')
|
||
.append('<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>')
|
||
.append('<h3>Product list</h3>').appendTo(wrapper)
|
||
|
||
body = $('<div class="modal-body"></div>')
|
||
table = $('<table class="table"></table>').appendTo(body)
|
||
tbody = $('<tbody></tbody>').appendTo(table)
|
||
for product_id, info of window.active_products_list
|
||
row = $('<tr></tr>').appendTo(tbody)
|
||
row.append('<td>'+info.product.name+'</td>')
|
||
row.append('<td>'+info.number+'</td>')
|
||
row.append('<td>'+Qrammer.currency(info.product.price * info.number)+'</td>')
|
||
|
||
body.appendTo(wrapper)
|
||
|
||
footer = $('<div class="modal-footer"></div>')
|
||
.append($('<a href="#" class="btn">Close</a>').click(-> wrapper.modal('hide')))
|
||
.append($('<a href="#" class="btn btn-primary">Yes</a>').click(callback_wrapper))
|
||
.appendTo(wrapper)
|
||
wrapper.modal()
|
||
|
||
jQuery.ajaxSetup
|
||
'beforeSend': (xhr) ->
|
||
xhr.setRequestHeader("Accept", "text/javascript")
|