public GridJsonNetJObjectResult <Program> IndexGridJsonData()
        {
            var gridSpec = new ProgramGridSpec(CurrentPerson, null);
            var programs = HttpRequestStorage.DatabaseEntities.Programs.ToList().OrderBy(x => x.ProgramName).ToList();
            var gridJsonNetJObjectResult = new GridJsonNetJObjectResult <Program>(programs, gridSpec);

            return(gridJsonNetJObjectResult);
        }
        public GridJsonNetJObjectResult <Program> ProgramGridJsonData(OrganizationPrimaryKey organizationPrimaryKey)
        {
            var organization             = organizationPrimaryKey.EntityObject;
            var gridSpec                 = new ProgramGridSpec(CurrentPerson, organization);
            var programs                 = organization.Programs.ToList();
            var gridJsonNetJObjectResult = new GridJsonNetJObjectResult <Program>(programs, gridSpec);

            return(gridJsonNetJObjectResult);
        }
        public DetailViewData(Person currentPerson,
                              Models.Organization organization,
                              MapInitJson mapInitJson,
                              bool hasSpatialData,
                              List <Models.PerformanceMeasure> performanceMeasures,
                              ViewGoogleChartViewData expendituresDirectlyFromOrganizationViewGoogleChartViewData,
                              ViewGoogleChartViewData expendituresReceivedFromOtherOrganizationsViewGoogleChartViewData,
                              bool atLeastOneAgreementHasFile) : base(currentPerson)
        {
            Organization = organization;
            PageTitle    = organization.DisplayName;
            EntityName   = $"{Models.FieldDefinition.Organization.GetFieldDefinitionLabel()}";
            UserHasOrganizationManagePermissions = new OrganizationManageFeature().HasPermissionByPerson(CurrentPerson);

            EditOrganizationUrl = SitkaRoute <OrganizationController> .BuildUrlFromExpression(c => c.Edit(organization));

            EditBoundaryUrl =
                SitkaRoute <OrganizationController> .BuildUrlFromExpression(c => c.EditBoundary(organization));

            DeleteOrganizationBoundaryUrl =
                SitkaRoute <OrganizationController> .BuildUrlFromExpression(
                    c => c.DeleteOrganizationBoundary(organization));

            ProjectsIncludingLeadImplementingGridSpec =
                new ProjectsIncludingLeadImplementingGridSpec(organization, CurrentPerson, false)
            {
                ObjectNameSingular  = $"{Models.FieldDefinition.Project.GetFieldDefinitionLabel()}",
                ObjectNamePlural    = $"{Models.FieldDefinition.Project.GetFieldDefinitionLabelPluralized()} associated with {organization.DisplayName}",
                SaveFiltersInCookie = true
            };
            ProjectOrganizationsGridName    = "projectOrganizationsFromOrganizationGrid";
            ProjectOrganizationsGridDataUrl =
                SitkaRoute <OrganizationController> .BuildUrlFromExpression(
                    tc => tc.ProjectsIncludingLeadImplementingGridJsonData(organization));

            AgreementOrganizationsGridSpec = new AgreementGridSpec(CurrentPerson, atLeastOneAgreementHasFile, false, false)
            {
                CustomExcelDownloadUrl = SitkaRoute <OrganizationController> .BuildUrlFromExpression(tc => tc.AgreementsExcelDownload(organization.PrimaryKey))
            };
            AgreementOrganizationsGridName    = "agreementOrganizationsFromOrganizationGrid";
            AgreementOrganizationsGridDataUrl =
                SitkaRoute <OrganizationController> .BuildUrlFromExpression(
                    tc => tc.AgreementOrganizationGridJsonData(organization));

            ProjectStewardOrLeadImplementorFieldDefinitionName = MultiTenantHelpers.HasCanStewardProjectsOrganizationRelationship()
                ? Models.FieldDefinition.ProjectsStewardOrganizationRelationshipToProject.GetFieldDefinitionLabel()
                : "Lead Implementer";

            ProjectGrantAllocationExpendituresForOrganizationGridSpec =
                new ProjectGrantAllocationExpendituresForOrganizationGridSpec(organization)
            {
                ObjectNameSingular  = $"{Models.FieldDefinition.Project.GetFieldDefinitionLabel()} {Models.FieldDefinition.ReportedExpenditure.GetFieldDefinitionLabel()}",
                ObjectNamePlural    = $"{Models.FieldDefinition.Project.GetFieldDefinitionLabel()} {Models.FieldDefinition.ReportedExpenditure.GetFieldDefinitionLabelPluralized()}",
                SaveFiltersInCookie = true
            };

            ProjectGrantAllocationExpendituresForOrganizationGridName    = "projectCalendarYearExpendituresForOrganizationGrid";
            ProjectGrantAllocationExpendituresForOrganizationGridDataUrl =
                SitkaRoute <OrganizationController> .BuildUrlFromExpression(
                    tc => tc.ProjectGrantAllocationExpendituresForOrganizationGridJsonData(organization));

            // Might be too weak; do we want to make this more specific?
            ManageGrantAllocationsUrl = SitkaRoute <GrantController> .BuildUrlFromExpression(c => c.Index());

            IndexUrl = SitkaRoute <OrganizationController> .BuildUrlFromExpression(c => c.Index());

            MapInitJson    = mapInitJson;
            HasSpatialData = hasSpatialData;
            ExpendituresDirectlyFromOrganizationViewGoogleChartViewData       = expendituresDirectlyFromOrganizationViewGoogleChartViewData;
            ExpendituresReceivedFromOtherOrganizationsViewGoogleChartViewData = expendituresReceivedFromOtherOrganizationsViewGoogleChartViewData;

            PerformanceMeasureChartViewDatas = performanceMeasures.Select(x => organization.GetPerformanceMeasureChartViewData(x, currentPerson)).ToList();

            ShowProposals        = currentPerson.CanViewProposals;
            ProposalsPanelHeader = MultiTenantHelpers.ShowApplicationsToThePublic()
                ? Models.FieldDefinition.Application.GetFieldDefinitionLabelPluralized()
                : $"{Models.FieldDefinition.Application.GetFieldDefinitionLabelPluralized()} (Not Visible to the Public)";

            ProposalsGridSpec =
                new ProjectsIncludingLeadImplementingGridSpec(organization, CurrentPerson, true)
            {
                ObjectNameSingular  = $"{Models.FieldDefinition.Application.GetFieldDefinitionLabel()}",
                ObjectNamePlural    = $"{Models.FieldDefinition.Application.GetFieldDefinitionLabelPluralized()} associated with {organization.DisplayName}",
                SaveFiltersInCookie = true
            };

            ProposalsGridName    = "proposalsGrid";
            ProposalsGridDataUrl =
                SitkaRoute <OrganizationController> .BuildUrlFromExpression(
                    tc => tc.ProposalsGridJsonData(organization));


            ProgramGridSpec =
                new ProgramGridSpec(CurrentPerson, organization)
            {
                ObjectNameSingular  = $"{Models.FieldDefinition.Program.GetFieldDefinitionLabel()}",
                ObjectNamePlural    = $"{Models.FieldDefinition.Program.GetFieldDefinitionLabelPluralized()} associated with {organization.DisplayName}",
                SaveFiltersInCookie = true
            };

            ProgramGridName    = "organizationProgramGrid";
            ProgramGridDataUrl =
                SitkaRoute <ProgramController> .BuildUrlFromExpression(
                    tc => tc.ProgramGridJsonData(organization));

            ShowPendingProjects = currentPerson.CanViewPendingProjects;

            PendingProjectsGridSpec =
                new ProjectsIncludingLeadImplementingGridSpec(organization, CurrentPerson, true)
            {
                ObjectNameSingular  = $"{Models.FieldDefinition.Project.GetFieldDefinitionLabel()}",
                ObjectNamePlural    = $"{Models.FieldDefinition.Project.GetFieldDefinitionLabelPluralized()} associated with {organization.DisplayName}",
                SaveFiltersInCookie = true
            };

            PendingProjectsGridName    = "pendingProjectsGrid";
            PendingProjectsGridDataUrl =
                SitkaRoute <OrganizationController> .BuildUrlFromExpression(
                    tc => tc.PendingProjectsGridJsonData(organization));

            TenantHasCanStewardProjectsOrganizationRelationship = MultiTenantHelpers.HasCanStewardProjectsOrganizationRelationship();
            var allAssociatedProjects = Organization.GetAllAssociatedProjectsForOrgVisibleToUser(CurrentPerson);

            NumberOfStewardedProjects = allAssociatedProjects
                                        .Distinct()
                                        .Count(x => x.IsActiveProject() && x.GetCanStewardProjectsOrganization() == Organization);
            NumberOfLeadImplementedProjects = allAssociatedProjects
                                              .Distinct()
                                              .Count(x => x.IsActiveProject() && x.GetPrimaryContactOrganization() == Organization);
            NumberOfProjectsContributedTo = allAssociatedProjects.Distinct().ToList().GetActiveProjectsVisibleToUser(currentPerson).Count;
        }