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