Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXTREME 13.1 Demos/DXSK8/DXSK8.Phone/views/
Upload File :
Current File : C:/Users/Public/Documents/DXTREME 13.1 Demos/DXSK8/DXSK8.Phone/views/OrdersOverview.js

DXSK8.Phone.OrdersOverview = function (params) {

    DXSK8.Phone.filteredOrdersIds = DXSK8.Phone.filteredOrdersIds || {};
    DXSK8.Phone.productNameForFiltering = DXSK8.Phone.productNameForFiltering || "";

    var ORDER_STATES = DXSK8.ORDER_STATES;

    var viewModel = {
        ordersOverview: [
            {
                name: ORDER_STATES["new"].name,
                state: ORDER_STATES["new"].id,
                imageCss: "image-placeholder-new",
                cssClass: "very-important",
                quantity: ko.observable(0)
            },
            {
                name: ORDER_STATES["in-progress"].name,
                state: ORDER_STATES["in-progress"].id,
                imageCss: "image-placeholder-in-progress",
                cssClass: "important",
                quantity: ko.observable(0)
            },
            {
                name: ORDER_STATES["completed"].name,
                state: ORDER_STATES["completed"].id,
                imageCss: "image-placeholder-completed",
                quantity: ko.observable(0)
            },
            {
                name: ORDER_STATES["out-of-stock"].name,
                state: ORDER_STATES["out-of-stock"].id,
                imageCss: "image-placeholder-out-of-stock",
                quantity: ko.observable(0)
            }
        ],

        productNameForFiltering: ko.observable(DXSK8.Phone.productNameForFiltering)
    };

    var cacheOrderIds = function (orderItems, orderState) {
        var ordersIds = [];
        $.each(orderItems, function (i) {
            ordersIds.push(this.items[0].Order.Id);
        });
        DXSK8.Phone.filteredOrdersIds[orderState] = ordersIds;
    };

    var loadOrders = function(name) {
        $.each(viewModel.ordersOverview, function (index, orderOverviewItem) {
            if (orderOverviewItem.state != undefined) {
                var filter = [["Order.State", orderOverviewItem.state]];
                if(name) {
                    filter.push(["Product.Name", "contains", name]);
                }
                
                DXSK8.db.OrderItems.createQuery()
                    .select("Order.Id")
                    .filter(filter)
                    .groupBy("Order.Id")
                    .enumerate()
                    .done(function (orderItems) {
                        cacheOrderIds(orderItems, orderOverviewItem.state);
                        orderOverviewItem.quantity(Object.keys(orderItems).length);
                    });
            }
        });
    };

    viewModel.productNameForFiltering.subscribe(function (value) {
        DXSK8.Phone.productNameForFiltering = value;
        loadOrders(value);
    });
    
    loadOrders(viewModel.productNameForFiltering());

    return viewModel;
};