From 6af7dc74afc45801e8cc02e79223d0aff3378497 Mon Sep 17 00:00:00 2001 From: Benjamin ter Kuile Date: Wed, 26 Mar 2014 17:48:54 +0100 Subject: [PATCH] user ember progress --- .../active_list_controller.js.coffee | 10 ++++++ .../application_controller.js.coffee | 13 ++------ .../list_products_controller.js.coffee | 2 +- .../product_orders_controller.js.coffee | 33 ++++++++++++------- .../user/app/models/list.js.coffee | 9 ++++- .../user/app/models/order.js.coffee | 11 +++++++ .../user/app/models/product_order.js.coffee | 7 ++++ .../app/routes/active_list_route.js.coffee | 3 ++ .../app/routes/application_route.js.coffee | 6 ++-- .../app/routes/list_products_route.js.coffee | 4 ++- .../user/app/templates/active_list.emblem | 20 ++++++++++- .../user/app/templates/list_products.emblem | 14 +++++--- .../user/app/templates/product_orders.emblem | 6 ++-- .../user/foundation/product-orders.css.sass | 5 +++ .../foundation/product_categories.css.sass | 2 ++ app/controllers/users/lists_controller.rb | 12 +++++++ config/locales/user.en.yml | 1 + config/locales/user.nl.yml | 1 + config/routes.rb | 5 +++ 19 files changed, 129 insertions(+), 35 deletions(-) create mode 100644 app/assets/javascripts/user/app/controllers/active_list_controller.js.coffee create mode 100644 app/assets/javascripts/user/app/models/order.js.coffee create mode 100644 app/assets/javascripts/user/app/routes/active_list_route.js.coffee create mode 100644 app/assets/stylesheets/user/foundation/product_categories.css.sass create mode 100644 app/controllers/users/lists_controller.rb diff --git a/app/assets/javascripts/user/app/controllers/active_list_controller.js.coffee b/app/assets/javascripts/user/app/controllers/active_list_controller.js.coffee new file mode 100644 index 00000000..ec7bcc36 --- /dev/null +++ b/app/assets/javascripts/user/app/controllers/active_list_controller.js.coffee @@ -0,0 +1,10 @@ +App.ActiveListController = Ember.ArrayController.extend + orders: (-> + @get('list.orders') + ).property('list.orders') + + list: (-> + @get('controllers.application.list') + ).property('controllers.application.list') + + displayTotal: (-> @get('list.orders.length') and @get('list.orders.length') > 1 ).property('list.orders.length') diff --git a/app/assets/javascripts/user/app/controllers/application_controller.js.coffee b/app/assets/javascripts/user/app/controllers/application_controller.js.coffee index 93d51126..3c855deb 100644 --- a/app/assets/javascripts/user/app/controllers/application_controller.js.coffee +++ b/app/assets/javascripts/user/app/controllers/application_controller.js.coffee @@ -18,13 +18,6 @@ App.ApplicationController = Ember.Controller.extend list_is_paid: -> @set 'list.needs_payment', false list_needs_payment: -> @set 'list.needs_payment', true # incoming from other users - getList: -> - Ember.$.get('/user/list_info.json').then (res)=> - if res.not_present - @set 'list', null - else - @set 'list', App.List.create(res) - @getProducts table_id: @get('list.table_id') - getProducts: (options = {})-> - @store.find('product_category', options).then (product_categories)=> - @controllerFor('list_products').set 'model', product_categories + #getProducts: (options = {})-> + #@store.find('product_category', options).then (product_categories)=> + #@controllerFor('list_products').set 'model', product_categories diff --git a/app/assets/javascripts/user/app/controllers/list_products_controller.js.coffee b/app/assets/javascripts/user/app/controllers/list_products_controller.js.coffee index 4bed86e7..7a6da434 100644 --- a/app/assets/javascripts/user/app/controllers/list_products_controller.js.coffee +++ b/app/assets/javascripts/user/app/controllers/list_products_controller.js.coffee @@ -1,7 +1,7 @@ App.ListProductsController = Ember.ArrayController.extend actions: addProduct: (product)-> - if existing = @store.all('product_order').find((po)-> po.get('product') == product) + if existing = @store.all('product_order').find((po)-> po.get('product') == product and not po.get('order')) existing.increment() else @store.createRecord 'product_order', product: product diff --git a/app/assets/javascripts/user/app/controllers/product_orders_controller.js.coffee b/app/assets/javascripts/user/app/controllers/product_orders_controller.js.coffee index 570403b3..42fcc424 100644 --- a/app/assets/javascripts/user/app/controllers/product_orders_controller.js.coffee +++ b/app/assets/javascripts/user/app/controllers/product_orders_controller.js.coffee @@ -7,15 +7,24 @@ App.ProductOrdersController = Ember.ArrayController.extend clearProductOrders: -> @store.all('product_order').toArray().invoke 'unloadRecord' orderProducts: -> - orders = @store.all('product_order').toArray() - data = orders.map( (order)->order.serialize() ) - dataObject = {order: {}} - for product_order in data - dataObject['order'][product_order.product_id] = product_order.quantity - $.ajax - url: Routes.user_order_selected_products_path() - type: "POST", - data: JSON.stringify(dataObject), - contentType: "application/json", - dataType: 'json' - orders.invoke 'unloadRecord' + order = @store.createRecord('order', list: @get('controllers.application.list')) + new_product_orders = @store.all('product_order').filterProperty('order', null) + new_product_orders.forEach (po) -> po.setOrder(order) + order.save() + @transitionToRoute 'active_list' + + #orders = @store.all('product_order').toArray() + #data = orders.map( (order)->order.serialize() ) + #dataObject = {order: {}} + #for product_order in data + #dataObject['order'][product_order.product_id] = product_order.quantity + ##$.ajax + ##url: Routes.user_order_selected_products_path() + ##type: "POST", + ##data: JSON.stringify(dataObject), + ##contentType: "application/json", + ##dataType: 'json' + #orders.invoke 'unloadRecord' + + removeProductOrder: (product_order)-> + product_order.unloadRecord() diff --git a/app/assets/javascripts/user/app/models/list.js.coffee b/app/assets/javascripts/user/app/models/list.js.coffee index e56f76dd..3e6c7c81 100644 --- a/app/assets/javascripts/user/app/models/list.js.coffee +++ b/app/assets/javascripts/user/app/models/list.js.coffee @@ -1 +1,8 @@ -App.List = Ember.Object.extend {} +attr = DS.attr +App.List = DS.Model.extend + orders: DS.hasMany('order') + needs_help: attr('boolean') + needs_payment: attr('boolean') + total: (-> + @get('orders').getEach('total').reduce(((sum, total) -> sum + total), 0) + ).property('orders.@each.total') diff --git a/app/assets/javascripts/user/app/models/order.js.coffee b/app/assets/javascripts/user/app/models/order.js.coffee new file mode 100644 index 00000000..a99f9009 --- /dev/null +++ b/app/assets/javascripts/user/app/models/order.js.coffee @@ -0,0 +1,11 @@ +attr = DS.attr +App.Order = DS.Model.extend + state: attr 'string' + list: DS.belongsTo('list') + product_orders: DS.hasMany('product_order', embedded: 'always') + total: (-> + @get('product_orders').getEach('total').reduce(((sum, total) -> sum + total), 0) + ).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') 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 e22cf449..e4c0a49d 100644 --- a/app/assets/javascripts/user/app/models/product_order.js.coffee +++ b/app/assets/javascripts/user/app/models/product_order.js.coffee @@ -2,6 +2,13 @@ attr = DS.attr App.ProductOrder = DS.Model.extend quantity: attr 'number', defaultValue: 1 product: DS.belongsTo('product') + order: DS.belongsTo('order') + placed: attr('boolean', defaultValue: false) increment: -> @set('quantity', @get('quantity') + 1) total: (-> @get('quantity') * @get('product.price')).property('quantity') + setOrder: (order)-> + @set('placed', true) + @set('order', order) + + diff --git a/app/assets/javascripts/user/app/routes/active_list_route.js.coffee b/app/assets/javascripts/user/app/routes/active_list_route.js.coffee new file mode 100644 index 00000000..33f1cd28 --- /dev/null +++ b/app/assets/javascripts/user/app/routes/active_list_route.js.coffee @@ -0,0 +1,3 @@ +App.ActiveListRoute = Ember.Route.extend + model: -> + @controllerFor('application').get('list.orders') diff --git a/app/assets/javascripts/user/app/routes/application_route.js.coffee b/app/assets/javascripts/user/app/routes/application_route.js.coffee index 84072968..57e369e6 100644 --- a/app/assets/javascripts/user/app/routes/application_route.js.coffee +++ b/app/assets/javascripts/user/app/routes/application_route.js.coffee @@ -1,13 +1,15 @@ App.ApplicationRoute = Ember.Route.extend setupController: (controller)-> - @controllerFor('product_orders').set 'model', @store.all('product_order') + #@controllerFor('product_orders').set 'model', @store.filter('product_order', (po)-> !po.get('order')) # does not work (yet) + @controllerFor('product_orders').set 'model', @store.filter('product_order', (po)-> !po.get('placed')) controller.secured -> faye = new Faye.Client(event_host) user_id = Qstorage.getItem('user_id') faye.subscribe "/user/"+user_id, (e)=> console.log e @events[e.event].call(@) if @events[e.event] - @getList() + @store.find('list', 'current').then (list)=> + @set 'list', list unauthorized: -> Qstorage.setItem('auth_token', '') diff --git a/app/assets/javascripts/user/app/routes/list_products_route.js.coffee b/app/assets/javascripts/user/app/routes/list_products_route.js.coffee index 0d18148b..5d410144 100644 --- a/app/assets/javascripts/user/app/routes/list_products_route.js.coffee +++ b/app/assets/javascripts/user/app/routes/list_products_route.js.coffee @@ -1,4 +1,6 @@ -App.ListProductsRoute = Ember.Route.extend {} +App.ListProductsRoute = Ember.Route.extend + model: -> + @store.all 'product_category' #setupController: (controller)-> #controller.secured -> #src = '/user/list_products.json' diff --git a/app/assets/javascripts/user/app/templates/active_list.emblem b/app/assets/javascripts/user/app/templates/active_list.emblem index b8b191ed..db54163c 100644 --- a/app/assets/javascripts/user/app/templates/active_list.emblem +++ b/app/assets/javascripts/user/app/templates/active_list.emblem @@ -1 +1,19 @@ -h2 Active list +.row + h2=t 'active_list.title' + if list.orders + ul.active_list-orders + each order in list.orders + li class=order.state + = order.display + span.currency= currency order.total + if displayTotal + li.total + = t 'total' + span.currency= currency list.total + else + p + span=t 'active_list.no_orders_explanation' + br + link-to 'list_products' class="button" + span=t 'list_products.title' + diff --git a/app/assets/javascripts/user/app/templates/list_products.emblem b/app/assets/javascripts/user/app/templates/list_products.emblem index f42c3c4e..eda52b34 100644 --- a/app/assets/javascripts/user/app/templates/list_products.emblem +++ b/app/assets/javascripts/user/app/templates/list_products.emblem @@ -1,9 +1,13 @@ .row .large-6.columns each product_category in controller - hr - h4= product_category.name - hr - each product in product_category.products - a{action addProduct product}= product.name + if product_category.products + hr + h4= product_category.name + hr + ul.product_category-products + each product in product_category.products + li + a{action addProduct product}= product.name + span.right.currency=currency product.price .large-6.columns= render 'product_orders' diff --git a/app/assets/javascripts/user/app/templates/product_orders.emblem b/app/assets/javascripts/user/app/templates/product_orders.emblem index 1fa2087e..a00f417f 100644 --- a/app/assets/javascripts/user/app/templates/product_orders.emblem +++ b/app/assets/javascripts/user/app/templates/product_orders.emblem @@ -1,6 +1,6 @@ hr.hide-for-medium-up if model - a.tiny.button.right{action clearProductOrders} href="#" x + a.tiny.button.right{action clearProductOrders} href="#" × .clearfix .panel ul.product-orders @@ -9,11 +9,13 @@ if model = product_order.quantity | x = product_order.product.name + a.product_order-remove.right{action removeProductOrder product_order} + span.fa.fa-close.fa-lg x span.currency=currency product_order.total else li= t 'product_orders.no_orders' li.total = t 'product_orders.total' - span.currency=currency orderTotal + span.right.currency=currency orderTotal if model a.tiny.button.right{action orderProducts} href="#"= t 'product_orders.order_button' diff --git a/app/assets/stylesheets/user/foundation/product-orders.css.sass b/app/assets/stylesheets/user/foundation/product-orders.css.sass index c7106d7a..3596f76b 100644 --- a/app/assets/stylesheets/user/foundation/product-orders.css.sass +++ b/app/assets/stylesheets/user/foundation/product-orders.css.sass @@ -6,3 +6,8 @@ ul.product-orders border-bottom: none border-top: 4px solid #333 font-weight: bold + .product_order-remove + color: black + background-color: #bbb + padding: 0px 5px + margin-left: 5px diff --git a/app/assets/stylesheets/user/foundation/product_categories.css.sass b/app/assets/stylesheets/user/foundation/product_categories.css.sass new file mode 100644 index 00000000..e3eaf8b1 --- /dev/null +++ b/app/assets/stylesheets/user/foundation/product_categories.css.sass @@ -0,0 +1,2 @@ +ul.product_category-products + list-style: none diff --git a/app/controllers/users/lists_controller.rb b/app/controllers/users/lists_controller.rb new file mode 100644 index 00000000..9c7a3588 --- /dev/null +++ b/app/controllers/users/lists_controller.rb @@ -0,0 +1,12 @@ +module Users + class ListsController < Users::ApplicationController + #EMBER + def current + list = current_user.active_list + render json: json_response(not_present: true) and return unless list.present? + render json: { + list: list.serialized_with_status_join_requests_and_supplier_counters, + }.merge(ActiveModel::ArraySerializer.new(list.supplier.product_categories, each_serializer: ProductCategorySerializer, root: :product_categories).as_json) + end + end +end diff --git a/config/locales/user.en.yml b/config/locales/user.en.yml index 76a7dd5d..f0a1154d 100644 --- a/config/locales/user.en.yml +++ b/config/locales/user.en.yml @@ -23,6 +23,7 @@ en: active_list: title: Active list needs_payment: Check please! + no_orders_explanation: You did not order anything list_products: title: Order history_list: diff --git a/config/locales/user.nl.yml b/config/locales/user.nl.yml index 40d1200d..ced5c5d2 100644 --- a/config/locales/user.nl.yml +++ b/config/locales/user.nl.yml @@ -22,6 +22,7 @@ nl: active_list: title: Actieve lijst needs_payment: Rekening vragen! + no_orders_explanation: Je hebt nog niks besteld list_products: title: Bestel history_list: diff --git a/config/routes.rb b/config/routes.rb index 9bb89d36..e4632674 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -71,6 +71,11 @@ Qwaiter::Application.routes.draw do namespace :users, path: '/user' do resources :product_categories, only: [:index] + resources :lists, only: [] do + collection do + get :current + end + end end