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