Continue adding product variants
This commit is contained in:
@@ -45,6 +45,11 @@ App.MenuProductComponent = Ember.Component.extend
|
||||
product_variant.rollback()
|
||||
@get('product').rollback()
|
||||
@set 'editMode', false
|
||||
addProductVariant: ->
|
||||
product_variant = @get('targetObject.store').createRecord('product_variant')
|
||||
@get('product.product_variants').addObject product_variant
|
||||
removeProductVariant: (product_variant)->
|
||||
product_variant.destroyRecord()
|
||||
didInsertElement: ->
|
||||
@set 'editMode', true if @get('product.isNew')
|
||||
namePlaceholder: (-> t "attributes.product.name").property()
|
||||
|
||||
@@ -23,9 +23,15 @@ if editMode
|
||||
img src=product.image_src
|
||||
each product_variant in product.product_variants
|
||||
.row
|
||||
.small-3.medium-2.large-1.columns plus
|
||||
.small-9.medium-5.large-4.columns.end
|
||||
= input value=product_variant.name
|
||||
.small-1.columns
|
||||
.small-8.medium-5.large-4.columns= input value=product_variant.name
|
||||
.small-2.medium-6.large-7.columns
|
||||
button.remove-product-variant{action "removeProductVariant" product_variant}: span
|
||||
.row
|
||||
.small-12.columns
|
||||
button.add-product-variant{ action "addProductVariant"}
|
||||
span.icon
|
||||
= t 'product_variant.add_product_variant'
|
||||
else
|
||||
if showProduct
|
||||
.row
|
||||
|
||||
@@ -13,4 +13,4 @@ form.form-horizontal
|
||||
.form-field= number-field numericValue=number_end
|
||||
hr
|
||||
button.modal-close{action "close"}=t 'section.add_tables.modal.close_button'
|
||||
button.modal-confirm.right{action "addTables"}=t 'section.add_tables.modal.add_button'
|
||||
button.modal-confirm.right{action "ok"}=t 'section.add_tables.modal.add_button'
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
@ttry = (path, vars={})->
|
||||
@t(path, $.extend(vars, emptyWhenNotFound: true))
|
||||
|
||||
|
||||
# return translation in the form
|
||||
# <span data-t="models.table">Tafel</span>
|
||||
@tspan = (path, vars={}) -> "<span data-t='#{path}' class='translation' data-t-attributes='#{JSON.stringify(vars)}'>#{t(path, vars)}</span>"
|
||||
|
||||
@@ -4,11 +4,13 @@ App.MenuProductComponent = Ember.Component.extend
|
||||
specific_id: (-> "order-product-#{@get('product.id')}").property('product.id')
|
||||
orderProducts: false
|
||||
target: -> @get('parentView.targetObject')
|
||||
showDescriptionIcon: Ember.computed.or 'product.description', 'product.product_variants.length'
|
||||
|
||||
actions:
|
||||
addProduct: (product)->
|
||||
if existing = @target().store.all('product_order').find((po)-> po.get('product') == product and not po.get('order'))
|
||||
existing.increment()
|
||||
if product.get('product_variants.length')
|
||||
@target().modal 'product_variant_select', model: product
|
||||
else
|
||||
@target().store.createRecord 'product_order', product: product, price: product.get('price')
|
||||
product.addOrderItem()
|
||||
showProductDescription: (product)->
|
||||
@target().modal 'product_info', model: product, title: product.get('name')
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
@App.modals.ProductVariantSelectController = @App.modals.BaseController.extend
|
||||
actions:
|
||||
chooseProductVariant: (product_variant)->
|
||||
@get('model').addOrderItem(product_variant: product_variant.get('name'))
|
||||
@send 'close'
|
||||
@@ -31,10 +31,17 @@ App.ProductOrdersController = Ember.ArrayController.extend
|
||||
|
||||
#orders = @store.all('product_order').toArray()
|
||||
#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, (response) =>
|
||||
@store.pushPayload('order', response) if response.order
|
||||
dataObject = {table_id: @get('controllers.table.model.id')}
|
||||
dataObject.product_orders = @get('product_orders').map( (po) -> po.serialize()).toArray()
|
||||
#@get('product_orders').forEach (product_order)-> dataObject['order'][product_order.get('product.id')] = product_order.get('quantity')
|
||||
Ember.$.ajax
|
||||
type: 'POST'
|
||||
dataType: 'json'
|
||||
contentType: 'application/json'
|
||||
url: "#{$data_host}/user/orders.json"
|
||||
data: JSON.stringify(dataObject)
|
||||
success: (response) =>
|
||||
@store.pushPayload('order', response) if response.order
|
||||
@transitionToRoute 'active_list'
|
||||
@get('product_orders').invoke 'unloadRecord'
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
attr = DS.attr
|
||||
App.ProductVariant = DS.Model.extend
|
||||
name: attr 'string'
|
||||
product: DS.belongsTo 'product'
|
||||
position: attr 'number', defaultValue: 0
|
||||
@@ -6,5 +6,26 @@ App.Product = DS.Model.extend
|
||||
position: attr('number', defaultValue: 0)
|
||||
active: attr 'boolean', defaultValue: true
|
||||
image: attr()
|
||||
product_category: DS.belongsTo('product_category')
|
||||
product_orders: DS.hasMany('product_order')
|
||||
product_category: DS.belongsTo('product-category')
|
||||
product_orders: DS.hasMany('product-order')
|
||||
product_variants: DS.hasMany 'product-variant'
|
||||
sorted_product_variants: Ember.computed 'product_variants.@each.name', 'product_variants.@each.position', ->
|
||||
@get('product_variants').sortBy('position')
|
||||
|
||||
variantsDisplay: Ember.computed 'sorted_product_variants', ->
|
||||
@get('sorted_product_variants').mapBy('name').join(', ')
|
||||
|
||||
addOrderItem: (options = {})->
|
||||
#if existing = @store.all('product_order').find((po)-> po.get('product') == product and not po.get('order'))
|
||||
if options.product_variant
|
||||
existing = @get('product_orders').find( (po)-> !po.get('order') and po.get('product_variant') is options.product_variant )
|
||||
else
|
||||
existing = @get('product_orders').find( (po)-> !po.get('order') )
|
||||
|
||||
if existing
|
||||
existing.increment()
|
||||
else
|
||||
@store.createRecord 'product_order',
|
||||
product: this
|
||||
price: @get('price')
|
||||
product_variant: options.product_variant
|
||||
|
||||
@@ -4,12 +4,17 @@ App.ProductOrder = DS.Model.extend
|
||||
price: attr 'number'
|
||||
product_name: attr('string')
|
||||
product: DS.belongsTo('product')
|
||||
product_variant: attr('string')
|
||||
order: DS.belongsTo('order')
|
||||
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('price')).property('quantity', 'price')
|
||||
display: (-> "#{@get('quantity')} x #{@get('product.name')}").property('quantity', 'product.name')
|
||||
display: Ember.computed 'quantity', 'product_variant', 'product.name', ->
|
||||
disp = "#{@get('quantity')} x #{@get('product.name')}"
|
||||
if variant = @get('product_variant')
|
||||
disp = "#{disp} (#{variant})"
|
||||
disp.htmlSafe()
|
||||
setOrder: (order)->
|
||||
@set('placed', true)
|
||||
@set('order', order)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
if product.description
|
||||
if showDescriptionIcon
|
||||
button.show-product-description{action "showProductDescription" product}
|
||||
span
|
||||
else
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
if image
|
||||
.right: img src=image.small alt=""
|
||||
p==description
|
||||
if product_variants
|
||||
h4= t 'models.plural.product_variant'
|
||||
ul
|
||||
each product_variant in product_variants
|
||||
li= product_variant.name
|
||||
hr
|
||||
button{action "close"}= t 'modal.info.close'
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
if model.image
|
||||
.right: img src=model.image.small alt=""
|
||||
each product_variant in product_variants
|
||||
.row
|
||||
.small-8.columns: a{action "chooseProductVariant" product_variant}= product_variant.name
|
||||
.small-4.columns: a.choose-product-variant-button{action "chooseProductVariant" product_variant}= t 'product_variant.choose'
|
||||
hr
|
||||
button.modal-close{action "close"}= t 'modal.info.close'
|
||||
Reference in New Issue
Block a user