var CartConfirm = FormView.extend({ el: "#cart_confirm", template: $("#cart_confirm .template").html(), events: { }, initialize: function(opt){ this.parent = opt.parent this.$rows = this.$(".rows") this.$subtotal = this.$(".subtotal") this.$shipping = this.$(".shipping") this.$tax = this.$(".tax") this.$total = this.$(".total") this.$shipping_address = this.$(".shipping_address") this.$shipping_method = this.$(".shipping_method") this.$payment_name = this.$(".payment_name") this.$payment_method = this.$(".payment_method") this.$payment_address = this.$(".payment_address") this.scroller = new IScroll('#cart_confirm', app.iscroll_options) }, show: function(){ document.body.className = "cart" app.cart.el.className = "confirm" app.footer.show("PLACE ORDER", "CANCEL") window.location.hash = "#/cart/confirm" this.deferScrollToTop() app.curtain.show("loading") promise(sdk.cart.get_status).then( this.populate.bind(this) ) }, populate: function(data){ console.log(data) data = data.Cart this.$rows.empty() data.Items.forEach(function(item){ var $el = $("
") this.$rows.append($el) var code_ten = item.Code10 var size_id = item.Size var code = code_ten.substr(0, 8) app.product.find(code, function(data, details){ var descriptions = app.product.get_descriptions( details ) 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 details.Item.ModelColors.some(function(color){ if (color['Code10'] == code_ten) { color_name = color['ColorDescription'] 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 }) // size_name = item.DefaultSize + " " + item.DefaultSizeClassFamily 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 || "DEFAULT") .replace(/{{color}}/, color_name || "DEFAULT") .replace(/{{quantity}}/, 1) .replace(/{{price}}/, as_cash(details.Item.Price.DiscountedPrice)) $el.data("price", details.Item.Price.DiscountedPrice) $el.html(t) this.refreshScroller() }.bind(this)) }.bind(this)) var subtotal = data.Totals.TotalWithoutPromotions var shipping_cost = data.DeliveryMethod.Selected.Amount.Total var tax = data.Totals.TotalSalesTax var total = data.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) ) var street = data.Receiver.StreetWithNumber.replace(/\n$/,"").replace("\n", ", ") var address = data.Receiver.Name.toUpperCase() + " " + data.Receiver.Surname.toUpperCase() + "
" + street + ", " address += data.Receiver.City + ", " + data.Receiver.Region + " " + data.Receiver.PostalCode this.$shipping_address.html(address) this.$shipping_method.html(data.DeliveryMethod.Selected.Type == 1 ? "* STANDARD SHIPPING" : "* EXPRESS SHIPPING") var cc = data.Payment.CreditCard var cc_street = cc.HolderAddress.replace(/\n$/,"").replace("\n", ", ") var cc_type = cc.Type == "AmericanExpress" ? "American Express" : cc.Type this.$payment_name.html( cc.HolderName.toUpperCase() + " " + cc.HolderSurname.toUpperCase() ) this.$payment_method.html( cc_type.toUpperCase() + " XXXX-XXXX-XXXX-" + cc.Last4 ) app.curtain.hide("loading") }, save: function(){ promise(sdk.cart.finalize, {}).then(function(){ app.router.go('cart/thanks') }.bind(this)).error(function(data){ // {"Header":{"StatusCode":403,"Description":"403 Forbidden"},"Error":{"Description":"GenericApiError:CartAlreadyClosed"}} // {"Header":{"StatusCode":409,"Description":"304 NotModified"},"Error":{"Description":"FinalizationError:\\"Item has been removed from cart because it is no longer available.\\"\\n235"}}' // {"Header":{"StatusCode":409,"Description":"304 NotModified"},"Error":{"Description":"FinalizationError:\"The cart cannot be empty.\"\n233"}} // {"Header":{"StatusCode":409,"Description":"304 NotModified"},"Error":{"Description":"FinalizationError:\"The reciever validation fails."}} // {"Header":{"StatusCode":440,"Description":"304 NotModified"},"Error":{"Description":"GenericApiError:CartFinalizationNotYetCompleted"}} // {"Header":{"StatusCode":441,"Description":"304 NotModified"},"Error":{"Description":"GenericApiError:EmptyCreditCard"}} switch (data.StatusCode) { case 403: // cart already closed auth.clear_cart(auth.create_cart) app.router.go('thanks') break case 409: // finalization error this.finalization_error(data) break case 440: // genericapierror (credit card error!) case 441: // genericapierror (credit card empty) app.router.go('cart/payment') app.cart.payment.show_errors([["Number","There was a problem with your credit card."]]) break } }.bind(this)) }, finalization_error: function(data){ if (data['Error']['Description'].match(/receiver validation fails/)) { app.router.go('cart/shipping') app.cart.payment.show_errors([["Number","There was a problem with your credit card."]]) } else if (data['Error']['Description'].match(/cart cannot be empty/)) { app.router.go('cart/summary') } else if (data['Error']['Description'].match(/Item has been removed/)) { app.router.go('cart/error') app.cart.error.show_error("We're sorry, but one or more items was out of stock. Please check your cart and try again.") } }, cancel: function(){ app.router.go('cart/payment') }, })