public bool ProcessUnassignedOrders(int deliverySlotId)
        {
            bool retVal = false;
            var  orders = orderDataService.GetUnassignedOrdersbyDeliverySlot(deliverySlotId);

            foreach (var order in orders)
            {
                retVal = false;
                var orderPossibilities = optimizationEngine.SearchBestAvailbalities(order, order.OrderDetails);

                if (orderPossibilities != null && orderPossibilities.Count > 0)
                {
                    foreach (var orderPossibility in orderPossibilities)
                    {
                        var orderAssignmentList = new List <OrderAssignment>();

                        foreach (var r in orderPossibility.OrderOptimizedDetails)
                        {
                            var orderAssignment = new OrderAssignment();

                            orderAssignment.OrderDetailID       = r.OrderDetailID;
                            orderAssignment.SupplierInventoryID = r.SupplierInventoryID;
                            orderAssignment.Qty = r.Qty;
                            orderAssignment.SupplierAcknowledgement = false;
                            orderAssignment.BuyerAcknowledgement    = false;
                            orderAssignment.VehicleAcknowledgement  = false;
                            orderAssignment.IsDeleted = false;

                            orderAssignmentList.Add(orderAssignment);

                            var supllierInventory = supplierInventoryDataService.GetSupplierInventory(r.SupplierInventoryID);
                            supllierInventory.ProcessingQty = supllierInventory.ProcessingQty - r.Qty;
                            supllierInventory.AvailableQty  = supllierInventory.AvailableQty - r.Qty;
                            supplierInventoryDataService.UpdateSupplierInventory(supllierInventory);
                        }

                        this.orderDataService.AddOrderAssignment(orderAssignmentList);
                    }

                    var curOrder = this.orderDataService.GetOrder(order.ID);
                    order.Status = 2;
                    this.orderDataService.UpdateOrder();
                }
                retVal = true;
            }
            return(retVal);
        }
        public IEnumerable <OrderOptimizedPossibilityDto> SearchPossibilities(Order order, List <OrderDetail> orderDetails)
        {
            //var order = new Order
            //{
            //    ID = orderDto.ID,
            //    OrderRefNo = orderDto.OrderRefNo,
            //    BuyerId = orderDto.BuyerId,
            //    OrderedDate = DateTime.Today,
            //    ExpectedDiliveredDate = orderDto.ExpectedDiliveredDate,
            //    IsPreOrder = orderDto.IsPreOrder,
            //    Status = orderDto.Status,   //1-Active, 2-Hold, 3-Procedded, 4- Cancelled
            //    DeliverySlotId = orderDto.DeliverySlotId,
            //    SupplierCategory = orderDto.SupplierCategory
            //};

            //var orderDetails = orderDto.OrderDetails.Select(od => new OrderDetail()
            //{
            //    ID = od.ID,
            //    StandardInventoryId = od.ItemID,
            //    Qty = od.Qty,
            //    IsDeleted = false
            //}).ToList();

            var standardInventories = standardInventoryBusinessEntity.GetStandardInventories();
            var orderDetailStandardInventoryData = from od in orderDetails
                                                   join si in standardInventories on od.StandardInventoryId equals si.ID
                                                   select new
            {
                OrderDetailId       = od.ID,
                StandardInventoryId = si.ID,
                si.ItemName,
                si.QuantityUnitOfMeasureName
            };
            var supplierBases = supplierBaseService.GetAllSupplierBases();

            var orderPossibilities = optimizationEngine.SearchBestAvailbalities(order, orderDetails);

            if (orderPossibilities == null || orderPossibilities.Count() == 0)
            {
                return(null);
            }
            var orderPossibilityDtos = orderPossibilities.Select(
                p => new OrderOptimizedPossibilityDto()
            {
                SupplierBaseId = p.SupplierBaseId,
                SupplierBase   = supplierBases.Where(x => x.SupplierBaseId == p.SupplierBaseId).FirstOrDefault().SupplierBaseName,
                DeliveryCost   = p.DeliveryCost,
                ItemCost       = p.ItemCost,
                OrderValue     = p.OrderValue,
                OrderOptimizedPossibilityId = p.OrderOptimizedPossibilityId,
                OrderPossibilityType        = p.OrderPossibilityType,
                OrderOptimizedDetails       = p.OrderOptimizedDetails.Select(
                    r => new OrderOptimizedDetailDto()
                {
                    OrderDetailID       = r.OrderDetailID,
                    ItemName            = orderDetailStandardInventoryData.Where(a => a.OrderDetailId == r.OrderDetailID).FirstOrDefault().ItemName,
                    UnitOfMeasureName   = orderDetailStandardInventoryData.Where(a => a.OrderDetailId == r.OrderDetailID).FirstOrDefault().QuantityUnitOfMeasureName,
                    SupplierQuality     = r.SupplierQuality,
                    SupplierInventoryID = r.SupplierInventoryID,
                    Qty       = r.Qty,
                    UnitPrice = r.UnitPrice,
                    Value     = r.Value
                }).ToList()
            });

            return(orderPossibilityDtos);
        }