/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnInit( EventArgs e ) { base.OnInit( e ); ddlTitle.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_TITLE ) ), true ); ddlSuffix.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_SUFFIX ) ), true ); rblMaritalStatus.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS ) ) ); rblStatus.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_CONNECTION_STATUS ) ) ); ddlRecordStatus.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_RECORD_STATUS ) ) ); ddlReason.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_RECORD_STATUS_REASON ) ), true ); ddlGivingGroup.Items.Clear(); ddlGivingGroup.Items.Add( new ListItem( None.Text, None.IdValue ) ); if ( Person != null ) { var personService = new PersonService(); foreach ( var family in personService.GetFamilies( Person ) ) { ddlGivingGroup.Items.Add( new ListItem( family.Name, family.Id.ToString() ) ); } } }
private Person GetPersonOrBusiness( Person person ) { if ( person != null && phGiveAsOption.Visible && !tglGiveAsOption.Checked ) { var rockContext = new RockContext(); var personService = new PersonService( rockContext ); var groupService = new GroupService( rockContext ); var groupMemberService = new GroupMemberService( rockContext ); Group familyGroup = null; Person business = null; int? businessId = cblBusiness.SelectedValueAsInt(); if ( businessId.HasValue ) { business = personService.Get( businessId.Value ); } if ( business == null ) { DefinedValueCache dvcConnectionStatus = DefinedValueCache.Read( GetAttributeValue( "ConnectionStatus" ).AsGuid() ); DefinedValueCache dvcRecordStatus = DefinedValueCache.Read( GetAttributeValue( "RecordStatus" ).AsGuid() ); // Create Person business = new Person(); business.LastName = txtLastName.Text; business.IsEmailActive = true; business.EmailPreference = EmailPreference.EmailAllowed; business.RecordTypeValueId = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_BUSINESS.AsGuid() ).Id; if ( dvcConnectionStatus != null ) { business.ConnectionStatusValueId = dvcConnectionStatus.Id; } if ( dvcRecordStatus != null ) { business.RecordStatusValueId = dvcRecordStatus.Id; } // Create Person/Family familyGroup = PersonService.SaveNewPerson( business, rockContext, null, false ); // Get the relationship roles to use var knownRelationshipGroupType = GroupTypeCache.Read( Rock.SystemGuid.GroupType.GROUPTYPE_KNOWN_RELATIONSHIPS.AsGuid() ); int businessContactRoleId = knownRelationshipGroupType.Roles .Where( r => r.Guid.Equals( Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS_CONTACT.AsGuid() ) ) .Select( r => r.Id ) .FirstOrDefault(); int businessRoleId = knownRelationshipGroupType.Roles .Where( r => r.Guid.Equals( Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS.AsGuid() ) ) .Select( r => r.Id ) .FirstOrDefault(); int ownerRoleId = knownRelationshipGroupType.Roles .Where( r => r.Guid.Equals( Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_OWNER.AsGuid() ) ) .Select( r => r.Id ) .FirstOrDefault(); if ( ownerRoleId > 0 && businessContactRoleId > 0 && businessRoleId > 0 ) { // get the known relationship group of the business contact // add the business as a group member of that group using the group role of GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS var contactKnownRelationshipGroup = groupMemberService.Queryable() .Where( g => g.GroupRoleId == ownerRoleId && g.PersonId == person.Id ) .Select( g => g.Group ) .FirstOrDefault(); if ( contactKnownRelationshipGroup == null ) { // In some cases person may not yet have a know relationship group type contactKnownRelationshipGroup = new Group(); groupService.Add( contactKnownRelationshipGroup ); contactKnownRelationshipGroup.Name = "Known Relationship"; contactKnownRelationshipGroup.GroupTypeId = knownRelationshipGroupType.Id; var ownerMember = new GroupMember(); ownerMember.PersonId = person.Id; ownerMember.GroupRoleId = ownerRoleId; contactKnownRelationshipGroup.Members.Add( ownerMember ); } var groupMember = new GroupMember(); groupMember.PersonId = business.Id; groupMember.GroupRoleId = businessRoleId; contactKnownRelationshipGroup.Members.Add( groupMember ); // get the known relationship group of the business // add the business contact as a group member of that group using the group role of GROUPROLE_KNOWN_RELATIONSHIPS_BUSINESS_CONTACT var businessKnownRelationshipGroup = groupMemberService.Queryable() .Where( g => g.GroupRole.Guid.Equals( new Guid( Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_OWNER ) ) && g.PersonId == business.Id ) .Select( g => g.Group ) .FirstOrDefault(); if ( businessKnownRelationshipGroup == null ) { // In some cases business may not yet have a know relationship group type businessKnownRelationshipGroup = new Group(); groupService.Add( businessKnownRelationshipGroup ); businessKnownRelationshipGroup.Name = "Known Relationship"; businessKnownRelationshipGroup.GroupTypeId = knownRelationshipGroupType.Id; var ownerMember = new GroupMember(); ownerMember.PersonId = business.Id; ownerMember.GroupRoleId = ownerRoleId; businessKnownRelationshipGroup.Members.Add( ownerMember ); } var businessGroupMember = new GroupMember(); businessGroupMember.PersonId = person.Id; businessGroupMember.GroupRoleId = businessContactRoleId; businessKnownRelationshipGroup.Members.Add( businessGroupMember ); rockContext.SaveChanges(); } } business.LastName = txtBusinessName.Text; business.Email = txtEmail.Text; if ( GetAttributeValue( "DisplayPhone" ).AsBooleanOrNull() ?? false ) { var numberTypeId = DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_WORK ) ).Id; var phone = business.PhoneNumbers.FirstOrDefault( p => p.NumberTypeValueId == numberTypeId ); if ( phone == null ) { phone = new PhoneNumber(); business.PhoneNumbers.Add( phone ); phone.NumberTypeValueId = numberTypeId; } phone.CountryCode = PhoneNumber.CleanNumber( pnbPhone.CountryCode ); phone.Number = PhoneNumber.CleanNumber( pnbPhone.Number ); } if ( familyGroup == null ) { var groupLocationService = new GroupLocationService( rockContext ); if ( GroupLocationId.HasValue ) { familyGroup = groupLocationService.Queryable() .Where( gl => gl.Id == GroupLocationId.Value ) .Select( gl => gl.Group ) .FirstOrDefault(); } else { familyGroup = personService.GetFamilies( business.Id ).FirstOrDefault(); } } rockContext.SaveChanges(); if ( familyGroup != null ) { GroupService.AddNewGroupAddress( rockContext, familyGroup, Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_WORK, acAddress.Street1, acAddress.Street2, acAddress.City, acAddress.State, acAddress.PostalCode, acAddress.Country, false ); } return business; } return person; }
/// <summary> /// Gets the person. /// </summary> /// <param name="create">if set to <c>true</c> [create].</param> /// <returns></returns> private Person GetPerson( bool create ) { Person person = null; var rockContext = new RockContext(); var personService = new PersonService( rockContext ); Group familyGroup = null; int personId = ViewState["PersonId"] as int? ?? 0; if ( personId == 0 && _targetPerson != null ) { personId = _targetPerson.Id; } if ( personId != 0 ) { person = personService.Get( personId ); } if ( create && ( !phGiveAsOption.Visible || tglGiveAsOption.Checked ) ) // If tglGiveOption is not checked, then person should not be null { if ( person == null ) { // Check to see if there's only one person with same email, first name, and last name if ( !string.IsNullOrWhiteSpace( txtEmail.Text ) && !string.IsNullOrWhiteSpace( txtFirstName.Text ) && !string.IsNullOrWhiteSpace( txtLastName.Text ) ) { // Same logic as CreatePledge.ascx.cs var personMatches = personService.GetByMatch( txtFirstName.Text, txtLastName.Text, txtEmail.Text ); if ( personMatches.Count() == 1 ) { person = personMatches.FirstOrDefault(); } else { person = null; } } if ( person == null ) { DefinedValueCache dvcConnectionStatus = DefinedValueCache.Read( GetAttributeValue( "ConnectionStatus" ).AsGuid() ); DefinedValueCache dvcRecordStatus = DefinedValueCache.Read( GetAttributeValue( "RecordStatus" ).AsGuid() ); // Create Person person = new Person(); person.FirstName = txtFirstName.Text; person.LastName = txtLastName.Text; person.IsEmailActive = true; person.EmailPreference = EmailPreference.EmailAllowed; person.RecordTypeValueId = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_PERSON.AsGuid() ).Id; if ( dvcConnectionStatus != null ) { person.ConnectionStatusValueId = dvcConnectionStatus.Id; } if ( dvcRecordStatus != null ) { person.RecordStatusValueId = dvcRecordStatus.Id; } // Create Person/Family familyGroup = PersonService.SaveNewPerson( person, rockContext, null, false ); } ViewState["PersonId"] = person != null ? person.Id : 0; } } if ( create && person != null ) // person should never be null at this point { person.Email = txtEmail.Text; if ( GetAttributeValue( "DisplayPhone" ).AsBooleanOrNull() ?? false ) { var numberTypeId = DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME ) ).Id; var phone = person.PhoneNumbers.FirstOrDefault( p => p.NumberTypeValueId == numberTypeId ); if ( phone == null ) { phone = new PhoneNumber(); person.PhoneNumbers.Add( phone ); phone.NumberTypeValueId = numberTypeId; } phone.CountryCode = PhoneNumber.CleanNumber( pnbPhone.CountryCode ); phone.Number = PhoneNumber.CleanNumber( pnbPhone.Number ); } if ( familyGroup == null ) { var groupLocationService = new GroupLocationService( rockContext ); if ( GroupLocationId.HasValue ) { familyGroup = groupLocationService.Queryable() .Where( gl => gl.Id == GroupLocationId.Value ) .Select( gl => gl.Group ) .FirstOrDefault(); } else { familyGroup = personService.GetFamilies( person.Id ).FirstOrDefault(); } } rockContext.SaveChanges(); if ( familyGroup != null ) { GroupService.AddNewGroupAddress( rockContext, familyGroup, GetAttributeValue( "AddressType" ), acAddress.Street1, acAddress.Street2, acAddress.City, acAddress.State, acAddress.PostalCode, acAddress.Country, true ); } } return person; }
/// <summary> /// Loads the person preview. /// </summary> /// <param name="personId">The person identifier.</param> private void LoadPersonPreview( int? personId ) { string previewHtmlDetails = string.Empty; var rockContext = new RockContext(); var person = new PersonService( rockContext ).Get( personId ?? 0 ); pnlPreview.Visible = person != null; if ( person != null ) { lPersonName.Text = person.FullName; var spouse = person.GetSpouse( rockContext ); lSpouseName.Text = spouse != null ? string.Format( "<strong>Spouse: </strong>{0}", spouse.FullName ) : string.Empty; rptrAddresses.DataSource = person.GetFamilies().SelectMany( a => a.GroupLocations ).ToList(); rptrAddresses.DataBind(); } }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnInit( EventArgs e ) { base.OnInit( e ); ddlTitle.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_TITLE ) ), true ); ddlSuffix.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_SUFFIX ) ), true ); rblMaritalStatus.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS ) ) ); rblStatus.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_CONNECTION_STATUS ) ) ); ddlRecordStatus.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_RECORD_STATUS ) ) ); ddlReason.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_RECORD_STATUS_REASON ) ), true ); ddlGivingGroup.Items.Clear(); ddlGivingGroup.Items.Add( new ListItem( None.Text, None.IdValue ) ); if ( Person != null ) { var personService = new PersonService( new RockContext() ); foreach ( var family in personService.GetFamilies( Person.Id ) ) { ddlGivingGroup.Items.Add( new ListItem( family.Name, family.Id.ToString() ) ); } } DateTime? gradeTransitionDate = GlobalAttributesCache.Read().GetValue( "GradeTransitionDate" ).AsDateTime(); if (gradeTransitionDate.HasValue) { _gradeTransitionDate = gradeTransitionDate.Value; } ddlGrade.Items.Clear(); ddlGrade.Items.Add( new ListItem( "", "" ) ); ddlGrade.Items.Add( new ListItem( "K", "0" ) ); ddlGrade.Items.Add( new ListItem( "1st", "1" ) ); ddlGrade.Items.Add( new ListItem( "2nd", "2" ) ); ddlGrade.Items.Add( new ListItem( "3rd", "3" ) ); ddlGrade.Items.Add( new ListItem( "4th", "4" ) ); ddlGrade.Items.Add( new ListItem( "5th", "5" ) ); ddlGrade.Items.Add( new ListItem( "6th", "6" ) ); ddlGrade.Items.Add( new ListItem( "7th", "7" ) ); ddlGrade.Items.Add( new ListItem( "8th", "8" ) ); ddlGrade.Items.Add( new ListItem( "9th", "9" ) ); ddlGrade.Items.Add( new ListItem( "10th", "10" ) ); ddlGrade.Items.Add( new ListItem( "11th", "11" ) ); ddlGrade.Items.Add( new ListItem( "12th", "12" ) ); int gradeFactorReactor = ( RockDateTime.Now < _gradeTransitionDate ) ? 12 : 13; string script = string.Format( @" $('#{0}').change(function(){{ if ($(this).val() != '') {{ $('#{1}').val( {2} + ( {3} - parseInt( $(this).val() ) ) ); }} }}); $('#{1}').change(function(){{ if ($(this).val() == '') {{ $('#{0}').val(''); }} else {{ var grade = {3} - ( parseInt( $(this).val() ) - {4} ); if (grade >= 0 && grade <= 12) {{ $('#{0}').val(grade.toString()); }} else {{ $('#{0}').val(''); }} }} }}); ", ddlGrade.ClientID, ypGraduation.ClientID, _gradeTransitionDate.Year, gradeFactorReactor, RockDateTime.Now.Year ); ScriptManager.RegisterStartupScript( ddlGrade, ddlGrade.GetType(), "grade-selection-" + BlockId.ToString(), script, true ); string smsScript = @" $('.js-sms-number').click(function () { if ($(this).is(':checked')) { $('.js-sms-number').not($(this)).prop('checked', false); } }); "; ScriptManager.RegisterStartupScript( rContactInfo, rContactInfo.GetType(), "sms-number-" + BlockId.ToString(), smsScript, true ); }
/// <summary> /// logic to setup the groups location entry panel /// </summary> /// <param name="group">The group.</param> private void ConfigureGroupLocationControls( Group group ) { var rockContext = new RockContext(); ddlMember.Items.Clear(); var groupType = GroupTypeCache.Read( group.GroupTypeId ); if ( groupType != null ) { // only allow editing groups with single locations if ( !groupType.AllowMultipleLocations ) { GroupLocationPickerMode groupTypeModes = groupType.LocationSelectionMode; if ( groupTypeModes != GroupLocationPickerMode.None ) { // Set the location picker modes allowed based on the group type's allowed modes LocationPickerMode modes = LocationPickerMode.None; if ( ( groupTypeModes & GroupLocationPickerMode.Named ) == GroupLocationPickerMode.Named ) { modes = modes | LocationPickerMode.Named; } if ( ( groupTypeModes & GroupLocationPickerMode.Address ) == GroupLocationPickerMode.Address ) { modes = modes | LocationPickerMode.Address; } if ( ( groupTypeModes & GroupLocationPickerMode.Point ) == GroupLocationPickerMode.Point ) { modes = modes | LocationPickerMode.Point; } if ( ( groupTypeModes & GroupLocationPickerMode.Polygon ) == GroupLocationPickerMode.Polygon ) { modes = modes | LocationPickerMode.Polygon; } bool displayMemberTab = ( groupTypeModes & GroupLocationPickerMode.GroupMember ) == GroupLocationPickerMode.GroupMember; bool displayOtherTab = modes != LocationPickerMode.None; ulNav.Visible = displayOtherTab && displayMemberTab; pnlMemberSelect.Visible = displayMemberTab; pnlLocationSelect.Visible = displayOtherTab && !displayMemberTab; if ( displayMemberTab ) { var personService = new PersonService( rockContext ); Guid previousLocationType = Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_PREVIOUS.AsGuid(); foreach ( GroupMember member in new GroupMemberService( rockContext ).GetByGroupId( group.Id ) ) { foreach ( Group family in personService.GetFamilies( member.PersonId ) ) { foreach ( GroupLocation familyGroupLocation in family.GroupLocations .Where( l => l.IsMappedLocation && !l.GroupLocationTypeValue.Guid.Equals( previousLocationType ) ) ) { ListItem li = new ListItem( string.Format( "{0} {1} ({2})", member.Person.FullName, familyGroupLocation.GroupLocationTypeValue.Value, familyGroupLocation.Location.ToString() ), string.Format( "{0}|{1}", familyGroupLocation.Location.Id, member.PersonId ) ); ddlMember.Items.Add( li ); } } } } if ( displayOtherTab ) { locpGroupLocation.AllowedPickerModes = modes; } ddlLocationType.DataSource = groupType.LocationTypeValues.ToList(); ddlLocationType.DataBind(); LocationTypeTab = ( displayMemberTab && ddlMember.Items.Count > 0 ) ? MEMBER_LOCATION_TAB_TITLE : OTHER_LOCATION_TAB_TITLE; var groupLocation = group.GroupLocations.FirstOrDefault(); if ( groupLocation != null && groupLocation.Location != null ) { if ( displayOtherTab ) { locpGroupLocation.CurrentPickerMode = locpGroupLocation.GetBestPickerModeForLocation( groupLocation.Location ); locpGroupLocation.MapStyleValueGuid = GetAttributeValue( "MapStyle" ).AsGuid(); if ( groupLocation.Location != null ) { locpGroupLocation.Location = new LocationService( rockContext ).Get( groupLocation.Location.Id ); } } if ( displayMemberTab && ddlMember.Items.Count > 0 && groupLocation.GroupMemberPersonAliasId.HasValue ) { LocationTypeTab = MEMBER_LOCATION_TAB_TITLE; int? personId = new PersonAliasService( rockContext ).GetPersonId( groupLocation.GroupMemberPersonAliasId.Value ); if ( personId.HasValue ) { ddlMember.SetValue( string.Format( "{0}|{1}", groupLocation.LocationId, personId.Value ) ); } } else if ( displayOtherTab ) { LocationTypeTab = OTHER_LOCATION_TAB_TITLE; } ddlLocationType.SetValue( groupLocation.GroupLocationTypeValueId ); } else { LocationTypeTab = ( displayMemberTab && ddlMember.Items.Count > 0 ) ? MEMBER_LOCATION_TAB_TITLE : OTHER_LOCATION_TAB_TITLE; } rptLocationTypes.DataSource = _tabs; rptLocationTypes.DataBind(); ShowSelectedPane(); } } else { lContent.Text = "<div class='alert alert-warning'>This editor only allows editing groups with a single location.</div>"; } } }
public IQueryable<GuestFamily> GetGuestsForFamily( int groupId ) { Guid knownRelationshipGuid = new Guid( Rock.SystemGuid.GroupType.GROUPTYPE_KNOWN_RELATIONSHIPS ); Guid knownRelationshipOwner = new Guid( Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_OWNER ); Guid knownRelationshipCanCheckin = new Guid( Rock.SystemGuid.GroupRole.GROUPROLE_KNOWN_RELATIONSHIPS_CAN_CHECK_IN ); RockContext rockContext = new RockContext(); GroupMemberService groupMemberService = new GroupMemberService( rockContext ); PersonService personService = new PersonService( rockContext ); var familyMembers = groupMemberService.Queryable() .Where( f => f.GroupId == groupId ) .Select( f => f.PersonId ); var familyMembersKnownRelationshipGroups = new GroupMemberService( rockContext ).Queryable() .Where( g => g.Group.GroupType.Guid == knownRelationshipGuid && g.GroupRole.Guid == knownRelationshipOwner && familyMembers.Contains( g.PersonId ) ) .Select( m => m.GroupId ); rockContext.Database.Log = s => System.Diagnostics.Debug.WriteLine( s ); var guests = groupMemberService.Queryable() .Where( g => g.GroupRole.Guid == knownRelationshipCanCheckin && familyMembersKnownRelationshipGroups.Contains( g.GroupId ) ) .Select( g => g.PersonId ) .Distinct().ToList(); var guestFamilies = new List<GuestFamily>(); rockContext.Database.Log = null; foreach ( var guestPersonId in guests ) { var families = personService.GetFamilies( guestPersonId ); foreach ( var family in families ) { if ( !guestFamilies.Select( f => f.Id ).Contains( family.Id ) ) { GuestFamily guestFamily = new GuestFamily(); guestFamily.Id = family.Id; guestFamily.Guid = family.Guid; guestFamily.Name = family.Name; guestFamily.FamilyMembers = new List<GuestFamilyMember>(); foreach ( var familyMember in family.Members ) { GuestFamilyMember guestFamilyMember = new GuestFamilyMember(); guestFamilyMember.Id = familyMember.PersonId; guestFamilyMember.PersonAliasId = familyMember.Person.PrimaryAliasId.Value; guestFamilyMember.Guid = familyMember.Person.Guid; guestFamilyMember.FirstName = familyMember.Person.NickName; guestFamilyMember.LastName = familyMember.Person.LastName; guestFamilyMember.PhotoUrl = familyMember.Person.PhotoUrl; guestFamilyMember.CanCheckin = guests.Contains( familyMember.PersonId ); guestFamilyMember.Role = familyMember.GroupRole.Name; guestFamilyMember.Age = familyMember.Person.Age; guestFamilyMember.Gender = familyMember.Person.Gender; guestFamily.FamilyMembers.Add( guestFamilyMember ); } guestFamilies.Add( guestFamily ); } } } return guestFamilies.AsQueryable(); }
public IQueryable<FamilySearchResult> GetFamiliesByPersonNameSearch( string searchString, int maxResults = 20 ) { bool reversed; RockContext rockContext = new RockContext(); PersonService personService = new PersonService( rockContext ); Guid homeAddressGuid = Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_HOME.AsGuid(); // get list of people matching the search string IOrderedQueryable<Person> sortedPersonQry = personService .GetByFullNameOrdered( searchString, true, false, false, out reversed ); var personResults = sortedPersonQry.AsNoTracking().ToList(); List<FamilySearchResult> familyResults = new List<FamilySearchResult>(); foreach ( var person in personResults ) { var families = personService.GetFamilies( person.Id ) .Select( f => new FamilySearchResult { Id = f.Id, Name = f.Name, FamilyMembers = f.Members.ToList(), HomeLocation = f.GroupLocations .Where( l => l.GroupLocationTypeValue.Guid == homeAddressGuid ) .OrderByDescending( l => l.IsMailingLocation ) .Select( l => l.Location ) .FirstOrDefault(), MainPhone = f.Members .OrderBy( m => m.GroupRole.Order ) .ThenBy( m => m.Person.Gender ) .FirstOrDefault() .Person.PhoneNumbers.OrderBy( p => p.NumberTypeValue.Order ).FirstOrDefault() } ) .ToList(); foreach ( var family in families ) { familyResults.Add( family ); } } return familyResults.DistinctBy( f => f.Id ).AsQueryable(); }
/// <summary> /// Gs the locations_ show edit. /// </summary> /// <param name="locationGuid">The location unique identifier.</param> protected void gLocations_ShowEdit( Guid locationGuid ) { var rockContext = new RockContext(); ddlMember.Items.Clear(); int? groupTypeId = ddlGroupType.SelectedValueAsId(); if ( groupTypeId.HasValue ) { var groupType = GroupTypeCache.Read( groupTypeId.Value ); if ( groupType != null ) { GroupLocationPickerMode groupTypeModes = groupType.LocationSelectionMode; if ( groupTypeModes != GroupLocationPickerMode.None ) { // Set the location picker modes allowed based on the group type's allowed modes LocationPickerMode modes = LocationPickerMode.None; if ( ( groupTypeModes & GroupLocationPickerMode.Named ) == GroupLocationPickerMode.Named ) { modes = modes | LocationPickerMode.Named; } if ( ( groupTypeModes & GroupLocationPickerMode.Address ) == GroupLocationPickerMode.Address ) { modes = modes | LocationPickerMode.Address; } if ( ( groupTypeModes & GroupLocationPickerMode.Point ) == GroupLocationPickerMode.Point ) { modes = modes | LocationPickerMode.Point; } if ( ( groupTypeModes & GroupLocationPickerMode.Polygon ) == GroupLocationPickerMode.Polygon ) { modes = modes | LocationPickerMode.Polygon; } bool displayMemberTab = ( groupTypeModes & GroupLocationPickerMode.GroupMember ) == GroupLocationPickerMode.GroupMember; bool displayOtherTab = modes != LocationPickerMode.None; ulNav.Visible = displayOtherTab && displayMemberTab; pnlMemberSelect.Visible = displayMemberTab; pnlLocationSelect.Visible = displayOtherTab && !displayMemberTab; if ( displayMemberTab ) { int groupId = hfGroupId.ValueAsInt(); if ( groupId != 0 ) { var personService = new PersonService( rockContext ); Guid previousLocationType = Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_PREVIOUS.AsGuid(); foreach ( GroupMember member in new GroupMemberService( rockContext ).GetByGroupId( groupId ) ) { foreach ( Group family in personService.GetFamilies( member.PersonId ) ) { foreach ( GroupLocation familyGroupLocation in family.GroupLocations .Where( l => l.IsMappedLocation && !l.GroupLocationTypeValue.Guid.Equals( previousLocationType ) ) ) { ListItem li = new ListItem( string.Format( "{0} {1} ({2})", member.Person.FullName, familyGroupLocation.GroupLocationTypeValue.Name, familyGroupLocation.Location.ToString() ), string.Format( "{0}|{1}", familyGroupLocation.Location.Id, member.PersonId ) ); ddlMember.Items.Add( li ); } } } } } if ( displayOtherTab ) { locpGroupLocation.AllowedPickerModes = modes; } ddlLocationType.DataSource = groupType.LocationTypeValues.ToList(); ddlLocationType.DataBind(); var groupLocation = GroupLocationsState.FirstOrDefault( l => l.Guid.Equals( locationGuid ) ); if ( groupLocation != null && groupLocation.Location != null ) { if ( displayOtherTab ) { locpGroupLocation.CurrentPickerMode = locpGroupLocation.GetBestPickerModeForLocation( groupLocation.Location ); locpGroupLocation.MapStyleValueGuid = GetAttributeValue( "MapStyle" ).AsGuid(); if ( groupLocation.Location != null ) { locpGroupLocation.Location = new LocationService( rockContext ).Get( groupLocation.Location.Id ); } } if ( displayMemberTab && ddlMember.Items.Count > 0 && groupLocation.GroupMemberPersonId.HasValue ) { ddlMember.SetValue( string.Format( "{0}|{1}", groupLocation.LocationId, groupLocation.GroupMemberPersonId ) ); LocationTypeTab = MEMBER_LOCATION_TAB_TITLE; } else if ( displayOtherTab ) { LocationTypeTab = OTHER_LOCATION_TAB_TITLE; } ddlLocationType.SetValue( groupLocation.GroupLocationTypeValueId ); hfAddLocationGroupGuid.Value = locationGuid.ToString(); } else { hfAddLocationGroupGuid.Value = string.Empty; LocationTypeTab = ( displayMemberTab && ddlMember.Items.Count > 0 ) ? MEMBER_LOCATION_TAB_TITLE : OTHER_LOCATION_TAB_TITLE; } rptLocationTypes.DataSource = _tabs; rptLocationTypes.DataBind(); ShowSelectedPane(); ShowDialog( "Locations", true ); } } } }
/// <summary> /// Raises the <see cref="E:System.Web.UI.Control.Init" /> event. /// </summary> /// <param name="e">An <see cref="T:System.EventArgs" /> object that contains the event data.</param> protected override void OnInit( EventArgs e ) { base.OnInit( e ); ddlTitle.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_TITLE ) ), true ); ddlSuffix.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_SUFFIX ) ), true ); ddlMaritalStatus.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_MARITAL_STATUS ) ), true ); ddlConnectionStatus.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_CONNECTION_STATUS ) ), true ); ddlRecordStatus.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_RECORD_STATUS ) ) ); ddlReason.BindToDefinedType( DefinedTypeCache.Read( new Guid( Rock.SystemGuid.DefinedType.PERSON_RECORD_STATUS_REASON ) ), true ); ddlGivingGroup.Items.Clear(); ddlGivingGroup.Items.Add( new ListItem( None.Text, None.IdValue ) ); if ( Person != null ) { var personService = new PersonService( new RockContext() ); foreach ( var family in personService.GetFamilies( Person.Id ).Select( a => new { a.Name, a.Id, a.Members } ) ) { string familyNameWithFirstNames = GetFamilyNameWithFirstNames( family.Name, family.Members ); ddlGivingGroup.Items.Add( new ListItem( familyNameWithFirstNames, family.Id.ToString() ) ); } } ScriptManager.RegisterStartupScript( ddlGradePicker, ddlGradePicker.GetType(), "grade-selection-" + BlockId.ToString(), ddlGradePicker.GetJavascriptForYearPicker( ypGraduation ), true ); string smsScript = @" $('.js-sms-number').click(function () { if ($(this).is(':checked')) { $('.js-sms-number').not($(this)).prop('checked', false); } }); "; btnSave.Visible = IsUserAuthorized( Rock.Security.Authorization.EDIT ); ScriptManager.RegisterStartupScript( rContactInfo, rContactInfo.GetType(), "sms-number-" + BlockId.ToString(), smsScript, true ); grdPreviousNames.Actions.ShowAdd = true; grdPreviousNames.Actions.AddClick += grdPreviousNames_AddClick; }
/// <summary> /// Handles the Click event of the btnSave 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 btnSave_Click( object sender, EventArgs e ) { if ( IsUserAuthorized( Rock.Security.Authorization.EDIT ) ) { var rockContext = new RockContext(); rockContext.WrapTransaction( () => { var personService = new PersonService( rockContext ); var changes = new List<string>(); var person = personService.Get( Person.Id ); int? orphanedPhotoId = null; if ( person.PhotoId != imgPhoto.BinaryFileId ) { orphanedPhotoId = person.PhotoId; person.PhotoId = imgPhoto.BinaryFileId; if ( orphanedPhotoId.HasValue ) { if ( person.PhotoId.HasValue ) { changes.Add( "Modified the photo." ); } else { changes.Add( "Deleted the photo." ); } } else if ( person.PhotoId.HasValue ) { changes.Add( "Added a photo." ); } } int? newTitleId = ddlTitle.SelectedValueAsInt(); History.EvaluateChange( changes, "Title", DefinedValueCache.GetName( person.TitleValueId ), DefinedValueCache.GetName( newTitleId ) ); person.TitleValueId = newTitleId; History.EvaluateChange( changes, "First Name", person.FirstName, tbFirstName.Text ); person.FirstName = tbFirstName.Text; string nickName = string.IsNullOrWhiteSpace( tbNickName.Text ) ? tbFirstName.Text : tbNickName.Text; History.EvaluateChange( changes, "Nick Name", person.NickName, nickName ); person.NickName = tbNickName.Text; History.EvaluateChange( changes, "Middle Name", person.MiddleName, tbMiddleName.Text ); person.MiddleName = tbMiddleName.Text; History.EvaluateChange( changes, "Last Name", person.LastName, tbLastName.Text ); person.LastName = tbLastName.Text; int? newSuffixId = ddlSuffix.SelectedValueAsInt(); History.EvaluateChange( changes, "Suffix", DefinedValueCache.GetName( person.SuffixValueId ), DefinedValueCache.GetName( newSuffixId ) ); person.SuffixValueId = newSuffixId; var birthMonth = person.BirthMonth; var birthDay = person.BirthDay; var birthYear = person.BirthYear; var birthday = bpBirthDay.SelectedDate; if ( birthday.HasValue ) { person.BirthMonth = birthday.Value.Month; person.BirthDay = birthday.Value.Day; if ( birthday.Value.Year != DateTime.MinValue.Year ) { person.BirthYear = birthday.Value.Year; } else { person.BirthYear = null; } } else { person.SetBirthDate( null ); } History.EvaluateChange( changes, "Birth Month", birthMonth, person.BirthMonth ); History.EvaluateChange( changes, "Birth Day", birthDay, person.BirthDay ); History.EvaluateChange( changes, "Birth Year", birthYear, person.BirthYear ); int? graduationYear = null; if ( ypGraduation.SelectedYear.HasValue ) { graduationYear = ypGraduation.SelectedYear.Value; } History.EvaluateChange( changes, "Graduation Year", person.GraduationYear, graduationYear ); person.GraduationYear = graduationYear; History.EvaluateChange( changes, "Anniversary Date", person.AnniversaryDate, dpAnniversaryDate.SelectedDate ); person.AnniversaryDate = dpAnniversaryDate.SelectedDate; var newGender = rblGender.SelectedValue.ConvertToEnum<Gender>(); History.EvaluateChange( changes, "Gender", person.Gender, newGender ); person.Gender = newGender; int? newMaritalStatusId = ddlMaritalStatus.SelectedValueAsInt(); History.EvaluateChange( changes, "Marital Status", DefinedValueCache.GetName( person.MaritalStatusValueId ), DefinedValueCache.GetName( newMaritalStatusId ) ); person.MaritalStatusValueId = newMaritalStatusId; int? newConnectionStatusId = ddlConnectionStatus.SelectedValueAsInt(); History.EvaluateChange( changes, "Connection Status", DefinedValueCache.GetName( person.ConnectionStatusValueId ), DefinedValueCache.GetName( newConnectionStatusId ) ); person.ConnectionStatusValueId = newConnectionStatusId; var phoneNumberTypeIds = new List<int>(); bool smsSelected = false; foreach ( RepeaterItem item in rContactInfo.Items ) { HiddenField hfPhoneType = item.FindControl( "hfPhoneType" ) as HiddenField; PhoneNumberBox pnbPhone = item.FindControl( "pnbPhone" ) as PhoneNumberBox; CheckBox cbUnlisted = item.FindControl( "cbUnlisted" ) as CheckBox; CheckBox cbSms = item.FindControl( "cbSms" ) as CheckBox; if ( hfPhoneType != null && pnbPhone != null && cbSms != null && cbUnlisted != null ) { if ( !string.IsNullOrWhiteSpace( PhoneNumber.CleanNumber( pnbPhone.Number ) ) ) { int phoneNumberTypeId; if ( int.TryParse( hfPhoneType.Value, out phoneNumberTypeId ) ) { var phoneNumber = person.PhoneNumbers.FirstOrDefault( n => n.NumberTypeValueId == phoneNumberTypeId ); string oldPhoneNumber = string.Empty; if ( phoneNumber == null ) { phoneNumber = new PhoneNumber { NumberTypeValueId = phoneNumberTypeId }; person.PhoneNumbers.Add( phoneNumber ); } else { oldPhoneNumber = phoneNumber.NumberFormattedWithCountryCode; } phoneNumber.CountryCode = PhoneNumber.CleanNumber( pnbPhone.CountryCode ); phoneNumber.Number = PhoneNumber.CleanNumber( pnbPhone.Number ); // Only allow one number to have SMS selected if ( smsSelected ) { phoneNumber.IsMessagingEnabled = false; } else { phoneNumber.IsMessagingEnabled = cbSms.Checked; smsSelected = cbSms.Checked; } phoneNumber.IsUnlisted = cbUnlisted.Checked; phoneNumberTypeIds.Add( phoneNumberTypeId ); History.EvaluateChange( changes, string.Format( "{0} Phone", DefinedValueCache.GetName( phoneNumberTypeId ) ), oldPhoneNumber, phoneNumber.NumberFormattedWithCountryCode ); } } } } // Remove any blank numbers var phoneNumberService = new PhoneNumberService( rockContext ); foreach ( var phoneNumber in person.PhoneNumbers .Where( n => n.NumberTypeValueId.HasValue && !phoneNumberTypeIds.Contains( n.NumberTypeValueId.Value ) ) .ToList() ) { History.EvaluateChange( changes, string.Format( "{0} Phone", DefinedValueCache.GetName( phoneNumber.NumberTypeValueId ) ), phoneNumber.ToString(), string.Empty ); person.PhoneNumbers.Remove( phoneNumber ); phoneNumberService.Delete( phoneNumber ); } History.EvaluateChange( changes, "Email", person.Email, tbEmail.Text ); person.Email = tbEmail.Text.Trim(); History.EvaluateChange( changes, "Email Active", person.IsEmailActive, cbIsEmailActive.Checked ); person.IsEmailActive = cbIsEmailActive.Checked; var newEmailPreference = rblEmailPreference.SelectedValue.ConvertToEnum<EmailPreference>(); History.EvaluateChange( changes, "Email Preference", person.EmailPreference, newEmailPreference ); person.EmailPreference = newEmailPreference; int? newGivingGroupId = ddlGivingGroup.SelectedValueAsId(); if ( person.GivingGroupId != newGivingGroupId ) { string oldGivingGroupName = string.Empty; if ( Person.GivingGroup != null ) { oldGivingGroupName = GetFamilyNameWithFirstNames( Person.GivingGroup.Name, Person.GivingGroup.Members ); } string newGivingGroupName = newGivingGroupId.HasValue ? ddlGivingGroup.Items.FindByValue( newGivingGroupId.Value.ToString() ).Text : string.Empty; History.EvaluateChange( changes, "Giving Group", oldGivingGroupName, newGivingGroupName ); } person.GivingGroupId = newGivingGroupId; bool recordStatusChangedToOrFromInactive = false; var recordStatusInactiveId = DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_INACTIVE ) ).Id; int? newRecordStatusId = ddlRecordStatus.SelectedValueAsInt(); // Is the person's record status changing? if ( person.RecordStatusValueId.HasValue && person.RecordStatusValueId != newRecordStatusId ) { // If it was inactive OR if the new status is inactive, flag this for use later below. if ( person.RecordStatusValueId == recordStatusInactiveId || newRecordStatusId == recordStatusInactiveId ) { recordStatusChangedToOrFromInactive = true; } } History.EvaluateChange( changes, "Record Status", DefinedValueCache.GetName( person.RecordStatusValueId ), DefinedValueCache.GetName( newRecordStatusId ) ); person.RecordStatusValueId = newRecordStatusId; int? newRecordStatusReasonId = null; if ( person.RecordStatusValueId.HasValue && person.RecordStatusValueId.Value == recordStatusInactiveId ) { newRecordStatusReasonId = ddlReason.SelectedValueAsInt(); } History.EvaluateChange( changes, "Inactive Reason", DefinedValueCache.GetName( person.RecordStatusReasonValueId ), DefinedValueCache.GetName( newRecordStatusReasonId ) ); person.RecordStatusReasonValueId = newRecordStatusReasonId; History.EvaluateChange( changes, "Inactive Reason Note", person.InactiveReasonNote, tbInactiveReasonNote.Text ); person.InactiveReasonNote = tbInactiveReasonNote.Text.Trim(); // Save any Removed/Added Previous Names var personPreviousNameService = new PersonPreviousNameService( rockContext ); var databasePreviousNames = personPreviousNameService.Queryable().Where( a => a.PersonAlias.PersonId == person.Id ).ToList(); foreach ( var deletedPreviousName in databasePreviousNames.Where( a => !PersonPreviousNamesState.Any( p => p.Guid == a.Guid ) ) ) { personPreviousNameService.Delete( deletedPreviousName ); History.EvaluateChange( changes, "Previous Name", deletedPreviousName.ToString(), string.Empty ); } foreach ( var addedPreviousName in PersonPreviousNamesState.Where( a => !databasePreviousNames.Any( d => d.Guid == a.Guid ) ) ) { addedPreviousName.PersonAliasId = person.PrimaryAliasId.Value; personPreviousNameService.Add( addedPreviousName ); History.EvaluateChange( changes, "Previous Name", string.Empty, addedPreviousName.ToString() ); } if ( person.IsValid ) { if ( rockContext.SaveChanges() > 0 ) { if ( changes.Any() ) { HistoryService.SaveChanges( rockContext, typeof( Person ), Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(), Person.Id, changes ); } if ( orphanedPhotoId.HasValue ) { BinaryFileService binaryFileService = new BinaryFileService( rockContext ); var binaryFile = binaryFileService.Get( orphanedPhotoId.Value ); if ( binaryFile != null ) { string errorMessage; if ( binaryFileService.CanDelete( binaryFile, out errorMessage ) ) { binaryFileService.Delete( binaryFile ); rockContext.SaveChanges(); } } } // if they used the ImageEditor, and cropped it, the uncropped file is still in BinaryFile. So clean it up if ( imgPhoto.CropBinaryFileId.HasValue ) { if ( imgPhoto.CropBinaryFileId != person.PhotoId ) { BinaryFileService binaryFileService = new BinaryFileService( rockContext ); var binaryFile = binaryFileService.Get( imgPhoto.CropBinaryFileId.Value ); if ( binaryFile != null && binaryFile.IsTemporary ) { string errorMessage; if ( binaryFileService.CanDelete( binaryFile, out errorMessage ) ) { binaryFileService.Delete( binaryFile ); rockContext.SaveChanges(); } } } } // If the person's record status was changed to or from inactive, // we need to check if any of their families need to be activated or inactivated. if ( recordStatusChangedToOrFromInactive ) { foreach ( var family in personService.GetFamilies( person.Id ) ) { // Are there any more members of the family who are NOT inactive? // If not, mark the whole family inactive. if ( !family.Members.Where( m => m.Person.RecordStatusValueId != recordStatusInactiveId ).Any() ) { family.IsActive = false; } else { family.IsActive = true; } } rockContext.SaveChanges(); } } Response.Redirect( string.Format( "~/Person/{0}", Person.Id ), false ); } } ); } }
/// <summary> /// Gets the person. /// </summary> /// <param name="create">if set to <c>true</c> [create].</param> /// <returns></returns> private Person GetPerson( bool create ) { Person person = null; var rockContext = new RockContext(); var personService = new PersonService( rockContext ); Group familyGroup = null; int personId = ViewState["PersonId"] as int? ?? 0; if ( personId == 0 && TargetPerson != null ) { person = TargetPerson; } else { if ( personId != 0 ) { person = personService.Get( personId ); } if ( person == null && create ) { // Check to see if there's only one person with same email, first name, and last name if ( !string.IsNullOrWhiteSpace( txtEmail.Text ) && !string.IsNullOrWhiteSpace( txtFirstName.Text ) && !string.IsNullOrWhiteSpace( txtLastName.Text ) ) { // Same logic as CreatePledge.ascx.cs var personMatches = personService.GetByMatch( txtFirstName.Text, txtLastName.Text, txtEmail.Text ); if ( personMatches.Count() == 1 ) { person = personMatches.FirstOrDefault(); } else { person = null; } } if ( person == null ) { // Create Person person = new Person(); person.FirstName = txtFirstName.Text; person.LastName = txtLastName.Text; person.Email = txtEmail.Text; person.EmailPreference = EmailPreference.EmailAllowed; if ( GetAttributeValue( "DisplayPhone" ).AsBooleanOrNull() ?? false ) { var phone = new PhoneNumber(); phone.CountryCode = PhoneNumber.CleanNumber( pnbPhone.CountryCode ); phone.Number = PhoneNumber.CleanNumber( pnbPhone.Number ); phone.NumberTypeValueId = DefinedValueCache.Read( new Guid( Rock.SystemGuid.DefinedValue.PERSON_PHONE_TYPE_HOME ) ).Id; person.PhoneNumbers.Add( phone ); } // Create Family familyGroup = GroupService.SaveNewFamily( rockContext, person, null, false ); } ViewState["PersonId"] = person != null ? person.Id : 0; } } if ( create && person != null ) // person should never be null at this point { if ( familyGroup == null ) { var groupLocationService = new GroupLocationService( rockContext ); if ( GroupLocationId.HasValue ) { familyGroup = groupLocationService.Queryable() .Where( gl => gl.Id == GroupLocationId.Value ) .Select( gl => gl.Group ) .FirstOrDefault(); } else { familyGroup = personService.GetFamilies( person.Id ).FirstOrDefault(); } } if ( familyGroup != null ) { GroupService.AddNewFamilyAddress( rockContext, familyGroup, GetAttributeValue( "AddressType" ), acAddress.Street1, acAddress.Street2, acAddress.City, acAddress.State, acAddress.PostalCode, acAddress.Country, true ); } } return person; }