public List<SkuQtyInfo> GetAllSkuStatusInfo()
        {
            ASRSDataContext db = new ASRSDataContext();
            var skuStatusList = new List<SkuQtyInfo>();

            var front = (from s in db.IWS_ASRS_GetSkuStatusInfoByGroup("FRONT")
                         select new SkuQtyInfo
                         {
                             Sku = s.ItemNumber,
                             ShippingConveyor = s.ShippingConveyor,
                             ASRS = s.ASRS,
                             ASRSInboundPIT = s.ASRSInboundPIT,
                             Online = s.Online,
                             Pending = s.Pending,
                             Rework = s.Rework,
                             Group = s.Group
                         }).ToList();

            var rear = (from s in db.IWS_ASRS_GetSkuStatusInfoByGroup("REAR")
                         select new SkuQtyInfo
                         {
                             Sku = s.ItemNumber,
                             ShippingConveyor = s.ShippingConveyor,
                             ASRS = s.ASRS,
                             ASRSInboundPIT = s.ASRSInboundPIT,
                             Online = s.Online,
                             Pending = s.Pending,
                             Rework = s.Rework,
                             Group = s.Group
                         }).ToList();

            skuStatusList.AddRange(front);
            skuStatusList.AddRange(rear);
            return skuStatusList;
        }
        public List<ShipmentNotAvailable> GetShipment()
        {
            ASRSDataContext db = new ASRSDataContext();
            var hotshipments = new List<ShipmentNotAvailable>();

            var shipmentDetails = (from s in db.IWS_ASRS_GetShipmentRequirements()
                           select new ShipmentDetail
                           {
                               BroadcastType = s.BCSTTYPE,
                               LoadNumber = (long)s.SHIPMENT,
                               Qty = (int)s.QTY,
                               Sku = s.SKU
                           }).ToList();

            var inventory = GetAllSkuStatusInfo();


            long lastProcessLoadNum = 0;

            foreach (var item in shipmentDetails)
            {
                if (lastProcessLoadNum != 0 
                    && lastProcessLoadNum != item.LoadNumber
                    && !hotshipments.Where(l=>l.LoadNumber == lastProcessLoadNum).Any())
                {
                    //no hot seats on shipment
                    hotshipments.Add(new ShipmentNotAvailable
                    {
                        HotSeats = false,
                        BroadcastType = "G",
                        LoadNumber = lastProcessLoadNum,
                        Qty = 0,
                        Scheduled = 0,
                        Sku = "0",
                        Status = "Load Covered"
                    });
                }

                int shipmentQty = item.Qty;
                var sku = inventory.Where(s => s.Sku == item.Sku).FirstOrDefault();
                if (sku != null)
                {
                    int asrsQty = sku.ASRS;
                    string status = "";

                    //ASRS can satisfy the requirement
                    if (asrsQty >= shipmentQty)
                    {
                        sku.ASRS = sku.ASRS - item.Qty;
                    }
                    else
                    {
                        int requiredQty = shipmentQty - asrsQty;
                        int total = sku.ASRSInboundPIT + sku.ShippingConveyor + sku.Online + sku.Pending + sku.Rework;

                        if (sku.ASRSInboundPIT >= requiredQty)
                        {
                            sku.ASRSInboundPIT = sku.ASRSInboundPIT - requiredQty;
                            status = "At ASRS Inbound";
                        }
                        else
                        {
                            if ((sku.Rework + sku.ASRSInboundPIT) >= requiredQty)
                            {
                                sku.ASRSInboundPIT = 0;
                                sku.Rework = sku.Rework - requiredQty;
                                status = "At Repairs";
                            }
                            else
                            {
                                if ((sku.ShippingConveyor + sku.Rework + sku.ASRSInboundPIT) >= requiredQty)
                                {
                                    sku.ASRSInboundPIT = 0;
                                    sku.Rework = 0;
                                    sku.ShippingConveyor = sku.ShippingConveyor - requiredQty;
                                    status = "At Shipping Conveyor";
                                }
                                else
                                {
                                    if ((sku.Online + sku.ShippingConveyor + sku.Rework + sku.ASRSInboundPIT) >= requiredQty)
                                    {
                                        sku.ASRSInboundPIT = 0;
                                        sku.Rework = 0;
                                        sku.ShippingConveyor = 0;
                                        sku.Online = sku.Online - requiredQty;
                                        status = "Online";
                                    }
                                    else
                                    {
                                        if ((sku.Pending + sku.Online + sku.ShippingConveyor + sku.Rework + sku.ASRSInboundPIT) >= requiredQty)
                                        {
                                            sku.ASRSInboundPIT = 0;
                                            sku.Rework = 0;
                                            sku.ShippingConveyor = 0;
                                            sku.Online = 0;
                                            sku.Pending = sku.Pending - requiredQty;
                                            status = "Pending";
                                        }
                                    }
                                }
                            }
                        }

                        int totalPending = sku.ShippingConveyor + sku.Pending + sku.Online + sku.Rework + sku.ASRSInboundPIT;
                        if (totalPending - requiredQty < 0)
                        {
                            status = "Not Available";
                        }

                        hotshipments.Add(new ShipmentNotAvailable
                        {
                            HotSeats = true,
                            LoadNumber = item.LoadNumber,
                            Sku = item.Sku,
                            Scheduled = total - requiredQty,
                            Qty = requiredQty,
                            BroadcastType = item.BroadcastType,
                            Status = status,
                        });

                        sku.ASRS = 0;
   
                    }

                }
                else
                {
                    //sku does not exists must be hot seat
                    hotshipments.Add(new ShipmentNotAvailable
                    {
                        HotSeats = true,
                        LoadNumber = item.LoadNumber,
                        Sku = item.Sku,
                        Qty = shipmentQty,
                        Status = "Not Available At This Time.",
                    });
                }

                lastProcessLoadNum = item.LoadNumber;

            }

            return hotshipments;

        }