Пример #1
0
        /// <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 );
                }
            }
        }
Пример #3
0
        /// <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);
        }