Fix ordering product issues by reverting emberization of product ordering

This commit is contained in:
2014-08-29 15:30:41 +02:00
parent aac47d3b51
commit ad4ad6bbb9
8 changed files with 54 additions and 50 deletions
@@ -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)->
@@ -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()
@@ -1,6 +1,4 @@
hr.hide-for-medium-up
if modelDisabled
a.tiny.button.right{action "clearProductOrders"} href="#" ×
.clearfix
.panel
ul.product-orders
+13 -5
View File
@@ -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
+2 -2
View File
@@ -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)
+2 -2
View File
@@ -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
+4
View File
@@ -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