Example #1
0
        // GET: Charts
        public async Task <ActionResult> Chart(int?id, [Form] ChartQueryOptions chartQueryOptions)
        {
            ViewBag.chartQueryOptions = chartQueryOptions;

            if (id != null)
            {
                var results = await db.GetAll();

                var carResults = await dbCar.Get(id.GetValueOrDefault());

                if (results != null)
                {
                    var lastFuelingReceipt = results.Where(r => r.FueledCarId == id).Where(r => r.FuelType == TypeOfFuel.LPG);
                    if (lastFuelingReceipt.Count() == 0)
                    {
                        return(RedirectToAction("Index", "FuelReceipts", new { id }));
                    }
                    var lastFueling = lastFuelingReceipt.OrderByDescending(r => r.RefuelingDate).First().RefuelingDate;
                    var startDate   = chartQueryOptions.startingTimeRange > lastFueling ? lastFueling : chartQueryOptions.startingTimeRange;
                    ViewBag.startingdate = startDate;
                    var receiptViewModels = results.Where(vm => vm.FueledCarId == id).Where(vm => vm.RefuelingDate >= startDate).Select(vm => vm.ToViewModel());
                    var chartViewModel    = new ChartViewModel()
                    {
                        carId                  = carResults.Id,
                        carData                = $"{carResults.CarProducer} {carResults.CarModel}",
                        lpgConsumptionArray    = receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.LPG).Select(r => decimal.Round(r.FuelConsumption, 2, MidpointRounding.AwayFromZero)).ToArray(),
                        lpgPriceArray          = receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.LPG).Select(r => decimal.Round(r.PriceFor100km, 2, MidpointRounding.AwayFromZero)).ToArray(),
                        lpgDateTimesArray      = receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.LPG).Select(r => r.RefuelingDate.ToString("dd/MM/yyyy")).ToArray(),
                        petrolConsumptionArray = receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.Petrol).Select(r => decimal.Round(r.FuelConsumption, 2, MidpointRounding.AwayFromZero)).ToArray(),
                        petrolPriceArray       = receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.Petrol).Select(r => decimal.Round(r.PriceFor100km, 2, MidpointRounding.AwayFromZero)).ToArray(),
                        petrolDateTimesArray   = receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.Petrol).Select(r => r.RefuelingDate.ToString("dd/MM/yyyy")).ToArray(),
                        dieselConsumptionArray = receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.Diesel).Select(r => decimal.Round(r.FuelConsumption, 2, MidpointRounding.AwayFromZero)).ToArray(),
                        dieselPriceArray       = receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.Diesel).Select(r => decimal.Round(r.PriceFor100km, 2, MidpointRounding.AwayFromZero)).ToArray(),
                        dieselDateTimesArray   = receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.Diesel).Select(r => r.RefuelingDate.ToString("dd/MM/yyyy")).ToArray(),

                        averageFuelCons = decimal.Round(receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.LPG).Average(r => r.FuelConsumption), 2, MidpointRounding.AwayFromZero),
                        maxFuelCons     = decimal.Round(receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.LPG).Max(r => r.FuelConsumption), 2, MidpointRounding.AwayFromZero),
                        minFuelCons     = decimal.Round(receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.LPG).Min(r => r.FuelConsumption), 2, MidpointRounding.AwayFromZero),
                        avgPrice        = decimal.Round(receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.LPG).Average(r => r.PriceFor100km), 2, MidpointRounding.AwayFromZero),
                        totalDistance   = decimal.Round(receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.LPG).Sum(r => r.DistanceFromLastRefueling), 2, MidpointRounding.AwayFromZero),
                        totalPrice      = decimal.Round(receiptViewModels.Where(vm => vm.FuelType == TypeOfFuel.LPG).Sum(r => r.FuelAmount * r.FuelPrice), 2, MidpointRounding.AwayFromZero)
                    };
                    return(View(chartViewModel));
                }
                else
                {
                    return(RedirectToAction("Index", "FuelReceipts", new { id }));
                }
            }
            return(RedirectToAction("Index", "Cars"));
        }
        public static MvcHtmlString BuildChartTimeSelection(this HtmlHelper htmlHelper, ChartQueryOptions chartQueryOptions, string actionName)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);

            return(new MvcHtmlString(string.Format(
                                         "<div class=\"dropdown\">" +
                                         "   <a class=\"dropdown-toggle d-sm-inline-block btn btn-sm btn-secondary shadow-sm\" " +
                                         "   style=\"width: 170px\" href=\"#\" role=\"button\" id=\"dropdownMenuLink\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">" +
                                         "       <i class=\"fa fa-clock-o fa-sm text-white-50\"></i> {10}" +
                                         "   </a>" +
                                         "   <div class=\"dropdown-menu dropdown-menu-right shadow animated--fade-in\" aria-labelledby=\"dropdownMenuLink\">" +
                                         "       <a class=\"dropdown-item\" href=\"{0}\">{5}</a>" +
                                         "       <a class=\"dropdown-item\" href=\"{1}\">{6}</a>" +
                                         "       <a class=\"dropdown-item\" href=\"{2}\">{7}</a>" +
                                         "       <a class=\"dropdown-item\" href=\"{3}\">{8}</a>" +
                                         "       <a class=\"dropdown-item\" href=\"{4}\">{9}</a>" +
                                         "   </div>" +
                                         "</div>",
                                         urlHelper.Action(actionName, new
            {
                startingTimeRange = DateTime.Now.AddMonths(-1)
            }),
                                         urlHelper.Action(actionName, new
            {
                startingTimeRange = DateTime.Now.AddMonths(-3)
            }),
                                         urlHelper.Action(actionName, new
            {
                startingTimeRange = DateTime.Now.AddMonths(-6)
            }),
                                         urlHelper.Action(actionName, new
            {
                startingTimeRange = DateTime.Now.AddMonths(-12)
            }),
                                         urlHelper.Action(actionName, new
            {
                startingTimeRange = DateTime.MinValue
            }),
                                         RGlobal.LastMonth,
                                         RGlobal.Last3Months,
                                         RGlobal.Last6Months,
                                         RGlobal.LastYear,
                                         RGlobal.All,
                                         RGlobal.SelectTimeRange
                                         )));
        }