/// <summary> /// Handles the Click event of the lbSaveAccount 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 lbSaveAccount_Click( object sender, EventArgs e ) { var rockContext = new RockContext(); if ( string.IsNullOrWhiteSpace( TransactionCode ) ) { nbSaveAccount.Text = "Sorry, the account information cannot be saved as there's not a valid transaction code to reference"; nbSaveAccount.Visible = true; return; } if ( phCreateLogin.Visible ) { if ( string.IsNullOrWhiteSpace( txtUserName.Text ) || string.IsNullOrWhiteSpace( txtPassword.Text ) ) { nbSaveAccount.Title = "Missing Informaton"; nbSaveAccount.Text = "A username and password are required when saving an account"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } if ( new UserLoginService( rockContext ).GetByUserName( txtUserName.Text ) != null ) { nbSaveAccount.Title = "Invalid Username"; nbSaveAccount.Text = "The selected Username is already being used. Please select a different Username"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } if ( txtPasswordConfirm.Text != txtPassword.Text ) { nbSaveAccount.Title = "Invalid Password"; nbSaveAccount.Text = "The password and password confirmation do not match"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } } if ( !string.IsNullOrWhiteSpace( txtSaveAccount.Text ) ) { GatewayComponent gateway = hfPaymentTab.Value == "ACH" ? _achGateway : _ccGateway; var ccCurrencyType = DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.CURRENCY_TYPE_CREDIT_CARD ) ); var achCurrencyType = DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.CURRENCY_TYPE_ACH ) ); string errorMessage = string.Empty; PersonAlias authorizedPersonAlias = null; string referenceNumber = string.Empty; int? currencyTypeValueId = hfPaymentTab.Value == "ACH" ? achCurrencyType.Id : ccCurrencyType.Id; if ( string.IsNullOrWhiteSpace( ScheduleId ) ) { var transaction = new FinancialTransactionService( rockContext ).GetByTransactionCode( TransactionCode ); if ( transaction != null && transaction.AuthorizedPersonAlias != null ) { authorizedPersonAlias = transaction.AuthorizedPersonAlias; referenceNumber = gateway.GetReferenceNumber( transaction, out errorMessage ); } } else { var scheduledTransaction = new FinancialScheduledTransactionService( rockContext ).GetByScheduleId( ScheduleId ); if ( scheduledTransaction != null ) { authorizedPersonAlias = scheduledTransaction.AuthorizedPersonAlias; referenceNumber = gateway.GetReferenceNumber( scheduledTransaction, out errorMessage ); } } if ( authorizedPersonAlias != null && authorizedPersonAlias.Person != null ) { if ( phCreateLogin.Visible ) { var user = UserLoginService.Create( rockContext, authorizedPersonAlias.Person, Rock.Model.AuthenticationServiceType.Internal, EntityTypeCache.Read( Rock.SystemGuid.EntityType.AUTHENTICATION_DATABASE.AsGuid() ).Id, txtUserName.Text, txtPassword.Text, false ); var mergeObjects = GlobalAttributesCache.GetMergeFields( null ); mergeObjects.Add( "ConfirmAccountUrl", RootPath + "ConfirmAccount" ); var personDictionary = authorizedPersonAlias.Person.ToLiquid() as Dictionary<string, object>; mergeObjects.Add( "Person", personDictionary ); mergeObjects.Add( "User", user ); var recipients = new List<Rock.Communication.RecipientData>(); recipients.Add( new Rock.Communication.RecipientData( authorizedPersonAlias.Person.Email, mergeObjects ) ); Rock.Communication.Email.Send( GetAttributeValue( "ConfirmAccountTemplate" ).AsGuid(), recipients, ResolveRockUrl( "~/" ), ResolveRockUrl( "~~/" ) ); } var paymentInfo = GetPaymentInfo(); if ( errorMessage.Any() ) { nbSaveAccount.Title = "Invalid Transaction"; nbSaveAccount.Text = "Sorry, the account information cannot be saved. " + errorMessage; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } else { if ( authorizedPersonAlias != null ) { var savedAccount = new FinancialPersonSavedAccount(); savedAccount.PersonAliasId = authorizedPersonAlias.Id; savedAccount.ReferenceNumber = referenceNumber; savedAccount.Name = txtSaveAccount.Text; savedAccount.MaskedAccountNumber = paymentInfo.MaskedNumber; savedAccount.TransactionCode = TransactionCode; savedAccount.GatewayEntityTypeId = gateway.TypeId; savedAccount.CurrencyTypeValueId = currencyTypeValueId; savedAccount.CreditCardTypeValueId = CreditCardTypeValueId; var savedAccountService = new FinancialPersonSavedAccountService( rockContext ); savedAccountService.Add( savedAccount ); rockContext.SaveChanges(); cbSaveAccount.Visible = false; txtSaveAccount.Visible = false; phCreateLogin.Visible = false; divSaveActions.Visible = false; nbSaveAccount.Title = "Success"; nbSaveAccount.Text = "The account has been saved for future use"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Success; nbSaveAccount.Visible = true; } } } else { nbSaveAccount.Title = "Invalid Transaction"; nbSaveAccount.Text = "Sorry, the account information cannot be saved as there's not a valid transaction code to reference"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } } else { nbSaveAccount.Title = "Missing Account Name"; nbSaveAccount.Text = "Please enter a name to use for this account"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } }
/// <summary> /// Handles the Click event of the lbSaveAccount 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 lbSaveAccount_Click( object sender, EventArgs e ) { if ( string.IsNullOrWhiteSpace( TransactionCode ) ) { nbSaveAccount.Text = "Sorry, the account information cannot be saved as there's not a valid transaction code to reference"; nbSaveAccount.Visible = true; return; } using ( var rockContext = new RockContext() ) { if ( phCreateLogin.Visible ) { if ( string.IsNullOrWhiteSpace( txtUserName.Text ) || string.IsNullOrWhiteSpace( txtPassword.Text ) ) { nbSaveAccount.Title = "Missing Informaton"; nbSaveAccount.Text = "A username and password are required when saving an account"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } if ( new UserLoginService( rockContext ).GetByUserName( txtUserName.Text ) != null ) { nbSaveAccount.Title = "Invalid Username"; nbSaveAccount.Text = "The selected Username is already being used. Please select a different Username"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } if ( !UserLoginService.IsPasswordValid( txtPassword.Text ) ) { nbSaveAccount.Title = string.Empty; nbSaveAccount.Text = UserLoginService.FriendlyPasswordRules(); nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } if ( txtPasswordConfirm.Text != txtPassword.Text ) { nbSaveAccount.Title = "Invalid Password"; nbSaveAccount.Text = "The password and password confirmation do not match"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } } if ( !string.IsNullOrWhiteSpace( txtSaveAccount.Text ) ) { bool isACHTxn = hfPaymentTab.Value == "ACH"; var financialGateway = isACHTxn ? _achGateway : _ccGateway; var gateway = isACHTxn ? _achGatewayComponent : _ccGatewayComponent; if ( gateway != null ) { var ccCurrencyType = DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.CURRENCY_TYPE_CREDIT_CARD ) ); var achCurrencyType = DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.CURRENCY_TYPE_ACH ) ); string errorMessage = string.Empty; var person = GetPerson( false ); string referenceNumber = string.Empty; FinancialPaymentDetail paymentDetail = null; int? currencyTypeValueId = isACHTxn ? achCurrencyType.Id : ccCurrencyType.Id; if ( string.IsNullOrWhiteSpace( ScheduleId ) ) { var transaction = new FinancialTransactionService( rockContext ).GetByTransactionCode( TransactionCode ); if ( transaction != null && transaction.AuthorizedPersonAlias != null ) { if ( transaction.FinancialGateway != null ) { transaction.FinancialGateway.LoadAttributes( rockContext ); } referenceNumber = gateway.GetReferenceNumber( transaction, out errorMessage ); paymentDetail = transaction.FinancialPaymentDetail; } } else { var scheduledTransaction = new FinancialScheduledTransactionService( rockContext ).GetByScheduleId( ScheduleId ); if ( scheduledTransaction != null ) { if ( scheduledTransaction.FinancialGateway != null ) { scheduledTransaction.FinancialGateway.LoadAttributes( rockContext ); } referenceNumber = gateway.GetReferenceNumber( scheduledTransaction, out errorMessage ); paymentDetail = scheduledTransaction.FinancialPaymentDetail; } } if ( person != null && paymentDetail != null ) { if ( phCreateLogin.Visible ) { var user = UserLoginService.Create( rockContext, person, Rock.Model.AuthenticationServiceType.Internal, EntityTypeCache.Read( Rock.SystemGuid.EntityType.AUTHENTICATION_DATABASE.AsGuid() ).Id, txtUserName.Text, txtPassword.Text, false ); var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields( this.RockPage, this.CurrentPerson ); mergeFields.Add( "ConfirmAccountUrl", RootPath + "ConfirmAccount" ); var personDictionary = person.ToLiquid() as Dictionary<string, object>; mergeFields.Add( "Person", personDictionary ); mergeFields.Add( "User", user ); var recipients = new List<Rock.Communication.RecipientData>(); recipients.Add( new Rock.Communication.RecipientData( person.Email, mergeFields ) ); Rock.Communication.Email.Send( GetAttributeValue( "ConfirmAccountTemplate" ).AsGuid(), recipients, ResolveRockUrl( "~/" ), ResolveRockUrl( "~~/" ), false ); } if ( errorMessage.Any() ) { nbSaveAccount.Title = "Invalid Transaction"; nbSaveAccount.Text = "Sorry, the account information cannot be saved. " + errorMessage; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } else { var savedAccount = new FinancialPersonSavedAccount(); savedAccount.PersonAliasId = person.PrimaryAliasId; savedAccount.ReferenceNumber = referenceNumber; savedAccount.Name = txtSaveAccount.Text; savedAccount.TransactionCode = TransactionCode; savedAccount.FinancialGatewayId = financialGateway.Id; savedAccount.FinancialPaymentDetail = new FinancialPaymentDetail(); savedAccount.FinancialPaymentDetail.AccountNumberMasked = paymentDetail.AccountNumberMasked; savedAccount.FinancialPaymentDetail.CurrencyTypeValueId = paymentDetail.CurrencyTypeValueId; savedAccount.FinancialPaymentDetail.CreditCardTypeValueId = paymentDetail.CreditCardTypeValueId; savedAccount.FinancialPaymentDetail.NameOnCardEncrypted = paymentDetail.NameOnCardEncrypted; savedAccount.FinancialPaymentDetail.ExpirationMonthEncrypted = paymentDetail.ExpirationMonthEncrypted; savedAccount.FinancialPaymentDetail.ExpirationYearEncrypted = paymentDetail.ExpirationYearEncrypted; savedAccount.FinancialPaymentDetail.BillingLocationId = paymentDetail.BillingLocationId; var savedAccountService = new FinancialPersonSavedAccountService( rockContext ); savedAccountService.Add( savedAccount ); rockContext.SaveChanges(); cbSaveAccount.Visible = false; txtSaveAccount.Visible = false; phCreateLogin.Visible = false; divSaveActions.Visible = false; nbSaveAccount.Title = "Success"; nbSaveAccount.Text = "The account has been saved for future use"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Success; nbSaveAccount.Visible = true; } } else { nbSaveAccount.Title = "Invalid Transaction"; nbSaveAccount.Text = "Sorry, the account information cannot be saved as there's not a valid transaction code to reference."; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } } else { nbSaveAccount.Title = "Invalid Gateway"; nbSaveAccount.Text = "Sorry, the financial gateway information for this type of transaction is not valid."; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } } else { nbSaveAccount.Title = "Missing Account Name"; nbSaveAccount.Text = "Please enter a name to use for this account."; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } } }
/// <summary> /// Handles the Click event of the lbSaveAccount 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 lbSaveAccount_Click( object sender, EventArgs e ) { if ( string.IsNullOrWhiteSpace( TransactionCode ) ) { nbSaveAccount.Text = "Sorry, the account information cannot be saved as there's not a valid transaction code to reference"; nbSaveAccount.Visible = true; return; } using ( var rockContext = new RockContext() ) { if ( phCreateLogin.Visible ) { if ( string.IsNullOrWhiteSpace( txtUserName.Text ) || string.IsNullOrWhiteSpace( txtPassword.Text ) ) { nbSaveAccount.Title = "Missing Informaton"; nbSaveAccount.Text = "A username and password are required when saving an account"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } if ( new UserLoginService( rockContext ).GetByUserName( txtUserName.Text ) != null ) { nbSaveAccount.Title = "Invalid Username"; nbSaveAccount.Text = "The selected Username is already being used. Please select a different Username"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } if ( !UserLoginService.IsPasswordValid( txtPassword.Text ) ) { nbSaveAccount.Title = string.Empty; nbSaveAccount.Text = UserLoginService.FriendlyPasswordRules(); nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } if ( txtPasswordConfirm.Text != txtPassword.Text ) { nbSaveAccount.Title = "Invalid Password"; nbSaveAccount.Text = "The password and password confirmation do not match"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; return; } } if ( !string.IsNullOrWhiteSpace( txtSaveAccount.Text ) ) { GatewayComponent gateway = null; if ( RegistrationTemplate != null && RegistrationTemplate.FinancialGateway != null ) { gateway = RegistrationTemplate.FinancialGateway.GetGatewayComponent(); } if ( gateway != null ) { var ccCurrencyType = DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.CURRENCY_TYPE_CREDIT_CARD ) ); string errorMessage = string.Empty; PersonAlias authorizedPersonAlias = null; string referenceNumber = string.Empty; int? currencyTypeValueId = ccCurrencyType.Id; var transaction = new FinancialTransactionService( rockContext ).GetByTransactionCode( TransactionCode ); if ( transaction != null && transaction.AuthorizedPersonAlias != null ) { authorizedPersonAlias = transaction.AuthorizedPersonAlias; if ( transaction.FinancialGateway != null ) { transaction.FinancialGateway.LoadAttributes( rockContext ); } referenceNumber = gateway.GetReferenceNumber( transaction, out errorMessage ); } if ( authorizedPersonAlias != null && authorizedPersonAlias.Person != null ) { if ( phCreateLogin.Visible ) { var user = UserLoginService.Create( rockContext, authorizedPersonAlias.Person, Rock.Model.AuthenticationServiceType.Internal, EntityTypeCache.Read( Rock.SystemGuid.EntityType.AUTHENTICATION_DATABASE.AsGuid() ).Id, txtUserName.Text, txtPassword.Text, false ); var mergeObjects = Rock.Lava.LavaHelper.GetCommonMergeFields(RockPage); mergeObjects.Add( "ConfirmAccountUrl", RootPath + "ConfirmAccount" ); var personDictionary = authorizedPersonAlias.Person.ToLiquid() as Dictionary<string, object>; mergeObjects.Add( "Person", personDictionary ); mergeObjects.Add( "User", user ); var recipients = new List<Rock.Communication.RecipientData>(); recipients.Add( new Rock.Communication.RecipientData( authorizedPersonAlias.Person.Email, mergeObjects ) ); try { Rock.Communication.Email.Send( GetAttributeValue( "ConfirmAccountTemplate" ).AsGuid(), recipients, ResolveRockUrl( "~/" ), ResolveRockUrl( "~~/" ), false ); } catch (Exception ex) { ExceptionLogService.LogException( ex, Context, this.RockPage.PageId, this.RockPage.Site.Id, CurrentPersonAlias ); } } var paymentInfo = GetCCPaymentInfo( gateway ); if ( errorMessage.Any() ) { nbSaveAccount.Title = "Invalid Transaction"; nbSaveAccount.Text = "Sorry, the account information cannot be saved. " + errorMessage; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } else { if ( authorizedPersonAlias != null ) { var savedAccount = new FinancialPersonSavedAccount(); savedAccount.PersonAliasId = authorizedPersonAlias.Id; savedAccount.ReferenceNumber = referenceNumber; savedAccount.Name = txtSaveAccount.Text; savedAccount.TransactionCode = TransactionCode; savedAccount.FinancialGatewayId = RegistrationTemplate.FinancialGateway.Id; savedAccount.FinancialPaymentDetail = new FinancialPaymentDetail(); savedAccount.FinancialPaymentDetail.SetFromPaymentInfo( paymentInfo, gateway, rockContext ); var savedAccountService = new FinancialPersonSavedAccountService( rockContext ); savedAccountService.Add( savedAccount ); rockContext.SaveChanges(); cbSaveAccount.Visible = false; txtSaveAccount.Visible = false; phCreateLogin.Visible = false; divSaveActions.Visible = false; nbSaveAccount.Title = "Success"; nbSaveAccount.Text = "The account has been saved for future use"; nbSaveAccount.NotificationBoxType = NotificationBoxType.Success; nbSaveAccount.Visible = true; } } } else { nbSaveAccount.Title = "Invalid Transaction"; nbSaveAccount.Text = "Sorry, the account information cannot be saved as there's not a valid transaction code to reference."; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } } else { nbSaveAccount.Title = "Invalid Gateway"; nbSaveAccount.Text = "Sorry, the financial gateway information for this type of transaction is not valid."; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } } else { nbSaveAccount.Title = "Missing Account Name"; nbSaveAccount.Text = "Please enter a name to use for this account."; nbSaveAccount.NotificationBoxType = NotificationBoxType.Danger; nbSaveAccount.Visible = true; } } }