protected void gRequests_Delete(object sender, RowEventArgs e) { using (RockContext rockContext = new RockContext()) { var service = new ConnectionRequestService(rockContext); var connectionRequest = service.Get(e.RowKeyId); if (connectionRequest != null) { string errorMessage; if (!service.CanDelete(connectionRequest, out errorMessage)) { mdGridWarning.Show(errorMessage, ModalAlertType.Information); return; } rockContext.WrapTransaction(() => { new ConnectionRequestActivityService(rockContext).DeleteRange(connectionRequest.ConnectionRequestActivities); service.Delete(connectionRequest); rockContext.SaveChanges(); }); } } BindGrid(); }
/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute(RockContext rockContext, WorkflowAction action, Object entity, out List <string> errorMessages) { errorMessages = new List <string>(); // Get the connection request ConnectionRequest request = null; Guid connectionRequestGuid = action.GetWorklowAttributeValue(GetAttributeValue(action, "ConnectionRequestAttribute").AsGuid()).AsGuid(); var connectionRequestService = new ConnectionRequestService(rockContext); request = connectionRequestService.Get(connectionRequestGuid); if (request == null) { errorMessages.Add("Invalid Connection Request Attribute or Value!"); return(false); } // Get the opportunity ConnectionOpportunity opportunity = null; Guid opportunityTypeGuid = action.GetWorklowAttributeValue(GetAttributeValue(action, "ConnectionOpportunityAttribute").AsGuid()).AsGuid(); opportunity = new ConnectionOpportunityService(rockContext).Get(opportunityTypeGuid); if (opportunity == null) { errorMessages.Add("Invalid Connection Opportunity Attribute or Value!"); return(false); } // Get the transfer note string note = GetAttributeValue(action, "TransferNote", true); if (request != null && opportunity != null) { request.ConnectionOpportunityId = opportunity.Id; var guid = Rock.SystemGuid.ConnectionActivityType.TRANSFERRED.AsGuid(); var transferredActivityId = new ConnectionActivityTypeService(rockContext) .Queryable() .Where(t => t.Guid == guid) .Select(t => t.Id) .FirstOrDefault(); ConnectionRequestActivity connectionRequestActivity = new ConnectionRequestActivity(); connectionRequestActivity.ConnectionRequestId = request.Id; connectionRequestActivity.ConnectionOpportunityId = opportunity.Id; connectionRequestActivity.ConnectionActivityTypeId = transferredActivityId; connectionRequestActivity.Note = note; new ConnectionRequestActivityService(rockContext).Add(connectionRequestActivity); rockContext.SaveChanges(); } return(true); }
/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute( RockContext rockContext, WorkflowAction action, Object entity, out List<string> errorMessages ) { errorMessages = new List<string>(); // Get the connection request ConnectionRequest request = null; Guid connectionRequestGuid = action.GetWorklowAttributeValue( GetAttributeValue( action, "ConnectionRequestAttribute" ).AsGuid() ).AsGuid(); var connectionRequestService = new ConnectionRequestService( rockContext ); request = connectionRequestService.Get( connectionRequestGuid ); if ( request == null ) { errorMessages.Add( "Invalid Connection Request Attribute or Value!" ); return false; } // Get the opportunity ConnectionOpportunity opportunity = null; Guid opportunityTypeGuid = action.GetWorklowAttributeValue( GetAttributeValue( action, "ConnectionOpportunityAttribute" ).AsGuid() ).AsGuid(); opportunity = new ConnectionOpportunityService( rockContext ).Get( opportunityTypeGuid ); if ( opportunity == null ) { errorMessages.Add( "Invalid Connection Opportunity Attribute or Value!" ); return false; } // Get the tranfer note string note = GetAttributeValue( action, "TransferNote", true ); if ( request != null && opportunity != null ) { request.ConnectionOpportunityId = opportunity.Id; var guid = Rock.SystemGuid.ConnectionActivityType.TRANSFERRED.AsGuid(); var transferredActivityId = new ConnectionActivityTypeService( rockContext ) .Queryable() .Where( t => t.Guid == guid ) .Select( t => t.Id ) .FirstOrDefault(); ConnectionRequestActivity connectionRequestActivity = new ConnectionRequestActivity(); connectionRequestActivity.ConnectionRequestId = request.Id; connectionRequestActivity.ConnectionOpportunityId = opportunity.Id; connectionRequestActivity.ConnectionActivityTypeId = transferredActivityId; connectionRequestActivity.Note = note; new ConnectionRequestActivityService( rockContext ).Add( connectionRequestActivity ); rockContext.SaveChanges(); } return true; }
/// <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 ( ! ppRequestor.PersonAliasId.HasValue ) { ShowErrorMessage( "Incomplete", "You must select a person to save a request." ); return; } if ( Page.IsValid ) { using ( var rockContext = new RockContext() ) { ConnectionRequestService connectionRequestService = new ConnectionRequestService( rockContext ); ConnectionRequest connectionRequest = null; int connectionRequestId = hfConnectionRequestId.ValueAsInt(); // if adding a new connection request if ( connectionRequestId.Equals( 0 ) ) { connectionRequest = new ConnectionRequest(); connectionRequest.ConnectionOpportunityId = hfConnectionOpportunityId.ValueAsInt(); if ( ddlCampus.SelectedValueAsId().HasValue ) { SetUserPreference( CAMPUS_SETTING, ddlCampus.SelectedValueAsId().Value.ToString() ); } } else { // load existing connection request connectionRequest = connectionRequestService.Get( connectionRequestId ); } var personAliasService = new PersonAliasService( rockContext ); int? oldConnectorPersonAliasId = connectionRequest.ConnectorPersonAliasId; int? newConnectorPersonId = ddlConnectorEdit.SelectedValueAsId(); int? newConnectorPersonAliasId = newConnectorPersonId.HasValue ? personAliasService.GetPrimaryAliasId( newConnectorPersonId.Value ) : (int?)null; connectionRequest.ConnectorPersonAliasId = newConnectorPersonAliasId; connectionRequest.PersonAlias = personAliasService.Get( ppRequestor.PersonAliasId.Value ); connectionRequest.ConnectionState = rblState.SelectedValueAsEnum<ConnectionState>(); connectionRequest.ConnectionStatusId = rblStatus.SelectedValueAsId().Value; if ( ddlCampus.SelectedValueAsId().HasValue ) { connectionRequest.CampusId = ddlCampus.SelectedValueAsId().Value; } connectionRequest.AssignedGroupId = ddlPlacementGroup.SelectedValueAsId(); connectionRequest.AssignedGroupMemberRoleId = ddlPlacementGroupRole.SelectedValueAsInt(); connectionRequest.AssignedGroupMemberStatus = ddlPlacementGroupStatus.SelectedValueAsEnumOrNull<GroupMemberStatus>(); connectionRequest.AssignedGroupMemberAttributeValues = GetGroupMemberAttributeValues(); connectionRequest.Comments = tbComments.Text.ScrubHtmlAndConvertCrLfToBr(); connectionRequest.FollowupDate = dpFollowUp.SelectedDate; if ( !Page.IsValid ) { return; } // if the connectionRequest IsValue is false, and the UI controls didn't report any errors, it is probably // because the custom rules of ConnectionRequest didn't pass. // So, make sure a message is displayed in the validation summary. cvConnectionRequest.IsValid = connectionRequest.IsValid; if ( !cvConnectionRequest.IsValid ) { cvConnectionRequest.ErrorMessage = connectionRequest.ValidationResults.Select( a => a.ErrorMessage ).ToList().AsDelimited( "<br />" ); return; } if ( connectionRequest.Id.Equals( 0 ) ) { connectionRequestService.Add( connectionRequest ); } rockContext.SaveChanges(); if ( newConnectorPersonAliasId.HasValue && !newConnectorPersonAliasId.Equals( oldConnectorPersonAliasId ) ) { var guid = Rock.SystemGuid.ConnectionActivityType.ASSIGNED.AsGuid(); var assignedActivityId = new ConnectionActivityTypeService( rockContext ).Queryable() .Where( t => t.Guid == guid ) .Select( t => t.Id ) .FirstOrDefault(); if ( assignedActivityId > 0 ) { var connectionRequestActivityService = new ConnectionRequestActivityService( rockContext ); var connectionRequestActivity = new ConnectionRequestActivity(); connectionRequestActivity.ConnectionRequestId = connectionRequest.Id; connectionRequestActivity.ConnectionOpportunityId = connectionRequest.ConnectionOpportunityId; connectionRequestActivity.ConnectionActivityTypeId = assignedActivityId; connectionRequestActivity.ConnectorPersonAliasId = newConnectorPersonAliasId; connectionRequestActivityService.Add( connectionRequestActivity ); rockContext.SaveChanges(); } } var qryParams = new Dictionary<string, string>(); qryParams["ConnectionRequestId"] = connectionRequest.Id.ToString(); qryParams["ConnectionOpportunityId"] = connectionRequest.ConnectionOpportunityId.ToString(); NavigateToPage( RockPage.Guid, qryParams ); } } }
/// <summary> /// Handles the Click event of the btnAddConnectionRequestActivity 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 btnAddConnectionRequestActivity_Click( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequestActivityService = new ConnectionRequestActivityService( rockContext ); var personAliasService = new PersonAliasService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null ) { int? activityTypeId = ddlActivity.SelectedValueAsId(); int? personAliasId = personAliasService.GetPrimaryAliasId( ddlActivityConnector.SelectedValueAsId() ?? 0 ); if ( activityTypeId.HasValue && personAliasId.HasValue ) { ConnectionRequestActivity connectionRequestActivity = null; Guid? guid = hfAddConnectionRequestActivityGuid.Value.AsGuidOrNull(); if ( guid.HasValue ) { connectionRequestActivity = connectionRequestActivityService.Get( guid.Value ); } if ( connectionRequestActivity == null ) { connectionRequestActivity = new ConnectionRequestActivity(); connectionRequestActivity.ConnectionRequestId = connectionRequest.Id; connectionRequestActivity.ConnectionOpportunityId = connectionRequest.ConnectionOpportunityId; connectionRequestActivityService.Add( connectionRequestActivity ); } connectionRequestActivity.ConnectionActivityTypeId = activityTypeId.Value; connectionRequestActivity.ConnectorPersonAliasId = personAliasId.Value; connectionRequestActivity.Note = tbNote.Text; rockContext.SaveChanges(); BindConnectionRequestActivitiesGrid( connectionRequest, rockContext ); HideDialog(); } } } }
/// <summary> /// Shows the activity dialog. /// </summary> /// <param name="activityGuid">The activity unique identifier.</param> private void ShowActivityDialog( Guid activityGuid ) { ddlActivity.Items.Clear(); ddlActivity.Items.Add( new ListItem( string.Empty, string.Empty ) ); var connectors = new Dictionary<int, Person>(); ConnectionRequestActivity activity = null; using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null && connectionRequest.ConnectionOpportunity != null && connectionRequest.ConnectionOpportunity.ConnectionType != null ) { foreach ( var activityType in connectionRequest.ConnectionOpportunity.ConnectionType.ConnectionActivityTypes.OrderBy( a => a.Name ) ) { if ( activityType.IsAuthorized( Authorization.VIEW, CurrentPerson ) ) { ddlActivity.Items.Add( new ListItem( activityType.Name, activityType.Id.ToString() ) ); } } connectionRequest.ConnectionOpportunity.ConnectionOpportunityConnectorGroups .Where( g => !g.CampusId.HasValue || !connectionRequest.CampusId.HasValue || g.CampusId.Value == connectionRequest.CampusId.Value ) .SelectMany( g => g.ConnectorGroup.Members ) .Select( m => m.Person ) .ToList() .ForEach( p => connectors.AddOrIgnore( p.Id, p ) ); } if ( activityGuid != Guid.Empty ) { activity = new ConnectionRequestActivityService( rockContext ).Get( activityGuid ); if ( activity != null && activity.ConnectorPersonAlias != null && activity.ConnectorPersonAlias.Person != null ) { connectors.AddOrIgnore( activity.ConnectorPersonAlias.Person.Id, activity.ConnectorPersonAlias.Person ); } } } if ( CurrentPerson != null ) { connectors.AddOrIgnore( CurrentPerson.Id, CurrentPerson ); } ddlActivity.SetValue( activity != null ? activity.ConnectionActivityTypeId : 0 ); ddlActivityConnector.Items.Clear(); connectors .ToList() .OrderBy( p => p.Value.LastName ) .ThenBy( p => p.Value.NickName ) .ToList() .ForEach( c => ddlActivityConnector.Items.Add( new ListItem( c.Value.FullName, c.Key.ToString() ) ) ); ddlActivityConnector.SetValue( activity != null && activity.ConnectorPersonAlias != null ? activity.ConnectorPersonAlias.PersonId : CurrentPersonId ?? 0 ); tbNote.Text = activity != null ? activity.Note : string.Empty; hfAddConnectionRequestActivityGuid.Value = activityGuid.ToString(); if ( activityGuid == Guid.Empty ) { dlgConnectionRequestActivities.Title = "Add Activity"; dlgConnectionRequestActivities.SaveButtonText = "Add"; } else { dlgConnectionRequestActivities.Title = "Edit Activity"; dlgConnectionRequestActivities.SaveButtonText = "Save"; } ShowDialog( "ConnectionRequestActivities", true ); }
/// <summary> /// Handles the GridRebind event of the gConnectionRequestActivities control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> private void gConnectionRequestActivities_GridRebind( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null ) { BindConnectionRequestActivitiesGrid( connectionRequest, rockContext ); } } }
protected void gRequests_Delete( object sender, RowEventArgs e ) { using ( RockContext rockContext = new RockContext() ) { var service = new ConnectionRequestService( rockContext ); var connectionRequest = service.Get( e.RowKeyId ); if ( connectionRequest != null ) { string errorMessage; if ( !service.CanDelete( connectionRequest, out errorMessage ) ) { mdGridWarning.Show( errorMessage, ModalAlertType.Information ); return; } rockContext.WrapTransaction( () => { new ConnectionRequestActivityService( rockContext ).DeleteRange( connectionRequest.ConnectionRequestActivities ); service.Delete( connectionRequest ); rockContext.SaveChanges(); } ); } } BindGrid(); }
/// <summary> /// Handles the Delete event of the gConnectionRequestActivities control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="RowEventArgs"/> instance containing the event data.</param> protected void gConnectionRequestActivities_Delete( object sender, RowEventArgs e ) { using ( var rockContext = new RockContext() ) { // only allow deleting if current user created the activity, and not a system activity var activityGuid = e.RowKeyValue.ToString().AsGuid(); var connectionRequestActivityService = new ConnectionRequestActivityService( rockContext ); var activity = connectionRequestActivityService.Get( activityGuid ); if ( activity != null && ( activity.CreatedByPersonAliasId.Equals( CurrentPersonAliasId ) || activity.ConnectorPersonAliasId.Equals( CurrentPersonAliasId ) ) && activity.ConnectionActivityType.ConnectionTypeId.HasValue ) { connectionRequestActivityService.Delete( activity ); rockContext.SaveChanges(); } var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); BindConnectionRequestActivitiesGrid( connectionRequest, rockContext ); } }
protected void ddlPlacementGroup_SelectedIndexChanged( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest == null ) { connectionRequest = new ConnectionRequest(); var connectionOpportunity = new ConnectionOpportunityService( rockContext ).Get( hfConnectionOpportunityId.ValueAsInt() ); if ( connectionOpportunity != null ) { connectionRequest.ConnectionOpportunity = connectionOpportunity; connectionRequest.ConnectionOpportunityId = connectionOpportunity.Id; } } RebindGroupRole( connectionRequest, rockContext ); } }
/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute(RockContext rockContext, WorkflowAction action, Object entity, out List <string> errorMessages) { errorMessages = new List <string>(); // Get the person PersonAlias personAlias = null; Guid personAliasGuid = action.GetWorkflowAttributeValue(GetAttributeValue(action, "PersonAttribute").AsGuid()).AsGuid(); personAlias = new PersonAliasService(rockContext).Get(personAliasGuid); if (personAlias == null) { errorMessages.Add("Invalid Person Attribute or Value!"); return(false); } // Get the opportunity ConnectionOpportunity opportunity = null; Guid opportunityTypeGuid = action.GetWorkflowAttributeValue(GetAttributeValue(action, "ConnectionOpportunityAttribute").AsGuid()).AsGuid(); opportunity = new ConnectionOpportunityService(rockContext).Get(opportunityTypeGuid); if (opportunity == null) { errorMessages.Add("Invalid Connection Opportunity Attribute or Value!"); return(false); } // Get connection status ConnectionStatus status = null; Guid? connectionStatusGuid = null; Guid? connectionStatusAttributeGuid = GetAttributeValue(action, "ConnectionStatusAttribute").AsGuidOrNull(); if (connectionStatusAttributeGuid.HasValue) { connectionStatusGuid = action.GetWorkflowAttributeValue(connectionStatusAttributeGuid.Value).AsGuidOrNull(); if (connectionStatusGuid.HasValue) { status = opportunity.ConnectionType.ConnectionStatuses .Where(s => s.Guid.Equals(connectionStatusGuid.Value)) .FirstOrDefault(); } } if (status == null) { connectionStatusGuid = GetAttributeValue(action, "ConnectionStatus").AsGuidOrNull(); if (connectionStatusGuid.HasValue) { status = opportunity.ConnectionType.ConnectionStatuses .Where(s => s.Guid.Equals(connectionStatusGuid.Value)) .FirstOrDefault(); } } if (status == null) { status = opportunity.ConnectionType.ConnectionStatuses .Where(s => s.IsDefault) .FirstOrDefault(); } // Get Campus int? campusId = null; Guid?campusAttributeGuid = GetAttributeValue(action, "CampusAttribute").AsGuidOrNull(); if (campusAttributeGuid.HasValue) { Guid?campusGuid = action.GetWorkflowAttributeValue(campusAttributeGuid.Value).AsGuidOrNull(); if (campusGuid.HasValue) { var campus = CampusCache.Get(campusGuid.Value); if (campus != null) { campusId = campus.Id; } } } // Get the Comment String comment = action.GetWorkflowAttributeValue(GetAttributeValue(action, "ConnectionCommentAttribute").AsGuid()); var connectionRequestService = new ConnectionRequestService(rockContext); var connectionRequest = new ConnectionRequest(); connectionRequest.PersonAliasId = personAlias.Id; connectionRequest.ConnectionOpportunityId = opportunity.Id; connectionRequest.ConnectionState = ConnectionState.Active; connectionRequest.ConnectionStatusId = status.Id; connectionRequest.CampusId = campusId; connectionRequest.ConnectorPersonAliasId = opportunity.GetDefaultConnectorPersonAliasId(campusId); connectionRequest.Comments = comment; connectionRequestService.Add(connectionRequest); rockContext.SaveChanges(); // If request attribute was specified, requery the request and set the attribute's value Guid?connectionRequestAttributeGuid = GetAttributeValue(action, "ConnectionRequestAttribute").AsGuidOrNull(); if (connectionRequestAttributeGuid.HasValue) { connectionRequest = connectionRequestService.Get(connectionRequest.Id); if (connectionRequest != null) { SetWorkflowAttributeValue(action, connectionRequestAttributeGuid.Value, connectionRequest.Guid.ToString()); } } return(true); }
/// <summary> /// Handles the Click event of the lbConnect 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 lbConnect_Click( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var groupMemberService = new GroupMemberService( rockContext ); var connectionActivityTypeService = new ConnectionActivityTypeService( rockContext ); var connectionRequestActivityService = new ConnectionRequestActivityService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null && connectionRequest.PersonAlias != null && connectionRequest.ConnectionOpportunity != null ) { // Only do group member placement if the request has an assigned placement group if ( connectionRequest.ConnectionOpportunity.GroupMemberRoleId.HasValue && connectionRequest.AssignedGroupId.HasValue ) { // Only attempt the add if person does not already exist in group with same role var groupMember = groupMemberService.GetByGroupIdAndPersonIdAndGroupRoleId( connectionRequest.AssignedGroupId.Value, connectionRequest.PersonAlias.PersonId, connectionRequest.ConnectionOpportunity.GroupMemberRoleId.Value ); if ( groupMember == null ) { groupMember = new GroupMember(); groupMember.PersonId = connectionRequest.PersonAlias.PersonId; groupMember.GroupRoleId = connectionRequest.ConnectionOpportunity.GroupMemberRoleId.Value; groupMember.GroupMemberStatus = connectionRequest.ConnectionOpportunity.GroupMemberStatus; groupMember.GroupId = connectionRequest.AssignedGroupId.Value; groupMemberService.Add( groupMember ); } } // ... but always record the connection activity and change the state to connected. var guid = Rock.SystemGuid.ConnectionActivityType.CONNECTED.AsGuid(); var connectedActivityId = connectionActivityTypeService.Queryable() .Where( t => t.Guid == guid ) .Select( t => t.Id ) .FirstOrDefault(); if ( connectedActivityId > 0 ) { var connectionRequestActivity = new ConnectionRequestActivity(); connectionRequestActivity.ConnectionRequestId = connectionRequest.Id; connectionRequestActivity.ConnectionOpportunityId = connectionRequest.ConnectionOpportunityId; connectionRequestActivity.ConnectionActivityTypeId = connectedActivityId; connectionRequestActivity.ConnectorPersonAliasId = CurrentPersonAliasId; connectionRequestActivityService.Add( connectionRequestActivity ); } connectionRequest.ConnectionState = ConnectionState.Connected; rockContext.SaveChanges(); ShowDetail( connectionRequest.Id, connectionRequest.ConnectionOpportunityId ); } } }
/// <summary> /// Handles the SelectedIndexChanged event of the ddlCampus 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 ddlCampus_SelectedIndexChanged( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest == null ) { connectionRequest = new ConnectionRequest(); connectionRequest.ConnectionOpportunity = new ConnectionOpportunityService( rockContext ).Get( hfConnectionOpportunityId.ValueAsInt() ); } RebindConnectors( connectionRequest, ddlCampus.SelectedValueAsInt(), rockContext ); } }
/// <summary> /// Handles the Click event of the btnSearch 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 btnSearch_Click( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null && connectionRequest.ConnectionOpportunity != null && connectionRequest.ConnectionOpportunity.ConnectionType != null ) { cblCampus.DataSource = CampusCache.All(); cblCampus.DataBind(); if ( connectionRequest.CampusId.HasValue ) { cblCampus.SetValues( new List<string> { connectionRequest.CampusId.Value.ToString() } ); } BindAttributes(); AddDynamicControls(); rptSearchResult.DataSource = connectionRequest.ConnectionOpportunity.ConnectionType.ConnectionOpportunities.ToList(); rptSearchResult.DataBind(); ShowDialog( "Search", true ); } } }
/// <summary> /// Handles the Click event of the lbTransfer 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 lbTransfer_Click( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null && connectionRequest.ConnectionOpportunity != null && connectionRequest.ConnectionOpportunity.ConnectionType != null ) { pnlReadDetails.Visible = false; wpConnectionRequestActivities.Visible = false; wpConnectionRequestWorkflow.Visible = false; pnlTransferDetails.Visible = true; ddlTransferStatus.Items.Clear(); foreach ( var status in connectionRequest.ConnectionOpportunity.ConnectionType.ConnectionStatuses ) { ddlTransferStatus.Items.Add( new ListItem( status.Name, status.Id.ToString() ) ); } ddlTransferStatus.SetValue( connectionRequest.ConnectionStatusId.ToString() ); ddlTransferOpportunity.Items.Clear(); foreach ( var opportunity in connectionRequest.ConnectionOpportunity.ConnectionType.ConnectionOpportunities .Where( o => o.Id != connectionRequest.ConnectionOpportunityId ).OrderBy( o => o.Name ) ) { ddlTransferOpportunity.Items.Add( new ListItem( opportunity.Name, opportunity.Id.ToString().ToUpper() ) ); } } } }
/// <summary> /// Handles the Click event of the btnTransferSave 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 btnTransferSave_Click( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionActivityTypeService = new ConnectionActivityTypeService( rockContext ); var connectionRequestActivityService = new ConnectionRequestActivityService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null ) { int? newOpportunityId = ddlTransferOpportunity.SelectedValueAsId(); int? newStatusId = ddlTransferStatus.SelectedValueAsId(); var guid = Rock.SystemGuid.ConnectionActivityType.TRANSFERRED.AsGuid(); var transferredActivityId = connectionActivityTypeService.Queryable() .Where( t => t.Guid == guid ) .Select( t => t.Id ) .FirstOrDefault(); if ( newOpportunityId.HasValue && newStatusId.HasValue && transferredActivityId > 0 ) { ConnectionRequestActivity connectionRequestActivity = new ConnectionRequestActivity(); connectionRequestActivity.ConnectionRequestId = connectionRequest.Id; connectionRequestActivity.ConnectionOpportunityId = newOpportunityId.Value; connectionRequestActivity.ConnectionActivityTypeId = transferredActivityId; connectionRequestActivity.Note = tbTransferNote.Text; connectionRequestActivityService.Add( connectionRequestActivity ); connectionRequest.ConnectionOpportunityId = newOpportunityId.Value; connectionRequest.ConnectionStatusId = newStatusId.Value; connectionRequest.AssignedGroupId = null; connectionRequest.AssignedGroupMemberRoleId = null; connectionRequest.AssignedGroupMemberStatus = null; if ( cbClearConnector.Checked ) { connectionRequest.ConnectorPersonAliasId = null; } rockContext.SaveChanges(); pnlReadDetails.Visible = true; wpConnectionRequestActivities.Visible = true; wpConnectionRequestWorkflow.Visible = true; pnlTransferDetails.Visible = false; ShowDetail( connectionRequest.Id, connectionRequest.ConnectionOpportunityId ); } } } }
/// <summary> /// Binds the attributes. /// </summary> private void BindAttributes() { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null && connectionRequest.ConnectionOpportunity != null ) { // Parse the attribute filters SearchAttributes = new List<AttributeCache>(); int entityTypeId = new ConnectionOpportunity().TypeId; foreach ( var attributeModel in new AttributeService( rockContext ).Queryable() .Where( a => a.EntityTypeId == entityTypeId && a.EntityTypeQualifierColumn.Equals( "ConnectionTypeId", StringComparison.OrdinalIgnoreCase ) && a.EntityTypeQualifierValue.Equals( connectionRequest.ConnectionOpportunity.ConnectionTypeId.ToString() ) && a.AllowSearch ) .OrderBy( a => a.Order ) .ThenBy( a => a.Name ) ) { SearchAttributes.Add( AttributeCache.Read( attributeModel ) ); } } } }
/// <summary> /// Handles the SaveClick event of the dlgSearch 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 dlgSearch_SaveClick( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null && connectionRequest.ConnectionOpportunity != null && connectionRequest.ConnectionOpportunity.ConnectionType != null ) { var qrySearch = connectionRequest.ConnectionOpportunity.ConnectionType.ConnectionOpportunities.ToList(); if ( !string.IsNullOrWhiteSpace( tbSearchName.Text ) ) { var searchTerms = tbSearchName.Text.ToLower().SplitDelimitedValues( true ); qrySearch = qrySearch.Where( o => searchTerms.Any( t => t.Contains( o.Name.ToLower() ) || o.Name.ToLower().Contains( t ) ) ).ToList(); } var searchCampuses = cblCampus.SelectedValuesAsInt; if ( searchCampuses.Count > 0 ) { qrySearch = qrySearch.Where( o => o.ConnectionOpportunityCampuses.Any( c => searchCampuses.Contains( c.CampusId ) ) ).ToList(); } // Filter query by any configured attribute filters if ( SearchAttributes != null && SearchAttributes.Any() ) { var attributeValueService = new AttributeValueService( rockContext ); var parameterExpression = attributeValueService.ParameterExpression; foreach ( var attribute in SearchAttributes ) { var filterControl = phAttributeFilters.FindControl( "filter_" + attribute.Id.ToString() ); if ( filterControl != null ) { var filterValues = attribute.FieldType.Field.GetFilterValues( filterControl, attribute.QualifierValues, Rock.Reporting.FilterMode.SimpleFilter ); var expression = attribute.FieldType.Field.AttributeFilterExpression( attribute.QualifierValues, filterValues, parameterExpression ); if ( expression != null ) { var attributeValues = attributeValueService .Queryable() .Where( v => v.Attribute.Id == attribute.Id ); attributeValues = attributeValues.Where( parameterExpression, expression, null ); qrySearch = qrySearch.Where( w => attributeValues.Select( v => v.EntityId ).Contains( w.Id ) ).ToList(); } } } } rptSearchResult.DataSource = qrySearch; rptSearchResult.DataBind(); } } }
/// <summary> /// Binds the connection request workflows grid. /// </summary> private void BindConnectionRequestWorkflowsGrid() { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null ) { var instantiatedWorkflows = connectionRequest.ConnectionRequestWorkflows .Where( c => c.Workflow != null && c.Workflow.WorkflowType != null ) .ToList(); gConnectionRequestWorkflows.DataSource = instantiatedWorkflows .Select( c => new { c.Id, c.Guid, WorkflowType = c.Workflow.WorkflowType.Name, Trigger = c.TriggerType.ConvertToString(), CurrentActivity = c.Workflow.ActiveActivityNames, Date = c.Workflow.ActivatedDateTime.Value.ToShortDateString(), OrderByDate = c.Workflow.ActivatedDateTime.Value, Status = c.Workflow.Status == "Completed" ? "<span class='label label-success'>Complete</span>" : "<span class='label label-info'>Running</span>" } ) .OrderByDescending( c => c.OrderByDate ) .ToList(); gConnectionRequestWorkflows.DataBind(); if ( !instantiatedWorkflows.Any() ) { wpConnectionRequestWorkflow.Visible = false; } else { wpConnectionRequestWorkflow.Title = String.Format( "Workflows <span class='badge badge-info'>{0}</span>", instantiatedWorkflows.Count.ToString() ); } } } }
/// <summary> /// Handles the Click event of the lbConnect 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 lbConnect_Click( object sender, EventArgs e ) { using ( var rockContext = new RockContext() ) { var connectionRequestService = new ConnectionRequestService( rockContext ); var groupMemberService = new GroupMemberService( rockContext ); var connectionActivityTypeService = new ConnectionActivityTypeService( rockContext ); var connectionRequestActivityService = new ConnectionRequestActivityService( rockContext ); var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() ); if ( connectionRequest != null && connectionRequest.PersonAlias != null && connectionRequest.ConnectionOpportunity != null ) { bool okToConnect = true; GroupMember groupMember = null; // Only do group member placement if the request has an assigned placement group, role, and status if ( connectionRequest.AssignedGroupId.HasValue && connectionRequest.AssignedGroupMemberRoleId.HasValue && connectionRequest.AssignedGroupMemberStatus.HasValue ) { var group = new GroupService( rockContext ).Get( connectionRequest.AssignedGroupId.Value ); if ( group != null ) { // Only attempt the add if person does not already exist in group with same role groupMember = groupMemberService.GetByGroupIdAndPersonIdAndGroupRoleId( connectionRequest.AssignedGroupId.Value, connectionRequest.PersonAlias.PersonId, connectionRequest.AssignedGroupMemberRoleId.Value ); if ( groupMember == null ) { groupMember = new GroupMember(); groupMember.PersonId = connectionRequest.PersonAlias.PersonId; groupMember.GroupId = connectionRequest.AssignedGroupId.Value; groupMember.GroupRoleId = connectionRequest.AssignedGroupMemberRoleId.Value; groupMember.GroupMemberStatus = connectionRequest.AssignedGroupMemberStatus.Value; foreach ( ListItem item in cblManualRequirements.Items ) { if ( !item.Selected && group.MustMeetRequirementsToAddMember.HasValue && group.MustMeetRequirementsToAddMember.Value ) { okToConnect = false; nbRequirementsErrors.Text = "Group Requirements have not been met. Please verify all of the requirements."; nbRequirementsErrors.Visible = true; break; } else { groupMember.GroupMemberRequirements.Add( new GroupMemberRequirement { GroupRequirementId = item.Value.AsInteger(), RequirementMetDateTime = RockDateTime.Now, LastRequirementCheckDateTime = RockDateTime.Now } ); } } if ( okToConnect ) { groupMemberService.Add( groupMember ); if ( !string.IsNullOrWhiteSpace( connectionRequest.AssignedGroupMemberAttributeValues ) ) { var savedValues = JsonConvert.DeserializeObject<Dictionary<string, string>>( connectionRequest.AssignedGroupMemberAttributeValues ); if ( savedValues != null ) { groupMember.LoadAttributes(); foreach ( var item in savedValues ) { groupMember.SetAttributeValue( item.Key, item.Value ); } } } } } } } if ( okToConnect ) { // ... but always record the connection activity and change the state to connected. var guid = Rock.SystemGuid.ConnectionActivityType.CONNECTED.AsGuid(); var connectedActivityId = connectionActivityTypeService.Queryable() .Where( t => t.Guid == guid ) .Select( t => t.Id ) .FirstOrDefault(); if ( connectedActivityId > 0 ) { var connectionRequestActivity = new ConnectionRequestActivity(); connectionRequestActivity.ConnectionRequestId = connectionRequest.Id; connectionRequestActivity.ConnectionOpportunityId = connectionRequest.ConnectionOpportunityId; connectionRequestActivity.ConnectionActivityTypeId = connectedActivityId; connectionRequestActivity.ConnectorPersonAliasId = CurrentPersonAliasId; connectionRequestActivityService.Add( connectionRequestActivity ); } connectionRequest.ConnectionState = ConnectionState.Connected; rockContext.SaveChanges(); if ( groupMember != null && !string.IsNullOrWhiteSpace( connectionRequest.AssignedGroupMemberAttributeValues ) ) { groupMember.SaveAttributeValues( rockContext ); } ShowDetail( connectionRequest.Id, connectionRequest.ConnectionOpportunityId ); } } } }
/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute( RockContext rockContext, WorkflowAction action, Object entity, out List<string> errorMessages ) { errorMessages = new List<string>(); // Get the person PersonAlias personAlias = null; Guid personAliasGuid = action.GetWorklowAttributeValue(GetAttributeValue( action, "PersonAttribute" ).AsGuid()).AsGuid(); personAlias = new PersonAliasService( rockContext ).Get( personAliasGuid ); if ( personAlias == null ) { errorMessages.Add( "Invalid Person Attribute or Value!" ); return false; } // Get the opportunity ConnectionOpportunity opportunity = null; Guid opportunityTypeGuid = action.GetWorklowAttributeValue( GetAttributeValue( action, "ConnectionOpportunityAttribute" ).AsGuid() ).AsGuid(); opportunity = new ConnectionOpportunityService( rockContext ).Get( opportunityTypeGuid ); if ( opportunity == null ) { errorMessages.Add( "Invalid Connection Opportunity Attribute or Value!" ); return false; } // Get connection status ConnectionStatus status = null; Guid? connectionStatusGuid = null; Guid? connectionStatusAttributeGuid = GetAttributeValue( action, "ConnectionStatusAttribute" ).AsGuidOrNull(); if ( connectionStatusAttributeGuid.HasValue ) { connectionStatusGuid = action.GetWorklowAttributeValue( connectionStatusAttributeGuid.Value ).AsGuidOrNull(); if ( connectionStatusGuid.HasValue ) { status = opportunity.ConnectionType.ConnectionStatuses .Where( s => s.Guid.Equals( connectionStatusGuid.Value ) ) .FirstOrDefault(); } } if ( status == null ) { connectionStatusGuid = GetAttributeValue( action, "ConnectionStatus" ).AsGuidOrNull(); if ( connectionStatusGuid.HasValue ) { status = opportunity.ConnectionType.ConnectionStatuses .Where( s => s.Guid.Equals( connectionStatusGuid.Value ) ) .FirstOrDefault(); } } if ( status == null ) { status = opportunity.ConnectionType.ConnectionStatuses .Where( s => s.IsDefault ) .FirstOrDefault(); } // Get Campus int? campusId = null; Guid? campusAttributeGuid = GetAttributeValue( action, "CampusAttribute" ).AsGuidOrNull(); if ( campusAttributeGuid.HasValue ) { Guid? campusGuid = action.GetWorklowAttributeValue( campusAttributeGuid.Value ).AsGuidOrNull(); if ( campusGuid.HasValue ) { var campus = CampusCache.Read( campusGuid.Value ); if ( campus != null ) { campusId = campus.Id; } } } // Get the Comment String comment = action.GetWorklowAttributeValue(GetAttributeValue(action, "ConnectionCommentAttribute").AsGuid()); var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = new ConnectionRequest(); connectionRequest.PersonAliasId = personAlias.Id; connectionRequest.ConnectionOpportunityId = opportunity.Id; connectionRequest.ConnectionState = ConnectionState.Active; connectionRequest.ConnectionStatusId = status.Id; connectionRequest.CampusId = campusId; connectionRequest.ConnectorPersonAliasId = opportunity.GetDefaultConnectorPersonAliasId( campusId ); connectionRequest.Comments = comment; connectionRequestService.Add( connectionRequest ); rockContext.SaveChanges(); // If request attribute was specified, requery the request and set the attribute's value Guid? connectionRequestAttributeGuid = GetAttributeValue( action, "ConnectionRequestAttribute" ).AsGuidOrNull(); if ( connectionRequestAttributeGuid.HasValue ) { connectionRequest = connectionRequestService.Get( connectionRequest.Id ); if ( connectionRequest != null ) { SetWorkflowAttributeValue( action, connectionRequestAttributeGuid.Value, connectionRequest.Guid.ToString() ); } } return true; }