Mini Kabibi Habibi
(function() {
var DECK_ID = "1",
WHEELS_ID = "2",
TRUCK_ID = "3",
ACCES_ID = "4",
CLOTH_ID = "5",
SHOES_ID = "6",
SESSION_ORDERID_KEY = "DXCurrentOrderId";
var cart = {
items: {},
containsProduct: function(product) {
return this.containsCategory(product) && product.Id === this.items[product.Type.Id]().Id;
},
containsCategory: function(product) {
return product && product.Type && this.items[product.Type.Id]();
},
remove: function(product) {
this.items[product.Type.Id](null);
cart.totalPrice(Number(cart.totalPrice()) - Number(product.Price));
},
_createOrder: function(product) {
DXSK8.db.Orders.insert({
"Customer": DXSK8.db.objectLink("Logins", 1),
"OrderDate": new Date()
}).done(function (order, newId) {
sessionStorage.setItem(SESSION_ORDERID_KEY, newId);
cart._updateOrderItem(newId, product);
});
},
_updateOrderItem: function (orderId, product) {
DXSK8.db.OrderItems.insert({
"Order": DXSK8.db.objectLink("Orders", orderId),
"Product": DXSK8.db.objectLink("Products", product.Id),
}).done(function () {
//B233553
var nowInCart = cart.containsCategory(product);
if($.inArray(String(product.Type.Id), [DECK_ID, WHEELS_ID, TRUCK_ID])!= -1 && !!nowInCart) {
cart.remove(nowInCart);
}
cart.items[product.Type.Id](product);
cart.totalPrice(Number(cart.totalPrice()) + Number(product.Price));
});
},
add: function (product) {
var sessionOrderID = sessionStorage.getItem(SESSION_ORDERID_KEY);
if(!sessionOrderID || sessionOrderID == "undefined") {
DXSK8.db.Orders.load({ filter: [["State", 0], ["Customer.Id", 1]] }).done(function(orders) {
$.each(orders, function(index, order) {
DXSK8.db.Orders.remove(order.Id);
});
});
cart._createOrder(product);
} else {
cart._updateOrderItem(Number(sessionOrderID), product);
}
}
};
var createCartItemModel = function(categoryId, categoryName, imageSrc) {
cart.items[categoryId] = ko.observable(null);
return ko.computed(function() {
var product = cart.items[categoryId]();
return {
imageSrc: product ? product.__metadata.media_src : "images/" + imageSrc,
text: product ? product.Name : categoryName + "<br/>Not ordered",
filled: !!product
};
});
};
cart.deck = createCartItemModel(DECK_ID, "Deck", "empty_deck.png");
cart.truck = createCartItemModel(TRUCK_ID, "Truck", "empty_truck.png");
cart.wheels = createCartItemModel(WHEELS_ID, "Wheel", "empty_wheel.png");
cart.accessories = createCartItemModel(ACCES_ID, "Accessories", "empty_deck.png");
cart.clothing = createCartItemModel(CLOTH_ID, "Clothing", "empty_deck.png");
cart.shoes = createCartItemModel(SHOES_ID, "Shoes", "empty_deck.png");
cart.totalPrice = ko.observable(0);
cart.totalPriceFormat = ko.computed(function () {
if (Number(cart.totalPrice())) {
return Globalize.format(Number(cart.totalPrice()), "C");
}
return "";
});
DXSK8.cart = cart;
})();