public async Task <ChartViewModel> CreateAsync()
        {
            var results = await _parkRepository.GetAllOrdersAsync();

            var products = await _parkRepository.GetShopProductsAsync();

            var count = new decimal[products.Length];

            var itemsPurchased = results.Sum(r => r.Items.Sum(i => i.Quantity));

            foreach (var order in results)
            {
                foreach (var item in order.Items)
                {
                    count[Array.FindIndex(products, p => p.ProductId == item.ProductId)] += item.Quantity;
                }
            }

            for (int i = 0; i < products.Length; i++)
            {
                count[i] = (count[i] / itemsPurchased) * 100m;
            }

            var builder = new ChartBuilder(ChartType.pie)
                          .AddDataX(products.Select(p => p.Name).ToArray())
                          .AddDatasetY(count,
                                       dp: 2,
                                       label: "% of all purchased items"
                                       )
                          .AddBackgroundColors()
                          .SetTitle("Percentage of items purchased from all shop orders")
                          .SetDuration(2)
                          .SetMaintainAspectRatio(true, true);

            var chart = builder.GetChart();

            return(new ChartViewModel(chart));
        }
Ejemplo n.º 2
0
 public async Task <ProductModel[]> GetShopProductsAsync()
 {
     return(_mapper.Map <ProductModel[]>(await _parkRepository.GetShopProductsAsync()));
 }