/// <summary> /// Maps the account data. /// </summary> /// <param name="tableData">The table data.</param> /// <returns></returns> private void MapBankAccount( IQueryable<Row> tableData ) { var importedBankAccounts = new FinancialPersonBankAccountService().Queryable().ToList(); var newBankAccounts = new List<FinancialPersonBankAccount>(); int completed = 0; int totalRows = tableData.Count(); int percentage = ( totalRows - 1 ) / 100 + 1; ReportProgress( 0, string.Format( "Checking check number import ({0:N0} found).", totalRows ) ); foreach ( var row in tableData ) { int? individualId = row["Individual_ID"] as int?; int? householdId = row["Household_ID"] as int?; int? personId = GetPersonId( individualId, householdId ); if ( personId != null ) { int? routingNumber = row["Routing_Number"] as int?; string accountNumber = row["Account"] as string; if ( routingNumber != null && !string.IsNullOrWhiteSpace( accountNumber ) ) { accountNumber = accountNumber.Replace( " ", string.Empty ); string encodedNumber = FinancialPersonBankAccount.EncodeAccountNumber( routingNumber.ToString(), accountNumber ); if ( !importedBankAccounts.Any( a => a.PersonId == personId && a.AccountNumberSecured == encodedNumber ) ) { var bankAccount = new FinancialPersonBankAccount(); bankAccount.CreatedByPersonAliasId = ImportPersonAlias.Id; bankAccount.AccountNumberSecured = encodedNumber; bankAccount.PersonId = (int)personId; // Other Attributes (not used): // Account_Type_Name newBankAccounts.Add( bankAccount ); completed++; if ( completed % percentage < 1 ) { int percentComplete = completed / percentage; ReportProgress( percentComplete, string.Format( "{0:N0} numbers imported ({1}% complete).", completed, percentComplete ) ); } else if ( completed % ReportingNumber < 1 ) { RockTransactionScope.WrapTransaction( () => { var bankAccountService = new FinancialPersonBankAccountService(); bankAccountService.RockContext.FinancialPersonBankAccounts.AddRange( newBankAccounts ); bankAccountService.RockContext.SaveChanges(); } ); newBankAccounts.Clear(); ReportPartialProgress(); } } } } } if ( newBankAccounts.Any() ) { RockTransactionScope.WrapTransaction( () => { var bankAccountService = new FinancialPersonBankAccountService(); bankAccountService.RockContext.FinancialPersonBankAccounts.AddRange( newBankAccounts ); bankAccountService.RockContext.SaveChanges(); } ); } ReportProgress( 100, string.Format( "Finished check number import: {0:N0} numbers imported.", completed ) ); }
/// <summary> /// Maps the account data. /// </summary> /// <param name="tableData">The table data.</param> /// <returns></returns> private void MapBankAccount( IQueryable<Row> tableData ) { var lookupContext = new RockContext(); var importedBankAccounts = new FinancialPersonBankAccountService( lookupContext ).Queryable().AsNoTracking().ToList(); var newBankAccounts = new List<FinancialPersonBankAccount>(); int completed = 0; int totalRows = tableData.Count(); int percentage = ( totalRows - 1 ) / 100 + 1; ReportProgress( 0, string.Format( "Verifying check number import ({0:N0} found, {1:N0} already exist).", totalRows, importedBankAccounts.Count ) ); foreach ( var row in tableData.Where( r => r != null ) ) { int? individualId = row["Individual_ID"] as int?; int? householdId = row["Household_ID"] as int?; var personKeys = GetPersonKeys( individualId, householdId, false ); if ( personKeys != null && personKeys.PersonAliasId > 0 ) { int? routingNumber = row["Routing_Number"] as int?; string accountNumber = row["Account"] as string; if ( routingNumber != null && !string.IsNullOrWhiteSpace( accountNumber ) ) { accountNumber = accountNumber.Replace( " ", string.Empty ); string encodedNumber = FinancialPersonBankAccount.EncodeAccountNumber( routingNumber.ToString().PadLeft( 9, '0' ), accountNumber ); if ( !importedBankAccounts.Any( a => a.PersonAliasId == personKeys.PersonAliasId && a.AccountNumberSecured == encodedNumber ) ) { var bankAccount = new FinancialPersonBankAccount(); bankAccount.CreatedByPersonAliasId = ImportPersonAliasId; bankAccount.CreatedDateTime = ImportDateTime; bankAccount.ModifiedDateTime = ImportDateTime; bankAccount.AccountNumberSecured = encodedNumber; bankAccount.AccountNumberMasked = accountNumber.ToString().Masked(); bankAccount.PersonAliasId = (int)personKeys.PersonAliasId; newBankAccounts.Add( bankAccount ); completed++; if ( completed % percentage < 1 ) { int percentComplete = completed / percentage; ReportProgress( percentComplete, string.Format( "{0:N0} numbers imported ({1}% complete).", completed, percentComplete ) ); } else if ( completed % ReportingNumber < 1 ) { SaveBankAccounts( newBankAccounts ); newBankAccounts.Clear(); ReportPartialProgress(); } } } } } if ( newBankAccounts.Any() ) { SaveBankAccounts( newBankAccounts ); } ReportProgress( 100, string.Format( "Finished check number import: {0:N0} numbers imported.", completed ) ); }
/// <summary> /// Maps the account data. /// </summary> /// <param name="tableData">The table data.</param> /// <returns></returns> private void MapBankAccount( IQueryable<Row> tableData ) { var lookupContext = new RockContext(); var importedBankAccounts = new FinancialPersonBankAccountService( lookupContext ).Queryable().ToList(); var newBankAccounts = new List<FinancialPersonBankAccount>(); var householdAVList = new AttributeValueService( lookupContext ).Queryable().Where( av => av.AttributeId == HouseholdAttributeId ).ToList(); int completed = 0; int totalRows = tableData.Count(); int percentage = ( totalRows - 1 ) / 100 + 1; ReportProgress( 0, string.Format( "Verifying check number import ({0:N0} found, {1:N0} already exist).", totalRows, importedBankAccounts.Count() ) ); foreach ( var row in tableData ) { int? individualId = row["Individual_ID"] as int?; int? householdId = row["Household_ID"] as int?; //int? personId = GetPersonAliasId( individualId, householdId ); int? personId; if ( individualId != null ) { personId = GetPersonAliasId( individualId, householdId ); } //will get the exact person if Individual Id is not null. else { personId = GetPersonId( householdAVList, householdId ); } //Will attempt to get the Head first, then Spouse, then Child. Will exclude Other and Visitor if ( personId != null ) { int? routingNumber = row["Routing_Number"] as int?; string accountNumber = row["Account"] as string; if ( routingNumber != null && !string.IsNullOrWhiteSpace( accountNumber ) ) { accountNumber = accountNumber.Replace( " ", string.Empty ); string encodedNumber = FinancialPersonBankAccount.EncodeAccountNumber( routingNumber.ToString(), accountNumber ); if ( !importedBankAccounts.Any( a => a.PersonAliasId == personId && a.AccountNumberSecured == encodedNumber ) ) { var bankAccount = new FinancialPersonBankAccount(); bankAccount.CreatedByPersonAliasId = ImportPersonAlias.Id; bankAccount.AccountNumberSecured = encodedNumber; bankAccount.AccountNumberMasked = accountNumber.ToString().Masked(); bankAccount.PersonAliasId = (int)personId; // Other Attributes (not used): // Account_Type_Name newBankAccounts.Add( bankAccount ); completed++; if ( completed % percentage < 1 ) { int percentComplete = completed / percentage; ReportProgress( percentComplete, string.Format( "{0:N0} numbers imported ({1}% complete).", completed, percentComplete ) ); } else if ( completed % ReportingNumber < 1 ) { SaveBankAccounts( newBankAccounts ); newBankAccounts.Clear(); ReportPartialProgress(); } } } } } if ( newBankAccounts.Any() ) { SaveBankAccounts( newBankAccounts ); } ReportProgress( 100, string.Format( "Finished check number import: {0:N0} numbers imported.", completed ) ); }