/// <summary> /// Handles the Click event of the lbSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void lbSave_Click(object sender, EventArgs e) { if (Page.IsValid) { RockContext rockContext = new RockContext(); BenevolenceRequestService benevolenceRequestService = new BenevolenceRequestService(rockContext); BenevolenceResultService benevolenceResultService = new BenevolenceResultService(rockContext); BenevolenceRequest benevolenceRequest = null; int benevolenceRequestId = PageParameter("BenevolenceRequestId").AsInteger(); if (!benevolenceRequestId.Equals(0)) { benevolenceRequest = benevolenceRequestService.Get(benevolenceRequestId); } if (benevolenceRequest == null) { benevolenceRequest = new BenevolenceRequest { Id = 0 }; } benevolenceRequest.FirstName = dtbFirstName.Text; benevolenceRequest.LastName = dtbLastName.Text; benevolenceRequest.Email = ebEmail.Text; benevolenceRequest.RequestText = dtbRequestText.Text; benevolenceRequest.ResultSummary = dtbSummary.Text; benevolenceRequest.CampusId = cpCampus.SelectedCampusId; benevolenceRequest.ProvidedNextSteps = dtbProvidedNextSteps.Text; benevolenceRequest.GovernmentId = dtbGovernmentId.Text; if (lapAddress.Location != null) { benevolenceRequest.LocationId = lapAddress.Location.Id; } benevolenceRequest.RequestedByPersonAliasId = ppPerson.PersonAliasId; benevolenceRequest.CaseWorkerPersonAliasId = ddlCaseWorker.SelectedValue.AsIntegerOrNull(); benevolenceRequest.RequestStatusValueId = ddlRequestStatus.SelectedValue.AsIntegerOrNull(); benevolenceRequest.ConnectionStatusValueId = ddlConnectionStatus.SelectedValue.AsIntegerOrNull(); if (dpRequestDate.SelectedDate.HasValue) { benevolenceRequest.RequestDateTime = dpRequestDate.SelectedDate.Value; } benevolenceRequest.HomePhoneNumber = pnbHomePhone.Number; benevolenceRequest.CellPhoneNumber = pnbCellPhone.Number; benevolenceRequest.WorkPhoneNumber = pnbWorkPhone.Number; List <BenevolenceResultInfo> resultListUI = BenevolenceResultsState; var resultListDB = benevolenceRequest.BenevolenceResults.ToList(); // remove any Benevolence Results that were removed in the UI foreach (BenevolenceResult resultDB in resultListDB) { if (!resultListUI.Any(r => r.ResultId == resultDB.Id)) { benevolenceRequest.BenevolenceResults.Remove(resultDB); benevolenceResultService.Delete(resultDB); } } // add any Benevolence Results that were added in the UI foreach (BenevolenceResultInfo resultUI in resultListUI) { var resultDB = resultListDB.FirstOrDefault(r => r.Guid == resultUI.TempGuid); if (resultDB == null) { resultDB = new BenevolenceResult(); resultDB.BenevolenceRequestId = benevolenceRequest.Id; resultDB.Guid = resultUI.TempGuid; benevolenceRequest.BenevolenceResults.Add(resultDB); } resultDB.Amount = resultUI.Amount; resultDB.ResultSummary = resultUI.ResultSummary; resultDB.ResultTypeValueId = resultUI.ResultTypeValueId; } if (benevolenceRequest.IsValid) { if (benevolenceRequest.Id.Equals(0)) { benevolenceRequestService.Add(benevolenceRequest); } // get attributes benevolenceRequest.LoadAttributes(); Rock.Attribute.Helper.GetEditValues(phAttributes, benevolenceRequest); rockContext.WrapTransaction(() => { rockContext.SaveChanges(); benevolenceRequest.SaveAttributeValues(rockContext); }); // update related documents var documentsService = new BenevolenceRequestDocumentService(rockContext); // delete any images that were removed var orphanedBinaryFileIds = new List <int>(); var documentsInDb = documentsService.Queryable().Where(b => b.BenevolenceRequestId == benevolenceRequest.Id).ToList(); foreach (var document in documentsInDb.Where(i => !DocumentsState.Contains(i.BinaryFileId))) { orphanedBinaryFileIds.Add(document.BinaryFileId); documentsService.Delete(document); } // save documents int documentOrder = 0; foreach (var binaryFileId in DocumentsState) { // Add or Update the activity type var document = documentsInDb.FirstOrDefault(i => i.BinaryFileId == binaryFileId); if (document == null) { document = new BenevolenceRequestDocument(); document.BenevolenceRequestId = benevolenceRequest.Id; benevolenceRequest.Documents.Add(document); } document.BinaryFileId = binaryFileId; document.Order = documentOrder; documentOrder++; } rockContext.SaveChanges(); // redirect back to parent var personId = this.PageParameter("PersonId").AsIntegerOrNull(); var qryParams = new Dictionary <string, string>(); if (personId.HasValue) { qryParams.Add("PersonId", personId.ToString()); } NavigateToParentPage(qryParams); } } }
/// <summary> /// Handles the Click event of the lbSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void lbSave_Click( object sender, EventArgs e ) { if ( Page.IsValid ) { RockContext rockContext = new RockContext(); BenevolenceRequestService benevolenceRequestService = new BenevolenceRequestService( rockContext ); BenevolenceResultService benevolenceResultService = new BenevolenceResultService( rockContext ); BenevolenceRequest benevolenceRequest = null; int benevolenceRequestId = PageParameter( "BenevolenceRequestId" ).AsInteger(); if ( !benevolenceRequestId.Equals( 0 ) ) { benevolenceRequest = benevolenceRequestService.Get( benevolenceRequestId ); } if ( benevolenceRequest == null ) { benevolenceRequest = new BenevolenceRequest { Id = 0 }; } benevolenceRequest.FirstName = dtbFirstName.Text; benevolenceRequest.LastName = dtbLastName.Text; benevolenceRequest.Email = ebEmail.Text; benevolenceRequest.RequestText = dtbRequestText.Text; benevolenceRequest.ResultSummary = dtbSummary.Text; benevolenceRequest.CampusId = cpCampus.SelectedCampusId; benevolenceRequest.ProvidedNextSteps = dtbProvidedNextSteps.Text; benevolenceRequest.GovernmentId = dtbGovernmentId.Text; if ( lapAddress.Location != null ) { benevolenceRequest.LocationId = lapAddress.Location.Id; } benevolenceRequest.RequestedByPersonAliasId = ppPerson.PersonAliasId; benevolenceRequest.CaseWorkerPersonAliasId = ddlCaseWorker.SelectedValue.AsIntegerOrNull(); benevolenceRequest.RequestStatusValueId = ddlRequestStatus.SelectedValue.AsIntegerOrNull(); benevolenceRequest.ConnectionStatusValueId = ddlConnectionStatus.SelectedValue.AsIntegerOrNull(); if ( dpRequestDate.SelectedDate.HasValue ) { benevolenceRequest.RequestDateTime = dpRequestDate.SelectedDate.Value; } benevolenceRequest.HomePhoneNumber = pnbHomePhone.Number; benevolenceRequest.CellPhoneNumber = pnbCellPhone.Number; benevolenceRequest.WorkPhoneNumber = pnbWorkPhone.Number; List<BenevolenceResultInfo> resultListUI = BenevolenceResultsState; var resultListDB = benevolenceRequest.BenevolenceResults.ToList(); // remove any Benevolence Results that were removed in the UI foreach ( BenevolenceResult resultDB in resultListDB ) { if ( !resultListUI.Any( r => r.ResultId == resultDB.Id ) ) { benevolenceRequest.BenevolenceResults.Remove( resultDB ); benevolenceResultService.Delete( resultDB ); } } // add any Benevolence Results that were added in the UI foreach ( BenevolenceResultInfo resultUI in resultListUI ) { var resultDB = resultListDB.FirstOrDefault( r => r.Guid == resultUI.TempGuid ); if ( resultDB == null ) { resultDB = new BenevolenceResult(); resultDB.BenevolenceRequestId = benevolenceRequest.Id; resultDB.Guid = resultUI.TempGuid; benevolenceRequest.BenevolenceResults.Add( resultDB ); } resultDB.Amount = resultUI.Amount; resultDB.ResultSummary = resultUI.ResultSummary; resultDB.ResultTypeValueId = resultUI.ResultTypeValueId; } if ( benevolenceRequest.IsValid ) { if ( benevolenceRequest.Id.Equals( 0 ) ) { benevolenceRequestService.Add( benevolenceRequest ); } // get attributes benevolenceRequest.LoadAttributes(); Rock.Attribute.Helper.GetEditValues( phAttributes, benevolenceRequest ); rockContext.WrapTransaction( () => { rockContext.SaveChanges(); benevolenceRequest.SaveAttributeValues( rockContext ); } ); // update related documents var documentsService = new BenevolenceRequestDocumentService( rockContext ); // delete any images that were removed var orphanedBinaryFileIds = new List<int>(); var documentsInDb = documentsService.Queryable().Where( b => b.BenevolenceRequestId == benevolenceRequest.Id ).ToList(); foreach ( var document in documentsInDb.Where( i => !DocumentsState.Contains( i.BinaryFileId ) ) ) { orphanedBinaryFileIds.Add( document.BinaryFileId ); documentsService.Delete( document ); } // save documents int documentOrder = 0; foreach ( var binaryFileId in DocumentsState ) { // Add or Update the activity type var document = documentsInDb.FirstOrDefault( i => i.BinaryFileId == binaryFileId ); if ( document == null ) { document = new BenevolenceRequestDocument(); document.BenevolenceRequestId = benevolenceRequest.Id; benevolenceRequest.Documents.Add( document ); } document.BinaryFileId = binaryFileId; document.Order = documentOrder; documentOrder++; } rockContext.SaveChanges(); // redirect back to parent var personId = this.PageParameter( "PersonId" ).AsIntegerOrNull(); var qryParams = new Dictionary<string, string>(); if ( personId.HasValue ) { qryParams.Add( "PersonId", personId.ToString() ); } NavigateToParentPage( qryParams ); } } }
/// <summary> /// Maps the specified folder. /// </summary> /// <param name="folder">The folder.</param> /// <param name="requestDocumentType">The benevolence request document file type.</param> public int Map(ZipArchive folder, BinaryFileType requestDocumentType) { var lookupContext = new RockContext(); var emptyJsonObject = "{}"; var newFileList = new Dictionary <KeyValuePair <int, int>, Rock.Model.BinaryFile>(); var benevolenceRequestService = new BenevolenceRequestService(lookupContext); var importedRequests = benevolenceRequestService .Queryable().AsNoTracking().Where(t => t.ForeignId != null) .ToDictionary(t => ( int )t.ForeignId, t => t.Id); var importedRequestDocuments = new BenevolenceRequestDocumentService(lookupContext) .Queryable().AsNoTracking().Where(t => t.ForeignId != null) .ToDictionary(t => ( int )t.ForeignId, t => t.Id); var storageProvider = requestDocumentType.StorageEntityTypeId == DatabaseProvider.EntityType.Id ? ( ProviderComponent )DatabaseProvider : ( ProviderComponent )FileSystemProvider; var completedItems = 0; var totalEntries = folder.Entries.Count; var percentage = (totalEntries - 1) / 100 + 1; ReportProgress(0, string.Format("Verifying benevolence request documents import ({0:N0} found.", totalEntries)); foreach (var file in folder.Entries) { var fileExtension = Path.GetExtension(file.Name); if (FileTypeBlackList.Contains(fileExtension)) { LogException("Binary File Import", string.Format("{0} filetype not allowed ({1})", fileExtension, file.Name)); continue; } var nameWithoutExtension = file.Name.ReplaceLastOccurrence(fileExtension, string.Empty); var parsedFileName = nameWithoutExtension.Split('_').ToList(); // // Benevolence Request docs should follow this pattern: // 0. Request ForeignId // 1. FileName // 2. Doc Id var foreignBenevolenceRequestId = parsedFileName[0].AsType <int?>(); // Make sure the Benevolence Request exists if (foreignBenevolenceRequestId != null && importedRequests.ContainsKey(( int )foreignBenevolenceRequestId)) { var benevolenceRequest = benevolenceRequestService.Queryable().AsNoTracking().FirstOrDefault(r => r.ForeignId.HasValue && r.ForeignId == foreignBenevolenceRequestId); var documentForeignId = -1; var fileName = string.Empty; if (parsedFileName.Count() >= 3) { documentForeignId = parsedFileName.LastOrDefault().AsInteger(); // If document foreignId is provided, make sure it doesn't already exist if (documentForeignId > 0 && importedRequestDocuments.ContainsKey(documentForeignId)) { continue; } // Extract filename parsedFileName.RemoveAt(parsedFileName.Count() - 1); // Remove Doc Id from end parsedFileName.RemoveAt(0); // Remove Request ForeignId from beginning fileName = string.Join("_", parsedFileName); } else { var filename = file.Name.ReplaceLastOccurrence(fileExtension, string.Empty); } // Create the binary file var rockFile = new Rock.Model.BinaryFile { IsSystem = false, IsTemporary = false, MimeType = GetMIMEType(file.Name), BinaryFileTypeId = requestDocumentType.Id, FileName = fileName, CreatedDateTime = file.LastWriteTime.DateTime, ModifiedDateTime = file.LastWriteTime.DateTime, CreatedByPersonAliasId = ImportPersonAliasId }; rockFile.SetStorageEntityTypeId(requestDocumentType.StorageEntityTypeId); rockFile.StorageEntitySettings = emptyJsonObject; if (requestDocumentType.AttributeValues.Any()) { rockFile.StorageEntitySettings = requestDocumentType.AttributeValues .ToDictionary(a => a.Key, v => v.Value.Value).ToJson(); } // use base stream instead of file stream to keep the byte[] // NOTE: if byte[] converts to a string it will corrupt the stream using (var fileContent = new StreamReader(file.Open())) { rockFile.ContentStream = new MemoryStream(fileContent.BaseStream.ReadBytesToEnd()); } // add this document file to the Rock transaction newFileList.Add(new KeyValuePair <int, int>(importedRequests[( int )foreignBenevolenceRequestId], documentForeignId), rockFile); completedItems++; if (completedItems % percentage < 1) { var percentComplete = completedItems / percentage; ReportProgress(percentComplete, string.Format("{0:N0} benevolence document files imported ({1}% complete).", completedItems, percentComplete)); } if (completedItems % ReportingNumber < 1) { SaveFiles(newFileList, storageProvider); // Reset list newFileList.Clear(); ReportPartialProgress(); } } } if (newFileList.Any()) { SaveFiles(newFileList, storageProvider); } ReportProgress(100, string.Format("Finished document import: {0:N0} benevolence documents imported.", completedItems)); return(completedItems); }