var CartSummary = ScrollableView.extend({ el: "#cart_summary", template: $("#cart_summary .template").html(), events: { "click .remove": "remove_item", }, data: null, initialize: function(opt){ this.parent = opt.parent this.$loader = this.$(".loader") this.$cart_body = this.$(".cart_body") this.$cart_empty = this.$(".cart_empty") this.scroller = new IScroll('#cart_summary', app.iscroll_options) this.$rows = this.$(".rows") this.$subtotal = this.$(".subtotal") this.$shipping = this.$(".shipping") this.$tax = this.$(".tax") this.$total = this.$(".total") }, show: function(){ document.body.className = "cart" app.cart.el.className = "summary" window.location.hash = "#/cart/summary" if (auth.has_cart()) { this.load() } else { this.empty() } }, load: function(){ this.el.className = "loading" app.footer.show("SHIPPING >", "CANCEL") app.curtain.show("loading") sdk.cart.get_status({ success: this.populate.bind(this), error: this.empty.bind(this), }) }, populate: function(data){ this.data = data console.log("CART", data) if (! data.Cart.Items || data.Cart.Items.length == 0) { return this.empty() } this.parent.$steps.show() this.updateCounts() this.$rows.empty() data.Cart.Items.forEach(function(item){ var code_ten = item['Code10'] var code = code_ten.substr(0, 8) var size_id = item['Size'] var $el = $("
").addClass("cart_item_row") $el.html("") $el.data({ code: code_ten, size: size_id, }) this.$rows.append($el) app.product.find(code, function(data, details){ // console.log(data, details) var descriptions = app.product.get_descriptions( details ) // console.log(descriptions) var name_partz = descriptions['ModelNames'].split(' ') var num = name_partz.shift() var title = name_partz.join(' ') var type = title_case( descriptions['MicroCategory'] ) var color_name, size_name // console.log(code) details.Item.ModelColors.some(function(color){ if (color['Code10'] == code_ten) { color_name = color['ColorDescription'] // console.log(color) return true } return false }) details.Item.ModelSizes.some(function(size){ if (size['SizeId'] == size_id) { // console.log(size) size_name = size['Default']['Text'] size_name = SIZE_LOOKUP[ size_name ] || size_name if (! size_name && ! size['Default']['Labeled']) { size_name = size['Default']['Text'] + " " + size['Default']['ClassFamily'] } return true } return false }) var t = this.template .replace(/{{image}}/, sdk.image(item['Code10'], '11_f')) .replace(/{{sku}}/, num) .replace(/{{title}}/, title) .replace(/{{type}}/, type) .replace(/{{size}}/, size_name) .replace(/{{color}}/, color_name) .replace(/{{quantity}}/, 1) .replace(/{{price}}/, as_cash(details.Item.Price.DiscountedPrice)) $el.html(t) this.refreshScroller() }.bind(this)) }.bind(this)) if (data.Cart.Receiver && data.Cart.Receiver.City) { app.cart.shipping.load_form( data ) } this.updateTotals() this.el.className = "full" this.refreshScroller() app.curtain.hide("loading") }, updateCounts: function(){ app.header.set_cart_count( this.data.Cart.Items.length ) this.parent.setHeaderCount( this.data.Cart.Items.length ) }, updateTotals: function(){ var subtotal = this.data.Cart.Totals.TotalWithoutPromotions var shipping_cost = this.data.Cart.DeliveryMethod.Selected.Amount.Total var tax = this.data.Cart.Totals.TotalSalesTax var total = this.data.Cart.Totals.TotalToPay this.$subtotal.html( as_cash(subtotal) ) this.$shipping.html( as_cash(shipping_cost) ) this.$tax.html( as_cash(tax) ) this.$total.html( as_cash(total) ) }, empty: function(){ app.footer.hide() app.header.set_cart_count(0) this.parent.setHeaderCount( 0 ) this.parent.$itemcount.html("0 ITEMS") this.el.className = "empty" this.parent.$steps.hide() }, save: function(){ app.router.go('cart/shipping') }, cancel: function(){ app.router.go('intro') }, remove_item: function(e){ var $el = $( e.currentTarget ).closest(".cart_item_row") var data = $el.data() console.log(this.data.Cart) this.data.Cart.Totals.TotalWithoutPromotions -= data.price this.data.Cart.Totals.TotalToPay -= data.price this.data.Cart.Items = this.data.Cart.Items.filter(function(item){ return ( item['Code10'] !== data.code || item['Size'] !== data.size) }) this.updateTotals() this.updateCounts() $el.remove() this.refreshScroller() if (this.data.Cart.Items.length == 0) { this.empty() } app.curtain.show("loading") sdk.cart.delete_item({ data: { Code10: data.code, Size: data.size, }, success: function(){ app.curtain.hide("loading") }, }) }, })