public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
        {
            if (ForProject)
            {
                var project      = HttpRequestStorage.DatabaseEntities.Projects.GetProject(PrimaryKeyID);
                var projectIsLoa = project.CreateGisUploadAttemptID.HasValue &&
                                   project.CreateGisUploadAttempt.GisUploadSourceOrganization
                                   .GisUploadSourceOrganizationName.Contains("LOA",
                                                                             StringComparison.InvariantCultureIgnoreCase);
                if (projectIsLoa && (ProjectGrantAllocationRequests == null || !ProjectGrantAllocationRequests.Any()))
                {
                    yield return(new ValidationResult("LOA Projects must have at least one Grant Allocation"));
                }
            }

            if (ProjectGrantAllocationRequests == null)
            {
                yield break;
            }

            if (ProjectGrantAllocationRequests.GroupBy(x => x.GrantAllocationID).Any(x => x.Count() > 1))
            {
                yield return(new ValidationResult("Each grant allocation can only be used once."));
            }

            //foreach (var projectGrantAllocationRequest in ProjectGrantAllocationRequests)
            //{
            //    if (projectGrantAllocationRequest.AreBothValuesZero())
            //    {
            //        var grantAllocation = HttpRequestStorage.DatabaseEntities.GrantAllocations.Single(x => x.GrantAllocationID == projectGrantAllocationRequest.GrantAllocationID);
            //        yield return new ValidationResult(
            //            $"Secured Funding and Unsecured Funding cannot both be zero for Grant Allocation: {grantAllocation.GrantAllocationName}. If the amount of secured or unsecured funding is unknown, you can leave the amounts blank.");
            //    }
            //}
        }
コード例 #2
0
        public IEnumerable <ValidationResult> Validate(ValidationContext validationContext)
        {
            if (ProjectGrantAllocationRequests == null)
            {
                yield break;
            }

            if (ProjectGrantAllocationRequests.GroupBy(x => x.GrantAllocationID).Any(x => x.Count() > 1))
            {
                yield return(new ValidationResult("Each Grant Allocation can only be used once."));
            }
        }
        public void UpdateModel(List <Models.ProjectGrantAllocationRequest> currentProjectGrantAllocationRequests,
                                IList <Models.ProjectGrantAllocationRequest> allProjectGrantAllocationRequests,
                                Models.Project project,
                                List <ProjectFundingSource> currentProjectFundingSources,
                                IList <ProjectFundingSource> allProjectFundingSources)
        {
            var projectGrantAllocationRequestsModified = new List <Models.ProjectGrantAllocationRequest>();

            if (ProjectGrantAllocationRequests != null)
            {
                // Completely rebuild the list
                projectGrantAllocationRequestsModified = ProjectGrantAllocationRequests.Select(x => x.ToProjectGrantAllocationRequest()).ToList();
            }

            if (ForProject) // never null
            {
                if (project == null)
                {
                    throw new InvalidOperationException(
                              $"Project is required to update {Models.FieldDefinition.GrantAllocation.GetFieldDefinitionLabel()} Requests for a Project");
                }

                //Update the ProjectFundingSources
                var projectFundingSourcesUpdated = new List <Models.ProjectFundingSource>();
                if (FundingSourceIDs != null && FundingSourceIDs.Any())
                {
                    // Completely rebuild the list
                    projectFundingSourcesUpdated = FundingSourceIDs.Select(x => new ProjectFundingSource(project.ProjectID, x)).ToList();
                }

                currentProjectFundingSources.Merge(projectFundingSourcesUpdated,
                                                   allProjectFundingSources,
                                                   (x, y) => x.ProjectID == y.ProjectID && x.FundingSourceID == y.FundingSourceID);

                //Update Project fields
                project.ProjectFundingSourceNotes = ProjectFundingSourceNotes;
                project.EstimatedTotalCost        = ProjectEstimatedTotalCost;
            }

            currentProjectGrantAllocationRequests.Merge(projectGrantAllocationRequestsModified,
                                                        allProjectGrantAllocationRequests,
                                                        (x, y) => x.ProjectID == y.ProjectID && x.GrantAllocationID == y.GrantAllocationID,
                                                        (x, y) =>
            {
                x.TotalAmount = y.TotalAmount;
            });
        }
コード例 #4
0
 public IEnumerable <Organization> GetOrganizationsToReportInAccomplishments()
 {
     if (MultiTenantHelpers.GetRelationshipTypeToReportInAccomplishmentsDashboard() == null)
     {
         // Default is Funding Organizations
         var organizations = ProjectGrantAllocationExpenditures.Select(x => x.GrantAllocation.BottommostOrganization)
                             .Union(ProjectGrantAllocationRequests
                                    .Select(x => x.GrantAllocation.BottommostOrganization))
                             .Distinct(new HavePrimaryKeyComparer <Organization>());
         return(organizations);
     }
     else
     {
         return(ProjectOrganizations.Where(x => x.RelationshipType.ReportInAccomplishmentsDashboard)
                .Select(x => x.Organization).ToList());
     }
 }
コード例 #5
0
        public void UpdateModel(ProjectUpdateBatch projectUpdateBatch,
                                List <ProjectGrantAllocationRequestUpdate> currentProjectGrantAllocationRequestUpdates,
                                IList <ProjectGrantAllocationRequestUpdate> allProjectGrantAllocationRequestUpdates,
                                Models.ProjectUpdate projectUpdate,
                                List <ProjectFundingSourceUpdate> currentProjectFundingSourceUpdates,
                                IList <ProjectFundingSourceUpdate> allProjectFundingSourceUpdates)
        {
            var projectGrantAllocationRequestUpdatesUpdated = new List <ProjectGrantAllocationRequestUpdate>();

            if (ProjectGrantAllocationRequests != null)
            {
                // Completely rebuild the list
                projectGrantAllocationRequestUpdatesUpdated = ProjectGrantAllocationRequests.Select(x => x.ToProjectGrantAllocationRequestUpdate()).ToList();
            }

            currentProjectGrantAllocationRequestUpdates.Merge(projectGrantAllocationRequestUpdatesUpdated,
                                                              allProjectGrantAllocationRequestUpdates,
                                                              (x, y) => x.ProjectUpdateBatchID == y.ProjectUpdateBatchID && x.GrantAllocationID == y.GrantAllocationID,
                                                              (x, y) => { x.TotalAmount = y.TotalAmount; });

            //Update the ProjectFundingSourceUpdates
            var projectFundingSourceUpdatesUpdated = new List <Models.ProjectFundingSourceUpdate>();

            if (FundingSourceIDs != null && FundingSourceIDs.Any())
            {
                // Completely rebuild the list
                projectFundingSourceUpdatesUpdated = FundingSourceIDs.Select(x => new ProjectFundingSourceUpdate(projectUpdateBatch.ProjectUpdateBatchID, x)).ToList();
            }

            currentProjectFundingSourceUpdates.Merge(projectFundingSourceUpdatesUpdated,
                                                     allProjectFundingSourceUpdates,
                                                     (x, y) => x.ProjectUpdateBatchID == y.ProjectUpdateBatchID && x.FundingSourceID == y.FundingSourceID);

            //Update Project Update fields
            projectUpdate.ProjectFundingSourceNotes = ProjectFundingSourceNotes;
            projectUpdate.EstimatedTotalCost        = ProjectEstimatedTotalCost;
        }
コード例 #6
0
        //public decimal? UnfundedNeed()
        //{
        //    return EstimatedTotalCost - GetSecuredFunding();
        //}

        public decimal?GetTotalFunding()
        {
            return(ProjectGrantAllocationRequests.Any()
                ? (decimal?)ProjectGrantAllocationRequests.Sum(x => x.TotalAmount.GetValueOrDefault())
                : null);
        }
コード例 #7
0
        /// <summary>
        /// Dependent type names of this entity
        /// </summary>
        public void DeleteChildren(DatabaseEntities dbContext)
        {
            foreach (var x in GrantAllocationAwardLandownerCostShareLineItems.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in InteractionEventProjects.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in NotificationProjects.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in PerformanceMeasureActuals.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in PerformanceMeasureExpecteds.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectClassifications.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectCustomAttributes.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectDocuments.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectExemptReportingYears.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectExternalLinks.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectFundingSources.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGrantAllocationExpenditures.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGrantAllocationRequests.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectImages.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectInternalNotes.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectLocations.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectLocationStagings.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectNotes.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectOrganizations.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectPeople.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectPriorityLandscapes.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectPrograms.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectRegions.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectTags.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectUpdateBatches.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in Treatments.ToList())
            {
                x.DeleteFull(dbContext);
            }
        }
コード例 #8
0
        /// <summary>
        /// Active Dependent type names of this object
        /// </summary>
        public List <string> DependentObjectNames()
        {
            var dependentObjects = new List <string>();

            if (GrantAllocationAwardLandownerCostShareLineItems.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationAwardLandownerCostShareLineItem).Name);
            }

            if (InteractionEventProjects.Any())
            {
                dependentObjects.Add(typeof(InteractionEventProject).Name);
            }

            if (NotificationProjects.Any())
            {
                dependentObjects.Add(typeof(NotificationProject).Name);
            }

            if (PerformanceMeasureActuals.Any())
            {
                dependentObjects.Add(typeof(PerformanceMeasureActual).Name);
            }

            if (PerformanceMeasureExpecteds.Any())
            {
                dependentObjects.Add(typeof(PerformanceMeasureExpected).Name);
            }

            if (ProjectClassifications.Any())
            {
                dependentObjects.Add(typeof(ProjectClassification).Name);
            }

            if (ProjectCustomAttributes.Any())
            {
                dependentObjects.Add(typeof(ProjectCustomAttribute).Name);
            }

            if (ProjectDocuments.Any())
            {
                dependentObjects.Add(typeof(ProjectDocument).Name);
            }

            if (ProjectExemptReportingYears.Any())
            {
                dependentObjects.Add(typeof(ProjectExemptReportingYear).Name);
            }

            if (ProjectExternalLinks.Any())
            {
                dependentObjects.Add(typeof(ProjectExternalLink).Name);
            }

            if (ProjectFundingSources.Any())
            {
                dependentObjects.Add(typeof(ProjectFundingSource).Name);
            }

            if (ProjectGrantAllocationExpenditures.Any())
            {
                dependentObjects.Add(typeof(ProjectGrantAllocationExpenditure).Name);
            }

            if (ProjectGrantAllocationRequests.Any())
            {
                dependentObjects.Add(typeof(ProjectGrantAllocationRequest).Name);
            }

            if (ProjectImages.Any())
            {
                dependentObjects.Add(typeof(ProjectImage).Name);
            }

            if (ProjectInternalNotes.Any())
            {
                dependentObjects.Add(typeof(ProjectInternalNote).Name);
            }

            if (ProjectLocations.Any())
            {
                dependentObjects.Add(typeof(ProjectLocation).Name);
            }

            if (ProjectLocationStagings.Any())
            {
                dependentObjects.Add(typeof(ProjectLocationStaging).Name);
            }

            if (ProjectNotes.Any())
            {
                dependentObjects.Add(typeof(ProjectNote).Name);
            }

            if (ProjectOrganizations.Any())
            {
                dependentObjects.Add(typeof(ProjectOrganization).Name);
            }

            if (ProjectPeople.Any())
            {
                dependentObjects.Add(typeof(ProjectPerson).Name);
            }

            if (ProjectPriorityLandscapes.Any())
            {
                dependentObjects.Add(typeof(ProjectPriorityLandscape).Name);
            }

            if (ProjectPrograms.Any())
            {
                dependentObjects.Add(typeof(ProjectProgram).Name);
            }

            if (ProjectRegions.Any())
            {
                dependentObjects.Add(typeof(ProjectRegion).Name);
            }

            if (ProjectTags.Any())
            {
                dependentObjects.Add(typeof(ProjectTag).Name);
            }

            if (ProjectUpdateBatches.Any())
            {
                dependentObjects.Add(typeof(ProjectUpdateBatch).Name);
            }

            if (Treatments.Any())
            {
                dependentObjects.Add(typeof(Treatment).Name);
            }
            return(dependentObjects.Distinct().ToList());
        }
コード例 #9
0
 /// <summary>
 /// Does this object have any dependent objects? (If it does have dependent objects, these would need to be deleted before this object could be deleted.)
 /// </summary>
 /// <returns></returns>
 public bool HasDependentObjects()
 {
     return(GrantAllocationAwardLandownerCostShareLineItems.Any() || InteractionEventProjects.Any() || NotificationProjects.Any() || PerformanceMeasureActuals.Any() || PerformanceMeasureExpecteds.Any() || ProjectClassifications.Any() || ProjectCustomAttributes.Any() || ProjectDocuments.Any() || ProjectExemptReportingYears.Any() || ProjectExternalLinks.Any() || ProjectFundingSources.Any() || ProjectGrantAllocationExpenditures.Any() || ProjectGrantAllocationRequests.Any() || ProjectImages.Any() || ProjectInternalNotes.Any() || ProjectLocations.Any() || ProjectLocationStagings.Any() || ProjectNotes.Any() || ProjectOrganizations.Any() || ProjectPeople.Any() || ProjectPriorityLandscapes.Any() || ProjectPrograms.Any() || ProjectRegions.Any() || ProjectTags.Any() || ProjectUpdateBatches.Any() || Treatments.Any());
 }
コード例 #10
0
 /// <summary>
 /// Does this object have any dependent objects? (If it does have dependent objects, these would need to be deleted before this object could be deleted.)
 /// </summary>
 /// <returns></returns>
 public bool HasDependentObjects()
 {
     return(AgreementGrantAllocations.Any() || GrantAllocationAwards.Any() || GrantAllocationBudgetLineItems.Any() || GrantAllocationChangeLogs.Any() || GrantAllocationExpenditures.Any() || GrantAllocationFileResources.Any() || GrantAllocationNotes.Any() || GrantAllocationNoteInternals.Any() || GrantAllocationProgramIndexProjectCodes.Any() || GrantAllocationProgramManagers.Any() || InvoiceLineItems.Any() || ProjectGrantAllocationExpenditures.Any() || ProjectGrantAllocationExpenditureUpdates.Any() || ProjectGrantAllocationRequests.Any() || ProjectGrantAllocationRequestUpdates.Any());
 }
コード例 #11
0
        /// <summary>
        /// Dependent type names of this entity
        /// </summary>
        public void DeleteChildren(DatabaseEntities dbContext)
        {
            foreach (var x in AgreementGrantAllocations.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in GrantAllocationAwards.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in GrantAllocationBudgetLineItems.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in GrantAllocationChangeLogs.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in GrantAllocationExpenditures.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in GrantAllocationFileResources.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in GrantAllocationNotes.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in GrantAllocationNoteInternals.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in GrantAllocationProgramIndexProjectCodes.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in GrantAllocationProgramManagers.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in InvoiceLineItems.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGrantAllocationExpenditures.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGrantAllocationExpenditureUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGrantAllocationRequests.ToList())
            {
                x.DeleteFull(dbContext);
            }

            foreach (var x in ProjectGrantAllocationRequestUpdates.ToList())
            {
                x.DeleteFull(dbContext);
            }
        }
コード例 #12
0
        /// <summary>
        /// Active Dependent type names of this object
        /// </summary>
        public List <string> DependentObjectNames()
        {
            var dependentObjects = new List <string>();

            if (AgreementGrantAllocations.Any())
            {
                dependentObjects.Add(typeof(AgreementGrantAllocation).Name);
            }

            if (GrantAllocationAwards.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationAward).Name);
            }

            if (GrantAllocationBudgetLineItems.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationBudgetLineItem).Name);
            }

            if (GrantAllocationChangeLogs.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationChangeLog).Name);
            }

            if (GrantAllocationExpenditures.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationExpenditure).Name);
            }

            if (GrantAllocationFileResources.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationFileResource).Name);
            }

            if (GrantAllocationNotes.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationNote).Name);
            }

            if (GrantAllocationNoteInternals.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationNoteInternal).Name);
            }

            if (GrantAllocationProgramIndexProjectCodes.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationProgramIndexProjectCode).Name);
            }

            if (GrantAllocationProgramManagers.Any())
            {
                dependentObjects.Add(typeof(GrantAllocationProgramManager).Name);
            }

            if (InvoiceLineItems.Any())
            {
                dependentObjects.Add(typeof(InvoiceLineItem).Name);
            }

            if (ProjectGrantAllocationExpenditures.Any())
            {
                dependentObjects.Add(typeof(ProjectGrantAllocationExpenditure).Name);
            }

            if (ProjectGrantAllocationExpenditureUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectGrantAllocationExpenditureUpdate).Name);
            }

            if (ProjectGrantAllocationRequests.Any())
            {
                dependentObjects.Add(typeof(ProjectGrantAllocationRequest).Name);
            }

            if (ProjectGrantAllocationRequestUpdates.Any())
            {
                dependentObjects.Add(typeof(ProjectGrantAllocationRequestUpdate).Name);
            }
            return(dependentObjects.Distinct().ToList());
        }