public async Task <HttpResponseMessage> SpendingsByCategoryChart(MonthComparisonChartRequestDTO request)
        {
            var isSecondCat = request.SecondCatId.HasValue && !request.IsFinance && request.SecondCatId != 0 && request.SecondCatId != 9999 ? true : false;
            var catId       = isSecondCat ? request.SecondCatId.Value : request.CatId;

            var catName = request.IsFinance
                ? (await financeService.GetAsync(catId)).Name
                : await baseService.GetCategoryName(catId);

            var dictionary = new Dictionary <string, MonthComparisonChartVM[]>
            {
                { catName, (await spendingService.GetSpendingsByCategoryAndMonthAsync(request.DateFilter, catId, isSecondCat, request.IsFinance)).ToArray() }
            };

            var results = dictionary.Values.ToList();

            if (!results[0].Any())
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, "No results"));
            }


            string secondCategory = !isSecondCat ? "" : $"- ({results[0].First().SecondCategory})";

            var summaries = new List <ChartSummaryVM>
            {
                new ChartSummaryVM
                {
                    Title           = string.Format("{0} Chart for {1} {2}", "Spendings", results[0].First().Category, secondCategory),
                    AveragedDaily   = Utils.ChartsHeaderTitle(results[0], ChartHeaderTitleType.Daily),
                    AveragedMonthly = Utils.ChartsHeaderTitle(results[0], ChartHeaderTitleType.Monthly),
                    TotalSpent      = Utils.ChartsHeaderTitle(results[0], ChartHeaderTitleType.Total)
                }
            };


            // make subcats datasets
            if (request.SecondCatId.HasValue && request.SecondCatId.Value == 9999)
            {
                int secondTypeId = await baseService.GetSecondTypeId(catId);

                var categories = await baseService.GetAllCategories((CategoryType)secondTypeId, false);

                if (categories.Any())
                {
                    foreach (var cat in categories)
                    {
                        dictionary.Add(cat.Name, (await spendingService.GetSpendingsByCategoryAndMonthAsync(request.DateFilter, cat.Id, isSecondCat: true, isFinance: false)).ToArray());
                    }
                }

                dictionary.Remove(catName);
            }

            // if fuel cat then check fuel in ds2
            if (request.CatId == 1 && request.SecondCatId == 28)
            {
                request.DateFilter.DateField = "PayDate";
                string amzVanFuelInLabel = "AMZ Fleet Van Fuel In";

                dictionary.Add(amzVanFuelInLabel, (await cnwService.GetFuelInByMonthAsync(request.DateFilter)).ToArray());

                summaries.Add(new ChartSummaryVM
                {
                    Title           = amzVanFuelInLabel,
                    AveragedDaily   = Utils.ChartsHeaderTitle(dictionary[amzVanFuelInLabel], ChartHeaderTitleType.Daily),
                    AveragedMonthly = Utils.ChartsHeaderTitle(dictionary[amzVanFuelInLabel], ChartHeaderTitleType.Monthly),
                    TotalSpent      = Utils.ChartsHeaderTitle(dictionary[amzVanFuelInLabel], ChartHeaderTitleType.Total)
                });
            }

            return(Request.CreateResponse(HttpStatusCode.OK,
                                          new ChartVM
            {
                Labels = Utils.ChartLabels(results),
                Summary = summaries,
                Data = dictionary
            }
                                          ));
        }
 public async Task <ActionResult <FinanceDto> > GetAsync(int id)
 {
     return(await _financeService.GetAsync(id));
 }