LeanEngine.Engine.DemandToOrders C# (CSharp) Method

DemandToOrders() public method

public DemandToOrders ( List itemFlows ) : List
itemFlows List
return List
        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;
        }