public static SalesByDateGraphViewModel Build(IUnitOfWork db, PeriodType periodType, ValueType valueType) { var result = new SalesByDateGraphViewModel(); var items = db.Items.GetSalesInfoByDayAndMarket().ToList(); var labels = new List <string>(); IList <int> unitSeries = new List <int>(); IList <decimal> priceSeries = new List <decimal>(); var startDate = DateHelper.GetAppNowTime().Date; if (periodType == PeriodType.Day) { startDate = DateHelper.GetAppNowTime().Date; } if (periodType == PeriodType.Week) { startDate = startDate.AddDays(-7); } if (periodType == PeriodType.Month) { startDate = startDate.AddDays(-31); } var periodItems = items.Where(it => it.Date >= startDate).ToList(); periodItems.Where(pi => pi.Market == (int)MarketType.eBay).ToList().ForEach(pi => pi.MarketplaceId = null); var byMarket = periodItems.GroupBy(i => new { i.Market, i.MarketplaceId }) .Select(i => new { Market = i.Key.Market, MarketplaceId = i.Key.MarketplaceId, Price = i.Sum(j => j.Price), Quantity = i.Sum(j => j.Quantity) }); foreach (var item in byMarket) { labels.Add(MarketHelper.GetMarketName(item.Market, item.MarketplaceId)); unitSeries.Add(item.Quantity); priceSeries.Add(item.Price); } result.PriceSeries = new [] { priceSeries }; result.UnitSeries = new [] { unitSeries }; result.Labels = new[] { labels }; return(result); }
public static SalesByDateGraphViewModel Build(IUnitOfWork db, PeriodType periodType, ValueType valueType) { var result = new SalesByDateGraphViewModel(); var items = db.Items.GetSalesInfoByDayAndItemStyle().ToList(); var labels = new List <string>(); IList <int> unitSeries = new List <int>(); IList <decimal> priceSeries = new List <decimal>(); var startDate = DateHelper.GetAppNowTime().Date; if (periodType == PeriodType.Day) { startDate = DateHelper.GetAppNowTime().Date; } if (periodType == PeriodType.Week) { startDate = startDate.AddDays(-7); } if (periodType == PeriodType.Month) { startDate = startDate.AddDays(-31); } var periodItems = items.Where(it => it.Date >= startDate).ToList(); var byMarket = periodItems.GroupBy(i => new { i.ItemStyle }) .Select(i => new { ItemStyle = i.Key.ItemStyle, Price = i.Sum(j => j.Price), Quantity = i.Sum(j => j.Quantity < 0 ? 0 : j.Quantity) }); foreach (var item in byMarket) { labels.Add(String.IsNullOrEmpty(item.ItemStyle) ? "n/a" : item.ItemStyle); unitSeries.Add(item.Quantity); priceSeries.Add(item.Price); } result.PriceSeries = new [] { priceSeries }; result.UnitSeries = new [] { unitSeries }; result.Labels = new [] { labels }; return(result); }
public static SalesByDateGraphViewModel Build(IUnitOfWork db, PeriodType periodType, ValueType valueType) { var result = new SalesByDateGraphViewModel(); var statusListToExclude = valueType == ValueType.FBAOrder ? OrderStatusEnumEx.AllUnshippedWithShipped.ToList() : new List <string>(); var items = OrderValueTypes.Contains(valueType) ? db.Orders.GetSalesInfoByDayAndMarket(statusListToExclude).ToList() : db.Items.GetSalesInfoByDayAndMarket().ToList(); IList <string> labelSeries1 = new List <string>(); IList <string> labelSeries2 = new List <string>(); IList <int> unitSeries1 = new List <int>(); IList <int> unitSeries2 = new List <int>(); IList <decimal> priceSeries1 = new List <decimal>(); IList <decimal> priceSeries2 = new List <decimal>(); IList <string> generalLabelSeries = new List <string>(); var startDate = DateHelper.GetAppNowTime().Date; if (periodType == PeriodType.Day) { var dayCount = 7 + 5; //decimal coefficient = 1.3M; decimal coefficient = 0; for (var i = 0; i <= 7; i++) { var date = startDate.AddDays(-i - 1); //Exclude today var prevDate = date.AddYears(-1).AddDays(1); //Task: lets do weekly and 3 month comparison to be be compared to previous year. var dateItems = items.Where(it => it.Date == date).ToList(); var prevDateItems = items.Where(it => it.Date == prevDate).ToList(); var currentPeriodSum = dateItems.Sum(d => d.Quantity); var prevPeriodSum = prevDateItems.Sum(d => d.Quantity); if (prevPeriodSum != 0) { coefficient += (currentPeriodSum - prevPeriodSum) / (decimal)prevPeriodSum; } } coefficient = 1 + coefficient / 7; startDate = startDate.AddDays(5); for (int i = dayCount - 1; i >= 0; i--) { var date = startDate.AddDays(-i - 1); //Exclude today var prevDate = date.AddYears(-1).AddDays(1); //Task: lets do weekly and 3 month comparison to be be compared to previous year. var dateItems = items.Where(it => it.Date == date).ToList(); var prevDateItems = items.Where(it => it.Date == prevDate).ToList(); if (i >= 5) { priceSeries1.Add(dateItems.Sum(d => d.Price)); } else { priceSeries1.Add(prevDateItems.Sum(d => d.Price) * coefficient); } priceSeries2.Add(prevDateItems.Sum(d => d.Price)); if (i >= 5) { unitSeries1.Add(dateItems.Sum(d => d.Quantity)); } else { unitSeries1.Add((int)((decimal)prevDateItems.Sum(d => d.Quantity) * coefficient)); } unitSeries2.Add(prevDateItems.Sum(d => d.Quantity)); labelSeries1.Add(date.ToString("MM/dd/yyyy")); labelSeries2.Add(prevDate.ToString("MM/dd/yyyy")); generalLabelSeries.Add(date.ToString("MM/dd")); } } if (periodType == PeriodType.Week) { var weekCount = 12; for (int i = weekCount - 1; i >= 0; i--) { var dateTo = startDate.AddDays(-i * 7 - 1); //Exclude today var dateFrom = dateTo.AddDays(-7); var prevDateTo = dateTo.AddYears(-1); //Task: lets do weekly and 3 month comparison to be be compared to previous year. var prevDateFrom = prevDateTo.AddDays(-7); var dateItems = items.Where(it => it.Date < dateTo && it.Date >= dateFrom).OrderBy(x => x.Date).ToList(); var prevDateItems = items.Where(it => it.Date < prevDateTo && it.Date >= prevDateFrom).ToList(); priceSeries1.Add(dateItems.Sum(d => d.Price)); priceSeries2.Add(prevDateItems.Sum(d => d.Price)); unitSeries1.Add(dateItems.Sum(d => d.Quantity)); unitSeries2.Add(prevDateItems.Sum(d => d.Quantity)); labelSeries1.Add(dateFrom.ToString("yyyy") + ": " + dateFrom.ToString("MM/dd") + "-" + dateTo.ToString("MM/dd")); labelSeries2.Add(prevDateFrom.ToString("yyyy") + ": " + prevDateFrom.ToString("MM/dd") + "-" + prevDateTo.ToString("MM/dd")); generalLabelSeries.Add(dateFrom.ToString("MM/dd") + "-" + dateTo.ToString("MM/dd")); } } if (periodType == PeriodType.Month) { var monthCount = 12; for (int i = monthCount; i > 0; i--) { var date = startDate.AddMonths(-i); var prevDate = date.AddMonths(-monthCount); var dateItems = items.Where(it => it.Date.Month == date.Month && it.Date.Year == date.Year).ToList(); var prevDateItems = items.Where(it => it.Date.Month == prevDate.Month && it.Date.Year == prevDate.Year).ToList(); priceSeries1.Add(dateItems.Sum(d => d.Price)); priceSeries2.Add(prevDateItems.Sum(d => d.Price)); unitSeries1.Add(dateItems.Sum(d => d.Quantity)); unitSeries2.Add(prevDateItems.Sum(d => d.Quantity)); labelSeries1.Add(date.ToString("MM/yyyy")); labelSeries2.Add(prevDate.ToString("MM/yyyy")); generalLabelSeries.Add(date.ToString("MM/yyyy")); } } result.PriceSeries = new[] { priceSeries1, priceSeries2 }; result.UnitSeries = new[] { unitSeries1, unitSeries2 }; result.Labels = new[] { labelSeries1, labelSeries2, generalLabelSeries }; foreach (var series in result.PriceSeries) { for (var i = 0; i < series.Count; i++) { series[i] = Math.Round(series[i]); } } return(result); }