/// <summary> /// Binds the Registrations (people who registered) using the RegistrationInstances. /// </summary> /// <param name="rockContext">The RockContext.</param> /// <param name="registrationInstanceId">The id of a RegistrationInstance.</param> /// <param name="setUserPreference">Set to true if you want to remember the item in the users preferences</param> private void BindRegistrationInstances(RockContext rockContext, int?registrationInstanceId) { RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService(rockContext); var registrationInstances = registrationInstanceService.Queryable().AsNoTracking().ToList(); ddlRegistrationInstances.DataSource = registrationInstances; RegistrationInstance emptyRegistrationInstance = new RegistrationInstance { Id = -1, Name = "" }; registrationInstances.Insert(0, emptyRegistrationInstance); ddlRegistrationInstances.DataBind(); // Select the given registrationInstanceId if it still exists in the list if (ddlRegistrationInstances.Items.FindByValue(registrationInstanceId.ToStringSafe()) != null) { ddlRegistrationInstances.SelectedValue = registrationInstanceId.ToStringSafe(); } if (registrationInstances.Count >= 1) { BindRegistrationsUsingRegistrationInstances(registrationInstanceId); } }
/// <summary> /// Binds the dropdown menus /// </summary> private void BindData() { using (var rockContext = new RockContext()) { RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService(rockContext); var registrationInstances = registrationInstanceService.Queryable().Where(ri => ri.IsActive == true).AsNoTracking().ToList(); ddlRegistrationInstances.DataSource = registrationInstances; RegistrationInstance emptyRegistrationInstance = new RegistrationInstance { Id = -1, Name = "" }; registrationInstances.Insert(0, emptyRegistrationInstance); ddlRegistrationInstances.DataBind(); var entityTypes = new EntityTypeService(new RockContext()).GetEntities() .Where(t => t.Guid.ToString() == Rock.SystemGuid.EntityType.GROUP.ToLower() || t.Guid.ToString() == "5cd9c0c8-c047-61a0-4e36-0fdb8496f066" || t.Guid.ToString() == Rock.SystemGuid.EntityType.DATAVIEW.ToLower()) .OrderBy(t => t.FriendlyName) .ToList(); entityTypes.Insert(0, new EntityType() { Id = -1, FriendlyName = "Select One" }); ddlEntityType.DataSource = entityTypes; ddlEntityType.DataBind(); } }
/// <summary> /// Handles the Click event of the btnCancel 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 btnCancel_Click(object sender, EventArgs e) { if (hfRegistrationInstanceId.Value.Equals("0")) { var qryParams = new Dictionary <string, string>(); int?parentTemplateId = PageParameter(PageParameterKey.RegistrationTemplateId).AsIntegerOrNull(); if (parentTemplateId.HasValue) { qryParams[PageParameterKey.RegistrationTemplateId] = parentTemplateId.ToString(); } // Cancelling on Add. Return to Grid NavigateToParentPage(qryParams); } else { // Cancelling on Edit. Return to Details using (var rockContext = new RockContext()) { RegistrationInstanceService service = new RegistrationInstanceService(rockContext); RegistrationInstance item = service.Get(int.Parse(hfRegistrationInstanceId.Value)); ShowReadonlyDetails(item); } } }
/// <summary> /// Handles the Click event of the DeleteInstance control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="Rock.Web.UI.Controls.RowEventArgs" /> instance containing the event data.</param> protected void DeleteInstance_Click(object sender, Rock.Web.UI.Controls.RowEventArgs e) { RockContext rockContext = new RockContext(); RegistrationInstanceService instanceService = new RegistrationInstanceService(rockContext); RegistrationInstance instance = instanceService.Get(e.RowKeyId); if (instance != null) { string errorMessage; if (!instanceService.CanDelete(instance, out errorMessage)) { mdGridWarning.Show(errorMessage, ModalAlertType.Information); return; } rockContext.WrapTransaction(() => { new RegistrationService(rockContext).DeleteRange(instance.Registrations); instanceService.Delete(instance); rockContext.SaveChanges(); }); } BindInstancesGrid(); }
/// <summary> /// Updates the instance. /// </summary> /// <param name="instance">The instance.</param> public void GetValue(RegistrationInstance instance) { EnsureChildControls(); if (instance != null) { instance.Name = _tbName.Text; if (ShowActive) { instance.IsActive = _cbIsActive.Checked; } instance.Details = _ceDetails.Text; instance.StartDateTime = _dtpStart.SelectedDateTime; instance.EndDateTime = _dtpEnd.SelectedDateTime; instance.MaxAttendees = _nbMaxAttendees.Text.AsInteger(); instance.RegistrationWorkflowTypeId = _wtpRegistrationWorkflow.SelectedValueAsInt(); instance.ContactPersonAliasId = _ppContact.PersonAliasId; instance.ContactPhone = _pnContactPhone.Text; instance.ContactEmail = _ebContactEmail.Text; instance.Cost = _cbCost.Text.AsDecimalOrNull(); instance.MinimumInitialPayment = _cbMinimumInitialPayment.Text.AsDecimalOrNull(); instance.DefaultPayment = _cbDefaultPaymentAmount.Text.AsDecimalOrNull(); int accountId = _apAccount.SelectedValue.AsInteger(); instance.AccountId = accountId > 0 ? accountId : (int?)null; instance.SendReminderDateTime = _dtpSendReminder.SelectedDateTime; instance.ReminderSent = _cbReminderSent.Checked; instance.RegistrationInstructions = _htmlRegistrationInstructions.Text; instance.AdditionalReminderDetails = _htmlAdditionalReminderDetails.Text; instance.AdditionalConfirmationDetails = _htmlAdditionalConfirmationDetails.Text; } }
/// <summary> /// Handles the Click event of the btnSendReminders 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 btnSendReminders_Click(object sender, EventArgs e) { var registrationsSelected = new List <int>(); int sendCount = 0; gRegistrations.SelectedKeys.ToList().ForEach(r => registrationsSelected.Add(r.ToString().AsInteger())); if (registrationsSelected.Any()) { if (_registrationInstance == null) { int?registrationInstanceId = PageParameter("RegistrationInstanceId").AsIntegerOrNull(); using (RockContext rockContext = new RockContext()) { RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService(rockContext); _registrationInstance = registrationInstanceService.Queryable("RegistrationTemplate").AsNoTracking() .Where(r => r.Id == registrationInstanceId).FirstOrDefault(); } foreach (var registrationId in registrationsSelected) { // use a new rockContext for each registration so that ChangeTracker doesn't get bogged down using (RockContext rockContext = new RockContext()) { var registrationService = new RegistrationService(rockContext); var registration = registrationService.Get(registrationId); if (registration != null && !string.IsNullOrWhiteSpace(registration.ConfirmationEmail)) { Dictionary <string, object> mergeObjects = new Dictionary <string, object>(); mergeObjects.Add("Registration", registration); mergeObjects.Add("RegistrationInstance", _registrationInstance); var emailMessage = new RockEmailMessage(GetAttributeValue("ConfirmAccountTemplate").AsGuid()); emailMessage.AdditionalMergeFields = mergeObjects; emailMessage.FromEmail = txtFromEmail.Text; emailMessage.FromName = txtFromName.Text; emailMessage.Subject = txtFromSubject.Text; emailMessage.AddRecipient(registration.GetConfirmationRecipient(mergeObjects)); emailMessage.Message = ceEmailMessage.Text; emailMessage.AppRoot = ResolveRockUrl("~/"); emailMessage.ThemeRoot = ResolveRockUrl("~~/"); emailMessage.CreateCommunicationRecord = true; emailMessage.Send(); registration.LastPaymentReminderDateTime = RockDateTime.Now; rockContext.SaveChanges(); sendCount++; } } } } } pnlSend.Visible = false; pnlComplete.Visible = true; nbResult.Text = string.Format("Payment reminders have been sent to {0}.", "individuals".ToQuantity(sendCount)); }
/// <summary> /// Shows the readonly details. /// </summary> /// <param name="registrationInstance">The registration template.</param> /// <param name="setTab">if set to <c>true</c> [set tab].</param> private void ShowReadonlyDetails(RegistrationInstance registrationInstance, bool setTab = true) { SetEditMode(false); pdAuditDetails.SetEntity(registrationInstance, ResolveRockUrl("~")); hfRegistrationInstanceId.SetValue(registrationInstance.Id); lReadOnlyTitle.Text = registrationInstance.Name.FormatAsHtmlTitle(); hlInactive.Visible = registrationInstance.IsActive == false; lWizardInstanceName.Text = registrationInstance.Name; lName.Text = registrationInstance.Name; if (registrationInstance.RegistrationTemplate.SetCostOnInstance ?? false) { lCost.Text = registrationInstance.Cost.FormatAsCurrency(); lMinimumInitialPayment.Visible = registrationInstance.MinimumInitialPayment.HasValue; lMinimumInitialPayment.Text = registrationInstance.MinimumInitialPayment.HasValue ? registrationInstance.MinimumInitialPayment.Value.FormatAsCurrency() : string.Empty; lDefaultPaymentAmount.Visible = registrationInstance.DefaultPayment.HasValue; lDefaultPaymentAmount.Text = registrationInstance.DefaultPayment.HasValue ? registrationInstance.DefaultPayment.Value.FormatAsCurrency() : string.Empty; } else { lCost.Visible = false; lMinimumInitialPayment.Visible = false; lDefaultPaymentAmount.Visible = false; } lAccount.Visible = registrationInstance.Account != null; lAccount.Text = registrationInstance.Account != null ? registrationInstance.Account.Name : string.Empty; lMaxAttendees.Visible = registrationInstance.MaxAttendees >= 0; lMaxAttendees.Text = registrationInstance.MaxAttendees >= 0 ? registrationInstance.MaxAttendees.Value.ToString("N0") : string.Empty; lWorkflowType.Text = registrationInstance.RegistrationWorkflowType != null ? registrationInstance.RegistrationWorkflowType.Name : string.Empty; lWorkflowType.Visible = !string.IsNullOrWhiteSpace(lWorkflowType.Text); lStartDate.Text = registrationInstance.StartDateTime.HasValue ? registrationInstance.StartDateTime.Value.ToShortDateString() : string.Empty; lStartDate.Visible = registrationInstance.StartDateTime.HasValue; lEndDate.Text = registrationInstance.EndDateTime.HasValue ? registrationInstance.EndDateTime.Value.ToShortDateString() : string.Empty; lEndDate.Visible = registrationInstance.EndDateTime.HasValue; lDetails.Visible = !string.IsNullOrWhiteSpace(registrationInstance.Details); lDetails.Text = registrationInstance.Details; }
/// <summary> /// Loads the registration. /// </summary> private void LoadData() { int?registrationInstanceId = PageParameter("RegistrationInstanceId").AsIntegerOrNull(); if (registrationInstanceId.HasValue) { using (RockContext rockContext = new RockContext()) { RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService(rockContext); // NOTE: Do not use AsNoTracking because lava might need to lazy load some stuff _registrationInstance = registrationInstanceService.Queryable("RegistrationTemplate") .Where(r => r.Id == registrationInstanceId).FirstOrDefault(); var registrationSample = _registrationInstance.Registrations.Where(r => r.BalanceDue > 0).FirstOrDefault(); if (registrationSample != null) { Dictionary <string, object> mergeObjects = new Dictionary <string, object>(); mergeObjects.Add("Registration", registrationSample); mergeObjects.Add("RegistrationInstance", _registrationInstance); ceEmailMessage.Text = _registrationInstance.RegistrationTemplate.PaymentReminderEmailTemplate; ifEmailPreview.Attributes["srcdoc"] = _registrationInstance.RegistrationTemplate.PaymentReminderEmailTemplate.ResolveMergeFields(mergeObjects); // needed to work in IE ifEmailPreview.Src = "javascript: window.frameElement.getAttribute('srcdoc');"; txtFromEmail.Text = _registrationInstance.RegistrationTemplate.PaymentReminderFromEmail.ResolveMergeFields(mergeObjects); txtFromName.Text = _registrationInstance.RegistrationTemplate.PaymentReminderFromName.ResolveMergeFields(mergeObjects); txtFromSubject.Text = _registrationInstance.RegistrationTemplate.PaymentReminderSubject.ResolveMergeFields(mergeObjects); if (_registrationInstance.RegistrationTemplate.PaymentReminderTimeSpan.HasValue) { lBalanceInstructions.Text = string.Format("<p>Below is a list of registrations with outstanding balances. Individuals who have not been reminded of their balance in {0} days have been pre-selected. Those who have been recently added or notified of their balance are greyed out. They can be still be included by either selecting them or selecting all transactions.</p>", _registrationInstance.RegistrationTemplate.PaymentReminderTimeSpan.Value); } } else { pnlPreview.Visible = false; nbMessages.Text = "<strong>Good News!</strong> No registrations have an outstanding balance at this time."; } LoadOutstandingBalances(); } } }
/// <summary> /// Sets the following on postback. /// </summary> private void SetFollowingOnPostback() { int?registrationInstanceId = PageParameter(PageParameterKey.RegistrationInstanceId).AsIntegerOrNull(); if (registrationInstanceId.HasValue) { using (var rockContext = new RockContext()) { RegistrationInstance registrationInstance = GetRegistrationInstance(registrationInstanceId.Value, rockContext); if (registrationInstance != null) { FollowingsHelper.SetFollowing(registrationInstance, pnlFollowing, this.CurrentPerson); } } } }
/// <summary> /// Shows the edit details. /// </summary> /// <param name="RegistrationTemplate">The registration template.</param> /// <param name="rockContext">The rock context.</param> private void ShowEditDetails(RegistrationInstance instance, RockContext rockContext) { if (instance.Id == 0) { lReadOnlyTitle.Text = ActionTitle.Add(RegistrationInstance.FriendlyTypeName).FormatAsHtmlTitle(); hlInactive.Visible = false; lWizardInstanceName.Text = "New Instance"; } else { lWizardInstanceName.Text = instance.Name; } pdAuditDetails.Visible = false; SetEditMode(true); rieDetails.SetValue(instance); }
/// <summary> /// Handles the CheckedChanged event of the tglEmailBodyView 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 tglEmailBodyView_CheckedChanged(object sender, EventArgs e) { if (tglEmailBodyView.Checked) { ceEmailMessage.Visible = false; ifEmailPreview.Visible = true; // reload preview int?registrationInstanceId = PageParameter("RegistrationInstanceId").AsIntegerOrNull(); if (registrationInstanceId.HasValue) { using (RockContext rockContext = new RockContext()) { RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService(rockContext); // NOTE: Do not use AsNoTracking because lava might need to lazy load some stuff _registrationInstance = registrationInstanceService.Queryable("RegistrationTemplate") .Where(r => r.Id == registrationInstanceId).FirstOrDefault(); var registrationSample = _registrationInstance.Registrations.Where(r => r.BalanceDue > 0).FirstOrDefault(); if (registrationSample != null) { Dictionary <string, object> mergeObjects = new Dictionary <string, object>(); mergeObjects.Add("Registration", registrationSample); mergeObjects.Add("RegistrationInstance", _registrationInstance); ifEmailPreview.Attributes["srcdoc"] = ceEmailMessage.Text.ResolveMergeFields(mergeObjects); // needed to work in IE ifEmailPreview.Src = "javascript: window.frameElement.getAttribute('srcdoc');"; } } } } else { ceEmailMessage.Visible = true; ifEmailPreview.Visible = false; } }
/// <summary> /// Handles the CheckedChanged event of the tglEmailBodyView 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 tglEmailBodyView_CheckedChanged(object sender, EventArgs e) { if (tglEmailBodyView.Checked) { ceEmailMessage.Visible = false; ifEmailPreview.Visible = true; // reload preview int?registrationInstanceId = PageParameter("RegistrationInstanceId").AsIntegerOrNull(); if (registrationInstanceId.HasValue) { using (RockContext rockContext = new RockContext()) { RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService(rockContext); _registrationInstance = registrationInstanceService.Queryable("RegistrationTemplate").AsNoTracking() .Where(r => r.Id == registrationInstanceId).FirstOrDefault(); var registrationSample = _registrationInstance.Registrations.Where(r => r.BalanceDue > 0).FirstOrDefault(); if (registrationSample != null) { Dictionary <string, object> mergeObjects = new Dictionary <string, object>(); mergeObjects.Add("Registration", registrationSample); mergeObjects.Add("RegistrationInstance", _registrationInstance); ifEmailPreview.Attributes["srcdoc"] = ceEmailMessage.Text.ResolveMergeFields(mergeObjects); } } } } else { ceEmailMessage.Visible = true; ifEmailPreview.Visible = false; } }
/// <summary> /// Applies a discount code to a registration entity /// </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>(); if (entity is Dictionary <string, object> entityDictionary) { RegistrationInstance registrationInstanceState = ( RegistrationInstance )entityDictionary["RegistrationInstance"]; RegistrationInfo registrationState = ( RegistrationInfo )entityDictionary["RegistrationInfo"]; if (registrationState != null) { string fieldKey = GetAttributeValue(action, "FieldKey", true).ResolveMergeFields(GetMergeFields(action)); int registrantIndex = GetAttributeValue(action, "RegistrantIndex", true).ResolveMergeFields(GetMergeFields(action)).AsInteger(); var formField = registrationInstanceState.RegistrationTemplate.Forms.SelectMany(f => f.Fields.Where(ff => ff.Attribute != null && ff.Attribute.Key == fieldKey)).FirstOrDefault(); if (formField != null) { var fieldValue = registrationState.Registrants[registrantIndex].FieldValues.Where(fv => fv.Key == formField.Id).Select(fv => fv.Value.FieldValue).FirstOrDefault(); if (fieldValue != null) { // Now store the attribute var targetAttribute = AttributeCache.Get(GetActionAttributeValue(action, "WorkflowAttribute").AsGuid(), rockContext); if (targetAttribute.EntityTypeId == new Rock.Model.Workflow().TypeId) { action.Activity.Workflow.SetAttributeValue(targetAttribute.Key, fieldValue.ToString()); } else if (targetAttribute.EntityTypeId == new WorkflowActivity().TypeId) { action.Activity.SetAttributeValue(targetAttribute.Key, fieldValue.ToString()); } } } } } 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 ) { EventItemOccurrence eventItemOccurrence = null; using ( var rockContext = new RockContext() ) { bool newItem = false; var eventItemOccurrenceService = new EventItemOccurrenceService( rockContext ); var eventItemOccurrenceGroupMapService = new EventItemOccurrenceGroupMapService( rockContext ); var registrationInstanceService = new RegistrationInstanceService( rockContext ); var scheduleService = new ScheduleService( rockContext ); int eventItemOccurrenceId = hfEventItemOccurrenceId.ValueAsInt(); if ( eventItemOccurrenceId != 0 ) { eventItemOccurrence = eventItemOccurrenceService .Queryable( "Linkages" ) .Where( i => i.Id == eventItemOccurrenceId ) .FirstOrDefault(); } if ( eventItemOccurrence == null ) { newItem = true; eventItemOccurrence = new EventItemOccurrence{ EventItemId = PageParameter("EventItemId").AsInteger() }; eventItemOccurrenceService.Add( eventItemOccurrence ); } int? newCampusId = ddlCampus.SelectedValueAsInt(); if ( eventItemOccurrence.CampusId != newCampusId ) { eventItemOccurrence.CampusId = newCampusId; if ( newCampusId.HasValue ) { var campus = new CampusService( rockContext ).Get( newCampusId.Value ); eventItemOccurrence.Campus = campus; } else { eventItemOccurrence.Campus = null; } } eventItemOccurrence.Location = tbLocation.Text; string iCalendarContent = sbSchedule.iCalendarContent; var calEvent = ScheduleICalHelper.GetCalenderEvent( iCalendarContent ); if ( calEvent != null && calEvent.DTStart != null ) { if ( eventItemOccurrence.Schedule == null ) { eventItemOccurrence.Schedule = new Schedule(); } eventItemOccurrence.Schedule.iCalendarContent = iCalendarContent; } else { if ( eventItemOccurrence.ScheduleId.HasValue ) { var oldSchedule = scheduleService.Get( eventItemOccurrence.ScheduleId.Value ); if ( oldSchedule != null ) { scheduleService.Delete( oldSchedule ); } } } if ( !eventItemOccurrence.ContactPersonAliasId.Equals( ppContact.PersonAliasId )) { PersonAlias personAlias = null; eventItemOccurrence.ContactPersonAliasId = ppContact.PersonAliasId; if ( eventItemOccurrence.ContactPersonAliasId.HasValue ) { personAlias = new PersonAliasService( rockContext ).Get( eventItemOccurrence.ContactPersonAliasId.Value ); } if ( personAlias != null ) { eventItemOccurrence.ContactPersonAlias = personAlias; } } eventItemOccurrence.ContactPhone = PhoneNumber.FormattedNumber( PhoneNumber.DefaultCountryCode(), pnPhone.Number ); eventItemOccurrence.ContactEmail = tbEmail.Text; eventItemOccurrence.Note = htmlOccurrenceNote.Text; // Remove any linkage no longer in UI Guid uiLinkageGuid = LinkageState != null ? LinkageState.Guid : Guid.Empty; foreach( var linkage in eventItemOccurrence.Linkages.Where( l => !l.Guid.Equals(uiLinkageGuid)).ToList()) { eventItemOccurrence.Linkages.Remove( linkage ); eventItemOccurrenceGroupMapService.Delete( linkage ); } // Add/Update linkage in UI if ( !uiLinkageGuid.Equals( Guid.Empty )) { var linkage = eventItemOccurrence.Linkages.Where( l => l.Guid.Equals( uiLinkageGuid)).FirstOrDefault(); if ( linkage == null ) { linkage = new EventItemOccurrenceGroupMap(); eventItemOccurrence.Linkages.Add( linkage ); } linkage.CopyPropertiesFrom( LinkageState ); // update registration instance if ( LinkageState.RegistrationInstance != null ) { if ( LinkageState.RegistrationInstance.Id != 0 ) { linkage.RegistrationInstance = registrationInstanceService.Get( LinkageState.RegistrationInstance.Id ); } if ( linkage.RegistrationInstance == null ) { var registrationInstance = new RegistrationInstance(); registrationInstanceService.Add( registrationInstance ); linkage.RegistrationInstance = registrationInstance; } linkage.RegistrationInstance.CopyPropertiesFrom( LinkageState.RegistrationInstance ); } } if ( !Page.IsValid ) { return; } if ( !eventItemOccurrence.IsValid ) { // Controls will render the error messages return; } rockContext.SaveChanges(); var qryParams = new Dictionary<string, string>(); qryParams.Add( "EventCalendarId", PageParameter( "EventCalendarId" ) ); qryParams.Add( "EventItemId", PageParameter( "EventItemId" ) ); if ( newItem ) { NavigateToParentPage( qryParams ); } else { qryParams.Add( "EventItemOccurrenceId", eventItemOccurrence.Id.ToString() ); NavigateToPage( RockPage.Guid, qryParams ); } } }
/// <summary> /// Loads the outstanding balances. /// </summary> private void LoadOutstandingBalances() { using (RockContext rockContext = new RockContext()) { if (_registrationInstance == null) { int?registrationInstanceId = PageParameter("RegistrationInstanceId").AsIntegerOrNull(); RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService(rockContext); _registrationInstance = registrationInstanceService.Queryable("RegistrationTemplate").AsNoTracking() .Where(r => r.Id == registrationInstanceId).FirstOrDefault(); } var outstandingBalances = _registrationInstance.Registrations.Where(r => r.BalanceDue > 0); var sortProperty = gRegistrations.SortProperty; if (sortProperty != null) { switch (sortProperty.Property) { case "BalanceDue": { if (sortProperty.Direction == SortDirection.Ascending) { outstandingBalances = outstandingBalances.OrderBy(b => b.BalanceDue); } else { outstandingBalances = outstandingBalances.OrderByDescending(b => b.BalanceDue); } break; } case "LastPaymentReminderDateTime": { if (sortProperty.Direction == SortDirection.Ascending) { outstandingBalances = outstandingBalances.OrderBy(b => b.LastPaymentReminderDateTime); } else { outstandingBalances = outstandingBalances.OrderByDescending(b => b.LastPaymentReminderDateTime); } break; } case "CreatedDateTime": { if (sortProperty.Direction == SortDirection.Ascending) { outstandingBalances = outstandingBalances.OrderBy(b => b.CreatedDateTime); } else { outstandingBalances = outstandingBalances.OrderByDescending(b => b.CreatedDateTime); } break; } case "Name": { if (sortProperty.Direction == SortDirection.Ascending) { outstandingBalances = outstandingBalances.OrderBy(b => b.LastName).ThenBy(b => b.FirstName); } else { outstandingBalances = outstandingBalances.OrderByDescending(b => b.LastName).ThenBy(b => b.FirstName); } break; } } } gRegistrations.DataSource = outstandingBalances; gRegistrations.DataBind(); } }
private void BindWaitListFilter( RegistrationInstance instance ) { drpWaitListDateRange.DelimitedValues = fWaitList.GetUserPreference( "WL-Date Range" ); tbWaitListFirstName.Text = fWaitList.GetUserPreference( "WL-First Name" ); tbWaitListLastName.Text = fWaitList.GetUserPreference( "WL-Last Name" ); }
/// <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) { RegistrationInstance instance = null; bool newInstance = false; using (var rockContext = new RockContext()) { var service = new RegistrationInstanceService(rockContext); int?registrationInstanceId = hfRegistrationInstanceId.Value.AsIntegerOrNull(); if (registrationInstanceId.HasValue) { instance = service.Get(registrationInstanceId.Value); } if (instance == null) { instance = new RegistrationInstance(); instance.RegistrationTemplateId = PageParameter(PageParameterKey.RegistrationTemplateId).AsInteger(); service.Add(instance); newInstance = true; } rieDetails.GetValue(instance); if (!Page.IsValid) { return; } rockContext.SaveChanges(); } if (newInstance) { var qryParams = new Dictionary <string, string>(); qryParams.Add(PageParameterKey.RegistrationTemplateId, PageParameter(PageParameterKey.RegistrationTemplateId)); qryParams.Add(PageParameterKey.RegistrationInstanceId, instance.Id.ToString()); NavigateToCurrentPage(qryParams); } else { // Reload instance and show readonly view using (var rockContext = new RockContext()) { instance = new RegistrationInstanceService(rockContext).Get(instance.Id); ShowReadonlyDetails(instance); // show send payment reminder link if (!string.IsNullOrWhiteSpace(GetAttributeValue(AttributeKey.PaymentReminderPage)) && ((instance.RegistrationTemplate.SetCostOnInstance.HasValue && instance.RegistrationTemplate.SetCostOnInstance == true && instance.Cost.HasValue && instance.Cost.Value > 0) || instance.RegistrationTemplate.Cost > 0 || instance.RegistrationTemplate.Fees.Count > 0)) { btnSendPaymentReminder.Visible = true; } else { btnSendPaymentReminder.Visible = false; } } } }
/// <summary> /// Applies a discount code to a registration entity /// </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>(); if (entity is Dictionary <string, object> entityDictionary) { RegistrationInstance registrationInstanceState = ( RegistrationInstance)entityDictionary["RegistrationInstance"]; RegistrationInfo registrationState = ( RegistrationInfo )entityDictionary["RegistrationInfo"]; if (registrationState != null) { registrationState.Registrants.ForEach(r => r.DiscountApplies = true); RegistrationTemplateDiscount discount = null; bool validDiscount = true; string discountCode = GetAttributeValue(action, "DiscountCode", true).ResolveMergeFields(GetMergeFields(action)); if (!string.IsNullOrWhiteSpace(discountCode)) { // Reload the discounts to make sure we have all the latest ones (workflow can create new codes) RegistrationTemplateService registrationTemplateService = new RegistrationTemplateService(rockContext); registrationInstanceState.RegistrationTemplate.Discounts = registrationTemplateService.Get(registrationInstanceState.RegistrationTemplate.Guid).Discounts; discount = registrationInstanceState.RegistrationTemplate.Discounts .Where(d => d.Code.Equals(discountCode, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); if (discount == null) { validDiscount = false; errorMessages.Add(string.Format("'{0}' is not a valid discount code.", discountCode)); } if (validDiscount && discount.MinRegistrants.HasValue && registrationState.RegistrantCount < discount.MinRegistrants.Value) { validDiscount = false; errorMessages.Add(string.Format("The '{0}' discount code requires at least {1} registrants.", discountCode, discount.MinRegistrants.Value)); } if (validDiscount && discount.StartDate.HasValue && RockDateTime.Today < discount.StartDate.Value) { validDiscount = false; errorMessages.Add(string.Format("The '{0}' discount code is not available yet.", discountCode)); } if (validDiscount && discount.EndDate.HasValue && RockDateTime.Today > discount.EndDate.Value) { validDiscount = false; errorMessages.Add(string.Format("The '{0}' discount code has expired.", discountCode)); } if (validDiscount && discount.MaxUsage.HasValue && registrationInstanceState != null) { var instances = new RegistrationService(rockContext) .Queryable().AsNoTracking() .Where(r => r.RegistrationInstanceId == registrationInstanceState.Id && (!registrationState.RegistrationId.HasValue || r.Id != registrationState.RegistrationId.Value) && r.DiscountCode == discountCode) .Count(); if (instances >= discount.MaxUsage.Value) { validDiscount = false; errorMessages.Add(string.Format("The '{0}' discount code is no longer available.", discountCode)); } } if (validDiscount && discount.MaxRegistrants.HasValue) { for (int i = 0; i < registrationState.Registrants.Count; i++) { registrationState.Registrants[i].DiscountApplies = i < discount.MaxRegistrants.Value; } } } else { validDiscount = false; } registrationState.DiscountCode = validDiscount ? discountCode : string.Empty; registrationState.DiscountPercentage = validDiscount ? discount.DiscountPercentage : 0.0m; registrationState.DiscountAmount = validDiscount ? discount.DiscountAmount : 0.0m; } } return(true); }
/// <summary> /// Shows the detail. /// </summary> private void ShowDetail() { int?registrationInstanceId = PageParameter(PageParameterKey.RegistrationInstanceId).AsIntegerOrNull(); int?parentTemplateId = PageParameter(PageParameterKey.RegistrationTemplateId).AsIntegerOrNull(); if (!registrationInstanceId.HasValue) { pnlDetails.Visible = false; return; } using (var rockContext = new RockContext()) { RegistrationInstance registrationInstance = null; if (registrationInstanceId.HasValue) { registrationInstance = GetRegistrationInstance(registrationInstanceId.Value, rockContext); } if (registrationInstance == null) { registrationInstance = new RegistrationInstance(); registrationInstance.Id = 0; registrationInstance.IsActive = true; registrationInstance.RegistrationTemplateId = parentTemplateId ?? 0; Guid?accountGuid = GetAttributeValue(AttributeKey.DefaultAccount).AsGuidOrNull(); if (accountGuid.HasValue) { var account = new FinancialAccountService(rockContext).Get(accountGuid.Value); registrationInstance.AccountId = account != null ? account.Id : 0; } } if (registrationInstance.RegistrationTemplate == null && registrationInstance.RegistrationTemplateId > 0) { registrationInstance.RegistrationTemplate = new RegistrationTemplateService(rockContext) .Get(registrationInstance.RegistrationTemplateId); } hlType.Visible = registrationInstance.RegistrationTemplate != null; hlType.Text = registrationInstance.RegistrationTemplate != null ? registrationInstance.RegistrationTemplate.Name : string.Empty; lWizardTemplateName.Text = hlType.Text; pnlDetails.Visible = true; hfRegistrationInstanceId.Value = registrationInstance.Id.ToString(); hfRegistrationTemplateId.Value = registrationInstance.RegistrationTemplateId.ToString(); FollowingsHelper.SetFollowing(registrationInstance, pnlFollowing, this.CurrentPerson); // render UI based on Authorized bool readOnly = false; bool canEdit = UserCanEdit || registrationInstance.IsAuthorized(Authorization.EDIT, CurrentPerson) || registrationInstance.IsAuthorized(Authorization.ADMINISTRATE, CurrentPerson); nbEditModeMessage.Text = string.Empty; // User must have 'Edit' rights to block, or 'Edit' or 'Administrate' rights to instance if (!canEdit) { readOnly = true; nbEditModeMessage.Heading = "Information"; nbEditModeMessage.Text = EditModeMessage.NotAuthorizedToEdit(RegistrationInstance.FriendlyTypeName); } if (readOnly) { btnEdit.Visible = false; btnDelete.Visible = false; ShowReadonlyDetails(registrationInstance, false); } else { btnEdit.Visible = true; btnDelete.Visible = true; if (registrationInstance.Id > 0) { ShowReadonlyDetails(registrationInstance, false); } else { ShowEditDetails(registrationInstance, rockContext); } } // show send payment reminder link if (!string.IsNullOrWhiteSpace(GetAttributeValue(AttributeKey.PaymentReminderPage)) && ((registrationInstance.RegistrationTemplate.SetCostOnInstance.HasValue && registrationInstance.RegistrationTemplate.SetCostOnInstance == true && registrationInstance.Cost.HasValue && registrationInstance.Cost.Value > 0) || registrationInstance.RegistrationTemplate.Cost > 0 || registrationInstance.RegistrationTemplate.Fees.Count > 0)) { btnSendPaymentReminder.Visible = true; } else { btnSendPaymentReminder.Visible = false; } } }
/// <summary> /// Load the SignNow control. /// </summary> /// <param name="currentRegistrantIndex">The current registrant index</param> /// <param name="registrationState">The registration state from RegistrationEntry</param> /// <param name="registrationInstanceState">The registration instance</param> /// <param name="digitalSignatureComponent">The digital signature component</param> /// <returns></returns> public bool Load(int currentRegistrantIndex, RegistrationInfo registrationState, RegistrationInstance registrationInstanceState) { CurrentRegistrantIndex = currentRegistrantIndex; RegistrationState = registrationState; RegistrationInstanceState = registrationInstanceState; var provider = DigitalSignatureContainer.GetComponent(RegistrationInstanceState.RegistrationTemplate.RequiredSignatureDocumentTemplate.ProviderEntityType.Name); if (provider != null && provider.IsActive) { DigitalSignatureComponent = provider; } var registrant = RegistrationState.Registrants[CurrentRegistrantIndex]; string firstName = RegistrationInstanceState.RegistrationTemplate.RegistrantTerm; if (RegistrationState != null && RegistrationState.RegistrantCount > CurrentRegistrantIndex) { firstName = registrant.GetFirstName(RegistrationInstanceState.RegistrationTemplate); string lastName = registrant.GetLastName(RegistrationInstanceState.RegistrationTemplate); string email = registrant.GetEmail(RegistrationInstanceState.RegistrationTemplate); object dateOfBirthObj = registrant.GetPersonFieldValue(RegistrationInstanceState.RegistrationTemplate, RegistrationPersonFieldType.Birthdate); DateTime?dateOfBirth = null; if (dateOfBirthObj != null && dateOfBirthObj is DateTime? ) { dateOfBirth = dateOfBirthObj as DateTime?; } // If we have a single person, then we check to see if we already have the document var rockContext = new Rock.Data.RockContext(); PersonService personService = new PersonService(rockContext); var possiblePersons = personService.GetByMatch(firstName, lastName, dateOfBirth, email: email); if (possiblePersons.Count() == 1) { var person = possiblePersons.First(); var personAliasIds = person.Aliases.Select(pa => pa.Id).ToList(); var signatureDocumentService = new SignatureDocumentService(rockContext); var validSignatureDocuments = signatureDocumentService.Queryable().Where(sd => personAliasIds.Contains(sd.AppliesToPersonAliasId.Value) && sd.SignatureDocumentTemplateId == RegistrationInstanceState.RegistrationTemplate.RequiredSignatureDocumentTemplate.Id && sd.Status == SignatureDocumentStatus.Signed ).OrderBy(sd => sd.CreatedDateTime); if (validSignatureDocuments.Any()) { registrant.SignatureDocumentId = validSignatureDocuments.First().Id; registrant.SignatureDocumentKey = validSignatureDocuments.First().DocumentKey; registrant.SignatureDocumentLastSent = validSignatureDocuments.First().LastInviteDate; return(true); } } } nbDigitalSignature.Heading = "Signature Required"; nbDigitalSignature.Text = string.Format( "This {0} requires that you sign a {1} for each registrant, please click the button below and then follow the prompts to digitally sign this document for {2}. This will open the signing request within our digital signature provider's website. When you have successfully signed this document, you will be returned to this page which will automatically proceed to the next step of your registration.", RegistrationInstanceState.RegistrationTemplate.RegistrationTerm, RegistrationInstanceState.RegistrationTemplate.RequiredSignatureDocumentTemplate.Name, firstName); var errors = new List <string>(); string inviteLink = DigitalSignatureComponent.GetInviteLink(RegistrationInstanceState.RegistrationTemplate.RequiredSignatureDocumentTemplate.ProviderTemplateKey, out errors); if (!string.IsNullOrWhiteSpace(inviteLink)) { var key = Guid.NewGuid(); string returnUrl = GlobalAttributesCache.Get().GetValue("PublicApplicationRoot").EnsureTrailingForwardslash() + ResolveUrl(Request.RawUrl).TrimStart('/'); // We need to make sure if someone click's back that we don't end up with extra parameters var uri = new Uri(returnUrl); var qs = HttpUtility.ParseQueryString(uri.Query); qs.Set("registration_key", key.ToString()); qs.Remove("document_id"); // Put the URL back together again var uriBuilder = new UriBuilder(uri); uriBuilder.Query = qs.ToString(); // Snap off a copy of the viewstate and set the button URL hfRegistrantKey.Value = key.ToString(); hfRequiredDocumentLinkUrl.Value = string.Format("{0}?redirect_uri={1}", inviteLink, uriBuilder.ToString().UrlEncode()); btnRequiredDocument.Visible = true; } else { nbDigitalSignature.NotificationBoxType = Rock.Web.UI.Controls.NotificationBoxType.Danger; nbDigitalSignature.Heading = "Digital Signature Error"; nbDigitalSignature.Text = string.Format("An Error Occurred Trying to Get Document Link... <ul><li>{0}</li></ul>", errors.AsDelimited("</li><li>")); } return(false); }
/// <summary> /// Handles the CheckedChanged event of the tglEmailBodyView 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 tglEmailBodyView_CheckedChanged( object sender, EventArgs e ) { if ( tglEmailBodyView.Checked ) { ceEmailMessage.Visible = false; ifEmailPreview.Visible = true; // reload preview int? registrationInstanceId = PageParameter( "RegistrationInstanceId" ).AsIntegerOrNull(); if ( registrationInstanceId.HasValue ) { using ( RockContext rockContext = new RockContext() ) { RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService( rockContext ); _registrationInstance = registrationInstanceService.Queryable( "RegistrationTemplate" ).AsNoTracking() .Where( r => r.Id == registrationInstanceId ).FirstOrDefault(); var registrationSample = _registrationInstance.Registrations.Where( r => r.BalanceDue > 0 ).FirstOrDefault(); if ( registrationSample != null ) { Dictionary<string, object> mergeObjects = new Dictionary<string, object>(); mergeObjects.Add( "Registration", registrationSample ); mergeObjects.Add( "RegistrationInstance", _registrationInstance ); ifEmailPreview.Attributes["srcdoc"] = ceEmailMessage.Text.ResolveMergeFields( mergeObjects ); } } } } else { ceEmailMessage.Visible = true; ifEmailPreview.Visible = false; } }
/// <summary> /// Loads the outstanding balances. /// </summary> private void LoadOutstandingBalances() { using ( RockContext rockContext = new RockContext() ) { if ( _registrationInstance == null ) { int? registrationInstanceId = PageParameter( "RegistrationInstanceId" ).AsIntegerOrNull(); RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService( rockContext ); _registrationInstance = registrationInstanceService.Queryable( "RegistrationTemplate" ).AsNoTracking() .Where( r => r.Id == registrationInstanceId ).FirstOrDefault(); } var outstandingBalances = _registrationInstance.Registrations.Where( r => r.BalanceDue > 0 ); var sortProperty = gRegistrations.SortProperty; if ( sortProperty != null ) { switch ( sortProperty.Property ) { case "BalanceDue": { if ( sortProperty.Direction == SortDirection.Ascending ) { outstandingBalances = outstandingBalances.OrderBy( b => b.BalanceDue ); } else { outstandingBalances = outstandingBalances.OrderByDescending( b => b.BalanceDue ); } break; } case "LastPaymentReminderDateTime": { if ( sortProperty.Direction == SortDirection.Ascending ) { outstandingBalances = outstandingBalances.OrderBy( b => b.LastPaymentReminderDateTime ); } else { outstandingBalances = outstandingBalances.OrderByDescending( b => b.LastPaymentReminderDateTime ); } break; } case "CreatedDateTime": { if ( sortProperty.Direction == SortDirection.Ascending ) { outstandingBalances = outstandingBalances.OrderBy( b => b.CreatedDateTime ); } else { outstandingBalances = outstandingBalances.OrderByDescending( b => b.CreatedDateTime ); } break; } case "Name": { if ( sortProperty.Direction == SortDirection.Ascending ) { outstandingBalances = outstandingBalances.OrderBy( b => b.LastName ).ThenBy(b=> b.FirstName); } else { outstandingBalances = outstandingBalances.OrderByDescending( b => b.LastName ).ThenBy( b => b.FirstName ); } break; } } } gRegistrations.DataSource = outstandingBalances; gRegistrations.DataBind(); } }
/// <summary> /// Updates the instance. /// </summary> /// <param name="instance">The instance.</param> public void GetValue( RegistrationInstance instance ) { EnsureChildControls(); if ( instance != null ) { instance.Name = _tbName.Text; if ( ShowActive ) { instance.IsActive = _cbIsActive.Checked; } instance.Details = _ceDetails.Text; instance.StartDateTime = _dtpStart.SelectedDateTime; instance.EndDateTime = _dtpEnd.SelectedDateTime; instance.MaxAttendees = _nbMaxAttendees.Text.AsInteger(); instance.ContactPersonAliasId = _ppContact.PersonAliasId; instance.ContactPhone = _pnContactPhone.Text; instance.ContactEmail = _ebContactEmail.Text; instance.AccountId = _apAccount.SelectedValue.AsIntegerOrNull(); instance.SendReminderDateTime = _dtpSendReminder.SelectedDateTime; instance.ReminderSent = _cbReminderSent.Checked; instance.AdditionalReminderDetails = _ceAdditionalReminderDetails.Text; instance.AdditionalConfirmationDetails = _ceAdditionalConfirmationDetails.Text; } }
/// <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 ) { using ( var rockContext = new RockContext() ) { var service = new RegistrationInstanceService( rockContext ); RegistrationInstance instance = null; int? RegistrationInstanceId = hfRegistrationInstanceId.Value.AsIntegerOrNull(); if ( RegistrationInstanceId.HasValue ) { instance = service.Get( RegistrationInstanceId.Value ); } if ( instance == null ) { instance = new RegistrationInstance(); instance.RegistrationTemplateId = PageParameter( "RegistrationTemplateId" ).AsInteger(); service.Add( instance ); } rieDetails.GetValue( instance ); if ( !Page.IsValid ) { return; } rockContext.SaveChanges(); // Reload instance and show readonly view instance = service.Get( instance.Id ); ShowReadonlyDetails( instance ); } }
/// <summary> /// Shows the edit details. /// </summary> /// <param name="RegistrationTemplate">The registration template.</param> /// <param name="rockContext">The rock context.</param> private void ShowEditDetails( RegistrationInstance instance, RockContext rockContext ) { if ( instance.Id == 0 ) { lReadOnlyTitle.Text = ActionTitle.Add( RegistrationInstance.FriendlyTypeName ).FormatAsHtmlTitle(); hlInactive.Visible = false; lWizardInstanceName.Text = "New Instance"; } else { lWizardInstanceName.Text = instance.Name; } SetEditMode( true ); rieDetails.SetValue( instance ); }
/// <summary> /// Gets all of the form fields that were configured as 'Show on Grid' for the registration template /// </summary> /// <param name="registrationInstance">The registration instance.</param> private void LoadRegistrantFormFields( RegistrationInstance registrationInstance ) { RegistrantFields = new List<RegistrantFormField>(); if ( registrationInstance != null ) { foreach ( var form in registrationInstance.RegistrationTemplate.Forms ) { foreach ( var formField in form.Fields .Where( f => f.IsGridField ) .OrderBy( f => f.Order ) ) { if ( formField.FieldSource == RegistrationFieldSource.PersonField ) { if ( formField.PersonFieldType != RegistrationPersonFieldType.FirstName && formField.PersonFieldType != RegistrationPersonFieldType.LastName ) { RegistrantFields.Add( new RegistrantFormField { FieldSource = formField.FieldSource, PersonFieldType = formField.PersonFieldType } ); } } else { RegistrantFields.Add( new RegistrantFormField { FieldSource = formField.FieldSource, Attribute = AttributeCache.Read( formField.AttributeId.Value ) } ); } } } } }
/// <summary> /// Reads the instance. /// </summary> /// <param name="instance">The instance.</param> public void SetValue( RegistrationInstance instance ) { EnsureChildControls(); if ( instance != null ) { _tbName.Text = instance.Name; if ( ShowActive ) { _cbIsActive.Checked = instance.IsActive; } _ceDetails.Text = instance.Details; _dtpStart.SelectedDateTime = instance.StartDateTime; _dtpEnd.SelectedDateTime = instance.EndDateTime; _nbMaxAttendees.Text = instance.MaxAttendees.ToString(); _wtpRegistrationWorkflow.SetValue( instance.RegistrationWorkflowTypeId ); Person contactPerson = null; if ( instance.ContactPersonAlias != null && instance.ContactPersonAlias.Person != null ) { contactPerson = instance.ContactPersonAlias.Person; } else if ( instance.ContactPersonAliasId.HasValue ) { using ( var rockContext = new RockContext() ) { contactPerson = new PersonAliasService( rockContext ) .Queryable() .Where( p => p.Id == instance.ContactPersonAliasId.Value ) .Select( p => p.Person ) .FirstOrDefault(); } } _ppContact.SetValue( contactPerson ); _pnContactPhone.Text = instance.ContactPhone; _ebContactEmail.Text = instance.ContactEmail; _cbCost.Text = instance.Cost.HasValue ? instance.Cost.Value.ToString() : string.Empty; _cbCost.Visible = instance.RegistrationTemplate != null && ( instance.RegistrationTemplate.SetCostOnInstance ?? false ); _cbMinimumInitialPayment.Text = instance.MinimumInitialPayment.HasValue ? instance.MinimumInitialPayment.Value.ToString() : string.Empty; _cbMinimumInitialPayment.Visible = instance.RegistrationTemplate != null && ( instance.RegistrationTemplate.SetCostOnInstance ?? false ); _apAccount.SetValue( instance.AccountId ); _apAccount.Visible = instance.RegistrationTemplate != null && instance.RegistrationTemplate.FinancialGatewayId.HasValue; _dtpSendReminder.SelectedDateTime = instance.SendReminderDateTime; _cbReminderSent.Checked = instance.ReminderSent; _htmlAdditionalReminderDetails.Text = instance.AdditionalReminderDetails; _htmlAdditionalConfirmationDetails.Text = instance.AdditionalConfirmationDetails; } else { _tbName.Text = string.Empty; _cbIsActive.Checked = true; _ceDetails.Text = string.Empty; _dtpStart.SelectedDateTime = null; _dtpEnd.SelectedDateTime = null; _nbMaxAttendees.Text = string.Empty; _wtpRegistrationWorkflow.SetValue( null ); _ppContact.SetValue( null ); _pnContactPhone.Text = string.Empty; _ebContactEmail.Text = string.Empty; _cbCost.Text = string.Empty; _cbMinimumInitialPayment.Text = string.Empty; _apAccount.SetValue( null ); _dtpSendReminder.SelectedDateTime = null; _cbReminderSent.Checked = false; _htmlAdditionalReminderDetails.Text = string.Empty; _htmlAdditionalConfirmationDetails.Text = string.Empty; } }
/// <summary> /// Shows the detail. /// </summary> private void ShowDetail() { int? RegistrationInstanceId = PageParameter( "RegistrationInstanceId" ).AsIntegerOrNull(); int? parentTemplateId = PageParameter( "RegistrationTemplateId" ).AsIntegerOrNull(); if ( !RegistrationInstanceId.HasValue ) { pnlDetails.Visible = false; return; } using ( var rockContext = new RockContext() ) { RegistrationInstance registrationInstance = null; if ( RegistrationInstanceId.HasValue ) { registrationInstance = GetRegistrationInstance( RegistrationInstanceId.Value, rockContext ); } if ( registrationInstance == null ) { registrationInstance = new RegistrationInstance(); registrationInstance.Id = 0; registrationInstance.IsActive = true; registrationInstance.RegistrationTemplateId = parentTemplateId ?? 0; Guid? accountGuid = GetAttributeValue( "DefaultAccount").AsGuidOrNull(); if ( accountGuid.HasValue ) { var account = new FinancialAccountService( rockContext ).Get( accountGuid.Value ); registrationInstance.AccountId = account != null ? account.Id : 0; } } if ( registrationInstance.RegistrationTemplate == null && registrationInstance.RegistrationTemplateId > 0 ) { registrationInstance.RegistrationTemplate = new RegistrationTemplateService( rockContext ) .Get( registrationInstance.RegistrationTemplateId ); } hlType.Visible = registrationInstance.RegistrationTemplate != null; hlType.Text = registrationInstance.RegistrationTemplate != null ? registrationInstance.RegistrationTemplate.Name : string.Empty; lWizardTemplateName.Text = hlType.Text; pnlDetails.Visible = true; hfRegistrationInstanceId.Value = registrationInstance.Id.ToString(); SetHasPayments( registrationInstance.Id, rockContext ); // render UI based on Authorized bool readOnly = false; nbEditModeMessage.Text = string.Empty; // User must have 'Edit' rights to block, or 'Administrate' rights to instance if ( !UserCanEdit && !registrationInstance.IsAuthorized( Authorization.ADMINISTRATE, CurrentPerson ) ) { readOnly = true; nbEditModeMessage.Heading = "Information"; nbEditModeMessage.Text = EditModeMessage.ReadOnlyEditActionNotAllowed( RegistrationInstance.FriendlyTypeName ); } if ( readOnly ) { btnEdit.Visible = false; ShowReadonlyDetails( registrationInstance ); } else { btnEdit.Visible = true; if ( registrationInstance.Id > 0 ) { ShowReadonlyDetails( registrationInstance ); } else { ShowEditDetails( registrationInstance, rockContext ); } } LoadRegistrantFormFields( registrationInstance ); BindRegistrationsFilter(); BindRegistrantsFilter(); BindLinkagesFilter(); AddDynamicRegistrantControls(); } }
/// <summary> /// Reads the instance. /// </summary> /// <param name="instance">The instance.</param> public void SetValue( RegistrationInstance instance ) { EnsureChildControls(); if ( instance != null ) { _tbName.Text = instance.Name; if ( ShowActive ) { _cbIsActive.Checked = instance.IsActive; } _ceDetails.Text = instance.Details; _dtpStart.SelectedDateTime = instance.StartDateTime; _dtpEnd.SelectedDateTime = instance.EndDateTime; _nbMaxAttendees.Text = instance.MaxAttendees.ToString(); _ppContact.SetValue( instance.ContactPersonAlias != null ? instance.ContactPersonAlias.Person : null ); _pnContactPhone.Text = instance.ContactPhone; _ebContactEmail.Text = instance.ContactEmail; _apAccount.SetValue( instance.AccountId ); _apAccount.Visible = instance.RegistrationTemplate != null && instance.RegistrationTemplate.FinancialGatewayId.HasValue; _dtpSendReminder.SelectedDateTime = instance.SendReminderDateTime; _cbReminderSent.Checked = instance.ReminderSent; _ceAdditionalReminderDetails.Text = instance.AdditionalReminderDetails; _ceAdditionalConfirmationDetails.Text = instance.AdditionalConfirmationDetails; } else { _tbName.Text = string.Empty; _cbIsActive.Checked = true; _ceDetails.Text = string.Empty; _dtpStart.SelectedDateTime = null; _dtpEnd.SelectedDateTime = null; _nbMaxAttendees.Text = string.Empty; _ppContact.SetValue( null ); _pnContactPhone.Text = string.Empty; _ebContactEmail.Text = string.Empty; _apAccount.SetValue( null ); _dtpSendReminder.SelectedDateTime = null; _cbReminderSent.Checked = false; _ceAdditionalReminderDetails.Text = string.Empty; _ceAdditionalConfirmationDetails.Text = string.Empty; } }
/// <summary> /// Shows the readonly details. /// </summary> /// <param name="RegistrationInstance">The registration template.</param> private void ShowReadonlyDetails( RegistrationInstance RegistrationInstance ) { SetEditMode( false ); hfRegistrationInstanceId.SetValue( RegistrationInstance.Id ); lReadOnlyTitle.Text = RegistrationInstance.Name.FormatAsHtmlTitle(); hlInactive.Visible = RegistrationInstance.IsActive == false; lWizardInstanceName.Text = RegistrationInstance.Name; lName.Text = RegistrationInstance.Name; lAccount.Visible = RegistrationInstance.Account != null; lAccount.Text = RegistrationInstance.Account != null ? RegistrationInstance.Account.Name : ""; lMaxAttendees.Visible = RegistrationInstance.MaxAttendees > 0; lMaxAttendees.Text = RegistrationInstance.MaxAttendees.ToString( "N0" ); lDetails.Visible = !string.IsNullOrWhiteSpace( RegistrationInstance.Details ); lDetails.Text = RegistrationInstance.Details; ShowTab(); }
/// <summary> /// Binds the registrants filter. /// </summary> private void BindRegistrantsFilter( RegistrationInstance instance ) { drpRegistrantDateRange.DelimitedValues = fRegistrants.GetUserPreference( "Date Range" ); tbRegistrantFirstName.Text = fRegistrants.GetUserPreference( "First Name" ); tbRegistrantLastName.Text = fRegistrants.GetUserPreference( "Last Name" ); ddlInGroup.SetValue( fRegistrants.GetUserPreference( "In Group" ) ); ddlSignedDocument.SetValue( fRegistrants.GetUserPreference( "Signed Document" ) ); ddlSignedDocument.Visible = instance != null && instance.RegistrationTemplate != null && instance.RegistrationTemplate.RequiredSignatureDocumentTemplateId.HasValue; }
/// <summary> /// Reads the instance. /// </summary> /// <param name="instance">The instance.</param> public void SetValue(RegistrationInstance instance) { EnsureChildControls(); if (instance != null) { _tbName.Text = instance.Name; if (ShowActive) { _cbIsActive.Checked = instance.IsActive; } _ceDetails.Text = instance.Details; _dtpStart.SelectedDateTime = instance.StartDateTime; _dtpEnd.SelectedDateTime = instance.EndDateTime; _nbMaxAttendees.Text = instance.MaxAttendees.ToString(); _wtpRegistrationWorkflow.SetValue(instance.RegistrationWorkflowTypeId); Person contactPerson = null; if (instance.ContactPersonAlias != null && instance.ContactPersonAlias.Person != null) { contactPerson = instance.ContactPersonAlias.Person; } else if (instance.ContactPersonAliasId.HasValue) { using (var rockContext = new RockContext()) { contactPerson = new PersonAliasService(rockContext) .Queryable() .Where(p => p.Id == instance.ContactPersonAliasId.Value) .Select(p => p.Person) .FirstOrDefault(); } } _ppContact.SetValue(contactPerson); _pnContactPhone.Text = instance.ContactPhone; _ebContactEmail.Text = instance.ContactEmail; _cbCost.Text = instance.Cost.HasValue ? instance.Cost.Value.ToString() : string.Empty; _cbCost.Visible = instance.RegistrationTemplate != null && (instance.RegistrationTemplate.SetCostOnInstance ?? false); _cbMinimumInitialPayment.Text = instance.MinimumInitialPayment.HasValue ? instance.MinimumInitialPayment.Value.ToString() : string.Empty; _cbMinimumInitialPayment.Visible = instance.RegistrationTemplate != null && (instance.RegistrationTemplate.SetCostOnInstance ?? false); _cbDefaultPaymentAmount.Text = instance.DefaultPayment.HasValue ? instance.DefaultPayment.Value.ToString() : string.Empty; _cbDefaultPaymentAmount.Visible = instance.RegistrationTemplate != null && (instance.RegistrationTemplate.SetCostOnInstance ?? false); _apAccount.SetValue(instance.AccountId); _apAccount.Visible = instance.RegistrationTemplate != null && instance.RegistrationTemplate.FinancialGatewayId.HasValue; _dtpSendReminder.SelectedDateTime = instance.SendReminderDateTime; _cbReminderSent.Checked = instance.ReminderSent; _htmlRegistrationInstructions.Text = instance.RegistrationInstructions; _htmlAdditionalReminderDetails.Text = instance.AdditionalReminderDetails; _htmlAdditionalConfirmationDetails.Text = instance.AdditionalConfirmationDetails; } else { _tbName.Text = string.Empty; _cbIsActive.Checked = true; _ceDetails.Text = string.Empty; _dtpStart.SelectedDateTime = null; _dtpEnd.SelectedDateTime = null; _nbMaxAttendees.Text = string.Empty; _wtpRegistrationWorkflow.SetValue(null); _ppContact.SetValue(null); _pnContactPhone.Text = string.Empty; _ebContactEmail.Text = string.Empty; _cbCost.Text = string.Empty; _cbMinimumInitialPayment.Text = string.Empty; _cbDefaultPaymentAmount.Text = string.Empty; _apAccount.SetValue(null); _dtpSendReminder.SelectedDateTime = null; _cbReminderSent.Checked = false; _htmlRegistrationInstructions.Text = string.Empty; _htmlAdditionalReminderDetails.Text = string.Empty; _htmlAdditionalConfirmationDetails.Text = string.Empty; } }
/// <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 ) { RegistrationInstance instance = null; bool newInstance = false; using ( var rockContext = new RockContext() ) { var service = new RegistrationInstanceService( rockContext ); int? RegistrationInstanceId = hfRegistrationInstanceId.Value.AsIntegerOrNull(); if ( RegistrationInstanceId.HasValue ) { instance = service.Get( RegistrationInstanceId.Value ); } if ( instance == null ) { instance = new RegistrationInstance(); instance.RegistrationTemplateId = PageParameter( "RegistrationTemplateId" ).AsInteger(); service.Add( instance ); newInstance = true; } rieDetails.GetValue( instance ); if ( !Page.IsValid ) { return; } rockContext.SaveChanges(); } if ( newInstance ) { var qryParams = new Dictionary<string, string>(); qryParams.Add( "RegistrationTemplateId", PageParameter( "RegistrationTemplateId" ) ); qryParams.Add( "RegistrationInstanceId", instance.Id.ToString() ); NavigateToCurrentPage( qryParams ); } else { // Reload instance and show readonly view using ( var rockContext = new RockContext() ) { instance = new RegistrationInstanceService( rockContext ).Get( instance.Id ); ShowReadonlyDetails( instance ); } // show send payment reminder link if ( !string.IsNullOrWhiteSpace( GetAttributeValue( "PaymentReminderPage" ) ) && ( ( instance.RegistrationTemplate.SetCostOnInstance.HasValue && instance.RegistrationTemplate.SetCostOnInstance == true && instance.Cost.HasValue && instance.Cost.Value > 0 ) || instance.RegistrationTemplate.Cost > 0 ) ) { btnSendPaymentReminder.Visible = true; } else { btnSendPaymentReminder.Visible = false; } } }
/// <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) { EventItemOccurrence eventItemOccurrence = null; using (var rockContext = new RockContext()) { bool newItem = false; var eventItemOccurrenceService = new EventItemOccurrenceService(rockContext); var eventItemOccurrenceGroupMapService = new EventItemOccurrenceGroupMapService(rockContext); var registrationInstanceService = new RegistrationInstanceService(rockContext); var scheduleService = new ScheduleService(rockContext); int eventItemOccurrenceId = hfEventItemOccurrenceId.ValueAsInt(); if (eventItemOccurrenceId != 0) { eventItemOccurrence = eventItemOccurrenceService .Queryable("Linkages") .Where(i => i.Id == eventItemOccurrenceId) .FirstOrDefault(); } if (eventItemOccurrence == null) { newItem = true; eventItemOccurrence = new EventItemOccurrence { EventItemId = PageParameter("EventItemId").AsInteger() }; eventItemOccurrenceService.Add(eventItemOccurrence); } int?newCampusId = ddlCampus.SelectedValueAsInt(); if (eventItemOccurrence.CampusId != newCampusId) { eventItemOccurrence.CampusId = newCampusId; if (newCampusId.HasValue) { var campus = new CampusService(rockContext).Get(newCampusId.Value); eventItemOccurrence.Campus = campus; } else { eventItemOccurrence.Campus = null; } } eventItemOccurrence.Location = tbLocation.Text; string iCalendarContent = sbSchedule.iCalendarContent; var calEvent = ScheduleICalHelper.GetCalenderEvent(iCalendarContent); if (calEvent != null && calEvent.DTStart != null) { if (eventItemOccurrence.Schedule == null) { eventItemOccurrence.Schedule = new Schedule(); } eventItemOccurrence.Schedule.iCalendarContent = iCalendarContent; } else { if (eventItemOccurrence.ScheduleId.HasValue) { var oldSchedule = scheduleService.Get(eventItemOccurrence.ScheduleId.Value); if (oldSchedule != null) { scheduleService.Delete(oldSchedule); } } } if (!eventItemOccurrence.ContactPersonAliasId.Equals(ppContact.PersonAliasId)) { PersonAlias personAlias = null; eventItemOccurrence.ContactPersonAliasId = ppContact.PersonAliasId; if (eventItemOccurrence.ContactPersonAliasId.HasValue) { personAlias = new PersonAliasService(rockContext).Get(eventItemOccurrence.ContactPersonAliasId.Value); } if (personAlias != null) { eventItemOccurrence.ContactPersonAlias = personAlias; } } eventItemOccurrence.ContactPhone = PhoneNumber.FormattedNumber(PhoneNumber.DefaultCountryCode(), pnPhone.Number); eventItemOccurrence.ContactEmail = tbEmail.Text; eventItemOccurrence.Note = htmlOccurrenceNote.Text; // Remove any linkage no longer in UI Guid uiLinkageGuid = LinkageState != null ? LinkageState.Guid : Guid.Empty; foreach (var linkage in eventItemOccurrence.Linkages.Where(l => !l.Guid.Equals(uiLinkageGuid)).ToList()) { eventItemOccurrence.Linkages.Remove(linkage); eventItemOccurrenceGroupMapService.Delete(linkage); } // Add/Update linkage in UI if (!uiLinkageGuid.Equals(Guid.Empty)) { var linkage = eventItemOccurrence.Linkages.Where(l => l.Guid.Equals(uiLinkageGuid)).FirstOrDefault(); if (linkage == null) { linkage = new EventItemOccurrenceGroupMap(); eventItemOccurrence.Linkages.Add(linkage); } linkage.CopyPropertiesFrom(LinkageState); // update registration instance if (LinkageState.RegistrationInstance != null) { if (LinkageState.RegistrationInstance.Id != 0) { linkage.RegistrationInstance = registrationInstanceService.Get(LinkageState.RegistrationInstance.Id); } if (linkage.RegistrationInstance == null) { var registrationInstance = new RegistrationInstance(); registrationInstanceService.Add(registrationInstance); linkage.RegistrationInstance = registrationInstance; } linkage.RegistrationInstance.CopyPropertiesFrom(LinkageState.RegistrationInstance); } } if (!Page.IsValid) { return; } if (!eventItemOccurrence.IsValid) { // Controls will render the error messages return; } rockContext.SaveChanges(); var qryParams = new Dictionary <string, string>(); qryParams.Add("EventCalendarId", PageParameter("EventCalendarId")); qryParams.Add("EventItemId", PageParameter("EventItemId")); if (newItem) { NavigateToParentPage(qryParams); } else { qryParams.Add("EventItemOccurrenceId", eventItemOccurrence.Id.ToString()); NavigateToPage(RockPage.Guid, qryParams); } } }
/// <summary> /// Shows the detail. /// </summary> private void ShowDetail() { int? RegistrationInstanceId = PageParameter( "RegistrationInstanceId" ).AsIntegerOrNull(); int? parentTemplateId = PageParameter( "RegistrationTemplateId" ).AsIntegerOrNull(); if ( !RegistrationInstanceId.HasValue ) { pnlDetails.Visible = false; return; } using ( var rockContext = new RockContext() ) { RegistrationInstance registrationInstance = null; if ( RegistrationInstanceId.HasValue ) { registrationInstance = GetRegistrationInstance( RegistrationInstanceId.Value, rockContext ); } if ( registrationInstance == null ) { registrationInstance = new RegistrationInstance(); registrationInstance.Id = 0; registrationInstance.IsActive = true; registrationInstance.RegistrationTemplateId = parentTemplateId ?? 0; Guid? accountGuid = GetAttributeValue( "DefaultAccount" ).AsGuidOrNull(); if ( accountGuid.HasValue ) { var account = new FinancialAccountService( rockContext ).Get( accountGuid.Value ); registrationInstance.AccountId = account != null ? account.Id : 0; } } if ( registrationInstance.RegistrationTemplate == null && registrationInstance.RegistrationTemplateId > 0 ) { registrationInstance.RegistrationTemplate = new RegistrationTemplateService( rockContext ) .Get( registrationInstance.RegistrationTemplateId ); } hlType.Visible = registrationInstance.RegistrationTemplate != null; hlType.Text = registrationInstance.RegistrationTemplate != null ? registrationInstance.RegistrationTemplate.Name : string.Empty; lWizardTemplateName.Text = hlType.Text; pnlDetails.Visible = true; hfRegistrationInstanceId.Value = registrationInstance.Id.ToString(); SetHasPayments( registrationInstance.Id, rockContext ); FollowingsHelper.SetFollowing( registrationInstance, pnlFollowing, this.CurrentPerson ); // render UI based on Authorized bool readOnly = false; bool canEdit = UserCanEdit || registrationInstance.IsAuthorized( Authorization.EDIT, CurrentPerson ) || registrationInstance.IsAuthorized( Authorization.ADMINISTRATE, CurrentPerson ); nbEditModeMessage.Text = string.Empty; // User must have 'Edit' rights to block, or 'Edit' or 'Administrate' rights to instance if ( !canEdit ) { readOnly = true; nbEditModeMessage.Heading = "Information"; nbEditModeMessage.Text = EditModeMessage.NotAuthorizedToEdit( RegistrationInstance.FriendlyTypeName ); } if ( readOnly ) { btnEdit.Visible = false; btnDelete.Visible = false; gRegistrations.Actions.ShowAdd = false; gRegistrations.IsDeleteEnabled = false; ShowReadonlyDetails( registrationInstance ); } else { btnEdit.Visible = true; btnDelete.Visible = true; if ( registrationInstance.Id > 0 ) { ShowReadonlyDetails( registrationInstance ); } else { ShowEditDetails( registrationInstance, rockContext ); } } // show send payment reminder link if ( !string.IsNullOrWhiteSpace( GetAttributeValue( "PaymentReminderPage" ) ) && ( ( registrationInstance.RegistrationTemplate.SetCostOnInstance.HasValue && registrationInstance.RegistrationTemplate.SetCostOnInstance == true && registrationInstance.Cost.HasValue && registrationInstance.Cost.Value > 0 ) || registrationInstance.RegistrationTemplate.Cost > 0 ) ) { btnSendPaymentReminder.Visible = true; } else { btnSendPaymentReminder.Visible = false; } LoadRegistrantFormFields( registrationInstance ); BindRegistrationsFilter(); BindRegistrantsFilter( registrationInstance ); BindLinkagesFilter(); AddDynamicControls(); } }
/// <summary> /// Loads the registration. /// </summary> private void LoadData() { int? registrationInstanceId = PageParameter( "RegistrationInstanceId" ).AsIntegerOrNull(); if ( registrationInstanceId.HasValue ) { using ( RockContext rockContext = new RockContext() ) { RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService( rockContext ); _registrationInstance = registrationInstanceService.Queryable( "RegistrationTemplate" ).AsNoTracking() .Where( r => r.Id == registrationInstanceId ).FirstOrDefault(); var registrationSample = _registrationInstance.Registrations.Where( r => r.BalanceDue > 0 ).FirstOrDefault(); if ( registrationSample != null ) { Dictionary<string, object> mergeObjects = new Dictionary<string, object>(); mergeObjects.Add( "Registration", registrationSample ); mergeObjects.Add( "RegistrationInstance", _registrationInstance ); ceEmailMessage.Text = _registrationInstance.RegistrationTemplate.PaymentReminderEmailTemplate; ifEmailPreview.Attributes["srcdoc"] = _registrationInstance.RegistrationTemplate.PaymentReminderEmailTemplate.ResolveMergeFields( mergeObjects ); txtFromEmail.Text = _registrationInstance.RegistrationTemplate.PaymentReminderFromEmail.ResolveMergeFields( mergeObjects ); txtFromName.Text = _registrationInstance.RegistrationTemplate.PaymentReminderFromName.ResolveMergeFields( mergeObjects ); txtFromSubject.Text = _registrationInstance.RegistrationTemplate.PaymentReminderSubject.ResolveMergeFields( mergeObjects ); if ( _registrationInstance.RegistrationTemplate.PaymentReminderTimeSpan.HasValue ) { lBalanceInstructions.Text = string.Format( "<p>Below is a list of registrations with outstanding balances. Individuals who have not been reminded of their balance in {0} days have been pre-selected. Those who have been recently added or notified of their balance are greyed out. They can be still be included by either selecting them or selecting all transactions.</p>", _registrationInstance.RegistrationTemplate.PaymentReminderTimeSpan.Value ); } } else { pnlPreview.Visible = false; nbMessages.Text = "<strong>Good News!</strong> No registrations have an outstanding balance at this time."; } LoadOutstandingBalances(); } } }
/// <summary> /// Shows the readonly details. /// </summary> /// <param name="RegistrationInstance">The registration template.</param> private void ShowReadonlyDetails( RegistrationInstance RegistrationInstance ) { SetEditMode( false ); hfRegistrationInstanceId.SetValue( RegistrationInstance.Id ); lReadOnlyTitle.Text = RegistrationInstance.Name.FormatAsHtmlTitle(); hlInactive.Visible = RegistrationInstance.IsActive == false; lWizardInstanceName.Text = RegistrationInstance.Name; lName.Text = RegistrationInstance.Name; if ( RegistrationInstance.RegistrationTemplate.SetCostOnInstance ?? false ) { lCost.Text = RegistrationInstance.Cost.FormatAsCurrency(); lMinimumInitialPayment.Visible = RegistrationInstance.MinimumInitialPayment.HasValue; lMinimumInitialPayment.Text = RegistrationInstance.MinimumInitialPayment.HasValue ? RegistrationInstance.MinimumInitialPayment.Value.FormatAsCurrency() : ""; } else { lCost.Visible = false; lMinimumInitialPayment.Visible = false; } lAccount.Visible = RegistrationInstance.Account != null; lAccount.Text = RegistrationInstance.Account != null ? RegistrationInstance.Account.Name : ""; lMaxAttendees.Visible = RegistrationInstance.MaxAttendees > 0; lMaxAttendees.Text = RegistrationInstance.MaxAttendees.ToString( "N0" ); lWorkflowType.Text = RegistrationInstance.RegistrationWorkflowType != null ? RegistrationInstance.RegistrationWorkflowType.Name : string.Empty; lWorkflowType.Visible = !string.IsNullOrWhiteSpace( lWorkflowType.Text ); lDetails.Visible = !string.IsNullOrWhiteSpace( RegistrationInstance.Details ); lDetails.Text = RegistrationInstance.Details; liGroupPlacement.Visible = RegistrationInstance.RegistrationTemplate.AllowGroupPlacement; int? groupId = GetUserPreference( string.Format( "ParentGroup_{0}_{1}", BlockId, RegistrationInstance.Id ) ).AsIntegerOrNull(); if ( groupId.HasValue ) { using ( var rockContext = new RockContext() ) { var group = new GroupService( rockContext ).Get( groupId.Value ); if ( group != null ) { gpGroupPlacementParentGroup.SetValue( group ); } } } ShowTab(); }
/// <summary> /// Handles the Click event of the btnSendReminders 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 btnSendReminders_Click( object sender, EventArgs e ) { var registrationsSelected = new List<int>(); int sendCount = 0; gRegistrations.SelectedKeys.ToList().ForEach( r => registrationsSelected.Add( r.ToString().AsInteger() ) ); if ( registrationsSelected.Any() ) { var appRoot = Rock.Web.Cache.GlobalAttributesCache.Read().GetValue( "ExternalApplicationRoot" ); if ( _registrationInstance == null ) { int? registrationInstanceId = PageParameter( "RegistrationInstanceId" ).AsIntegerOrNull(); using ( RockContext rockContext = new RockContext() ) { RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService( rockContext ); _registrationInstance = registrationInstanceService.Queryable( "RegistrationTemplate" ).AsNoTracking() .Where( r => r.Id == registrationInstanceId ).FirstOrDefault(); } foreach( var registrationId in registrationsSelected ) { // use a new rockContext for each registration so that ChangeTracker doesn't get bogged down using ( RockContext rockContext = new RockContext() ) { var registrationService = new RegistrationService( rockContext ); var registration = registrationService.Get( registrationId ); if ( registration != null && !string.IsNullOrWhiteSpace(registration.ConfirmationEmail) ) { var recipients = new List<string>(); Dictionary<string, object> mergeObjects = new Dictionary<string, object>(); mergeObjects.Add( "Registration", registration ); mergeObjects.Add( "RegistrationInstance", _registrationInstance ); recipients.Add( registration.ConfirmationEmail ); string message = ceEmailMessage.Text.ResolveMergeFields( mergeObjects ); Email.Send( txtFromEmail.Text, txtFromName.Text, txtFromSubject.Text, recipients, message, appRoot ); registration.LastPaymentReminderDateTime = RockDateTime.Now; rockContext.SaveChanges(); sendCount++; } } } } } pnlSend.Visible = false; pnlComplete.Visible = true; nbResult.Text = string.Format("Payment reminders have been sent to {0}.", "individuals".ToQuantity( sendCount )); }
/// <summary> /// Adds any registration instances given in the XML file. /// </summary> /// <param name="elemRegistrationInstances"></param> /// <param name="rockContext"></param> private void AddRegistrationInstances( XElement elemRegistrationInstances, RockContext rockContext ) { if ( elemRegistrationInstances == null ) { return; } foreach ( var element in elemRegistrationInstances.Elements( "registrationInstance" ) ) { // skip any illegally formatted items if ( element.Attribute( "templateGuid" ) == null ) { continue; } // Now find the matching registration template RegistrationInstanceService registrationInstanceService = new RegistrationInstanceService( rockContext ); RegistrationTemplateService registrationTemplateService = new RegistrationTemplateService( rockContext ); Guid templateGuid = element.Attribute( "templateGuid" ).Value.AsGuid(); var registrationTemplate = registrationTemplateService.Queryable() .Where( g => g.Guid == templateGuid ) .FirstOrDefault(); if ( registrationTemplate == null ) { throw new NotSupportedException( string.Format( "unknown registration template: {0}", templateGuid ) ); } // Merge lava fields // LAVA additionalReminderDetails Dictionary<string, object> mergeObjects = new Dictionary<string, object>(); DateTime? registrationStartsDate = null; DateTime? registrationEndsDate = null; DateTime? sendReminderDate = null; var additionalReminderDetails = string.Empty; var additionalConfirmationDetails = string.Empty; if ( element.Attribute( "registrationStarts" ) != null ) { var y = element.Attribute( "registrationStarts" ).Value.ResolveMergeFields( mergeObjects ); registrationStartsDate = DateTime.Parse( y ); } if ( element.Attribute( "registrationEnds" ) != null ) { registrationEndsDate = DateTime.Parse( element.Attribute( "registrationEnds" ).Value.ResolveMergeFields( mergeObjects ) ); } if ( element.Attribute( "sendReminderDate" ) != null ) { sendReminderDate = DateTime.Parse( element.Attribute( "sendReminderDate" ).Value.ResolveMergeFields( mergeObjects ) ); } if ( element.Attribute( "additionalReminderDetails" ) != null ) { additionalReminderDetails = element.Attribute( "additionalReminderDetails" ).Value; additionalReminderDetails = additionalReminderDetails.ResolveMergeFields( mergeObjects ); } if ( element.Attribute( "additionalConfirmationDetails" ) != null ) { additionalConfirmationDetails = element.Attribute( "additionalConfirmationDetails" ).Value; additionalConfirmationDetails = additionalConfirmationDetails.ResolveMergeFields( mergeObjects ); } // Get the contact info int? contactPersonAliasId = null; if ( element.Attribute( "contactPersonGuid" ) != null ) { var guid = element.Attribute( "contactPersonGuid" ).Value.AsGuid(); if ( _peopleAliasDictionary.ContainsKey( guid ) ) { contactPersonAliasId = _peopleAliasDictionary[element.Attribute( "contactPersonGuid" ).Value.AsGuid()]; } } // Find the matching account FinancialAccountService financialGatewayService = new FinancialAccountService( rockContext ); string accountName = element.Attribute( "account" ) != null ? element.Attribute( "account" ).Value : string.Empty; var account = financialGatewayService.Queryable() .Where( g => g.Name == accountName ) .FirstOrDefault(); RegistrationInstance registrationInstance = new RegistrationInstance() { Guid = ( element.Attribute( "guid" ) != null ) ? element.Attribute( "guid" ).Value.Trim().AsGuid() : Guid.NewGuid(), Name = ( element.Attribute( "name" ) != null ) ? element.Attribute( "name" ).Value.Trim() : "New " + registrationTemplate.Name, IsActive = true, RegistrationTemplateId = registrationTemplate.Id, StartDateTime = registrationStartsDate, EndDateTime = registrationEndsDate, MaxAttendees = element.Attribute( "maxAttendees" ) != null ? element.Attribute( "maxAttendees" ).Value.AsInteger() : 0, SendReminderDateTime = sendReminderDate, ContactPersonAliasId = contactPersonAliasId, ContactPhone = element.Attribute( "contactPhone" ) != null ? element.Attribute( "contactPhone" ).Value : string.Empty, ContactEmail = element.Attribute( "contactEmail" ) != null ? element.Attribute( "contactEmail" ).Value : string.Empty, AccountId = ( account != null ) ? (int?)account.Id : null, AdditionalReminderDetails = HttpUtility.HtmlDecode( additionalReminderDetails ), AdditionalConfirmationDetails = HttpUtility.HtmlDecode( additionalConfirmationDetails ), CreatedDateTime = RockDateTime.Now, ModifiedDateTime = RockDateTime.Now, }; registrationInstanceService.Add( registrationInstance ); } }
/// <summary> /// Shows the view. /// </summary> /// <param name="groupId">The group identifier.</param> protected void ShowView(int groupId) { pnlView.Visible = true; hfGroupId.Value = groupId.ToString(); var rockContext = new RockContext(); var group = new GroupService(rockContext).Get(groupId); if (group == null) { pnlView.Visible = false; return; } group.LoadAttributes(rockContext); var opportunityType = DefinedValueCache.Get(group.GetAttributeValue("OpportunityType").AsGuid()); if (this.GetAttributeValue("SetPageTitletoOpportunityTitle").AsBoolean()) { RockPage.Title = group.GetAttributeValue("OpportunityTitle"); RockPage.BrowserTitle = group.GetAttributeValue("OpportunityTitle"); RockPage.Header.Title = group.GetAttributeValue("OpportunityTitle"); } var mergeFields = LavaHelper.GetCommonMergeFields(this.RockPage, this.CurrentPerson, new CommonMergeFieldsOptions { GetLegacyGlobalMergeFields = false }); mergeFields.Add("Block", this.BlockCache); mergeFields.Add("Group", group); // Left Sidebar var photoGuid = group.GetAttributeValue("OpportunityPhoto").AsGuidOrNull(); imgOpportunityPhoto.Visible = photoGuid.HasValue; imgOpportunityPhoto.ImageUrl = string.Format("~/GetImage.ashx?Guid={0}", photoGuid); var groupMembers = group.Members.ToList(); foreach (var gm in groupMembers) { gm.LoadAttributes(rockContext); } // only show the 'Donate to a Participant' button if there are participants that are taking contribution requests btnDonateToParticipant.Visible = groupMembers.Where(a => !a.GetAttributeValue("DisablePublicContributionRequests").AsBoolean()).Any(); if (!string.IsNullOrWhiteSpace(opportunityType.GetAttributeValue("core_DonateButtonText"))) { btnDonateToParticipant.Text = opportunityType.GetAttributeValue("core_DonateButtonText"); } RegistrationInstance registrationInstance = null; var registrationInstanceId = group.GetAttributeValue("RegistrationInstance").AsIntegerOrNull(); if (registrationInstanceId.HasValue) { registrationInstance = new RegistrationInstanceService(rockContext).Get(registrationInstanceId.Value); } mergeFields.Add("RegistrationPage", LinkedPageRoute("RegistrationPage")); if (registrationInstance != null) { mergeFields.Add("RegistrationInstance", registrationInstance); mergeFields.Add("RegistrationInstanceLinkages", registrationInstance.Linkages); // populate merge fields for Registration Counts var maxRegistrantCount = 0; var currentRegistrationCount = 0; if (registrationInstance.MaxAttendees != 0) { maxRegistrantCount = registrationInstance.MaxAttendees; } currentRegistrationCount = new RegistrationRegistrantService(rockContext).Queryable().AsNoTracking() .Where(r => r.Registration.RegistrationInstanceId == registrationInstance.Id && r.OnWaitList == false) .Count(); mergeFields.Add("CurrentRegistrationCount", currentRegistrationCount); if (maxRegistrantCount != 0) { mergeFields.Add("MaxRegistrantCount", maxRegistrantCount); mergeFields.Add("RegistrationSpotsAvailable", maxRegistrantCount - currentRegistrationCount); } } string sidebarLavaTemplate = this.GetAttributeValue("SidebarLavaTemplate"); lSidebarHtml.Text = sidebarLavaTemplate.ResolveMergeFields(mergeFields); SetActiveTab("Details"); // Top Main string summaryLavaTemplate = this.GetAttributeValue("SummaryLavaTemplate"); lMainTopContentHtml.Text = summaryLavaTemplate.ResolveMergeFields(mergeFields); // only show the leader toolbox link of the currentperson has a leader role in the group btnLeaderToolbox.Visible = group.Members.Any(a => a.PersonId == this.CurrentPersonId && a.GroupRole.IsLeader); //// Participant Actions // only show if the current person is a group member var groupMember = group.Members.FirstOrDefault(a => a.PersonId == this.CurrentPersonId); if (groupMember != null) { hfGroupMemberId.Value = groupMember.Id.ToString(); pnlParticipantActions.Visible = true; } else { hfGroupMemberId.Value = null; pnlParticipantActions.Visible = false; } mergeFields.Add("GroupMember", groupMember); // Progress if (groupMember != null && pnlParticipantActions.Visible) { var entityTypeIdGroupMember = EntityTypeCache.GetId <Rock.Model.GroupMember>(); var contributionTotal = new FinancialTransactionDetailService(rockContext).Queryable() .Where(d => d.EntityTypeId == entityTypeIdGroupMember && d.EntityId == groupMember.Id) .Sum(a => (decimal?)a.Amount) ?? 0.00M; var individualFundraisingGoal = groupMember.GetAttributeValue("IndividualFundraisingGoal").AsDecimalOrNull(); if (!individualFundraisingGoal.HasValue) { individualFundraisingGoal = group.GetAttributeValue("IndividualFundraisingGoal").AsDecimalOrNull(); } var amountLeft = individualFundraisingGoal - contributionTotal; var percentMet = individualFundraisingGoal > 0 ? contributionTotal * 100 / individualFundraisingGoal : 100; mergeFields.Add("AmountLeft", amountLeft); mergeFields.Add("PercentMet", percentMet); var queryParams = new Dictionary <string, string>(); queryParams.Add("GroupId", hfGroupId.Value); queryParams.Add("GroupMemberId", hfGroupMemberId.Value); mergeFields.Add("MakeDonationUrl", LinkedPageUrl("DonationPage", queryParams)); mergeFields.Add("ParticipantPageUrl", LinkedPageUrl("ParticipantPage", queryParams)); string makeDonationButtonText = null; if (groupMember.PersonId == this.CurrentPersonId) { makeDonationButtonText = "Make Payment"; } else { makeDonationButtonText = string.Format("Contribute to {0} {1}", RockFilters.Possessive(groupMember.Person.NickName), opportunityType); } mergeFields.Add("MakeDonationButtonText", makeDonationButtonText); var participantLavaTemplate = this.GetAttributeValue("ParticipantLavaTemplate"); lParticipantActionsHtml.Text = participantLavaTemplate.ResolveMergeFields(mergeFields); } // Tab:Details lDetailsHtml.Text = group.GetAttributeValue("OpportunityDetails"); btnDetailsTab.Text = string.Format("{0} Details", opportunityType); // Tab:Updates liUpdatesTab.Visible = false; var updatesContentChannelGuid = group.GetAttributeValue("UpdateContentChannel").AsGuidOrNull(); if (updatesContentChannelGuid.HasValue) { var contentChannel = new ContentChannelService(rockContext).Get(updatesContentChannelGuid.Value); if (contentChannel != null) { liUpdatesTab.Visible = true; string updatesLavaTemplate = this.GetAttributeValue("UpdatesLavaTemplate"); var contentChannelItems = new ContentChannelItemService(rockContext).Queryable().Where(a => a.ContentChannelId == contentChannel.Id).AsNoTracking().ToList(); mergeFields.Add("ContentChannelItems", contentChannelItems); lUpdatesContentItemsHtml.Text = updatesLavaTemplate.ResolveMergeFields(mergeFields); btnUpdatesTab.Text = string.Format("{0} Updates ({1})", opportunityType, contentChannelItems.Count()); } } // Tab:Comments var noteType = NoteTypeCache.Get(this.GetAttributeValue("NoteType").AsGuid()); if (noteType != null) { notesCommentsTimeline.NoteOptions.SetNoteTypes(new List <NoteTypeCache> { noteType }); } notesCommentsTimeline.NoteOptions.EntityId = groupId; // show the Add button on comments for any logged in person notesCommentsTimeline.AddAllowed = true; var enableCommenting = group.GetAttributeValue("EnableCommenting").AsBoolean(); btnCommentsTab.Text = string.Format("Comments ({0})", notesCommentsTimeline.NoteCount); if (CurrentPerson == null) { notesCommentsTimeline.Visible = enableCommenting && (notesCommentsTimeline.NoteCount > 0); lNoLoginNoCommentsYet.Visible = notesCommentsTimeline.NoteCount == 0; liCommentsTab.Visible = enableCommenting; btnLoginToComment.Visible = enableCommenting; } else { lNoLoginNoCommentsYet.Visible = false; notesCommentsTimeline.Visible = enableCommenting; liCommentsTab.Visible = enableCommenting; btnLoginToComment.Visible = false; } // if btnDetailsTab is the only visible tab, hide the tab since there is nothing else to tab to if (!liCommentsTab.Visible && !liUpdatesTab.Visible) { tlTabList.Visible = false; } }
/// <summary> /// Updates the instance. /// </summary> /// <param name="instance">The instance.</param> public void GetValue( RegistrationInstance instance ) { EnsureChildControls(); if ( instance != null ) { instance.Name = _tbName.Text; if ( ShowActive ) { instance.IsActive = _cbIsActive.Checked; } instance.Details = _ceDetails.Text; instance.StartDateTime = _dtpStart.SelectedDateTime; instance.EndDateTime = _dtpEnd.SelectedDateTime; instance.MaxAttendees = _nbMaxAttendees.Text.AsInteger(); instance.RegistrationWorkflowTypeId = _wtpRegistrationWorkflow.SelectedValueAsInt(); instance.ContactPersonAliasId = _ppContact.PersonAliasId; instance.ContactPhone = _pnContactPhone.Text; instance.ContactEmail = _ebContactEmail.Text; instance.Cost = _cbCost.Text.AsDecimalOrNull(); instance.MinimumInitialPayment = _cbMinimumInitialPayment.Text.AsDecimalOrNull(); int accountId = _apAccount.SelectedValue.AsInteger(); instance.AccountId = accountId > 0 ? accountId : (int?)null; instance.SendReminderDateTime = _dtpSendReminder.SelectedDateTime; instance.ReminderSent = _cbReminderSent.Checked; instance.AdditionalReminderDetails = _htmlAdditionalReminderDetails.Text; instance.AdditionalConfirmationDetails = _htmlAdditionalConfirmationDetails.Text; } }