data_host = window.data_host root_url = QMobile.root_url() authentication_string = QMobile.authentication_string() authentication_object = $.parseJSON(QMobile.authentication_object()) class Quser format_date: (utc) -> formatted = '' formatted += utc.substr(0,10) formatted += ' ' formatted += utc.substr(11, 5) formatted watch_events: -> faye = new Faye.Client(event_host) faye.subscribe "/user/"+QMobile.user_id(), (e)=> if(e.event == 'list_closed') #redirect_to 'user_root', {list_closed: 'true'} redirect_to 'history_list', {list_id: e.data.id, list_closed: true} else if(e.event == 'list_helped') window.active_list.needs_help = false @list_needs_help_default_action() else if(e.event == 'order_being_processed') $('#order-row-'+e.data.id).addClass('active') else if(e.event == 'order_being_delivered') $('#order-row-'+e.data.id).addClass('delivered') else if(e.event == 'list_changed_table') $('.table-number').text(e.data.table.number) else if(e.event == 'list_needs_help') window.active_list.needs_help = true @list_needs_help_default_action() else if(e.event == 'list_needs_payment') window.active_list.needs_payment = true @list_needs_payment_default_action() else if(e.event == 'user_join_request') @show_join_request(e.data) else if(e.event == 'join_request_approved') redirect_to 'list_products', message: 'join_request_approved' else if(e.event == 'join_request_rejected') redirect_to 'user_root', message: 'join_request_rejected' console.log(e) false home_loader: -> $.getJSON(data_host + '/user/list_info.json?' + authentication_string, (res) => @handle_active_list_default_actions(res)) handle_active_list: (callback) -> $.getJSON(data_host + '/user/list_info.json?' + authentication_string, (res) => if(res.ok == false && res.status && res.status == 401) direct_to_site('obtain_user_token') else if !res.list_active redirect_to 'user_root', {list_closed: 'true'} return window.active_list = res callback.call() if callback @handle_active_list_default_actions(res) ) handle_active_list_default_actions: (response)-> response ||= {} if(response.ok == false && response.status && response.status == 401) direct_to_site('obtain_user_token') return $('.table-number').text(response.table_number) if response.table_number $('.supplier-name').text(response.supplier_name) if response.supplier_name if response.not_present || response.list_active == false then $('.home-link').hide() else $('.home-link').show() @list_needs_payment_default_action(response) @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) @handle_join_requests(response) handle_join_requests: (response)-> if !window.join_request_active && response.join_requests && response.join_requests.length window.join_request_active = true for join_request in response.join_requests @show_join_request(join_request) show_join_request: (join_request)-> $(@mustache('#join-request-template', title: t('join_request.title') message: t('join_request.body', {email: join_request.user_email}) reject: t('join_request.reject') approve: t('join_request.approve') requester_id: join_request.user_id )).modal() false approve_join_request: (user_id)-> $.post(data_host + '/user/approve_join_request', $.extend({user_id: user_id}, authentication_object), -> window.join_request_active = false) reject_join_request: (user_id)-> $.post(data_host + '/user/reject_join_request', $.extend({user_id: user_id}, authentication_object), -> window.join_request_active = false) bogus1: -> wrapper = $('') join_callback = ( (request)-> -> $.post(data_host + '/user/approve_join_request', $.extend({user_id: request.user_id}, authentication_object), -> window.join_request_active = false; wrapper.modal('hide') ) )(join_request) reject_callback = ( (request)-> -> $.post(data_host + '/user/reject_join_request', $.extend({user_id: request.user_id}, authentication_object), -> window.join_request_active = false; wrapper.modal('hide' )) )(join_request) header = $('') .append('') .append($('

').text(t('join_request.title'))).appendTo(wrapper) body = $('') #body.append(join_request.user_email + ' wants to join the table') body.text(t('join_request.body', {email: join_request.user_email})) body.appendTo(wrapper) footer = $('') .append($('').text(t('join_request.reject')).click(reject_callback)) .append($('').text(t('join_request.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: window.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', authentication_object, (res) => window.active_list = res; window.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: window.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', authentication_object, (res) => window.active_list = res; window.Quser.list_needs_payment_default_action(res)) load_active_list: () -> $.getJSON(data_host + '/user/active_list.json?'+authentication_string, (res) => window.active_list = res if res._id unless res.list_active redirect_to 'history_list', {list_id: window.active_list._id, list_closed: true} return @handle_active_list_default_actions(res) body = $('#active-list-table tbody') foot = $('#active-list-table tfoot') @build_list_table(body, foot, res) ) load_history_list: () -> match = window.document.URL.toString().match('list_id=([0-9a-zA-Z]+)') if match list_id = match[1] else return $.getJSON(data_host + '/user/history_list.json?list_id='+list_id+'&'+ authentication_string, (res) => body = $('#history-list-table tbody') foot = $('#history-list-table tfoot') @build_list_table(body, foot, res) $('.list-created-at').text(@format_date(res.created_at)) $('.list-closed-at').text(@format_date(res.closed_at)) $('.supplier-name').text(res.supplier_name) ) load_list_history: -> match = window.document.URL.toString().match('page=([0-9]+)') if match page = match[1] else page = 1 $.getJSON(data_host + '/user/list_history.json?'+authentication_string+'&page='+page, (res) => @paginate(res, '/user/list_history.html') container = $('#list-history-container') for list in res.lists li = $('
  • ').appendTo(container) link = $('').appendTo(li) link.attr('href', root_url + '/user/history_list.html?list_id='+list._id) txt = list.supplier_name txt += ' - ' txt += @format_date(list.created_at) link.text(txt) ) paginate: (wrapper, src) -> container = $('nav.pagination') container.html('') list = $('').appendTo(container) if wrapper.num_pages && wrapper.num_pages > 1 for i in [1..wrapper.num_pages] li = $('
  • ') link = $('') link.text(i) if wrapper.current_page && wrapper.current_page == i li.addClass('active') link.attr('href', 'javascript:void(0)') else link.attr('href', root_url + src + '?'+authentication_string+'&page='+i) li.append(link) list.append(li) mustache: (selector, locals)-> locs = $.extend(locals, currency: -> (val)-> currency(Mustache.render(val, this)) ) Mustache.to_html($(selector).html(), locs) build_list_table: (body, foot, res) -> body.find('tr').remove() foot.find('tr').remove() if !res.orders && !res.orders.length Qwaiter.alert('No orders in list') return m_obj = res body.append @mustache('#active-list-order-template', new Order(order)) for order in m_obj.orders foot.append @mustache('#active-list-orders-footer-template', m_obj) order_selected_products: ()-> return if $.isEmptyObject(window.active_products_list) h = {} match = window.document.URL.toString().match('table_id=([0-9a-zA-Z]+)') h['table_id'] = match[1] if match for product_id, number of window.active_products_list h['products['+product_id+']'] = number $.post(data_host + '/user/order_selected_products', $.extend(h, authentication_object), ((res) => @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 if res['message'] && !res['ok'] redirect_to 'user_root', {message: res['message']} else redirect_to res.location || 'list_products' if res['ok'] build_product_list: -> total = 0.0 h = {products: []} for product_id, number of window.active_products_list product = window.products[product_id] product.number = number product.product_total = product.price * number h.products.push product total += product.price * number h.total = total $('#active-order-container').html @mustache('#active-order-template', h) Qupdate('#active-order-container') load_active_list_products: -> @populate_products_table('/user/list_products.json?'+authentication_string) load_table_products: -> 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 @populate_products_table('/user/list_products_for_table.json?'+authentication_string+'&table_id='+table_id) populate_products_table: (src)-> $.getJSON(data_host + src, (res) => if res.has_occupied_info include_order_buttons = !res.is_occupied delete(res['has_occupied_info']) delete(res['is_occupied']) else include_order_buttons = true 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']) window.products = {} body.find('tr').remove() script_id = if include_order_buttons then '#products-category-for-order-template' else '#products-category-template' for category, products of res body.append @mustache(script_id, category: category, products: products, include_order_buttons: include_order_buttons ) for product in products window.products[product._id] = product ) increment_products_counter: (product_id)-> product_count_holder = $('#order-product-count-'+product_id) count = parseInt(product_count_holder.text()) product_count_holder.text(count + 1) false lower_products_counter: (product_id)-> product_count_holder = $('#order-product-count-'+product_id) count = parseInt(product_count_holder.text()) product_count_holder.text(count - 1) false add_product_to_order: (product_id, context) -> product_count_holder = $('#order-product-count-'+product_id) count = parseInt(product_count_holder.text()) count ||= 1 product_count_holder.text(1) window.active_products_list ||= {} window.active_products_list[product_id] ||= 0 window.active_products_list[product_id] += count delete(window.active_products_list[product_id]) if window.active_products_list[product_id] < 1 @build_product_list() false actions_for_table: (table)-> table = JSON.parse(table) if typeof(table) == 'string' $.getJSON(data_host + '/user/table_info.json?'+authentication_string+'&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 ## Offer to move table Qwaiter.confirm( ok: -> $.post(data_host + '/user/move_table', $.extend({table_id: table.table_id}, authentication_object), (res2)-> if res2.occupied redirect_to 'user_root', {message: 'move_table.cannot_move_to_occupied_tabe'} else redirect_to 'list_products', {message: 'move_table.moved_to_another_table'} ) cancel: -> redirect_to 'list_products' title: t('move_table.confirmation_title') content: t('move_table.confirmation_body') ) 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') show_table_products: -> unless table_id = getUrlVars().table_id redirect_to 'user_root', {message: 'cannot_identify_table'} return redirect_to 'list_products_for_table', table_id: table_id join_occupied_table: () -> unless table_id = getUrlVars().table_id 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', $.extend({table_id: table_id}, authentication_object)) #setInterval('Quser.check_if_can_join_occupied_table("'+table_id+'")', 7500) add_product: (product_id, count) -> count ||= 1 window.active_products_list ||= {} window.active_products_list[product_id] ||= 0 window.active_products_list[product_id] += count @build_product_list() clear_selected_products: -> window.active_products_list = {} $('#active-order-table').hide() @Quser = new Quser