private async Task <FederationViewModel> BuildFullFederationViewModelAsync(long fuid, TabType tab, ChartGroupType chartGroup, UnitType unitType)
        {
            var vm = new FederationViewModel(fuid, _benchmarkBasketService.GetSchoolBenchmarkList());

            vm.HistoricalCharts.AddRange(_historicalChartBuilder.Build(tab, chartGroup, vm.EstablishmentType, unitType));
            vm.HistoricalCharts.AddRange(_historicalChartBuilder.Build(TabType.Workforce, DetectDefaultChartGroupFromTabType(TabType.Workforce), vm.EstablishmentType, UnitType.AbsoluteCount));
            vm.ChartGroups = _historicalChartBuilder.Build(tab, vm.EstablishmentType).DistinctBy(c => c.ChartGroup).ToList();
            vm.LatestTerm  = await LatestFederationTermAsync();

            vm.Tab = tab;

            vm.ContextData = await _contextDataService.GetSchoolDataObjectByUrnAsync(fuid);

            vm.HistoricalFinancialDataModels = await GetFinancialDataHistoricallyAsync(fuid);

            _fcService.PopulateHistoricalChartsWithFinancialData(vm.HistoricalCharts, vm.HistoricalFinancialDataModels, vm.LatestTerm, vm.Tab, unitType, vm.EstablishmentType);
            _fcService.PopulateHistoricalChartsWithFinancialData(vm.HistoricalCharts, vm.HistoricalFinancialDataModels, vm.LatestTerm, TabType.Workforce, UnitType.AbsoluteCount, vm.EstablishmentType);

            vm.SchoolsInFederation = await _contextDataService.GetMultipleSchoolDataObjectsByUrnsAsync(vm.FederationMembersURNs.ToList());

            vm.LaName = _laService.GetLaName(vm.La.ToString());

            return(vm);
        }
 public async Task AddHistoricalChartsAsync(TabType tabType, ChartGroupType chartGroup, CentralFinancingType cFinance, UnitType unitType)
 {
     SchoolVM.HistoricalCharts.AddRange(_historicalChartBuilder.Build(tabType, chartGroup, SchoolVM.EstablishmentType, unitType));
     SchoolVM.HistoricalFinancialDataModels.AddRange(await this.GetFinancialDataHistoricallyAsync(SchoolVM.Id, SchoolVM.EstablishmentType, SchoolVM.Tab == TabType.Workforce ? CentralFinancingType.Exclude : cFinance));
     _fcService.PopulateHistoricalChartsWithFinancialData(SchoolVM.HistoricalCharts, SchoolVM.HistoricalFinancialDataModels, SchoolVM.LatestTerm, tabType, unitType, SchoolVM.EstablishmentType);
 }
        public async Task <ActionResult> Index(int?companyNo, int?uid = null, UnitType unit = UnitType.AbsoluteMoney, TabType tab = TabType.Expenditure, MatFinancingType financing = MatFinancingType.TrustAndAcademies, ChartFormat format = ChartFormat.Charts)
        {
            if (companyNo == null && uid.HasValue)
            {
                var trustFinance = await _financialDataService.GetTrustFinancialDataObjectByUidAsync(uid.GetValueOrDefault(), await LatestMATTermAsync());

                companyNo = trustFinance.CompanyNumber;
                return(RedirectToActionPermanent("Index", "Trust", new RouteValueDictionary {
                    { "companyNo", companyNo },
                    { "unit", unit },
                    { "tab", tab },
                    { "financing", financing },
                    { "format", format }
                }));
            }

            ChartGroupType chartGroup;

            switch (tab)
            {
            case TabType.Expenditure:
                chartGroup = ChartGroupType.TotalExpenditure;
                break;

            case TabType.Income:
                chartGroup = ChartGroupType.TotalIncome;
                break;

            case TabType.Balance:
                chartGroup = ChartGroupType.InYearBalance;
                break;

            default:
                chartGroup = ChartGroupType.All;
                break;
            }

            var trustVM = await BuildFullTrustVMAsync(companyNo.GetValueOrDefault(), tab, chartGroup, financing);

            if (!trustVM.HasLatestYearFinancialData)
            {
                if (trustVM.AcademiesInFinanceList.Count == 1)
                {
                    return(RedirectToActionPermanent("Detail", "School", new RouteValueDictionary {
                        { "urn", trustVM.AcademiesInFinanceList.First().URN }
                    }));
                }
                return(RedirectToActionPermanent("SuggestTrust", "TrustSearch", new RouteValueDictionary {
                    { "trustNameId", companyNo }
                }));
            }

            UnitType unitType;

            switch (tab)
            {
            case TabType.Workforce:
                unitType = UnitType.AbsoluteCount;
                break;

            case TabType.Balance:
                unitType = unit == UnitType.AbsoluteMoney || unit == UnitType.PerPupil || unit == UnitType.PerTeacher ? unit : UnitType.AbsoluteMoney;
                break;

            default:
                unitType = unit;
                break;
            }

            _fcService.PopulateHistoricalChartsWithFinancialData(trustVM.HistoricalCharts, trustVM.HistoricalFinancialDataModels, trustVM.LatestTerm, tab, unitType, EstablishmentType.Academies);

            ViewBag.Tab               = tab;
            ViewBag.ChartGroup        = chartGroup;
            ViewBag.UnitType          = unitType;
            ViewBag.Financing         = financing;
            ViewBag.ChartFormat       = format;
            ViewBag.EstablishmentType = EstablishmentType.MAT;

            return(View(trustVM));
        }