public ProjectCustomGridConfigurationSimple(int projectCustomGridTypeID, ProjectCustomGridColumn projectCustomGridColumn, ProjectCustomAttributeType projectCustomAttributeType, GeospatialAreaType geospatialAreaType, bool isEnabled, int?sortOrder)
 {
     ProjectCustomGridTypeID        = projectCustomGridTypeID;
     ProjectCustomGridColumnID      = projectCustomGridColumn.ProjectCustomGridColumnID;
     ProjectCustomGridColumnName    = projectCustomGridColumn.ProjectCustomGridColumnDisplayName;
     ProjectCustomAttributeTypeID   = projectCustomAttributeType?.ProjectCustomAttributeTypeID;
     ProjectCustomAttributeTypeName = projectCustomAttributeType?.ProjectCustomAttributeTypeName;
     GeospatialAreaTypeID           = geospatialAreaType?.GeospatialAreaTypeID;
     GeospatialAreaTypeName         = geospatialAreaType?.GeospatialAreaTypeName;
     IsEnabled  = !projectCustomGridColumn.IsOptional || isEnabled;
     IsOptional = projectCustomGridColumn.IsOptional;
     SortOrder  = sortOrder;
 }
        public EditProjectCustomGridViewModel(int projectCustomGridTypeID, List <ProjectCustomGridConfiguration> projectCustomGridConfigurations, List <GeospatialAreaType> geospatialAreaTypes, List <ProjectFirmaModels.Models.ProjectCustomAttributeType> projectCustomAttributeTypes)
        {
            var projectCustomGridConfigurationSimples = new List <ProjectCustomGridConfigurationSimple>();
            var projectCustomGridColumns = GeneralUtility.EnumGetValues <ProjectCustomGridColumnEnum>();

            // Remove the Secondary Taxonomy Leaf Column if Tenant doesn't use them
            if (!MultiTenantHelpers.GetTenantAttributeFromCache().EnableSecondaryProjectTaxonomyLeaf)
            {
                projectCustomGridColumns = projectCustomGridColumns.Where(x => x != ProjectCustomGridColumnEnum.SecondaryTaxonomyLeaf).ToList();
            }
            // Remove the Project Status Column if Tenant doesn't use the timeline and status updates
            if (!MultiTenantHelpers.GetTenantAttributeFromCache().EnableStatusUpdates)
            {
                projectCustomGridColumns = projectCustomGridColumns.Where(x => x != ProjectCustomGridColumnEnum.ProjectStatus).ToList();
            }
            // Remove the Final Status Update Status Column if Tenant doesn't use the require submitting lessons learned
            if (!MultiTenantHelpers.GetTenantAttributeFromCache().EnableStatusUpdates)
            {
                projectCustomGridColumns = projectCustomGridColumns.Where(x => x != ProjectCustomGridColumnEnum.FinalStatusUpdateStatus).ToList();
            }
            // Remove the Project Type Column if Tenant doesn't use the attribute
            if (!MultiTenantHelpers.GetTenantAttributeFromCache().EnableProjectCategories)
            {
                projectCustomGridColumns = projectCustomGridColumns.Where(x => x != ProjectCustomGridColumnEnum.ProjectCategory).ToList();
            }
            // Remove Performance Measure Columns if Tenant doesn't Track Accomplishments
            if (!MultiTenantHelpers.TrackAccomplishments())
            {
                projectCustomGridColumns = projectCustomGridColumns.Where(x => x != ProjectCustomGridColumnEnum.NumberOfExpectedPerformanceMeasureRecords).ToList();
                projectCustomGridColumns = projectCustomGridColumns.Where(x => x != ProjectCustomGridColumnEnum.NumberOfReportedPerformanceMeasures).ToList();
            }
            // Remove Solicitation Column if Tenant doesn't have solicitations
            if (!MultiTenantHelpers.HasSolicitations())
            {
                projectCustomGridColumns = projectCustomGridColumns.Where(x => x != ProjectCustomGridColumnEnum.Solicitation).ToList();
            }

            foreach (var projectCustomGridColumn in projectCustomGridColumns)
            {
                if (projectCustomGridColumn == ProjectCustomGridColumnEnum.CustomAttribute)
                {
                    foreach (var projectCustomAttributeType in projectCustomAttributeTypes)
                    {
                        var enabled   = projectCustomGridConfigurations.Any(x => x.ProjectCustomGridTypeID == projectCustomGridTypeID && x.ProjectCustomGridColumnID == (int)projectCustomGridColumn && x.ProjectCustomAttributeTypeID == projectCustomAttributeType.ProjectCustomAttributeTypeID && x.IsEnabled);
                        var sortOrder = projectCustomGridConfigurations.SingleOrDefault(x => x.ProjectCustomGridTypeID == projectCustomGridTypeID && x.ProjectCustomGridColumnID == (int)projectCustomGridColumn && x.ProjectCustomAttributeTypeID == projectCustomAttributeType.ProjectCustomAttributeTypeID && x.IsEnabled)?.SortOrder;
                        projectCustomGridConfigurationSimples.Add(new ProjectCustomGridConfigurationSimple(projectCustomGridTypeID, ProjectCustomGridColumn.ToType(projectCustomGridColumn), projectCustomAttributeType, null, enabled, sortOrder));
                    }
                }

                else if (projectCustomGridColumn == ProjectCustomGridColumnEnum.GeospatialAreaName)
                {
                    foreach (var geospatialAreaType in geospatialAreaTypes)
                    {
                        var enabled   = projectCustomGridConfigurations.Any(x => x.ProjectCustomGridTypeID == projectCustomGridTypeID && x.ProjectCustomGridColumnID == (int)projectCustomGridColumn && x.GeospatialAreaTypeID == geospatialAreaType.GeospatialAreaTypeID && x.IsEnabled);
                        var sortOrder = projectCustomGridConfigurations.SingleOrDefault(x => x.ProjectCustomGridTypeID == projectCustomGridTypeID && x.ProjectCustomGridColumnID == (int)projectCustomGridColumn && x.GeospatialAreaTypeID == geospatialAreaType.GeospatialAreaTypeID && x.IsEnabled)?.SortOrder;
                        projectCustomGridConfigurationSimples.Add(new ProjectCustomGridConfigurationSimple(projectCustomGridTypeID, ProjectCustomGridColumn.ToType(projectCustomGridColumn), null, geospatialAreaType, enabled, sortOrder));
                    }
                }

                else
                {
                    var enabled   = projectCustomGridConfigurations.Any(x => x.ProjectCustomGridTypeID == projectCustomGridTypeID && x.ProjectCustomGridColumnID == (int)projectCustomGridColumn && x.IsEnabled);
                    var sortOrder = projectCustomGridConfigurations.SingleOrDefault(x => x.ProjectCustomGridTypeID == projectCustomGridTypeID && x.ProjectCustomGridColumnID == (int)projectCustomGridColumn && x.IsEnabled)?.SortOrder;
                    projectCustomGridConfigurationSimples.Add(new ProjectCustomGridConfigurationSimple(projectCustomGridTypeID, ProjectCustomGridColumn.ToType(projectCustomGridColumn), null, null, enabled, sortOrder));
                }
            }
            ProjectCustomGridConfigurationSimples = projectCustomGridConfigurationSimples;
        }