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 b59686e6..99a4ec5a 100644 --- a/app/assets/javascripts/user/app/controllers/application_controller.js.coffee +++ b/app/assets/javascripts/user/app/controllers/application_controller.js.coffee @@ -69,11 +69,12 @@ App.ApplicationController = Ember.Controller.extend orders_placed_count: (data)-> @set 'list.supplier.orders_placed_count', data.count new_order: (data)-> - return if @store.all('order').findProperty('id', data.order.id) + # return if @store.all('order').findProperty('id', data.order.id) @store.pushPayload data - @store.findById('order', data.order.id).then (order)-> - list = order.get('list') - list.get('orders').addObject(order) + @store.findById('list', data.list.id).then (list)=> @set 'controllers.application.list', list + # @store.findById('order', data.order.id).then (order)-> + # list = order.get('list') + # list.get('orders').addObject(order) setCurrentList: (callback)-> 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 28281c12..c8bf729d 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,42 +7,35 @@ App.ProductOrdersController = Ember.ArrayController.extend product_orders: (->@get('model')).property('model') showTotal: (-> if @get('model.length') && @get('model.length') > 1 then true else false ).property('model.length') actions: - clearProductOrders: -> - #TODO: make clearing of unpersisted product orders - @store.all('product_order').toArray().invoke 'eraseRecord' + # clearProductOrders: -> + # #TODO: make clearing of unpersisted product orders + # @get('product_orders').invoke 'eraseRecord' orderProducts: -> - table = @get('controllers.table.model') - list = @get('controllers.application.list') - order = @store.createRecord('order', list: list, table: table) - new_product_orders = @store.all('product_order').filterProperty('order', null) - order.get('product_orders').pushObjects(new_product_orders) - #error = @ajaxError (jqXHR)=> - #new_product_orders.invoke 'eraseRecord' - #@redirect_to 'index', message: 'order_could_not_be_processed' + # table = @get('controllers.table.model') + # list = @get('controllers.application.list') + # order = @store.createRecord('order', list: list, table: table) + # new_product_orders = @store.all('product_order').filterProperty('order', null) + # order.get('product_orders').pushObjects(new_product_orders) + # + # order.save().then (response)=> + # new_product_orders.invoke 'eraseRecord' + # if @get('controllers.application.list') + # @transitionToRoute 'active_list' + # else + # # Get list info from the server + # @get('controllers.application').setCurrentList -> + # @transitionToRoute 'active_list' + # , @ajaxError (jqXHR)=> + # new_product_orders.invoke 'eraseRecord' + # @redirect_to 'index', message: 'order_could_not_be_processed' - order.save().then (response)=> - new_product_orders.invoke 'eraseRecord' - if @get('controllers.application.list') - @transitionToRoute 'active_list' - else - # Get list info from the server - @get('controllers.application').setCurrentList -> - @transitionToRoute 'active_list' - , @ajaxError (jqXHR)=> - new_product_orders.invoke 'eraseRecord' - @redirect_to 'index', message: 'order_could_not_be_processed' #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' + #data = @get('product_orders').map( (po)->po.serialize() ) + dataObject = order: {table_id: @get('controllers.table.model.id')} + @get('product_orders').forEach (product_order)-> dataObject['order'][product_order.get('product.id')] = product_order.get('quantity') + Ember.$.post "#{$data_host}/user/orders.json", dataObject + @transitionToRoute 'active_list' + @get('product_orders').invoke 'unloadRecord' removeProductOrder: (product_order)-> product_order.eraseRecord() diff --git a/app/assets/javascripts/user/app/templates/product_orders.emblem b/app/assets/javascripts/user/app/templates/product_orders.emblem index 3b469229..2afad1fc 100644 --- a/app/assets/javascripts/user/app/templates/product_orders.emblem +++ b/app/assets/javascripts/user/app/templates/product_orders.emblem @@ -1,6 +1,4 @@ hr.hide-for-medium-up -if modelDisabled - a.tiny.button.right{action "clearProductOrders"} href="#" × .clearfix .panel ul.product-orders diff --git a/app/assets/javascripts/waiter/app/templates/table.emblem b/app/assets/javascripts/waiter/app/templates/table.emblem index 1b15435a..31a79779 100644 --- a/app/assets/javascripts/waiter/app/templates/table.emblem +++ b/app/assets/javascripts/waiter/app/templates/table.emblem @@ -3,14 +3,14 @@ if product_orders a.tiny.button.right{action clearProductOrders} href="#" x h4 = t 'models.table' - | + | = number .panel ul.product-orders each product_order in product_orders li = product_order.quantity - | x + | x = product_order.product.name span.currency=currency product_order.total else diff --git a/app/controllers/users/orders_controller.rb b/app/controllers/users/orders_controller.rb index 5eec3ae8..a56de5c0 100644 --- a/app/controllers/users/orders_controller.rb +++ b/app/controllers/users/orders_controller.rb @@ -3,14 +3,21 @@ module Users respond_to :json # Used by the user Ember app + # POST /user/orders def create - render json: {}, status: :unprocessable_entity and return unless params[:order].present? && params[:order][:product_orders].present? - converted_order = params[:order][:product_orders].each_with_object({}){|po, o| o[po[:product_id]] = po[:quantity] } + # render json: {}, status: :unprocessable_entity and return unless params[:order].present? && params[:order][:product_orders].present? + # converted_order = params[:order][:product_orders].each_with_object({}){|po, o| o[po[:product_id]] = po[:quantity] } + converted_order = params[:order] + table_id = params[:order].delete('table_id') if list = current_user.active_list render json: {}, status: :not_acceptable and return unless list.supplier.open? else - render json: {}, status: :unprocessable_entity and return unless params[:order][:table_id].present? - table = Table.find(params[:order][:table_id]) + #TODO: More logic about creating a new list!!!!!, usercontroller table_info should become irrelevant + #NOTE: security bug here!!!!!! + # - supplier.open? + # - etc.... + render json: {}, status: :unprocessable_entity and return unless table_id.present? + table = Table.find(table_id) render json: {}, status: :not_acceptable and return unless table.supplier.open? if table.occupied? @@ -21,7 +28,8 @@ module Users list = List.from_table( table, current_user ) end order = list.place_order products: converted_order, user: current_user - render json: order, serializer: OrderSerializer + # render json: order, serializer: OrderSerializer + render nothing: true end end end diff --git a/app/models/list.rb b/app/models/list.rb index ae0f72d3..1217d40e 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -274,8 +274,8 @@ class List # broadcast_users 'new_order', order: order.with_products_as_json, total_amount: price - broadcast_users 'new_order', OrderSerializer.new(order).as_json - broadcast_users 'orders_placed_count', count: orders_placed_count + broadcast_users 'new_order', UserExtendedListSerializer.new(order.list).as_json + # broadcast_users 'orders_placed_count', count: orders_placed_count broadcast_supplier supplier.id, 'list_update', SupplierListSerializer.new(self).as_json # broadcast_supplier supplier.id, 'new_order', OrderSerializer.new(order) diff --git a/spec/acceptance_steps/order_steps.rb b/spec/acceptance_steps/order_steps.rb index a56e3967..ab35449f 100644 --- a/spec/acceptance_steps/order_steps.rb +++ b/spec/acceptance_steps/order_steps.rb @@ -17,8 +17,8 @@ step "the user order should be created as a new order" do row = find(".order-row-#{@order.id}") row['class'].should include 'placed' #page.should have_content 'Apple pie (1), Heineken beer (2)' - page.should have_content '1 x Apple pie' - page.should have_content '2 x Heineken beer' + page.should have_content '1 x Apple pie', count: 1 + page.should have_content '2 x Heineken beer', count: 1 page.should have_content '€ 8.96' end diff --git a/wip.md b/wip.md index 63e2514a..6be52167 100644 --- a/wip.md +++ b/wip.md @@ -59,9 +59,13 @@ Supplier - https://github.com/buytruckload/geonames_api - Section view - add order vinkjes (active, delivered) management to table actions (post release) +- Add opening hours to settings with special cases +- Add broadcast to current users option User ---- - Cleanup user controller - Subscribe to general faye channels [':version', 'mozo'] +- Post order on Facebook +- Split bill by user