/// <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> /// <param name="totalRows">The total rows.</param> private void MapBankAccount(IQueryable <Row> tableData, long totalRows = 0) { var lookupContext = new RockContext(); var importedBankAccounts = new FinancialPersonBankAccountService(lookupContext).Queryable().AsNoTracking().ToList(); var newBankAccounts = new List <FinancialPersonBankAccount>(); if (totalRows == 0) { totalRows = tableData.Count(); } var completedItems = 0; var percentage = (totalRows - 1) / 100 + 1; ReportProgress(0, $"Verifying check number import ({totalRows:N0} found, {importedBankAccounts.Count:N0} already exist)."); foreach (var row in tableData.Where(r => r != null)) { var individualId = row["Individual_ID"] as int?; var householdId = row["Household_ID"] as int?; var personKeys = GetPersonKeys(individualId, householdId); if (personKeys != null && personKeys.PersonAliasId > 0) { var routingNumber = row["Routing_Number"] as int?; var accountNumber = row["Account"] as string; if (routingNumber.HasValue && !string.IsNullOrWhiteSpace(accountNumber)) { accountNumber = accountNumber.Replace(" ", string.Empty); var encodedNumber = FinancialPersonBankAccount.EncodeAccountNumber(routingNumber.ToString(), accountNumber); if (!importedBankAccounts.Any(a => a.PersonAliasId == personKeys.PersonAliasId && a.AccountNumberSecured == encodedNumber)) { var bankAccount = new FinancialPersonBankAccount { CreatedByPersonAliasId = ImportPersonAliasId, AccountNumberSecured = encodedNumber, AccountNumberMasked = accountNumber.ToString().Masked(), PersonAliasId = ( int )personKeys.PersonAliasId }; newBankAccounts.Add(bankAccount); completedItems++; if (completedItems % percentage < 1) { var percentComplete = completedItems / percentage; ReportProgress(percentComplete, $"{completedItems:N0} numbers imported ({percentComplete}% complete)."); } if (completedItems % ReportingNumber < 1) { SaveBankAccounts(newBankAccounts); newBankAccounts.Clear(); ReportPartialProgress(); } } } } } if (newBankAccounts.Any()) { SaveBankAccounts(newBankAccounts); } ReportProgress(100, $"Finished check number import: {completedItems:N0} numbers imported."); }
/// <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)); }