private void GetProviderName(ModuleInstanceView parent, PublicModels.ProviderAppointmentView.ProviderAppointmentView viewSettings, int orgUnitId, int providerId)
 {
     var request = GetProviderRequest(orgUnitId, providerId);
     var response = parent.ProcessRequest<PopulateProviderComboBoxResponse>(request);
     if (response != null && response.Results != null && response.Results.FirstOrDefault() != null)
         viewSettings.ProviderName = response.Results.FirstOrDefault().FullName;
 }
 private void GetSpecialtiesList(ModuleInstanceView parent, PublicModels.ProviderAppointmentView.ProviderAppointmentView viewSettings, int orgUnitId, int providerId)
 {
     var request = GetProviderRequest(orgUnitId, providerId);
     request.IncludeSpecialtiesInResults = true;
     var response = parent.ProcessRequest<PopulateProviderComboBoxResponse>(request);
     if (response != null && response.Specialties != null)
         viewSettings.SpecialtyList = response.Specialties.Select(s => s.SpecialtyName).ToList();
 }
        private EventRegistrationResult Register(ModuleInstanceView parent, PublicModels.EventCartView.EventCartView settingsData, IDictionary<string, string> parameters)
        {
            try
            {
                ValidateCart(settingsData);

                var request = new RegisterCartRequest();

                var attendees = new List<CartAttendeeDto>();

                foreach (var occurrence in settingsData.EventOccurrences)
                {
                    attendees.Add(new CartAttendeeDto()
                    {
                        Attendee = new AttendeeDto()
                        {
                            FirstName = settingsData.PrimaryAttendee.FirstName,
                            LastName = settingsData.PrimaryAttendee.LastName,
                            Address1 = settingsData.PrimaryAttendee.Address1,
                            Address2 = settingsData.PrimaryAttendee.Address2,
                            City = settingsData.PrimaryAttendee.City,
                            StateName = settingsData.PrimaryAttendee.State,
                            PostalCode = settingsData.PrimaryAttendee.PostalCode,
                            EmailAddress = settingsData.PrimaryAttendee.Email,
                            PrimaryPhone = settingsData.PrimaryAttendee.Phone
                        },
                        EventOccurrenceId = occurrence.Id
                    });

                    foreach (var guest in occurrence.GuestAttendees)
                    {
                        attendees.Add(new CartAttendeeDto()
                        {
                            Attendee = CreateGuestAttendeeDto(guest, settingsData.PrimaryAttendee, occurrence.IsGuestDemographicInfoRequired),
                            EventOccurrenceId = occurrence.Id
                        });
                    }

                    // Submit ULM lead
                    SubmitLeadForEventOccurrence(occurrence.EventTitle, occurrence.LeadManagementBusinessUnitId, parent, settingsData, parameters);
                }

                request.Attendees = attendees;
                var response = parent.ProcessRequest<RegisterCartResponse>(request);

                return new EventRegistrationResult() { IsSuccessful = true, EventRegistrationId = response.EventRegistrationId, RegistrationIdentifier = response.RegistrationIdentifier };
            }
            catch (Exception ex)
            {
                if (ex is BusinessException)
                    return new EventRegistrationResult() { IsSuccessful = false, ErrorMessage = ex.Message };
                else
                    return new EventRegistrationResult() { IsSuccessful = false, Error = ex };
            }
        }
 private PublicModels.EventCartView.EventCartView BuildAdminSettingsView(PublicModels.EventCartView.EventCartView settingsData)
 {
     return settingsData;
 }
 private void AddSettings(PublicModels.EventCartView.EventCartView viewSettings)
 {
     var settingGroup = viewSettings.GetOrCreateSettingGroup(PublicModelConstants.BasicSettingsGroup);
     settingGroup.AddSetting(new Setting("RegistrationConfirmationPageUrl", "Registration Confirmation Page URL", SettingFieldType.Text));
 }
        private void SubmitLeadForEventOccurrence(string eventTitle, string businessUnitId, DataProxyBase dataProxy, PublicModels.EventCartView.EventCartView viewSettings, IDictionary<string, string> parameters)
        {
            // Read/validate settings
            var settings = LeadManagementHelper.ReadSettings(dataProxy);

            if (string.IsNullOrEmpty(settings.ClientId))
                return;

            if (string.IsNullOrEmpty(businessUnitId))
                businessUnitId = settings.EventRegistrationBusinessUnitId;

            var attendee = viewSettings.PrimaryAttendee;

            var lead = new BrightWhistleLead();
            lead.SetFieldValue(BrightWhistleFields.BusinessUnitId, businessUnitId);
            lead.SetFieldValue(BrightWhistleFields.LeadSource, "Event Registration");
            lead.SetFieldValue(BrightWhistleFields.FirstName, attendee.FirstName);
            lead.SetFieldValue(BrightWhistleFields.LastName, attendee.LastName);
            lead.SetFieldValue(BrightWhistleFields.Email, attendee.Email);
            lead.SetFieldValue(BrightWhistleFields.PhoneNumber, attendee.Phone);
            lead.SetFieldValue(BrightWhistleFields.Street1, attendee.Address1);
            lead.SetFieldValue(BrightWhistleFields.Street2, attendee.Address2);
            lead.SetFieldValue(BrightWhistleFields.City, attendee.City);
            lead.SetFieldValue(BrightWhistleFields.State, attendee.State);
            lead.SetFieldValue(BrightWhistleFields.Zip, attendee.PostalCode);
            lead.SetFieldValue("EventTitle", eventTitle);

            LeadManagementHelper.SubmitLeadDataAsync(lead, dataProxy, viewSettings, parameters);
        }
 private ProviderAppointmentSubmissionResult Register(ModuleInstanceView parent, PublicModels.ProviderAppointmentView.ProviderAppointmentView settingsData, IDictionary<string, string> parameters)
 {
     try
     {
         ValidateForm(settingsData);
         SubmitLead(parent, settingsData, parameters);
         return new ProviderAppointmentSubmissionResult { IsSuccessful = true };
     }
     catch (Exception ex)
     {
         if (ex is BusinessException)
             return new ProviderAppointmentSubmissionResult() { IsSuccessful = false, ErrorMessage = ex.Message };
         else
             return new ProviderAppointmentSubmissionResult() { IsSuccessful = false, Error = ex };
     }
 }
        private void ValidateForm(PublicModels.ProviderAppointmentView.ProviderAppointmentView settingsData)
        {
            var errorMessageMarkup = new StringBuilder();

            if (string.IsNullOrEmpty(settingsData.Patient.FirstName))
                errorMessageMarkup.Append("Patient First Name is required<br />");
            if (string.IsNullOrEmpty(settingsData.Patient.LastName))
                errorMessageMarkup.Append("Patient Last Name is required<br />");
            if (string.IsNullOrEmpty(settingsData.Patient.Email))
                errorMessageMarkup.Append("Patient Email is required<br />");
            if (string.IsNullOrEmpty(settingsData.Patient.Phone))
                errorMessageMarkup.Append("Patient Phone Number is required<br />");
            if (string.IsNullOrEmpty(settingsData.Specialty))
                errorMessageMarkup.Append("Specialty is required<br />");

            if (errorMessageMarkup.Length > 0)
                throw new BusinessException(errorMessageMarkup.ToString());
        }
        private void SubmitLead(DataProxyBase dataProxy, PublicModels.ProviderAppointmentView.ProviderAppointmentView viewSettings, IDictionary<string, string> parameters)
        {
            var settings = LeadManagementHelper.ReadSettings(dataProxy);

            if (string.IsNullOrEmpty(settings.ClientId))
                return;

            var patient = viewSettings.Patient;
            var lead = new BrightWhistleLead();

            lead.SetFieldValue(BrightWhistleFields.UniqueId, Guid.NewGuid().ToString());
            lead.SetFieldValue(BrightWhistleFields.BusinessUnitId, settings.ProviderAppointmentRequestBusinessUnitId);
            lead.SetFieldValue(BrightWhistleFields.LeadSource, "Appointment Request");
            lead.SetFieldValue(BrightWhistleFields.FirstName, patient.FirstName);
            lead.SetFieldValue(BrightWhistleFields.LastName, patient.LastName);
            lead.SetFieldValue(BrightWhistleFields.Email, patient.Email);
            lead.SetFieldValue(BrightWhistleFields.PhoneNumber, patient.Phone);
            lead.SetFieldValue(BrightWhistleFields.Street1, patient.Address1);
            lead.SetFieldValue(BrightWhistleFields.Street2, patient.Address2);
            lead.SetFieldValue(BrightWhistleFields.City, patient.City);
            lead.SetFieldValue(BrightWhistleFields.State, patient.State);
            lead.SetFieldValue(BrightWhistleFields.Zip, patient.PostalCode);
            lead.SetFieldValue(BrightWhistleFields.DateOfBirth, patient.DateOfBirth);
            lead.SetFieldValue("MiddleName", patient.MiddleName);
            lead.SetFieldValue("Gender", patient.Gender);
            lead.SetFieldValue("PatientStatus", patient.PatientStatus);
            lead.SetFieldValue("PreferredContactMethod", patient.ContactMethod);
            lead.SetFieldValue("Specialty", viewSettings.Specialty);
            lead.SetFieldValue("RequestedPhysician", viewSettings.ProviderName);
            lead.SetFieldValue("PreferredLocation", viewSettings.Location);
            lead.SetFieldValue("Insurance", viewSettings.Insurance);
            lead.SetFieldValue("AppointmentDate", viewSettings.AppointmentDate);
            lead.SetFieldValue("GroupNumber", viewSettings.GroupNumber);
            lead.SetFieldValue("MemberId", viewSettings.MemberId);
            lead.SetFieldValue("SymptomsOrComments", viewSettings.Comments);

            LeadManagementHelper.SubmitLeadDataAsync(lead, dataProxy, viewSettings, parameters);
        }
        private PublicModels.ProviderAppointmentView.ProviderAppointmentView SetControlValues(ModuleInstanceView parent, PublicModels.ProviderAppointmentView.ProviderAppointmentView viewSettings, IDictionary<string, string> parameters)
        {
            int orgUnitId;
            int providerId;

            string location;
            string provider;

            if (!parameters.TryGetValue("LocationId", out location))
                return viewSettings;

            if (!parameters.TryGetValue("ProviderId", out provider))
                return viewSettings;

            if (!int.TryParse(location, out orgUnitId))
                return viewSettings;

            if (!int.TryParse(provider, out providerId))
                return viewSettings;

            GetSpecialtiesList(parent, viewSettings, orgUnitId, providerId);
            GetInsuranceList(parent, viewSettings, orgUnitId, providerId);
            GetLocationList(parent, viewSettings, orgUnitId, providerId);
            GetProviderName(parent, viewSettings, orgUnitId, providerId);

            return viewSettings;
        }