public List<Orders> DemandToOrders(List<ItemFlow> itemFlows)
{
#region ProcessOrderQty
var query = from i in itemFlows
where i.ReqQty > 0
group i by new { i.LocTo, i.Item } into g
select new { g.Key, list = g.ToList(), Count = g.Count() };
if (query != null && query.Count() > 0)
{
foreach (var g in query)
{
if (g.Count == 1)
{
ItemFlow itemFlow = itemFlows.Single(i => i.Equals(g.list[0]));
this.ProcessOrderQty(itemFlow);
}
else
{
//to be testing
ItemFlow winBidItemFlow = this.BidItemFlow(g.list);
ItemFlow itemFlow = itemFlows.SingleOrDefault(i => i.Equals(winBidItemFlow));
this.ProcessOrderQty(itemFlow);
}
}
}
#endregion
List<Orders> result = new List<Orders>();
#region Emergency Orders
List<Orders> emOrders = this.BuildOrders(itemFlows, true);
result = result.Concat(emOrders).ToList();
#endregion
#region Normal Orders
List<Orders> nmlOrders = this.BuildOrders(itemFlows, false);
result = result.Concat(nmlOrders).ToList();
#endregion
#region Filter
result = result.Where(r => (r.IsEmergency && r.ItemFlows.Count > 0)
|| (!r.IsEmergency && (r.Flow.IsUpdateWindowTime || r.ItemFlows.Count > 0))).ToList();
#endregion
return result;
}