// 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 ))); }