public RegionStockItem(string region, int quantity, RegionStockItemStatus status, IEnumerable <WarehouseAvailableStockItem> warehouseAvailableStocks, DateTime version)
 {
     Region   = region;
     Quantity = quantity;
     Status   = status;
     _warehouseAvailableStocks = warehouseAvailableStocks.ToList();
     Version = version;
 }
        public RegionStockItem ApplyStockChanges(WarehouseAvailableStockItem warehouseAvailableAvailableStock)
        {
            if (warehouseAvailableAvailableStock == null)
            {
                throw new ArgumentNullException();
            }

            if (_warehouseAvailableStocks != null)
            {
                var index =
                    _warehouseAvailableStocks.FindIndex(
                        (x) =>
                        (x.Sku == warehouseAvailableAvailableStock.Sku &&
                         x.FulfilmentCentre == warehouseAvailableAvailableStock.FulfilmentCentre));
                if (index > -1)
                {
                    _warehouseAvailableStocks.RemoveAt(index);
                    _warehouseAvailableStocks.Insert(index, warehouseAvailableAvailableStock);
                }
                else
                {
                    _warehouseAvailableStocks.Add(warehouseAvailableAvailableStock);
                }
            }
            else
            {
                _warehouseAvailableStocks = new List <WarehouseAvailableStockItem> {
                    warehouseAvailableAvailableStock
                };
            }

            Quantity = WarehouseAvailableStocks.Sum(x => x.Pickable - (x.Allocated + x.Reserved));

            if (Status == null)
            {
                Status = new RegionStockItemStatus(10, StockStatus.OutOfStock);
            }

            Status.Evaluate(Quantity);

            Version = warehouseAvailableAvailableStock.Version;

            return(this);
        }