/// <summary> /// Gets the value. /// </summary> /// <param name="location">The person alias.</param> /// <param name="locationId">The person alias identifier.</param> /// <param name="rockContext">The rock context.</param> /// <param name="blankValue">The blank value.</param> /// <returns></returns> private static string GetLocationValue(Location location, int?locationId, RockContext rockContext, string blankValue) { if (location != null) { return(location.ToString()); } if (locationId.HasValue) { var loc = new LocationService(rockContext).Get(locationId.Value); if (loc != null) { return(loc.ToString()); } } return(blankValue); }
/// <summary> /// Handles the Click event of the btnRegister 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 btnRegister_Click( object sender, EventArgs e ) { if ( Page.IsValid ) { var rockContext = new RockContext(); var personService = new PersonService( rockContext ); Person person = null; Person spouse = null; Group family = null; GroupLocation homeLocation = null; var changes = new List<string>(); var spouseChanges = new List<string>(); var familyChanges = new List<string>(); // Only use current person if the name entered matches the current person's name and autofill mode is true if ( _autoFill ) { if ( CurrentPerson != null && tbFirstName.Text.Trim().Equals( CurrentPerson.FirstName.Trim(), StringComparison.OrdinalIgnoreCase ) && tbLastName.Text.Trim().Equals( CurrentPerson.LastName.Trim(), StringComparison.OrdinalIgnoreCase ) ) { person = personService.Get( CurrentPerson.Id ); } } // Try to find person by name/email if ( person == null ) { var matches = personService.GetByMatch( tbFirstName.Text.Trim(), tbLastName.Text.Trim(), tbEmail.Text.Trim() ); if ( matches.Count() == 1 ) { person = matches.First(); } } // Check to see if this is a new person if ( person == null ) { // If so, create the person and family record for the new person person = new Person(); person.FirstName = tbFirstName.Text.Trim(); person.LastName = tbLastName.Text.Trim(); person.Email = tbEmail.Text.Trim(); person.IsEmailActive = true; person.EmailPreference = EmailPreference.EmailAllowed; person.RecordTypeValueId = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_PERSON.AsGuid() ).Id; person.ConnectionStatusValueId = _dvcConnectionStatus.Id; person.RecordStatusValueId = _dvcRecordStatus.Id; person.Gender = Gender.Unknown; family = PersonService.SaveNewPerson( person, rockContext, _group.CampusId, false ); } else { // updating current existing person History.EvaluateChange( changes, "Email", person.Email, tbEmail.Text ); person.Email = tbEmail.Text; // Get the current person's families var families = person.GetFamilies( rockContext ); // If address can being entered, look for first family with a home location if ( !IsSimple ) { foreach ( var aFamily in families ) { homeLocation = aFamily.GroupLocations .Where( l => l.GroupLocationTypeValueId == _homeAddressType.Id && l.IsMappedLocation ) .FirstOrDefault(); if ( homeLocation != null ) { family = aFamily; break; } } } // If a family wasn't found with a home location, use the person's first family if ( family == null ) { family = families.FirstOrDefault(); } } // If using a 'Full' view, save the phone numbers and address if ( !IsSimple ) { SetPhoneNumber( rockContext, person, pnHome, null, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME.AsGuid(), changes ); SetPhoneNumber( rockContext, person, pnCell, cbSms, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE.AsGuid(), changes ); string oldLocation = homeLocation != null ? homeLocation.Location.ToString() : string.Empty; string newLocation = string.Empty; var location = new LocationService( rockContext ).Get( acAddress.Street1, acAddress.Street2, acAddress.City, acAddress.State, acAddress.PostalCode, acAddress.Country ); if ( location != null ) { if ( homeLocation == null ) { homeLocation = new GroupLocation(); homeLocation.GroupLocationTypeValueId = _homeAddressType.Id; family.GroupLocations.Add( homeLocation ); } else { oldLocation = homeLocation.Location.ToString(); } homeLocation.Location = location; newLocation = location.ToString(); } else { if ( homeLocation != null ) { homeLocation.Location = null; family.GroupLocations.Remove( homeLocation ); new GroupLocationService( rockContext ).Delete( homeLocation ); } } History.EvaluateChange( familyChanges, "Home Location", oldLocation, newLocation ); // Check for the spouse if ( IsFullWithSpouse && !string.IsNullOrWhiteSpace(tbSpouseFirstName.Text) && !string.IsNullOrWhiteSpace(tbSpouseLastName.Text) ) { spouse = person.GetSpouse(); if ( spouse == null || !tbSpouseFirstName.Text.Trim().Equals( spouse.FirstName.Trim(), StringComparison.OrdinalIgnoreCase ) || !tbSpouseLastName.Text.Trim().Equals( spouse.LastName.Trim(), StringComparison.OrdinalIgnoreCase ) ) { spouse = new Person(); spouse.FirstName = tbSpouseFirstName.Text; History.EvaluateChange( spouseChanges, "First Name", string.Empty, spouse.FirstName ); spouse.LastName = tbSpouseLastName.Text; History.EvaluateChange( spouseChanges, "Last Name", string.Empty, spouse.LastName ); spouse.ConnectionStatusValueId = _dvcConnectionStatus.Id; spouse.RecordStatusValueId = _dvcRecordStatus.Id; spouse.Gender = Gender.Unknown; spouse.IsEmailActive = true; spouse.EmailPreference = EmailPreference.EmailAllowed; var groupMember = new GroupMember(); groupMember.GroupRoleId = _adultRole.Id; groupMember.Person = spouse; family.Members.Add( groupMember ); spouse.MaritalStatusValueId = _married.Id; person.MaritalStatusValueId = _married.Id; } History.EvaluateChange( changes, "Email", person.Email, tbEmail.Text ); spouse.Email = tbSpouseEmail.Text; SetPhoneNumber( rockContext, spouse, pnHome, null, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME.AsGuid(), spouseChanges ); SetPhoneNumber( rockContext, spouse, pnSpouseCell, cbSpouseSms, Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_MOBILE.AsGuid(), spouseChanges ); } } // Save the person/spouse and change history rockContext.SaveChanges(); HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(), person.Id, changes ); HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_FAMILY_CHANGES.AsGuid(), person.Id, familyChanges ); if ( spouse != null ) { HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(), spouse.Id, spouseChanges ); HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_FAMILY_CHANGES.AsGuid(), spouse.Id, familyChanges ); } // Check to see if a workflow should be launched for each person WorkflowType workflowType = null; Guid? workflowTypeGuid = GetAttributeValue( "Workflow" ).AsGuidOrNull(); if ( workflowTypeGuid.HasValue ) { var workflowTypeService = new WorkflowTypeService( rockContext ); workflowType = workflowTypeService.Get( workflowTypeGuid.Value ); } // Save the registrations ( and launch workflows ) var newGroupMembers = new List<GroupMember>(); AddPersonToGroup( rockContext, person, workflowType, newGroupMembers ); AddPersonToGroup( rockContext, spouse, workflowType, newGroupMembers ); // Show the results pnlView.Visible = false; pnlResult.Visible = true; // Show lava content var mergeFields = new Dictionary<string, object>(); mergeFields.Add( "Group", _group ); mergeFields.Add( "GroupMembers", newGroupMembers ); bool showDebug = UserCanEdit && GetAttributeValue( "EnableDebug" ).AsBoolean(); lResultDebug.Visible = showDebug; if ( showDebug ) { lResultDebug.Text = mergeFields.lavaDebugInfo( _rockContext ); } string template = GetAttributeValue( "ResultLavaTemplate" ); lResult.Text = template.ResolveMergeFields( mergeFields ); // Will only redirect if a value is specifed NavigateToLinkedPage( "ResultPage" ); } }
/// <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 ) { var rockContext = new RockContext(); rockContext.WrapTransaction( () => { var personService = new PersonService( rockContext ); var changes = new List<string>(); Person business = null; if ( int.Parse( hfBusinessId.Value ) != 0 ) { business = personService.Get( int.Parse( hfBusinessId.Value ) ); } if ( business == null ) { business = new Person(); personService.Add( business ); } // Business Name History.EvaluateChange( changes, "Last Name", business.LastName, tbBusinessName.Text ); business.LastName = tbBusinessName.Text; // Phone Number var businessPhoneTypeId = new DefinedValueService( rockContext ).GetByGuid( new Guid( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_WORK ) ).Id; string oldPhoneNumber = string.Empty; string newPhoneNumber = string.Empty; var phoneNumber = business.PhoneNumbers.FirstOrDefault( n => n.NumberTypeValueId == businessPhoneTypeId ); if ( phoneNumber != null ) { oldPhoneNumber = phoneNumber.NumberFormattedWithCountryCode; } if ( !string.IsNullOrWhiteSpace( PhoneNumber.CleanNumber( pnbPhone.Number ) ) ) { if ( phoneNumber == null ) { phoneNumber = new PhoneNumber { NumberTypeValueId = businessPhoneTypeId }; business.PhoneNumbers.Add( phoneNumber ); } phoneNumber.CountryCode = PhoneNumber.CleanNumber( pnbPhone.CountryCode ); phoneNumber.Number = PhoneNumber.CleanNumber( pnbPhone.Number ); phoneNumber.IsMessagingEnabled = cbSms.Checked; phoneNumber.IsUnlisted = cbUnlisted.Checked; newPhoneNumber = phoneNumber.NumberFormattedWithCountryCode; } else { if ( phoneNumber != null ) { business.PhoneNumbers.Remove( phoneNumber ); new PhoneNumberService( rockContext ).Delete( phoneNumber ); } } History.EvaluateChange( changes, string.Format( "{0} Phone", DefinedValueCache.GetName( businessPhoneTypeId ) ), oldPhoneNumber, newPhoneNumber ); // Record Type - this is always "business". it will never change. business.RecordTypeValueId = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_BUSINESS.AsGuid() ).Id; // Record Status int? newRecordStatusId = ddlRecordStatus.SelectedValueAsInt(); History.EvaluateChange( changes, "Record Status", DefinedValueCache.GetName( business.RecordStatusValueId ), DefinedValueCache.GetName( newRecordStatusId ) ); business.RecordStatusValueId = newRecordStatusId; // Record Status Reason int? newRecordStatusReasonId = null; if ( business.RecordStatusValueId.HasValue && business.RecordStatusValueId.Value == DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_INACTIVE ) ).Id ) { newRecordStatusReasonId = ddlReason.SelectedValueAsInt(); } History.EvaluateChange( changes, "Record Status Reason", DefinedValueCache.GetName( business.RecordStatusReasonValueId ), DefinedValueCache.GetName( newRecordStatusReasonId ) ); business.RecordStatusReasonValueId = newRecordStatusReasonId; // Email business.IsEmailActive = true; History.EvaluateChange( changes, "Email", business.Email, tbEmail.Text ); business.Email = tbEmail.Text.Trim(); var newEmailPreference = rblEmailPreference.SelectedValue.ConvertToEnum<EmailPreference>(); History.EvaluateChange( changes, "EmailPreference", business.EmailPreference, newEmailPreference ); business.EmailPreference = newEmailPreference; if ( business.IsValid ) { if ( rockContext.SaveChanges() > 0 ) { if ( changes.Any() ) { HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(), business.Id, changes ); } } } // Add/Update Family Group var familyGroupType = GroupTypeCache.GetFamilyGroupType(); int adultRoleId = familyGroupType.Roles .Where( r => r.Guid.Equals( Rock.SystemGuid.GroupRole.GROUPROLE_FAMILY_MEMBER_ADULT.AsGuid() ) ) .Select( r => r.Id ) .FirstOrDefault(); var adultFamilyMember = UpdateGroupMember( business.Id, familyGroupType, business.LastName + " Business", ddlCampus.SelectedValueAsInt(), adultRoleId, rockContext ); business.GivingGroup = adultFamilyMember.Group; // Add/Update Known Relationship Group Type var knownRelationshipGroupType = GroupTypeCache.Read( Rock.SystemGuid.GroupType.GROUPTYPE_KNOWN_RELATIONSHIPS.AsGuid() ); int knownRelationshipOwnerRoleId = knownRelationshipGroupType.Roles .Where( r => r.Guid.Equals( Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_OWNER.AsGuid() ) ) .Select( r => r.Id ) .FirstOrDefault(); var knownRelationshipOwner = UpdateGroupMember( business.Id, knownRelationshipGroupType, "Known Relationship", null, knownRelationshipOwnerRoleId, rockContext ); // Add/Update Implied Relationship Group Type var impliedRelationshipGroupType = GroupTypeCache.Read( Rock.SystemGuid.GroupType.GROUPTYPE_IMPLIED_RELATIONSHIPS.AsGuid() ); int impliedRelationshipOwnerRoleId = impliedRelationshipGroupType.Roles .Where( r => r.Guid.Equals( Rock.SystemGuid.GroupRole.GROUPROLE_IMPLIED_RELATIONSHIPS_OWNER.AsGuid() ) ) .Select( r => r.Id ) .FirstOrDefault(); var impliedRelationshipOwner = UpdateGroupMember( business.Id, impliedRelationshipGroupType, "Implied Relationship", null, impliedRelationshipOwnerRoleId, rockContext ); rockContext.SaveChanges(); // Every business should have an alias record with same id. If it's missing, create it if ( !business.Aliases.Any( a => a.AliasPersonId == business.Id ) ) { // refetch the business to make sure we have an Id business = personService.Get( business.Id ); if ( business != null ) { business.Aliases.Add( new PersonAlias { AliasPersonId = business.Id, AliasPersonGuid = business.Guid } ); rockContext.SaveChanges(); } } // Location int workLocationTypeId = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_WORK ).Id; var groupLocationService = new GroupLocationService( rockContext ); var workLocation = groupLocationService.Queryable( "Location" ) .Where( gl => gl.GroupId == adultFamilyMember.Group.Id && gl.GroupLocationTypeValueId == workLocationTypeId ) .FirstOrDefault(); if ( string.IsNullOrWhiteSpace( acAddress.Street1 ) ) { if ( workLocation != null ) { groupLocationService.Delete( workLocation ); History.EvaluateChange( changes, "Address", workLocation.Location.ToString(), string.Empty ); } } else { var oldValue = string.Empty; var newLocation = new LocationService( rockContext ).Get( acAddress.Street1, acAddress.Street2, acAddress.City, acAddress.State, acAddress.PostalCode, acAddress.Country ); if ( workLocation != null ) { oldValue = workLocation.Location.ToString(); } else { workLocation = new GroupLocation(); groupLocationService.Add( workLocation ); workLocation.GroupId = adultFamilyMember.Group.Id; workLocation.GroupLocationTypeValueId = workLocationTypeId; } workLocation.Location = newLocation; History.EvaluateChange( changes, "Address", oldValue, newLocation.ToString() ); } rockContext.SaveChanges(); hfBusinessId.Value = business.Id.ToString(); } ); ShowSummary( hfBusinessId.Value.AsInteger() ); }
/// <summary> /// Formats the selection. /// </summary> /// <param name="entityType">Type of the entity.</param> /// <param name="selection">The selection.</param> /// <returns></returns> public override string FormatSelection( Type entityType, string selection ) { string result = "Distance From"; string[] selectionValues = selection.Split( '|' ); if ( selectionValues.Length >= 2 ) { Guid locationGuid = selectionValues[0].AsGuid(); var location = new LocationService( new RockContext() ).Get( locationGuid ); double miles = selectionValues[1].AsDoubleOrNull() ?? 0; result = string.Format( "Within {0} miles from location: {1}", miles, location != null ? location.ToString() : string.Empty ); } return result; }
/// <summary> /// Formats the selection. /// </summary> /// <param name="entityType">Type of the entity.</param> /// <param name="selection">The selection.</param> /// <returns></returns> public override string FormatSelection( Type entityType, string selection ) { string result = "Distance From"; string[] selectionValues = selection.Split( '|' ); if ( selectionValues.Length >= 2 ) { int? locationId = selectionValues[0].AsInteger(); var location = new LocationService().Get( locationId ?? 0 ); double miles = 0; double.TryParse( selectionValues[1], out miles ); result = string.Format( "Within {0} miles from location: {1}", miles, location != null ? location.ToString() : string.Empty ); } return result; }
/// <summary> /// Sets from payment information. /// </summary> /// <param name="paymentInfo">The payment information.</param> /// <param name="paymentGateway">The payment gateway.</param> /// <param name="rockContext">The rock context.</param> /// <param name="changes">The changes.</param> public void SetFromPaymentInfo(PaymentInfo paymentInfo, GatewayComponent paymentGateway, RockContext rockContext, List <string> changes = null) { if (changes != null) { if (!string.IsNullOrWhiteSpace(paymentInfo.MaskedNumber)) { History.EvaluateChange(changes, "Account Number", AccountNumberMasked, paymentInfo.MaskedNumber); } if (paymentInfo.CurrencyTypeValue != null) { History.EvaluateChange(changes, "Currency Type", DefinedValueCache.GetName(CurrencyTypeValueId), paymentInfo.CurrencyTypeValue.Value); } if (paymentInfo.CreditCardTypeValue != null) { History.EvaluateChange(changes, "Credit Card Type", DefinedValueCache.GetName(CreditCardTypeValueId), paymentInfo.CreditCardTypeValue.Value); } } if (!string.IsNullOrWhiteSpace(paymentInfo.MaskedNumber)) { AccountNumberMasked = paymentInfo.MaskedNumber; } if (paymentInfo.CurrencyTypeValue != null) { CurrencyTypeValueId = paymentInfo.CurrencyTypeValue.Id; } if (paymentInfo.CreditCardTypeValue != null) { CreditCardTypeValueId = paymentInfo.CreditCardTypeValue.Id; } if (paymentInfo is CreditCardPaymentInfo) { var ccPaymentInfo = (CreditCardPaymentInfo)paymentInfo; string nameOnCard = paymentGateway.SplitNameOnCard ? ccPaymentInfo.NameOnCard + " " + ccPaymentInfo.LastNameOnCard : ccPaymentInfo.NameOnCard; var newLocation = new LocationService(rockContext).Get( ccPaymentInfo.BillingStreet1, ccPaymentInfo.BillingStreet2, ccPaymentInfo.BillingCity, ccPaymentInfo.BillingState, ccPaymentInfo.BillingPostalCode, ccPaymentInfo.BillingCountry); if (changes != null) { string oldNameOnCard = Encryption.DecryptString(NameOnCardEncrypted); History.EvaluateChange(changes, "Name on Card", oldNameOnCard, nameOnCard); History.EvaluateChange(changes, "Expiration Month", Encryption.DecryptString(ExpirationMonthEncrypted), ccPaymentInfo.ExpirationDate.Month.ToString()); History.EvaluateChange(changes, "Expiration Year", Encryption.DecryptString(ExpirationYearEncrypted), ccPaymentInfo.ExpirationDate.Year.ToString()); History.EvaluateChange(changes, "Billing Location", BillingLocation != null ? BillingLocation.ToString() : string.Empty, newLocation != null ? newLocation.ToString() : string.Empty); } NameOnCardEncrypted = Encryption.EncryptString(nameOnCard); ExpirationMonthEncrypted = Encryption.EncryptString(ccPaymentInfo.ExpirationDate.Month.ToString()); ExpirationYearEncrypted = Encryption.EncryptString(ccPaymentInfo.ExpirationDate.Year.ToString()); BillingLocationId = newLocation != null ? newLocation.Id : (int?)null; } else if (paymentInfo is SwipePaymentInfo) { var swipePaymentInfo = (SwipePaymentInfo)paymentInfo; if (changes != null) { string oldNameOnCard = Encryption.DecryptString(NameOnCardEncrypted); History.EvaluateChange(changes, "Name on Card", oldNameOnCard, swipePaymentInfo.NameOnCard); History.EvaluateChange(changes, "Expiration Month", Encryption.DecryptString(ExpirationMonthEncrypted), swipePaymentInfo.ExpirationDate.Month.ToString()); History.EvaluateChange(changes, "Expiration Year", Encryption.DecryptString(ExpirationYearEncrypted), swipePaymentInfo.ExpirationDate.Year.ToString()); } NameOnCardEncrypted = Encryption.EncryptString(swipePaymentInfo.NameOnCard); ExpirationMonthEncrypted = Encryption.EncryptString(swipePaymentInfo.ExpirationDate.Month.ToString()); ExpirationYearEncrypted = Encryption.EncryptString(swipePaymentInfo.ExpirationDate.Year.ToString()); } }