Mini Kabibi Habibi
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;
};