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;
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }