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: () -> match = window.document.URL.toString().match('([0-9a-zA-Z]+)(\\?|$)') if match list_id = match[1] else return $.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 = $('').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 = $('') 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: () -> match = window.document.URL.toString().match('table_id=([0-9a-zA-Z]+)') if match table_id = match[1] else redirect_to 'user_root', {message: 'cannot_identify_table'} return $('.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()