public EditOrganizationsViewModel(ProjectFirmaModels.Models.Project project, List <ProjectFirmaModels.Models.ProjectOrganization> projectOrganizations, FirmaSession currentFirmaSession) { // Preconditions Check.EnsureNotNull(project); Check.EnsureNotNull(projectOrganizations); Check.EnsureNotNull(currentFirmaSession); PrimaryContactPersonID = project.PrimaryContactPersonID; ProjectOrganizationSimples = projectOrganizations.Select(x => new ProjectOrganizationSimple(x)).ToList(); // If the current person belongs to a primary contact organization, and the current project has no primary contact organization set, prepopulate. if (!currentFirmaSession.IsAnonymousUser() && currentFirmaSession.Person.Organization.CanBeAPrimaryContactOrganization()) { var primaryContactOrganizationRelationshipTypeIDs = HttpRequestStorage.DatabaseEntities.OrganizationRelationshipTypes .Where(x => x.IsPrimaryContact).Select(x => x.OrganizationRelationshipTypeID).ToList(); if (!projectOrganizations.Any(x => primaryContactOrganizationRelationshipTypeIDs.Contains(x.OrganizationRelationshipTypeID))) { ProjectOrganizationSimples.AddRange(primaryContactOrganizationRelationshipTypeIDs.Select(x => new ProjectOrganizationSimple(currentFirmaSession.Person.OrganizationID, x))); PrimaryContactPersonID = currentFirmaSession.Person.Organization.PrimaryContactPersonID; } } OtherPartners = project.OtherPartners; }
public IEnumerable <ValidationResult> GetValidationResults() { var errors = new List <ValidationResult>(); if (ProjectOrganizationSimples == null) { ProjectOrganizationSimples = new List <ProjectOrganizationSimple>(); } if (ProjectOrganizationSimples.GroupBy(x => new { RelationshipTypeID = x.OrganizationRelationshipTypeID, x.OrganizationID }).Any(x => x.Count() > 1)) { errors.Add(new ValidationResult($"Cannot have the same relationship type listed for the same {FieldDefinitionEnum.Organization.ToType().GetFieldDefinitionLabel()} multiple times.")); } var relationshipTypesThatAreRequired = HttpRequestStorage.DatabaseEntities.OrganizationRelationshipTypes.Where(x => x.IsOrganizationRelationshipTypeRequired).ToList(); var projectOrganizationsGroupedByRelationshipTypeID = ProjectOrganizationSimples.GroupBy(x => x.OrganizationRelationshipTypeID).ToList(); errors.AddRange(relationshipTypesThatAreRequired .Where(rt => projectOrganizationsGroupedByRelationshipTypeID.Count(po => po.Key == rt.OrganizationRelationshipTypeID) > 1) .Select(relationshipType => new ValidationResult( $"Cannot have more than one {FieldDefinitionEnum.Organization.ToType().GetFieldDefinitionLabel()} with a {FieldDefinitionEnum.ProjectOrganizationRelationshipType.ToType().GetFieldDefinitionLabel()} set to \"{relationshipType.OrganizationRelationshipTypeName}\"."))); errors.AddRange(relationshipTypesThatAreRequired .Where(rt => projectOrganizationsGroupedByRelationshipTypeID.Count(po => po.Key == rt.OrganizationRelationshipTypeID) == 0) .Select(relationshipType => new ValidationResult( $"Must have one {FieldDefinitionEnum.Organization.ToType().GetFieldDefinitionLabel()} with a {FieldDefinitionEnum.ProjectOrganizationRelationshipType.ToType().GetFieldDefinitionLabel()} set to \"{relationshipType.OrganizationRelationshipTypeName}\"."))); var allValidRelationshipTypes = ProjectOrganizationSimples.All(x => { var organization = HttpRequestStorage.DatabaseEntities.Organizations.GetOrganization(x.OrganizationID); var organizationType = organization.OrganizationType; if (organizationType != null) { var organizationTypeOrganizationRelationshipTypeIDs = organizationType.OrganizationTypeOrganizationRelationshipTypes.Select(y => y.OrganizationRelationshipTypeID); return(organizationTypeOrganizationRelationshipTypeIDs.Contains(x.OrganizationRelationshipTypeID)); } return(false); }); if (!allValidRelationshipTypes) { errors.Add(new ValidationResult("One or more relationship types are invalid.")); } if (OtherPartners != null && OtherPartners.Length > ProjectFirmaModels.Models.Project.FieldLengths.OtherPartners) { errors.Add(new ValidationResult($"The field '{FieldDefinitionEnum.OtherPartners.ToType().GetFieldDefinitionLabel()}' must be a string with a maximum length of {ProjectFirmaModels.Models.Project.FieldLengths.OtherPartners}.")); } return(errors); }
public void UpdateModel(ProjectFirmaModels.Models.Project project, ICollection <ProjectFirmaModels.Models.ProjectOrganization> allProjectOrganizations) { project.PrimaryContactPersonID = PrimaryContactPersonID; var projectOrganizationsUpdated = ProjectOrganizationSimples.Where(x => ModelObjectHelpers.IsRealPrimaryKeyValue(x.OrganizationID)).Select(x => new ProjectFirmaModels.Models.ProjectOrganization(project.ProjectID, x.OrganizationID, x.OrganizationRelationshipTypeID)).ToList(); project.ProjectOrganizations.Merge(projectOrganizationsUpdated, allProjectOrganizations, (x, y) => x.ProjectID == y.ProjectID && x.OrganizationID == y.OrganizationID && x.OrganizationRelationshipTypeID == y.OrganizationRelationshipTypeID, HttpRequestStorage.DatabaseEntities); project.OtherPartners = OtherPartners; }
public void UpdateModel(ProjectUpdateBatch projectUpdateBatch, List <ProjectOrganizationUpdate> currentProjectOrganizationUpdates, IList <ProjectOrganizationUpdate> allProjectOrganizationUpdates) { var projectOrganizationUpdatesUpdated = new List <ProjectOrganizationUpdate>(); if (ProjectOrganizationSimples != null) { // Completely rebuild the list projectOrganizationUpdatesUpdated = ProjectOrganizationSimples.Where(x => ModelObjectHelpers.IsRealPrimaryKeyValue(x.OrganizationID)).Select(x => x.ToProjectOrganizationUpdate(projectUpdateBatch)).ToList(); } currentProjectOrganizationUpdates.Merge(projectOrganizationUpdatesUpdated, allProjectOrganizationUpdates, (x, y) => x.ProjectUpdateBatchID == y.ProjectUpdateBatchID && x.OrganizationID == y.OrganizationID && x.RelationshipTypeID == y.RelationshipTypeID); }
public void UpdateModel(ProjectUpdateBatch projectUpdateBatch, List <ProjectOrganizationUpdate> currentProjectOrganizationUpdates, IList <ProjectOrganizationUpdate> allProjectOrganizationUpdates) { projectUpdateBatch.ProjectUpdate.PrimaryContactPersonID = PrimaryContactPersonID; var projectOrganizationUpdatesUpdated = new List <ProjectOrganizationUpdate>(); if (ProjectOrganizationSimples != null) { // Completely rebuild the list projectOrganizationUpdatesUpdated = ProjectOrganizationSimples.Where(x => ModelObjectHelpers.IsRealPrimaryKeyValue(x.OrganizationID)).Select(x => x.ToProjectOrganizationUpdate(projectUpdateBatch)).ToList(); } currentProjectOrganizationUpdates.Merge(projectOrganizationUpdatesUpdated, allProjectOrganizationUpdates, (x, y) => x.ProjectUpdateBatchID == y.ProjectUpdateBatchID && x.OrganizationID == y.OrganizationID && x.OrganizationRelationshipTypeID == y.OrganizationRelationshipTypeID, HttpRequestStorage.DatabaseEntities); }