diff --git a/app/assets/javascripts/user/app/models/order.js.coffee b/app/assets/javascripts/user/app/models/order.js.coffee index bafcfc6d..b920d5d4 100644 --- a/app/assets/javascripts/user/app/models/order.js.coffee +++ b/app/assets/javascripts/user/app/models/order.js.coffee @@ -9,4 +9,4 @@ App.Order = DS.Model.extend ).property('product_orders.@each.quantity') display: (-> @get('product_orders').map((po) -> "#{po.get('quantity')} x #{po.get('product.name')}").join(', ') - ).property('product_orders.@each.quantity') + ).property('product_orders.@each.quantity', 'product_orders.@each.product.@each.name') diff --git a/app/assets/javascripts/user/app/models/product_order.js.coffee b/app/assets/javascripts/user/app/models/product_order.js.coffee index ee680168..fc18dafd 100644 --- a/app/assets/javascripts/user/app/models/product_order.js.coffee +++ b/app/assets/javascripts/user/app/models/product_order.js.coffee @@ -1,15 +1,14 @@ attr = DS.attr App.ProductOrder = DS.Model.extend quantity: attr 'number', defaultValue: 1 - product: DS.belongsTo('product') + price: attr 'number' product_name: attr('string') + product: DS.belongsTo('product') order: DS.belongsTo('order') - placed: attr('boolean', defaultValue: false) + placed: attr('boolean', defaultValue: false) # virtual attribute for new orders to be placed, should be more elegant increment: -> @set('quantity', @get('quantity') + 1) - total: (-> @get('quantity') * @get('product.price')).property('quantity') + total: (-> @get('quantity') * @get('price')).property('quantity', 'price') setOrder: (order)-> @set('placed', true) @set('order', order) - - diff --git a/app/assets/javascripts/user/app/models/section.js.coffee b/app/assets/javascripts/user/app/models/section.js.coffee new file mode 100644 index 00000000..1f822926 --- /dev/null +++ b/app/assets/javascripts/user/app/models/section.js.coffee @@ -0,0 +1 @@ +App.Section = DS.Model.extend {} diff --git a/app/assets/javascripts/user/app/templates/application.emblem b/app/assets/javascripts/user/app/templates/application.emblem index 059d2d73..281611db 100644 --- a/app/assets/javascripts/user/app/templates/application.emblem +++ b/app/assets/javascripts/user/app/templates/application.emblem @@ -1,50 +1,3 @@ -/.top-menu.off-canvas-wrap - .inner-wrap - nav.tab-bar - section.left-small - a.left-off-canvas-toggle.menu-icon - span - section.right.tab-bar-section - = link-to 'index' - = image_tag 'icons/logo-small.png' - a{ action "openDebugger"} alt="" - span.fa.fa-wrench.fa-lg - .right - if list.id - App.MenuItemView route="active_list" - App.MenuItemView route='table' route_param=list.table.id - App.MenuItemListNeedsHelpView - App.MenuItemListNeedsPaymentView - aside.left-off-canvas-menu - ul.off-canvas-list - li: h3 Menu - li - = link-to 'index' - span Home - li - a{action scanQr bubbles=false} - span Scan QR - if list.id - li - =link-to 'table' list.table.id - span= t 'list_products.title' - li - =link-to 'active_list' - span= t 'active_list.title' - li - =link-to 'lists' - span= t 'models.plural.list' - li - =link-to 'join_requests' - span= t 'models.plural.join_request' - section.main-section - if notice - #notice.alert-box{action clearNotice} data-alert=true - a.right href="#" - span.fa.fa-times.fa-lg - span= notice - = outlet - a.exit-off-canvas header.top-menu .toggle-side-menu span @@ -85,16 +38,16 @@ aside.side-menu span Scan QR if list.id li - =link-to 'table' list.table.id + =link-to 'table' list.table.id class="side-menu-list-products" span.fa.fa-cutlery span.fa.fa-glass = t 'list_products.title' li - =link-to 'active_list' + =link-to 'active_list' class="side-menu-active-list" span.active-list-icon span= t 'active_list.title' li - =link-to 'lists' + =link-to 'lists' class="side-menu-lists" span= t 'models.plural.list' li =link-to 'join_requests' diff --git a/app/assets/javascripts/user/app/templates/lists/index.emblem b/app/assets/javascripts/user/app/templates/lists/index.emblem index ac7864d3..42d1ec73 100644 --- a/app/assets/javascripts/user/app/templates/lists/index.emblem +++ b/app/assets/javascripts/user/app/templates/lists/index.emblem @@ -1,11 +1,11 @@ .row h2=t 'models.plural.list' each list in controller - .lists-overview-entry{action showList list} + .lists-overview-entry{action "showList" list} span.created_at=time list.created_at span.price.currency= currency list.price span.name= list.supplier_name hr .clearfix if hasMore - button{action showMore} Show more + button{action "showMore"}=t 'lists.show_more' diff --git a/app/assets/stylesheets/user/foundation/_qconstants.css.sass b/app/assets/stylesheets/user/foundation/_qconstants.css.sass index 1a3502fa..2de5af3a 100644 --- a/app/assets/stylesheets/user/foundation/_qconstants.css.sass +++ b/app/assets/stylesheets/user/foundation/_qconstants.css.sass @@ -5,3 +5,4 @@ $green: #7BB459 //Heineken //$wood: image-url('textures/wood001-vertical.jpg') $wood: image-url('textures/theme1.jpg') $background-brown: #57351f +$active-link-color: #ff0 diff --git a/app/assets/stylesheets/user/foundation/components/_menu_main.css.sass b/app/assets/stylesheets/user/foundation/components/_menu_main.css.sass index 4c461262..1abb29e8 100644 --- a/app/assets/stylesheets/user/foundation/components/_menu_main.css.sass +++ b/app/assets/stylesheets/user/foundation/components/_menu_main.css.sass @@ -49,8 +49,8 @@ header.top-menu margin-top: 10px color: #999 &.active - color: yellow - border-color: yellow + color: $active-link-color + border-color: $active-link-color &.callout color: #f70 border-color: #f70 diff --git a/app/assets/stylesheets/user/foundation/components/_menu_side.css.sass b/app/assets/stylesheets/user/foundation/components/_menu_side.css.sass index 0c2fa8d8..2d229bd6 100644 --- a/app/assets/stylesheets/user/foundation/components/_menu_side.css.sass +++ b/app/assets/stylesheets/user/foundation/components/_menu_side.css.sass @@ -26,6 +26,8 @@ aside.side-menu margin-right: 18px @extend .fa @extend .fa-list + a.active + color: $active-link-color .toggle-side-menu position: absolute diff --git a/app/controllers/users/lists_controller.rb b/app/controllers/users/lists_controller.rb index b973f39c..d31748f3 100644 --- a/app/controllers/users/lists_controller.rb +++ b/app/controllers/users/lists_controller.rb @@ -5,6 +5,7 @@ module Users #lists = current_user.lists.include_relation(:supplier, :table) lists = List.for_user(current_user, page: params[:page], per_page: params[:per_page].presence || 25).include_relation(:supplier, :table) #lists.include_relation(:supplier) + lists.include_relation(:users, :orders) render json: lists, each_serializer: UserListSerializer, meta: {total_pages: lists.total_pages, page: lists.current_page} #, root: :lists end diff --git a/app/serializers/user_extended_supplier_serializer.rb b/app/serializers/user_extended_supplier_serializer.rb index ce6f026a..8568f084 100644 --- a/app/serializers/user_extended_supplier_serializer.rb +++ b/app/serializers/user_extended_supplier_serializer.rb @@ -3,6 +3,7 @@ class UserExtendedSupplierSerializer < Qwaiter::Serializer embed :ids, include: true attributes :extended_version, :open, :name, :orders_in_process_count, :orders_placed_count has_many :product_categories + has_many :products def extended_version true diff --git a/app/serializers/user_list_serializer.rb b/app/serializers/user_list_serializer.rb index 16de2237..259809af 100644 --- a/app/serializers/user_list_serializer.rb +++ b/app/serializers/user_list_serializer.rb @@ -1,6 +1,6 @@ class UserListSerializer < Qwaiter::Serializer # user ids for facebook pictures - #embed :ids + embed :ids attributes :state, :needs_help, :needs_payment, :user_requests_closing, :is_paid, :price, :table_id, :table_number, :section_id, :user_ids, :supplier_name, :closed_at, :supplier_id #def has_active_orders @@ -9,4 +9,6 @@ class UserListSerializer < Qwaiter::Serializer def supplier_name object.supplier.name end + has_many :users + has_many :orders end diff --git a/config/locales/user.en.yml b/config/locales/user.en.yml index f81d5f3b..c23fba15 100644 --- a/config/locales/user.en.yml +++ b/config/locales/user.en.yml @@ -88,3 +88,5 @@ en: list: active: 'Active' closed: 'Closed' + lists: + show_more: Show more diff --git a/config/locales/user.nl.yml b/config/locales/user.nl.yml index 2d0e264c..aab8fc85 100644 --- a/config/locales/user.nl.yml +++ b/config/locales/user.nl.yml @@ -86,3 +86,5 @@ nl: list: active: 'Actief' closed: 'Afgesloten' + lists: + show_more: Meer tonen diff --git a/spec/acceptance/users/active_list.feature b/spec/acceptance/users/active_list.feature new file mode 100644 index 00000000..153315f8 --- /dev/null +++ b/spec/acceptance/users/active_list.feature @@ -0,0 +1,12 @@ +Feature: Active list view + + @javascript + Scenario: Loading lists and switching back to the active list + Given There is an open supplier with a menu + And there is a signed in user with an active order + And the user is on the active list page + When the user opens the side menu + And the user clicks on the lists link in the side menu + And the user opens the side menu again + And the user clicks on the active list link in the side menu + Then the user should see the order in the active list view diff --git a/spec/acceptance_steps/global_list_steps.rb b/spec/acceptance_steps/global_list_steps.rb index 21e7741b..fa50fc3c 100644 --- a/spec/acceptance_steps/global_list_steps.rb +++ b/spec/acceptance_steps/global_list_steps.rb @@ -9,6 +9,9 @@ end step "the user has an active list" do @list = create :list, supplier: @supplier, table: @table, user_ids: [@user.id] + @product ||= create :product, supplier: @supplier, name: 'Beer', price: 2.34 + @order = create :order, supplier: @supplier, list: @list + @product_order = create :product_order, order: @order, product: @product, quantity: 2, price: 2.34 @user.reload @user.active_list_id = @list.id @user.save @@ -29,4 +32,3 @@ end step "I am signed in as a user" do step "I visit the user obtain token path" end - diff --git a/spec/acceptance_steps/users/active_list_steps.rb b/spec/acceptance_steps/users/active_list_steps.rb new file mode 100644 index 00000000..8a2913fa --- /dev/null +++ b/spec/acceptance_steps/users/active_list_steps.rb @@ -0,0 +1,7 @@ +step "the user is on the active list page" do + visit "/user#/active_list" +end + +step "the user should see the order in the active list view" do + page.evaluate_script(%|$('.order-row-#{@order.id}').text()|).first(14).should == '2 x Beer€ 4.68' +end diff --git a/spec/acceptance_steps/users/side_menu_steps.rb b/spec/acceptance_steps/users/side_menu_steps.rb new file mode 100644 index 00000000..79752f2f --- /dev/null +++ b/spec/acceptance_steps/users/side_menu_steps.rb @@ -0,0 +1,15 @@ +step "the user opens the side menu" do + page.execute_script %|$('.toggle-side-menu').click()| + sleep 1 +end +step "the user opens the side menu again" do + step "the user opens the side menu" +end + +step "the user clicks on the lists link in the side menu" do + page.execute_script %|$('.side-menu-lists').click()| +end + +step "the user clicks on the active list link in the side menu" do + page.execute_script %|$('.side-menu-active-list').click()| +end diff --git a/spec/support/ember_helpers.rb b/spec/support/ember_helpers.rb index 3ec3c52f..65201084 100644 --- a/spec/support/ember_helpers.rb +++ b/spec/support/ember_helpers.rb @@ -14,4 +14,8 @@ module SpecEmberHelpers SCRIPT JSON.parse(h) end + + def js_path + page.evaluate_script 'location.pathname + location.hash' + end end