/*************************************************************/ /* Methods that enable the Views to fetch the desired accounts * /*************************************************************/ /** Yearly ER - Fetch main-groups **/ public async Task <YearViewModel> FetchMainGroupsForYearlyER(StructureType selectedType, int mostRecentFinancialYear, int selectedYear, int selectedLevel) { int previousYear = selectedYear - 1; var years = new List <int> { previousYear, selectedYear }; bool isFunctionGroups = selectedType == StructureType.Functions || selectedType == StructureType.FunctionsThenSubjects; var query = GetQueryForErAccounts(isFunctionGroups, years, selectedLevel); List <AccountYearViewModel> allAccounts = await query.ToListAsync(); List <AccountYearViewModel> accountsForPreviousYear = allAccounts.Where(a => a.Year == previousYear).OrderBy(a => a.AccountId).ToList(); List <AccountYearViewModel> accountsForSelectedYear = allAccounts.Where(a => a.Year == selectedYear).OrderBy(a => a.AccountId).ToList(); SetPercentChangesBetweenTwoYears(accountsForPreviousYear, accountsForSelectedYear, mostRecentFinancialYear, selectedYear); YearTotalsViewModel totalsForSelectedYear = GetTotalsForYears(years, allAccounts, mostRecentFinancialYear).FirstOrDefault(y => y.Year == selectedYear); return(new YearViewModel { Year = selectedYear, Accounts = accountsForSelectedYear, AccountYearTotals = totalsForSelectedYear }); }
private List <YearTotalsViewModel> GetTotalsForYears(List <int> years, List <AccountYearViewModel> allAccounts, int mostRecentFinancialYear) { List <YearTotalsViewModel> totalsForSelectedYears = new List <YearTotalsViewModel>(); for (int i = 0; i < years.Count; i++) { var accSelectedY = allAccounts.Where(a => a.Year == years[i]).ToList(); bool hasAcc = accSelectedY.Any(); YearTotalsViewModel ts = new YearTotalsViewModel { Year = years[i] }; if (hasAcc) { ts.ExpensesActualTotal = accSelectedY.Where(a => a.Year == years[i]).Select(a => a.ExpensesActual).Sum(); ts.ExpensesBudgetTotal = accSelectedY.Where(a => a.Year == years[i]).Select(a => a.ExpensesBudget).Sum(); ts.IncomeActualTotal = accSelectedY.Where(a => a.Year == years[i]).Select(a => a.IncomeActual).Sum(); ts.IncomeBudgetTotal = accSelectedY.Where(a => a.Year == years[i]).Select(a => a.IncomeBudget).Sum(); ts.BalanceActualTotal = (ts.IncomeActualTotal ?? 0) - (ts.ExpensesActualTotal ?? 0); ts.BalanceBudgetTotal = (ts.IncomeBudgetTotal ?? 0) - (ts.ExpensesBudgetTotal ?? 0); } else { totalsForSelectedYears.Add(ts); continue; } // If a previous year exists and contains at least one account, calculate percentage of changes if (i > 0 && allAccounts.Any(a => a.Year == years[i - 1])) { // Get totals of previous year YearTotalsViewModel totalsOfPY = totalsForSelectedYears[i - 1]; ts.HasPreviousYear = true; if (years[i] <= mostRecentFinancialYear) { ts.PercentageChangeExpensesActualTotal = _helpers.GetPercentageChange(totalsOfPY.ExpensesActualTotal, ts.ExpensesActualTotal); ts.PercentageChangeIncomeActualTotal = _helpers.GetPercentageChange(totalsOfPY.IncomeActualTotal, ts.IncomeActualTotal); ts.PercentageChangeBalanceActualTotal = _helpers.GetPercentageChange(totalsOfPY.BalanceActualTotal, ts.BalanceActualTotal); } else if (years[i] == (mostRecentFinancialYear + 1)) { ts.PercentageChangeExpensesBudgetTotal = _helpers.GetPercentageChange(totalsOfPY.ExpensesActualTotal, ts.ExpensesBudgetTotal); ts.PercentageChangeIncomeBudgetTotal = _helpers.GetPercentageChange(totalsOfPY.IncomeActualTotal, ts.IncomeBudgetTotal); ts.PercentageChangeBalanceBudgetTotal = _helpers.GetPercentageChange(totalsOfPY.BalanceActualTotal, ts.BalanceBudgetTotal); } else if (years[i] > (mostRecentFinancialYear + 1)) { ts.PercentageChangeExpensesBudgetTotal = _helpers.GetPercentageChange(totalsOfPY.ExpensesBudgetTotal, ts.ExpensesBudgetTotal); ts.PercentageChangeIncomeBudgetTotal = _helpers.GetPercentageChange(totalsOfPY.IncomeBudgetTotal, ts.IncomeBudgetTotal); ts.PercentageChangeBalanceBudgetTotal = _helpers.GetPercentageChange(totalsOfPY.BalanceBudgetTotal, ts.BalanceBudgetTotal); } } totalsForSelectedYears.Add(ts); } return(totalsForSelectedYears); }