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/OrderItems.js

DXSK8.Phone.OrderItems = function (params) {
    var orderState = ko.observable();
    var utils = DXSK8.Phone.utils;
    var ORDER_STATES = DXSK8.ORDER_STATES;

    DXSK8.Phone.db.loadOrdersById(Number(params.id), ordersLoadComplete, function(ex) { });
    var orderItems = DXSK8.Phone.db.getOrderItemDataSource(Number(params.id));
    
    var viewModel = {
        viewShown: function() {
            orderItems.reload();
        },
        customerName: ko.observable(),
        customerImageSrc: ko.observable(),
        customerEmail: ko.observable(),
        orderItems: orderItems,
        handleBack: function() {
            var uri = "Orders";
            if (orderState() > -1) {
                uri += "/" + String(orderState());
            }
            DXSK8.app.navigate(uri);
        },

        orderState: orderState,
        completeOrder: function() {
            var popup = $("#popup").data("dxPopup");
            popup.show();
        },
        hidePopup: function() {
            var popup = $("#popup").data("dxPopup");
            popup.hide();
        }
    };

    viewModel.orderStateDesc = ko.computed(function() {
        var completed = 0,
            problems = 0,
        allItemsCount = viewModel.orderItems.items().length;

        $.each(viewModel.orderItems.items(), function(index, item) {
            var state = item.state();
            if(state === "use") {
                completed++;
            }
            if(state == "not-found") {
                problems++;
            }
        });
        
        if(problems) {
            if(orderState() == 0) {
                DXSK8.Phone.db.updateOrderState(Number(params.id), ORDER_STATES["out-of-stock"].id, function() { });
            }

            viewModel.orderState(ORDER_STATES["out-of-stock"].id);
            return problems + " item(s) not found";
        } else {
            if(completed === allItemsCount) {
                viewModel.orderState(ORDER_STATES["completed"].id);
                return "All items completed";
            } else if(completed > 0) {
                viewModel.orderState(ORDER_STATES["in-progress"].id);
                return completed + " from " + allItemsCount + " item(s) not completed";
            }
        }
    });

    viewModel.orderCompleted = ko.computed(function() {
        return viewModel.orderState() == ORDER_STATES["completed"].id;
    });

    viewModel.orderStateCssClass = ko.computed(function() {
        return "order-state-" + orderState();
    });

    function ordersLoadComplete(orders) {
        var order = orders[0];
        orderState(order.State);
        viewModel.customerName(utils.getPersonFullName(order.Customer.Person));
        viewModel.customerEmail(order.Customer.Person.Email);

        viewModel.customerImageSrc(DXSK8.getElementImageUrl(order.Customer));
    }

    function updateFilteredOrdersIds(currentOrderState) {
        var ids = DXSK8.Phone.filteredOrdersIds;
        if(!ids) {
            return;
        }

        if($.inArray(Number(params.id), ids[currentOrderState]) == -1) {
            ids[currentOrderState].push(Number(params.id));
            for(var state in ids) {
                if(Number(state) !== currentOrderState) {
                    var index = $.inArray(Number(params.id), ids[state]);
                    if(index > -1) {
                        ids[state].splice(index, 1);
                    }
                }
            }
        }
    }

    orderState.subscribe(updateFilteredOrdersIds);

    return viewModel;
};