jam-cloud/web/app/assets/javascripts/shopping_cart.js

127 lines
2.8 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.ShoppingCartScreen = function(app) {
var logger = context.JK.logger;
var jamTrackUtils = context.JK.JamTrackUtils;
var $screen = null;
var $content = null;
function beforeShow(data) {
loadShoppingCarts();
}
function afterShow(data) {
}
function afterHide() {
jamTrackUtils.checkShoppingCart();
}
function events() {
$screen.find("a.remove-cart").on('click', removeCart);
$screen.find("a.proceed-checkout").on('click', proceedCheckout);
}
function proceedCheckout(e) {
e.preventDefault();
if (!context.JK.currentUserId) {
window.location = '/client#/checkoutSignin';
}
else {
app.user().done(function(user) {
if(user.reuse_card) {
window.location = '/client#/checkoutOrder';
}
else {
window.location = '/client#/checkoutPayment';
}
})
}
}
function removeCart(e) {
e.preventDefault();
var options = {};
options.id = $(e.target).attr("cart-id");
rest.removeShoppingCart(options)
.done(loadShoppingCarts)
.fail(app.ajaxError);
}
function clearContent() {
$content.empty();
}
function loadShoppingCarts() {
clearContent();
rest.getShoppingCarts()
.done(renderShoppingCarts)
.fail(app.ajaxError);
}
function renderShoppingCarts(carts) {
var data = {};
var latest_cart = carts[carts.length - 1];
var $latestCartHtml = "";
if (latest_cart) {
$latestCartHtml = $(
context._.template(
$('#template-shopping-cart-header').html(),
latest_cart,
{variable: 'data'}
)
);
}
var sub_total = 0;
$.each(carts, function(index, cart) {
sub_total += parseFloat(cart.product_info.price) * parseFloat(cart.quantity);
});
data.sub_total = sub_total.toFixed(2);
data.carts = carts;
var $cartsHtml = $(
context._.template(
$('#template-shopping-cart-body').html(),
data,
{variable: 'data'}
)
);
$content.append($latestCartHtml).append($cartsHtml);
events();
}
function initialize() {
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow,
'afterHide' : afterHide
};
app.bindScreen('shoppingCart', screenBindings);
$screen = $("#shoppingCartScreen");
$content = $screen.find(".shopping-cart-content");
if($screen.length == 0) throw "$screen must be specified";
if($content.length == 0) throw "$content must be specified";
}
this.initialize = initialize;
return this;
}
})(window,jQuery);