コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        /// <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();
            }
        }
コード例 #3
0
        /// <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);
                }
            }
        }
コード例 #4
0
        /// <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();
        }
コード例 #5
0
        /// <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;
            }
        }
コード例 #6
0
        /// <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));
        }
コード例 #7
0
        /// <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();
                }
            }
        }
コード例 #9
0
        /// <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);
                    }
                }
            }
        }
コード例 #10
0
        /// <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;
            }
        }
コード例 #13
0
        /// <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);
        }
コード例 #14
0
        /// <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();
            }
        }
コード例 #16
0
 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" );
 }
コード例 #17
0
        /// <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;
                    }
                }
            }
        }
コード例 #18
0
        /// <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);
        }
コード例 #19
0
        /// <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;
                }
            }
        }
コード例 #20
0
        /// <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);
        }
コード例 #21
0
        /// <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;
            }
        }
コード例 #22
0
        /// <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();
            }
        }
コード例 #23
0
        /// <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;
            }
        }
コード例 #24
0
        /// <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 );
            }
        }
コード例 #25
0
        /// <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 );
        }
コード例 #26
0
        /// <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 )
                                } );
                        }
                    }
                }
            }
        }
コード例 #27
0
        /// <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;
            }
        }
コード例 #28
0
        /// <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();
            }
        }
コード例 #29
0
        /// <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;
            }
        }
コード例 #30
0
        /// <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();
        }
コード例 #31
0
        /// <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;
        }
コード例 #32
0
        /// <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;
            }
        }
コード例 #33
0
        /// <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;
                }
            }
        }
コード例 #34
0
        /// <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);
                }
            }
        }
コード例 #35
0
        /// <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();
            }
        }
コード例 #36
0
        /// <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();
                }
            }
        }
コード例 #37
0
        /// <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();
        }
コード例 #38
0
        /// <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 ));
        }
コード例 #39
0
ファイル: SampleData.ascx.cs プロジェクト: NewPointe/Rockit
        /// <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 );
            }
        }
コード例 #40
0
        /// <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;
            }
        }
コード例 #41
0
        /// <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;
            }
        }