private void AddNewSales() { var newSales = _dbContext.Sales.Where(p => !p.InWarehouse).ToList(); var newSalesW = newSales.GroupBy(s => new { s.SaleDate, s.StoreStoreId, s.ProductProductId }) .Select(g => new { MoneySold = g.Sum(s => s.Price), UnitsSold = g.Count(), StoreStoreId = g.Key.StoreStoreId, ProductProductId = g.Key.ProductProductId, Day = g.Key.SaleDate.Day, Month = g.Key.SaleDate.Month, Year = g.Key.SaleDate.Year, SaleDate = g.Key.SaleDate }) .OrderBy(s => s.Year).ThenBy(s => s.Month).ThenBy(s => s.Day).ThenBy(s => s.StoreStoreId).ThenBy(s => s.ProductProductId); foreach (var sale in newSalesW) { int? dayId = _dwContext.Times.FirstOrDefault(t => t.Year == sale.Year && t.MonthNo == sale.Month && t.Day == sale.Day)?.TimeId; bool isNew = dayId == null; DwModels.Sales existingSale = null; if (isNew) { dayId = AddDay(sale.Day, sale.Month, sale.Year, sale.SaleDate.ToString("dddd", CultureInfo.InvariantCulture), sale.SaleDate.ToString("MMMM", CultureInfo.InvariantCulture)); } else { existingSale = _dwContext.Sales.FirstOrDefault(s => s.TimeTimeId == dayId && s.ProductProductId == sale.ProductProductId && s.StoreStoreId == sale.StoreStoreId); } AddSales(sale.UnitsSold, sale.MoneySold, dayId.Value, sale.ProductProductId, sale.StoreStoreId, existingSale); } foreach (var sale in newSales) { sale.InWarehouse = true; _dbContext.Entry(sale).State = EntityState.Modified; } }
private void AddSales(decimal unitsSold, decimal moneySold, int timeId, int productId, int storeId, DwModels.Sales existingSale) { if (existingSale == null) { var entity = new DwModels.Sales { UnitsSold = unitsSold, MoneySold = moneySold, TimeTimeId = timeId, ProductProductId = productId, StoreStoreId = storeId }; _dwContext.Sales.Add(entity); } else { existingSale.UnitsSold = unitsSold; existingSale.MoneySold = moneySold; _dwContext.Entry(existingSale).State = EntityState.Modified; } _dwContext.SaveChanges(); }