diff --git a/app/assets/javascripts/supplier/foundation1/qsupplier.js.coffee.erb b/app/assets/javascripts/supplier/foundation1/qsupplier.js.coffee.erb index 81dd6e2f..14c84cad 100644 --- a/app/assets/javascripts/supplier/foundation1/qsupplier.js.coffee.erb +++ b/app/assets/javascripts/supplier/foundation1/qsupplier.js.coffee.erb @@ -72,7 +72,15 @@ root.Qsupplier= else if e.event == 'orders_placed_count' $('.supplier-orders-placed-count-number').text e.data.count else if e.event == 'list_changed_table' - App && App.List.updateOrAdd(e.data.list) + # App && App.List.updateOrAdd(e.data.list) + # App.store().update 'list', e.data.list + #TODO: waiting for single source of truth + if list = App.List.findCached(e.data.list.id) + list.get('table').set('active_list', null) + App.store().findById('table', e.data.list.table_id).then (new_table)-> + list.set('table', new_table) + new_table.set('active_list', list) # making reverse association + else if e.event == 'order_cancelled' if App and order = App.Order.findCached(e.data.id) order.markCancelled() diff --git a/app/assets/javascripts/user/app/application.js.coffee b/app/assets/javascripts/user/app/application.js.coffee index 48dc7108..60a9ee2b 100644 --- a/app/assets/javascripts/user/app/application.js.coffee +++ b/app/assets/javascripts/user/app/application.js.coffee @@ -6,6 +6,5 @@ #= require_directory ./modifications #= require ./app #= require_directory ./modules -#= require user/quser #= require_tree . @EmberENV = {FEATURES: {'query-params-new': true}} diff --git a/app/assets/javascripts/user/quser.js.coffee b/app/assets/javascripts/user/quser.js.coffee deleted file mode 100644 index 7ebe3a47..00000000 --- a/app/assets/javascripts/user/quser.js.coffee +++ /dev/null @@ -1,413 +0,0 @@ -#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: -> - return if window.redirecting - faye = new Faye.Client(event_host) - user_id = Qstorage.getItem('user_id') - unless user_id - @reset_user() - redirect_to 'obtain_token' - return false - faye.subscribe "/user/"+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') - list = new List(e.data.list) - $('.table-number').text(list.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' - else if(e.event == 'new_order') - $('#active-list-table tbody').append @mustache('#active-list-order-template', new Order(e.data.order)) - $('.list-total-amount').html(currency(e.data.total_amount)) - else if(e.event == 'orders_in_process_count') - $('.supplier-orders-in-process-count').text(e.data.count || 0) - else if(e.event == 'orders_placed_count') - $('.supplier-orders-placed-count').text(e.data.count || 0) - console.log(e) - false - ensure_json: (res)-> - if typeof(res) == 'string' then JSON.parse(res) else res - reset_user: -> - Qstorage.removeItem('auth_token') - Qstorage.removeItem('user_id') - authenticate_user: -> - email = $('#user-email') - password = $('#user-password') - return unless email.length && password.length - return email.focus() unless email.val() && email.val().length > 0 - return password.focus() unless password.val() && password.val().length > 0 - $.post(data_host + '/user/obtain_token.json', {"user[email]": email.val(), "user[password]": password.val()}, (res)=> - res = @ensure_json(res) - if res.auth_token - Qstorage.setItem('auth_token', res.auth_token) - Qstorage.setItem('user_id', res.user_id) - redirect_to 'user_root' - else - $('.user-alert').html(t('obtain_token.invalid_combination')).show() - ) - - false - ensure_token: (callback)-> - unless Qstorage.getItem('auth_token') && typeof(Qstorage.getItem('auth_token')) == 'string' && Qstorage.getItem('auth_token').length > 0 - return redirect_to('obtain_token') - @authentication_string = 'auth_token='+Qstorage.getItem('auth_token') - @authentication_object = {auth_token: Qstorage.getItem('auth_token')} - callback.call() if callback - home_loader: -> - @ensure_token => - $.getJSON(data_host + '/user/list_info.json', @authentication_object, (res) => @handle_active_list_default_actions(res)) - handle_active_list: (callback) -> - @ensure_token => - $.getJSON(data_host + '/user/list_info.json', @authentication_object, (res) => - if(res.ok == false && res.status && res.status == 401) - redirect_to('obtain_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) - redirect_to('obtain_token') - return - - $('.table-number').text(response.table_number) if response.table_number - $('.supplier-name').text(response.supplier_name) if response.supplier_name - $('.supplier-orders-placed-count').text(response.supplier_orders_placed_count || 0) - $('.supplier-orders-in-process-count').text(response.supplier_orders_in_process_count || 0) - - - if response.not_present || response.list_active == false then $('.home-link').removeClass('active') else $('.home-link').addClass('active') - - @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)-> - @ensure_token => - $.post(data_host + '/user/approve_join_request', $.extend({user_id: user_id}, @authentication_object), -> window.join_request_active = false) - reject_join_request: (user_id)-> - @ensure_token => - $.post(data_host + '/user/reject_join_request', $.extend({user_id: user_id}, @authentication_object), -> window.join_request_active = false) - list_needs_help: -> - return unless window.active_list && !window.active_list.needs_help - @ensure_token => - $.post(data_host + '/user/needs_help.json', @authentication_object, (res) => window.active_list = @ensure_json(res); @list_needs_help_default_action()) - list_needs_help_default_action: (response)=> - response ||= window.active_list - window.active_list = response - 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_payment: -> - return unless window.active_list && !window.active_list.needs_payment - @ensure_token => - $.post(data_host + '/user/list_needs_payment.json', @authentication_object, (res) => window.active_list = @ensure_json(res); @list_needs_payment_default_action()) - list_needs_payment_default_action: (response)-> - response ||= window.active_list - window.active_list = response - 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) - load_active_list: () -> - @ensure_token => - $.getJSON(data_host + '/user/active_list.json?'+@authentication_string, (res) => - if(res.ok == false && res.status && res.status == 401) - redirect_to('obtain_token') - 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: () -> - return unless list_id = Qstorage.list_id - @ensure_token => - $.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: -> - @ensure_token => - page = Qstorage.getItem('page') || 1 - page = parseInt(page) - $.getJSON(data_host + '/user/list_history.json?'+@authentication_string+'&page='+page, (res) => - @paginate(res, @load_list_history) - container = $('#list-history-container').html('') - return unless res.lists - for list in res.lists - container.append @mustache('#list-history-template', new List(list) ) - ) - paginate: (wrapper, callback) -> - container = $('nav.pagination') - container.html('') - return unless wrapper.num_pages - 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') - else - callback = ((i)-> - -> - Qstorage.page = i - window.Quser.load_list_history() - )(i) - link.click(callback) - 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() - return unless res.orders - m_obj = res - body.append @mustache('#active-list-order-template', new Order(order)) for order in m_obj.orders - $('.list-total-amount').html(currency(m_obj.total_amount)) - - order_selected_products: ()-> - @ensure_token => - return if $.isEmptyObject(window.active_products_list) - h = {} - h['table_id'] = Qstorage.getItem('table_id') if Qstorage.getItem('table_id') - for product_id, number of window.active_products_list - h['products['+product_id+']'] = number - $.post(data_host + '/user/order_selected_products.json', $.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 res.location || 'user_root', $.extend({message: res['message']}, res.location_params) - else if res.ok - redirect_to res.location || 'list_products', $.extend({message: res['message']}, res.location_params) - 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') - load_table_products: -> - @ensure_token => - return redirect_to 'user_root', {message: 'cannot_identify_table'} unless Qstorage.table_id - @populate_products_table('/user/list_products_for_table.json', {table_id: Qstorage.table_id}) - populate_products_table: (src, data)-> - data ||= {} - $.getJSON(data_host + src, $.extend(@authentication_object, data), (res) => - include_order_buttons = res.my_list || !res.table_occupied - - $('.table-number').text(res.table_number) if res.table_number - $('.supplier-name').text(res.supplier_name) if res.supplier_name - - window.products = {} - body = $('#products-table tbody') - 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 - for category in res.categories - body.append @mustache(script_id, - category: category.name, - products: category.products, - include_order_buttons: include_order_buttons - ) - for product in category.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 = @ensure_json(table) - Qstorage.setItem('table_id', table.table_id) - @ensure_token => - $.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.json', $.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 = Qstorage.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 = Qstorage.table_id - redirect_to 'user_root', {message: 'cannot_identify_table'} - return - $('.form-actions').remove() - cont = $('#join-occupied-table-progress-container') - cont.html('') - cont.append $($('').attr('src', "#{$asset_path}spinner.gif")) - cont.append $($('

    ').html(t('join_request.requestor.waiting_for_confirmation'))) - @ensure_token => - $.post(data_host + '/user/join_occupied_table.json', $.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 diff --git a/app/templates/supplier/_active_list.mustache b/app/templates/supplier/_active_list.mustache deleted file mode 100644 index 974d3570..00000000 --- a/app/templates/supplier/_active_list.mustache +++ /dev/null @@ -1,14 +0,0 @@ - - - ? - - - {{table_number}} - {{section_title}} - {{currency total_amount}} - - - -   - - diff --git a/app/templates/supplier/_active_order.mustache b/app/templates/supplier/_active_order.mustache deleted file mode 100644 index 56c07d08..00000000 --- a/app/templates/supplier/_active_order.mustache +++ /dev/null @@ -1,10 +0,0 @@ - - {{display}} - {{table_number}} - {{section_title}} - {{currency total_amount}} - - - - - diff --git a/app/templates/supplier/_alert.mustache b/app/templates/supplier/_alert.mustache deleted file mode 100644 index b078499a..00000000 --- a/app/templates/supplier/_alert.mustache +++ /dev/null @@ -1,12 +0,0 @@ -

    diff --git a/app/templates/supplier/_list_order.mustache b/app/templates/supplier/_list_order.mustache deleted file mode 100644 index d6c76b03..00000000 --- a/app/templates/supplier/_list_order.mustache +++ /dev/null @@ -1,4 +0,0 @@ - - {{display}} - {{#currency}}{{total_amount}}{{/currency}} - diff --git a/app/templates/user/_active_list_order.mustache b/app/templates/user/_active_list_order.mustache deleted file mode 100644 index d6c76b03..00000000 --- a/app/templates/user/_active_list_order.mustache +++ /dev/null @@ -1,4 +0,0 @@ - - {{display}} - {{#currency}}{{total_amount}}{{/currency}} - diff --git a/app/templates/user/_active_order.mustache b/app/templates/user/_active_order.mustache deleted file mode 100644 index b637fcd4..00000000 --- a/app/templates/user/_active_order.mustache +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - {{#products}} - - - - - - {{/products}} - - - - - - - - - - - - -
    #
    {{name}}{{number}} - {{#currency}}{{product_total}}{{/currency}} - -
    - Totaal - {{#currency}}{{total}}{{/currency}}
    - - - -
    diff --git a/app/templates/user/_alert.mustache b/app/templates/user/_alert.mustache deleted file mode 100644 index b078499a..00000000 --- a/app/templates/user/_alert.mustache +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/app/templates/user/_join_request.mustache b/app/templates/user/_join_request.mustache deleted file mode 100644 index 29bbf187..00000000 --- a/app/templates/user/_join_request.mustache +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/app/templates/user/_list_history.mustache b/app/templates/user/_list_history.mustache deleted file mode 100644 index d1e2654c..00000000 --- a/app/templates/user/_list_history.mustache +++ /dev/null @@ -1,3 +0,0 @@ -
  • - {{display}} -
  • diff --git a/app/templates/user/_products_category.mustache b/app/templates/user/_products_category.mustache deleted file mode 100644 index 87543de1..00000000 --- a/app/templates/user/_products_category.mustache +++ /dev/null @@ -1,7 +0,0 @@ -

    {{category}}

    -{{#products}} - - {{name}} - {{#currency}}{{price}}{{/currency}} - -{{/products}} diff --git a/app/templates/user/_products_category_for_order.mustache b/app/templates/user/_products_category_for_order.mustache deleted file mode 100644 index 4729c5e2..00000000 --- a/app/templates/user/_products_category_for_order.mustache +++ /dev/null @@ -1,15 +0,0 @@ -

    {{category}}

    -{{#products}} - - {{name}} - - - - 1 - + - - - {{#currency}}{{price}}{{/currency}} - - - -{{/products}} diff --git a/app/views/layouts/tablet.html.slim b/app/views/layouts/tablet.html.slim index f066cbb5..5718284f 100644 --- a/app/views/layouts/tablet.html.slim +++ b/app/views/layouts/tablet.html.slim @@ -45,7 +45,6 @@ html lang="en" .row .span12 #ember-app-container - script#alert-template[type="text/html"]= mustache_template 'supplier/alert' = yield :footer javascript: jQuery(function(){#{onload_javascript}}); diff --git a/config/environments/development.rb b/config/environments/development.rb index f6d40573..360c84c3 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -59,3 +59,4 @@ Qwaiter::Application.configure do # Raises helpful error messages. config.assets.raise_runtime_errors = true end +STDOUT.sync = true diff --git a/spec/acceptance/suppliers/supplier_main_board.feature b/spec/acceptance/suppliers/dashboard.feature similarity index 96% rename from spec/acceptance/suppliers/supplier_main_board.feature rename to spec/acceptance/suppliers/dashboard.feature index 1e885ebd..24f6f1bb 100644 --- a/spec/acceptance/suppliers/supplier_main_board.feature +++ b/spec/acceptance/suppliers/dashboard.feature @@ -73,10 +73,13 @@ Feature: Supplier main board Then I should be redirected to the supplier section view @javascript - Scenario: Update table number if table chanes + Scenario: Update table number and section if table changes Given there is an active list and order And I am signed in as supplier + # wait until page is fully loaded + And I wait 2 seconds When the active list changes to another table in another section + And I wait 1 second Then the supplier main board table number should be updated to the new table number And the supplier main board section name should be updated to the new section diff --git a/spec/acceptance_steps/global_user_steps.rb b/spec/acceptance_steps/global_user_steps.rb index 17060682..1a03a794 100644 --- a/spec/acceptance_steps/global_user_steps.rb +++ b/spec/acceptance_steps/global_user_steps.rb @@ -1,13 +1,11 @@ step "the user scans a table QR code" do step 'there is a table' - #page.execute_script "Quser.actions_for_table({table_id: '#{@table.id}'})" page.execute_script "App.__container__.lookup('route:application').transitionTo('table','#{@table.id}')" end step "another user scans the QR code on the table" do step 'there is another signed in user user' visit user_root_path - #page.execute_script "Quser.actions_for_table({table_id: '#{@table.id}'})" page.execute_script "App.__container__.lookup('route:application').transitionTo('table','#{@table.id}')" end @@ -38,4 +36,3 @@ end step "the other user clicks the join table button" do find('.join-table-button').click end - diff --git a/spec/acceptance_steps/suppliers/main_board_steps.rb b/spec/acceptance_steps/suppliers/dashboard_steps.rb similarity index 100% rename from spec/acceptance_steps/suppliers/main_board_steps.rb rename to spec/acceptance_steps/suppliers/dashboard_steps.rb