/// <summary> /// Sets the edit value from IEntity.Id value /// </summary> /// <param name="control">The control.</param> /// <param name="configurationValues">The configuration values.</param> /// <param name="id">The identifier.</param> public void SetEditValueFromEntityId(System.Web.UI.Control control, Dictionary <string, ConfigurationValue> configurationValues, int?id) { var item = new ConnectionStatusService(new RockContext()).Get(id ?? 0); var guidValue = item != null?item.Guid.ToString() : string.Empty; SetEditValue(control, configurationValues, guidValue); }
/// <summary> /// Gets the edit value as the IEntity.Id /// </summary> /// <param name="control">The control.</param> /// <param name="configurationValues">The configuration values.</param> /// <returns></returns> public int?GetEditValueAsEntityId(System.Web.UI.Control control, Dictionary <string, ConfigurationValue> configurationValues) { var guid = GetEditValue(control, configurationValues).AsGuid(); var item = new ConnectionStatusService(new RockContext()).Get(guid); return(item != null ? item.Id : ( int? )null); }
/// <summary> /// Creates the control(s) necessary for prompting user for a new value /// </summary> /// <param name="configurationValues">The configuration values.</param> /// <param name="id"></param> /// <returns> /// The control /// </returns> public override Control EditControl( Dictionary<string, ConfigurationValue> configurationValues, string id ) { var editControl = new RockDropDownList { ID = id }; editControl.Items.Add( new ListItem() ); var statuses = new ConnectionStatusService( new RockContext() ) .Queryable().AsNoTracking() .OrderBy( s => s.ConnectionType.Name ) .ThenBy( s => s.Name ) .Select( s => new { s.Guid, s.Name, ConnectionTypeName = s.ConnectionType.Name } ) .ToList(); if ( statuses.Any() ) { foreach ( var status in statuses ) { var listItem = new ListItem( status.Name, status.Guid.ToString().ToUpper() ); listItem.Attributes.Add( "OptionGroup", status.ConnectionTypeName ); editControl.Items.Add( listItem ); } return editControl; } return null; }
/// <summary> /// Creates the control(s) necessary for prompting user for a new value /// </summary> /// <param name="configurationValues">The configuration values.</param> /// <param name="id"></param> /// <returns> /// The control /// </returns> public override Control EditControl(Dictionary <string, ConfigurationValue> configurationValues, string id) { var editControl = new RockDropDownList { ID = id }; editControl.Items.Add(new ListItem()); var statuses = new ConnectionStatusService(new RockContext()) .Queryable().AsNoTracking() .OrderBy(s => s.ConnectionType.Name) .ThenBy(s => s.Name) .Select(s => new { s.Guid, s.Name, ConnectionTypeName = s.ConnectionType.Name }) .ToList(); if (statuses.Any()) { foreach (var status in statuses) { var listItem = new ListItem(status.Name, status.Guid.ToString().ToUpper()); listItem.Attributes.Add("OptionGroup", status.ConnectionTypeName); editControl.Items.Add(listItem); } return(editControl); } return(null); }
/// <summary> /// Creates the control(s) necessary for prompting user for a new value /// </summary> /// <param name="configurationValues">The configuration values.</param> /// <param name="id"></param> /// <returns> /// The control /// </returns> public override Control EditControl(Dictionary <string, ConfigurationValue> configurationValues, string id) { var includeInactive = false; int?connectionTypeFilterId = null; if (configurationValues != null) { includeInactive = configurationValues.ContainsKey(INCLUDE_INACTIVE_KEY) && configurationValues[INCLUDE_INACTIVE_KEY].Value.AsBoolean(); connectionTypeFilterId = configurationValues.ContainsKey(CONNECTION_TYPE_FILTER_KEY) ? configurationValues[CONNECTION_TYPE_FILTER_KEY].Value.AsIntegerOrNull() : null; } var statuses = new ConnectionStatusService(new RockContext()) .Queryable().AsNoTracking() .Where(o => o.IsActive || includeInactive) .OrderBy(o => o.ConnectionType.Name) .ThenBy(o => o.Name) .Select(o => new { o.Guid, o.Name, o.ConnectionType }) .ToList(); var editControl = new RockDropDownList { ID = id }; editControl.Items.Add(new ListItem()); if (statuses.Any()) { foreach (var status in statuses) { if (connectionTypeFilterId != null && status.ConnectionType.Id != connectionTypeFilterId) { continue; } var listItem = new ListItem(status.Name, status.Guid.ToString().ToUpper()); // Don't add an option group if there is a filter since that would be only one group. if (connectionTypeFilterId == null) { listItem.Attributes.Add("OptionGroup", status.ConnectionType.Name); } editControl.Items.Add(listItem); } return(editControl); } return(null); }
protected override void OnInit(EventArgs e) { base.OnInit(e); _rockContext = new RockContext(); conOppServ = new ConnectionOpportunityService(_rockContext); conStatServ = new ConnectionStatusService(_rockContext); conReqActServ = new ConnectionRequestActivityService(_rockContext); dateRange.UpperValue = DateTime.Now; dateRange.LowerValue = DateTime.Now.AddYears(-1); lReadOnlyTitle.Text = "Connection Requests".FormatAsHtmlTitle(); workflowFilters.Show(); }
protected override void OnInit( EventArgs e ) { base.OnInit( e ); _rockContext = new RockContext(); conOppServ = new ConnectionOpportunityService( _rockContext ); conStatServ = new ConnectionStatusService( _rockContext ); conReqActServ = new ConnectionRequestActivityService( _rockContext ); dateRange.UpperValue = DateTime.Now; dateRange.LowerValue = DateTime.Now.AddYears( -1 ); lReadOnlyTitle.Text = "Connection Requests".FormatAsHtmlTitle(); workflowFilters.Show(); }
private ConnectionRequest BuildConnectionRequest(RockContext rockContext, DateTime?createdDate) { var connectionOpportunity = new ConnectionOpportunityService(rockContext).Queryable().First(); var personAlias = new PersonAliasService(rockContext).Queryable().First(); var connectionStatus = new ConnectionStatusService(rockContext).Queryable().First(); var connectionRequest = new ConnectionRequest(); connectionRequest.ConnectionOpportunityId = connectionOpportunity.Id; connectionRequest.PersonAliasId = personAlias.Id; connectionRequest.ConnectionStatusId = connectionStatus.Id; connectionRequest.ForeignKey = connectionRequestForeignKey; connectionRequest.CreatedDateTime = createdDate; return(connectionRequest); }
/// <summary> /// Returns the field's current value(s) /// </summary> /// <param name="parentControl">The parent control.</param> /// <param name="value">Information about the value</param> /// <param name="configurationValues">The configuration values.</param> /// <param name="condensed">Flag indicating if the value should be condensed (i.e. for use in a grid column)</param> /// <returns></returns> public override string FormatValue(Control parentControl, string value, Dictionary <string, ConfigurationValue> configurationValues, bool condensed) { string formattedValue = string.Empty; Guid?guid = value.AsGuidOrNull(); if (guid.HasValue) { var status = new ConnectionStatusService(new RockContext()).Get(guid.Value); if (status != null) { formattedValue = status.Name; } } return(base.FormatValue(parentControl, formattedValue, configurationValues, condensed)); }
protected void gFilter_OnDisplayFilterValue(object sender, GridFilter.DisplayFilterValueArgs e) { switch (e.Key) { case "Status": { if (!string.IsNullOrWhiteSpace(e.Value)) { var connectionStatus = new ConnectionStatusService(new RockContext()).Get(e.Value.AsGuid()); if (connectionStatus != null) { e.Value = connectionStatus.Name; } } break; } case "Consolidator": { string personName = string.Empty; int?personId = e.Value.AsIntegerOrNull(); if (personId.HasValue) { var personService = new PersonService(new RockContext()); var person = personService.Get(personId.Value); if (person != null) { personName = person.FullName; } } e.Value = personName; break; } case "Submitted": { e.Value = DateRangePicker.FormatDelimitedValues(e.Value); break; } } }
private BenevolenceRequest BuildBenevolenceRequest(RockContext rockContext, DateTime requestDate) { var requestStatuses = DefinedTypeCache.Get(new Guid(Rock.SystemGuid.DefinedType.BENEVOLENCE_REQUEST_STATUS)); var requestStatusValue = requestStatuses.DefinedValues.First().Id; var personAlias = new PersonAliasService(rockContext).Queryable().First(); var connectionStatus = new ConnectionStatusService(rockContext).Queryable().First(); var benevolenceRequest = new BenevolenceRequest(); benevolenceRequest.LastName = "Name"; benevolenceRequest.FirstName = "Test"; benevolenceRequest.RequestText = "Request Text"; benevolenceRequest.ForeignKey = benevolenceRequestForeignKey; benevolenceRequest.RequestDateTime = requestDate; benevolenceRequest.RequestStatusValueId = requestStatusValue; return(benevolenceRequest); }
private void SetFilter() { var rockContext = new RockContext(); int followUpConnectionTypeId = new ConnectionTypeService(rockContext).Get( org.kcionline.bricksandmortarstudio.SystemGuid.ConnectionType .FOLLOW_UP.AsGuid()).Id; var connectionStatuses = new ConnectionStatusService(rockContext).Queryable() .Where(c => c.ConnectionTypeId == followUpConnectionTypeId) .ToList(); ddlStatus.Items.Add(new ListItem("", "")); connectionStatuses.ForEach(cs => ddlStatus.Items.Add(new ListItem(cs.Name, cs.Guid.ToString()))); ddlStatus.SelectedValue = gFilter.GetUserPreference("Status"); int?personId = gFilter.GetUserPreference("Consolidator").AsIntegerOrNull(); if (personId.HasValue) { var personService = new PersonService(new RockContext()); var person = personService.Get(personId.Value); if (person != null) { ppConsolidator.SetValue(person); } } drpDates.DelimitedValues = gFilter.GetUserPreference("Submitted"); if (!drpDates.LowerValue.HasValue && !drpDates.UpperValue.HasValue) { gFilter.SaveUserPreference("Submitted", drpDates.DelimitedValues); } }
/// <summary> /// Updates the trigger qualifiers. /// </summary> private void UpdateTriggerQualifiers() { using ( var rockContext = new RockContext() ) { String[] qualifierValues = new String[2]; ConnectionWorkflow connectionWorkflow = WorkflowsState.FirstOrDefault( l => l.Guid.Equals( hfAddConnectionWorkflowGuid.Value.AsGuid() ) ); ConnectionWorkflowTriggerType connectionWorkflowTriggerType = ddlTriggerType.SelectedValueAsEnum<ConnectionWorkflowTriggerType>(); int connectionTypeId = int.Parse( hfConnectionTypeId.Value ); switch ( connectionWorkflowTriggerType ) { case ConnectionWorkflowTriggerType.RequestStarted: case ConnectionWorkflowTriggerType.RequestAssigned: case ConnectionWorkflowTriggerType.RequestTransferred: case ConnectionWorkflowTriggerType.RequestConnected: case ConnectionWorkflowTriggerType.PlacementGroupAssigned: case ConnectionWorkflowTriggerType.Manual: { ddlPrimaryQualifier.Visible = false; ddlPrimaryQualifier.Items.Clear(); ddlSecondaryQualifier.Visible = false; ddlSecondaryQualifier.Items.Clear(); break; } case ConnectionWorkflowTriggerType.StateChanged: { ddlPrimaryQualifier.Label = "From"; ddlPrimaryQualifier.Visible = true; ddlPrimaryQualifier.BindToEnum<ConnectionState>(); ddlPrimaryQualifier.Items.Insert( 0, new ListItem( string.Empty, string.Empty ) ); ddlSecondaryQualifier.Label = "To"; ddlSecondaryQualifier.Visible = true; ddlSecondaryQualifier.BindToEnum<ConnectionState>(); ddlSecondaryQualifier.Items.Insert( 0, new ListItem( string.Empty, string.Empty ) ); if ( !cbFutureFollowUp.Checked ) { ddlPrimaryQualifier.Items.RemoveAt( 3 ); ddlSecondaryQualifier.Items.RemoveAt( 3 ); } break; } case ConnectionWorkflowTriggerType.StatusChanged: { var statusList = new ConnectionStatusService( rockContext ).Queryable().Where( s => s.ConnectionTypeId == connectionTypeId || s.ConnectionTypeId == null ).ToList(); ddlPrimaryQualifier.Label = "From"; ddlPrimaryQualifier.Visible = true; ddlPrimaryQualifier.Items.Clear(); ddlPrimaryQualifier.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( var status in statusList ) { ddlPrimaryQualifier.Items.Add( new ListItem( status.Name, status.Id.ToString().ToUpper() ) ); } ddlSecondaryQualifier.Label = "To"; ddlSecondaryQualifier.Visible = true; ddlSecondaryQualifier.Items.Clear(); ddlSecondaryQualifier.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( var status in statusList ) { ddlSecondaryQualifier.Items.Add( new ListItem( status.Name, status.Id.ToString().ToUpper() ) ); } break; } case ConnectionWorkflowTriggerType.ActivityAdded: { var activityList = new ConnectionActivityTypeService( rockContext ) .Queryable().AsNoTracking() .Where( a => a.ConnectionTypeId == connectionTypeId ) .ToList(); ddlPrimaryQualifier.Label = "Activity Type"; ddlPrimaryQualifier.Visible = true; ddlPrimaryQualifier.Items.Clear(); ddlPrimaryQualifier.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( var activity in activityList ) { ddlPrimaryQualifier.Items.Add( new ListItem( activity.Name, activity.Id.ToString().ToUpper() ) ); } ddlSecondaryQualifier.Visible = false; ddlSecondaryQualifier.Items.Clear(); break; } } if ( connectionWorkflow != null ) { if ( connectionWorkflow.TriggerType == ddlTriggerType.SelectedValueAsEnum<ConnectionWorkflowTriggerType>() ) { qualifierValues = connectionWorkflow.QualifierValue.SplitDelimitedValues(); if ( ddlPrimaryQualifier.Visible && qualifierValues.Length > 0 ) { ddlPrimaryQualifier.SelectedValue = qualifierValues[0]; } if ( ddlSecondaryQualifier.Visible && qualifierValues.Length > 1 ) { ddlSecondaryQualifier.SelectedValue = qualifierValues[1]; } } } } }
/// <summary> /// Updates the trigger qualifiers. /// </summary> private void UpdateTriggerQualifiers() { RockContext rockContext = new RockContext(); String[] qualifierValues = new String[2]; ConnectionWorkflow connectionWorkflow = WorkflowsState.FirstOrDefault( l => l.Guid.Equals( hfWorkflowGuid.Value.AsGuid() ) ); ConnectionWorkflowTriggerType connectionWorkflowTriggerType = ddlTriggerType.SelectedValueAsEnum<ConnectionWorkflowTriggerType>(); int connectionTypeId = PageParameter( "ConnectionTypeId" ).AsInteger(); var connectionType = new ConnectionTypeService( rockContext ).Get( connectionTypeId ); switch ( connectionWorkflowTriggerType ) { case ConnectionWorkflowTriggerType.RequestStarted: ddlPrimaryQualifier.Visible = false; ddlPrimaryQualifier.Items.Clear(); ddlSecondaryQualifier.Visible = false; ddlSecondaryQualifier.Items.Clear(); break; case ConnectionWorkflowTriggerType.RequestCompleted: ddlPrimaryQualifier.Visible = false; ddlPrimaryQualifier.Items.Clear(); ddlSecondaryQualifier.Visible = false; ddlSecondaryQualifier.Items.Clear(); break; case ConnectionWorkflowTriggerType.Manual: ddlPrimaryQualifier.Visible = false; ddlPrimaryQualifier.Items.Clear(); ddlSecondaryQualifier.Visible = false; ddlSecondaryQualifier.Items.Clear(); break; case ConnectionWorkflowTriggerType.StateChanged: ddlPrimaryQualifier.Label = "From"; ddlPrimaryQualifier.Visible = true; ddlPrimaryQualifier.BindToEnum<ConnectionState>(); ddlPrimaryQualifier.Items.Insert( 0, new ListItem( string.Empty, string.Empty ) ); ddlSecondaryQualifier.Label = "To"; ddlSecondaryQualifier.Visible = true; ddlSecondaryQualifier.BindToEnum<ConnectionState>(); ddlSecondaryQualifier.Items.Insert( 0, new ListItem( string.Empty, string.Empty ) ); if ( !connectionType.EnableFutureFollowup ) { ddlPrimaryQualifier.Items.RemoveAt( 3 ); ddlSecondaryQualifier.Items.RemoveAt( 3 ); } break; case ConnectionWorkflowTriggerType.StatusChanged: var statusList = new ConnectionStatusService( rockContext ).Queryable().Where( s => s.ConnectionTypeId == connectionTypeId || s.ConnectionTypeId == null ).ToList(); ddlPrimaryQualifier.Label = "From"; ddlPrimaryQualifier.Visible = true; ddlPrimaryQualifier.Items.Clear(); ddlPrimaryQualifier.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( var status in statusList ) { ddlPrimaryQualifier.Items.Add( new ListItem( status.Name, status.Id.ToString().ToUpper() ) ); } ddlSecondaryQualifier.Label = "To"; ddlSecondaryQualifier.Visible = true; ddlSecondaryQualifier.Items.Clear(); ddlSecondaryQualifier.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( var status in statusList ) { ddlSecondaryQualifier.Items.Add( new ListItem( status.Name, status.Id.ToString().ToUpper() ) ); } break; case ConnectionWorkflowTriggerType.ActivityAdded: var activityList = new ConnectionActivityTypeService( rockContext ).Queryable().Where( a => a.ConnectionTypeId == connectionTypeId || a.ConnectionTypeId == null ).ToList(); ddlPrimaryQualifier.Label = "Activity Type"; ddlPrimaryQualifier.Visible = true; ddlPrimaryQualifier.Items.Clear(); ddlPrimaryQualifier.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( var activity in activityList ) { ddlPrimaryQualifier.Items.Add( new ListItem( activity.Name, activity.Id.ToString().ToUpper() ) ); } ddlSecondaryQualifier.Visible = false; ddlSecondaryQualifier.Items.Clear(); break; case ConnectionWorkflowTriggerType.GroupAssigned: var groupList = new GroupService( rockContext ).Queryable().ToList(); ddlPrimaryQualifier.Label = "Activity Group"; ddlPrimaryQualifier.Visible = true; ddlPrimaryQualifier.Items.Clear(); ddlPrimaryQualifier.Items.Add( new ListItem( string.Empty, string.Empty ) ); foreach ( var group in groupList ) { ddlPrimaryQualifier.Items.Add( new ListItem( group.Name, group.Id.ToString().ToUpper() ) ); } ddlSecondaryQualifier.Visible = false; ddlSecondaryQualifier.Items.Clear(); break; } if ( connectionWorkflow != null ) { if ( connectionWorkflow.TriggerType == ddlTriggerType.SelectedValueAsEnum<ConnectionWorkflowTriggerType>() ) { qualifierValues = connectionWorkflow.QualifierValue.SplitDelimitedValues(); if ( ddlPrimaryQualifier.Visible ) { ddlPrimaryQualifier.SelectedValue = qualifierValues[0]; } if ( ddlSecondaryQualifier.Visible ) { ddlSecondaryQualifier.SelectedValue = qualifierValues[1]; } } } }
/// <summary> /// Loads the ConnectionRequests. /// </summary> /// <param name="csvData">The CSV data.</param> private int LoadConnectionRequest(CSVInstance csvData) { var lookupContext = new RockContext(); var connectionTypes = new ConnectionTypeService(lookupContext).Queryable().ToList(); var activityTypes = new ConnectionActivityTypeService(lookupContext).Queryable().ToList(); var opportunities = new ConnectionOpportunityService(lookupContext).Queryable().ToList(); var statuses = new ConnectionStatusService(lookupContext).Queryable().ToList(); var requests = new ConnectionRequestService(lookupContext).Queryable().ToList(); var newRequests = new List <ConnectionRequest>(); var newActivities = new List <ConnectionRequestActivity>(); var completedItems = 0; ReportProgress(0, string.Format("Verifying connection request import ({0:N0} already imported).", requests.Count(n => n.ForeignKey != null))); ConnectionType connectionType = null; ConnectionOpportunity opportunity = null; string[] row; // Uses a look-ahead enumerator: this call will move to the next record immediately while ((row = csvData.Database.FirstOrDefault()) != null) { var oForeignKey = row[OpportunityForeignKey] as string; var oName = row[OpportunityName] as string; var cType = row[ConnectionType] as string; var oDescription = row[OpportunityDescription] as string; var oActive = row[OpportunityActive].AsBoolean(); var oCreatedDate = row[OpportunityCreated].AsDateTime(); var oModifiedDate = row[OpportunityModified].AsDateTime(); var rForeignKey = row[RequestForeignKey] as string; var rPersonId = row[RequestPersonId].AsIntegerOrNull(); var rConnectorId = row[RequestConnectorId].AsIntegerOrNull(); var rCreatedDate = row[RequestCreated].AsDateTime(); var rModifiedDate = row[RequestModified].AsDateTime(); var rStatus = row[RequestStatus] as string; var rState = row[RequestState].AsIntegerOrNull(); var rComments = row[RequestComments] as string; var rFollowUp = row[RequestFollowUp].AsDateTime(); var aType = row[ActivityType] as string; var aNote = row[ActivityNote] as string; var aCreatedDate = row[ActivityDate].AsDateTime(); var aConnectorId = row[ActivityConnectorId].AsIntegerOrNull(); // lookup or reuse connection type if (connectionType == null || !connectionType.Name.Equals(cType, StringComparison.OrdinalIgnoreCase)) { connectionType = connectionTypes.FirstOrDefault(t => t.Name.Equals(cType, StringComparison.OrdinalIgnoreCase)); } if (connectionType == null) { connectionType = AddConnectionType(lookupContext, cType); connectionTypes.Add(connectionType); } if (connectionType != null && !string.IsNullOrWhiteSpace(oName) && GetPersonKeys(rPersonId) != null) { // lookup, reuse, or create connection opportunity if (opportunity == null || !opportunity.ForeignKey.Equals(oForeignKey, StringComparison.OrdinalIgnoreCase)) { opportunity = opportunities.FirstOrDefault(o => (o.ForeignKey != null && o.ForeignKey.Equals(oForeignKey, StringComparison.OrdinalIgnoreCase)) || o.Name.Equals(oName, StringComparison.OrdinalIgnoreCase)); } if (opportunity == null) { opportunity = AddConnectionOpportunity(lookupContext, connectionType.Id, oCreatedDate, oName, oDescription, oActive, oForeignKey); opportunities.Add(opportunity); } else if (opportunity.ForeignKey == null) { opportunity.ForeignKey = oForeignKey; opportunity.ForeignId = oForeignKey.AsIntegerOrNull(); lookupContext.SaveChanges(); } // lookup, reuse, or create connection request var requestStatus = statuses.FirstOrDefault(s => s.Name.Equals(rStatus, StringComparison.OrdinalIgnoreCase) && s.ConnectionTypeId.HasValue && s.ConnectionTypeId.Value == connectionType.Id); if (requestStatus == null) { requestStatus = AddConnectionStatus(lookupContext, rStatus, connectionType.Id); statuses.Add(requestStatus); } var requestor = GetPersonKeys(rPersonId); var requestConnector = rConnectorId.HasValue ? GetPersonKeys(rConnectorId) : null; var request = requests.FirstOrDefault(r => r.ForeignKey != null && r.ForeignKey.Equals(rForeignKey, StringComparison.OrdinalIgnoreCase)) ?? newRequests.FirstOrDefault(r => r.ForeignKey != null && r.ForeignKey.Equals(rForeignKey, StringComparison.OrdinalIgnoreCase)); if (request == null && requestor != null && requestStatus != null) { request = AddConnectionRequest(opportunity, rForeignKey, rCreatedDate, rModifiedDate, requestStatus.Id, ( ConnectionState )rState, rComments, rFollowUp, requestor.PersonAliasId, requestConnector?.PersonAliasId); newRequests.Add(request); } // create activity if (!string.IsNullOrWhiteSpace(aType)) { var activityConnector = aConnectorId.HasValue ? GetPersonKeys(aConnectorId) : null; var activityType = activityTypes.FirstOrDefault(t => t.Name.Equals(aType, StringComparison.OrdinalIgnoreCase)); if (request != null && activityType != null) { var activity = AddConnectionActivity(opportunity.Id, aNote, aCreatedDate, activityConnector?.PersonAliasId, activityType.Id, rForeignKey); if (request.Id > 0) { activity.ConnectionRequestId = request.Id; newActivities.Add(activity); } else { request.ConnectionRequestActivities.Add(activity); } } } completedItems++; if (completedItems % (ReportingNumber * 10) < 1) { ReportProgress(0, string.Format("{0:N0} requests processed.", completedItems)); } if (completedItems % ReportingNumber < 1) { SaveConnectionRequests(newRequests, newActivities); ReportPartialProgress(); requests.AddRange(newRequests); newRequests.Clear(); newActivities.Clear(); } } } if (newRequests.Count > 0 || newActivities.Count > 0) { SaveConnectionRequests(newRequests, newActivities); } ReportProgress(100, string.Format("Finished connection request import: {0:N0} requests imported.", completedItems)); return(completedItems); }
/// <summary> /// Shows the detail. /// </summary> /// <param name="connectionRequestId">The connection request identifier.</param> /// <param name="connectionOpportunityId">The connectionOpportunity id.</param> public void ShowDetail( int connectionRequestId, int? connectionOpportunityId ) { bool editAllowed = UserCanEdit; // autoexpand the person picker if this is an add this.Page.ClientScript.RegisterStartupScript( this.GetType(), "StartupScript", @"Sys.Application.add_load(function () { // if the person picker is empty then open it for quick entry var personPicker = $('.js-authorizedperson'); var currentPerson = personPicker.find('.picker-selectedperson').html(); if (currentPerson != null && currentPerson.length == 0) { $(personPicker).find('a.picker-label').trigger('click'); } });", true ); using ( var rockContext = new RockContext() ) { var connectionOpportunityService = new ConnectionOpportunityService( rockContext ); var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionStatusService = new ConnectionStatusService( rockContext ); ConnectionOpportunity connectionOpportunity = null; ConnectionRequest connectionRequest = null; if ( connectionRequestId > 0 ) { connectionRequest = new ConnectionRequestService( rockContext ).Get( connectionRequestId ); } if ( connectionRequest == null ) { connectionOpportunity = connectionOpportunityService.Get( connectionOpportunityId.Value ); if ( connectionOpportunity != null ) { var connectionStatus = connectionStatusService .Queryable() .Where( s => s.ConnectionTypeId == connectionOpportunity.ConnectionTypeId && s.IsDefault ) .FirstOrDefault(); if ( connectionStatus != null ) { connectionRequest = new ConnectionRequest(); connectionRequest.ConnectionOpportunity = connectionOpportunity; connectionRequest.ConnectionOpportunityId = connectionOpportunity.Id; connectionRequest.ConnectionState = ConnectionState.Active; connectionRequest.ConnectionStatus = connectionStatus; connectionRequest.ConnectionStatusId = connectionStatus.Id; int? campusId = GetUserPreference( CAMPUS_SETTING ).AsIntegerOrNull(); if ( campusId.HasValue ) { connectionRequest.CampusId = campusId.Value; } } } } else { connectionOpportunity = connectionRequest.ConnectionOpportunity; } if ( connectionOpportunity != null && connectionRequest != null ) { hfConnectionOpportunityId.Value = connectionRequest.ConnectionOpportunityId.ToString(); hfConnectionRequestId.Value = connectionRequest.Id.ToString(); lConnectionOpportunityIconHtml.Text = string.Format( "<i class='{0}' ></i>", connectionOpportunity.IconCssClass ); pnlReadDetails.Visible = true; if ( connectionRequest.PersonAlias != null && connectionRequest.PersonAlias.Person != null ) { lTitle.Text = connectionRequest.PersonAlias.Person.FullName.FormatAsHtmlTitle(); } else { lTitle.Text = String.Format( "New {0} Connection Request", connectionOpportunity.Name ); } // Only users that have Edit rights to block, or edit rights to the opportunity if ( !editAllowed ) { editAllowed = connectionRequest.IsAuthorized( Authorization.EDIT, CurrentPerson ); } // Grants edit access to those in the opportunity's connector groups if ( !editAllowed && CurrentPersonId.HasValue ) { // Grant edit access to any of those in a non campus-specific connector group editAllowed = connectionOpportunity.ConnectionOpportunityConnectorGroups .Any( g => !g.CampusId.HasValue && g.ConnectorGroup != null && g.ConnectorGroup.Members.Any( m => m.PersonId == CurrentPersonId ) ); if ( !editAllowed ) { //If this is a new request, grant edit access to any connector group. Otherwise, match the request's campus to the corresponding campus-specific connector group foreach ( var groupCampus in connectionOpportunity .ConnectionOpportunityConnectorGroups .Where( g => ( connectionRequest.Id == 0 || ( connectionRequest.CampusId.HasValue && g.CampusId == connectionRequest.CampusId.Value ) ) && g.ConnectorGroup != null && g.ConnectorGroup.Members.Any( m => m.PersonId == CurrentPersonId ) ) ) { editAllowed = true; break; } } } lbConnect.Visible = editAllowed; lbEdit.Visible = editAllowed; lbTransfer.Visible = editAllowed; gConnectionRequestActivities.IsDeleteEnabled = editAllowed; gConnectionRequestActivities.Actions.ShowAdd = editAllowed; if ( !editAllowed ) { // User is not authorized nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed( ConnectionRequest.FriendlyTypeName ); ShowReadonlyDetails( connectionRequest ); } else { nbEditModeMessage.Text = string.Empty; if ( connectionRequest.Id > 0 ) { ShowReadonlyDetails( connectionRequest ); } else { ShowEditDetails( connectionRequest, rockContext ); } } } } }
/// <summary> /// Adds the connections requests to the system from the given XML element. /// </summary> /// <example> /// <connections> /// <connection type="Involvement" opportunity="Children's" comment="I would love to help teach kids about Jesus." date="2015-10-11T00:00:00" personGuid="1dfff821-e97c-4324-9883-cf59b5c5bdd6" /> /// </connections> /// </example> /// <param name="elemConnections">The elem connections.</param> /// <param name="rockContext">The rock context.</param> private void AddConnections( XElement elemConnections, RockContext rockContext ) { if ( elemConnections == null ) { return; } ConnectionRequestService crService = new ConnectionRequestService( rockContext ); ConnectionOpportunityService coService = new ConnectionOpportunityService( rockContext ); ConnectionTypeService typeService = new ConnectionTypeService( rockContext ); ConnectionStatusService connectionStatusService = new ConnectionStatusService( rockContext ); ConnectionStatus noContact = connectionStatusService.Get( "901e1a6a-0e91-4f42-880f-47c061c24e0c".AsGuid() ); // Find the type and it's corresponding opportunity and then add a connection request for the given person. foreach ( var element in elemConnections.Elements( "connection" ) ) { string connectionTypeName = element.Attribute( "type" ).Value.Trim(); string opportunityName = element.Attribute( "opportunity" ).Value.Trim(); string comment = element.Attribute( "comment" ).Value.Trim(); DateTime date = DateTime.Parse( element.Attribute( "date" ).Value.Trim(), new CultureInfo( "en-US" ) ); Guid personGuid = element.Attribute( "personGuid" ).Value.Trim().AsGuid(); var connectionOpportunity = coService.Queryable( "ConnectionType" ).AsNoTracking().Where( co => co.ConnectionType.Name == connectionTypeName && co.Name == opportunityName ).FirstOrDefault(); // make sure we found a matching connection opportunity if ( connectionOpportunity != null ) { ConnectionRequest connectionRequest = new ConnectionRequest() { ConnectionOpportunityId = connectionOpportunity.Id, PersonAliasId = _peopleAliasDictionary[personGuid], Comments = comment, ConnectionStatus = noContact, ConnectionState = global::ConnectionState.Active, CreatedDateTime = date }; crService.Add( connectionRequest ); } } }
/// <summary> /// Translates the contact form data. /// </summary> /// <param name="tableData">The table data.</param> /// <param name="totalRows">The total rows.</param> public void TranslateContactFormData(IQueryable <Row> tableData, long totalRows = 0) { var lookupContext = new RockContext(); var importedCommunicationCount = new CommunicationService(lookupContext).Queryable().Count(c => c.ForeignKey != null); var importedNoteCount = new NoteService(lookupContext).Queryable().Count(n => n.ForeignKey != null); // Involvement Connection Type var defaultConnectionType = new ConnectionTypeService(lookupContext).Get("DD565087-A4BE-4943-B123-BF22777E8426".AsGuid()); var opportunities = new ConnectionOpportunityService(lookupContext).Queryable().ToList(); var statuses = new ConnectionStatusService(lookupContext).Queryable().ToList(); var noContactStatus = statuses.FirstOrDefault(s => s.Name.Equals("No Contact", StringComparison.InvariantCultureIgnoreCase)); var prayerRequestors = new Dictionary <int, Person>(); var communicationList = new List <Communication>(); var connectionList = new List <ConnectionRequest>(); var prayerList = new List <PrayerRequest>(); var noteList = new List <Note>(); if (totalRows == 0) { totalRows = tableData.Count(); } var completedItems = 0; var percentage = (totalRows - 1) / 100 + 1; ReportProgress(0, $"Verifying contact items ({totalRows:N0} found, {importedNoteCount + importedCommunicationCount:N0} already exist)."); foreach (var row in tableData.Where(r => r != null)) { // ContactFormData joins to IndividualContactNotes on ContactInstItemID var itemForeignKey = row["ContactInstItemID"] as int?; var householdId = row["HouseholdID"] as int?; var itemIndividualId = row["ContactItemIndividualID"] as int?; var individualId = row["ContactIndividualID"] as int?; var createdDate = row["ContactActivityDate"] as DateTime?; var modifiedDate = row["ContactDatetime"] as DateTime?; var approvalDate = row["ContactFormLastUpdatedDate"] as DateTime?; var itemType = row["ContactFormName"] as string; var itemStatus = row["ContactStatus"] as string; var itemCaption = row["ContactItemName"] as string; var noteText1 = row["ContactNote"] as string; var noteText2 = row["ContactItemNote"] as string; var itemUserId = row["ContactItemAssignedUserID"] as int?; var contactUserId = row["ContactAssignedUserID"] as int?; var initialContactUserId = row["InitialContactCreatedByUserID"] as int?; var isConfidential = row["IsContactItemConfidential"] as int?; var itemText = !string.IsNullOrWhiteSpace(noteText1) ? $"{noteText1}<br>{noteText2}" : noteText2 ?? string.Empty; // look up the person this contact form is for var hasCaption = !string.IsNullOrWhiteSpace(itemCaption); var personKeys = GetPersonKeys(itemIndividualId ?? individualId, householdId); if (personKeys != null && (hasCaption || !string.IsNullOrWhiteSpace(itemText))) { var assignedUserId = itemUserId ?? contactUserId ?? initialContactUserId ?? 0; var userPersonAliasId = PortalUsers.ContainsKey(assignedUserId) ? (int?)PortalUsers[assignedUserId] : null; // 99% of the Email types have no other info if (itemType.Equals("Email", StringComparison.CurrentCultureIgnoreCase)) { // create the recipient list for this contact var recipients = new List <CommunicationRecipient> { new CommunicationRecipient { SendDateTime = createdDate ?? modifiedDate, Status = CommunicationRecipientStatus.Delivered, PersonAliasId = personKeys.PersonAliasId, CreatedDateTime = createdDate ?? modifiedDate, CreatedByPersonAliasId = userPersonAliasId, ModifiedByPersonAliasId = userPersonAliasId, ForeignKey = personKeys.PersonForeignId.ToString(), ForeignId = personKeys.PersonForeignId } }; // create an email record for this contact form var emailSubject = !string.IsNullOrWhiteSpace(itemCaption) ? itemCaption.Left(100) : itemText.Left(100); var communication = AddCommunication(lookupContext, EmailCommunicationMediumTypeId, emailSubject, itemText, false, CommunicationStatus.Approved, recipients, false, createdDate ?? modifiedDate, itemForeignKey.ToString(), userPersonAliasId); communicationList.Add(communication); } else if (itemType.EndsWith("Connection Card", StringComparison.CurrentCultureIgnoreCase)) { // lookup connection opportunity var opportunity = opportunities.FirstOrDefault(o => o.Name.Equals(itemType, StringComparison.InvariantCultureIgnoreCase) || (o.ForeignKey != null && o.ForeignKey.Equals(itemType, StringComparison.InvariantCultureIgnoreCase))); if (opportunity == null) { opportunity = AddConnectionOpportunity(lookupContext, defaultConnectionType.Id, createdDate, itemType, string.Empty, true, itemForeignKey.ToString()); opportunities.Add(opportunity); } // create a connection request var requestStatus = statuses.FirstOrDefault(s => s.Name.Equals(itemStatus, StringComparison.InvariantCultureIgnoreCase)) ?? noContactStatus; var requestState = itemStatus.Equals("Closed", StringComparison.InvariantCultureIgnoreCase) ? ConnectionState.Connected : ConnectionState.Active; var request = AddConnectionRequest(opportunity, itemForeignKey.ToString(), createdDate, modifiedDate, requestStatus.Id, requestState, !string.IsNullOrWhiteSpace(itemText) ? $"{itemCaption} - {itemText}" : itemCaption ?? string.Empty, approvalDate, personKeys.PersonAliasId, userPersonAliasId); connectionList.Add(request); } else if (hasCaption && itemCaption.EndsWith("Prayer Request", StringComparison.CurrentCultureIgnoreCase)) { // create a prayer request Person requestor = null; prayerRequestors.TryGetValue(personKeys.PersonId, out requestor); if (requestor == null) { requestor = lookupContext.People.FirstOrDefault(p => p.Id.Equals(personKeys.PersonId)); prayerRequestors.Add(personKeys.PersonId, requestor); } var request = AddPrayerRequest(lookupContext, null, personKeys.PersonAliasId, requestor.FirstName, requestor.LastName, requestor.Email, itemText ?? itemCaption, string.Empty, !itemStatus.Equals("Closed", StringComparison.CurrentCultureIgnoreCase), false, createdDate ?? modifiedDate, approvalDate, itemForeignKey.ToString(), userPersonAliasId); if (request != null) { prayerList.Add(request); } } else { //strip campus from type var campusId = GetCampusId(itemType); if (campusId.HasValue) { itemType = StripPrefix(itemType, campusId); } // create a note for this contact form var note = AddEntityNote(lookupContext, PersonEntityTypeId, personKeys.PersonId, itemCaption, itemText, false, false, itemType, null, false, createdDate ?? modifiedDate, itemForeignKey.ToString(), userPersonAliasId); noteList.Add(note); } completedItems++; if (completedItems % percentage < 1) { var percentComplete = completedItems / percentage; ReportProgress(percentComplete, $"{completedItems:N0} contact items imported ({percentComplete}% complete)."); } else if (completedItems % ReportingNumber < 1) { SaveCommunications(communicationList); SaveConnectionRequests(connectionList); SavePrayerRequests(prayerList); SaveNotes(noteList); ReportPartialProgress(); communicationList.Clear(); connectionList.Clear(); prayerList.Clear(); noteList.Clear(); } } } if (communicationList.Any() || connectionList.Any() || noteList.Any()) { SaveCommunications(communicationList); SaveConnectionRequests(connectionList); SavePrayerRequests(prayerList); SaveNotes(noteList); } ReportProgress(100, $"Finished contact item import: {completedItems:N0} items imported."); }
/// <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 ) { ConnectionType connectionType; using ( var rockContext = new RockContext() ) { if ( StatusesState.Any( s => s.IsDefault ) && ActivityTypesState.Any() ) { ConnectionTypeService connectionTypeService = new ConnectionTypeService( rockContext ); ConnectionActivityTypeService connectionActivityTypeService = new ConnectionActivityTypeService( rockContext ); ConnectionStatusService connectionStatusService = new ConnectionStatusService( rockContext ); ConnectionWorkflowService connectionWorkflowService = new ConnectionWorkflowService( rockContext ); AttributeService attributeService = new AttributeService( rockContext ); AttributeQualifierService qualifierService = new AttributeQualifierService( rockContext ); int connectionTypeId = int.Parse( hfConnectionTypeId.Value ); if ( connectionTypeId == 0 ) { connectionType = new ConnectionType(); connectionTypeService.Add( connectionType ); } else { connectionType = connectionTypeService.Queryable( "ConnectionActivityTypes, ConnectionWorkflows" ).Where( c => c.Id == connectionTypeId ).FirstOrDefault(); var uiWorkflows = WorkflowsState.Select( l => l.Guid ); foreach ( var connectionWorkflow in connectionType.ConnectionWorkflows.Where( l => !uiWorkflows.Contains( l.Guid ) ).ToList() ) { connectionType.ConnectionWorkflows.Remove( connectionWorkflow ); connectionWorkflowService.Delete( connectionWorkflow ); } var uiActivityTypes = ActivityTypesState.Select( r => r.Guid ); foreach ( var connectionActivityType in connectionType.ConnectionActivityTypes.Where( r => !uiActivityTypes.Contains( r.Guid ) ).ToList() ) { connectionType.ConnectionActivityTypes.Remove( connectionActivityType ); connectionActivityTypeService.Delete( connectionActivityType ); } var uiStatuses = StatusesState.Select( r => r.Guid ); foreach ( var connectionStatus in connectionType.ConnectionStatuses.Where( r => !uiStatuses.Contains( r.Guid ) ).ToList() ) { connectionType.ConnectionStatuses.Remove( connectionStatus ); connectionStatusService.Delete( connectionStatus ); } } connectionType.Name = tbName.Text; connectionType.Description = tbDescription.Text; connectionType.IconCssClass = tbIconCssClass.Text; connectionType.DaysUntilRequestIdle = nbDaysUntilRequestIdle.Text.AsInteger(); connectionType.EnableFutureFollowup = cbFutureFollowUp.Checked; connectionType.EnableFullActivityList = cbFullActivityList.Checked; connectionType.RequiresPlacementGroupToConnect = cbRequiresPlacementGroup.Checked; foreach ( var connectionActivityTypeState in ActivityTypesState ) { ConnectionActivityType connectionActivityType = connectionType.ConnectionActivityTypes.Where( a => a.Guid == connectionActivityTypeState.Guid ).FirstOrDefault(); if ( connectionActivityType == null ) { connectionActivityType = new ConnectionActivityType(); connectionType.ConnectionActivityTypes.Add( connectionActivityType ); } connectionActivityType.CopyPropertiesFrom( connectionActivityTypeState ); } foreach ( var connectionStatusState in StatusesState ) { ConnectionStatus connectionStatus = connectionType.ConnectionStatuses.Where( a => a.Guid == connectionStatusState.Guid ).FirstOrDefault(); if ( connectionStatus == null ) { connectionStatus = new ConnectionStatus(); connectionType.ConnectionStatuses.Add( connectionStatus ); } connectionStatus.CopyPropertiesFrom( connectionStatusState ); connectionStatus.ConnectionTypeId = connectionType.Id; } foreach ( ConnectionWorkflow connectionWorkflowState in WorkflowsState ) { ConnectionWorkflow connectionWorkflow = connectionType.ConnectionWorkflows.Where( a => a.Guid == connectionWorkflowState.Guid ).FirstOrDefault(); if ( connectionWorkflow == null ) { connectionWorkflow = new ConnectionWorkflow(); connectionType.ConnectionWorkflows.Add( connectionWorkflow ); } else { connectionWorkflowState.Id = connectionWorkflow.Id; connectionWorkflowState.Guid = connectionWorkflow.Guid; } connectionWorkflow.CopyPropertiesFrom( connectionWorkflowState ); connectionWorkflow.ConnectionTypeId = connectionTypeId; } if ( !connectionType.IsValid ) { // Controls will render the error messages return; } // need WrapTransaction due to Attribute saves rockContext.WrapTransaction( () => { rockContext.SaveChanges(); /* Save Attributes */ string qualifierValue = connectionType.Id.ToString(); SaveAttributes( new ConnectionOpportunity().TypeId, "ConnectionTypeId", qualifierValue, AttributesState, rockContext ); connectionType = connectionTypeService.Get( connectionType.Id ); if ( connectionType != null ) { if ( !connectionType.IsAuthorized( Authorization.VIEW, CurrentPerson ) ) { connectionType.AllowPerson( Authorization.VIEW, CurrentPerson, rockContext ); } if ( !connectionType.IsAuthorized( Authorization.EDIT, CurrentPerson ) ) { connectionType.AllowPerson( Authorization.EDIT, CurrentPerson, rockContext ); } if ( !connectionType.IsAuthorized( Authorization.ADMINISTRATE, CurrentPerson ) ) { connectionType.AllowPerson( Authorization.ADMINISTRATE, CurrentPerson, rockContext ); } } } ); ConnectionWorkflowService.FlushCachedTriggers(); var qryParams = new Dictionary<string, string>(); qryParams["ConnectionTypeId"] = connectionType.Id.ToString(); NavigateToPage( RockPage.Guid, qryParams ); } else { nbRequired.Visible = true; } } }
/// <summary> /// Returns the field's current value(s) /// </summary> /// <param name="parentControl">The parent control.</param> /// <param name="value">Information about the value</param> /// <param name="configurationValues">The configuration values.</param> /// <param name="condensed">Flag indicating if the value should be condensed (i.e. for use in a grid column)</param> /// <returns></returns> public override string FormatValue( Control parentControl, string value, Dictionary<string, ConfigurationValue> configurationValues, bool condensed ) { string formattedValue = string.Empty; Guid? guid = value.AsGuidOrNull(); if (guid.HasValue) { var status = new ConnectionStatusService( new RockContext() ).Get( guid.Value ); if ( status != null ) { formattedValue = status.Name; } } return base.FormatValue( parentControl, formattedValue, configurationValues, condensed ); }