/// <summary> /// Saves the files. /// </summary> /// <param name="newFileList">The new file list.</param> /// <param name="storageProvider">The storage provider.</param> private static void SaveFiles(Dictionary <KeyValuePair <int, int>, Rock.Model.BinaryFile> newFileList, ProviderComponent storageProvider) { var rockContext = new RockContext(); rockContext.WrapTransaction(() => { rockContext.BinaryFiles.AddRange(newFileList.Values); rockContext.SaveChanges(DisableAuditing); foreach (var entry in newFileList) { if (entry.Value != null) { if (storageProvider != null) { storageProvider.SaveContent(entry.Value); entry.Value.Path = storageProvider.GetPath(entry.Value); } else { LogException("Binary File Import", string.Format("Could not load provider {0}.", storageProvider.ToString())); } } // associate the document with the correct BenevolenceRequest var benevolenceDocument = new BenevolenceRequestDocument { BenevolenceRequestId = entry.Key.Key, BinaryFileId = entry.Value.Id, Order = 0 }; if (entry.Key.Value > 0) { benevolenceDocument.ForeignKey = entry.Key.Value.ToString(); benevolenceDocument.ForeignId = entry.Key.Value; } rockContext.BenevolenceRequests.FirstOrDefault(r => r.Id == entry.Key.Key) .Documents.Add(benevolenceDocument); } rockContext.SaveChanges(DisableAuditing); }); }
/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute( RockContext rockContext, WorkflowAction action, Object entity, out List<string> errorMessages ) { errorMessages = new List<string>(); var mergeFields = GetMergeFields( action ); BenevolenceRequestService benevolenceRequestService = new BenevolenceRequestService( rockContext ); var benevolenceRequest = benevolenceRequestService.Get( GetAttributeValue( action, "BenevolenceRequest", true ).AsGuid() ); if (benevolenceRequest == null ) { var errorMessage = "Benevolence request could not be found."; errorMessages.Add( errorMessage ); action.AddLogEntry( errorMessage, true ); return false; } var binaryFile = new BinaryFileService(rockContext).Get(GetAttributeValue( action, "Document", true ).AsGuid()); if ( binaryFile == null ) { action.AddLogEntry( "The document to add to the benevolence request was not be found.", true ); return true; // returning true here to allow the action to run 'successfully' without a document. This allows the action to be easily used when the document is optional without a bunch of action filter tests. } BenevolenceRequestDocument requestDocument = new BenevolenceRequestDocument(); benevolenceRequest.Documents.Add( requestDocument ); requestDocument.BinaryFileId = binaryFile.Id; rockContext.SaveChanges(); action.AddLogEntry( "Added document to the benevolence request." ); return true; }
/// <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 ); } } }