client/skr/models/SalesOrder.coffee in stockor-0.1.9 vs client/skr/models/SalesOrder.coffee in stockor-0.2
- old
+ new
@@ -1,35 +1,72 @@
class Skr.Models.SalesOrder extends Skr.Models.Base
props:
- id: {"type":"integer","required":true}
- visible_id: {"type":"integer","required":true}
- customer_id: {"type":"integer","required":true}
- location_id: {"type":"integer","required":true}
- shipping_address_id:{"type":"integer","required":true}
- billing_address_id: {"type":"integer","required":true}
- terms_id: {"type":"integer","required":true}
- order_date: {"type":"any","required":true}
- state: {"type":"integer"}
- is_revised: {"type":"boolean","required":true,"default":"false"}
- hash_code: {"type":"string","required":true}
- ship_partial: {"type":"boolean","required":true,"default":"false"}
+ id: {type:"integer"}
+ visible_id: {type:"visible_id"}
+ customer_id: {type:"integer"}
+ location_id: {type:"integer", default: ->
+ Skr.Models.Location.default.id
+ }
+ shipping_address_id:{type:"integer"}
+ billing_address_id: {type:"integer"}
+ terms_id: {type:"integer"}
+ order_date: {type:"date", default: ->
+ new Date
+ }
+ state: {type:"integer"}
+ is_revised: {type:"boolean", default:false}
+ hash_code: {type:"string"}
+ ship_partial: {type:"boolean", default:false}
+ form: "string"
po_num: "string"
- notes: "string"
+ notes: {type: "string"}
options: "any"
+ mixins: [ 'PrintSupport', 'HasVisibleId' ]
+
+ # optional attributes from details view
+ session:
+ customer_code: {type:"string"}
+ order_total: {type:"bigdec"}
+
+ derived:
+ total: deps: ['order_total'], fn: ->
+ @order_total or @lines.reduce( (t, l) ->
+ t.plus(l.total)
+ , _.bigDecimal(0))
+
enums:
state:
open: 1
complete: 5
canceled: 9
associations:
- customer: { model: "Customer" }
- location: { model: "Location" }
- terms: { model: "PaymentTerm" }
- billing_address: { model: "Address" }
- shipping_address: { model: "Address" }
- lines: { collection: "SoLine" }
- skus: { collection: "Sku" }
- pick_tickets: { collection: "PickTicket" }
- invoices: { collection: "Invoice" }
+ customer: { model: "Customer", required: true }
+ location: { model: "Location", required: true, default: ->
+ Skr.Models.Location.all.get(@location_id) if @location_id
+ }
+ terms: { model: "PaymentTerm" }
+ billing_address: { model: "Address" }
+ shipping_address: { model: "Address" }
+
+ invoices: { collection: "Invoice", inverse: 'sales_order' }
+ lines: { collection: "SoLine", inverse: 'sales_order', fk: 'sales_order_id', }
+ pick_tickets: { collection: "PickTicket", inverse: 'sales_order' }
+
+ events:
+ 'change:customer': 'onCustomerChange'
+ 'lines add remove change:total': 'onTotalChange'
+
+ onTotalChange: ->
+ @trigger('change', @, {})
+ @unCacheDerived('total')
+ @unset('order_total')
+
+ onCustomerChange: ->
+ return unless @isNew()
+ associations = ['billing_address', 'shipping_address']
+
+ @customer.withAssociations(associations).then =>
+ for name in associations
+ @associations.replace(@, name, @customer[name])