private ProductAvailability AddBaseAvailabilityForToday() { //Add availability info for today ProductAvailability todayAvailabilityInfo = new ProductAvailability() { Date = DateTime.Now.Date, ProductInfos = new HashSet<ProductAvailabilityDetail>() }; ProductAvailability lastInfo = _context.ProductAvailabilities .OrderByDescending(x => x.Date) .FirstOrDefault(x => x.Date.CompareTo(todayAvailabilityInfo.Date) < 0); if (lastInfo != null) { //We have data from previous availabilities, copy it over foreach (var oldDetail in lastInfo.ProductInfos) { todayAvailabilityInfo.ProductInfos.Add(new ProductAvailabilityDetail() { Amount = oldDetail.Amount, ProductId = oldDetail.ProductId, ProductAvailability = todayAvailabilityInfo }); } } _context.ProductAvailabilities.Add(todayAvailabilityInfo); return todayAvailabilityInfo; }
private void HandleProductAvailability(ReplenishmentDetail replenishment, ProductAvailability todayAvailabilityInfo) { var stockInfo = todayAvailabilityInfo.ProductInfos.SingleOrDefault(x => x.ProductId == replenishment.ProductId); if (stockInfo == null) { //We've replenished a new product todayAvailabilityInfo.ProductInfos.Add(new ProductAvailabilityDetail() { ProductId = replenishment.ProductId, Amount = replenishment.Amount, ProductAvailabilityId = todayAvailabilityInfo.Id }); } else { stockInfo.Amount += replenishment.Amount; } }
private void WriteReplenishmentDetailsToDB(IEnumerable<ReplenishmentDetail> replenishments, Replenishment newReplenishment, ProductAvailability todayAvailabilityInfo) { foreach (var replenish in replenishments) { var product = _context.Products.SingleOrDefault(x => x.Id == replenish.ProductId); if (product == null || product.IsActive == false) { throw new InvalidOperationException("You can't replenish deleted product " + product.Name); } replenish.Replenishment = newReplenishment; _context.ReplenishmentDetails.Add(replenish); HandleProductAvailability(replenish, todayAvailabilityInfo); } }
private void UpdateAvailabilities(IEnumerable<SaleDetail> saleDetails, Sale newSale, ProductAvailability todaysAvailability) { foreach (var saleDetail in saleDetails) { var product = _context.Products.SingleOrDefault(x => x.Id == saleDetail.ProductId); if (product == null || product.IsActive == false) { throw new InvalidOperationException("You can't sell deleted product " + product.Name); } saleDetail.Sale = newSale; _context.SaleDetails.Add(saleDetail); var stockInfo = todaysAvailability.ProductInfos.Single(x => x.ProductId == saleDetail.ProductId); stockInfo.Amount -= saleDetail.Amount; } }