public void UpdateModel(Models.TreatmentBMPType treatmentBMPType, List <TreatmentBMPTypeAssessmentObservationType> currentTreatmentBMPTypeObservationTypes, IList <TreatmentBMPTypeAssessmentObservationType> allTreatmentBMPTypeAssessmentObservationTypes, List <TreatmentBMPTypeCustomAttributeType> currentTreatmentBMPTypeCustomAttributeTypes, ObservableCollection <TreatmentBMPTypeCustomAttributeType> allTreatmentBMPTypeCustomAttributeTypes) { treatmentBMPType.TreatmentBMPTypeName = TreatmentBMPTypeName; treatmentBMPType.TreatmentBMPTypeDescription = TreatmentBMPTypeDescription; var updatedTreatmentBMPTypeObservationTypes = new List <TreatmentBMPTypeAssessmentObservationType>(); if (TreatmentBMPTypeObservationTypeSimples != null) { // Completely rebuild the list updatedTreatmentBMPTypeObservationTypes = TreatmentBMPTypeObservationTypeSimples.Select(x => { var overrideWeight = x.OverrideAssessmentScoreIfFailing != null && x.OverrideAssessmentScoreIfFailing.Value; return(new TreatmentBMPTypeAssessmentObservationType(ModelObjectHelpers.NotYetAssignedID, treatmentBMPType.TreatmentBMPTypeID, x.TreatmentBMPAssessmentObservationTypeID, overrideWeight ? null : x.AssessmentScoreWeight / 100, x.DefaultThresholdValue, x.DefaultBenchmarkValue, x.OverrideAssessmentScoreIfFailing ?? false, null)); }).ToList(); } currentTreatmentBMPTypeObservationTypes.Merge(updatedTreatmentBMPTypeObservationTypes, allTreatmentBMPTypeAssessmentObservationTypes, (x, y) => x.TreatmentBMPTypeID == y.TreatmentBMPTypeID && x.TreatmentBMPAssessmentObservationTypeID == y.TreatmentBMPAssessmentObservationTypeID, (x, y) => { x.AssessmentScoreWeight = y.AssessmentScoreWeight; x.DefaultThresholdValue = y.DefaultThresholdValue; x.DefaultBenchmarkValue = y.DefaultBenchmarkValue; x.OverrideAssessmentScoreIfFailing = y.OverrideAssessmentScoreIfFailing; }); var updatedTreatmentBMPTypeCustomAttributeTypes = new List <TreatmentBMPTypeCustomAttributeType>(); if (TreatmentBMPTypeAttributeTypeSimples != null) { // Completely rebuild the list updatedTreatmentBMPTypeCustomAttributeTypes = TreatmentBMPTypeAttributeTypeSimples.Select(x => new TreatmentBMPTypeCustomAttributeType(ModelObjectHelpers.NotYetAssignedID, treatmentBMPType.TreatmentBMPTypeID, x.CustomAttributeTypeID, null)).ToList(); } currentTreatmentBMPTypeCustomAttributeTypes.Merge(updatedTreatmentBMPTypeCustomAttributeTypes, allTreatmentBMPTypeCustomAttributeTypes, (x, y) => x.TreatmentBMPTypeID == y.TreatmentBMPTypeID && x.CustomAttributeTypeID == y.CustomAttributeTypeID); }
public IEnumerable <ValidationResult> Validate(ValidationContext validationContext) { var validationResults = new List <ValidationResult>(); var treatmentBMPTypesWithSameName = HttpRequestStorage.DatabaseEntities.TreatmentBMPTypes.Where(x => x.TreatmentBMPTypeName == TreatmentBMPTypeName); if (treatmentBMPTypesWithSameName.Any(x => x.TreatmentBMPTypeID != TreatmentBMPTypeID)) { validationResults.Add(new SitkaValidationResult <EditViewModel, string>("A Treatment BMP Type with this name already exists.", x => x.TreatmentBMPTypeName)); } if (TreatmentBMPTypeObservationTypeSimples == null || !TreatmentBMPTypeObservationTypeSimples.Any()) { validationResults.Add(new ValidationResult("A Treatment BMP Type must have at least one Observation Type.")); return(validationResults); } var hasBenchmarkAndThresholdsSimples = TreatmentBMPTypeObservationTypeSimples.Where(y => HttpRequestStorage.DatabaseEntities.TreatmentBMPAssessmentObservationTypes.ToList().Where(x => x.GetHasBenchmarkAndThreshold()).ToList().Select(x => x.TreatmentBMPAssessmentObservationTypeID).Contains(y.TreatmentBMPAssessmentObservationTypeID)).ToList(); var noBenchmarkAndThresholdsSimples = TreatmentBMPTypeObservationTypeSimples.Where(y => HttpRequestStorage.DatabaseEntities.TreatmentBMPAssessmentObservationTypes.ToList().Where(x => !x.GetHasBenchmarkAndThreshold()).Select(x => x.TreatmentBMPAssessmentObservationTypeID).ToList().Contains(y.TreatmentBMPAssessmentObservationTypeID)).ToList(); var requiresAssessmentWeightSimples = new List <TreatmentBMPTypeObservationTypeSimple>(); requiresAssessmentWeightSimples.AddRange(hasBenchmarkAndThresholdsSimples); requiresAssessmentWeightSimples.AddRange(noBenchmarkAndThresholdsSimples.Where(x => !x.OverrideAssessmentScoreIfFailing.HasValue || !x.OverrideAssessmentScoreIfFailing.Value)); if (requiresAssessmentWeightSimples.Any(x => x.AssessmentScoreWeight == null)) { validationResults.Add(new ValidationResult("Each Observation Type that does not override the Assessment Score if failing must have an Assessment Score Weight.")); } if (requiresAssessmentWeightSimples.Any() && TreatmentBMPTypeObservationTypeSimples.Sum(x => x.AssessmentScoreWeight) != 100) { validationResults.Add(new ValidationResult("The total Assessment Score Weight for all Observation Types must equal 100%.")); } return(validationResults); }