private List<Field> BuildFields(OrgUnitDto orgUnitDto, bool newRecord)
        {
            var request = new ReadCustomFieldSettingsRequest();
            var customFieldSettings = ProcessRequest<ReadCustomFieldSettingsResponse>(request).CustomFields;

            var fields = new List<Field>();

            if (!newRecord)
                fields.Add(new Field(_idField, "Id", FieldTypes.Label, orgUnitDto.Id));
            else
                fields.Add(new Field(_idField, "Id", FieldTypes.Hidden, 0));

            fields.Add(new Field(_externalIdField, "External Id", FieldTypes.Label, orgUnitDto.ExternalId));
            fields.Add(new Field(_isEnabledField, "Enabled", FieldTypes.Checkbox, newRecord ? true : orgUnitDto.IsEnabled));
            fields.Add(new Field(_nameField, "Name", FieldTypes.Text, orgUnitDto.Name, true));
            fields.Add(new Field(_address1Field, "Address1", FieldTypes.Text, orgUnitDto.Address1));
            fields.Add(new Field(_address2Field, "Address2", FieldTypes.Text, orgUnitDto.Address2));
            fields.Add(new Field(_cityField, "City", FieldTypes.Text, orgUnitDto.City));

            var stateField = new Field(_stateIdField, "State", FieldTypes.Dropdown, orgUnitDto.StateId);
            foreach (var state in GetStates(orgUnitDto))
                stateField.Options.Add(new KeyValuePair<object, object>(state.Id, state.Name));
            fields.Add(stateField);

            fields.Add(new Field(_postalCodeField, "Postal Code", FieldTypes.Text, orgUnitDto.PostalCode));

            var countryField = new Field(_countryIdField, "Country", FieldTypes.Dropdown, orgUnitDto.CountryId);
            foreach (var country in GetCountries(orgUnitDto))
                countryField.Options.Add(new KeyValuePair<object, object>(country.Id, country.Name));
            fields.Add(countryField);

            fields.Add(new Field("GeocodeButton", string.Empty, FieldTypes.LinkButton, "Geocode this Address") { OnClickCommand = "GeocodeAddressClicked" });
            fields.Add(new Field(_hasCustomCoordinatesField, "Custom Coordinates", FieldTypes.Checkbox, orgUnitDto.HasCustomCoordinates) { OnChangeCommand = "HasCustomCoordinatesChanged" });
            fields.Add(new Field(_latitudeField, "Latitude", FieldTypes.Text, orgUnitDto.Latitude) { IsDisabled = !orgUnitDto.HasCustomCoordinates });
            fields.Add(new Field(_longitudeField, "Longitude", FieldTypes.Text, orgUnitDto.Longitude) { IsDisabled = !orgUnitDto.HasCustomCoordinates });

            if (!DigitalAssetManager.IsImageManagementEnabled())
                fields.Add(new Field(_imageUrlField, "Image URL", FieldTypes.URL, orgUnitDto.ImageUrl));

            fields.Add(new Field(_costCenterField, "Cost Center", FieldTypes.Text, orgUnitDto.CostCenter));
            fields.Add(new Field(_phoneField, "Phone", FieldTypes.Phone, orgUnitDto.Phone));
            fields.Add(new Field(_faxField, "Fax", FieldTypes.Phone, orgUnitDto.Fax));
            fields.Add(new Field(_emailField, "Email", FieldTypes.Email, orgUnitDto.Email));
            fields.Add(new Field(_serviceLineUrlField, "Service Line URL", FieldTypes.URL, orgUnitDto.ServiceLineUrl));
            fields.Add(new Field(_potentialEventLocationField, "Potential Event Location", FieldTypes.Checkbox, orgUnitDto.PotentialEventLocation));
            fields.Add(new Field(_descriptionField, "Description", FieldTypes.WYSIWYG, orgUnitDto.Description));
            fields.Add(new Field(_customKeywordsField, "Custom Keywords", FieldTypes.MultiLineText, orgUnitDto.CustomKeywords) { NumberOfRows = 3 });
            fields.Add(new Field(_generatedKeywordsField, "Generated Keywords", FieldTypes.MultiLineText, orgUnitDto.Keywords) { NumberOfRows = 3, IsDisabled = true });
            fields.Add(new Field(_customField1Field, "Custom Field 1", FieldTypes.WYSIWYG, orgUnitDto.Custom1));
            fields.Add(new Field(_customField2Field, "Custom Field 2", FieldTypes.WYSIWYG, orgUnitDto.Custom2));
            fields.Add(new Field(_customField3Field, "Custom Field 3", FieldTypes.WYSIWYG, orgUnitDto.Custom3));
            fields.Add(new Field(_seoPageTitleField, "SEO Page Title", FieldTypes.Text, orgUnitDto.SeoPageTitle));
            fields.Add(new Field(_seoPageDescriptionField, "SEO Page Description", FieldTypes.MultiLineText, orgUnitDto.SeoPageDescription));
            fields.Add(new Field(_seoH1Field, "SEO H1", FieldTypes.Text, orgUnitDto.SeoH1Tag));
            fields.Add(new Field(_seoPrimaryKeywordField, "SEO Primary Keyword", FieldTypes.Text, orgUnitDto.SeoPrimaryKeyword));
            fields.Add(new Field(_seoSecondaryKeywordField, "SEO Secondary Keyword", FieldTypes.Text, orgUnitDto.SeoSecondaryKeyword));
            fields.Add(new Field(_seoCanonicalUrlField, "SEO Canonical URL", FieldTypes.Text, orgUnitDto.SeoCanonicalUrl));

            fields.AddRange(CommonUtils.BuildDynamicColumnsFields(this, orgUnitDto.DynamicColumnData, Constants.OrgUnitDynamicColumnEntityId));

            var paymentGatewayFieldSelectedValue = orgUnitDto.PaymentProcessorConfigurationId.HasValue ? orgUnitDto.PaymentProcessorConfigurationId.Value : -1;
            var paymentGatewayField = new Field(_paymentGateway, "Payment Gateway", FieldTypes.Dropdown, paymentGatewayFieldSelectedValue);
            paymentGatewayField.Options.Add(new KeyValuePair<object, object>(-1, string.Empty));
            foreach (var paymentGateway in GetPaymentGateways())
                paymentGatewayField.Options.Add(new KeyValuePair<object, object>(paymentGateway.Id, paymentGateway.PaymentSettingName));
            fields.Add(paymentGatewayField);

            return fields;
        }
        private List<Field> BuildFields(PayflowProSettingsDto settings, bool newRecord)
        {
            var fields = new List<Field>();

            if (!newRecord)
                fields.Add(new Field(_idField, "Payflow Pro Id", FieldTypes.Label, settings.Id));
            else
                fields.Add(new Field(_idField, "Payflow Pro Id", FieldTypes.Hidden, 0));

            fields.Add(new Field(_configurationName, "Configuration Name", FieldTypes.Text, settings.Name, true));
            fields.Add(new Field(_userId, "User Id", FieldTypes.Text, settings.UserId, true));
            fields.Add(new Field(_vendorId, "Vendor Id", FieldTypes.Text, settings.VendorId, true));
            fields.Add(new Field(_password, "Password", FieldTypes.Password, settings.Password, true));
            fields.Add(new Field(_partner, "Partner", FieldTypes.Text, settings.Partner, true));
            fields.Add(new Field(_requireCardHolderName, "Require Card Holder Name", FieldTypes.Checkbox, settings.RequireCardHolderName));
            fields.Add(new Field(_useAddressValidation, "Use Address Verfication", FieldTypes.Checkbox, settings.UseAddressVerfication));
            fields.Add(new Field(_userCardVerificationCode, "Use Card Verification Code", FieldTypes.Checkbox, settings.UseCardVerificationCode));

            var environment = new Field(_environment, "Environment", FieldTypes.Dropdown, settings.Environment, true);
            environment.Options.Add(new KeyValuePair<object, object>("Sandbox", "Sandbox"));
            environment.Options.Add(new KeyValuePair<object, object>("Live", "Live"));
            fields.Add(environment);

            if (!newRecord)
                AddTestSettingsField(settings.Id.ToString(), fields);

            return fields;
        }
        private static void AddNewRecordTemplate(ProviderAdminDetailView parent, int providerId)
        {
            _subEntity.NewRecordTemplate = new SubEntityRecord(){};

            _subEntity.NewRecordTemplate.Fields.Add(new Field(_providerId, "ProviderId", FieldTypes.Hidden, providerId));
            _subEntity.NewRecordTemplate.Fields.Add(new Field(_name, "Name", FieldTypes.Text, string.Empty, true) { Focus = true });

            var specialtyTypeField = new Field(_specialtyType, "Type", FieldTypes.Dropdown, "Specialty") { OnChangeCommand = "SpecialtyTypeChanged" };
            specialtyTypeField.Options.Add(new KeyValuePair<object, object>("Specialty", "Specialty"));
            specialtyTypeField.Options.Add(new KeyValuePair<object, object>("Condition", "Condition"));
            _subEntity.NewRecordTemplate.Fields.Add(specialtyTypeField);

            _subEntity.NewRecordTemplate.Fields.Add(new Field(_isPrimary, "Is Primary", FieldTypes.Checkbox, false));
            _subEntity.NewRecordTemplate.Fields.Add(new Field(_isBoardCertified, "Is Board Certified", FieldTypes.Checkbox, false));
        }
        private List<Field> BuildFields(ProviderDto providerDto, bool newRecord)
        {
            var request = new ReadCustomFieldSettingsRequest();
            var customFieldSettings = ProcessRequest<ReadCustomFieldSettingsResponse>(request).CustomFields;

            var fields = new List<Field>();

            if (!newRecord)
                fields.Add(new Field(_id, "Id", FieldTypes.Label, providerDto.Id));
            else
                fields.Add(new Field(_id, "Id", FieldTypes.Hidden, 0));

            fields.Add(new Field(_externalId, "External Id", FieldTypes.Label, providerDto.ExternalId));
            fields.Add(new Field(_npi, "NPI", FieldTypes.Text, providerDto.Npi) { Focus = true });
            fields.Add(new Field(_isEnabled, "Enabled", FieldTypes.Checkbox, newRecord ? true : providerDto.IsEnabled));
            fields.Add(new Field(_namePrefix, "Prefix", FieldTypes.Text, providerDto.NamePrefix));
            fields.Add(new Field(_firstName, "First Name", FieldTypes.Text, providerDto.FirstName, true));
            fields.Add(new Field(_middleName, "Middle Name", FieldTypes.Text, providerDto.MiddleName));
            fields.Add(new Field(_lastName, "Last Name", FieldTypes.Text, providerDto.LastName, true));
            fields.Add(new Field(_nameSuffix, "Suffix", FieldTypes.Text, providerDto.NameSuffix));
            fields.Add(new Field(_additionalSuffix, "Additional Suffix", FieldTypes.Text, providerDto.AdditionalSuffix));

            if (!DigitalAssetManager.IsImageManagementEnabled())
                fields.Add(new Field(_imageUrl, "Image URL", FieldTypes.URL, providerDto.ImageUrl));

            var genderField = new Field(_gender, "Gender", FieldTypes.Dropdown, providerDto.GenderId);
            foreach (var gender in GetGenders(providerDto))
                genderField.Options.Add(new KeyValuePair<object, object>(gender.Id, gender.Name));
            fields.Add(genderField);

            var providerGroupField = new Field(_providerGroup, "Provider Group", FieldTypes.Dropdown, providerDto.ProviderGroupId);
            foreach (var group in GetProviderGroups(providerDto))
                providerGroupField.Options.Add(new KeyValuePair<object, object>(group.Id, group.Name));
            fields.Add(providerGroupField);

            if (!newRecord)
                fields.Add(new Field(_directUrl, "Direct URL", FieldTypes.Label, providerDto.DirectUrl));

            fields.Add(new Field(_dateOfBirth, "Date of Birth", FieldTypes.DatePicker, providerDto.DateOfBirth));
            fields.Add(new Field(_inPracticeSince, "In Practice Since", FieldTypes.DatePicker, providerDto.InPracticeSince));
            fields.Add(new Field(_email, "Primary Email", FieldTypes.Email, providerDto.Email));
            fields.Add(new Field(_phone, "Primary Phone", FieldTypes.Phone, providerDto.Phone));
            fields.Add(new Field(_fax, "Primary Fax", FieldTypes.Phone, providerDto.Fax));
            fields.Add(new Field(_website, "Primary Website", FieldTypes.WYSIWYG, providerDto.Website, true));
            fields.Add(new Field(_aboutMe, "About Me", FieldTypes.WYSIWYG, providerDto.AboutMe, true));
            fields.Add(new Field(_additionalInfo, "Additional Information", FieldTypes.WYSIWYG, providerDto.AdditionalInformation, true));
            fields.Add(new Field(_philosophyOfCare, "Philosophy Of Care", FieldTypes.WYSIWYG, providerDto.PhilosophyOfCare, true));
            fields.Add(new Field(_videoContent, "Video Content", FieldTypes.WYSIWYG, providerDto.VideoContent, true));
            fields.Add(new Field(_custom1, customFieldSettings.ProviderCustom1Name, FieldTypes.WYSIWYG, providerDto.Custom1, true));
            fields.Add(new Field(_custom2, customFieldSettings.ProviderCustom2Name, FieldTypes.WYSIWYG, providerDto.Custom2, true));
            fields.Add(new Field(_custom3, customFieldSettings.ProviderCustom3Name, FieldTypes.WYSIWYG, providerDto.Custom3, true));
            fields.Add(new Field(_customKeywords, "Custom Keywords", FieldTypes.MultiLineText, providerDto.CustomKeywords) { NumberOfRows = 3 });
            fields.Add(new Field(_keywords, "Generated Keywords", FieldTypes.MultiLineText, providerDto.Keywords) { NumberOfRows = 3, IsDisabled = true });
            fields.Add(new Field(_excludedWords, "Excluded Words", FieldTypes.MultiLineText, providerDto.ExcludedKeywords) { NumberOfRows = 3 });
            fields.Add(new Field(_seoPageTitle, "SEO Page Title", FieldTypes.Text, providerDto.SeoPageTitle));
            fields.Add(new Field(_seoPageDescription, "SEO Page Description", FieldTypes.MultiLineText, providerDto.SeoPageDescription));
            fields.Add(new Field(_seoH1, "SEO H1", FieldTypes.Text, providerDto.SeoH1Tag));
            fields.Add(new Field(_seoPrimaryKeyword, "SEO Primary Keyword", FieldTypes.Text, providerDto.SeoPrimaryKeyword));
            fields.Add(new Field(_seoSecondaryKeyword, "SEO Secondary Keyword", FieldTypes.Text, providerDto.SeoSecondaryKeyword));
            fields.Add(new Field(_seoCanonicalUrl, "SEO Canonical URL", FieldTypes.Text, providerDto.SeoCanonicalUrl));

            fields.AddRange(CommonUtils.BuildDynamicColumnsFields(this, providerDto.DynamicColumnData, Constants.ProviderDynamicColumnEntityId));

            if (!newRecord)
                fields.Add(new Field(_lastUpdated, "Last Updated", FieldTypes.Label, providerDto.UpdatedDate.HasValue ? providerDto.UpdatedDate.Value.ToString("M/d/yy h:mm tt") : null));

            return fields;
        }