Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXTREME 13.1 Demos/DXSK8/DXSK8.Desktop/data/
Upload File :
Current File : C:/Users/Public/Documents/DXTREME 13.1 Demos/DXSK8/DXSK8.Desktop/data/cart.js

(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;
})();