public IHttpActionResult UpdatePerformanceMeasureImportance(string apiKey, [FromBody] PerformanceMeasureImportanceDto performanceMeasureDto) { Check.Require(apiKey == FirmaWebApiConfiguration.PsInfoApiKey, "Unrecognized api key!"); var performanceMeasure = _databaseEntities.PerformanceMeasures.SingleOrDefault(x => x.PerformanceMeasureID == performanceMeasureDto.PerformanceMeasureID); if (performanceMeasure == null) { var message = $"Performance Measure with ID = {performanceMeasureDto.PerformanceMeasureID} not found"; return(NotFound()); } performanceMeasure.Importance = performanceMeasureDto.Importance; var fileResourceDtos = performanceMeasureDto.FileResources; var fileResourceMimeTypes = fileResourceDtos.ToDictionary(x => new { x.FileResourceGUID, x.FileResourceMimeTypeName }, x => MapFileResourceMimeTypeNameToFileResourceMimeType(x.FileResourceMimeTypeName)); if (fileResourceMimeTypes.Values.Any(x => x == null)) { var errors = fileResourceMimeTypes.Where(x => x.Value == null).Select(x => $"Invalid File Resource Mime Type '{x.Key.FileResourceMimeTypeName}' for '{x.Key.FileResourceGUID}'").ToList(); return(BadRequest(string.Join("\r\n", errors))); } // Remove all of these, too hard to merge nicely _databaseEntities.AllFileResourceDatas.RemoveRange(performanceMeasure.PerformanceMeasureImages.Select(x => x.FileResourceInfo.FileResourceData)); _databaseEntities.AllFileResourceInfos.RemoveRange(performanceMeasure.PerformanceMeasureImages.Select(x => x.FileResourceInfo)); _databaseEntities.AllPerformanceMeasureImages.RemoveRange(performanceMeasure.PerformanceMeasureImages); var peopleDictionary = _databaseEntities.People.ToDictionary(x => x.Email); var performanceMeasureImagesToUpdate = fileResourceDtos.Select(x => { var fileResourceMimeTypeID = fileResourceMimeTypes.Single(y => y.Key.FileResourceGUID == x.FileResourceGUID).Value.FileResourceMimeTypeID; var personID = peopleDictionary.ContainsKey(x.Email) ? peopleDictionary[x.Email].PersonID : 5278; var fileResourceInfo = new FileResourceInfo(fileResourceMimeTypeID, x.OriginalBaseFilename, x.OriginalFileExtension, x.FileResourceGUID, personID, x.CreateDate); fileResourceInfo.FileResourceDatas.Add(new FileResourceData(fileResourceInfo.FileResourceInfoID, x.FileResourceData)); var performanceMeasureImage = new PerformanceMeasureImage(performanceMeasure, fileResourceInfo); return(performanceMeasureImage); }).ToList(); _databaseEntities.SaveChangesWithNoAuditing(Tenant.ActionAgendaForPugetSound.TenantID); var performanceMeasureReloaded = new PerformanceMeasureSimpleDto(performanceMeasure); return(Ok(performanceMeasureReloaded)); }
public IHttpActionResult PostPerformanceMeasure(string apiKey, [FromBody] PerformanceMeasureDto performanceMeasureDto) { Check.Require(apiKey == FirmaWebApiConfiguration.PsInfoApiKey, "Unrecognized api key!"); var performanceMeasureType = MapPerformanceMeasureTypeNameToPerformanceMeasureType(performanceMeasureDto.PerformanceMeasureTypeName); var performanceMeasureDataSourceType = MapPerformanceMeasureDataSourceTypeNameToPerformanceMeasureDataSourceType(performanceMeasureDto.PerformanceMeasureDataSourceTypeName); var measurementUnitType = MapMeasurementUnitTypeNameToMeasurementUnitType(performanceMeasureDto.MeasurementUnitTypeName); if (performanceMeasureType == null) { return(BadRequest($"Invalid Performance Measure Type: {performanceMeasureDto.PerformanceMeasureTypeName}")); } if (performanceMeasureDataSourceType == null) { return(BadRequest($"Invalid Performance Measure Data Source Type: {performanceMeasureDto.PerformanceMeasureDataSourceTypeName}")); } if (measurementUnitType == null) { return(BadRequest($"Invalid Measurement Unit: {performanceMeasureDto.MeasurementUnitTypeName}")); } var performanceMeasure = new PerformanceMeasure(performanceMeasureDto.PerformanceMeasureDisplayName, measurementUnitType.MeasurementUnitTypeID, performanceMeasureType.PerformanceMeasureTypeID, performanceMeasureDto.IsSummable, performanceMeasureDataSourceType.PerformanceMeasureDataSourceTypeID, performanceMeasureDto.CanBeChartedCumulatively, false); performanceMeasure.CriticalDefinitions = performanceMeasureDto.CriticalDefinitions; performanceMeasure.PerformanceMeasureDefinition = performanceMeasureDto.PerformanceMeasureDefinition; performanceMeasure.ProjectReporting = performanceMeasureDto.ProjectReporting; performanceMeasure.Importance = performanceMeasureDto.Importance; performanceMeasure.AdditionalInformation = performanceMeasureDto.AdditionalInformation; // create file resources for images in the Importance rich text var fileResourceDtos = performanceMeasureDto.FileResources; var fileResourceMimeTypes = fileResourceDtos.ToDictionary(x => new { x.FileResourceGUID, x.FileResourceMimeTypeName }, x => MapFileResourceMimeTypeNameToFileResourceMimeType(x.FileResourceMimeTypeName)); if (fileResourceMimeTypes.Values.Any(x => x == null)) { var errors = fileResourceMimeTypes.Where(x => x.Value == null).Select(x => $"Invalid File Resource Mime Type '{x.Key.FileResourceMimeTypeName}' for '{x.Key.FileResourceGUID}'").ToList(); return(BadRequest(string.Join("\r\n", errors))); } var peopleDictionary = _databaseEntities.People.ToDictionary(x => x.Email); var performanceMeasureImages = fileResourceDtos.Select(x => { var fileResourceMimeTypeID = fileResourceMimeTypes.Single(y => y.Key.FileResourceGUID == x.FileResourceGUID).Value.FileResourceMimeTypeID; var personID = peopleDictionary.ContainsKey(x.Email) ? peopleDictionary[x.Email].PersonID : 5278; var fileResourceInfo = new FileResourceInfo(fileResourceMimeTypeID, x.OriginalBaseFilename, x.OriginalFileExtension, x.FileResourceGUID, personID, x.CreateDate); fileResourceInfo.FileResourceDatas.Add(new FileResourceData(fileResourceInfo.FileResourceInfoID, x.FileResourceData)); var performanceMeasureImage = new PerformanceMeasureImage(performanceMeasure, fileResourceInfo); return(performanceMeasureImage); }).ToList(); var tenantID = Tenant.ActionAgendaForPugetSound.TenantID; foreach (var performanceMeasureSubcategoryDto in performanceMeasureDto.PerformanceMeasureSubcategories) { var googleChartType = MapGoogleChartTypeNameToGoogleChartType(performanceMeasureSubcategoryDto.GoogleChartTypeName); if (googleChartType == null) { return(BadRequest($"Invalid Google Chart Type '{performanceMeasureSubcategoryDto.GoogleChartTypeName}' for Subcategory '{performanceMeasureSubcategoryDto.PerformanceMeasureSubcategoryName}'")); } var performanceMeasureSubcategory = new PerformanceMeasureSubcategory(performanceMeasure, performanceMeasureSubcategoryDto.PerformanceMeasureSubcategoryName) { ChartConfigurationJson = performanceMeasureSubcategoryDto.ChartConfigurationJson, GoogleChartTypeID = googleChartType.GoogleChartTypeID, TenantID = tenantID }; foreach (var performanceMeasureSubcategoryOptionDto in performanceMeasureSubcategoryDto.PerformanceMeasureSubcategoryOptions) { var performanceMeasureSubcategoryOption = new PerformanceMeasureSubcategoryOption(performanceMeasureSubcategory, performanceMeasureSubcategoryOptionDto.PerformanceMeasureSubcategoryOptionName, false) { TenantID = tenantID }; } } _databaseEntities.AllPerformanceMeasures.Add(performanceMeasure); _databaseEntities.SaveChangesWithNoAuditing(tenantID); var performanceMeasureReloaded = new PerformanceMeasureDto(performanceMeasure); return(Ok(performanceMeasureReloaded)); }