From cf1528bdb46a5c774b31e29a58230f109aad57c8 Mon Sep 17 00:00:00 2001 From: David Cuentas Mar Date: Sun, 8 Sep 2024 09:59:59 -0500 Subject: [PATCH 01/81] fadein() null check --- .../default/staticresources/SummitEventsAssets/js/loading.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/force-app/main/default/staticresources/SummitEventsAssets/js/loading.js b/force-app/main/default/staticresources/SummitEventsAssets/js/loading.js index 364472b0..52e7e50f 100644 --- a/force-app/main/default/staticresources/SummitEventsAssets/js/loading.js +++ b/force-app/main/default/staticresources/SummitEventsAssets/js/loading.js @@ -29,7 +29,9 @@ loadReady(() => { function fadein() { let fadeWrapper = document.getElementById('backpage'); - fadeWrapper.style.display = "none"; + if(fadeWrapper){ + fadeWrapper.style.display = "none"; + } return true; } From 62dd43d93aebe3e48e302817381f736405c420ad Mon Sep 17 00:00:00 2001 From: David Cuentas Mar Date: Sun, 8 Sep 2024 10:00:28 -0500 Subject: [PATCH 02/81] populateAppJSON() not executed when page renders --- .../default/staticresources/SummitEventsAssets/js/options.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/force-app/main/default/staticresources/SummitEventsAssets/js/options.js b/force-app/main/default/staticresources/SummitEventsAssets/js/options.js index f0b89b2d..a0c0bc57 100644 --- a/force-app/main/default/staticresources/SummitEventsAssets/js/options.js +++ b/force-app/main/default/staticresources/SummitEventsAssets/js/options.js @@ -42,8 +42,6 @@ appointmentsReady(() => { title.innerHTML = title.innerHTML.replace(regExDouble, '\"'); }) - populateAppJSON(); - //Initiate add buttons in chooser column if (chooser) { chooser.querySelectorAll(".appointmentAdd").forEach(function (appButton) { From a7b3cdc6a671a3c1738cb96a73e4264937b1b49c Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:27:14 -0600 Subject: [PATCH 03/81] removed field check in test --- .../default/classes/SummitEventsTestSharedDataFactory.cls | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls b/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls index 56cf2c8a..0e0bde21 100644 --- a/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls +++ b/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls @@ -225,10 +225,8 @@ public with sharing class SummitEventsTestSharedDataFactory { List fieldsCreatable = new List (); for (Schema.SObjectField sField : fieldMap.values()) { Schema.DescribeFieldResult dField = sField.getDescribe(); - if (dField.isAccessible() && dField.isCreateable()) { - if (String.valueOf(dField.getType()).equalsIgnoreCase('textarea')) { - fieldsCreatable.add(dField.getName()); - } + if (String.valueOf(dField.getType()).equalsIgnoreCase('textarea')) { + fieldsCreatable.add(dField.getName()); } } From 4779748a9459b152d70a2a158259b61c06cc316e Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 6 Dec 2024 17:02:44 -0600 Subject: [PATCH 04/81] updated gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b37abced..cc29ea45 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ robot/SummitEventsApp/results/ # Illuminated Cloud (IntelliJ IDEA) IlluminatedCloud +.illuminatedCloud/ out .idea *.iml From ebcb0cdeadf28178413c66c4d38ca32fdc8ab21b Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 6 Dec 2024 17:03:13 -0600 Subject: [PATCH 05/81] updated gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index cc29ea45..a31560a4 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ .sf /src.orig /src -.sf # Python *.pyc @@ -28,7 +27,6 @@ robot/SummitEventsApp/results/ IlluminatedCloud .illuminatedCloud/ out -.idea *.iml # CumulusCI From 6898dd47e71eb2ac02299aebba1c3b187e707775 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 6 Dec 2024 17:07:38 -0600 Subject: [PATCH 06/81] Added fields for person account matching configurations --- .../default/classes/SummitEventsShared.cls | 19 +++++++++ ...a_Person_Matching_Method__c.field-meta.xml | 41 +++++++++++++++++++ ..._Creation_Duplicate_Rule__c.field-meta.xml | 36 ++++++++++++++++ ..._Multiple_Match_Behavior__c.field-meta.xml | 26 ++++++++++++ ...tching_No_Match_Behavior__c.field-meta.xml | 25 +++++++++++ .../Person_Matching_Rules__c.field-meta.xml | 23 +++++++++++ 6 files changed, 170 insertions(+) create mode 100644 force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events__c/fields/Person_Creation_Duplicate_Rule__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_Multiple_Match_Behavior__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_No_Match_Behavior__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_Rules__c.field-meta.xml diff --git a/force-app/main/default/classes/SummitEventsShared.cls b/force-app/main/default/classes/SummitEventsShared.cls index 752cb5b8..48189355 100644 --- a/force-app/main/default/classes/SummitEventsShared.cls +++ b/force-app/main/default/classes/SummitEventsShared.cls @@ -616,6 +616,25 @@ public with sharing class SummitEventsShared { return pickList; } + // Test to see if person accounts are enabled. + public static Boolean personAccountsEnabled() + { + try + { + // Try to use the isPersonAccount field. + sObject testObject = new Account(); + testObject.get( 'isPersonAccount' ); + // If we got here without an exception, return true. + return true; + } + catch( Exception ex ) + { + // An exception was generated trying to access the isPersonAccount field + // so person accounts aren't enabled; return false. + return false; + } + } + //Method to test object and field availability for current user (Guest user) public static String checkFieldGuestAccess(String objectApiName, String fieldName, String requiredFieldType, Boolean testCreatable, String qualifierLabel) { String returnError = ''; diff --git a/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml b/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml new file mode 100644 index 00000000..570c795b --- /dev/null +++ b/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml @@ -0,0 +1,41 @@ + + + Custom_Metadata_Person_Matching_Method__c + false + + false + false + false + Picklist + + true + + false + + Admissions + false + + + + Blue + false + + + + Green + false + + + + Red + false + + + + Yellow + false + + + + + diff --git a/force-app/main/default/objects/Summit_Events__c/fields/Person_Creation_Duplicate_Rule__c.field-meta.xml b/force-app/main/default/objects/Summit_Events__c/fields/Person_Creation_Duplicate_Rule__c.field-meta.xml new file mode 100644 index 00000000..e5f2ccfa --- /dev/null +++ b/force-app/main/default/objects/Summit_Events__c/fields/Person_Creation_Duplicate_Rule__c.field-meta.xml @@ -0,0 +1,36 @@ + + + Person_Creation_Duplicate_Rule__c + The name of the Salesforce Duplicate Rule used as the logic for custom Person Account Matching + false + + false + false + false + Picklist + + Person_Matching_Rules__c + true + + false + + Summit Events Person Account Creation + false + + + + Standard Person Account Duplicate Rule + false + + + + + Use Salesforce Duplicate Rule + Summit Events Person Account Creation + + + Use Salesforce Duplicate Rule + Standard Person Account Duplicate Rule + + + diff --git a/force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_Multiple_Match_Behavior__c.field-meta.xml b/force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_Multiple_Match_Behavior__c.field-meta.xml new file mode 100644 index 00000000..360f3b0d --- /dev/null +++ b/force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_Multiple_Match_Behavior__c.field-meta.xml @@ -0,0 +1,26 @@ + + + Person_Matching_Multiple_Match_Behavior__c + false + + false + false + false + Picklist + + true + + false + + Match with most recently modified + true + + + + Skip matching + false + + + + + diff --git a/force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_No_Match_Behavior__c.field-meta.xml b/force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_No_Match_Behavior__c.field-meta.xml new file mode 100644 index 00000000..bca08f5d --- /dev/null +++ b/force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_No_Match_Behavior__c.field-meta.xml @@ -0,0 +1,25 @@ + + + Person_Matching_No_Match_Behavior__c + false + + false + false + false + Picklist + + + false + + Create Person Account + true + + + + Skip Creating Person Account + false + + + + + diff --git a/force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_Rules__c.field-meta.xml b/force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_Rules__c.field-meta.xml new file mode 100644 index 00000000..f67e5f42 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events__c/fields/Person_Matching_Rules__c.field-meta.xml @@ -0,0 +1,23 @@ + + + Person_Matching_Rules__c + The type of person account matching you wish to use if allow for it in the person account creation settings. + false + The type of person account matching you wish to use if allow for it in the person account creation settings. + + false + false + false + Picklist + + true + + false + + Use Salesforce Duplicate Rule + false + + + + + From 69b68ab0d2723ea88715014684b6887c75729c4a Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 6 Dec 2024 17:16:46 -0600 Subject: [PATCH 07/81] Added layouts and permissions for person account matching --- ...mmit_Events_Record_Page.flexipage-meta.xml | 100 ++++++++++++++++++ ...Summit_Events_Admin.permissionset-meta.xml | 25 +++++ ...t_Events_Registrant.permissionset-meta.xml | 25 +++++ 3 files changed, 150 insertions(+) diff --git a/force-app/main/default/flexipages/Summit_Events_Record_Page.flexipage-meta.xml b/force-app/main/default/flexipages/Summit_Events_Record_Page.flexipage-meta.xml index e9c32362..883f17a0 100644 --- a/force-app/main/default/flexipages/Summit_Events_Record_Page.flexipage-meta.xml +++ b/force-app/main/default/flexipages/Summit_Events_Record_Page.flexipage-meta.xml @@ -2476,6 +2476,88 @@ Facet-514adf7f-50da-4869-8bfa-25344d64cd70 Facet + + + + + uiBehavior + none + + Record.Person_Matching_Rules__c + RecordPerson_Matching_Rules_cField + + + + + + uiBehavior + none + + Record.Person_Creation_Duplicate_Rule__c + RecordPerson_Creation_Duplicate_Rule_cField + + + + + + uiBehavior + none + + Record.Custom_Metadata_Person_Matching_Method__c + RecordCustom_Metadata_Person_Matching_Method_cField + + + Facet-ac8e3d0b-870a-4b48-a3b5-52fd82d4ebd9 + Facet + + + + + + uiBehavior + none + + Record.Person_Matching_No_Match_Behavior__c + RecordPerson_Matching_No_Match_Behavior_cField + + + + + + uiBehavior + none + + Record.Person_Matching_Multiple_Match_Behavior__c + RecordPerson_Matching_Multiple_Match_Behavior_cField + + + Facet-0cab5c79-911b-4bd1-a8ac-25bfa23229eb + Facet + + + + + + body + Facet-ac8e3d0b-870a-4b48-a3b5-52fd82d4ebd9 + + flexipage:column + flexipage_column3 + + + + + + body + Facet-0cab5c79-911b-4bd1-a8ac-25bfa23229eb + + flexipage:column + flexipage_column4 + + + Facet-b0202753-acc5-45d9-aba9-87e527f49ad9 + Facet + @@ -2587,6 +2669,24 @@ flexi_field_sec_22 + + + + columns + Facet-b0202753-acc5-45d9-aba9-87e527f49ad9 + + + horizontalAlignment + false + + + label + Person Account Matching + + flexipage:fieldSection + flexipage_fieldSection2 + + diff --git a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml index 1403e4c8..4f8e9c07 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml @@ -1942,6 +1942,11 @@ Summit_Events__c.Custom_Metadata_Lead_Matching_Method__c true + + true + Summit_Events__c.Custom_Metadata_Person_Matching_Method__c + true + true Summit_Events__c.Date_Of_Birth_Label__c @@ -2452,6 +2457,26 @@ Summit_Events__c.Payment_Gateway__c true + + true + Summit_Events__c.Person_Creation_Duplicate_Rule__c + true + + + true + Summit_Events__c.Person_Matching_Multiple_Match_Behavior__c + true + + + true + Summit_Events__c.Person_Matching_No_Match_Behavior__c + true + + + true + Summit_Events__c.Person_Matching_Rules__c + true + true Summit_Events__c.Phone_Label__c diff --git a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml index a600a34c..669c9bcc 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml @@ -1820,6 +1820,11 @@ Summit_Events__c.Custom_Metadata_Lead_Matching_Method__c true + + false + Summit_Events__c.Custom_Metadata_Person_Matching_Method__c + true + false Summit_Events__c.Date_Of_Birth_Label__c @@ -2330,6 +2335,26 @@ Summit_Events__c.Payment_Gateway__c true + + false + Summit_Events__c.Person_Creation_Duplicate_Rule__c + true + + + false + Summit_Events__c.Person_Matching_Multiple_Match_Behavior__c + true + + + false + Summit_Events__c.Person_Matching_No_Match_Behavior__c + true + + + false + Summit_Events__c.Person_Matching_Rules__c + true + false Summit_Events__c.Phone_Label__c From 5747a99c68d79c1b576933c8b016d4161ceea82f Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Sat, 7 Dec 2024 08:43:05 -0600 Subject: [PATCH 08/81] Added educloud org definition, fixed permissions for educloud --- cumulusci.yml | 8 +- datasets/snowfakery/school_recipe.yml | 10 +- ...t_Events_Registrant.permissionset-meta.xml | 9 ++ orgs/educloud.json | 103 ++++++++++++++++++ orgs/{dev_namespaced.json => namespaced.json} | 0 5 files changed, 125 insertions(+), 5 deletions(-) create mode 100644 orgs/educloud.json rename orgs/{dev_namespaced.json => namespaced.json} (100%) diff --git a/cumulusci.yml b/cumulusci.yml index 2262a0b6..3334b600 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -181,7 +181,13 @@ plans: orgs: scratch: + dev_namespaced: config_file: orgs/namespaced.json days: 7 - namespaced: true \ No newline at end of file + namespaced: true + + dev: + config_file: orgs/educloud.json + days: 7 + namespaced: false \ No newline at end of file diff --git a/datasets/snowfakery/school_recipe.yml b/datasets/snowfakery/school_recipe.yml index cd96b8be..dd752fdb 100644 --- a/datasets/snowfakery/school_recipe.yml +++ b/datasets/snowfakery/school_recipe.yml @@ -24,11 +24,13 @@ probability: 50% pick: ${{fake.city}} University BillingCity: - fake: city + fake: City BillingStreet: - fake: street_address + fake: StreetAddress BillingState: - fake: state + fake: State BillingCountry: - fake: country + fake: CurrentCountry + Phone: + fake: PhoneNumber Industry: Education diff --git a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml index 669c9bcc..888be6cb 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml @@ -2481,6 +2481,15 @@ Account false + + false + false + false + true + false + Contact + false + true false diff --git a/orgs/educloud.json b/orgs/educloud.json new file mode 100644 index 00000000..5c32759e --- /dev/null +++ b/orgs/educloud.json @@ -0,0 +1,103 @@ +{ + "orgName": "Summit Events Dev", + "edition": "Developer", + "features": [ + "Sites", + "EducationCloud:10", + "AccountingSubledgerGrowthEdition", + "AccountingSubledgerUser", + "AnalyticsQueryService", + "Assessments", + "Communities", + "ContactsToMultipleAccounts", + "DataProcessingEngine", + "DecisionTable", + "DocumentChecklist", + "EnableSetPasswordInApi", + "FSCAlertFramework", + "Fundraising", + "IndustriesActionPlan", + "IndustriesSalesExcellenceAddOn", + "IndustriesServiceExcellenceAddOn", + "LightningScheduler", + "LightningServiceConsole", + "MarketingUser", + "OmniStudioDesigner", + "OmniStudioRuntime", + "PersonAccounts", + "PublicSectorAccess", + "StateAndCountryPicklist" + ], + "settings": { + "accountSettings": { + "enableRelateContactToMultipleAccounts": true + }, + "apexSettings": { + "enableDisableParallelApexTesting": true + }, + "chatterSettings": { + "enableChatter": true + }, + "communitiesSettings": { + "enableCommunityWorkspaces": true, + "enableNetworksEnabled": true + }, + "DocumentChecklistSettings": { + "deleteDCIWithFiles": true + }, + "enhancedNotesSettings": { + "enableEnhancedNotes": true + }, + "ForecastingSettings": { + "enableForecasts": true + }, + "lightningExperienceSettings": { + "enableS1DesktopEnabled": true + }, + "mobileSettings": { + "enableS1EncryptedStoragePref2": false + }, + "industriesSettings": { + "enableAcademicOperations": true, + "enableAlumniRelations": true, + "enableBenefitManagementPreference": true, + "enableBenefitAndGoalSharingPref": true, + "enableCarePlansPreference": true, + "enableDiscoveryFrameworkMetadata": true, + "enableEducationCloud": true, + "enableGroupMembershipPref": true, + "enableIndustriesAssessment": true, + "enableInteractionSummaryPref": true, + "enableInteractionSummaryRoleHierarchy": true, + "enableStudentSuccess": true + }, + "InterestTaggingSettings": { + "enableInterestTagging": true + }, + "nameSettings": { + "enableMiddleName": true, + "enableNameSuffix": true + }, + "OpportunitySettings": { + "enableOpportunityTeam": true + }, + "productSettings": { + "enableRevenueSchedule": true + }, + "userManagementSettings": { + "enableEnhancedPermsetMgmt": true, + "enableEnhancedProfileMgmt": true, + "enableNewProfileUI": true, + "permsetsInFieldCreation": true + }, + "securitySettings": { + "enableAdminLoginAsAnyUser": true, + "sessionSettings": { + "forceRelogin": false + } + }, + "languageSettings": { + "enableTranslationWorkbench": true + } + } +} \ No newline at end of file diff --git a/orgs/dev_namespaced.json b/orgs/namespaced.json similarity index 100% rename from orgs/dev_namespaced.json rename to orgs/namespaced.json From ac2df1fe2da536f56a9c5a033545e47891f32e63 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Sun, 8 Dec 2024 16:24:27 -0600 Subject: [PATCH 09/81] consolidated and optimized duplicate matching class --- .forceignore | 5 + .gitignore | 9 +- cumulusci.yml | 2 +- .../classes/SummitEventsContactMatching.cls | 558 +++++++----------- .../fields/Person_Account__c.field-meta.xml | 14 + 5 files changed, 240 insertions(+), 348 deletions(-) create mode 100644 .forceignore create mode 100644 force-app/main/default/objects/Summit_Events_Registration__c/fields/Person_Account__c.field-meta.xml diff --git a/.forceignore b/.forceignore new file mode 100644 index 00000000..eeed72a8 --- /dev/null +++ b/.forceignore @@ -0,0 +1,5 @@ +/.illuminatedCloud/ +**/*.ts +**/tsconfig*.json +**/*.tsbuildinfo +**/eslint.config.mjs \ No newline at end of file diff --git a/.gitignore b/.gitignore index a31560a4..ff26aa52 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,11 @@ out *.iml # CumulusCI -/test_results.* \ No newline at end of file +/test_results.* + +# Added by Illuminated Cloud +.localdev/ +target/ +node_modules/ +**/tsconfig*.json +**/*.tsbuildinfo \ No newline at end of file diff --git a/cumulusci.yml b/cumulusci.yml index 3334b600..e9288940 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -188,6 +188,6 @@ orgs: namespaced: true dev: - config_file: orgs/educloud.json + config_file: orgs/dev.json days: 7 namespaced: false \ No newline at end of file diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index 1da839ef..fa9ec53d 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -6,7 +6,6 @@ public with sharing class SummitEventsContactMatching { public static void matchContacts(List newRegistrations) { - Map matchingRules = new Map(); for (Summit_Events_Registration__c reg : newRegistrations) { @@ -14,126 +13,108 @@ public with sharing class SummitEventsContactMatching { } if (Schema.SObjectType.Summit_Events__c.isAccessible()) { - for (Summit_Events__c event : [ - SELECT Id, Contact_Matching_Rules__c, Lead_matching_rules__c + matchingRules = new Map([ + SELECT Id, Contact_Matching_Rules__c, Lead_matching_rules__c, Person_Matching_Rules__c, + Contact_Creation_Duplicate_Rule__c, Custom_Metadata_Contact_Matching_Method__c, Contact_Matching_Multiple_Match_Behavior__c, Contact_Matching_No_Match_Behavior__c, + Lead_Creation_Duplicate_Rule__c, Custom_Metadata_Lead_Matching_Method__c, Lead_Matching_Multiple_Match_Behavior__c, Lead_Matching_No_Match_Behavior__c FROM Summit_Events__c WHERE Id IN :matchingRules.keySet() - ]) { - matchingRules.put(event.Id, event); - } + AND (Custom_Metadata_Contact_Matching_Method__c != null OR Custom_Metadata_Lead_Matching_Method__c != null) + ]); } - List byDuplicateRule = new List(); - List findLead = new List(); + if (!matchingRules.isEmpty()) { - for (Summit_Events_Registration__c reg : newRegistrations) { - setNumberFields(reg); - Summit_Events__c event = matchingRules.get(reg.Event__c); - if (event.Contact_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && String.isBlank(reg.Contact__c)) { - byDuplicateRule.add(reg); - } else if (event.Lead_matching_rules__c == 'Use Salesforce Duplicate Rule' && String.isBlank(reg.Contact__c) && String.isBlank(reg.Lead__c)) { - findLead.add(reg); + // Setting up contact matching methods and mappings + Set matchingMethods = new Set(); + Map> contactMappings = new Map>(); + for (Summit_Events__c evt : matchingRules.values()) { + matchingMethods.add(evt.Custom_Metadata_Contact_Matching_Method__c); + } + if (!matchingMethods.isEmpty()) { + contactMappings = processMappings(matchingMethods, 'Summit_Events_Contact_Matching_Mapping__mdt', 'Contact_Matching_Method__c', 'Contact_Field_API_Name__c'); } - } - if (!byDuplicateRule.isEmpty()) { - matchContactsByDuplicateRule(byDuplicateRule); - } + // Setting up lead matching methods and mappings + Set leadMatchingMethods = new Set(); + Map> leadMappings = new Map>(); + for (Summit_Events__c evt : matchingRules.values()) { + leadMatchingMethods.add(evt.Custom_Metadata_Lead_Matching_Method__c); + } + if (!leadMatchingMethods.isEmpty()) { + leadMappings = processMappings(leadMatchingMethods, 'Summit_Events_Lead_Matching_Mapping__mdt', 'Lead_Matching_Method__c', 'Lead_Field_API_Name__c'); + } - if (!findLead.isEmpty()) { - leadSearch(findLead); - } - } + List byDuplicateRule = new List(); + List findLead = new List(); + List findPerson = new List(); - private static void setNumberFields(Summit_Events_Registration__c reg) { - try { - reg.Answer_1_Numeric__c = Integer.valueOf(reg.Add_Info_Answer_1__c); - } catch (Exception e) { - reg.Answer_1_Numeric__c = null; - } - try { - reg.Answer_2_Numeric__c = Integer.valueOf(reg.Add_Info_Answer_2__c); - } catch (Exception e) { - reg.Answer_2_Numeric__c = null; - } - try { - reg.Answer_3_Numeric__c = Integer.valueOf(reg.Add_Info_Answer_3__c); - } catch (Exception e) { - reg.Answer_3_Numeric__c = null; - } - try { - reg.Answer_4_Numeric__c = Integer.valueOf(reg.Add_Info_Answer_4__c); - } catch (Exception e) { - reg.Answer_4_Numeric__c = null; - } - try { - reg.Answer_5_Numeric__c = Integer.valueOf(reg.Add_Info_Answer_5__c); - } catch (Exception e) { - reg.Answer_5_Numeric__c = null; - } - } + for (Summit_Events_Registration__c reg : newRegistrations) { - private static void matchContactsByDuplicateRule(List newRegistrations) { - // Make it easy to tell what Matching Rule we're basing this off of - Map matchType = new Map(); - Map leadMatch = new Map(); - Map allEvents = new Map(); - if (Schema.SObjectType.Summit_Events__c.isAccessible()) { - for (Summit_Events__c event : [ - SELECT Id, - Contact_Creation_Duplicate_Rule__c, Custom_Metadata_Contact_Matching_Method__c, Contact_Matching_Multiple_Match_Behavior__c, Contact_Matching_No_Match_Behavior__c, - Lead_Creation_Duplicate_Rule__c, Custom_Metadata_Lead_Matching_Method__c, Lead_Matching_Multiple_Match_Behavior__c, Lead_Matching_No_Match_Behavior__c, Lead_matching_rules__c - FROM Summit_Events__c - WHERE Id IN ( - SELECT Event__c - FROM Summit_Events_Registration__c - WHERE Id IN :newRegistrations - ) - ]) { - String contactRuleName = event.Contact_Creation_Duplicate_Rule__c.replaceAll(' ', '_'); - String leadRuleName = (String.isNotBlank(event.Lead_Creation_Duplicate_Rule__c) ? event.Lead_Creation_Duplicate_Rule__c.replaceAll(' ', '_') : ''); - - matchType.put(event.Id, contactRuleName); - leadMatch.put(event.Id, leadRuleName); - allEvents.put(event.Id, event); + // Find out if Answers are integers and apply to numeric answer fields if so + for (Integer i = 1; i <= 5; i++) { + try { + reg.put('Answer_' + i + '_Numeric__c', Integer.valueOf(reg.get('Add_Info_Answer_' + i + '__c'))); + } catch (Exception e) { + //Can't convert to value to integer so do nothing + } + } + + // Assemble the reg record for lead, person, contact matching + Summit_Events__c event = matchingRules.get(reg.Event__c); + if (event.Contact_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && String.isBlank(reg.Contact__c)) { + byDuplicateRule.add(reg); + } else if (event.Lead_matching_rules__c == 'Use Salesforce Duplicate Rule' && String.isBlank(reg.Contact__c) && String.isBlank(reg.Lead__c)) { + findLead.add(reg); + } else if (event.Person_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && String.isBlank(reg.Person_Account__c)) { + findPerson.add(reg); + } } - } - // Find out which Registrations need new Contacts, creates them, - // and matches with existing Contacts whenever possible as defined by existing Duplicate Rules - for (Summit_Events_Registration__c reg : newRegistrations) { - Summit_Events__c event = allEvents.get(reg.Event__c); - Contact c = makeContact(reg, event.Custom_Metadata_Contact_Matching_Method__c); + if (!byDuplicateRule.isEmpty()) { + searchForContacts(byDuplicateRule, matchingRules, contactMappings, leadMappings); + } - List results = new List(); - doCRUD crud = new doCRUD(); + if (!findLead.isEmpty()) { + leadSearch(findLead, matchingRules, leadMappings); + } - try { // Datacloud.FindDuplicates returns an error if no matching rules are active - List cons = new List(); - cons.add(c); - results = crud.findDuplicateContacts(cons); - } catch (Exception e) { - System.debug(e.getMessage()); + if (!findPerson.isEmpty()) { + //personSearch(findPerson, matchingRules, contactMappings); } + } + } - List matchContacts = new List(); - if (results.size() > 0) { - for (Datacloud.DuplicateResult dr : results[0].getDuplicateResults()) { - if (matchType.get(reg.Event__c) == dr.getDuplicateRule()) { - for (Datacloud.MatchResult mr : dr.getMatchResults()) { - for (Datacloud.MatchRecord mRecord : mr.getMatchRecords()) { - try { - Contact con = (Contact) mRecord.getRecord(); - matchContacts.add(con); - } catch (Exception e){ - System.debug(e); - } - } - } - } + private static Map> processMappings( + Set matchingMethods, + String sObjectType, + String fieldAPIName, + String sourceValue) { + Map> mappings = new Map>(); + if (matchingMethods.size() > 0) { + String query = 'SELECT Source_Value__c, Source_Type__c, ' + fieldAPIName + ', ' + sourceValue + ' FROM ' + sObjectType + ' WHERE ' + fieldAPIName + ' IN :matchingMethods'; + List results = Database.query(query); + for (SObject mapping : results) { + String method = (String) mapping.get(fieldAPIName); + if (!mappings.containsKey(method)) { + mappings.put(method, new List()); } + mappings.get(method).add(mapping); } + } + return mappings; + } + private static void searchForContacts(List newRegistrations, Map matchingRules, Map> contactMappings, Map> leadMappings) { + // Find out which Registrations need new Contacts, creates them, + // and matches with existing Contacts whenever possible as defined by existing Duplicate Rules + for (Summit_Events_Registration__c reg : newRegistrations) { + Summit_Events__c event = matchingRules.get(reg.Event__c); + Contact c = makeContact(reg, event.Custom_Metadata_Contact_Matching_Method__c, contactMappings); + doCRUD crud = new doCRUD(); + String matchType = matchingRules.get(reg.Event__c).Contact_Creation_Duplicate_Rule__c.replaceAll(' ', '_'); + List matchContacts = findMatches(c, matchType); + System.debug('matchContacts: ' + JSON.serializePretty(matchContacts)); if (!matchContacts.isEmpty()) { List foundIds = new List(); for (Contact con : matchContacts) { @@ -143,33 +124,30 @@ public with sharing class SummitEventsContactMatching { } String matchLog = ''; - if (matchContacts == null || matchContacts.isEmpty()) { // SOQL queries return null instead of empty lists if (event.Contact_Matching_No_Match_Behavior__c == 'Create Contact') { - for (Summit_Events_Contact_Matching_Mapping__mdt mapping : [ - SELECT Contact_Field_API_Name__c, Source_Value__c, Source_Type__c - FROM Summit_Events_Contact_Matching_Mapping__mdt - WHERE Contact_Matching_Method__c = :event.Custom_Metadata_Contact_Matching_Method__c AND Matching_Only__c = TRUE - ]) { - c.put(mapping.Contact_Field_API_Name__c, null); - } crud.addRecord(c); reg.New_Contact_Created__c = true; reg.Contact__c = c.Id; - matchLog += matchingLog(reg, new List(), 'Match not found using Duplicate Rule ' + matchType.get(reg.Event__c) + '', 'New contact created!', true); + matchLog += matchingLog(reg, new List(), 'Match not found using Duplicate Rule ' + matchingRules.get(reg.Event__c).Contact_Creation_Duplicate_Rule__c.replaceAll(' ', '_') + '', 'New contact created!', true); } else { - matchLog += matchingLog(null, new List(), 'Match not found using Duplicate Rule ' + matchType.get(reg.Event__c) + '', 'Contact creation skipped based on "Contact Matching Skip Contact Creation" field value on Summit Events object', false); - matchLog += '
' + searchForLead(reg, event, leadMatch.get(reg.Event__c)); + matchLog += matchingLog(null, new List(), 'Match not found using Duplicate Rule ' + matchType + '', 'Contact creation skipped based on "Contact Matching Skip Contact Creation" field value on Summit Events object', false); + matchLog += '
'; + String leadMatch = matchingRules.get(reg.Event__c).Lead_Creation_Duplicate_Rule__c; + if (String.isNotBlank(leadMatch)) { + leadMatch = leadMatch.replaceAll(' ', '_'); + matchLog += searchForLead(reg, event, leadMatch, leadMappings); + } } } else if (matchContacts.size() == 1) { reg.Contact__c = matchContacts[0].Id; reg.New_Contact_Created__c = false; - matchLog += matchingLog(reg, new List(), 'Match found using Salesforce Duplicate Rule ' + matchType.get(reg.Event__c).replaceAll('_', ' ') + '', '', false); + matchLog += matchingLog(reg, new List(), 'Match found using Salesforce Duplicate Rule ' + matchType + '', '', false); } else { if (event.Contact_Matching_Multiple_Match_Behavior__c == 'Skip matching') { - matchLog += matchingLog(null, matchContacts, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType.get(reg.Event__c).replaceAll('_', ' ') + ', Contact matching skipped based on "Contact Matching Multiple Match Behavior" field value on Summit Events object', '', false); + matchLog += matchingLog(null, matchContacts, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType + ', Contact matching skipped based on "Contact Matching Multiple Match Behavior" field value on Summit Events object', '', false); } else if (event.Contact_Matching_Multiple_Match_Behavior__c == 'Match with most recently modified') { - matchLog += matchingLog(null, matchContacts, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType.get(reg.Event__c).replaceAll('_', ' ') + ', Most recently modified Contact was selected based on "Contact Matching Multiple Match Behavior" field value on Summit Events object', '', true); + matchLog += matchingLog(null, matchContacts, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType + ', Most recently modified Contact was selected based on "Contact Matching Multiple Match Behavior" field value on Summit Events object', '', true); reg.Contact__c = matchContacts[0].Id; } } @@ -177,66 +155,21 @@ public with sharing class SummitEventsContactMatching { } } - private static void leadSearch(List newRegistrations) { - Map leadMatch = new Map(); - Map allEvents = new Map(); - if (Schema.SObjectType.Summit_Events__c.isAccessible()) { - for (Summit_Events__c event : [ - SELECT Id, - Contact_Creation_Duplicate_Rule__c, Custom_Metadata_Contact_Matching_Method__c, Contact_Matching_Multiple_Match_Behavior__c, Contact_Matching_No_Match_Behavior__c, - Lead_Creation_Duplicate_Rule__c, Custom_Metadata_Lead_Matching_Method__c, Lead_Matching_Multiple_Match_Behavior__c, Lead_Matching_No_Match_Behavior__c, Lead_matching_rules__c - FROM Summit_Events__c - WHERE Id IN ( - SELECT Event__c - FROM Summit_Events_Registration__c - WHERE Id IN :newRegistrations - ) - ]) { - String leadRuleName = event.Lead_Creation_Duplicate_Rule__c.replaceAll(' ', '_'); - - leadMatch.put(event.Id, leadRuleName); - allEvents.put(event.Id, event); - } - } - + private static void leadSearch(List newRegistrations, Map matchingRules, Map> leadMappings) { for (Summit_Events_Registration__c newReg : newRegistrations) { - newReg.Matching_Log__c = searchForLead(newReg, allEvents.get(newReg.Event__c), leadMatch.get(newReg.Event__c)); + Summit_Events__c seaEvent = matchingRules.get(newReg.Event__c); + String leadRuleName = matchingRules.get(newReg.Event__c).Lead_Creation_Duplicate_Rule__c; + newReg.Matching_Log__c = searchForLead(newReg, seaEvent, leadRuleName, leadMappings); } } - private static String searchForLead(Summit_Events_Registration__c reg, Summit_Events__c event, String matchingRule) { - Lead l = makeLead(reg, event.Custom_Metadata_Lead_Matching_Method__c); + private static String searchForLead(Summit_Events_Registration__c reg, Summit_Events__c event, String matchingRule, Map> leadMappings) { - List results = new List(); + //Matching rules match be label + matchingRule = matchingRule.replaceAll(' ', '_'); + Lead l = makeLead(reg, event.Custom_Metadata_Lead_Matching_Method__c, leadMappings); + List matchLeads = findMatches(l, matchingRule); doCRUD crud = new doCRUD(); - - try { // Datacloud.FindDuplicates returns an error if no matching rules are active - List leads = new List(); - leads.add(l); - results = crud.findDuplicateLeads(leads); - } catch (Exception e) { - System.debug(e.getMessage()); - } - - List matchLeads = new List(); - if (results.size() > 0) { - for (Datacloud.DuplicateResult dr : results[0].getDuplicateResults()) { - - if (matchingRule == dr.getDuplicateRule()) { - for (Datacloud.MatchResult mr : dr.getMatchResults()) { - for (Datacloud.MatchRecord mRecord : mr.getMatchRecords()) { - try { - Lead led = (Lead) mRecord.getRecord(); - matchLeads.add(led); - } catch (Exception e){ - System.debug(e); - } - } - } - } - } - } - if (!matchLeads.isEmpty()) { List foundIds = new List(); for (Lead led : matchLeads) { @@ -248,18 +181,10 @@ public with sharing class SummitEventsContactMatching { String matchLog = ''; if (matchLeads == null || matchLeads.isEmpty()) { // SOQL queries return null instead of empty lists if (event.Lead_Matching_No_Match_Behavior__c == 'Create Lead') { - for (Summit_Events_Lead_Matching_Mapping__mdt mapping : [ - SELECT Lead_Field_API_Name__c, Source_Value__c, Source_Type__c - FROM Summit_Events_Lead_Matching_Mapping__mdt - WHERE Lead_Matching_Method__c = :event.Custom_Metadata_Lead_Matching_Method__c AND Matching_Only__c = TRUE - ]) { - l.put(mapping.Lead_Field_API_Name__c, null); - } - crud.addRecord(l); reg.New_Lead_Created__c = true; reg.Lead__c = l.Id; - matchLog += matchingLog(reg, new List(), 'Match not found using Duplicate Rule ' + matchingRule + '', 'New lead created!', true); + matchLog += matchingLog(reg, new List(), 'Match not found using Duplicate Rule ' + matchingRule + '', 'New lead created!', true); } else { matchLog += matchingLog(null, new List(), 'Match not found using Duplicate Rule ' + matchingRule + '', 'Lead creation skipped based on "Lead Matching Skip Lead Creation" field value on Summit Events object', true); } @@ -279,7 +204,41 @@ public with sharing class SummitEventsContactMatching { return matchLog; } - private static Contact makeContact(Summit_Events_Registration__c reg, String matchingMethod) { + private static List findMatches(SObject record, String matchingRule) { + List results = new List(); + doCRUD crud = new doCRUD(); + + List recordsFound = new List(); + recordsFound.add(record); + // Datacloud.FindDuplicates returns an error if no matching rules are active + try { + results = crud.findDuplicatesResults(recordsFound); + } catch (Exception e) { + System.debug(e.getMessage()); + } + + List matchSObjects = new List(); + if (results.size() > 0) { + for (Datacloud.DuplicateResult dr : results[0].getDuplicateResults()) { + + if (matchingRule == dr.getDuplicateRule()) { + for (Datacloud.MatchResult mr : dr.getMatchResults()) { + for (Datacloud.MatchRecord mRecord : mr.getMatchRecords()) { + try { + matchSObjects.add(mRecord.getRecord()); + } catch (Exception e) { + System.debug(e); + } + } + } + } + } + } + return matchSObjects; + } + + + private static Contact makeContact(Summit_Events_Registration__c reg, String matchingMethod, Map> contactMappings) { Contact c = new Contact(); c.FirstName = reg.Registrant_First_Name__c; c.LastName = reg.Registrant_Last_Name__c; @@ -297,59 +256,14 @@ public with sharing class SummitEventsContactMatching { c.Created_with_Summit_Events__c = true; - Type contactType = Type.forName('Schema.Contact'); - SObject contactObj = (SObject) contactType.newInstance(); - DescribeSObjectResult d = contactObj.getSObjectType().getDescribe(); - - if (Schema.SObjectType.Summit_Events_Contact_Matching_Mapping__mdt.isAccessible()) { - for (Summit_Events_Contact_Matching_Mapping__mdt mapping : [ - SELECT Contact_Field_API_Name__c, Source_Value__c, Source_Type__c - FROM Summit_Events_Contact_Matching_Mapping__mdt - WHERE Contact_Matching_Method__c = :matchingMethod - AND Source_Object__c = 'summit__Summit_Events_Registration__c' - AND Source_Type__c = 'Field' - ]) { - Schema.DisplayType fieldType = d.fields.getMap().get(mapping.Contact_Field_API_Name__c).getDescribe().getType(); - - if (fieldType == Schema.DisplayType.DOUBLE || fieldType == Schema.DisplayType.CURRENCY) { - c.put(mapping.Contact_Field_API_Name__c, Double.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.BOOLEAN) { - c.put(mapping.Contact_Field_API_Name__c, Boolean.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.DATE) { - c.put(mapping.Contact_Field_API_Name__c, Date.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.DATETIME) { - c.put(mapping.Contact_Field_API_Name__c, Datetime.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.INTEGER) { - c.put(mapping.Contact_Field_API_Name__c, Integer.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.PERCENT) { - c.put(mapping.Contact_Field_API_Name__c, Double.valueOf(reg.get(mapping.Source_Value__c)) / 100); + // Apply any mapped values from custom metadata to the contact + if (contactMappings.containsKey(matchingMethod)) { + List mappings = contactMappings.get(matchingMethod); + for (Summit_Events_Contact_Matching_Mapping__mdt mapping : mappings) { + if (mapping.Source_Type__c.equalsIgnoreCase('Hardcoded')) { + c = (Contact) applyCorrectFieldTypesToValues(c, mapping.Contact_Field_API_Name__c, mapping.Source_Value__c); } else { - c.put(mapping.Contact_Field_API_Name__c, reg.get(mapping.Source_Value__c)); - } - } - - for (Summit_Events_Contact_Matching_Mapping__mdt mapping : [ - SELECT Contact_Field_API_Name__c, Source_Value__c, Source_Type__c - FROM Summit_Events_Contact_Matching_Mapping__mdt - WHERE Contact_Matching_Method__c = :matchingMethod - AND Source_Type__c = 'Hardcoded' - ]) { - Schema.DisplayType fieldType = d.fields.getMap().get(mapping.Contact_Field_API_Name__c).getDescribe().getType(); - - if (fieldType == Schema.DisplayType.DOUBLE || fieldType == Schema.DisplayType.CURRENCY) { - c.put(mapping.Contact_Field_API_Name__c, Double.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.BOOLEAN) { - c.put(mapping.Contact_Field_API_Name__c, Boolean.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.DATE) { - c.put(mapping.Contact_Field_API_Name__c, Date.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.DATETIME) { - c.put(mapping.Contact_Field_API_Name__c, Datetime.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.INTEGER) { - c.put(mapping.Contact_Field_API_Name__c, Integer.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.PERCENT) { - c.put(mapping.Contact_Field_API_Name__c, Double.valueOf(mapping.Source_Value__c) / 100); - } else { - c.put(mapping.Contact_Field_API_Name__c, mapping.Source_Value__c); + c = (Contact) applyCorrectFieldTypesToValues(c, mapping.Contact_Field_API_Name__c, reg.get(mapping.Source_Value__c)); } } } @@ -357,7 +271,7 @@ public with sharing class SummitEventsContactMatching { return c; } - private static Lead makeLead(Summit_Events_Registration__c reg, String matchingMethod) { + private static Lead makeLead(Summit_Events_Registration__c reg, String matchingMethod, Map> leadMappings) { Lead l = new Lead(); l.FirstName = reg.Registrant_First_Name__c; l.LastName = reg.Registrant_Last_Name__c; @@ -373,61 +287,14 @@ public with sharing class SummitEventsContactMatching { l.Phone = reg.Registrant_Phone__c; l.MobilePhone = reg.Registrant_Mobile_Phone__c; - Type leadType = Type.forName('Schema.Lead'); - SObject leadObj = (SObject) leadType.newInstance(); - DescribeSObjectResult d = leadObj.getSObjectType().getDescribe(); - - String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); - - if (Schema.SObjectType.Summit_Events_Lead_Matching_Mapping__mdt.isAccessible()) { - for (Summit_Events_Lead_Matching_Mapping__mdt mapping : [ - SELECT Lead_Field_API_Name__c, Source_Value__c, Source_Type__c - FROM Summit_Events_Lead_Matching_Mapping__mdt - WHERE Lead_Matching_Method__c = :matchingMethod - AND Source_Object__c = 'Summit_Events_Registration__c' - AND Source_Type__c = 'Field' - ]) { - Schema.DisplayType fieldType = d.fields.getMap().get(mapping.Lead_Field_API_Name__c).getDescribe().getType(); - - if (fieldType == Schema.DisplayType.DOUBLE || fieldType == Schema.DisplayType.CURRENCY) { - l.put(mapping.Lead_Field_API_Name__c, Double.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.BOOLEAN) { - l.put(mapping.Lead_Field_API_Name__c, Boolean.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.DATE) { - l.put(mapping.Lead_Field_API_Name__c, Date.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.DATETIME) { - l.put(mapping.Lead_Field_API_Name__c, Datetime.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.INTEGER) { - l.put(mapping.Lead_Field_API_Name__c, Integer.valueOf(reg.get(mapping.Source_Value__c))); - } else if (fieldType == Schema.DisplayType.PERCENT) { - l.put(mapping.Lead_Field_API_Name__c, Double.valueOf(reg.get(mapping.Source_Value__c)) / 100); + //Apply any values mapped in custom metadata to the lead + if (leadMappings.containsKey(matchingMethod)) { + List mappings = leadMappings.get(matchingMethod); + for (Summit_Events_Lead_Matching_Mapping__mdt mapping : mappings) { + if (mapping.Source_Type__c.equalsIgnoreCase('Hardcoded')) { + l = (Lead) applyCorrectFieldTypesToValues(l, mapping.Lead_Field_API_Name__c, mapping.Source_Value__c); } else { - l.put(mapping.Lead_Field_API_Name__c, reg.get(mapping.Source_Value__c)); - } - } - - for (Summit_Events_Lead_Matching_Mapping__mdt mapping : [ - SELECT Lead_Field_API_Name__c, Source_Value__c, Source_Type__c - FROM Summit_Events_Lead_Matching_Mapping__mdt - WHERE Lead_Matching_Method__c = :matchingMethod - AND Source_Type__c = 'Hardcoded' - ]) { - Schema.DisplayType fieldType = d.fields.getMap().get(mapping.Lead_Field_API_Name__c).getDescribe().getType(); - - if (fieldType == Schema.DisplayType.DOUBLE || fieldType == Schema.DisplayType.CURRENCY) { - l.put(mapping.Lead_Field_API_Name__c, Double.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.BOOLEAN) { - l.put(mapping.Lead_Field_API_Name__c, Boolean.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.DATE) { - l.put(mapping.Lead_Field_API_Name__c, Date.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.DATETIME) { - l.put(mapping.Lead_Field_API_Name__c, Datetime.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.INTEGER) { - l.put(mapping.Lead_Field_API_Name__c, Integer.valueOf(mapping.Source_Value__c)); - } else if (fieldType == Schema.DisplayType.PERCENT) { - l.put(mapping.Lead_Field_API_Name__c, Double.valueOf(mapping.Source_Value__c) / 100); - } else { - l.put(mapping.Lead_Field_API_Name__c, mapping.Source_Value__c); + l = (Lead) applyCorrectFieldTypesToValues(l, mapping.Lead_Field_API_Name__c, reg.get(mapping.Source_Value__c)); } } } @@ -435,38 +302,28 @@ public with sharing class SummitEventsContactMatching { return l; } - private static String matchingLog(Summit_Events_Registration__c registration, List foundContacts, String heading1, String heading2, Boolean isNew) { - String mOut = ''; - if (String.isNotBlank(heading1)) { - mOut += '
' + heading1 + '
'; - } - if (String.isNotBlank(heading2)) { - mOut += '
' + heading2 + '
'; - } - if (registration != null || foundContacts.size() > 0) { - mOut += ''; - mOut += ''; - mOut += ''; - mOut += ''; - mOut += ''; - mOut += ''; - mOut += ''; - mOut += ''; - mOut += ''; - if (registration != null) { - mOut += matchingRow(registration.Id, registration.Registrant_Last_Name__c, registration.Registrant_First_Name__c, registration.Registrant_Email__c, registration.Registrant_Zip__c, (isNew ? 'Created' : 'Matched')); - } - Boolean isFirst = isNew; - for (Contact con : foundContacts) { - mOut += matchingRow(con.Id, con.LastName, con.FirstName, con.Email, con.MailingPostalCode, isFirst ? 'Selected' : 'Skipped'); - isFirst = false; - } - mOut += '
Last Name
First Name
Email
Zip
Action
'; + private static SObject applyCorrectFieldTypesToValues(SObject l, String objFieldAPIName, Object value) { + DescribeSObjectResult d = l.getSObjectType().getDescribe(); + Schema.DisplayType fieldType = d.fields.getMap().get(objFieldAPIName).getDescribe().getType(); + if (fieldType == Schema.DisplayType.DOUBLE || fieldType == Schema.DisplayType.CURRENCY) { + l.put(objFieldAPIName, Double.valueOf(value)); + } else if (fieldType == Schema.DisplayType.BOOLEAN) { + l.put(objFieldAPIName, Boolean.valueOf(value)); + } else if (fieldType == Schema.DisplayType.DATE) { + l.put(objFieldAPIName, Date.valueOf(value)); + } else if (fieldType == Schema.DisplayType.DATETIME) { + l.put(objFieldAPIName, Datetime.valueOf(value)); + } else if (fieldType == Schema.DisplayType.INTEGER) { + l.put(objFieldAPIName, Integer.valueOf(value)); + } else if (fieldType == Schema.DisplayType.PERCENT) { + l.put(objFieldAPIName, Double.valueOf(value) / 100); + } else { + l.put(objFieldAPIName, value); } - return mOut; + return l; } - private static String matchingLog(Summit_Events_Registration__c registration, List foundLeads, String heading1, String heading2, Boolean isNew) { + private static String matchingLog(Summit_Events_Registration__c registration, List foundObjects, String heading1, String heading2, Boolean isNew) { String mOut = ''; if (String.isNotBlank(heading1)) { mOut += '
' + heading1 + '
'; @@ -474,21 +331,40 @@ public with sharing class SummitEventsContactMatching { if (String.isNotBlank(heading2)) { mOut += '
' + heading2 + '
'; } - if (registration != null || foundLeads.size() > 0) { - mOut += ''; + + if (registration != null || foundObjects.size() > 0) { + + //Get the top level data structure of foundObjects + System.debug('foundObjects: ' + JSON.serializePretty(foundObjects)); + + mOut += '
'; mOut += ''; - mOut += ''; - mOut += ''; - mOut += ''; - mOut += ''; + mOut += ''; + mOut += ''; + mOut += ''; + mOut += ''; + mOut += ''; mOut += ''; mOut += ''; if (registration != null) { - mOut += matchingRow(registration.Id, registration.Registrant_Last_Name__c, registration.Registrant_First_Name__c, registration.Registrant_Email__c, (isNew ? 'Created' : 'Matched')); + mOut += matchingRow(registration.Id, registration.Registrant_Last_Name__c, registration.Registrant_First_Name__c, registration.Registrant_Email__c, registration.Registrant_Zip__c, (isNew ? 'Created' : 'Matched')); } Boolean isFirst = isNew; - for (Lead led : foundLeads) { - mOut += matchingRow(led.Id, led.LastName, led.FirstName, led.Email, isFirst ? 'Selected' : 'Skipped'); + for (SObject sObj : foundObjects) { + String zip = ''; + if (sObj.getSObjectType() == Lead.SObjectType) { + zip = (String) sObj.get('PostalCode'); + } else { + zip = (String) sObj.get('MailingPostalCode'); + } + mOut += matchingRow( + (String) sObj.get('Id'), + (String) sObj.get('LastName'), + (String) sObj.get('FirstName'), + (String) sObj.get('Email'), + zip, + isFirst ? 'Selected' : 'Skipped' + ); isFirst = false; } mOut += '
Last Name
First Name
Email
Action
Last Name
First Name
Email
Zip
Action
'; @@ -496,25 +372,18 @@ public with sharing class SummitEventsContactMatching { return mOut; } - private static String matchingRow(String ContactId, String LastName, String FirstName, String Email, String Zip, String Action) { + private static String matchingRow(String recordId, String LastName, String FirstName, String Email, String Zip, String Action) { String matchRow = ''; matchRow += ''; - matchRow += ''; - matchRow += ''; + matchRow += ''; + matchRow += ''; matchRow += '
' + (String.isNotBlank(Email) ? Email : '') + '
'; - matchRow += '
' + (String.isNotBlank(Zip) ? Zip : '') + '
'; - matchRow += '
' + (String.isNotBlank(Action) ? Action : '') + '
'; - matchRow += ''; - return matchRow; - } - - private static String matchingRow(String ContactId, String LastName, String FirstName, String Email, String Action) { - String matchRow = ''; - matchRow += ''; - matchRow += ''; - matchRow += ''; - matchRow += '
' + (String.isNotBlank(Email) ? Email : '') + '
'; - matchRow += '
' + (String.isNotBlank(Action) ? Action : '') + '
'; + if (String.isNotBlank(Zip)) { + matchRow += '
' + (String.isNotBlank(Zip) ? Zip : '') + '
'; + } else { + matchRow += '--'; + } + matchRow += '
' + (String.isNotBlank(Action) ? Action : 'None') + '
'; matchRow += ''; return matchRow; } @@ -533,7 +402,7 @@ public with sharing class SummitEventsContactMatching { public List findLeads(List foundIds) { List leadsFound = [ - SELECT Id, LastName, FirstName, Email + SELECT Id, LastName, FirstName, Email, PostalCode FROM Lead WHERE Id IN :foundIds ORDER BY LastModifiedDate DESC @@ -550,12 +419,9 @@ public with sharing class SummitEventsContactMatching { return recordToAdd; } - public List findDuplicateContacts(List cons) { + public List findDuplicatesResults(List cons) { return Datacloud.FindDuplicates.findDuplicates(cons); } - public List findDuplicateLeads(List leads) { - return Datacloud.FindDuplicates.findDuplicates(leads); - } } } \ No newline at end of file diff --git a/force-app/main/default/objects/Summit_Events_Registration__c/fields/Person_Account__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Registration__c/fields/Person_Account__c.field-meta.xml new file mode 100644 index 00000000..8bddccf8 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Registration__c/fields/Person_Account__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Person_Account__c + SetNull + false + + Account + Summit Events Registrations + Summit_Events_Registrations + false + false + false + Lookup + From a6b50b8a18ac198af8f7819a07bd08efa8aa8621 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Sun, 8 Dec 2024 16:26:25 -0600 Subject: [PATCH 10/81] fixed values for person account match setup --- ...tom_Metadata_Person_Matching_Method__c.field-meta.xml | 5 ----- .../Person_Creation_Duplicate_Rule__c.field-meta.xml | 9 --------- 2 files changed, 14 deletions(-) diff --git a/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml b/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml index 570c795b..9fbcf850 100644 --- a/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml +++ b/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml @@ -11,11 +11,6 @@ true false - - Admissions - false - - Blue false diff --git a/force-app/main/default/objects/Summit_Events__c/fields/Person_Creation_Duplicate_Rule__c.field-meta.xml b/force-app/main/default/objects/Summit_Events__c/fields/Person_Creation_Duplicate_Rule__c.field-meta.xml index e5f2ccfa..c90349ce 100644 --- a/force-app/main/default/objects/Summit_Events__c/fields/Person_Creation_Duplicate_Rule__c.field-meta.xml +++ b/force-app/main/default/objects/Summit_Events__c/fields/Person_Creation_Duplicate_Rule__c.field-meta.xml @@ -13,21 +13,12 @@ true false - - Summit Events Person Account Creation - false - - Standard Person Account Duplicate Rule false - - Use Salesforce Duplicate Rule - Summit Events Person Account Creation - Use Salesforce Duplicate Rule Standard Person Account Duplicate Rule From 867cabdb7ad3f4aa0c801278ae102d92dc0a4206 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 3 Jan 2025 14:26:40 -0600 Subject: [PATCH 11/81] Permissions, test work-half done --- .../classes/SummitEventsContactMatching.cls | 269 ++++++++++++----- ...egistration Default Layout.layout-meta.xml | 7 +- ...Summit_Events_Admin.permissionset-meta.xml | 5 + ...t_Events_Registrant.permissionset-meta.xml | 5 + .../SummitEventsRegistrationTrigger.trigger | 6 +- .../SummitEventsContactMatching_TEST.cls | 282 +++++++++++++++--- 6 files changed, 447 insertions(+), 127 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index fa9ec53d..992725cc 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -5,6 +5,9 @@ public with sharing class SummitEventsContactMatching { + @TestVisible + private static Map> mappedMatchingMethods { get; set; } + public static void matchContacts(List newRegistrations) { Map matchingRules = new Map(); @@ -14,15 +17,16 @@ public with sharing class SummitEventsContactMatching { if (Schema.SObjectType.Summit_Events__c.isAccessible()) { matchingRules = new Map([ - SELECT Id, Contact_Matching_Rules__c, Lead_matching_rules__c, Person_Matching_Rules__c, + SELECT Id, Contact_Matching_Rules__c, Lead_matching_rules__c, Person_Matching_Rules__c, Custom_Metadata_Person_Matching_Method__c, Person_Creation_Duplicate_Rule__c, Person_Matching_No_Match_Behavior__c, Contact_Creation_Duplicate_Rule__c, Custom_Metadata_Contact_Matching_Method__c, Contact_Matching_Multiple_Match_Behavior__c, Contact_Matching_No_Match_Behavior__c, Lead_Creation_Duplicate_Rule__c, Custom_Metadata_Lead_Matching_Method__c, Lead_Matching_Multiple_Match_Behavior__c, Lead_Matching_No_Match_Behavior__c FROM Summit_Events__c WHERE Id IN :matchingRules.keySet() - AND (Custom_Metadata_Contact_Matching_Method__c != null OR Custom_Metadata_Lead_Matching_Method__c != null) + AND (Custom_Metadata_Contact_Matching_Method__c != NULL OR Custom_Metadata_Lead_Matching_Method__c != NULL OR Custom_Metadata_Person_Matching_Method__c != NULL) ]); } + //System.debug('Matching Rules: ' + JSON.serializePretty(matchingRules)); if (!matchingRules.isEmpty()) { // Setting up contact matching methods and mappings @@ -60,13 +64,22 @@ public with sharing class SummitEventsContactMatching { } } + //Check and see if person accounts are enabled then use the person account matching rules NOT contact + Boolean personAccountActive = SummitEventsShared.personAccountsEnabled(); + Boolean contactEmpty = String.isBlank(reg.Contact__c); + Boolean personEmpty = String.isBlank(reg.Person_Account__c); + // Assemble the reg record for lead, person, contact matching Summit_Events__c event = matchingRules.get(reg.Event__c); - if (event.Contact_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && String.isBlank(reg.Contact__c)) { + + if (event.Contact_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && contactEmpty && !personAccountActive) { byDuplicateRule.add(reg); - } else if (event.Lead_matching_rules__c == 'Use Salesforce Duplicate Rule' && String.isBlank(reg.Contact__c) && String.isBlank(reg.Lead__c)) { + } else if (event.Lead_matching_rules__c == 'Use Salesforce Duplicate Rule' && (!personAccountActive && contactEmpty || personAccountActive && personAccountActive) && String.isBlank(reg.Lead__c)) { findLead.add(reg); - } else if (event.Person_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && String.isBlank(reg.Person_Account__c)) { + } + + if (event.Person_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && personEmpty) { + //System.debug('Person Account Active and matching rules'); findPerson.add(reg); } } @@ -80,31 +93,80 @@ public with sharing class SummitEventsContactMatching { } if (!findPerson.isEmpty()) { - //personSearch(findPerson, matchingRules, contactMappings); + searchForPersons(findPerson, matchingRules, contactMappings, leadMappings); } } } - private static Map> processMappings( - Set matchingMethods, - String sObjectType, - String fieldAPIName, - String sourceValue) { - Map> mappings = new Map>(); - if (matchingMethods.size() > 0) { - String query = 'SELECT Source_Value__c, Source_Type__c, ' + fieldAPIName + ', ' + sourceValue + ' FROM ' + sObjectType + ' WHERE ' + fieldAPIName + ' IN :matchingMethods'; - List results = Database.query(query); - for (SObject mapping : results) { - String method = (String) mapping.get(fieldAPIName); - if (!mappings.containsKey(method)) { - mappings.put(method, new List()); + @TestVisible + private static Map> processMappings(Set matchingMethods, String sObjectType, String fieldAPIName, String sourceValue) { + String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); + mappedMatchingMethods = new Map>(); + if (mappedMatchingMethods.isEmpty()) { + if (matchingMethods.size() > 0) { + System.debug('Matching Methods: ' + matchingMethods); + String query = 'SELECT Source_Value__c, Source_Type__c, ' + fieldAPIName + ', ' + sourceValue + ' FROM ' + namespace + sObjectType + ' WHERE ' + fieldAPIName + ' IN :matchingMethods'; + System.debug('Query: ' + query); + List results = Database.query(query); + System.debug('Results: ' + JSON.serializePretty(results)); + for (SObject mapping : results) { + String method = (String) mapping.get(fieldAPIName); + if (!mappedMatchingMethods.containsKey(method)) { + mappedMatchingMethods.put(method, new List()); + } + mappedMatchingMethods.get(method).add(mapping); } - mappings.get(method).add(mapping); } } - return mappings; + return mappedMatchingMethods; } + private static void searchForPersons(List newRegistrations, Map matchingRules, Map> contactMappings, Map> leadMappings) { + // Find out which Registrations need new Contacts, creates them, + // and matches with existing Contacts whenever possible as defined by existing Duplicate Rules + Boolean personAccountActive = SummitEventsShared.personAccountsEnabled(); + for (Summit_Events_Registration__c reg : newRegistrations) { + Summit_Events__c event = matchingRules.get(reg.Event__c); + Account a = makePerson(reg, event.Custom_Metadata_Contact_Matching_Method__c, contactMappings); + doCRUD crud = new doCRUD(); + String matchType = matchingRules.get(reg.Event__c).Person_Creation_Duplicate_Rule__c.replaceAll(' ', '_'); + List matchPersons = findMatches(a, matchType); + String matchLog = ''; + if (matchPersons == null || matchPersons.isEmpty()) { // SOQL queries return null instead of empty lists + if (event.Person_Matching_No_Match_Behavior__c == 'Create Person Account') { + crud.addRecord(a); + reg.New_Contact_Created__c = true; + if (personAccountActive) { + reg.Person_Account__c = a.Id; + reg.Contact__c = (Id) a.get('PersonContactId'); + } + matchLog += matchingLog(reg, new List(), 'Match not found using Duplicate Rule ' + matchingRules.get(reg.Event__c).Person_Creation_Duplicate_Rule__c.replaceAll(' ', '_') + '', 'New Person Account created!', true); + } else { + matchLog += matchingLog(null, new List(), 'Match not found using Duplicate Rule ' + matchType + '', 'Contact creation skipped based on "Contact Matching Skip Contact Creation" field value on Summit Events object', false); + matchLog += '
'; + String leadMatch = matchingRules.get(reg.Event__c).Lead_Creation_Duplicate_Rule__c; + if (String.isNotBlank(leadMatch)) { + leadMatch = leadMatch.replaceAll(' ', '_'); + matchLog += searchForLead(reg, event, leadMatch, leadMappings); + } + } + } else if (matchPersons.size() == 1) { + reg.Person_Account__c = matchPersons[0].Id; + reg.New_Contact_Created__c = false; + matchLog += matchingLog(reg, new List(), 'Match found using Salesforce Duplicate Rule ' + matchType + '', '', false); + } else { + if (event.Contact_Matching_Multiple_Match_Behavior__c == 'Skip matching') { + matchLog += matchingLog(null, matchPersons, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType + ', Person Account matching skipped based on "Person Matching Multiple Match Behavior" field value on Summit Events object', '', false); + } else if (event.Contact_Matching_Multiple_Match_Behavior__c == 'Match with most recently modified') { + matchLog += matchingLog(null, matchPersons, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType + ', Most recently modified Person Account was selected based on "Person Matching Multiple Match Behavior" field value on Summit Events object', '', true); + reg.Contact__c = matchPersons[0].Id; + } + } + reg.Matching_Log__c = matchLog; + } + } + + @TestVisible private static void searchForContacts(List newRegistrations, Map matchingRules, Map> contactMappings, Map> leadMappings) { // Find out which Registrations need new Contacts, creates them, // and matches with existing Contacts whenever possible as defined by existing Duplicate Rules @@ -114,15 +176,7 @@ public with sharing class SummitEventsContactMatching { doCRUD crud = new doCRUD(); String matchType = matchingRules.get(reg.Event__c).Contact_Creation_Duplicate_Rule__c.replaceAll(' ', '_'); List matchContacts = findMatches(c, matchType); - System.debug('matchContacts: ' + JSON.serializePretty(matchContacts)); - if (!matchContacts.isEmpty()) { - List foundIds = new List(); - for (Contact con : matchContacts) { - foundIds.add(con.Id); - } - matchContacts = crud.findContacts(foundIds); - } - + System.debug('matchContacts: ' + matchContacts); String matchLog = ''; if (matchContacts == null || matchContacts.isEmpty()) { // SOQL queries return null instead of empty lists if (event.Contact_Matching_No_Match_Behavior__c == 'Create Contact') { @@ -170,14 +224,6 @@ public with sharing class SummitEventsContactMatching { Lead l = makeLead(reg, event.Custom_Metadata_Lead_Matching_Method__c, leadMappings); List matchLeads = findMatches(l, matchingRule); doCRUD crud = new doCRUD(); - if (!matchLeads.isEmpty()) { - List foundIds = new List(); - for (Lead led : matchLeads) { - foundIds.add(led.Id); - } - matchLeads = crud.findLeads(foundIds); - } - String matchLog = ''; if (matchLeads == null || matchLeads.isEmpty()) { // SOQL queries return null instead of empty lists if (event.Lead_Matching_No_Match_Behavior__c == 'Create Lead') { @@ -271,6 +317,47 @@ public with sharing class SummitEventsContactMatching { return c; } + private static Account makePerson(Summit_Events_Registration__c reg, String matchingMethod, Map> contactMappings) { + Account personAccount = new Account(); + Boolean personAccountActive = SummitEventsShared.personAccountsEnabled(); + try { + + //Assign the value to account with put method to avoid conflicting when person accounts are not enabled + if (personAccountActive) { + Id personAccountRecordTypeId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('PersonAccount').getRecordTypeId(); + personAccount.put('RecordTypeId', personAccountRecordTypeId); + personAccount.put('PersonEmail', reg.Registrant_Email__c); + personAccount.put('PersonBirthdate', reg.Registrant_Date_of_Birth__c); + personAccount.put('PersonMailingStreet', reg.Registrant_Street_1__c); + personAccount.put('PersonMailingCity', reg.Registrant_City__c); + personAccount.put('PersonMailingState', reg.Registrant_State__c); + personAccount.put('PersonMailingPostalCode', reg.Registrant_Zip__c != '' ? reg.Registrant_Zip__c : reg.Registrant_Postal_Code__c); + personAccount.put('PersonMailingCountry', reg.Registrant_Country__c); + personAccount.put('PersonHomePhone', reg.Registrant_Phone__c); + personAccount.put('PersonMobilePhone', reg.Registrant_Mobile_Phone__c); + personAccount.put('FirstName', reg.Registrant_First_Name__c); + personAccount.put('LastName', reg.Registrant_Last_Name__c); + } + //personAccount.put('PersonContact.Created_with_Summit_Events__c', true); + } catch (Exception e) { + System.debug(e.getMessage() + ' - Person Accounts are not enabled'); + } + + // Apply any mapped values from custom metadata to the contact + if (contactMappings.containsKey(matchingMethod)) { + List mappings = contactMappings.get(matchingMethod); + for (Summit_Events_Contact_Matching_Mapping__mdt mapping : mappings) { + if (mapping.Source_Type__c.equalsIgnoreCase('Hardcoded')) { + personAccount = (Account) applyCorrectFieldTypesToValues(personAccount, mapping.Contact_Field_API_Name__c, mapping.Source_Value__c); + } else { + personAccount = (Account) applyCorrectFieldTypesToValues(personAccount, mapping.Contact_Field_API_Name__c, reg.get(mapping.Source_Value__c)); + } + } + } + + return personAccount; + } + private static Lead makeLead(Summit_Events_Registration__c reg, String matchingMethod, Map> leadMappings) { Lead l = new Lead(); l.FirstName = reg.Registrant_First_Name__c; @@ -302,27 +389,31 @@ public with sharing class SummitEventsContactMatching { return l; } + @TestVisible private static SObject applyCorrectFieldTypesToValues(SObject l, String objFieldAPIName, Object value) { DescribeSObjectResult d = l.getSObjectType().getDescribe(); - Schema.DisplayType fieldType = d.fields.getMap().get(objFieldAPIName).getDescribe().getType(); - if (fieldType == Schema.DisplayType.DOUBLE || fieldType == Schema.DisplayType.CURRENCY) { - l.put(objFieldAPIName, Double.valueOf(value)); - } else if (fieldType == Schema.DisplayType.BOOLEAN) { - l.put(objFieldAPIName, Boolean.valueOf(value)); - } else if (fieldType == Schema.DisplayType.DATE) { - l.put(objFieldAPIName, Date.valueOf(value)); - } else if (fieldType == Schema.DisplayType.DATETIME) { - l.put(objFieldAPIName, Datetime.valueOf(value)); - } else if (fieldType == Schema.DisplayType.INTEGER) { - l.put(objFieldAPIName, Integer.valueOf(value)); - } else if (fieldType == Schema.DisplayType.PERCENT) { - l.put(objFieldAPIName, Double.valueOf(value) / 100); - } else { - l.put(objFieldAPIName, value); + if (d.fields.getMap().containsKey(objFieldAPIName)) { + Schema.DisplayType fieldType = d.fields.getMap().get(objFieldAPIName).getDescribe().getType(); + if (fieldType == Schema.DisplayType.DOUBLE || fieldType == Schema.DisplayType.CURRENCY) { + l.put(objFieldAPIName, Double.valueOf(value)); + } else if (fieldType == Schema.DisplayType.BOOLEAN) { + l.put(objFieldAPIName, Boolean.valueOf(value)); + } else if (fieldType == Schema.DisplayType.DATE) { + l.put(objFieldAPIName, Date.valueOf(value)); + } else if (fieldType == Schema.DisplayType.DATETIME) { + l.put(objFieldAPIName, Datetime.valueOf(value)); + } else if (fieldType == Schema.DisplayType.INTEGER) { + l.put(objFieldAPIName, Integer.valueOf(value)); + } else if (fieldType == Schema.DisplayType.PERCENT) { + l.put(objFieldAPIName, Double.valueOf(value) / 100); + } else { + l.put(objFieldAPIName, value); + } } return l; } + @TestVisible private static String matchingLog(Summit_Events_Registration__c registration, List foundObjects, String heading1, String heading2, Boolean isNew) { String mOut = ''; if (String.isNotBlank(heading1)) { @@ -334,9 +425,6 @@ public with sharing class SummitEventsContactMatching { if (registration != null || foundObjects.size() > 0) { - //Get the top level data structure of foundObjects - System.debug('foundObjects: ' + JSON.serializePretty(foundObjects)); - mOut += ''; mOut += ''; mOut += ''; @@ -351,17 +439,56 @@ public with sharing class SummitEventsContactMatching { } Boolean isFirst = isNew; for (SObject sObj : foundObjects) { + Map sObjMapStringObj = (Map) JSON.deserializeUntyped(JSON.serialize(sObj)); String zip = ''; + String firstName = ''; + String lastName = ''; + String email = ''; + if (sObj.getSObjectType() == Lead.SObjectType) { - zip = (String) sObj.get('PostalCode'); + if (sObjMapStringObj.containsKey('PostalCode')) { + zip = (String) sObj.get('PostalCode'); + } + if (sObjMapStringObj.containsKey('Email')) { + email = (String) sObj.get('Email'); + } + } else if (sObj.getSObjectType() == Account.SObjectType) { + if (sObjMapStringObj.containsKey('PersonMailingPostalCode')) { + zip = (String) sObj.get('PersonMailingPostalCode'); + } + if (sObjMapStringObj.containsKey('PersonalEmail')) { + email = (String) sObj.get('PersonalEmail'); + } + } else if (sObj.getSObjectType() == Contact.SObjectType) { + if (sObjMapStringObj.containsKey('MailingPostalCode')) { + zip = (String) sObj.get('MailingPostalCode'); + } + if (sObjMapStringObj.containsKey('Email')) { + email = (String) sObj.get('Email'); + } + } + if (sObjMapStringObj.containsKey('Name')) { + String[] name = ((String) sObj.get('Name')).split(' '); + if (name.size() > 1) { + firstName = name[0]; + lastName = name[1]; + } else { + lastName = name[0]; + } } else { - zip = (String) sObj.get('MailingPostalCode'); + if (sObjMapStringObj.containsKey('FirstName')) { + firstName = (String) sObj.get('FirstName'); + } + if (sObjMapStringObj.containsKey('LastName')) { + lastName = (String) sObj.get('LastName'); + } } + mOut += matchingRow( (String) sObj.get('Id'), - (String) sObj.get('LastName'), - (String) sObj.get('FirstName'), - (String) sObj.get('Email'), + lastName, + firstName, + email, zip, isFirst ? 'Selected' : 'Skipped' ); @@ -390,26 +517,6 @@ public with sharing class SummitEventsContactMatching { private without sharing class doCRUD { - public List findContacts(List foundIds) { - List contactsFound = [ - SELECT Id, LastName, FirstName, Email, MailingPostalCode - FROM Contact - WHERE Id IN :foundIds - ORDER BY LastModifiedDate DESC - ]; - return contactsFound; - } - - public List findLeads(List foundIds) { - List leadsFound = [ - SELECT Id, LastName, FirstName, Email, PostalCode - FROM Lead - WHERE Id IN :foundIds - ORDER BY LastModifiedDate DESC - ]; - return leadsFound; - } - public SObject addRecord(SObject recordToAdd) { try { upsert recordToAdd; diff --git a/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml b/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml index 553d64f9..770b7215 100644 --- a/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml +++ b/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml @@ -1,5 +1,6 @@ + OpenSlackRecordChannel Submit true @@ -15,6 +16,10 @@ Edit Contact__c + + Edit + Person_Account__c + Edit Lead__c @@ -798,7 +803,7 @@ false false - 00h6t000003YwxN + 00hDK000003WwG5 4 0 Default diff --git a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml index 4f8e9c07..639f46f7 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml @@ -1297,6 +1297,11 @@ Summit_Events_Registration__c.Payment_Gateway_Status__c true + + true + Summit_Events_Registration__c.Person_Account__c + true + true Summit_Events_Registration__c.Preferred_Class_Year__c diff --git a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml index 888be6cb..1b6a8fd9 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml @@ -1175,6 +1175,11 @@ Summit_Events_Registration__c.Payment_Gateway_Status__c true + + true + Summit_Events_Registration__c.Person_Account__c + true + true Summit_Events_Registration__c.Preferred_Class_Year__c diff --git a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger index 9f11ee80..cd80ed9a 100644 --- a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger +++ b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger @@ -6,8 +6,10 @@ trigger SummitEventsRegistrationTrigger on Summit_Events_Registration__c (before } */ Summit_Events_Settings__c SummitEventsSettings = Summit_Events_Settings__c.getOrgDefaults(); if (!SummitEventsSettings.Turn_off_Registration_Trigger__c) { - if (Trigger.isBefore && Trigger.isUpdate) { - SummitEventsContactMatching.matchContacts(Trigger.new); + if (Trigger.isBefore) { + if (Trigger.isUpdate || Trigger.isInsert) { + SummitEventsContactMatching.matchContacts(Trigger.new); + } } if (Trigger.isAfter && Trigger.isInsert) { diff --git a/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls b/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls index 932ebb51..4695ed29 100644 --- a/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls +++ b/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls @@ -5,26 +5,117 @@ @IsTest public class SummitEventsContactMatching_TEST { + + // Mock class within the test class + public class SummitEventsFindDuplicatesMock implements HttpCalloutMock { + public HttpResponse respond(HttpRequest req) { + // Create a fake response + HttpResponse res = new HttpResponse(); + res.setHeader('Content-Type', 'application/json'); + res.setBody('[{"duplicateResults":[{"duplicateRule":"Standard_Contact_Duplicate_Rule","matchResults":[{"matchRecords":[{"record":{"Id":"0031t00000XXXXXXAA1","Name":"Test Record"}}]}]}]}]'); + res.setStatusCode(200); + return res; + } + } + + @TestSetup + static void setup() { + + //Add contacts for testing + List testContacts = new List(); + testContacts.add(new Contact(FirstName = 'Test', LastName = 'Record', Email = 'test@example.com')); + //testContacts.add(new Contact(FirstName = 'Test', LastName = 'Record', Email = 'test@example.com')); + insert testContacts; + + //Add leads for testing + List testLeads = new List(); + testLeads.add(new Lead(FirstName = 'Test', LastName = 'Record', Email = 'test@example.com', Company = 'Big T Record')); + insert testLeads; + + //Add accounts for testing + List testAccounts = new List(); + testAccounts.add(new Account(Name = 'Big T Record')); + insert testAccounts; + + // Create a list to hold custom metadata records + SummitEventsContactMatching.mappedMatchingMethods = new Map>(); + String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); + List cmmList = new List(); + List cmmList2 = new List(); + // Create a custom metadata record + Summit_Events_Contact_Matching_Mapping__mdt cmm = new Summit_Events_Contact_Matching_Mapping__mdt( + DeveloperName = 'Title_Test', + MasterLabel = 'Title Test', + Source_Type__c = 'Field', + Source_Object__c = namespace + 'Summit_Events_Registration__c', + Source_Value__c = namespace + 'Registrant_Last_Name__c', + Contact_Field_API_Name__c = 'Title', + Contact_Matching_Method__c = 'Admissions' + ); + // Add the custom metadata record to the list + cmmList.add(cmm); + // Insert the custom metadata records + SummitEventsContactMatching.mappedMatchingMethods.put(cmm.Contact_Matching_Method__c, cmmList); + Summit_Events_Contact_Matching_Mapping__mdt cmm2 = new Summit_Events_Contact_Matching_Mapping__mdt( + DeveloperName = 'Title_Test', + MasterLabel = 'Title Test', + Source_Type__c = 'Field', + Source_Object__c = namespace + 'Summit_Events_Registration__c', + Source_Value__c = namespace + 'Registrant_Last_Name__c', + Contact_Field_API_Name__c = 'Title', + Contact_Matching_Method__c = 'Red' + ); + cmmList2.add(cmm2); + SummitEventsContactMatching.mappedMatchingMethods.put(cmm2.Contact_Matching_Method__c, cmmList2); + + } + @IsTest static void SummitEventsContactMatching1() { List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'Test', 'Record', 'test@example.com', '55555', '1971-03-22', '2012', null); + Summit_Events__c seaTestEvent = SummitEventsTestSharedDataFactory.getEventRecord(seaTestInstances[1].Event__c); seaTestEvent.Contact_Matching_Rules__c = 'Use Salesforce Duplicate Rule'; seaTestEvent.Contact_Creation_Duplicate_Rule__c = 'Standard Contact Duplicate Rule'; seaTestEvent.Custom_Metadata_Contact_Matching_Method__c = 'Admissions'; + seaTestEvent.Contact_Matching_No_Match_Behavior__c = 'Create Contact'; + seaTestEvent.Contact_Matching_Multiple_Match_Behavior__c = 'Match with most recently modified'; update seaTestEvent; - User testUser = SummitEventsTestSharedDataFactory.userToRunWith('Standard User','Summit_Events_Admin'); + + User testUser = SummitEventsTestSharedDataFactory.userToRunWith('Standard User', 'Summit_Events_Admin'); + + SummitEventsContactMatching.mappedMatchingMethods = new Map>(); + List cmmList = new List(); + String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); + // Create a custom metadata record + Summit_Events_Contact_Matching_Mapping__mdt cmm = new Summit_Events_Contact_Matching_Mapping__mdt( + DeveloperName = 'Title_Test', + MasterLabel = 'Title Test', + Source_Type__c = 'Field', + Source_Object__c = namespace + 'Summit_Events_Registration__c', + Source_Value__c = namespace + 'Registrant_Last_Name__c', + Contact_Field_API_Name__c = 'Title', + Contact_Matching_Method__c = 'Admissions' + ); + // Add the custom metadata record to the list + cmmList.add(cmm); + // Insert the custom metadata records + + SummitEventsContactMatching.mappedMatchingMethods.put(cmm.Contact_Matching_Method__c, cmmList); + System.runAs(testUser) { Test.startTest(); seaTestRegistration.Status__c = 'Registered'; seaTestRegistration.Registrant_Preferred_First_Name__c = 'Big T'; update seaTestRegistration; + System.assert(String.isBlank(seaTestRegistration.Contact__c)); seaTestRegistration.Contact__c = null; seaTestRegistration.Registrant_Date_of_Birth__c = System.today(); update seaTestRegistration; + seaTestRegistration.Contact__c = null; seaTestRegistration.Registrant_First_Name__c = 'Tester'; update seaTestRegistration; @@ -40,51 +131,60 @@ public class SummitEventsContactMatching_TEST { } @IsTest - static void SummitEventsContactMatching2() { + static void testSearchForContacts() { + // Prepare test data List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'Test', 'Record', 'test@example.com', '55555', '1971-03-22', '2012', null); + Summit_Events__c seaTestEvent = SummitEventsTestSharedDataFactory.getEventRecord(seaTestInstances[1].Event__c); seaTestEvent.Contact_Matching_Rules__c = 'Use Salesforce Duplicate Rule'; seaTestEvent.Contact_Creation_Duplicate_Rule__c = 'Standard Contact Duplicate Rule'; seaTestEvent.Custom_Metadata_Contact_Matching_Method__c = 'Admissions'; - seaTestEvent.Contact_Matching_Multiple_Match_Behavior__c = 'Skip matching'; + seaTestEvent.Contact_Matching_No_Match_Behavior__c = 'Create Contact'; + seaTestEvent.Contact_Matching_Multiple_Match_Behavior__c = 'Match with most recently modified'; update seaTestEvent; - User testUser = SummitEventsTestSharedDataFactory.userToRunWith('Standard User','Summit_Events_Admin'); - System.runAs(testUser) { - Test.startTest(); - Database.DMLOptions dml = new Database.DMLOptions(); - dml.duplicateRuleHeader.allowSave = true; - Contact c1 = new Contact(FirstName = 'Test', LastName = 'Record', Email = 'test@example.com'); - insert c1; + Map matchingRules = new Map(); + matchingRules.put(seaTestEvent.Id, seaTestEvent); - Contact c2 = new Contact(FirstName = 'Test', LastName = 'Record', Email = 'test@example.com'); - Database.insert(c2, dml); - seaTestRegistration.Registrant_Preferred_First_Name__c = 'Big T'; - update seaTestRegistration; + Map> contactMappings = new Map>(); + Map> leadMappings = new Map>(); - Summit_Events_Registration__c registration = [SELECT Id, Contact__c FROM Summit_Events_Registration__c WHERE Id = :seaTestRegistration.Id]; - List drs = [SELECT IsActive, Id FROM DuplicateRule WHERE MasterLabel = 'Standard Contact Duplicate Rule' AND IsActive = TRUE]; - if (drs.size() > 0) { - System.assert(String.isBlank(registration.Contact__c)); - } else { - //Duplicate rules not in org - System.assert(String.isNotBlank(registration.Contact__c)); - } + // Set the mock + Test.setMock(HttpCalloutMock.class, new SummitEventsFindDuplicatesMock()); + List newRegistrations = new List(); + newRegistrations.add(seaTestRegistration); + // Call the method to test + Test.startTest(); + SummitEventsContactMatching.searchForContacts(newRegistrations, matchingRules, contactMappings, leadMappings); + Test.stopTest(); - seaTestEvent.Contact_Matching_Multiple_Match_Behavior__c = 'Match with most recently modified'; - update seaTestEvent; + // Add assertions to verify the behavior + System.assertNotEquals(null, seaTestRegistration.Contact__c, 'The Contact__c field should not be null'); + } + @IsTest + static void SummitEventsContactMatching2() { + List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); + Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'Test', 'Record', 'test@example.com', '55555', '1971-03-22', '2012', null); + Summit_Events__c seaTestEvent = SummitEventsTestSharedDataFactory.getEventRecord(seaTestInstances[1].Event__c); + seaTestEvent.Contact_Matching_Rules__c = 'Use Salesforce Duplicate Rule'; + seaTestEvent.Contact_Creation_Duplicate_Rule__c = 'Standard Contact Duplicate Rule'; + seaTestEvent.Custom_Metadata_Contact_Matching_Method__c = 'Admissions'; + seaTestEvent.Contact_Matching_Multiple_Match_Behavior__c = 'Skip matching'; + update seaTestEvent; + User testUser = SummitEventsTestSharedDataFactory.userToRunWith('Standard User', 'Summit_Events_Admin'); + System.runAs(testUser) { + Test.startTest(); + seaTestRegistration.Registrant_Preferred_First_Name__c = 'Big T'; update seaTestRegistration; - registration = [SELECT Id, Contact__c FROM Summit_Events_Registration__c WHERE Id = :registration.Id]; - System.assert(String.isNotBlank(registration.Contact__c)); Test.stopTest(); } } - + @IsTest - static void SummitEventsLeadMatching1(){ + static void SummitEventsLeadMatching1() { List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'Test', 'Record', 'test@example.com', '55555', '1971-03-22', '2012', null); Summit_Events__c seaTestEvent = SummitEventsTestSharedDataFactory.getEventRecord(seaTestInstances[1].Event__c); @@ -95,30 +195,126 @@ public class SummitEventsContactMatching_TEST { seaTestEvent.Lead_Matching_Multiple_Match_Behavior__c = 'Match with most recently modified'; seaTestEvent.Custom_Metadata_Lead_Matching_Method__c = 'Red'; update seaTestEvent; - User testUser = SummitEventsTestSharedDataFactory.userToRunWith('Standard User','Summit_Events_Admin'); + User testUser = SummitEventsTestSharedDataFactory.userToRunWith('Standard User', 'Summit_Events_Admin'); System.runAs(testUser) { Test.startTest(); seaTestRegistration.Status__c = 'Registered'; seaTestRegistration.Registrant_Preferred_First_Name__c = 'Big T'; update seaTestRegistration; - + seaTestRegistration.Lead__c = null; update seaTestRegistration; - - Lead l = new Lead(); - l.FirstName = 'Test'; - l.LastName = 'Record'; - l.Email = 'test@example.com'; - l.Company = 'Big T Record'; - Database.DMLOptions dml = new Database.DMLOptions(); - dml.duplicateRuleHeader.allowSave = true; - dml.duplicateRuleHeader.runAsCurrentUser = true; - Database.SaveResult sr = Database.insert(l, dml); - - seaTestRegistration.Lead__c = null; + + Test.stopTest(); + } + } + + @IsTest + static void SummitEventsPersonMatching() { + List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); + Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'Test', 'Record', 'test@example.com', '55555', '1971-03-22', '2012', null); + Summit_Events__c seaTestEvent = SummitEventsTestSharedDataFactory.getEventRecord(seaTestInstances[1].Event__c); + seaTestEvent.Person_Matching_Rules__c = 'Use Salesforce Duplicate Rule'; + seaTestEvent.Person_Creation_Duplicate_Rule__c = 'Standard Person Account Duplicate Rule'; + seaTestEvent.Person_Matching_No_Match_Behavior__c = 'Create Person Account'; + seaTestEvent.Person_Matching_Multiple_Match_Behavior__c = 'Match with most recently modified'; + seaTestEvent.Custom_Metadata_Contact_Matching_Method__c = 'Admissions'; + update seaTestEvent; + User testUser = SummitEventsTestSharedDataFactory.userToRunWith('Standard User', 'Summit_Events_Admin'); + System.runAs(testUser) { + Test.startTest(); + seaTestRegistration.Registrant_Preferred_First_Name__c = 'Big T'; update seaTestRegistration; - + + seaTestEvent.Contact_Matching_Multiple_Match_Behavior__c = 'Match with most recently modified'; + update seaTestEvent; + + // System.assert(String.isNotBlank(registration.Contact__c)); Test.stopTest(); } } + + @IsTest + static void testMappedMatchingMethods() { + // Prepare test data + Map> testData = new Map>(); + testData.put('TestMethod', new List{ + new Contact(LastName = 'Test') + }); + + // Set the test data to the property + SummitEventsContactMatching.mappedMatchingMethods = testData; + + // Add assertions to verify the behavior + System.assertEquals(testData, SummitEventsContactMatching.mappedMatchingMethods); + } + + @IsTest + static void testMatchingLog() { + // Create a mock registration record + List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); + Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'John', 'Doe', 'john.doe@example.com', '12345', '1971-03-22', '2012', null); + + // Create a list of mock SObject records + List foundObjects = new List(); + + // Create a mock Contact record + Contact contact = new Contact( + LastName = 'Smith', + FirstName = 'Jane', + Email = 'jane.smith@example.com', + MailingPostalCode = '67890' + ); + insert contact; + foundObjects.add(contact); + + // Create a mock Lead record + Lead lead = new Lead( + LastName = 'Brown', + FirstName = 'Charlie', + Email = 'charlie.brown@example.com', + PostalCode = '54321', + Company = 'Charlie Brown Inc.' + ); + insert lead; + foundObjects.add(lead); + + // Call the matchingLog method + String result = SummitEventsContactMatching.matchingLog(seaTestRegistration, foundObjects, 'Heading 1', 'Heading 2', true); + + // Verify the result + System.assertNotEquals(null, result, 'The result should not be null'); + System.assert(result.contains('Doe'), 'The result should contain the last name Doe'); + System.assert(result.contains('John'), 'The result should contain the first name John'); + System.assert(result.contains('john.doe@example.com'), 'The result should contain the email john.doe@example.com'); + System.assert(result.contains('12345'), 'The result should contain the zip code 12345'); + System.assert(result.contains('Smith'), 'The result should contain the last name Smith'); + System.assert(result.contains('Jane'), 'The result should contain the first name Jane'); + System.assert(result.contains('jane.smith@example.com'), 'The result should contain the email jane.smith@example.com'); + System.assert(result.contains('67890'), 'The result should contain the zip code 67890'); + System.assert(result.contains('Brown'), 'The result should contain the last name Brown'); + System.assert(result.contains('Charlie'), 'The result should contain the first name Charlie'); + System.assert(result.contains('charlie.brown@example.com'), 'The result should contain the email charlie.brown@example.com'); + System.assert(result.contains('54321'), 'The result should contain the zip code 54321'); + } + + @IsTest + static void testApplyCorrectFieldTypesToValues() { + // Create a mock map of field values + Lead newLead = new Lead(); + Contact newContact = new Contact(); + Date newDate = Date.newInstance(2021, 1, 5); + SObject result = SummitEventsContactMatching.applyCorrectFieldTypesToValues(newLead, 'AnnualRevenue', 100.00); + SObject result2 = SummitEventsContactMatching.applyCorrectFieldTypesToValues(newLead, 'Company', 'Company Inc.'); + SObject result3 = SummitEventsContactMatching.applyCorrectFieldTypesToValues(newLead, 'HasOptedOutOfEmail', true); + SObject result4 = SummitEventsContactMatching.applyCorrectFieldTypesToValues(newLead, 'NumberOfEmployees', 15); + SObject result5 = SummitEventsContactMatching.applyCorrectFieldTypesToValues(newContact, 'Birthdate', newDate); + Test.startTest(); + System.assertEquals(100.00, result.get('AnnualRevenue'), 'The AnnualRevenue field should be set to 100.00'); + System.assertEquals('Company Inc.', result2.get('Company'), 'The Company field should be set to Company Inc.'); + System.assertEquals(true, result3.get('HasOptedOutOfEmail'), 'The HasOptedOutOfEmail field should be set to true'); + System.assertEquals(15, result4.get('NumberOfEmployees'), 'The NumberOfEmployees field should be set to 15'); + System.assertEquals(newDate, result5.get('Birthdate'), 'The Birthdate field should be set to 2021-01-05'); + Test.stopTest(); + } } \ No newline at end of file From eb06bac235e0ba4a568f6f55b8e73bbed4b3570a Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:55:15 -0600 Subject: [PATCH 12/81] added robot framework front-end testing samples --- .../tests/create_contact.robot | 38 +++++++---- robot/SummitEventsApp/tests/create_reg2.robot | 68 +++++++++++++++++++ .../tests/create_registration.robot | 62 +++++++++++++++++ .../tests/new_contact_record.robot | 17 +++++ 4 files changed, 173 insertions(+), 12 deletions(-) create mode 100644 robot/SummitEventsApp/tests/create_reg2.robot create mode 100644 robot/SummitEventsApp/tests/create_registration.robot create mode 100644 robot/SummitEventsApp/tests/new_contact_record.robot diff --git a/robot/SummitEventsApp/tests/create_contact.robot b/robot/SummitEventsApp/tests/create_contact.robot index 089beeee..d284dc00 100644 --- a/robot/SummitEventsApp/tests/create_contact.robot +++ b/robot/SummitEventsApp/tests/create_contact.robot @@ -1,45 +1,59 @@ *** Settings *** Resource cumulusci/robotframework/Salesforce.robot +Library cumulusci.robotframework.PageObjects + Suite Setup Open Test Browser Suite Teardown Delete Records and Close Browser + *** Test Cases *** Via API - ${first_name} = Generate Random String - ${last_name} = Generate Random String + ${first_name} = Get fake data first_name + ${last_name} = Get fake data last_name + ${contact_id} = Salesforce Insert Contact ... FirstName=${first_name} ... LastName=${last_name} + &{contact} = Salesforce Get Contact ${contact_id} Validate Contact ${contact_id} ${first_name} ${last_name} Via UI - ${first_name} = Generate Random String - ${last_name} = Generate Random String - Go To Object Home Contact + ${first_name} = Get fake data first_name + ${last_name} = Get fake data last_name + + Go to page Home Contact Click Object Button New + Wait for modal New Contact + Populate Form ... First Name=${first_name} ... Last Name=${last_name} Click Modal Button Save + Wait Until Modal Is Closed + ${contact_id} = Get Current Record Id Store Session Record Contact ${contact_id} Validate Contact ${contact_id} ${first_name} ${last_name} - + *** Keywords *** Validate Contact [Arguments] ${contact_id} ${first_name} ${last_name} + [Documentation] + ... Given a contact id, validate that the contact has the + ... expected first and last name both through the detail page in + ... the UI and via the API. + # Validate via UI - Go To Record Home ${contact_id} - Page Should Contain ${first_name} ${last_name} + Go to page Detail Contact ${contact_id} + Page Should Contain ${first_name} ${last_name} + # Validate via API &{contact} = Salesforce Get Contact ${contact_id} - Should Be Equal ${first_name} &{contact}[FirstName] - Should Be Equal ${last_name} &{contact}[LastName] - - + Should Be Equal ${first_name} ${contact}[FirstName] + Should Be Equal ${last_name} ${contact}[LastName] diff --git a/robot/SummitEventsApp/tests/create_reg2.robot b/robot/SummitEventsApp/tests/create_reg2.robot new file mode 100644 index 00000000..a8d8d63c --- /dev/null +++ b/robot/SummitEventsApp/tests/create_reg2.robot @@ -0,0 +1,68 @@ +*** Settings *** + +Resource cumulusci/robotframework/Salesforce.robot +Suite Setup Open test browser +Suite Teardown Close Browser + +*** Variables *** +${instance_id} + +*** Test Cases *** +Create_SEA_reg + + #Query for the an SEA instance Id to test upon + @{records}= Salesforce Query Summit_Events_Instance__c select=Id,Name + ... Event__r.Name=Sample - Open Source Sprint Event - Single Step + ... Instance_Title__c=In-Person + ... limit=1 + FOR ${record} IN @{records} + log Name: ${record['Name']} Id: ${record['Id']} + END + + #Assign found instance Id to global variable + ${instance_id} Set Variable ${record}[Id] + + #Open the registration page for the instance + Go To Registration Page For Instance ${instance_id} + + #Creat face data for the registration form + ${first_name}= Get fake data first_name + ${last_name}= Get fake data last_name + ${email}= Get fake data ascii_email + ${phone}= Get fake data phone_number + ${day_of_week}= Get fake data day_of_week + + #Fill out the registration form + Input form data + ... First Name ${first_name} + ... Last Name ${last_name} + ... Email ${email} + ... Please provide either a home or mobile number ${phone} + ... What is your GitHub username? GITHUB_${last_name} + ... What is your Slack email - to stay connected? SLACK_${last_name} + + #Submit the registration form + SeleniumLibrary.Click Link Register + + @{reg_record}= Salesforce Query Summit_Events_Registration__c select=Id,Name,Registrant_First_Name__c,Registrant_Last_Name__c,Registrant_Email__c + ... Event_Instance__c=${Record}[Id] + ... Registrant_First_Name__c=${first_name} + ... Registrant_Last_Name__c=${last_name} + ... Registrant_Email__c=${email} + ... limit=1 + FOR ${reg_record} IN @{reg_record} + log Name: ${reg_record['Name']} Id: ${reg_record['Id']} + END + + #Validate the registration record + Should Be Equal As Strings ${reg_record}[Registrant_First_Name__c] ${first_name} + Should Be Equal As Strings ${reg_record}[Registrant_Last_Name__c] ${last_name} + Should Be Equal As Strings ${reg_record}[Registrant_Email__c] ${email} + +*** Keywords *** +Go To Registration Page For Instance + [Arguments] ${instance_id} + &{instance}= Salesforce Get Summit_Events_Instance__c ${instance_id} + &{event}= Salesforce Get Summit_Events__c ${instance}[Event__c] + ${url}= Catenate SEPARATOR= ${event}[Community_Base_URL__c] SummitEventsRegister?instanceID= ${instance_id} + Go To ${url} \ No newline at end of file diff --git a/robot/SummitEventsApp/tests/create_registration.robot b/robot/SummitEventsApp/tests/create_registration.robot new file mode 100644 index 00000000..99454793 --- /dev/null +++ b/robot/SummitEventsApp/tests/create_registration.robot @@ -0,0 +1,62 @@ +*** Settings *** + +Resource cumulusci/robotframework/Salesforce.robot + +Suite Setup Open Summit Test Browser +# Suite Teardown Delete Records and Close Browser + +*** Variables *** +${instance_id} = a061700000AjxFw + +*** Test Cases *** + +Via UI + ${first_name}= Get fake data first_name + ${last_name}= Get fake data last_name + ${email}= Get fake data ascii_email + ${phone}= Get fake data phone_number + ${day_of_week}= Get fake data day_of_week + Go To Registration Page For Instance ${instance_id} + Select From List By Label summit:I am... Primary Registrant +# Very difficult pattern break here: the phone "Type" select list has a label for attribute that doesn't match the SELECT + Select From List By Label summitx:Type Mobile + Input Text summit:First Name ${first_name} + Input Text summit:Last Name ${last_name} + Input Text summit:Email ${email} +# Mobile Phone is not visible when the page is loaded. When "Mobile" is selected for "Type", it +# dynamically is made visible + Wait Until Element Is Visible summit:Mobile Phone 5 seconds + Input Text summit:Mobile Phone ${phone} +# What's your favorite day of the week? has a single quote that can't be matched with Robot's xpath syntax +# Current approach uses "contains" text matching because "equals" was problematic - so do a partial match +# TODO: try jquery or css locator syntax - maybe more robust for matching arbitrary label text + Input Text summitx:your favorite day of the week ${day_of_week} +# Click Button Next + +*** Keywords *** + +# TODO Move the locators and Suite Setup keywords into a Resource file for reuse. + +Go To Registration Page For Instance + [Arguments] ${instance_id} + &{instance}= Salesforce Get Summit_Events_Instance__c ${instance_id} + &{event}= Salesforce Get Summit_Events__c ${instance}[Event__c] + ${url}= Catenate SEPARATOR= ${event}[Community_Base_URL__c] SummitEventsRegister?instanceID= ${instance_id} + Go To ${url} + +Locate Element By Summit VisualForce Label + [Arguments] ${browser} ${locator} ${tag} ${constraints} + ${label}= Get WebElement //label[contains(text(),'${locator}')] + ${id}= SeleniumLibrary.Get Element Attribute ${label} for + ${element}= Get WebElement //*[@id='${id}'] + [Return] ${element} + +Locate Dynamic Element By Summit VisualForce Label + [Arguments] ${browser} ${locator} ${tag} ${constraints} + ${element}= Get WebElement //label[contains(text(),'${locator}')]/..//*[self::select or self::input or self::textarea] + [Return] ${element} + +Open Summit Test Browser + Open Test Browser + Add Location Strategy summit Locate Element By Summit VisualForce Label + Add Location Strategy summitx Locate Dynamic Element By Summit VisualForce Label diff --git a/robot/SummitEventsApp/tests/new_contact_record.robot b/robot/SummitEventsApp/tests/new_contact_record.robot new file mode 100644 index 00000000..9b58c805 --- /dev/null +++ b/robot/SummitEventsApp/tests/new_contact_record.robot @@ -0,0 +1,17 @@ +*** Settings *** +Resource cumulusci/robotframework/Salesforce.robot +Documentation A simple Robot test + +*** Test Cases *** +Create a Contact using the API + + ## Create a new Contact + ${contact id}= Salesforce Insert Contact + ... FirstName=Eleanor + ... LastName=Rigby + + ## Get the new Contact and examine it + &{contact}= Salesforce Get Contact ${contact id} + Should be equal ${contact}[FirstName] Eleanor + Should be equal ${contact}[LastName] Rigby + From 51373a545f62f75d051d056e17a3f7ccdbaf5055 Mon Sep 17 00:00:00 2001 From: FrancisTR Date: Thu, 9 Jan 2025 19:11:51 -0600 Subject: [PATCH 13/81] Fix small typo --- force-app/main/default/pages/SummitEventsCancelReview.page | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/force-app/main/default/pages/SummitEventsCancelReview.page b/force-app/main/default/pages/SummitEventsCancelReview.page index 7b3632a5..a425a043 100644 --- a/force-app/main/default/pages/SummitEventsCancelReview.page +++ b/force-app/main/default/pages/SummitEventsCancelReview.page @@ -117,7 +117,7 @@ Created by Thaddaeus Dahlberg on 5/1/2018.

- +

@@ -135,4 +135,4 @@ Created by Thaddaeus Dahlberg on 5/1/2018. - \ No newline at end of file + From 0f89e849b3ba2375911e32dcce1c95253ecf9685 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:26:10 -0600 Subject: [PATCH 14/81] robot test update --- cumulusci.yml | 2 +- robot/SummitEventsApp/tests/create_reg2.robot | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cumulusci.yml b/cumulusci.yml index e9288940..3334b600 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -188,6 +188,6 @@ orgs: namespaced: true dev: - config_file: orgs/dev.json + config_file: orgs/educloud.json days: 7 namespaced: false \ No newline at end of file diff --git a/robot/SummitEventsApp/tests/create_reg2.robot b/robot/SummitEventsApp/tests/create_reg2.robot index a8d8d63c..792ca6d3 100644 --- a/robot/SummitEventsApp/tests/create_reg2.robot +++ b/robot/SummitEventsApp/tests/create_reg2.robot @@ -25,7 +25,7 @@ Create_SEA_reg #Open the registration page for the instance Go To Registration Page For Instance ${instance_id} - #Creat face data for the registration form + #Create fake data for the registration form ${first_name}= Get fake data first_name ${last_name}= Get fake data last_name ${email}= Get fake data ascii_email From cf5ad0a69b8a088babe50e5948742924422b8c0f Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Mon, 3 Feb 2025 17:18:43 -0600 Subject: [PATCH 15/81] fixed person account matching added new PA field --- .../classes/SummitEventsContactMatching.cls | 459 +++++++++--------- ...ontact_Matching_Mapping.github.md-meta.xml | 29 ++ ...egistration Default Layout.layout-meta.xml | 7 +- .../objects/Contact/Contact.object-meta.xml | 2 + ...w_Person_Account_Created__c.field-meta.xml | 11 + ...a_Person_Matching_Method__c.field-meta.xml | 6 +- ...Summit_Events_Admin.permissionset-meta.xml | 5 + ...t_Events_Registrant.permissionset-meta.xml | 16 +- .../SummitEventsContactMatching_TEST.cls | 58 +-- 9 files changed, 314 insertions(+), 279 deletions(-) create mode 100644 force-app/main/default/customMetadata/Summit_Events_Contact_Matching_Mapping.github.md-meta.xml create mode 100644 force-app/main/default/objects/Contact/Contact.object-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events_Registration__c/fields/New_Person_Account_Created__c.field-meta.xml diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index 992725cc..15d02d7b 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -8,6 +8,14 @@ public with sharing class SummitEventsContactMatching { @TestVisible private static Map> mappedMatchingMethods { get; set; } + //Make a wrapper class to list registrations and their matching contacts + public class RegistrationContactWrapper { + public Summit_Events_Registration__c registration { get; set; } + public List contacts { get; set; } + public List accounts { get; set; } + public List leads { get; set; } + } + public static void matchContacts(List newRegistrations) { Map matchingRules = new Map(); @@ -19,24 +27,26 @@ public with sharing class SummitEventsContactMatching { matchingRules = new Map([ SELECT Id, Contact_Matching_Rules__c, Lead_matching_rules__c, Person_Matching_Rules__c, Custom_Metadata_Person_Matching_Method__c, Person_Creation_Duplicate_Rule__c, Person_Matching_No_Match_Behavior__c, Contact_Creation_Duplicate_Rule__c, Custom_Metadata_Contact_Matching_Method__c, Contact_Matching_Multiple_Match_Behavior__c, Contact_Matching_No_Match_Behavior__c, - Lead_Creation_Duplicate_Rule__c, Custom_Metadata_Lead_Matching_Method__c, Lead_Matching_Multiple_Match_Behavior__c, Lead_Matching_No_Match_Behavior__c + Lead_Creation_Duplicate_Rule__c, Custom_Metadata_Lead_Matching_Method__c, Lead_Matching_Multiple_Match_Behavior__c, Lead_Matching_No_Match_Behavior__c, Person_Matching_Multiple_Match_Behavior__c FROM Summit_Events__c WHERE Id IN :matchingRules.keySet() AND (Custom_Metadata_Contact_Matching_Method__c != NULL OR Custom_Metadata_Lead_Matching_Method__c != NULL OR Custom_Metadata_Person_Matching_Method__c != NULL) ]); } - //System.debug('Matching Rules: ' + JSON.serializePretty(matchingRules)); if (!matchingRules.isEmpty()) { - // Setting up contact matching methods and mappings Set matchingMethods = new Set(); + Set personMatchingMethods = new Set(); Map> contactMappings = new Map>(); + Map> personAccountMappings = new Map>(); for (Summit_Events__c evt : matchingRules.values()) { matchingMethods.add(evt.Custom_Metadata_Contact_Matching_Method__c); + personMatchingMethods.add(evt.Custom_Metadata_Person_Matching_Method__c); } if (!matchingMethods.isEmpty()) { contactMappings = processMappings(matchingMethods, 'Summit_Events_Contact_Matching_Mapping__mdt', 'Contact_Matching_Method__c', 'Contact_Field_API_Name__c'); + personAccountMappings = processMappings(personMatchingMethods, 'Summit_Events_Contact_Matching_Mapping__mdt', 'Contact_Matching_Method__c', 'Contact_Field_API_Name__c'); } // Setting up lead matching methods and mappings @@ -49,7 +59,7 @@ public with sharing class SummitEventsContactMatching { leadMappings = processMappings(leadMatchingMethods, 'Summit_Events_Lead_Matching_Mapping__mdt', 'Lead_Matching_Method__c', 'Lead_Field_API_Name__c'); } - List byDuplicateRule = new List(); + List findContact = new List(); List findLead = new List(); List findPerson = new List(); @@ -72,185 +82,188 @@ public with sharing class SummitEventsContactMatching { // Assemble the reg record for lead, person, contact matching Summit_Events__c event = matchingRules.get(reg.Event__c); + //Find all registrations that have Salesforce Duplicate Rule selected if (event.Contact_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && contactEmpty && !personAccountActive) { - byDuplicateRule.add(reg); + findContact.add(reg); } else if (event.Lead_matching_rules__c == 'Use Salesforce Duplicate Rule' && (!personAccountActive && contactEmpty || personAccountActive && personAccountActive) && String.isBlank(reg.Lead__c)) { findLead.add(reg); } - if (event.Person_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && personEmpty) { - //System.debug('Person Account Active and matching rules'); findPerson.add(reg); } } - if (!byDuplicateRule.isEmpty()) { - searchForContacts(byDuplicateRule, matchingRules, contactMappings, leadMappings); - } + List registrationContactWrappers = new List(); - if (!findLead.isEmpty()) { - leadSearch(findLead, matchingRules, leadMappings); - } + if (!findContact.isEmpty() || !findPerson.isEmpty() || !findLead.isEmpty()) { - if (!findPerson.isEmpty()) { - searchForPersons(findPerson, matchingRules, contactMappings, leadMappings); - } - } - } + for (Summit_Events_Registration__c reg : newRegistrations) { + List matchContacts = new List(); + List matchAccounts = new List(); + List matchLeads = new List(); + Summit_Events__c event = matchingRules.get(reg.Event__c); - @TestVisible - private static Map> processMappings(Set matchingMethods, String sObjectType, String fieldAPIName, String sourceValue) { - String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); - mappedMatchingMethods = new Map>(); - if (mappedMatchingMethods.isEmpty()) { - if (matchingMethods.size() > 0) { - System.debug('Matching Methods: ' + matchingMethods); - String query = 'SELECT Source_Value__c, Source_Type__c, ' + fieldAPIName + ', ' + sourceValue + ' FROM ' + namespace + sObjectType + ' WHERE ' + fieldAPIName + ' IN :matchingMethods'; - System.debug('Query: ' + query); - List results = Database.query(query); - System.debug('Results: ' + JSON.serializePretty(results)); - for (SObject mapping : results) { - String method = (String) mapping.get(fieldAPIName); - if (!mappedMatchingMethods.containsKey(method)) { - mappedMatchingMethods.put(method, new List()); + if (!findContact.isEmpty()) { + matchContacts = handleMatching(reg, event.Contact_Creation_Duplicate_Rule__c, event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Contact_Matching_Method__c, contactMappings, 'Contact', 'Contact__c', 'New_Contact_Created__c'); } - mappedMatchingMethods.get(method).add(mapping); + + if (!findPerson.isEmpty()) { + matchAccounts = handleMatching(reg, event.Person_Creation_Duplicate_Rule__c, event.Person_Matching_No_Match_Behavior__c, event.Person_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Person_Matching_Method__c, personAccountMappings, 'Account', 'Person_Account__c', 'New_Person_Account_Created__c'); + } + + if (!findLead.isEmpty()) { + matchLeads = handleMatching(reg, event.Lead_Creation_Duplicate_Rule__c, event.Lead_Matching_No_Match_Behavior__c, event.Lead_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Lead_Matching_Method__c, leadMappings, 'Lead', 'Lead__c', 'New_Lead_Created__c'); + } + + RegistrationContactWrapper rcw = new RegistrationContactWrapper(); + rcw.registration = reg; + rcw.contacts = matchContacts; + rcw.accounts = matchAccounts; + rcw.leads = matchLeads; + registrationContactWrappers.add(rcw); } - } - } - return mappedMatchingMethods; - } - private static void searchForPersons(List newRegistrations, Map matchingRules, Map> contactMappings, Map> leadMappings) { - // Find out which Registrations need new Contacts, creates them, - // and matches with existing Contacts whenever possible as defined by existing Duplicate Rules - Boolean personAccountActive = SummitEventsShared.personAccountsEnabled(); - for (Summit_Events_Registration__c reg : newRegistrations) { - Summit_Events__c event = matchingRules.get(reg.Event__c); - Account a = makePerson(reg, event.Custom_Metadata_Contact_Matching_Method__c, contactMappings); - doCRUD crud = new doCRUD(); - String matchType = matchingRules.get(reg.Event__c).Person_Creation_Duplicate_Rule__c.replaceAll(' ', '_'); - List matchPersons = findMatches(a, matchType); - String matchLog = ''; - if (matchPersons == null || matchPersons.isEmpty()) { // SOQL queries return null instead of empty lists - if (event.Person_Matching_No_Match_Behavior__c == 'Create Person Account') { - crud.addRecord(a); - reg.New_Contact_Created__c = true; - if (personAccountActive) { - reg.Person_Account__c = a.Id; - reg.Contact__c = (Id) a.get('PersonContactId'); + Set accountIds = new Set(); + Set contactIds = new Set(); + Set leadIds = new Set(); + for (RegistrationContactWrapper rw : registrationContactWrappers) { + for (Contact c : rw.contacts) { + contactIds.add(c.Id); } - matchLog += matchingLog(reg, new List(), 'Match not found using Duplicate Rule ' + matchingRules.get(reg.Event__c).Person_Creation_Duplicate_Rule__c.replaceAll(' ', '_') + '', 'New Person Account created!', true); - } else { - matchLog += matchingLog(null, new List(), 'Match not found using Duplicate Rule ' + matchType + '', 'Contact creation skipped based on "Contact Matching Skip Contact Creation" field value on Summit Events object', false); - matchLog += '
'; - String leadMatch = matchingRules.get(reg.Event__c).Lead_Creation_Duplicate_Rule__c; - if (String.isNotBlank(leadMatch)) { - leadMatch = leadMatch.replaceAll(' ', '_'); - matchLog += searchForLead(reg, event, leadMatch, leadMappings); + for (Account a : rw.accounts) { + accountIds.add(a.Id); + } + for (Lead l : rw.leads) { + leadIds.add(l.Id); } } - } else if (matchPersons.size() == 1) { - reg.Person_Account__c = matchPersons[0].Id; - reg.New_Contact_Created__c = false; - matchLog += matchingLog(reg, new List(), 'Match found using Salesforce Duplicate Rule ' + matchType + '', '', false); - } else { - if (event.Contact_Matching_Multiple_Match_Behavior__c == 'Skip matching') { - matchLog += matchingLog(null, matchPersons, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType + ', Person Account matching skipped based on "Person Matching Multiple Match Behavior" field value on Summit Events object', '', false); - } else if (event.Contact_Matching_Multiple_Match_Behavior__c == 'Match with most recently modified') { - matchLog += matchingLog(null, matchPersons, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType + ', Most recently modified Person Account was selected based on "Person Matching Multiple Match Behavior" field value on Summit Events object', '', true); - reg.Contact__c = matchPersons[0].Id; + //Query all contacts, accounts, and leads to get the most recent data using queryMatchedRecords method. This is to bulkify the query and not inline for each new registration + Map contactsComplete = new Map(); + Map accountsComplete = new Map(); + Map leadsComplete = new Map(); + if (contactIds.size() > 0) { + contactsComplete = new doCRUD().queryMatchedRecords('Email, MailingPostalCode', 'Contact', contactIds); + } + if (accountIds.size() > 0) { + accountsComplete = new doCRUD().queryMatchedRecords('PersonEmail, PersonMailingPostalCode', 'Account', accountIds); + } + if (leadIds.size() > 0) { + leadsComplete = new doCRUD().queryMatchedRecords('Email, PostalCode', 'Lead', leadIds); } - } - reg.Matching_Log__c = matchLog; - } - } - @TestVisible - private static void searchForContacts(List newRegistrations, Map matchingRules, Map> contactMappings, Map> leadMappings) { - // Find out which Registrations need new Contacts, creates them, - // and matches with existing Contacts whenever possible as defined by existing Duplicate Rules - for (Summit_Events_Registration__c reg : newRegistrations) { - Summit_Events__c event = matchingRules.get(reg.Event__c); - Contact c = makeContact(reg, event.Custom_Metadata_Contact_Matching_Method__c, contactMappings); - doCRUD crud = new doCRUD(); - String matchType = matchingRules.get(reg.Event__c).Contact_Creation_Duplicate_Rule__c.replaceAll(' ', '_'); - List matchContacts = findMatches(c, matchType); - System.debug('matchContacts: ' + matchContacts); - String matchLog = ''; - if (matchContacts == null || matchContacts.isEmpty()) { // SOQL queries return null instead of empty lists - if (event.Contact_Matching_No_Match_Behavior__c == 'Create Contact') { - crud.addRecord(c); - reg.New_Contact_Created__c = true; - reg.Contact__c = c.Id; - matchLog += matchingLog(reg, new List(), 'Match not found using Duplicate Rule ' + matchingRules.get(reg.Event__c).Contact_Creation_Duplicate_Rule__c.replaceAll(' ', '_') + '', 'New contact created!', true); - } else { - matchLog += matchingLog(null, new List(), 'Match not found using Duplicate Rule ' + matchType + '', 'Contact creation skipped based on "Contact Matching Skip Contact Creation" field value on Summit Events object', false); - matchLog += '
'; - String leadMatch = matchingRules.get(reg.Event__c).Lead_Creation_Duplicate_Rule__c; - if (String.isNotBlank(leadMatch)) { - leadMatch = leadMatch.replaceAll(' ', '_'); - matchLog += searchForLead(reg, event, leadMatch, leadMappings); + //Update the registration records with the matched contact, account, and lead + for (RegistrationContactWrapper rw : registrationContactWrappers) { + List contactsQueried = new List(); + List accountsQueried = new List(); + List leadsQueried = new List(); + + for (Contact c : rw.contacts) { + if (contactsComplete.containsKey(c.Id)) { + contactsQueried.add((Contact) contactsComplete.get(c.Id)); + } } + rw.contacts = contactsQueried; + + for (Account a : rw.accounts) { + if (accountsComplete.containsKey(a.Id)) { + accountsQueried.add((Account) accountsComplete.get(a.Id)); + } + } + rw.accounts = accountsQueried; + + for (Lead l : rw.leads) { + if (leadsComplete.containsKey(l.Id)) { + leadsQueried.add((Lead) leadsComplete.get(l.Id)); + } + } + rw.leads = leadsQueried; } - } else if (matchContacts.size() == 1) { - reg.Contact__c = matchContacts[0].Id; - reg.New_Contact_Created__c = false; - matchLog += matchingLog(reg, new List(), 'Match found using Salesforce Duplicate Rule ' + matchType + '', '', false); - } else { - if (event.Contact_Matching_Multiple_Match_Behavior__c == 'Skip matching') { - matchLog += matchingLog(null, matchContacts, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType + ', Contact matching skipped based on "Contact Matching Multiple Match Behavior" field value on Summit Events object', '', false); - } else if (event.Contact_Matching_Multiple_Match_Behavior__c == 'Match with most recently modified') { - matchLog += matchingLog(null, matchContacts, 'Multiple matches found using Salesforce Duplicate Rule ' + matchType + ', Most recently modified Contact was selected based on "Contact Matching Multiple Match Behavior" field value on Summit Events object', '', true); - reg.Contact__c = matchContacts[0].Id; + + //Build matching logs + for (RegistrationContactWrapper rw : registrationContactWrappers) { + Summit_Events__c event = matchingRules.get(rw.registration.Event__c); + rw.registration.Matching_Log__c = ''; + rw.registration.Matching_Log__c += handleMatchingLog('Contact', findContact.isEmpty(), event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, rw.registration.New_Contact_Created__c, rw.registration.Contact__c, rw.contacts, matchingRules.get(rw.registration.Event__c).Contact_Creation_Duplicate_Rule__c); + rw.registration.Matching_Log__c += handleMatchingLog('Person Account', findPerson.isEmpty(), event.Person_Matching_No_Match_Behavior__c, event.Person_Matching_Multiple_Match_Behavior__c, rw.registration.New_Person_Account_Created__c, rw.registration.Person_Account__c, rw.accounts, matchingRules.get(rw.registration.Event__c).Person_Creation_Duplicate_Rule__c); + rw.registration.Matching_Log__c += handleMatchingLog('Lead', findLead.isEmpty(), event.Lead_Matching_No_Match_Behavior__c, event.Lead_Matching_Multiple_Match_Behavior__c, rw.registration.New_Lead_Created__c, rw.registration.Lead__c, rw.leads, matchingRules.get(rw.registration.Event__c).Lead_Creation_Duplicate_Rule__c); } } - reg.Matching_Log__c = matchLog; + } } - private static void leadSearch(List newRegistrations, Map matchingRules, Map> leadMappings) { - for (Summit_Events_Registration__c newReg : newRegistrations) { - Summit_Events__c seaEvent = matchingRules.get(newReg.Event__c); - String leadRuleName = matchingRules.get(newReg.Event__c).Lead_Creation_Duplicate_Rule__c; - newReg.Matching_Log__c = searchForLead(newReg, seaEvent, leadRuleName, leadMappings); + private static String handleMatchingLog(String sObjectType, Boolean isEmpty, String noMatchBehavior, String multipleMatchBehavior, Boolean newCreated, Id sObjectId, List sObjects, String duplicateRule) { + String matchLog = ''; + if (!isEmpty) { + if (noMatchBehavior.equals('Create ' + sObjectType) && newCreated && sObjectId != null) { + matchLog += matchingLog(sObjects, 'Match not found using Duplicate Rule ' + duplicateRule.replaceAll(' ', '_') + '', 'New ' + sObjectType + ' created!', true); + } + if (!sObjects.isEmpty() && !newCreated) { + if (multipleMatchBehavior.equals('Skip matching')) { + matchLog += matchingLog(sObjects, 'Multiple matches found using Salesforce Duplicate Rule ' + duplicateRule.replaceAll(' ', '_') + ', ' + sObjectType + ' matching skipped based on "Multiple Match Behavior" field value on Summit Events object', '', false); + } else if (multipleMatchBehavior.equals('Match with most recently modified')) { + matchLog += matchingLog(sObjects, 'Multiple matches found using Salesforce Duplicate Rule ' + duplicateRule.replaceAll(' ', '_') + ', Most recently modified ' + sObjectType + ' was selected based on "Multiple Match Behavior" field value on Summit Events object', '', false); + } + } } + return matchLog; } - private static String searchForLead(Summit_Events_Registration__c reg, Summit_Events__c event, String matchingRule, Map> leadMappings) { + private static List handleMatching(Summit_Events_Registration__c reg, String matchingMethod, String noMatchBehavior, String multipleMatchBehavior, String customMappingType, Map> mappings, String sObjectType, String fieldAPIName, String newFieldAPIName) { + //Build a Contact, Account, or Lead object + List matches = new List(); + if (String.isNotBlank(matchingMethod)) { + SObject newObj = makeSObject(reg, customMappingType, mappings, sObjectType); + String matchType = matchingMethod.replaceAll(' ', '_'); + matches = findMatches(newObj, matchType); + doCRUD crud = new doCRUD(); - //Matching rules match be label - matchingRule = matchingRule.replaceAll(' ', '_'); - Lead l = makeLead(reg, event.Custom_Metadata_Lead_Matching_Method__c, leadMappings); - List matchLeads = findMatches(l, matchingRule); - doCRUD crud = new doCRUD(); - String matchLog = ''; - if (matchLeads == null || matchLeads.isEmpty()) { // SOQL queries return null instead of empty lists - if (event.Lead_Matching_No_Match_Behavior__c == 'Create Lead') { - crud.addRecord(l); - reg.New_Lead_Created__c = true; - reg.Lead__c = l.Id; - matchLog += matchingLog(reg, new List(), 'Match not found using Duplicate Rule ' + matchingRule + '', 'New lead created!', true); - } else { - matchLog += matchingLog(null, new List(), 'Match not found using Duplicate Rule ' + matchingRule + '', 'Lead creation skipped based on "Lead Matching Skip Lead Creation" field value on Summit Events object', true); - } - } else if (matchLeads.size() == 1) { - reg.Lead__c = matchLeads[0].Id; - reg.New_Lead_Created__c = false; - matchLog += matchingLog(reg, new List(), 'Match found using Salesforce Duplicate Rule ' + matchingRule.replaceAll('_', ' ') + '', '', false); - } else { - if (event.Lead_Matching_Multiple_Match_Behavior__c == 'Skip matching') { - matchLog += matchingLog(null, matchLeads, 'Multiple matches found using Salesforce Duplicate Rule ' + matchingRule.replaceAll('_', ' ') + ', Lead matching skipped based on "Lead Matching Multiple Match Behavior" field value on Summit Events object', '', false); - } else if (event.Lead_Matching_Multiple_Match_Behavior__c == 'Match with most recently modified') { - matchLog += matchingLog(null, matchLeads, 'Multiple matches found using Salesforce Duplicate Rule ' + matchingRule.replaceAll('_', ' ') + ', Most recently modified Lead was selected based on "Lead Matching Multiple Match Behavior" field value on Summit Events object', '', true); - reg.Lead__c = matchLeads[0].Id; + if (matches.isEmpty() && noMatchBehavior.startsWithIgnoreCase('Create')) { + crud.addRecord(newObj); + reg.put(fieldAPIName, newObj.Id); + reg.put(newFieldAPIName, true); + matches.add(newObj); + } else if (!matches.isEmpty() && multipleMatchBehavior.equals('Match with most recently modified')) { + reg.put(fieldAPIName, matches.get(0).Id); + reg.put(newFieldAPIName, false); } } + return matches; + } - return matchLog; + private static SObject makeSObject(Summit_Events_Registration__c reg, String customMappingType, Map> mappings, String sObjectType) { + if (sObjectType.equals('Contact')) { + return makeContact(reg, customMappingType, mappings); + } else if (sObjectType.equals('Account')) { + return makePerson(reg, customMappingType, mappings); + } else if (sObjectType.equals('Lead')) { + return makeLead(reg, customMappingType, mappings); + } + return null; + } + + @TestVisible + private static Map> processMappings(Set matchingMethods, String sObjectType, String fieldAPIName, String sourceValue) { + String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); + mappedMatchingMethods = new Map>(); + if (mappedMatchingMethods.isEmpty()) { + if (matchingMethods.size() > 0) { + String query = 'SELECT Source_Value__c, Source_Type__c, ' + fieldAPIName + ', ' + sourceValue + ' FROM ' + namespace + sObjectType + ' WHERE ' + fieldAPIName + ' IN :matchingMethods'; + List results = Database.query(query); + for (SObject mapping : results) { + String method = (String) mapping.get(fieldAPIName); + if (!mappedMatchingMethods.containsKey(method)) { + mappedMatchingMethods.put(method, new List()); + } + mappedMatchingMethods.get(method).add(mapping); + } + } + } + return mappedMatchingMethods; } private static List findMatches(SObject record, String matchingRule) { + List results = new List(); doCRUD crud = new doCRUD(); @@ -262,13 +275,11 @@ public with sharing class SummitEventsContactMatching { } catch (Exception e) { System.debug(e.getMessage()); } - List matchSObjects = new List(); - if (results.size() > 0) { - for (Datacloud.DuplicateResult dr : results[0].getDuplicateResults()) { - - if (matchingRule == dr.getDuplicateRule()) { - for (Datacloud.MatchResult mr : dr.getMatchResults()) { + for (Datacloud.FindDuplicatesResult findDupeResult : results) { + for (Datacloud.DuplicateResult dupeResult : findDupeResult.getDuplicateResults()) { + if (matchingRule == dupeResult.getDuplicateRule()) { + for (Datacloud.MatchResult mr : dupeResult .getMatchResults()) { for (Datacloud.MatchRecord mRecord : mr.getMatchRecords()) { try { matchSObjects.add(mRecord.getRecord()); @@ -280,6 +291,8 @@ public with sharing class SummitEventsContactMatching { } } } + + //matchSObjects.addAll(crud.queryMatchedRecords('Id, FirstName, LastName, Email, MailingPostalCode', objectTypeName, matchIdsMapToReg)); return matchSObjects; } @@ -290,34 +303,35 @@ public with sharing class SummitEventsContactMatching { c.LastName = reg.Registrant_Last_Name__c; c.Email = reg.Registrant_Email__c; c.Birthdate = reg.Registrant_Date_of_Birth__c; - c.MailingStreet = reg.Registrant_Street_1__c; c.MailingCity = reg.Registrant_City__c; c.MailingState = reg.Registrant_State__c; c.MailingPostalCode = reg.Registrant_Zip__c != '' ? reg.Registrant_Zip__c : reg.Registrant_Postal_Code__c; c.MailingCountry = reg.Registrant_Country__c; - c.Phone = reg.Registrant_Phone__c; c.MobilePhone = reg.Registrant_Mobile_Phone__c; - c.Created_with_Summit_Events__c = true; // Apply any mapped values from custom metadata to the contact - if (contactMappings.containsKey(matchingMethod)) { - List mappings = contactMappings.get(matchingMethod); - for (Summit_Events_Contact_Matching_Mapping__mdt mapping : mappings) { - if (mapping.Source_Type__c.equalsIgnoreCase('Hardcoded')) { - c = (Contact) applyCorrectFieldTypesToValues(c, mapping.Contact_Field_API_Name__c, mapping.Source_Value__c); - } else { - c = (Contact) applyCorrectFieldTypesToValues(c, mapping.Contact_Field_API_Name__c, reg.get(mapping.Source_Value__c)); - } - } - } + c = (Contact) applyMappings(c, matchingMethod, contactMappings, reg); return c; } - private static Account makePerson(Summit_Events_Registration__c reg, String matchingMethod, Map> contactMappings) { + private static SObject applyMappings(SObject record, String matchingMethod, Map> mappings, Summit_Events_Registration__c reg) { + if (mappings.containsKey(matchingMethod)) { + List mappingList = mappings.get(matchingMethod); + for (SObject mapping : mappingList) { + String sourceType = (String) mapping.get('Source_Type__c'); + String fieldAPIName = (String) mapping.get('Contact_Field_API_Name__c'); + Object value = sourceType.equalsIgnoreCase('Hardcoded') ? mapping.get('Source_Value__c') : reg.get((String) mapping.get('Source_Value__c')); + record = applyCorrectFieldTypesToValues(record, fieldAPIName, value); + } + } + return record; + } + + private static Account makePerson(Summit_Events_Registration__c reg, String customMappingType, Map> contactMappings) { Account personAccount = new Account(); Boolean personAccountActive = SummitEventsShared.personAccountsEnabled(); try { @@ -344,17 +358,7 @@ public with sharing class SummitEventsContactMatching { } // Apply any mapped values from custom metadata to the contact - if (contactMappings.containsKey(matchingMethod)) { - List mappings = contactMappings.get(matchingMethod); - for (Summit_Events_Contact_Matching_Mapping__mdt mapping : mappings) { - if (mapping.Source_Type__c.equalsIgnoreCase('Hardcoded')) { - personAccount = (Account) applyCorrectFieldTypesToValues(personAccount, mapping.Contact_Field_API_Name__c, mapping.Source_Value__c); - } else { - personAccount = (Account) applyCorrectFieldTypesToValues(personAccount, mapping.Contact_Field_API_Name__c, reg.get(mapping.Source_Value__c)); - } - } - } - + personAccount = (Account) applyMappings(personAccount, customMappingType, contactMappings, reg); return personAccount; } @@ -364,27 +368,16 @@ public with sharing class SummitEventsContactMatching { l.LastName = reg.Registrant_Last_Name__c; l.Email = reg.Registrant_Email__c; l.Company = reg.Preferred_First_Name_Formatted__c; - l.Street = reg.Registrant_Street_1__c; l.City = reg.Registrant_City__c; l.State = reg.Registrant_State__c; l.PostalCode = reg.Registrant_Zip__c != '' ? reg.Registrant_Zip__c : reg.Registrant_Postal_Code__c; l.Country = reg.Registrant_Country__c; - l.Phone = reg.Registrant_Phone__c; l.MobilePhone = reg.Registrant_Mobile_Phone__c; //Apply any values mapped in custom metadata to the lead - if (leadMappings.containsKey(matchingMethod)) { - List mappings = leadMappings.get(matchingMethod); - for (Summit_Events_Lead_Matching_Mapping__mdt mapping : mappings) { - if (mapping.Source_Type__c.equalsIgnoreCase('Hardcoded')) { - l = (Lead) applyCorrectFieldTypesToValues(l, mapping.Lead_Field_API_Name__c, mapping.Source_Value__c); - } else { - l = (Lead) applyCorrectFieldTypesToValues(l, mapping.Lead_Field_API_Name__c, reg.get(mapping.Source_Value__c)); - } - } - } + l = (Lead) applyMappings(l, matchingMethod, leadMappings, reg); return l; } @@ -414,7 +407,7 @@ public with sharing class SummitEventsContactMatching { } @TestVisible - private static String matchingLog(Summit_Events_Registration__c registration, List foundObjects, String heading1, String heading2, Boolean isNew) { + private static String matchingLog(List foundObjects, String heading1, String heading2, Boolean isNew) { String mOut = ''; if (String.isNotBlank(heading1)) { mOut += '
' + heading1 + '
'; @@ -423,7 +416,7 @@ public with sharing class SummitEventsContactMatching { mOut += '
' + heading2 + '
'; } - if (registration != null || foundObjects.size() > 0) { + if (foundObjects.size() > 0) { mOut += '
Last Name
'; mOut += ''; @@ -431,20 +424,25 @@ public with sharing class SummitEventsContactMatching { mOut += ''; mOut += ''; mOut += ''; + mOut += ''; mOut += ''; mOut += ''; mOut += ''; - if (registration != null) { - mOut += matchingRow(registration.Id, registration.Registrant_Last_Name__c, registration.Registrant_First_Name__c, registration.Registrant_Email__c, registration.Registrant_Zip__c, (isNew ? 'Created' : 'Matched')); - } - Boolean isFirst = isNew; + Boolean isFirst = true; for (SObject sObj : foundObjects) { Map sObjMapStringObj = (Map) JSON.deserializeUntyped(JSON.serialize(sObj)); - String zip = ''; + String zip = '---'; String firstName = ''; String lastName = ''; String email = ''; + // Get the org's time zone + TimeZone orgTimeZone = UserInfo.getTimeZone(); + + //Adjust the datetime to reflect the org's time zone + Datetime lastModifiedDatetime = (Datetime) sObj.get('LastModifiedDate'); + String lastModifiedString = lastModifiedDatetime != null ? lastModifiedDatetime.format('MM/dd/yyyy hh:mm:ss', orgTimeZone.getID()) : ''; + if (sObj.getSObjectType() == Lead.SObjectType) { if (sObjMapStringObj.containsKey('PostalCode')) { zip = (String) sObj.get('PostalCode'); @@ -456,8 +454,8 @@ public with sharing class SummitEventsContactMatching { if (sObjMapStringObj.containsKey('PersonMailingPostalCode')) { zip = (String) sObj.get('PersonMailingPostalCode'); } - if (sObjMapStringObj.containsKey('PersonalEmail')) { - email = (String) sObj.get('PersonalEmail'); + if (sObjMapStringObj.containsKey('PersonEmail')) { + email = (String) sObj.get('PersonEmail'); } } else if (sObj.getSObjectType() == Contact.SObjectType) { if (sObjMapStringObj.containsKey('MailingPostalCode')) { @@ -467,21 +465,25 @@ public with sharing class SummitEventsContactMatching { email = (String) sObj.get('Email'); } } - if (sObjMapStringObj.containsKey('Name')) { + + if (sObjMapStringObj.containsKey('LastName') && sObjMapStringObj.containsKey('FirstName')) { + firstName = (String) sObj.get('FirstName'); + lastName = (String) sObj.get('LastName'); + } else if (sObjMapStringObj.containsKey('Name')) { String[] name = ((String) sObj.get('Name')).split(' '); if (name.size() > 1) { firstName = name[0]; - lastName = name[1]; + lastName = name[name.size() - 1]; } else { lastName = name[0]; } - } else { - if (sObjMapStringObj.containsKey('FirstName')) { - firstName = (String) sObj.get('FirstName'); - } - if (sObjMapStringObj.containsKey('LastName')) { - lastName = (String) sObj.get('LastName'); - } + } + + String action = 'Skipped'; + if (isNew) { + action = 'Created'; + } else if (isFirst) { + action = 'Selected'; } mOut += matchingRow( @@ -490,7 +492,8 @@ public with sharing class SummitEventsContactMatching { firstName, email, zip, - isFirst ? 'Selected' : 'Skipped' + action, + lastModifiedString ); isFirst = false; } @@ -499,18 +502,15 @@ public with sharing class SummitEventsContactMatching { return mOut; } - private static String matchingRow(String recordId, String LastName, String FirstName, String Email, String Zip, String Action) { + private static String matchingRow(String recordId, String lastName, String firstName, String email, String zip, String action, String lastModifiedString) { String matchRow = ''; matchRow += ''; - matchRow += ''; - matchRow += ''; - matchRow += ''; - if (String.isNotBlank(Zip)) { - matchRow += ''; - } else { - matchRow += ''; - } - matchRow += ''; + matchRow += ''; + matchRow += ''; + matchRow += ''; + matchRow += ''; + matchRow += ''; + matchRow += ''; matchRow += ''; return matchRow; } @@ -519,15 +519,32 @@ public with sharing class SummitEventsContactMatching { public SObject addRecord(SObject recordToAdd) { try { - upsert recordToAdd; + insert recordToAdd; } catch (Exception ex) { System.debug(ex.getMessage()); } return recordToAdd; } - public List findDuplicatesResults(List cons) { - return Datacloud.FindDuplicates.findDuplicates(cons); + public Map queryMatchedRecords(String queryFields, String sObjectName, Set matchedIds) { + // Query all records for matched IDs + String extraWhere = ''; + if (sObjectName == 'Account') { + Id personAccountRecordTypeId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('PersonAccount').getRecordTypeId(); + extraWhere = ' AND IsPersonAccount = true And RecordTypeId = :personAccountRecordTypeId'; + } + String query = 'SELECT Id, FirstName, LastName, LastModifiedDate, ' + queryFields + ' FROM ' + sObjectName + ' WHERE Id IN :matchedIds ' + extraWhere + ' ORDER BY LastModifiedDate DESC'; + List matchedRecords = Database.query(query); + + Map matchedRecordsMap = new Map(); + for (SObject record : matchedRecords) { + matchedRecordsMap.put(record.Id, record); + } + return matchedRecordsMap; + } + + public List findDuplicatesResults(List record) { + return Datacloud.FindDuplicates.findDuplicates(record); } } diff --git a/force-app/main/default/customMetadata/Summit_Events_Contact_Matching_Mapping.github.md-meta.xml b/force-app/main/default/customMetadata/Summit_Events_Contact_Matching_Mapping.github.md-meta.xml new file mode 100644 index 00000000..f3af28a0 --- /dev/null +++ b/force-app/main/default/customMetadata/Summit_Events_Contact_Matching_Mapping.github.md-meta.xml @@ -0,0 +1,29 @@ + + + + false + + Contact_Field_API_Name__c + Description + + + Contact_Matching_Method__c + Red + + + Matching_Only__c + false + + + Source_Object__c + summit__Summit_Events_Registration__c + + + Source_Type__c + Field + + + Source_Value__c + Add_Info_Answer_3__c + + diff --git a/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml b/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml index 770b7215..10b9ae91 100644 --- a/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml +++ b/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml @@ -1,6 +1,5 @@ - OpenSlackRecordChannel Submit true @@ -251,6 +250,10 @@ Edit New_Lead_Created__c + + Edit + New_Person_Account_Created__c + Edit Matching_Log__c @@ -803,7 +806,7 @@ false false - 00hDK000003WwG5 + 00hDK000003u7De 4 0 Default diff --git a/force-app/main/default/objects/Contact/Contact.object-meta.xml b/force-app/main/default/objects/Contact/Contact.object-meta.xml new file mode 100644 index 00000000..d254e9b0 --- /dev/null +++ b/force-app/main/default/objects/Contact/Contact.object-meta.xml @@ -0,0 +1,2 @@ + + diff --git a/force-app/main/default/objects/Summit_Events_Registration__c/fields/New_Person_Account_Created__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Registration__c/fields/New_Person_Account_Created__c.field-meta.xml new file mode 100644 index 00000000..5fed8f40 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Registration__c/fields/New_Person_Account_Created__c.field-meta.xml @@ -0,0 +1,11 @@ + + + New_Person_Account_Created__c + false + This is checked when while registering for an event on the Web a client's person account was not found and the event app created one for them. + This is checked when while registering for an event on the Web a client's person account was not found and the event app created one for them. + + false + false + Checkbox + diff --git a/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml b/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml index 9fbcf850..5afe25e7 100644 --- a/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml +++ b/force-app/main/default/objects/Summit_Events__c/fields/Custom_Metadata_Person_Matching_Method__c.field-meta.xml @@ -1,7 +1,6 @@ Custom_Metadata_Person_Matching_Method__c - false false false @@ -11,6 +10,11 @@ true false + + Admissions + false + + Blue false diff --git a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml index 639f46f7..3efc19e1 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml @@ -1282,6 +1282,11 @@ Summit_Events_Registration__c.New_Lead_Created__c true + + true + Summit_Events_Registration__c.New_Person_Account_Created__c + true + true Summit_Events_Registration__c.Number_of_Guests__c diff --git a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml index 1b6a8fd9..8172db17 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml @@ -5,6 +5,11 @@ true Permissions to allow a public guest user to fill out an event registration. + + true + Account.Description + true + false Summit_Events_Appointment_Type__c.Appointment_Category__c @@ -1160,6 +1165,11 @@ Summit_Events_Registration__c.New_Lead_Created__c true + + true + Summit_Events_Registration__c.New_Person_Account_Created__c + true + true Summit_Events_Registration__c.Number_of_Guests__c @@ -2478,7 +2488,7 @@ false - false + true false false true @@ -2647,4 +2657,8 @@ SummitEventsSubmit true + + PersonAccount.PersonAccount + true + diff --git a/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls b/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls index 4695ed29..5735a74c 100644 --- a/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls +++ b/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls @@ -6,18 +6,6 @@ @IsTest public class SummitEventsContactMatching_TEST { - // Mock class within the test class - public class SummitEventsFindDuplicatesMock implements HttpCalloutMock { - public HttpResponse respond(HttpRequest req) { - // Create a fake response - HttpResponse res = new HttpResponse(); - res.setHeader('Content-Type', 'application/json'); - res.setBody('[{"duplicateResults":[{"duplicateRule":"Standard_Contact_Duplicate_Rule","matchResults":[{"matchRecords":[{"record":{"Id":"0031t00000XXXXXXAA1","Name":"Test Record"}}]}]}]}]'); - res.setStatusCode(200); - return res; - } - } - @TestSetup static void setup() { @@ -130,40 +118,6 @@ public class SummitEventsContactMatching_TEST { } } - @IsTest - static void testSearchForContacts() { - // Prepare test data - List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); - Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'Test', 'Record', 'test@example.com', '55555', '1971-03-22', '2012', null); - - Summit_Events__c seaTestEvent = SummitEventsTestSharedDataFactory.getEventRecord(seaTestInstances[1].Event__c); - seaTestEvent.Contact_Matching_Rules__c = 'Use Salesforce Duplicate Rule'; - seaTestEvent.Contact_Creation_Duplicate_Rule__c = 'Standard Contact Duplicate Rule'; - seaTestEvent.Custom_Metadata_Contact_Matching_Method__c = 'Admissions'; - seaTestEvent.Contact_Matching_No_Match_Behavior__c = 'Create Contact'; - seaTestEvent.Contact_Matching_Multiple_Match_Behavior__c = 'Match with most recently modified'; - update seaTestEvent; - - Map matchingRules = new Map(); - matchingRules.put(seaTestEvent.Id, seaTestEvent); - - Map> contactMappings = new Map>(); - Map> leadMappings = new Map>(); - - // Set the mock - Test.setMock(HttpCalloutMock.class, new SummitEventsFindDuplicatesMock()); - - List newRegistrations = new List(); - newRegistrations.add(seaTestRegistration); - // Call the method to test - Test.startTest(); - SummitEventsContactMatching.searchForContacts(newRegistrations, matchingRules, contactMappings, leadMappings); - Test.stopTest(); - - // Add assertions to verify the behavior - System.assertNotEquals(null, seaTestRegistration.Contact__c, 'The Contact__c field should not be null'); - } - @IsTest static void SummitEventsContactMatching2() { List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); @@ -280,20 +234,16 @@ public class SummitEventsContactMatching_TEST { foundObjects.add(lead); // Call the matchingLog method - String result = SummitEventsContactMatching.matchingLog(seaTestRegistration, foundObjects, 'Heading 1', 'Heading 2', true); - + String result = SummitEventsContactMatching.matchingLog(foundObjects, 'Heading 1', 'Heading 2', true); + System.debug('Result: ' + JSON.serializePretty(result)); // Verify the result System.assertNotEquals(null, result, 'The result should not be null'); - System.assert(result.contains('Doe'), 'The result should contain the last name Doe'); - System.assert(result.contains('John'), 'The result should contain the first name John'); - System.assert(result.contains('john.doe@example.com'), 'The result should contain the email john.doe@example.com'); - System.assert(result.contains('12345'), 'The result should contain the zip code 12345'); System.assert(result.contains('Smith'), 'The result should contain the last name Smith'); System.assert(result.contains('Jane'), 'The result should contain the first name Jane'); - System.assert(result.contains('jane.smith@example.com'), 'The result should contain the email jane.smith@example.com'); - System.assert(result.contains('67890'), 'The result should contain the zip code 67890'); System.assert(result.contains('Brown'), 'The result should contain the last name Brown'); System.assert(result.contains('Charlie'), 'The result should contain the first name Charlie'); + System.assert(result.contains('jane.smith@example.com'), 'The result should contain the email jane.smith@example.com'); + System.assert(result.contains('67890'), 'The result should contain the zip code 67890'); System.assert(result.contains('charlie.brown@example.com'), 'The result should contain the email charlie.brown@example.com'); System.assert(result.contains('54321'), 'The result should contain the zip code 54321'); } From 9a2d4d26dfb4238afe83b8c482e45235281a25d3 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Mon, 3 Feb 2025 18:11:50 -0600 Subject: [PATCH 16/81] Added sorting to get last modified correctly --- cumulusci.yml | 2 +- .../classes/SummitEventsContactMatching.cls | 20 +++++++++++-- ...ontact_Matching_Mapping.github.md-meta.xml | 29 ------------------- ...t_Events_Registrant.permissionset-meta.xml | 4 --- 4 files changed, 18 insertions(+), 37 deletions(-) delete mode 100644 force-app/main/default/customMetadata/Summit_Events_Contact_Matching_Mapping.github.md-meta.xml diff --git a/cumulusci.yml b/cumulusci.yml index 3334b600..e9288940 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -188,6 +188,6 @@ orgs: namespaced: true dev: - config_file: orgs/educloud.json + config_file: orgs/dev.json days: 7 namespaced: false \ No newline at end of file diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index 15d02d7b..883b24db 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -85,7 +85,8 @@ public with sharing class SummitEventsContactMatching { //Find all registrations that have Salesforce Duplicate Rule selected if (event.Contact_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && contactEmpty && !personAccountActive) { findContact.add(reg); - } else if (event.Lead_matching_rules__c == 'Use Salesforce Duplicate Rule' && (!personAccountActive && contactEmpty || personAccountActive && personAccountActive) && String.isBlank(reg.Lead__c)) { + } + if (event.Lead_matching_rules__c == 'Use Salesforce Duplicate Rule' && (!personAccountActive && contactEmpty || personAccountActive && personAccountActive) && String.isBlank(reg.Lead__c)) { findLead.add(reg); } if (event.Person_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && personEmpty) { @@ -156,12 +157,15 @@ public with sharing class SummitEventsContactMatching { List contactsQueried = new List(); List accountsQueried = new List(); List leadsQueried = new List(); + lastModCompare lastModCompare = new lastModCompare(); for (Contact c : rw.contacts) { if (contactsComplete.containsKey(c.Id)) { contactsQueried.add((Contact) contactsComplete.get(c.Id)); } } + + contactsQueried.sort(lastModCompare); rw.contacts = contactsQueried; for (Account a : rw.accounts) { @@ -169,6 +173,7 @@ public with sharing class SummitEventsContactMatching { accountsQueried.add((Account) accountsComplete.get(a.Id)); } } + accountsQueried.sort(lastModCompare); rw.accounts = accountsQueried; for (Lead l : rw.leads) { @@ -176,6 +181,7 @@ public with sharing class SummitEventsContactMatching { leadsQueried.add((Lead) leadsComplete.get(l.Id)); } } + leadsQueried.sort(lastModCompare); rw.leads = leadsQueried; } @@ -192,6 +198,15 @@ public with sharing class SummitEventsContactMatching { } } + // Class to compare Employees by year joined + public class lastModCompare implements Comparator { + public Integer compare(SObject a, SObject b) { + Datetime dateA = (Datetime) a.get('LastModifiedDate'); + Datetime dateB = (Datetime) b.get('LastModifiedDate'); + return dateA > dateB ? -1 : dateA == dateB ? 0 : 1; + } + } + private static String handleMatchingLog(String sObjectType, Boolean isEmpty, String noMatchBehavior, String multipleMatchBehavior, Boolean newCreated, Id sObjectId, List sObjects, String duplicateRule) { String matchLog = ''; if (!isEmpty) { @@ -292,7 +307,6 @@ public with sharing class SummitEventsContactMatching { } } - //matchSObjects.addAll(crud.queryMatchedRecords('Id, FirstName, LastName, Email, MailingPostalCode', objectTypeName, matchIdsMapToReg)); return matchSObjects; } @@ -533,7 +547,7 @@ public with sharing class SummitEventsContactMatching { Id personAccountRecordTypeId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('PersonAccount').getRecordTypeId(); extraWhere = ' AND IsPersonAccount = true And RecordTypeId = :personAccountRecordTypeId'; } - String query = 'SELECT Id, FirstName, LastName, LastModifiedDate, ' + queryFields + ' FROM ' + sObjectName + ' WHERE Id IN :matchedIds ' + extraWhere + ' ORDER BY LastModifiedDate DESC'; + String query = 'SELECT Id, FirstName, LastName, LastModifiedDate, ' + queryFields + ' FROM ' + sObjectName + ' WHERE Id IN :matchedIds ' + extraWhere + ' ORDER BY LastModifiedDate ASC'; List matchedRecords = Database.query(query); Map matchedRecordsMap = new Map(); diff --git a/force-app/main/default/customMetadata/Summit_Events_Contact_Matching_Mapping.github.md-meta.xml b/force-app/main/default/customMetadata/Summit_Events_Contact_Matching_Mapping.github.md-meta.xml deleted file mode 100644 index f3af28a0..00000000 --- a/force-app/main/default/customMetadata/Summit_Events_Contact_Matching_Mapping.github.md-meta.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - false - - Contact_Field_API_Name__c - Description - - - Contact_Matching_Method__c - Red - - - Matching_Only__c - false - - - Source_Object__c - summit__Summit_Events_Registration__c - - - Source_Type__c - Field - - - Source_Value__c - Add_Info_Answer_3__c - - diff --git a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml index 8172db17..63230227 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml @@ -2657,8 +2657,4 @@ SummitEventsSubmit true - - PersonAccount.PersonAccount - true - From 23302ba6ac68bef79890eafecd7936a98fd5e281 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 5 Feb 2025 18:06:55 -0600 Subject: [PATCH 17/81] fixed trigger firing out of step from update on next page --- .../classes/SummitEventsContactMatching.cls | 47 ++++++++++++------- .../SummitEventsRegistrationTrigger.trigger | 14 ++---- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index 883b24db..c9667fa4 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -35,6 +35,7 @@ public with sharing class SummitEventsContactMatching { } if (!matchingRules.isEmpty()) { + Boolean personAccountActive = SummitEventsShared.personAccountsEnabled(); // Setting up contact matching methods and mappings Set matchingMethods = new Set(); Set personMatchingMethods = new Set(); @@ -75,7 +76,6 @@ public with sharing class SummitEventsContactMatching { } //Check and see if person accounts are enabled then use the person account matching rules NOT contact - Boolean personAccountActive = SummitEventsShared.personAccountsEnabled(); Boolean contactEmpty = String.isBlank(reg.Contact__c); Boolean personEmpty = String.isBlank(reg.Person_Account__c); @@ -124,6 +124,7 @@ public with sharing class SummitEventsContactMatching { registrationContactWrappers.add(rcw); } + //Get all the IDs for the contacts, accounts, and leads to query them all at once Set accountIds = new Set(); Set contactIds = new Set(); Set leadIds = new Set(); @@ -145,14 +146,14 @@ public with sharing class SummitEventsContactMatching { if (contactIds.size() > 0) { contactsComplete = new doCRUD().queryMatchedRecords('Email, MailingPostalCode', 'Contact', contactIds); } - if (accountIds.size() > 0) { + if (accountIds.size() > 0 && personAccountActive) { accountsComplete = new doCRUD().queryMatchedRecords('PersonEmail, PersonMailingPostalCode', 'Account', accountIds); } if (leadIds.size() > 0) { leadsComplete = new doCRUD().queryMatchedRecords('Email, PostalCode', 'Lead', leadIds); } - //Update the registration records with the matched contact, account, and lead + //Update the registration records with the matched contact, account, and lead records for (RegistrationContactWrapper rw : registrationContactWrappers) { List contactsQueried = new List(); List accountsQueried = new List(); @@ -164,7 +165,6 @@ public with sharing class SummitEventsContactMatching { contactsQueried.add((Contact) contactsComplete.get(c.Id)); } } - contactsQueried.sort(lastModCompare); rw.contacts = contactsQueried; @@ -185,16 +185,22 @@ public with sharing class SummitEventsContactMatching { rw.leads = leadsQueried; } - //Build matching logs + //Build matching logs for each registration for (RegistrationContactWrapper rw : registrationContactWrappers) { Summit_Events__c event = matchingRules.get(rw.registration.Event__c); - rw.registration.Matching_Log__c = ''; - rw.registration.Matching_Log__c += handleMatchingLog('Contact', findContact.isEmpty(), event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, rw.registration.New_Contact_Created__c, rw.registration.Contact__c, rw.contacts, matchingRules.get(rw.registration.Event__c).Contact_Creation_Duplicate_Rule__c); - rw.registration.Matching_Log__c += handleMatchingLog('Person Account', findPerson.isEmpty(), event.Person_Matching_No_Match_Behavior__c, event.Person_Matching_Multiple_Match_Behavior__c, rw.registration.New_Person_Account_Created__c, rw.registration.Person_Account__c, rw.accounts, matchingRules.get(rw.registration.Event__c).Person_Creation_Duplicate_Rule__c); - rw.registration.Matching_Log__c += handleMatchingLog('Lead', findLead.isEmpty(), event.Lead_Matching_No_Match_Behavior__c, event.Lead_Matching_Multiple_Match_Behavior__c, rw.registration.New_Lead_Created__c, rw.registration.Lead__c, rw.leads, matchingRules.get(rw.registration.Event__c).Lead_Creation_Duplicate_Rule__c); + String matchLogString = ''; + matchLogString += handleMatchingLog('Contact', findContact.isEmpty(), event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, rw.registration.New_Contact_Created__c, rw.registration.Contact__c, rw.contacts, matchingRules.get(rw.registration.Event__c).Contact_Creation_Duplicate_Rule__c); + matchLogString += handleMatchingLog('Person Account', findPerson.isEmpty(), event.Person_Matching_No_Match_Behavior__c, event.Person_Matching_Multiple_Match_Behavior__c, rw.registration.New_Person_Account_Created__c, rw.registration.Person_Account__c, rw.accounts, matchingRules.get(rw.registration.Event__c).Person_Creation_Duplicate_Rule__c); + matchLogString += handleMatchingLog('Lead', findLead.isEmpty(), event.Lead_Matching_No_Match_Behavior__c, event.Lead_Matching_Multiple_Match_Behavior__c, rw.registration.New_Lead_Created__c, rw.registration.Lead__c, rw.leads, matchingRules.get(rw.registration.Event__c).Lead_Creation_Duplicate_Rule__c); + //html encode the string + System.debug(matchLogString); + rw.registration.Matching_Log__c = matchLogString; } + } + System.debug(JSON.serializePretty(newRegistrations)); + } } @@ -210,11 +216,11 @@ public with sharing class SummitEventsContactMatching { private static String handleMatchingLog(String sObjectType, Boolean isEmpty, String noMatchBehavior, String multipleMatchBehavior, Boolean newCreated, Id sObjectId, List sObjects, String duplicateRule) { String matchLog = ''; if (!isEmpty) { - if (noMatchBehavior.equals('Create ' + sObjectType) && newCreated && sObjectId != null) { + if (noMatchBehavior.startsWithIgnoreCase('create') && newCreated && sObjectId != null) { matchLog += matchingLog(sObjects, 'Match not found using Duplicate Rule ' + duplicateRule.replaceAll(' ', '_') + '', 'New ' + sObjectType + ' created!', true); } if (!sObjects.isEmpty() && !newCreated) { - if (multipleMatchBehavior.equals('Skip matching')) { + if (multipleMatchBehavior.startsWithIgnoreCase('skip')) { matchLog += matchingLog(sObjects, 'Multiple matches found using Salesforce Duplicate Rule ' + duplicateRule.replaceAll(' ', '_') + ', ' + sObjectType + ' matching skipped based on "Multiple Match Behavior" field value on Summit Events object', '', false); } else if (multipleMatchBehavior.equals('Match with most recently modified')) { matchLog += matchingLog(sObjects, 'Multiple matches found using Salesforce Duplicate Rule ' + duplicateRule.replaceAll(' ', '_') + ', Most recently modified ' + sObjectType + ' was selected based on "Multiple Match Behavior" field value on Summit Events object', '', false); @@ -424,27 +430,29 @@ public with sharing class SummitEventsContactMatching { private static String matchingLog(List foundObjects, String heading1, String heading2, Boolean isNew) { String mOut = ''; if (String.isNotBlank(heading1)) { - mOut += '
' + heading1 + '
'; + mOut += '

' + heading1 + '

'; } if (String.isNotBlank(heading2)) { - mOut += '
' + heading2 + '
'; + mOut += '

' + heading2 + '

'; } if (foundObjects.size() > 0) { - mOut += '
First Name
Email
Zip
Modified
Action
' + (String.isNotBlank(Email) ? Email : '') + '
' + (String.isNotBlank(Zip) ? Zip : '') + '
--
' + (String.isNotBlank(Action) ? Action : 'None') + '
' + email + '
' + zip + '
' + lastModifiedString + '
' + action + '
'; - mOut += ''; + mOut += ''; + mOut += ''; mOut += ''; mOut += ''; mOut += ''; mOut += ''; mOut += ''; mOut += ''; - mOut += ''; + mOut += ''; + mOut += ''; mOut += ''; Boolean isFirst = true; for (SObject sObj : foundObjects) { Map sObjMapStringObj = (Map) JSON.deserializeUntyped(JSON.serialize(sObj)); + String zip = '---'; String firstName = ''; String lastName = ''; @@ -511,8 +519,10 @@ public with sharing class SummitEventsContactMatching { ); isFirst = false; } - mOut += '
Last Name
First Name
Email
Zip
Modified
Action
'; + mOut += ''; + mOut += ''; } + return mOut; } @@ -543,7 +553,8 @@ public with sharing class SummitEventsContactMatching { public Map queryMatchedRecords(String queryFields, String sObjectName, Set matchedIds) { // Query all records for matched IDs String extraWhere = ''; - if (sObjectName == 'Account') { + Boolean personAccountActive = SummitEventsShared.personAccountsEnabled(); + if (sObjectName == 'Account' && personAccountActive) { Id personAccountRecordTypeId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get('PersonAccount').getRecordTypeId(); extraWhere = ' AND IsPersonAccount = true And RecordTypeId = :personAccountRecordTypeId'; } diff --git a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger index cd80ed9a..48a05f7e 100644 --- a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger +++ b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger @@ -1,15 +1,11 @@ trigger SummitEventsRegistrationTrigger on Summit_Events_Registration__c (before insert, before update, after insert, after update) { - /* Caused issues, reason unknown - if (Trigger.isBefore && Trigger.isInsert) { - SummitEventsContactMatching SECM = new SummitEventsContactMatching(); - SECM.matchContacts(Trigger.new); - } */ + Summit_Events_Settings__c SummitEventsSettings = Summit_Events_Settings__c.getOrgDefaults(); if (!SummitEventsSettings.Turn_off_Registration_Trigger__c) { - if (Trigger.isBefore) { - if (Trigger.isUpdate || Trigger.isInsert) { - SummitEventsContactMatching.matchContacts(Trigger.new); - } + + // isBefore isUpdate because SEA pages immediately update on next page and asynchronous matching can't keep up + if (Trigger.isBefore && Trigger.isUpdate) { + SummitEventsContactMatching.matchContacts(Trigger.new); } if (Trigger.isAfter && Trigger.isInsert) { From f45a412ec42cbd7d9d23da2ac3ba45f429c5c61d Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 5 Feb 2025 18:57:27 -0600 Subject: [PATCH 18/81] removed state/ctry assignment from test class to not conflict with state/ctry picklist org enabled --- cumulusci.yml | 2 +- .../test/default/classes/SummitEventsTestSharedDataFactory.cls | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/cumulusci.yml b/cumulusci.yml index e9288940..3334b600 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -188,6 +188,6 @@ orgs: namespaced: true dev: - config_file: orgs/dev.json + config_file: orgs/educloud.json days: 7 namespaced: false \ No newline at end of file diff --git a/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls b/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls index 0e0bde21..cc43f047 100644 --- a/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls +++ b/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls @@ -180,9 +180,6 @@ public with sharing class SummitEventsTestSharedDataFactory { FirstName = firstName, LastName = lastName, Email = Email, - MailingStreet = '123 Rock Ave', - MailingCity = 'Bedrock', - MailingState = 'MN', MailingPostalCode = Zip, Phone = Phone, Birthdate = Date.valueOf(DOB), From a18118e088f8bc1b3cfda29adcb9aebf8747e429 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Mon, 10 Feb 2025 08:27:14 -0600 Subject: [PATCH 19/81] Added check of old reg for update contact matching --- .../classes/SummitEventsContactMatching.cls | 57 ++++++++++++------- .../SummitEventsRegistrationTrigger.trigger | 4 +- 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index c9667fa4..70c439f6 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -16,12 +16,19 @@ public with sharing class SummitEventsContactMatching { public List leads { get; set; } } - public static void matchContacts(List newRegistrations) { + public static void matchReg(List newRegistrations, List oldRegistrations) { Map matchingRules = new Map(); for (Summit_Events_Registration__c reg : newRegistrations) { matchingRules.put(reg.Event__c, null); } + //Map old reg id to reg + Map oldRegMap = new Map(); + if (oldRegistrations != null) { + for (Summit_Events_Registration__c reg : oldRegistrations) { + oldRegMap.put(reg.Id, reg); + } + } if (Schema.SObjectType.Summit_Events__c.isAccessible()) { matchingRules = new Map([ @@ -104,24 +111,36 @@ public with sharing class SummitEventsContactMatching { List matchLeads = new List(); Summit_Events__c event = matchingRules.get(reg.Event__c); - if (!findContact.isEmpty()) { - matchContacts = handleMatching(reg, event.Contact_Creation_Duplicate_Rule__c, event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Contact_Matching_Method__c, contactMappings, 'Contact', 'Contact__c', 'New_Contact_Created__c'); + //Compare old reg to new to see if it should move on + Boolean skipThisRegMatching = false; + if (String.isNotBlank(reg.Id) && oldRegMap.containsKey(reg.Id)) { + Summit_Events_Registration__c oldReg = oldRegMap.get(reg.Id); + if (oldReg.Registrant_Email__c == reg.Registrant_Email__c && oldReg.Registrant_First_Name__c == reg.Registrant_First_Name__c && oldReg.Registrant_Last_Name__c == reg.Registrant_Last_Name__c) { + skipThisRegMatching = true; + } } + System.debug(skipThisRegMatching); - if (!findPerson.isEmpty()) { - matchAccounts = handleMatching(reg, event.Person_Creation_Duplicate_Rule__c, event.Person_Matching_No_Match_Behavior__c, event.Person_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Person_Matching_Method__c, personAccountMappings, 'Account', 'Person_Account__c', 'New_Person_Account_Created__c'); - } + if (!skipThisRegMatching) { + if (!findContact.isEmpty()) { + matchContacts = handleMatching(reg, event.Contact_Creation_Duplicate_Rule__c, event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Contact_Matching_Method__c, contactMappings, 'Contact', 'Contact__c', 'New_Contact_Created__c'); + } - if (!findLead.isEmpty()) { - matchLeads = handleMatching(reg, event.Lead_Creation_Duplicate_Rule__c, event.Lead_Matching_No_Match_Behavior__c, event.Lead_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Lead_Matching_Method__c, leadMappings, 'Lead', 'Lead__c', 'New_Lead_Created__c'); - } + if (!findPerson.isEmpty()) { + matchAccounts = handleMatching(reg, event.Person_Creation_Duplicate_Rule__c, event.Person_Matching_No_Match_Behavior__c, event.Person_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Person_Matching_Method__c, personAccountMappings, 'Account', 'Person_Account__c', 'New_Person_Account_Created__c'); + } - RegistrationContactWrapper rcw = new RegistrationContactWrapper(); - rcw.registration = reg; - rcw.contacts = matchContacts; - rcw.accounts = matchAccounts; - rcw.leads = matchLeads; - registrationContactWrappers.add(rcw); + if (!findLead.isEmpty()) { + matchLeads = handleMatching(reg, event.Lead_Creation_Duplicate_Rule__c, event.Lead_Matching_No_Match_Behavior__c, event.Lead_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Lead_Matching_Method__c, leadMappings, 'Lead', 'Lead__c', 'New_Lead_Created__c'); + } + + RegistrationContactWrapper rcw = new RegistrationContactWrapper(); + rcw.registration = reg; + rcw.contacts = matchContacts; + rcw.accounts = matchAccounts; + rcw.leads = matchLeads; + registrationContactWrappers.add(rcw); + } } //Get all the IDs for the contacts, accounts, and leads to query them all at once @@ -188,10 +207,10 @@ public with sharing class SummitEventsContactMatching { //Build matching logs for each registration for (RegistrationContactWrapper rw : registrationContactWrappers) { Summit_Events__c event = matchingRules.get(rw.registration.Event__c); - String matchLogString = ''; - matchLogString += handleMatchingLog('Contact', findContact.isEmpty(), event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, rw.registration.New_Contact_Created__c, rw.registration.Contact__c, rw.contacts, matchingRules.get(rw.registration.Event__c).Contact_Creation_Duplicate_Rule__c); - matchLogString += handleMatchingLog('Person Account', findPerson.isEmpty(), event.Person_Matching_No_Match_Behavior__c, event.Person_Matching_Multiple_Match_Behavior__c, rw.registration.New_Person_Account_Created__c, rw.registration.Person_Account__c, rw.accounts, matchingRules.get(rw.registration.Event__c).Person_Creation_Duplicate_Rule__c); - matchLogString += handleMatchingLog('Lead', findLead.isEmpty(), event.Lead_Matching_No_Match_Behavior__c, event.Lead_Matching_Multiple_Match_Behavior__c, rw.registration.New_Lead_Created__c, rw.registration.Lead__c, rw.leads, matchingRules.get(rw.registration.Event__c).Lead_Creation_Duplicate_Rule__c); + String matchLogString = rw.registration.Matching_Log__c; + matchLogString += handleMatchingLog('Contact', findContact.isEmpty(), event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, rw.registration.New_Contact_Created__c, rw.registration.Contact__c, rw.contacts, matchingRules.get(rw.registration.Event__c).Contact_Creation_Duplicate_Rule__c); + matchLogString += handleMatchingLog('Person Account', findPerson.isEmpty(), event.Person_Matching_No_Match_Behavior__c, event.Person_Matching_Multiple_Match_Behavior__c, rw.registration.New_Person_Account_Created__c, rw.registration.Person_Account__c, rw.accounts, matchingRules.get(rw.registration.Event__c).Person_Creation_Duplicate_Rule__c); + matchLogString += handleMatchingLog('Lead', findLead.isEmpty(), event.Lead_Matching_No_Match_Behavior__c, event.Lead_Matching_Multiple_Match_Behavior__c, rw.registration.New_Lead_Created__c, rw.registration.Lead__c, rw.leads, matchingRules.get(rw.registration.Event__c).Lead_Creation_Duplicate_Rule__c); //html encode the string System.debug(matchLogString); rw.registration.Matching_Log__c = matchLogString; diff --git a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger index 48a05f7e..ae51ecc7 100644 --- a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger +++ b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger @@ -4,8 +4,8 @@ trigger SummitEventsRegistrationTrigger on Summit_Events_Registration__c (before if (!SummitEventsSettings.Turn_off_Registration_Trigger__c) { // isBefore isUpdate because SEA pages immediately update on next page and asynchronous matching can't keep up - if (Trigger.isBefore && Trigger.isUpdate) { - SummitEventsContactMatching.matchContacts(Trigger.new); + if (Trigger.isBefore && Trigger.isInsert || Trigger.isBefore && Trigger.isUpdate) { + SummitEventsContactMatching.matchReg(Trigger.new, Trigger.old); } if (Trigger.isAfter && Trigger.isInsert) { From 162cb689b4deceda04b37a0070e9887f09ce497e Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Mon, 10 Feb 2025 11:08:12 -0600 Subject: [PATCH 20/81] fixed Lead trigger test to use insert not update --- .../SummitEventsLetterheadLookupExtension.cls | 5 +++-- .../classes/SummitEventsRegisterController.cls | 2 +- .../triggers/SummitEventsRegistrationTrigger.trigger | 1 + .../classes/SummitEventsAfterLeadConversion_TEST.cls | 12 ++++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls b/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls index 30fabfa0..9ed83e98 100644 --- a/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls +++ b/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls @@ -80,10 +80,11 @@ public with sharing class SummitEventsLetterheadLookupExtension { Matcher matcher2 = TAG_REGEX2.matcher(LHTemplate); Integer matchCounter = 0; while (matcher2.find() == true) { + String imgUrl = 'https://' + Url.getCurrentRequestUrl().getHost(); if (matchCounter == 0) { - headerImg = ''; + headerImg = ''; } else if (matchCounter == 1) { - footerImg = ''; + footerImg = ''; } matchCounter++; } diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 6f10663e..1cf759e7 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -284,7 +284,7 @@ public with sharing class SummitEventsRegisterController { /*get Analytic data*/ //Get current URL - String baseURL = Url.getCurrentRequestUrl().getHost(); + String baseURL = 'https://' + Url.getCurrentRequestUrl().getHost(); String PageURL = ApexPages.currentPage().getUrl(); eventRegistration.Event_Website__c = baseURL + PageURL.replace('\'', '').escapeHtml4(); diff --git a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger index ae51ecc7..13c85acf 100644 --- a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger +++ b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger @@ -11,6 +11,7 @@ trigger SummitEventsRegistrationTrigger on Summit_Events_Registration__c (before if (Trigger.isAfter && Trigger.isInsert) { SummitEventsRegistration.run(Trigger.new, Trigger.old); } + if (Trigger.isAfter && Trigger.isUpdate) { SummitEventsRegistration.run(Trigger.new, Trigger.old); } diff --git a/force-app/test/default/classes/SummitEventsAfterLeadConversion_TEST.cls b/force-app/test/default/classes/SummitEventsAfterLeadConversion_TEST.cls index bdededde..0a5de0bd 100644 --- a/force-app/test/default/classes/SummitEventsAfterLeadConversion_TEST.cls +++ b/force-app/test/default/classes/SummitEventsAfterLeadConversion_TEST.cls @@ -1,9 +1,8 @@ @isTest public class SummitEventsAfterLeadConversion_TEST { @isTest - static void testLeadConversion(){ + static void testLeadConversion() { List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); - Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'Test', 'Record', 'test@example.com', '55555', '1971-03-22', '2012', null); Summit_Events__c seaTestEvent = SummitEventsTestSharedDataFactory.getEventRecord(seaTestInstances[1].Event__c); seaTestEvent.Contact_Matching_No_Match_Behavior__c = null; seaTestEvent.Lead_Matching_Rules__c = 'Use Salesforce Duplicate Rule'; @@ -12,15 +11,16 @@ public class SummitEventsAfterLeadConversion_TEST { seaTestEvent.Lead_Matching_Multiple_Match_Behavior__c = 'Match with most recently modified'; seaTestEvent.Custom_Metadata_Lead_Matching_Method__c = 'Red'; update seaTestEvent; - + + Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'Test', 'Record', 'test@example.com', '55555', '1971-03-22', '2012', null); seaTestRegistration.Status__c = 'Registered'; seaTestRegistration.Registrant_Preferred_First_Name__c = 'Big T'; update seaTestRegistration; - + Lead testLead = [SELECT Id FROM Lead]; - + Database.LeadConvert lc = new database.LeadConvert(); - lc.setLeadId(testlead.id); + lc.setLeadId(testLead.id); lc.setConvertedStatus('Closed - Converted'); Database.LeadConvertResult lcr = Database.convertLead(lc); } From 6aadbbd7ad0995d5babf40cc228caa026af9e64d Mon Sep 17 00:00:00 2001 From: David Cuentas Mar Date: Mon, 10 Feb 2025 13:11:59 -0500 Subject: [PATCH 21/81] 588-fix-bullet-points-rendering-in-SummitEventsRegisterAppointments --- .../main/default/pages/SummitEventsRegisterAppointments.page | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/force-app/main/default/pages/SummitEventsRegisterAppointments.page b/force-app/main/default/pages/SummitEventsRegisterAppointments.page index 2afd1d60..5d9a963f 100644 --- a/force-app/main/default/pages/SummitEventsRegisterAppointments.page +++ b/force-app/main/default/pages/SummitEventsRegisterAppointments.page @@ -67,8 +67,8 @@ Created by Thaddaeus Dahlberg on 5/1/2018. -
-

+

+

From 3dfbb0d8a97e376fbbb29d087d78315174783a53 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Mon, 10 Feb 2025 12:31:40 -0600 Subject: [PATCH 22/81] Added check for empty match log to not skip --- .../classes/SummitEventsContactMatching.cls | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index 70c439f6..b2d2e443 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -115,11 +115,10 @@ public with sharing class SummitEventsContactMatching { Boolean skipThisRegMatching = false; if (String.isNotBlank(reg.Id) && oldRegMap.containsKey(reg.Id)) { Summit_Events_Registration__c oldReg = oldRegMap.get(reg.Id); - if (oldReg.Registrant_Email__c == reg.Registrant_Email__c && oldReg.Registrant_First_Name__c == reg.Registrant_First_Name__c && oldReg.Registrant_Last_Name__c == reg.Registrant_Last_Name__c) { + if (oldReg.Registrant_Email__c == reg.Registrant_Email__c && oldReg.Registrant_First_Name__c == reg.Registrant_First_Name__c && oldReg.Registrant_Last_Name__c == reg.Registrant_Last_Name__c && String.isNotBlank(reg.Matching_Log__c)) { skipThisRegMatching = true; } } - System.debug(skipThisRegMatching); if (!skipThisRegMatching) { if (!findContact.isEmpty()) { @@ -207,19 +206,16 @@ public with sharing class SummitEventsContactMatching { //Build matching logs for each registration for (RegistrationContactWrapper rw : registrationContactWrappers) { Summit_Events__c event = matchingRules.get(rw.registration.Event__c); - String matchLogString = rw.registration.Matching_Log__c; + String matchLogString = ''; + if(String.isNotBlank(rw.registration.Matching_Log__c)) { + matchLogString = rw.registration.Matching_Log__c; + } matchLogString += handleMatchingLog('Contact', findContact.isEmpty(), event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, rw.registration.New_Contact_Created__c, rw.registration.Contact__c, rw.contacts, matchingRules.get(rw.registration.Event__c).Contact_Creation_Duplicate_Rule__c); matchLogString += handleMatchingLog('Person Account', findPerson.isEmpty(), event.Person_Matching_No_Match_Behavior__c, event.Person_Matching_Multiple_Match_Behavior__c, rw.registration.New_Person_Account_Created__c, rw.registration.Person_Account__c, rw.accounts, matchingRules.get(rw.registration.Event__c).Person_Creation_Duplicate_Rule__c); matchLogString += handleMatchingLog('Lead', findLead.isEmpty(), event.Lead_Matching_No_Match_Behavior__c, event.Lead_Matching_Multiple_Match_Behavior__c, rw.registration.New_Lead_Created__c, rw.registration.Lead__c, rw.leads, matchingRules.get(rw.registration.Event__c).Lead_Creation_Duplicate_Rule__c); - //html encode the string - System.debug(matchLogString); rw.registration.Matching_Log__c = matchLogString; } - } - - System.debug(JSON.serializePretty(newRegistrations)); - } } From 3ce849f2f5de32479a82d4eb56a28ddcb8b76489 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Mon, 10 Feb 2025 13:49:19 -0600 Subject: [PATCH 23/81] Added ability to skip matching for guests --- cumulusci.yml | 2 +- .../classes/SummitEventsContactMatching.cls | 7 ++- ...mmit_Events_Record_Page.flexipage-meta.xml | 58 ++++++++++++++++++- ...ummit Event Default Layout.layout-meta.xml | 17 ++++-- ..._for_Guest_Registrations__c.field-meta.xml | 13 +++++ ...Summit_Events_Admin.permissionset-meta.xml | 5 ++ ...t_Events_Registrant.permissionset-meta.xml | 5 ++ 7 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 force-app/main/default/objects/Summit_Events__c/fields/Use_Matching_for_Guest_Registrations__c.field-meta.xml diff --git a/cumulusci.yml b/cumulusci.yml index 3334b600..e9288940 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -188,6 +188,6 @@ orgs: namespaced: true dev: - config_file: orgs/educloud.json + config_file: orgs/dev.json days: 7 namespaced: false \ No newline at end of file diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index b2d2e443..dc3d05de 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -34,7 +34,8 @@ public with sharing class SummitEventsContactMatching { matchingRules = new Map([ SELECT Id, Contact_Matching_Rules__c, Lead_matching_rules__c, Person_Matching_Rules__c, Custom_Metadata_Person_Matching_Method__c, Person_Creation_Duplicate_Rule__c, Person_Matching_No_Match_Behavior__c, Contact_Creation_Duplicate_Rule__c, Custom_Metadata_Contact_Matching_Method__c, Contact_Matching_Multiple_Match_Behavior__c, Contact_Matching_No_Match_Behavior__c, - Lead_Creation_Duplicate_Rule__c, Custom_Metadata_Lead_Matching_Method__c, Lead_Matching_Multiple_Match_Behavior__c, Lead_Matching_No_Match_Behavior__c, Person_Matching_Multiple_Match_Behavior__c + Lead_Creation_Duplicate_Rule__c, Custom_Metadata_Lead_Matching_Method__c, Lead_Matching_Multiple_Match_Behavior__c, Lead_Matching_No_Match_Behavior__c, Person_Matching_Multiple_Match_Behavior__c, + Use_Matching_for_Guest_Registrations__c FROM Summit_Events__c WHERE Id IN :matchingRules.keySet() AND (Custom_Metadata_Contact_Matching_Method__c != NULL OR Custom_Metadata_Lead_Matching_Method__c != NULL OR Custom_Metadata_Person_Matching_Method__c != NULL) @@ -120,6 +121,10 @@ public with sharing class SummitEventsContactMatching { } } + if( String.isNotBlank(reg.Guest_Host_Status__c) && !event.Use_Matching_for_Guest_Registrations__c && reg.Guest_Host_Status__c.equalsIgnoreCase('hosted registrant')) { + skipThisRegMatching = true; + } + if (!skipThisRegMatching) { if (!findContact.isEmpty()) { matchContacts = handleMatching(reg, event.Contact_Creation_Duplicate_Rule__c, event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, event.Custom_Metadata_Contact_Matching_Method__c, contactMappings, 'Contact', 'Contact__c', 'New_Contact_Created__c'); diff --git a/force-app/main/default/flexipages/Summit_Events_Record_Page.flexipage-meta.xml b/force-app/main/default/flexipages/Summit_Events_Record_Page.flexipage-meta.xml index 883f17a0..be168b7f 100644 --- a/force-app/main/default/flexipages/Summit_Events_Record_Page.flexipage-meta.xml +++ b/force-app/main/default/flexipages/Summit_Events_Record_Page.flexipage-meta.xml @@ -91,6 +91,16 @@ record_item_005 + + + + uiBehavior + none + + Record.Use_Matching_for_Guest_Registrations__c + RecordUse_Matching_for_Guest_Registrations__cField + + Facet-cb142f92-98ca-47b5-b688-5a65a1518288 Facet @@ -2384,6 +2394,34 @@ Facet-57eb38be-3210-48bd-8fee-0f9c6d7bd56c Facet + + + + + uiBehavior + none + + Record.Use_Matching_for_Guest_Registrations__c + RecordUse_Matching_for_Guest_Registrations_cField + + + Facet-514308ce-1507-4296-99b2-0e45ac514a1f + Facet + + + + + + body + Facet-514308ce-1507-4296-99b2-0e45ac514a1f + + flexipage:column + flexipage_column5 + + + Facet-d418ff69-6281-4da5-a203-16d51050c2fe + Facet + @@ -2651,6 +2689,24 @@ Facet + + + + columns + Facet-d418ff69-6281-4da5-a203-16d51050c2fe + + + horizontalAlignment + false + + + label + Guest Registration Matching + + flexipage:fieldSection + flexipage_fieldSection3 + + @@ -3191,7 +3247,7 @@ title - Contact & Lead Matching + Registration Matching flexipage:tab flex_tab_17 diff --git a/force-app/main/default/layouts/Summit_Events__c-Summit Event Default Layout.layout-meta.xml b/force-app/main/default/layouts/Summit_Events__c-Summit Event Default Layout.layout-meta.xml index addc35ef..f1e32df7 100644 --- a/force-app/main/default/layouts/Summit_Events__c-Summit Event Default Layout.layout-meta.xml +++ b/force-app/main/default/layouts/Summit_Events__c-Summit Event Default Layout.layout-meta.xml @@ -2,6 +2,7 @@ ChangeOwnerOne ChangeRecordType + OpenSlackRecordChannel PrintableView Share Submit @@ -704,6 +705,10 @@ true + + Edit + Use_Matching_for_Guest_Registrations__c + Edit Contact_Matching_Rules__c @@ -807,11 +812,6 @@ Record - - Edit - StandardButton - 0 - Delete StandardButton @@ -822,6 +822,11 @@ StandardButton 2 + + Edit + StandardButton + 0 + NAME @@ -895,7 +900,7 @@ false false - 00h6t000003YwxO + 00h8N000007w9nU 4 0 Default diff --git a/force-app/main/default/objects/Summit_Events__c/fields/Use_Matching_for_Guest_Registrations__c.field-meta.xml b/force-app/main/default/objects/Summit_Events__c/fields/Use_Matching_for_Guest_Registrations__c.field-meta.xml new file mode 100644 index 00000000..6e442ec5 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events__c/fields/Use_Matching_for_Guest_Registrations__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Use_Matching_for_Guest_Registrations__c + Active + true + When a registrant inputs information for guest registrations use the matching rules configured. + When a registrant inputs information for guest registrations use the matching rules configured. + + Public + false + false + Checkbox + diff --git a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml index 3efc19e1..427f12ed 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml @@ -2592,6 +2592,11 @@ Summit_Events__c.Tracking_Submit_Registration__c true + + true + Summit_Events__c.Use_Matching_for_Guest_Registrations__c + true + true Summit_Events__c.reCAPTCHA__c diff --git a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml index 63230227..3d9a386e 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml @@ -2475,6 +2475,11 @@ Summit_Events__c.Tracking_Submit_Registration__c true + + false + Summit_Events__c.Use_Matching_for_Guest_Registrations__c + true + false Summit_Events__c.reCAPTCHA__c From e80e3285c32790cee1b5fee24f34e3302bf502e1 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Sun, 16 Feb 2025 13:55:44 -0600 Subject: [PATCH 24/81] fixed email image url adding https:// --- .gitignore | 1 + .../classes/SummitEventsLetterheadLookupExtension.cls | 5 +++-- .../main/default/classes/SummitEventsRegisterController.cls | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index b37abced..a448dc80 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ robot/SummitEventsApp/results/ # Illuminated Cloud (IntelliJ IDEA) IlluminatedCloud +.IlluminatedCloud out .idea *.iml diff --git a/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls b/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls index 30fabfa0..da7d93f0 100644 --- a/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls +++ b/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls @@ -79,11 +79,12 @@ public with sharing class SummitEventsLetterheadLookupExtension { Pattern TAG_REGEX2 = Pattern.compile('!\\[\\/\\.\\?\\&\\]]*\\<\\!\\[CDATA\\[(.+?)]]>*<\\/img>'); Matcher matcher2 = TAG_REGEX2.matcher(LHTemplate); Integer matchCounter = 0; + String imgUrl = 'https://' + Url.getCurrentRequestUrl().getHost(); while (matcher2.find() == true) { if (matchCounter == 0) { - headerImg = ''; + headerImg = ''; } else if (matchCounter == 1) { - footerImg = ''; + footerImg = ''; } matchCounter++; } diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 6f10663e..1cf759e7 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -284,7 +284,7 @@ public with sharing class SummitEventsRegisterController { /*get Analytic data*/ //Get current URL - String baseURL = Url.getCurrentRequestUrl().getHost(); + String baseURL = 'https://' + Url.getCurrentRequestUrl().getHost(); String PageURL = ApexPages.currentPage().getUrl(); eventRegistration.Event_Website__c = baseURL + PageURL.replace('\'', '').escapeHtml4(); From 23a83faba54cb057e1f101b2c4d7e9dd92973b50 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Sun, 16 Feb 2025 14:05:40 -0600 Subject: [PATCH 25/81] moved accessiblity questions above address --- .../default/pages/SummitEventsRegister.page | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/force-app/main/default/pages/SummitEventsRegister.page b/force-app/main/default/pages/SummitEventsRegister.page index 2dc9fce3..a4c1a79f 100644 --- a/force-app/main/default/pages/SummitEventsRegister.page +++ b/force-app/main/default/pages/SummitEventsRegister.page @@ -626,6 +626,53 @@ Created by Thaddaeus Dahlberg on 5/1/2018.
+ + +
+ + {!IF(!ISBLANK(eventPage.Accessibility_Label__c), eventPage.Accessibility_Label__c, 'Do you have any accessibility needs for this event?')} + + * + + +
+
+ + + +
+
+
+ + + {!IF(!ISBLANK(eventPage.Accessibility_Detail_Label__c), eventPage.Accessibility_Detail_Label__c, 'Please indicate your accessibility request below.')} + + * + + + + + + + + +
+ + + +
+ + {!IF(!ISBLANK(eventPage.Dietary_Restrictions_Label__c), eventPage.Dietary_Restrictions_Label__c, 'Do you have any dietary restrictions?')} + + * + + + + + +
+
+ @@ -726,53 +773,6 @@ Created by Thaddaeus Dahlberg on 5/1/2018. - - -
- - {!IF(!ISBLANK(eventPage.Accessibility_Label__c), eventPage.Accessibility_Label__c, 'Do you have any accessibility needs for this event?')} - - * - - -
-
- - - -
-
-
- - - {!IF(!ISBLANK(eventPage.Accessibility_Detail_Label__c), eventPage.Accessibility_Detail_Label__c, 'Please indicate your accessibility request below.')} - - * - - - - - - - - -
- - - -
- - {!IF(!ISBLANK(eventPage.Dietary_Restrictions_Label__c), eventPage.Dietary_Restrictions_Label__c, 'Do you have any dietary restrictions?')} - - * - - - - - -
-
- From 18d9ee9f75d79a043d176e3d3979b200493dfe07 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Sun, 16 Feb 2025 14:15:09 -0600 Subject: [PATCH 26/81] added no-show to accepted excuses to allow more regs per instance/event --- .../main/default/classes/SummitEventsRegisterController.cls | 1 + 1 file changed, 1 insertion(+) diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 1cf759e7..b1442a78 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -698,6 +698,7 @@ public with sharing class SummitEventsRegisterController { notAcceptableStatuses.add('Cancelled'); notAcceptableStatuses.add('Started'); notAcceptableStatuses.add('Status'); + notAcceptableStatuses.add('No-Show'); List foundRegistrations = new List(); Summit_Events_Registration__c foundRegistration = null; From 8115d9cd7a075c4450863bcadc5d269ff247a09c Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Sun, 16 Feb 2025 15:02:39 -0600 Subject: [PATCH 27/81] added lookup order by field and added to lookup queries --- .../SummitEventsAdditionalQuestionsCtlr.cls | 26 +++++++++++++++---- ...mit Events Question Layout.layout-meta.xml | 17 +++++++----- .../fields/Lookup_Order_By__c.field-meta.xml | 13 ++++++++++ ...Summit_Events_Admin.permissionset-meta.xml | 5 ++++ ...t_Events_Registrant.permissionset-meta.xml | 5 ++++ 5 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 force-app/main/default/objects/Summit_Events_Question__c/fields/Lookup_Order_By__c.field-meta.xml diff --git a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls index ad857cc4..3c563988 100644 --- a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls +++ b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls @@ -99,7 +99,8 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { SELECT Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c, Error_Assist_Text__c, Lookup_Object__c, Lookup_Fields__c, Lookup_Where_Clause__c, Lookup_No_Results_Label__c, Lookup_Secondary_Input_Link_Text__c, Lookup_Secondary_Value_Field__c, - Lookup_Secondary_Input_Instructions__c, Lookup_Results_Icon__c, Existing_Picklist_Values__c, Display_Style__c, Picklist_Values_Long__c + Lookup_Secondary_Input_Instructions__c, Lookup_Results_Icon__c, Existing_Picklist_Values__c, Display_Style__c, Picklist_Values_Long__c, + Lookup_Order_By__c FROM Summit_Events_Question__c WHERE Event__c = :eventInformation.eventId AND (Registrant_Type__c = 'Registrant' OR Registrant_Type__c = 'Registrant and Guest') @@ -277,6 +278,13 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { queryInfo.put('Lookup_Where_Clause__c', question.Lookup_Where_Clause__c); } + if (String.isNotBlank(question.Lookup_Order_By__c)) { + if (!question.Lookup_Order_By__c.startsWithIgnoreCase('order by')) { + question.Lookup_Order_By__c = 'ORDER BY ' + question.Lookup_Order_By__c; + } + queryInfo.put('Lookup_Order_By__c', question.Lookup_Order_By__c); + } + if (question.Question_Field_Type__c.equalsIgnoreCase('lookup')) { //serialize object with query info in it to retrieve later when decrypted quest.lookup = SummitEventsShared.encryptString(JSON.serialize(queryInfo)); @@ -289,7 +297,7 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { if (question.Question_Field_Type__c.equalsIgnoreCase('lookup picklist')) { if (String.isBlank(quest.setupError)) { - quest.picklist = createLookupPicklist(queryInfo.get('Lookup_Object__c'), queryInfo.get('Lookup_Where_Clause__c'), queryInfo.get('Lookup_Fields__c')); + quest.picklist = createLookupPicklist(queryInfo.get('Lookup_Object__c'), queryInfo.get('Lookup_Where_Clause__c'), queryInfo.get('Lookup_Fields__c'), queryInfo.get('Lookup_Order_By__c')); } } } @@ -403,7 +411,7 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { return picklists; } - public List createLookupPicklist(String objectName, String filter, String fields) { + public List createLookupPicklist(String objectName, String filter, String fields, String orderBy) { List pl = new List(); pl.add(new SelectOption('', 'Select...')); @@ -416,7 +424,11 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { query += ' WHERE ' + filter; } - query += ' ORDER BY ' + fieldNames.get(0); + if (String.isNotBlank(orderBy)) { + query += ' ' + orderBy; + } else { + query += ' ORDER BY ' + fieldNames.get(0); + } List results = Database.query(query); @@ -517,7 +529,11 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { } lookupQuery += ' ( ' + likeStatement.removeEnd(' OR ') + ' )'; - lookupQuery += ' ORDER BY ' + String.join(validLookupFields, ', ') + ' ASC'; + if (String.isNotBlank(queryInfo.get('Lookup_Order_By__c'))) { + lookupQuery += ' ' + queryInfo.get('Lookup_Order_By__c'); + } else { + lookupQuery += ' ORDER BY ' + String.join(validLookupFields, ', ') + ' ASC'; + } lookupQuery += ' LIMIT 50'; List foundValues = new List(); diff --git a/force-app/main/default/layouts/Summit_Events_Question__c-Summit Events Question Layout.layout-meta.xml b/force-app/main/default/layouts/Summit_Events_Question__c-Summit Events Question Layout.layout-meta.xml index ff9b72e8..d495a877 100644 --- a/force-app/main/default/layouts/Summit_Events_Question__c-Summit Events Question Layout.layout-meta.xml +++ b/force-app/main/default/layouts/Summit_Events_Question__c-Summit Events Question Layout.layout-meta.xml @@ -1,5 +1,6 @@ + OpenSlackRecordChannel false false @@ -120,11 +121,7 @@ Edit - Lookup_Results_Icon__c - - - Edit - Lookup_No_Results_Label__c + Lookup_Order_By__c @@ -140,6 +137,14 @@ Edit Lookup_Secondary_Input_Instructions__c + + Edit + Lookup_Results_Icon__c + + + Edit + Lookup_No_Results_Label__c + @@ -201,7 +206,7 @@ false false - 00h8N000003Fl2n + 00hDX000005NMuu 4 0 Default diff --git a/force-app/main/default/objects/Summit_Events_Question__c/fields/Lookup_Order_By__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Question__c/fields/Lookup_Order_By__c.field-meta.xml new file mode 100644 index 00000000..f8d0bb84 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Question__c/fields/Lookup_Order_By__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Lookup_Order_By__c + ORDER BY query segment for which to order lookup query results. + false + ORDER BY query segment for which to order lookup query results. + + 255 + false + false + Text + false + diff --git a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml index 1403e4c8..a7a3ab2b 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml @@ -882,6 +882,11 @@ Summit_Events_Question__c.Lookup_Object__c true
+ + true + Summit_Events_Question__c.Lookup_Order_By__c + true + true Summit_Events_Question__c.Lookup_Results_Icon__c diff --git a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml index a600a34c..9db8dd5e 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml @@ -760,6 +760,11 @@ Summit_Events_Question__c.Lookup_Object__c true + + false + Summit_Events_Question__c.Lookup_Order_By__c + true + false Summit_Events_Question__c.Lookup_Results_Icon__c From feebff846a9c7a317cc3ea14fd1466d82928b623 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Sun, 16 Feb 2025 15:49:46 -0600 Subject: [PATCH 28/81] added text field for birthdate and converted birthdate in reg class to text --- .../classes/SummitEventsRegisterController.cls | 12 +++++++++--- ... Registration Default Layout.layout-meta.xml | 17 +++++++++++------ ...istrant_Date_of_Birth_Text__c.field-meta.xml | 14 ++++++++++++++ .../Summit_Events_Admin.permissionset-meta.xml | 5 +++++ ...mit_Events_Registrant.permissionset-meta.xml | 5 +++++ 5 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 force-app/main/default/objects/Summit_Events_Registration__c/fields/Registrant_Date_of_Birth_Text__c.field-meta.xml diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index b1442a78..998dc96a 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -370,7 +370,7 @@ public with sharing class SummitEventsRegisterController { Registrant_Other_Phone__c, Registrant_Other_Relationship__c, Registrant_Country__c, Registrant_State_Province__c, Registrant_Postal_Code__c, Registrant_Third_Party_Status__c, Registrant_Pronouns__c, Registrant_Title__c, Registrant_Company_Organization__c, Event_Website__c, Event_Website_Referrer__c, gclid__c, utm_campaign__c, utm_content__c, utm_creative_format__c, utm_id__c, utm_marketing_tactic__c, utm_medium__c, utm_source__c, utm_source_platform__c, utm_term__c, Dietary_Ristrictions__c, - Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c + Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c FROM Summit_Events_Registration__c WHERE Id = :eventRegistrationId WITH SECURITY_ENFORCED @@ -474,9 +474,9 @@ public with sharing class SummitEventsRegisterController { // Use Google reCAPTCHA v3 to get a score and validate against acceptable score in settings Decimal reCAPTCHAScore = 0; reCAPTCHAScore = summitEventsRecaptcha.isReCAPTCHAValid(recaptchaResponse); - if (RECAPTCHAScore < seaCustomSettings.reCAPTCHA_v3_Score__c) { + if (reCAPTCHAScore < seaCustomSettings.reCAPTCHA_v3_Score__c) { ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR, eventPage.reCAPTCHA_v3_Score_Fail_Text__c); - if (RECAPTCHAScore == -1) { + if (reCAPTCHAScore == -1) { myMsg = new ApexPages.Message(ApexPages.Severity.ERROR, 'reCaptcha v3 Unauthorized endpoint, please add reCaptcha endpoint to Setup->Security->Remote site settings.'); } ApexPages.addMessage(myMsg); @@ -510,6 +510,12 @@ public with sharing class SummitEventsRegisterController { eventRegistration.Registrant_Date_of_Birth__c = Date.parse(birthDateString); } + if(eventRegistration.Registrant_Date_of_Birth__c != null){ + Datetime birthDateTime = Datetime.newInstance(eventRegistration.Registrant_Date_of_Birth__c, Time.newInstance(0, 0, 0, 0)); + String formattedBirthDateString = birthDateTime.format('yyyy-MM-dd'); + eventRegistration.Registrant_Date_of_Birth_Text__c = formattedBirthDateString; + } + if (String.isNotBlank(applicantType)) { eventRegistration.Registrant_Applicant_Type__c = applicantType; } else if (eventPage.Ask_Applicant_Type__c == 'Do not ask but assign First-Year') { diff --git a/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml b/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml index 553d64f9..a4b51242 100644 --- a/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml +++ b/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml @@ -1,5 +1,6 @@ + OpenSlackRecordChannel Submit true @@ -345,6 +346,10 @@ Edit Registrant_Date_of_Birth__c + + Edit + Registrant_Date_of_Birth_Text__c + Edit Registrant_Gender__c @@ -731,11 +736,6 @@ Record - - Edit - StandardButton - 0 - Delete StandardButton @@ -751,6 +751,11 @@ StandardButton 3 + + Edit + StandardButton + 0 + RelatedEntityHistoryList @@ -798,7 +803,7 @@ false false - 00h6t000003YwxN + 00hDW000004VrBZ 4 0 Default diff --git a/force-app/main/default/objects/Summit_Events_Registration__c/fields/Registrant_Date_of_Birth_Text__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Registration__c/fields/Registrant_Date_of_Birth_Text__c.field-meta.xml new file mode 100644 index 00000000..521502b8 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Registration__c/fields/Registrant_Date_of_Birth_Text__c.field-meta.xml @@ -0,0 +1,14 @@ + + + Registrant_Date_of_Birth_Text__c + Text version of the Registrant Date of Birth in yyyy-MM-dd format. This allows for duplicate matching to have a matching rule on date of birth. + false + Text version of the Registrant Date of Birth in yyyy-MM-dd format. This allows for duplicate matching to have a matching rule on date of birth. + + 10 + false + false + false + Text + false + diff --git a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml index a7a3ab2b..e9d32ef8 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml @@ -1367,6 +1367,11 @@ Summit_Events_Registration__c.Registrant_Country__c true + + true + Summit_Events_Registration__c.Registrant_Date_of_Birth_Text__c + true + true Summit_Events_Registration__c.Registrant_Date_of_Birth__c diff --git a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml index 9db8dd5e..7a140e21 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml @@ -1245,6 +1245,11 @@ Summit_Events_Registration__c.Registrant_Country__c true + + true + Summit_Events_Registration__c.Registrant_Date_of_Birth_Text__c + true + true Summit_Events_Registration__c.Registrant_Date_of_Birth__c From 7d9f25a37ea48a8aec07ce143b020d8bd9311fa9 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Mon, 17 Feb 2025 08:41:39 -0600 Subject: [PATCH 29/81] updated gitignore --- .forceignore | 5 +++++ .gitignore | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 .forceignore diff --git a/.forceignore b/.forceignore new file mode 100644 index 00000000..eeed72a8 --- /dev/null +++ b/.forceignore @@ -0,0 +1,5 @@ +/.illuminatedCloud/ +**/*.ts +**/tsconfig*.json +**/*.tsbuildinfo +**/eslint.config.mjs \ No newline at end of file diff --git a/.gitignore b/.gitignore index a448dc80..9de1c41a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ .sf /src.orig /src -.sf # Python *.pyc @@ -28,8 +27,15 @@ robot/SummitEventsApp/results/ IlluminatedCloud .IlluminatedCloud out -.idea *.iml # CumulusCI -/test_results.* \ No newline at end of file +/test_results.* + +# Added by Illuminated Cloud +.localdev/ +target/ +node_modules/ +/.illuminatedCloud/ +**/tsconfig*.json +**/*.tsbuildinfo \ No newline at end of file From 1e0b2c64c715c628ba11fd86d60cd1b9bb621b70 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Sat, 22 Feb 2025 16:02:06 -0600 Subject: [PATCH 30/81] added formatted date to guest reg created --- .../default/classes/SummitEventsConfirmationController.cls | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/force-app/main/default/classes/SummitEventsConfirmationController.cls b/force-app/main/default/classes/SummitEventsConfirmationController.cls index 0a797526..e977539f 100644 --- a/force-app/main/default/classes/SummitEventsConfirmationController.cls +++ b/force-app/main/default/classes/SummitEventsConfirmationController.cls @@ -94,7 +94,7 @@ public with sharing class SummitEventsConfirmationController { if (String.isNotBlank(eventInformation.registrationId)) { Summit_Events_Registration__c eventRegistration = [ - SELECT Id, Status__c, Event_Name__c, Event_Instance_Title__c, Guest_JSON__c, Event__r.Payment_Gateway__c + SELECT Id, Status__c, Event_Name__c, Event_Instance_Title__c, Guest_JSON__c, Event__r.Payment_Gateway__c, Event_Instance_Date_Time_Formatted__c FROM Summit_Events_Registration__c WHERE Id = :eventInformation.registrationId WITH SECURITY_ENFORCED @@ -204,6 +204,7 @@ public with sharing class SummitEventsConfirmationController { if (guestRegistration != null) { guestRegistration.Event_Instance__c = eventInformation.instanceId; guestRegistration.Event__c = eventInformation.eventId; + guestRegistration.Event_Name__c = eventRegistration.Event_Instance_Title__c; guestRegistration.Guest_Host_Status__c = 'Hosted registrant'; guestRegistration.Status__c = 'Registered'; //Get original registration id for host From d74c7070283cf02a007dc5af4d2c0d9ed7b31ba5 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Mon, 24 Feb 2025 08:25:14 -0600 Subject: [PATCH 31/81] fixed formatted date attributed to guests --- .../main/default/classes/SummitEventsConfirmationController.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/force-app/main/default/classes/SummitEventsConfirmationController.cls b/force-app/main/default/classes/SummitEventsConfirmationController.cls index e977539f..81f176cd 100644 --- a/force-app/main/default/classes/SummitEventsConfirmationController.cls +++ b/force-app/main/default/classes/SummitEventsConfirmationController.cls @@ -204,7 +204,7 @@ public with sharing class SummitEventsConfirmationController { if (guestRegistration != null) { guestRegistration.Event_Instance__c = eventInformation.instanceId; guestRegistration.Event__c = eventInformation.eventId; - guestRegistration.Event_Name__c = eventRegistration.Event_Instance_Title__c; + guestRegistration.Event_Instance_Date_Time_Formatted__c = eventRegistration.Event_Instance_Date_Time_Formatted__c; guestRegistration.Guest_Host_Status__c = 'Hosted registrant'; guestRegistration.Status__c = 'Registered'; //Get original registration id for host From 90701e9c88fd032ac19fd5230360393b43580f4c Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 11 Apr 2025 09:24:50 -0500 Subject: [PATCH 32/81] fixed qr code added one to registration --- ... Registration Default Layout.layout-meta.xml | 17 ++++++++++------- .../Registration_QR_Code__c.field-meta.xml | 4 ++-- .../Registrant_Id_QR_Code__c.field-meta.xml | 13 +++++++++++++ .../Summit_Events_Admin.permissionset-meta.xml | 5 +++++ ...mit_Events_Registrant.permissionset-meta.xml | 5 +++++ 5 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 force-app/main/default/objects/Summit_Events_Registration__c/fields/Registrant_Id_QR_Code__c.field-meta.xml diff --git a/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml b/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml index a4b51242..cef6b01b 100644 --- a/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml +++ b/force-app/main/default/layouts/Summit_Events_Registration__c-Summit Events Registration Default Layout.layout-meta.xml @@ -1,6 +1,5 @@ - OpenSlackRecordChannel Submit true @@ -123,6 +122,10 @@ Readonly UG_Parking_Pass_Link__c + + Readonly + Registrant_Id_QR_Code__c + @@ -736,6 +739,11 @@ Record + + Edit + StandardButton + 0 + Delete StandardButton @@ -751,11 +759,6 @@ StandardButton 3 - - Edit - StandardButton - 0 - RelatedEntityHistoryList @@ -803,7 +806,7 @@ false false - 00hDW000004VrBZ + 00hDd000000XLcS 4 0 Default diff --git a/force-app/main/default/objects/Summit_Events_Instance__c/fields/Registration_QR_Code__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Instance__c/fields/Registration_QR_Code__c.field-meta.xml index 2e9064bb..0bbae5a1 100644 --- a/force-app/main/default/objects/Summit_Events_Instance__c/fields/Registration_QR_Code__c.field-meta.xml +++ b/force-app/main/default/objects/Summit_Events_Instance__c/fields/Registration_QR_Code__c.field-meta.xml @@ -6,9 +6,9 @@ $Setup.Summit_Events_Settings__c.Managed_Package__c, -IMAGE('https://chart.googleapis.com/chart?chs=400x400&cht=qr&chl=' + Event__r.Community_Base_URL__c + 'summit__SummitEventsRegister?instanceID=' + Id ,'Scan QR code to open record in mobile.',250,250), +IMAGE('https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=' + Event__r.Community_Base_URL__c + 'summit__SummitEventsRegister?instanceID=' + Id ,'Scan QR code to open record in mobile.',250,250), -IMAGE('https://chart.googleapis.com/chart?chs=400x400&cht=qr&chl=' + Event__r.Community_Base_URL__c + 'SummitEventsRegister?instanceID=' + Id ,'Scan QR code to open record in mobile.',250,250) +IMAGE('https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=' + Event__r.Community_Base_URL__c + 'SummitEventsRegister?instanceID=' + Id ,'Scan QR code to open record in mobile.',250,250) ) BlankAsZero diff --git a/force-app/main/default/objects/Summit_Events_Registration__c/fields/Registrant_Id_QR_Code__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Registration__c/fields/Registrant_Id_QR_Code__c.field-meta.xml new file mode 100644 index 00000000..cdc8137e --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Registration__c/fields/Registrant_Id_QR_Code__c.field-meta.xml @@ -0,0 +1,13 @@ + + + Registrant_Id_QR_Code__c + false + IMAGE('https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=' + Id ,'Scan QR code to get registration id.',250,250) + BlankAsZero + + false + false + false + Text + false + diff --git a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml index e9d32ef8..3619b7b7 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Admin.permissionset-meta.xml @@ -1417,6 +1417,11 @@ Summit_Events_Registration__c.Registrant_High_School__c true + + false + Summit_Events_Registration__c.Registrant_Id_QR_Code__c + true + true Summit_Events_Registration__c.Registrant_Last_Name__c diff --git a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml index 7a140e21..ca3851d7 100644 --- a/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Summit_Events_Registrant.permissionset-meta.xml @@ -1295,6 +1295,11 @@ Summit_Events_Registration__c.Registrant_High_School__c true + + false + Summit_Events_Registration__c.Registrant_Id_QR_Code__c + true + true Summit_Events_Registration__c.Registrant_Last_Name__c From c54fe6340aaf5311ef849cf1ac371ce7e9b2f71f Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 2 May 2025 16:37:23 -0500 Subject: [PATCH 33/81] gitignore update --- .forceignore | 5 +++++ .gitignore | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 .forceignore diff --git a/.forceignore b/.forceignore new file mode 100644 index 00000000..eeed72a8 --- /dev/null +++ b/.forceignore @@ -0,0 +1,5 @@ +/.illuminatedCloud/ +**/*.ts +**/tsconfig*.json +**/*.tsbuildinfo +**/eslint.config.mjs \ No newline at end of file diff --git a/.gitignore b/.gitignore index b37abced..56a8ae20 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,12 @@ out *.iml # CumulusCI -/test_results.* \ No newline at end of file +/test_results.* + +# Added by Illuminated Cloud +.localdev/ +target/ +node_modules/ +/.illuminatedCloud/ +**/tsconfig*.json +**/*.tsbuildinfo \ No newline at end of file From 2b1132fb19d085030213a6b0e9253cd6404512e6 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 9 May 2025 14:29:14 -0500 Subject: [PATCH 34/81] optimized shared person account detector method --- .../main/default/classes/SummitEventsShared.cls | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsShared.cls b/force-app/main/default/classes/SummitEventsShared.cls index 48189355..a8f9ffb5 100644 --- a/force-app/main/default/classes/SummitEventsShared.cls +++ b/force-app/main/default/classes/SummitEventsShared.cls @@ -619,20 +619,7 @@ public with sharing class SummitEventsShared { // Test to see if person accounts are enabled. public static Boolean personAccountsEnabled() { - try - { - // Try to use the isPersonAccount field. - sObject testObject = new Account(); - testObject.get( 'isPersonAccount' ); - // If we got here without an exception, return true. - return true; - } - catch( Exception ex ) - { - // An exception was generated trying to access the isPersonAccount field - // so person accounts aren't enabled; return false. - return false; - } + return Schema.SObjectType.Account.fields.getMap().containsKey( 'isPersonAccount' ); } //Method to test object and field availability for current user (Guest user) From cf41c723156a26459c22d3796a8eb16d275c85b0 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 21 May 2025 12:09:10 -0500 Subject: [PATCH 35/81] Made a small change to help with packaging chaning var to let in some js --- .../SummitEventsAssets/js/register.js | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/force-app/main/default/staticresources/SummitEventsAssets/js/register.js b/force-app/main/default/staticresources/SummitEventsAssets/js/register.js index c396c7d7..c935e338 100644 --- a/force-app/main/default/staticresources/SummitEventsAssets/js/register.js +++ b/force-app/main/default/staticresources/SummitEventsAssets/js/register.js @@ -65,8 +65,8 @@ function dynamicValidation() { } //Carries over number values when toggling between type of mobile and home -var phoneCarryover; -var newPhoneType; +let phoneCarryover; +let newPhoneType; function phoneTypeToggle(phoneType) { let phones = document.querySelectorAll('input[id$=mobile], input[id$=phone]'); @@ -94,8 +94,8 @@ async function recaptcha() { } function checkForm() { - var error_count = 0; - var emailReg = /^([a-zA-Z0-9_.\-.'.+])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; + let error_count = 0; + let emailReg = /^([a-zA-Z0-9_.\-.'.+])+@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; document.querySelectorAll(".slds-is-required .slds-input, .slds-is-required .slds-textarea, .slds-is-required .slds-select").forEach(item => { let inputWrap = item.closest('.slds-form-element'); @@ -274,7 +274,7 @@ function validYear() { }); } -var RFIStates = { +let RFIStates = { 'AL': 'Alabama', 'AK': 'Alaska', 'AZ': 'Arizona', @@ -346,10 +346,10 @@ var RFIStates = { }; function createCookie(name, value, days) { - var expires; + let expires; if (days) { - var date = new Date(); + let date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toGMTString(); } else { @@ -359,9 +359,9 @@ function createCookie(name, value, days) { } function readCookie(name) { - var nameEQ = encodeURIComponent(name) + "="; - var ca = document.cookie.split(';'); - for (var i = 0; i < ca.length; i++) { + let nameEQ = encodeURIComponent(name) + "="; + let ca = document.cookie.split(';'); + for (let i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length)); @@ -374,7 +374,7 @@ function eraseCookie(name) { } var getUrlParameter = function getUrlParameter(sParam) { - var sPageURL = decodeURIComponent(window.location.search.substring(1)), sURLVariables = sPageURL.split('&'), + let sPageURL = decodeURIComponent(window.location.search.substring(1)), sURLVariables = sPageURL.split('&'), sParameterName, i; for (i = 0; i < sURLVariables.length; i++) { From f307ebe647a46247651a23d3ea8a3a132210fe4c Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Thu, 26 Jun 2025 10:44:02 -0500 Subject: [PATCH 36/81] set dev to install edu cloud --- cumulusci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cumulusci.yml b/cumulusci.yml index e9288940..3334b600 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -188,6 +188,6 @@ orgs: namespaced: true dev: - config_file: orgs/dev.json + config_file: orgs/educloud.json days: 7 namespaced: false \ No newline at end of file From ff3c36f17d6eae7e2411f1aedbd0260a0ee7f55c Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 29 Jul 2025 15:59:41 -0500 Subject: [PATCH 37/81] Added person account custom metadata matching, fixed bug --- .../classes/SummitEventsContactMatching.cls | 21 +++++----- ...rson_Matching_Mapping__mdt.object-meta.xml | 6 +++ .../fields/Matching_Only__c.field-meta.xml | 10 +++++ ...n_Account_Field_API_Name__c.field-meta.xml | 11 ++++++ ..._Account_Matching_Method__c.field-meta.xml | 39 +++++++++++++++++++ .../fields/Source_Object__c.field-meta.xml | 19 +++++++++ .../fields/Source_Type__c.field-meta.xml | 24 ++++++++++++ .../fields/Source_Value__c.field-meta.xml | 11 ++++++ ...ave_Source_Objects.validationRule-meta.xml | 8 ++++ ...have_Source_Object.validationRule-meta.xml | 8 ++++ 10 files changed, 147 insertions(+), 10 deletions(-) create mode 100644 force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/Summit_Events_Person_Matching_Mapping__mdt.object-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Matching_Only__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Person_Account_Field_API_Name__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Person_Account_Matching_Method__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Object__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Type__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Value__c.field-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/validationRules/Fields_Types_must_have_Source_Objects.validationRule-meta.xml create mode 100644 force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/validationRules/Hardcoded_Types_cant_have_Source_Object.validationRule-meta.xml diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index dc3d05de..c03de758 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -55,7 +55,7 @@ public with sharing class SummitEventsContactMatching { } if (!matchingMethods.isEmpty()) { contactMappings = processMappings(matchingMethods, 'Summit_Events_Contact_Matching_Mapping__mdt', 'Contact_Matching_Method__c', 'Contact_Field_API_Name__c'); - personAccountMappings = processMappings(personMatchingMethods, 'Summit_Events_Contact_Matching_Mapping__mdt', 'Contact_Matching_Method__c', 'Contact_Field_API_Name__c'); + personAccountMappings = processMappings(personMatchingMethods, 'Summit_Events_Person_Matching_Mapping__mdt', 'Person_Account_Matching_Method__c', 'Person_Account_Field_API_Name__c'); } // Setting up lead matching methods and mappings @@ -121,7 +121,7 @@ public with sharing class SummitEventsContactMatching { } } - if( String.isNotBlank(reg.Guest_Host_Status__c) && !event.Use_Matching_for_Guest_Registrations__c && reg.Guest_Host_Status__c.equalsIgnoreCase('hosted registrant')) { + if (String.isNotBlank(reg.Guest_Host_Status__c) && !event.Use_Matching_for_Guest_Registrations__c && reg.Guest_Host_Status__c.equalsIgnoreCase('hosted registrant')) { skipThisRegMatching = true; } @@ -212,7 +212,7 @@ public with sharing class SummitEventsContactMatching { for (RegistrationContactWrapper rw : registrationContactWrappers) { Summit_Events__c event = matchingRules.get(rw.registration.Event__c); String matchLogString = ''; - if(String.isNotBlank(rw.registration.Matching_Log__c)) { + if (String.isNotBlank(rw.registration.Matching_Log__c)) { matchLogString = rw.registration.Matching_Log__c; } matchLogString += handleMatchingLog('Contact', findContact.isEmpty(), event.Contact_Matching_No_Match_Behavior__c, event.Contact_Matching_Multiple_Match_Behavior__c, rw.registration.New_Contact_Created__c, rw.registration.Contact__c, rw.contacts, matchingRules.get(rw.registration.Event__c).Contact_Creation_Duplicate_Rule__c); @@ -353,18 +353,19 @@ public with sharing class SummitEventsContactMatching { c.Created_with_Summit_Events__c = true; // Apply any mapped values from custom metadata to the contact - c = (Contact) applyMappings(c, matchingMethod, contactMappings, reg); + c = (Contact) applyMappings(c, matchingMethod, contactMappings, reg, 'Contact_Field_API_Name__c'); return c; } - private static SObject applyMappings(SObject record, String matchingMethod, Map> mappings, Summit_Events_Registration__c reg) { + private static SObject applyMappings(SObject record, String matchingMethod, Map> mappings, Summit_Events_Registration__c reg, String objFieldAPIName) { + String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); if (mappings.containsKey(matchingMethod)) { List mappingList = mappings.get(matchingMethod); for (SObject mapping : mappingList) { - String sourceType = (String) mapping.get('Source_Type__c'); - String fieldAPIName = (String) mapping.get('Contact_Field_API_Name__c'); - Object value = sourceType.equalsIgnoreCase('Hardcoded') ? mapping.get('Source_Value__c') : reg.get((String) mapping.get('Source_Value__c')); + String sourceType = (String) mapping.get(namespace + 'Source_Type__c'); + String fieldAPIName = (String) mapping.get(namespace + objFieldAPIName); + Object value = sourceType.equalsIgnoreCase('Hardcoded') ? mapping.get(namespace + 'Source_Value__c') : reg.get((String) mapping.get(namespace + 'Source_Value__c')); record = applyCorrectFieldTypesToValues(record, fieldAPIName, value); } } @@ -398,7 +399,7 @@ public with sharing class SummitEventsContactMatching { } // Apply any mapped values from custom metadata to the contact - personAccount = (Account) applyMappings(personAccount, customMappingType, contactMappings, reg); + personAccount = (Account) applyMappings(personAccount, customMappingType, contactMappings, reg, 'Person_Account_Field_API_Name__c'); return personAccount; } @@ -417,7 +418,7 @@ public with sharing class SummitEventsContactMatching { l.MobilePhone = reg.Registrant_Mobile_Phone__c; //Apply any values mapped in custom metadata to the lead - l = (Lead) applyMappings(l, matchingMethod, leadMappings, reg); + l = (Lead) applyMappings(l, matchingMethod, leadMappings, reg, 'Lead_Field_API_Name__c'); return l; } diff --git a/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/Summit_Events_Person_Matching_Mapping__mdt.object-meta.xml b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/Summit_Events_Person_Matching_Mapping__mdt.object-meta.xml new file mode 100644 index 00000000..1416f5fc --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/Summit_Events_Person_Matching_Mapping__mdt.object-meta.xml @@ -0,0 +1,6 @@ + + + + Summit Events Person Matching Mappings + Public + diff --git a/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Matching_Only__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Matching_Only__c.field-meta.xml new file mode 100644 index 00000000..d2b84dbe --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Matching_Only__c.field-meta.xml @@ -0,0 +1,10 @@ + + + Matching_Only__c + false + Only select if this is to be used in a matching rule, but value should not be added to the Person Account record. + DeveloperControlled + Only select if this is to be used in a matching rule, but value should not be added to the Person Account record. + + Checkbox + diff --git a/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Person_Account_Field_API_Name__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Person_Account_Field_API_Name__c.field-meta.xml new file mode 100644 index 00000000..c50b4d51 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Person_Account_Field_API_Name__c.field-meta.xml @@ -0,0 +1,11 @@ + + + Person_Account_Field_API_Name__c + false + SubscriberControlled + + 255 + true + Text + false + diff --git a/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Person_Account_Matching_Method__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Person_Account_Matching_Method__c.field-meta.xml new file mode 100644 index 00000000..afb969a5 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Person_Account_Matching_Method__c.field-meta.xml @@ -0,0 +1,39 @@ + + + Person_Account_Matching_Method__c + SubscriberControlled + + true + Picklist + + true + + true + + Admissions + false + + + + Blue + true + + + + Green + false + + + + Red + false + + + + Yellow + false + + + + + diff --git a/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Object__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Object__c.field-meta.xml new file mode 100644 index 00000000..1a7ced91 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Object__c.field-meta.xml @@ -0,0 +1,19 @@ + + + Source_Object__c + DeveloperControlled + + false + Picklist + + true + + false + + summit__Summit_Events_Registration__c + true + + + + + diff --git a/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Type__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Type__c.field-meta.xml new file mode 100644 index 00000000..c28bdeb5 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Type__c.field-meta.xml @@ -0,0 +1,24 @@ + + + Source_Type__c + DeveloperControlled + + true + Picklist + + true + + false + + Field + false + + + + Hardcoded + false + + + + + diff --git a/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Value__c.field-meta.xml b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Value__c.field-meta.xml new file mode 100644 index 00000000..e508274b --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/fields/Source_Value__c.field-meta.xml @@ -0,0 +1,11 @@ + + + Source_Value__c + false + SubscriberControlled + + 255 + true + Text + false + diff --git a/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/validationRules/Fields_Types_must_have_Source_Objects.validationRule-meta.xml b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/validationRules/Fields_Types_must_have_Source_Objects.validationRule-meta.xml new file mode 100644 index 00000000..72b90253 --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/validationRules/Fields_Types_must_have_Source_Objects.validationRule-meta.xml @@ -0,0 +1,8 @@ + + + Fields_Types_must_have_Source_Objects + true + ISPICKVAL(Source_Type__c, 'Field') && +ISPICKVAL(Source_Object__c, '') + Source Object is required when Source Type equals "Field" + diff --git a/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/validationRules/Hardcoded_Types_cant_have_Source_Object.validationRule-meta.xml b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/validationRules/Hardcoded_Types_cant_have_Source_Object.validationRule-meta.xml new file mode 100644 index 00000000..752ac33e --- /dev/null +++ b/force-app/main/default/objects/Summit_Events_Person_Matching_Mapping__mdt/validationRules/Hardcoded_Types_cant_have_Source_Object.validationRule-meta.xml @@ -0,0 +1,8 @@ + + + Hardcoded_Types_cant_have_Source_Object + true + ISPICKVAL(Source_Type__c, 'Hardcoded') && +NOT(ISPICKVAL(Source_Object__c, '')) + Source Object must be blank when Source Type equals "Hardcoded" + From ed7bbddac8706704bca029ebc84f9b3bc97a1a7f Mon Sep 17 00:00:00 2001 From: Alex Kadis Date: Wed, 30 Jul 2025 15:04:01 -0400 Subject: [PATCH 38/81] New version of SummitEventsShared.getDependentSelectOptions() Newer version of getDependentSelectOptions() properly gets the right picklist items for bug here: https://github.com/SFDO-Community/Summit-Events-App/issues/587 Based on: https://glyntalkssalesforce.blogspot.com/2018/08/dependent-picklist-values-in-apex.html https://salesforce.stackexchange.com/questions/4462/get-lists-of-dependent-picklist-options-in-apex --- .../default/classes/SummitEventsShared.cls | 65 ++++++++++--------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsShared.cls b/force-app/main/default/classes/SummitEventsShared.cls index 752cb5b8..25c3f283 100644 --- a/force-app/main/default/classes/SummitEventsShared.cls +++ b/force-app/main/default/classes/SummitEventsShared.cls @@ -696,44 +696,49 @@ public with sharing class SummitEventsShared { dependentField = d; } } + Schema.DescribeFieldResult controllingField = dependentField.getController().getDescribe(); + List controlEntries = (controllingField.getType() == Schema.DisplayType.Boolean + ? null + : controllingField.getPicklistValues() + ); + String base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + Map> dependentPicklistMap = new Map>(); //2nd get the dependent PL values mapped to the target parent PL's value if (-1 != parentValueIndex && null != dependentField) { - Schema.PicklistEntry[] plValues = dependentField.getPicklistValues(); - for (PicklistEntry plv : plValues) { - String jsonstr = JSON.serialize(plv); - Map jMap = (Map) JSON.deserialize(jsonstr, Map.class); - String validFor = jMap.get('validFor'); - String plvalue = jMap.get('value'); - String plId = jMap.get('id'); - if (null != validFor && !''.equals(validFor.trim()) && isDependentValue(parentValueIndex, validFor)) { - dependentItems.put(plvalue, plvalue); - } - } + for (Schema.PicklistEntry entry : dependentField.getPicklistValues()) { + if (entry.isActive()) { + List base64chars = String.valueOf(((Map) JSON.deserializeUntyped(JSON.serialize(entry))).get('validFor')).split(''); + + for (Integer index = 0; index < (controlEntries != null ? controlEntries.size() : 2); index++) { + Object controlValue = (controlEntries == null + ? (Object) (index == 1) + : (Object) (controlEntries[index].isActive() ? controlEntries[index].getValue() : null)); + Integer bitIndex = index / 6; + if (bitIndex > base64chars.size() - 1) { + break; + } + Integer bitShift = 5 - Math.mod(index, 6); + + if (controlValue == null || (base64.indexOf(base64chars[bitIndex]) & (1 << bitShift)) == 0) { + continue; + } + + if (!dependentPicklistMap.containsKey(controlValue)) { + dependentPicklistMap.put(controlValue, new Map()); + } + dependentPicklistMap.get(controlValue).put(entry.getValue(), entry.getLabel()); + } + } + } + if (dependentPicklistMap.get(parentValue) != null) { + dependentItems = dependentPicklistMap.get(parentValue); + } } } return dependentItems; } - private static Boolean isDependentValue(Integer index, String validFor) { - String decoded = EncodingUtil.convertToHex(EncodingUtil.base64Decode(validFor)); - Integer bits = hexToInt(decoded); - return ((bits & (128 >> Math.mod(index, 8))) != 0); - } - - private static Integer hexToInt(String hex) { - - Map hMap = new Map{ - '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15, 'a' => 10, 'b' => 11, 'c' => 12, 'd' => 13, 'e' => 14, 'f' => 15 - }; - - Integer retVal = 0; - for (Integer i = 0; i < hex.length(); i += 2) { - retVal += (hMap.get(hex.substring(i, i + 1)) * 16) + (hMap.get(hex.substring(i + 1, i + 2))); - } - return retVal; - } - public static String getCookieKey() { String key = ''; Summit_Events_Settings__c SummitEventsSettings = Summit_Events_Settings__c.getOrgDefaults(); From 5395cdc517d68bace6fa9938554236f236804f7b Mon Sep 17 00:00:00 2001 From: Alex Kadis Date: Thu, 31 Jul 2025 11:37:35 -0400 Subject: [PATCH 39/81] Adding newline to test commit --- force-app/main/default/classes/SummitEventsShared.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/force-app/main/default/classes/SummitEventsShared.cls b/force-app/main/default/classes/SummitEventsShared.cls index 25c3f283..480a64af 100644 --- a/force-app/main/default/classes/SummitEventsShared.cls +++ b/force-app/main/default/classes/SummitEventsShared.cls @@ -760,4 +760,4 @@ public with sharing class SummitEventsShared { } } -} \ No newline at end of file +} From 3d3eebd8ab5e442f5a87992a2cf88f76276d873a Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 6 Aug 2025 12:03:53 -0500 Subject: [PATCH 40/81] fixed matching on last modified not attributed correctly on reg record --- .../main/default/classes/SummitEventsContactMatching.cls | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index c03de758..2bd89fa8 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -94,12 +94,12 @@ public with sharing class SummitEventsContactMatching { if (event.Contact_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && contactEmpty && !personAccountActive) { findContact.add(reg); } - if (event.Lead_matching_rules__c == 'Use Salesforce Duplicate Rule' && (!personAccountActive && contactEmpty || personAccountActive && personAccountActive) && String.isBlank(reg.Lead__c)) { - findLead.add(reg); - } if (event.Person_Matching_Rules__c == 'Use Salesforce Duplicate Rule' && personEmpty) { findPerson.add(reg); } + if (event.Lead_matching_rules__c == 'Use Salesforce Duplicate Rule' && (!personAccountActive && contactEmpty || personAccountActive && personEmpty) && String.isBlank(reg.Lead__c)) { + findLead.add(reg); + } } List registrationContactWrappers = new List(); @@ -189,6 +189,7 @@ public with sharing class SummitEventsContactMatching { } } contactsQueried.sort(lastModCompare); + rw.registration.Contact__c = contactsQueried.isEmpty() ? null : contactsQueried.get(0).Id; rw.contacts = contactsQueried; for (Account a : rw.accounts) { @@ -197,6 +198,7 @@ public with sharing class SummitEventsContactMatching { } } accountsQueried.sort(lastModCompare); + rw.registration.Person_Account__c = accountsQueried.isEmpty() ? null : accountsQueried.get(0).Id; rw.accounts = accountsQueried; for (Lead l : rw.leads) { @@ -205,6 +207,7 @@ public with sharing class SummitEventsContactMatching { } } leadsQueried.sort(lastModCompare); + rw.registration.Lead__c = leadsQueried.isEmpty() ? null : leadsQueried.get(0).Id; rw.leads = leadsQueried; } From e01b2f1f10632668c0b3446875f45ae756ee8182 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Thu, 7 Aug 2025 11:53:42 -0500 Subject: [PATCH 41/81] Installed SEA in a digital experience community --- cumulusci.yml | 375 +++++++++--------- orgs/dev.json | 13 +- .../networks/Summit Events.network-meta.xml | 73 ++++ unpackaged/site/package.xml | 0 4 files changed, 280 insertions(+), 181 deletions(-) create mode 100644 unpackaged/main/default/networks/Summit Events.network-meta.xml create mode 100644 unpackaged/site/package.xml diff --git a/cumulusci.yml b/cumulusci.yml index 3334b600..ffb09940 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -1,193 +1,208 @@ minimum_cumulusci_version: '3.34.0' project: - name: SummitEventsApp - package: - name: Summit Events App - namespace: summit - api_version: "61.0" - source_format: sfdx - git: - default_branch: master - repo_url: https://github.com/SFDO-Community/Summit-Events-App + name: SummitEventsApp + package: + name: Summit Events App + namespace: summit + api_version: "61.0" + source_format: sfdx + git: + default_branch: master + repo_url: https://github.com/SFDO-Community/Summit-Events-App tasks: - deploy_site_config: - description: Deploys configuration for Development. - class_path: cumulusci.tasks.salesforce.Deploy - options: - namespace_inject: $project_config.project__package__namespace - path: unpackaged/config/site - - create_fake_school_data: - description: Makes fake account data to mimic schools with Education as industry - class_path: cumulusci.tasks.bulkdata.snowfakery.Snowfakery - options: - recipe: datasets/snowfakery/school_recipe.yml - - deploy_guest_sharing_rules: - description: Deploys configuration for Development. - class_path: cumulusci.tasks.salesforce.Deploy - options: - namespace_inject: $project_config.project__package__namespace - path: unpackaged/config/sharing - - deploy_namespaced_guest_sharing_rules: - description: Deploys configuration for Development. - class_path: cumulusci.tasks.salesforce.Deploy - options: - namespace_inject: $project_config.project__package__namespace - path: unpackaged/config/summit__sharing - - deploy_site_settings: - description: Setup the Custom Settings for the Event Site - class_path: cumulusci.tasks.apex.anon.AnonymousApexTask - options: - namespace_inject: $project_config.project__package__namespace - apex: > - Site mySite = [SELECT Id FROM Site WHERE Name = 'Summit_Events']; - SiteDetail mySiteDetail = [SELECT SecureURL FROM SiteDetail WHERE DurableId = :mySite.Id]; - String url = mySiteDetail.SecureURL; - %%%NAMESPACE%%%Summit_Events_Settings__c eventSettings = %%%NAMESPACE%%%Summit_Events_Settings__c.getOrgDefaults(); - eventSettings.%%%NAMESPACE%%%Community_Base_URL__c = url; - eventSettings.%%%NAMESPACE%%%Managed_Package__c = false; - upsert eventSettings; - - deploy_permission_set: - description: Give System Admins Event Admin Permission Set - class_path: cumulusci.tasks.apex.anon.AnonymousApexTask - options: - namespace_inject: $project_config.project__package__namespace - apex: > - List eventPermissionSets; - eventPermissionSets = [SELECT Name, Id FROM PermissionSet WHERE Name = 'Summit_Events_Admin']; - - List permissionSetList = new List(); - if (!eventPermissionSets.isEmpty()) { - for (User u: [ SELECT ID FROM User WHERE Profile.Name = 'System Administrator' ]) { - permissionSetList.add(new PermissionSetAssignment(PermissionSetId = eventPermissionSets[0].Id, AssigneeId = u.Id)); - } + deploy_site_config: + description: Deploys configuration for Development. + class_path: cumulusci.tasks.salesforce.Deploy + options: + namespace_inject: $project_config.project__package__namespace + path: unpackaged/config/site + + create_fake_school_data: + description: Makes fake account data to mimic schools with Education as industry + class_path: cumulusci.tasks.bulkdata.snowfakery.Snowfakery + options: + recipe: datasets/snowfakery/school_recipe.yml + + deploy_guest_sharing_rules: + description: Deploys configuration for Development. + class_path: cumulusci.tasks.salesforce.Deploy + options: + namespace_inject: $project_config.project__package__namespace + path: unpackaged/config/sharing + + deploy_namespaced_guest_sharing_rules: + description: Deploys configuration for Development. + class_path: cumulusci.tasks.salesforce.Deploy + options: + namespace_inject: $project_config.project__package__namespace + path: unpackaged/config/summit__sharing + + deploy_site_settings: + description: Setup the Custom Settings for the Event Site + class_path: cumulusci.tasks.apex.anon.AnonymousApexTask + options: + namespace_inject: $project_config.project__package__namespace + apex: > + Site mySite = [SELECT Id FROM Site WHERE Name = 'Summit_Events']; + SiteDetail mySiteDetail = [SELECT SecureURL FROM SiteDetail WHERE DurableId = :mySite.Id]; + String url = mySiteDetail.SecureURL; + %%%NAMESPACE%%%Summit_Events_Settings__c eventSettings = %%%NAMESPACE%%%Summit_Events_Settings__c.getOrgDefaults(); + eventSettings.%%%NAMESPACE%%%Community_Base_URL__c = url; + eventSettings.%%%NAMESPACE%%%Managed_Package__c = false; + upsert eventSettings; + + deploy_permission_set: + description: Give System Admins Event Admin Permission Set + class_path: cumulusci.tasks.apex.anon.AnonymousApexTask + options: + namespace_inject: $project_config.project__package__namespace + apex: > + List eventPermissionSets; + eventPermissionSets = [SELECT Name, Id FROM PermissionSet WHERE Name = 'Summit_Events_Admin']; + + List permissionSetList = new List(); + if (!eventPermissionSets.isEmpty()) { + for (User u: [ SELECT ID FROM User WHERE Profile.Name = 'System Administrator' ]) { + permissionSetList.add(new PermissionSetAssignment(PermissionSetId = eventPermissionSets[0].Id, AssigneeId = u.Id)); + } + } + if (!permissionSetList.isEmpty()) { + upsert permissionSetList; + } + + deploy_guest_permission_set: + description: Give System Admins Event Admin Permission Set + class_path: cumulusci.tasks.apex.anon.AnonymousApexTask + options: + namespace_inject: $project_config.project__package__namespace + apex: > + String siteName = 'Summit_Events'; + + List sites = [ + SELECT GuestUserId + FROM Site + WHERE Name = :siteName + ]; + + List eventPermissionSets; + eventPermissionSets = [SELECT Name, Id FROM PermissionSet WHERE Name = 'Summit_Events_Registrant']; + + List permissionSetList = new List(); + + for (Site site : sites) { + if (site.GuestUserId == null) { + for (permissionSet ps : eventPermissionSets) { + PermissionSetList.add(new PermissionSetAssignment(PermissionSetId = ps.Id, AssigneeId = site.GuestUserId)); } - if (!permissionSetList.isEmpty()) { - upsert permissionSetList; - } - - deploy_guest_permission_set: - description: Give System Admins Event Admin Permission Set - class_path: cumulusci.tasks.apex.anon.AnonymousApexTask - options: - namespace_inject: $project_config.project__package__namespace - apex: > - String siteName = 'Summit_Events'; - - Site site = [ - SELECT GuestUserId - FROM Site - WHERE Name = :siteName - ]; - - List eventPermissionSets; - eventPermissionSets = [SELECT Name, Id FROM PermissionSet WHERE Name = 'Summit_Events_Registrant']; - - List permissionSetList = new List(); - if (!eventPermissionSets.isEmpty()) { - permissionSetList.add(new PermissionSetAssignment(PermissionSetId = eventPermissionSets[0].Id, AssigneeId = site.GuestUserId)); - } - if (!permissionSetList.isEmpty()) { - upsert permissionSetList; - } - - robot: - options: - suites: robot/SummitEventsApp/tests - options: - outputdir: robot/SummitEventsApp/results - - robot_testdoc: - options: - path: robot/SummitEventsApp/tests - output: robot/SummitEventsApp/doc/SummitEventsApp_tests.html - - install_managed: - options: - security_type: NONE - - update_dependencies: - options: - security_type: NONE + } + } + + if (!permissionSetList.isEmpty()) { + upsert permissionSetList; + } + + deploy_community: + description: Deploys the Community for Summit Events App + class_path: cumulusci.tasks.salesforce.CreateCommunity + options: + template: Build Your Own + name: Summit Events + description: Community for Summit Events App + skip_existing: true + + robot: + options: + suites: robot/SummitEventsApp/tests + options: + outputdir: robot/SummitEventsApp/results + + robot_testdoc: + options: + path: robot/SummitEventsApp/tests + output: robot/SummitEventsApp/doc/SummitEventsApp_tests.html + + install_managed: + options: + security_type: NONE + + update_dependencies: + options: + security_type: NONE flows: - config_qa: - steps: - 3: - task: deploy_permission_set - 4: - task: deploy_site_config - 5: - task: deploy_site_settings - 6: - task: deploy_guest_permission_set - 7: - task: deploy_guest_sharing_rules - 8: - task: create_fake_school_data - - config_dev: - steps: - 3: - task: deploy_permission_set - 4: - task: deploy_site_config - 5: - task: deploy_site_settings - 6: - task: deploy_guest_permission_set - 7: - task: deploy_guest_sharing_rules - 8: - task: create_fake_school_data - - config_dev_namespaced: - steps: - 3: - task: deploy_permission_set - 4: - task: deploy_site_config - 5: - task: deploy_site_settings - 6: - task: deploy_guest_permission_set - 7: - task: deploy_guest_sharing_rules - 8: - task: create_fake_school_data - - customer_org: - steps: - 1: - task: install_managed + config_qa: + steps: + 3: + task: deploy_community + 4: + task: deploy_permission_set + 5: + task: deploy_guest_permission_set + 6: + task: deploy_guest_sharing_rules + 7: + task: deploy_site_settings + 8: + task: create_fake_school_data + + config_dev: + steps: + 3: + task: deploy_community + 4: + task: deploy_permission_set + 5: + task: deploy_guest_permission_set + 6: + task: deploy_guest_sharing_rules + 7: + task: deploy_site_settings + 8: + task: create_fake_school_data + + config_dev_namespaced: + steps: + 3: + task: deploy_permission_set + 4: + task: deploy_site_config + 5: + task: deploy_site_settings + 6: + task: deploy_guest_permission_set + 7: + task: deploy_guest_sharing_rules + 8: + task: create_fake_school_data + + customer_org: + steps: + 1: + task: install_managed plans: - install: - slug: install - title: Base Plan - tier: primary - is_listed: True - preflight_message: This will install Summit Events App (SEA) into your org. - post_install_message: "Thanks for installing SEA. Please review the [post-install instructions](https://sfdo-community-sprints.github.io/summit-events-app-documentation/docs/Getting-Started/Installing/) for next steps." - error_message: "If you experience an issue with the installation, please post in the [Trailblazer Community](https://trailhead.salesforce.com/trailblazer-community/groups/0F94S000000kHi2SAE)." - steps: - 1: - flow: customer_org + install: + slug: install + title: Base Plan + tier: primary + is_listed: True + preflight_message: This will install Summit Events App (SEA) into your org. + post_install_message: "Thanks for installing SEA. Please review the [post-install instructions](https://sfdo-community-sprints.github.io/summit-events-app-documentation/docs/Getting-Started/Installing/) for next steps." + error_message: "If you experience an issue with the installation, please post in the [Trailblazer Community](https://trailhead.salesforce.com/trailblazer-community/groups/0F94S000000kHi2SAE)." + steps: + 1: + flow: customer_org orgs: - scratch: + scratch: - dev_namespaced: - config_file: orgs/namespaced.json - days: 7 - namespaced: true + dev_namespaced: + config_file: orgs/namespaced.json + days: 7 + namespaced: true - dev: - config_file: orgs/educloud.json - days: 7 - namespaced: false \ No newline at end of file + dev: + config_file: orgs/educloud.json + days: 7 + namespaced: false \ No newline at end of file diff --git a/orgs/dev.json b/orgs/dev.json index c8ba252c..eb2e6565 100644 --- a/orgs/dev.json +++ b/orgs/dev.json @@ -1,7 +1,12 @@ { "orgName": "Summit Events Dev", "edition": "Developer", - "features": ["Sites"], + "features": [ + "Communities", + "Sites", + "ForceComPlatform", + "EinsteinGPTForDevelopers" + ], "settings": { "lightningExperienceSettings": { "enableS1DesktopEnabled": true @@ -20,6 +25,12 @@ }, "languageSettings": { "enableTranslationWorkbench": true + }, + "experienceBundleSettings": { + "enableExperienceBundleMetadata": true + }, + "communitiesSettings": { + "enableNetworksEnabled": true } } } \ No newline at end of file diff --git a/unpackaged/main/default/networks/Summit Events.network-meta.xml b/unpackaged/main/default/networks/Summit Events.network-meta.xml new file mode 100644 index 00000000..299237d0 --- /dev/null +++ b/unpackaged/main/default/networks/Summit Events.network-meta.xml @@ -0,0 +1,73 @@ + + + false + false + unfiled$public/CommunityChangePasswordEmailTemplate + + true + 16785863+tcdahlberg@users.noreply.github.com + Summit Events + false + true + false + true + false + true + false + true + false + false + false + false + false + false + true + false + false + false + true + true + true + false + false + unfiled$public/CommunityForgotPasswordEmailTemplate + false + unfiled$public/CommunityHeadlessForgotPasswordTemplate + unfiled$public/CommunityHeadlessRegistrationTemplate + + false + false + false + false + false + false + false + false + false + false + false + 5 + 0.0 + + + admin + + + Standard + Designer + Designer + Designer + Designer + + Summit_Events1 + true + true + Summit_Events + NotArchived + UnderConstruction + + home + Chatter + + unfiled$public/CommunityWelcomeEmailTemplate + diff --git a/unpackaged/site/package.xml b/unpackaged/site/package.xml new file mode 100644 index 00000000..e69de29b From 829ea784bced6f0218d7d392a9012753cdb7a6e7 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 10:57:22 -0500 Subject: [PATCH 42/81] created shared class for read queries --- .../classes/SummitEventsReadShared.cls | 112 ++++++++++++++++++ .../SummitEventsReadShared.cls-meta.xml | 5 + .../SummitEventsRegisterController.cls | 67 +---------- .../default/classes/SummitEventsShared.cls | 64 ++-------- 4 files changed, 130 insertions(+), 118 deletions(-) create mode 100644 force-app/main/default/classes/SummitEventsReadShared.cls create mode 100644 force-app/main/default/classes/SummitEventsReadShared.cls-meta.xml diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls new file mode 100644 index 00000000..4e51239d --- /dev/null +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -0,0 +1,112 @@ +/** + * Created by Thad-PC-2019 on 8/11/2025. + */ + +public without sharing class SummitEventsReadShared { + public static Summit_Events_Instance__c getInstanceById(Id instanceId) { + return [ + SELECT Id, Name, Event__r.Name, Event__r.Event_Name__c, Event__r.Id, Instance_Title__c, Active_Status__c, Capacity__c, + Event__r.Event_description__c, Event__r.Audience__c, Current_Available_Capacity__c, + Location_Type_Override__c, Location_Address_Override__c, Event__r.Close_Event_Days_Before__c, Location_Map_Link_Override__c, Location_Title_Override__c, + Event_Fee_Additional_Allocation_Override__c, Event_Fee_Additional_Override__c, Event_Fee_Override__c, Event_Fee_Allocation_Override__c, + Instance_Start_Date__c, Instance_Start_Time__c, Instance_End_Date__c, Instance_End_Time__c, Instance_Time_Zone__c, Registration_Close_Date__c, + Registration_Close_Time__c, Event__r.Event_Home_Link_URL__c + FROM Summit_Events_Instance__c + WHERE Id = :instanceId + WITH SECURITY_ENFORCED + ]; + } + + public static Summit_Events__c getEventById(Id eventId) { + return [ + SELECT Name, Id, Event_Name__c, Event_description__c, Event_Footer__c, Event_Full_Text__c, Audience__c, Include_Time_frame_List__c, + Max_Other_Attendees__c, Allow_Other_Attendees__c, College_High_School_Ask__c, Ask_Gender__c, Template__c, + Event_Home_Link_Title__c, Event_Home_Link_URL__c, Ask_If_Parent__c, Ask_Registrant_Program_Of_Interest__c, + Add_Info_Question_Pick_List_1__c, Add_Info_Question_Text_1__c, Add_Info_Question_Type_1__c, + Add_Info_Question_Pick_List_2__c, Add_Info_Question_Text_2__c, Add_Info_Question_Type_2__c, + Add_Info_Question_Pick_List_3__c, Add_Info_Question_Text_3__c, Add_Info_Question_Type_3__c, + Add_Info_Question_Pick_List_4__c, Add_Info_Question_Text_4__c, Add_Info_Question_Type_4__c, + Add_Info_Question_Pick_List_5__c, Add_Info_Question_Text_5__c, Add_Info_Question_Type_5__c, + Academic_Program_List__c, Ask_Mailing_Address__c, Ask_Phone__c, Event_Sponsor__c, Ask_Relationship_To_Institution__c, + Ask_Last_Name_As_Student__c, Ask_Preferred_Class_Year__c, Ask_Preferred_First_Name__c, + Ask_Applicant_Type__c, Location_Type__c, Location_Title__c, Location_Address__c, Location_Map_Link__c, + Tracking_Event_Registration__c, Ask_Date_Of_Birth__c, Event_Type__c, Contact_Creation__c, Contact_Matching_Rules__c, + Ask_Third_Party_Registrant__c, Registration_Email_Restriction__c, Ask_Pronoun__c, Keep_Registration_Open_During_Event__c, + Close_Event_Days_Before__c, Ask_Title__c, Ask_Company_Organization__c, Event_Fee__c, Event_Fee_Additional__c, + Event_Fee_Additional_Allocation__c, Event_Fee_Allocation__c, Display_Optional_Donation__c, + Applicant_Type_Label__c, Company_Organization_Label__c, Date_Of_Birth_Label__c, Email_Label__c, + First_Name_Label__c, Gender_Label__c, Last_Name_As_Student_Label__c, Last_Name_Label__c, Mailing_Address_Label__c, + Phone_Label__c, Phone_Type_Label__c, Preferred_First_Name_Label__c, Pronouns_Label__c, Registrant_Receive_Texts_Label__c, + Relationship_To_Institution_Label__c, Third_Party_Registrant_Label__c, Title_Label__c, Preferred_Class_Year_Label__c, + Registrant_Relationship_Label__c, Event_Fee_Label__c, Event_Fee_Total_Label__c, Event_Fee_Submit_List_Label__c, Account__r.Name, + Filter_Category__c, Do_not_show_receive_text_question__c, Add_Info_Question_Pick_List_Long_1__c, Add_Info_Question_Pick_List_Long_2__c, + Add_Info_Question_Pick_List_Long_3__c, Add_Info_Question_Pick_List_Long_4__c, Add_Info_Question_Pick_List_Long_5__c, Event_Status__c, + reCAPTCHA_v3_Score_Fail_Text__c, reCAPTCHA__c, Ask_Dietary_Restrictions__c, Dietary_Restrictions_Label__c, Accessibility_Detail_Label__c, + Accessibility_Label__c, Ask_Accessibility_Needs__c, Display_Guest_Registration__c, Payment_Gateway__c + FROM Summit_Events__c + WHERE Id = :eventId + WITH SECURITY_ENFORCED + ]; + } + + public static Summit_Events_Registration__c getRegistrationById(Id registrationId) { + return [ + SELECT Registrant_First_Name__c, Registrant_Last_Name__c, Registrant_Email__c, Number_of_Guests__c, Registrant_Applicant_Type__c, + Registrant_Gender__c, Registrant_Street_1__c, Registrant_Street_2__c, Registrant_State__c, Registrant_City__c, Preferred_Visit_Time__c, + Registrant_Zip__c, Registrant_Phone__c, Registrant_Mobile_Phone__c, Registrant_College__c, Registrant_College_Code__c, Registrant_College_Year__c, + Registrant_High_School__c, Registrant_High_School_Code__c, Registrant_Receive_Texts__c, Registrant_High_School_Grad_Year__c, Registrant_High_School_Not_Found__c, + Registrant_College_Not_Found__c, Registrant_Parent_First_Name__c, Registrant_Parent_Last_Name__c, Registrant_Parent_Email__c, Registrant_Parent_Phone__c, + Add_Info_Answer_1__c, Add_Info_Answer_2__c, Add_Info_Answer_3__c, Add_Info_Answer_4__c, Add_Info_Answer_5__c, Registrant_Program_Interest__c, Registrant_Preferred_First_Name__c, + Registrant_Date_of_Birth__c, Last_Name_as_Student__c, Preferred_Class_Year__c, Relationship_To_Institution__c, Registrant_Other_Email__c, Registrant_Other_First_Name__c, Registrant_Other_Last_Name__c, + Registrant_Other_Phone__c, Registrant_Other_Relationship__c, Registrant_Country__c, Registrant_State_Province__c, Registrant_Postal_Code__c, Registrant_Third_Party_Status__c, + Registrant_Pronouns__c, Registrant_Title__c, Registrant_Company_Organization__c, Event_Website__c, Event_Website_Referrer__c, gclid__c, utm_campaign__c, utm_content__c, + utm_creative_format__c, utm_id__c, utm_marketing_tactic__c, utm_medium__c, utm_source__c, utm_source_platform__c, utm_term__c, Dietary_Ristrictions__c, + Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c + FROM Summit_Events_Registration__c + WHERE Id = :registrationId + WITH SECURITY_ENFORCED + ]; + } + + public static Integer getAppointmentTypeCount(Id eventId, String instanceTitle, Date startDate, Date endDate, String dayOfWeek) { + return [ + SELECT COUNT() + FROM Summit_Events_Appointment_Type__c + WHERE Summit_Events__c = :eventId + AND ( + Chosen_State__c = 'Added' + OR (Chosen_State__c = 'Added and Required' AND Auto_Confirm_Appointment__c = FALSE) + OR Chosen_State__c = NULL + ) + AND ( + Restrict_To_Instance_Title__r.Instance_Title__c = :instanceTitle + OR Restrict_To_Instance_Title__r.Instance_Title__c = NULL) + AND (Date_Available_Start__c <= :startDate OR Date_Available_Start__c = NULL) + AND (Date_Available_End__c >= :endDate OR Date_Available_End__c = NULL) + AND (Day_of_Week_Availability__c INCLUDES (:dayOfWeek) OR Day_of_Week_Availability__c = NULL) + AND (Appointment_Type_Status__c = 'Active' OR Appointment_Type_Status__c = NULL) + WITH SECURITY_ENFORCED + ]; + } + + public static Integer getAdditionalQuestionsCount(Id eventId) { + return [ + SELECT COUNT() + FROM Summit_Events_Question__c + WHERE Event__c = :eventId + AND (Registrant_Type__c = 'Registrant' OR Registrant_Type__c = 'Registrant and Guest') + WITH SECURITY_ENFORCED + ]; + } + + public static Integer getGuestQuestionsCount(Id eventId) { + return [ + SELECT COUNT() + FROM Summit_Events_Question__c + WHERE Event__c = :eventId + AND (Registrant_Type__c = 'Guest' OR Registrant_Type__c = 'Registrant and Guest') + WITH SECURITY_ENFORCED + ]; + } + +} \ No newline at end of file diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls-meta.xml b/force-app/main/default/classes/SummitEventsReadShared.cls-meta.xml new file mode 100644 index 00000000..651b1729 --- /dev/null +++ b/force-app/main/default/classes/SummitEventsReadShared.cls-meta.xml @@ -0,0 +1,5 @@ + + + 61.0 + Active + diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 998dc96a..9b58d059 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -66,7 +66,7 @@ public with sharing class SummitEventsRegisterController { //Create event registration. Populate with current registration if it exists with removed id eventRegistration = new Summit_Events_Registration__c(); if (String.isNotBlank(eventInformation.registrationId)) { - eventRegistration = getEventRegistration(eventInformation.registrationId); + eventRegistration = SummitEventsReadShared.getRegistrationById(eventInformation.registrationId); if (eventRegistration != null) { incomingEventRegistrationId = eventRegistration.Id; eventRegistration.Id = null; @@ -103,17 +103,8 @@ public with sharing class SummitEventsRegisterController { //Get Instance information if (String.isNotBlank(eventInformation.instanceId)) { - evtInstance = [ - SELECT Id, Name, Event__r.Name, Event__r.Event_Name__c, Event__r.Id, Instance_Title__c, Active_Status__c, Capacity__c, - Event__r.Event_description__c, Event__r.Audience__c, Current_Available_Capacity__c, - Location_Type_Override__c, Location_Address_Override__c, Event__r.Close_Event_Days_Before__c, Location_Map_Link_Override__c, Location_Title_Override__c, - Event_Fee_Additional_Allocation_Override__c, Event_Fee_Additional_Override__c, Event_Fee_Override__c, Event_Fee_Allocation_Override__c, - Instance_Start_Date__c, Instance_Start_Time__c, Instance_End_Date__c, Instance_End_Time__c, Instance_Time_Zone__c, Registration_Close_Date__c, Registration_Close_Time__c - FROM Summit_Events_Instance__c - WHERE Id = :eventInformation.instanceId - WITH SECURITY_ENFORCED - ]; + evtInstance = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); //define Event ID from instanceInfo data eventInformation.eventId = evtInstance.Event__r.Id; startTimeString = SummitEventsShared.formatTime(evtInstance.Instance_Start_Time__c, false); @@ -122,36 +113,7 @@ public with sharing class SummitEventsRegisterController { //Get Event Info off of instance master detail id if (!String.isBlank(eventInformation.eventId)) { - eventPage = [ - SELECT Name, Id, Event_Name__c, Event_description__c, Event_Footer__c, Event_Full_Text__c, Audience__c, Include_Time_frame_List__c, - Max_Other_Attendees__c, Allow_Other_Attendees__c, College_High_School_Ask__c, Ask_Gender__c, Template__c, - Event_Home_Link_Title__c, Event_Home_Link_URL__c, Ask_If_Parent__c, Ask_Registrant_Program_Of_Interest__c, - Add_Info_Question_Pick_List_1__c, Add_Info_Question_Text_1__c, Add_Info_Question_Type_1__c, - Add_Info_Question_Pick_List_2__c, Add_Info_Question_Text_2__c, Add_Info_Question_Type_2__c, - Add_Info_Question_Pick_List_3__c, Add_Info_Question_Text_3__c, Add_Info_Question_Type_3__c, - Add_Info_Question_Pick_List_4__c, Add_Info_Question_Text_4__c, Add_Info_Question_Type_4__c, - Add_Info_Question_Pick_List_5__c, Add_Info_Question_Text_5__c, Add_Info_Question_Type_5__c, - Academic_Program_List__c, Ask_Mailing_Address__c, Ask_Phone__c, Event_Sponsor__c, Ask_Relationship_To_Institution__c, - Ask_Last_Name_As_Student__c, Ask_Preferred_Class_Year__c, Ask_Preferred_First_Name__c, - Ask_Applicant_Type__c, Location_Type__c, Location_Title__c, Location_Address__c, Location_Map_Link__c, - Tracking_Event_Registration__c, Ask_Date_Of_Birth__c, Event_Type__c, Contact_Creation__c, Contact_Matching_Rules__c, - Ask_Third_Party_Registrant__c, Registration_Email_Restriction__c, Ask_Pronoun__c, Keep_Registration_Open_During_Event__c, - Close_Event_Days_Before__c, Ask_Title__c, Ask_Company_Organization__c, Event_Fee__c, Event_Fee_Additional__c, - Event_Fee_Additional_Allocation__c, Event_Fee_Allocation__c, Display_Optional_Donation__c, - Applicant_Type_Label__c, Company_Organization_Label__c, Date_Of_Birth_Label__c, Email_Label__c, - First_Name_Label__c, Gender_Label__c, Last_Name_As_Student_Label__c, Last_Name_Label__c, Mailing_Address_Label__c, - Phone_Label__c, Phone_Type_Label__c, Preferred_First_Name_Label__c, Pronouns_Label__c, Registrant_Receive_Texts_Label__c, - Relationship_To_Institution_Label__c, Third_Party_Registrant_Label__c, Title_Label__c, Preferred_Class_Year_Label__c, - Registrant_Relationship_Label__c, Event_Fee_Label__c, Event_Fee_Total_Label__c, Event_Fee_Submit_List_Label__c, Account__r.Name, - Filter_Category__c, Do_not_show_receive_text_question__c, Add_Info_Question_Pick_List_Long_1__c, Add_Info_Question_Pick_List_Long_2__c, - Add_Info_Question_Pick_List_Long_3__c, Add_Info_Question_Pick_List_Long_4__c, Add_Info_Question_Pick_List_Long_5__c, Event_Status__c, - reCAPTCHA_v3_Score_Fail_Text__c, reCAPTCHA__c, Ask_Dietary_Restrictions__c, Dietary_Restrictions_Label__c, Accessibility_Detail_Label__c, - Accessibility_Label__c, Ask_Accessibility_Needs__c - FROM Summit_Events__c - WHERE Id = :eventInformation.eventId - WITH SECURITY_ENFORCED - ]; - + eventPage = SummitEventsReadShared.getEventById(eventInformation.eventId); recaptcha = new recaptchaInfo(); recaptcha.version = 0; if (String.isNotBlank(eventPage.reCAPTCHA__c)) { @@ -358,29 +320,6 @@ public with sharing class SummitEventsRegisterController { } } - public Summit_Events_Registration__c getEventRegistration(Id eventRegistrationId) { - Summit_Events_Registration__c oldEventRegistration = [ - SELECT Registrant_First_Name__c, Registrant_Last_Name__c, Registrant_Email__c, Number_of_Guests__c, Registrant_Applicant_Type__c, - Registrant_Gender__c, Registrant_Street_1__c, Registrant_Street_2__c, Registrant_State__c, Registrant_City__c, Preferred_Visit_Time__c, - Registrant_Zip__c, Registrant_Phone__c, Registrant_Mobile_Phone__c, Registrant_College__c, Registrant_College_Code__c, Registrant_College_Year__c, - Registrant_High_School__c, Registrant_High_School_Code__c, Registrant_Receive_Texts__c, Registrant_High_School_Grad_Year__c, Registrant_High_School_Not_Found__c, - Registrant_College_Not_Found__c, Registrant_Parent_First_Name__c, Registrant_Parent_Last_Name__c, Registrant_Parent_Email__c, Registrant_Parent_Phone__c, - Add_Info_Answer_1__c, Add_Info_Answer_2__c, Add_Info_Answer_3__c, Add_Info_Answer_4__c, Add_Info_Answer_5__c, Registrant_Program_Interest__c, Registrant_Preferred_First_Name__c, - Registrant_Date_of_Birth__c, Last_Name_as_Student__c, Preferred_Class_Year__c, Relationship_To_Institution__c, Registrant_Other_Email__c, Registrant_Other_First_Name__c, Registrant_Other_Last_Name__c, - Registrant_Other_Phone__c, Registrant_Other_Relationship__c, Registrant_Country__c, Registrant_State_Province__c, Registrant_Postal_Code__c, Registrant_Third_Party_Status__c, - Registrant_Pronouns__c, Registrant_Title__c, Registrant_Company_Organization__c, Event_Website__c, Event_Website_Referrer__c, gclid__c, utm_campaign__c, utm_content__c, - utm_creative_format__c, utm_id__c, utm_marketing_tactic__c, utm_medium__c, utm_source__c, utm_source_platform__c, utm_term__c, Dietary_Ristrictions__c, - Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c - FROM Summit_Events_Registration__c - WHERE Id = :eventRegistrationId - WITH SECURITY_ENFORCED - ]; - if (oldEventRegistration != null) { - return oldEventRegistration; - } - return new Summit_Events_Registration__c(); - } - public PageReference checkEventDetails() { //Check if recaptcha is ste up correctly if (String.isNotBlank(eventPage.reCAPTCHA__c)) { diff --git a/force-app/main/default/classes/SummitEventsShared.cls b/force-app/main/default/classes/SummitEventsShared.cls index 752cb5b8..d5aa5aff 100644 --- a/force-app/main/default/classes/SummitEventsShared.cls +++ b/force-app/main/default/classes/SummitEventsShared.cls @@ -32,7 +32,6 @@ public with sharing class SummitEventsShared { currentUrl = currentUrl.replace('#', '?'); List currentUrlSplit = currentUrl.split('\\?'); currentUrl = currentUrlSplit[0]; - currentUrlSplit = currentUrl.split('/'); String currentPageName = currentUrlSplit[currentUrlSplit.size() - 1]; @@ -40,47 +39,13 @@ public with sharing class SummitEventsShared { String dayOfWeek = convertDateToDatetime(startDate, null, '').format('EEEE'); - Integer appointmentTypes = [ - SELECT COUNT() - FROM Summit_Events_Appointment_Type__c - WHERE Summit_Events__c = :eventId - AND ( - Chosen_State__c = 'Added' - OR (Chosen_State__c = 'Added and Required' AND Auto_Confirm_Appointment__c = FALSE) - OR Chosen_State__c = NULL - ) - AND ( - Restrict_To_Instance_Title__r.Instance_Title__c = :instanceTitle - OR Restrict_To_Instance_Title__r.Instance_Title__c = NULL) - AND (Date_Available_Start__c <= :startDate OR Date_Available_Start__c = NULL) - AND (Date_Available_End__c >= :endDate OR Date_Available_End__c = NULL) - AND (Day_of_Week_Availability__c INCLUDES (:dayOfWeek) OR Day_of_Week_Availability__c = NULL) - AND (Appointment_Type_Status__c = 'Active' OR Appointment_Type_Status__c = NULL) - WITH SECURITY_ENFORCED - ]; - - Integer additionalQuestions = [ - SELECT COUNT() - FROM Summit_Events_Question__c - WHERE Event__c = :eventId - AND (Registrant_Type__c = 'Registrant' OR Registrant_Type__c = 'Registrant and Guest') - WITH SECURITY_ENFORCED - ]; - - Integer guestQuestions = [ - SELECT COUNT() - FROM Summit_Events_Question__c - WHERE Event__c = :eventId - AND (Registrant_Type__c = 'Guest' OR Registrant_Type__c = 'Registrant and Guest') - WITH SECURITY_ENFORCED - ]; - - Summit_Events__c eventInformation = [ - SELECT Id, Display_Optional_Donation__c, Display_Guest_Registration__c, Payment_Gateway__c - FROM Summit_Events__c - WHERE Id = :eventId - WITH SECURITY_ENFORCED - ]; + Integer appointmentTypes = SummitEventsReadShared.getAppointmentTypeCount(eventId, instanceTitle, startDate, endDate, dayOfWeek); + + Integer additionalQuestions = SummitEventsReadShared.getAdditionalQuestionsCount(eventId); + + Integer guestQuestions = SummitEventsReadShared.getGuestQuestionsCount(eventId); + + Summit_Events__c eventInformation = SummitEventsReadShared.getEventById(eventId); Map pageMovement = new Map(); Map currentPageParameters = currentPage.getParameters(); @@ -230,12 +195,8 @@ public with sharing class SummitEventsShared { } if (String.isBlank(eventInformation.eventId) && String.isNotBlank(eventInformation.instanceId)) { - Summit_Events_Instance__c instanceInfo = [ - SELECT Id, Event__c - FROM Summit_Events_Instance__c - WHERE Id = :eventInformation.instanceId - WITH SECURITY_ENFORCED - ]; + Summit_Events_Instance__c instanceInfo = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); + if (instanceInfo != null) { eventInformation.eventId = instanceInfo.Event__c; } @@ -274,12 +235,7 @@ public with sharing class SummitEventsShared { } if (String.isNotBlank(newInstanceId)) { - Summit_Events_Instance__c eventPage = [ - SELECT Event__r.Event_Home_Link_URL__c - FROM Summit_Events_Instance__c - WHERE Id = :newInstanceId - WITH SECURITY_ENFORCED - ]; + Summit_Events_Instance__c eventPage = SummitEventsReadShared.getInstanceById(newInstanceId); if (eventPage != null) { eventHomeLink = eventPage.Event__r.Event_Home_Link_URL__c; } From 163bca4ced21c4577f7e655ef2c37ca2fb3db9e0 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 11:59:44 -0500 Subject: [PATCH 43/81] updated add question page with read shared queries --- .../SummitEventsAdditionalQuestionsCtlr.cls | 47 +++++-------------- .../classes/SummitEventsContactMatching.cls | 2 +- .../classes/SummitEventsReadShared.cls | 18 ++++++- .../default/classes/SummitEventsShared.cls | 4 +- 4 files changed, 32 insertions(+), 39 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls index 3c563988..56caf66e 100644 --- a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls +++ b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls @@ -63,28 +63,10 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { //eventInformation is an object gathered from the encrypted client cookie that contains event id and instance ids without which thou shall not pass if (String.isNotBlank(eventInformation.eventId) && String.isNotBlank(eventInformation.instanceId)) { - eventPage = [ - SELECT Name, Id, Event_Name__c, Event_description__c, Event_Footer__c, Event_Full_Text__c, Event_Home_Link_URL__c, Event_Home_Link_Title__c, - Template__c, Close_Event_Days_Before__c, Keep_Registration_Open_During_Event__c, Event_Additional_Question_Title__c, Event_Additional_Questions_Description__c, - Account__r.Name, Audience__c, Filter_Category__c, Event_Sponsor__c, Event_Status__c - FROM Summit_Events__c - WHERE Id = :eventInformation.eventId - WITH SECURITY_ENFORCED - ]; - - eventInstance = [ - SELECT Id, Name, Event__r.Name, Event__r.Event_Name__c, Event__r.Id, Instance_Title__c, Active_Status__c, Capacity__c, - Event__r.Event_description__c, Event__r.Audience__c, Current_Available_Capacity__c, - Location_Type_Override__c, Location_Address_Override__c, Event__r.Close_Event_Days_Before__c, Location_Map_Link_Override__c, Location_Title_Override__c, - Event_Fee_Additional_Allocation_Override__c, Event_Fee_Additional_Override__c, Event_Fee_Override__c, Event_Fee_Allocation_Override__c, - Instance_Start_Date__c, Instance_Start_Time__c, Instance_End_Date__c, Instance_End_Time__c, Instance_Time_Zone__c, - Registration_Close_Date__c, Registration_Close_Time__c - FROM Summit_Events_Instance__c - WHERE Id = :eventInformation.instanceId - WITH SECURITY_ENFORCED - ]; - + eventPage = SummitEventsReadShared.getEventById(eventInformation.eventId); + eventInstance = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); templateSelected = SummitEventsShared.getTemplate(eventPage.Template__c); + pageFlow = SummitEventsShared.getPageFlow(eventInformation.eventId, eventInstance.Instance_Title__c, ApexPages.currentPage(), eventInstance.Instance_Start_Date__c, eventInstance.Instance_End_Date__c); nextUrl = pageFlow.get('Next').getUrl().toLowerCase(); formattedNavDate = SummitEventsShared.navBreadcrumbBuilder(eventInstance); @@ -95,18 +77,7 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { eventIsClosed = SummitEventsShared.isEventClosed(eventInstance, eventPage.Event_Status__c); //Get the question object questions - additionalQuestions = [ - SELECT Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, - Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c, Error_Assist_Text__c, - Lookup_Object__c, Lookup_Fields__c, Lookup_Where_Clause__c, Lookup_No_Results_Label__c, Lookup_Secondary_Input_Link_Text__c, Lookup_Secondary_Value_Field__c, - Lookup_Secondary_Input_Instructions__c, Lookup_Results_Icon__c, Existing_Picklist_Values__c, Display_Style__c, Picklist_Values_Long__c, - Lookup_Order_By__c - FROM Summit_Events_Question__c - WHERE Event__c = :eventInformation.eventId - AND (Registrant_Type__c = 'Registrant' OR Registrant_Type__c = 'Registrant and Guest') - WITH SECURITY_ENFORCED - ORDER BY Display_Order__c NULLS LAST - ]; + additionalQuestions = SummitEventsReadShared.getAdditionalQuestionsByEventId(eventInformation.eventId); //Get namespace if packaged String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); @@ -324,7 +295,7 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { String regQuery = ''; if (mapToList.size() > 0) { regQuery += 'SELECT '; - regQuery += String.join(mapToList, ','); + regQuery += String.escapeSingleQuotes(String.join(mapToList, ',')); regQuery = regQuery.trim(); regQuery = regQuery.removeEndIgnoreCase(','); regQuery += ' FROM Summit_Events_Registration__c '; @@ -332,8 +303,9 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { } if (String.isNotBlank(regQuery)) { + doCRUD CRUDToDo = new doCRUD(); try { - eventRegistration = Database.query(regQuery); + eventRegistration = CRUDToDo.getRegistrationQuery(regQuery); } catch (Exception e) { ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.WARNING, e.getMessage())); } @@ -600,6 +572,11 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { update eventRegistration; } + public Summit_Events_Registration__c getRegistrationQuery(String regQuery) { + Summit_Events_Registration__c reg = Database.query(regQuery); + return reg; + } + } } \ No newline at end of file diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index 1da839ef..dbb49750 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -3,7 +3,7 @@ // License can be found found in the LICENSE file in this repository. // Created by Thaddaeus Dahlberg on 2/27/2019. -public with sharing class SummitEventsContactMatching { +public without sharing class SummitEventsContactMatching { public static void matchContacts(List newRegistrations) { diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index 4e51239d..864fd306 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -42,7 +42,8 @@ public without sharing class SummitEventsReadShared { Filter_Category__c, Do_not_show_receive_text_question__c, Add_Info_Question_Pick_List_Long_1__c, Add_Info_Question_Pick_List_Long_2__c, Add_Info_Question_Pick_List_Long_3__c, Add_Info_Question_Pick_List_Long_4__c, Add_Info_Question_Pick_List_Long_5__c, Event_Status__c, reCAPTCHA_v3_Score_Fail_Text__c, reCAPTCHA__c, Ask_Dietary_Restrictions__c, Dietary_Restrictions_Label__c, Accessibility_Detail_Label__c, - Accessibility_Label__c, Ask_Accessibility_Needs__c, Display_Guest_Registration__c, Payment_Gateway__c + Accessibility_Label__c, Ask_Accessibility_Needs__c, Display_Guest_Registration__c, Payment_Gateway__c, Event_Additional_Question_Title__c, + Event_Additional_Questions_Description__c FROM Summit_Events__c WHERE Id = :eventId WITH SECURITY_ENFORCED @@ -68,6 +69,21 @@ public without sharing class SummitEventsReadShared { ]; } + public static List getAdditionalQuestionsByEventId(Id eventId) { + return [ + SELECT Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, + Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c, Error_Assist_Text__c, + Lookup_Object__c, Lookup_Fields__c, Lookup_Where_Clause__c, Lookup_No_Results_Label__c, Lookup_Secondary_Input_Link_Text__c, Lookup_Secondary_Value_Field__c, + Lookup_Secondary_Input_Instructions__c, Lookup_Results_Icon__c, Existing_Picklist_Values__c, Display_Style__c, Picklist_Values_Long__c, + Lookup_Order_By__c + FROM Summit_Events_Question__c + WHERE Event__c = :eventId + AND (Registrant_Type__c = 'Registrant' OR Registrant_Type__c = 'Registrant and Guest') + WITH SECURITY_ENFORCED + ORDER BY Display_Order__c NULLS LAST + ]; + } + public static Integer getAppointmentTypeCount(Id eventId, String instanceTitle, Date startDate, Date endDate, String dayOfWeek) { return [ SELECT COUNT() diff --git a/force-app/main/default/classes/SummitEventsShared.cls b/force-app/main/default/classes/SummitEventsShared.cls index d5aa5aff..11286ef1 100644 --- a/force-app/main/default/classes/SummitEventsShared.cls +++ b/force-app/main/default/classes/SummitEventsShared.cls @@ -608,11 +608,11 @@ public with sharing class SummitEventsShared { returnError += qualifierLabel + 'Field ' + fieldName + ' is not accessible by guest user.'; } } - if (String.isBlank(returnError) && testCreatable) { +/* if (String.isBlank(returnError) && testCreatable) { if (!fieldDescribe.isCreateable()) { returnError += qualifierLabel + 'Field ' + fieldName + ' is not writable. '; } - } + }*/ if (String.isBlank(returnError) && String.isNotBlank(requiredFieldType)) { if (!String.valueOf(fieldDescribe.getType()).equalsIgnoreCase(requiredFieldType)) { returnError += qualifierLabel + 'Field ' + fieldName + ' is not the required field type ' + requiredFieldType + '. '; From e48265839de6aa3cb17d5e6c5e89e631dc926109 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 12:39:02 -0500 Subject: [PATCH 44/81] updated quest reg page with shared queries --- .../SummitEventsAdditionalQuestionsCtlr.cls | 3 +- .../classes/SummitEventsReadShared.cls | 13 +++-- .../SummitEventsRegisterGuestsController.cls | 54 ++++++------------- 3 files changed, 27 insertions(+), 43 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls index 56caf66e..f2ec2703 100644 --- a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls +++ b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls @@ -77,7 +77,8 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { eventIsClosed = SummitEventsShared.isEventClosed(eventInstance, eventPage.Event_Status__c); //Get the question object questions - additionalQuestions = SummitEventsReadShared.getAdditionalQuestionsByEventId(eventInformation.eventId); + List registrantTypes = new List{'Registrant', 'Registrant and Guest'}; + additionalQuestions = SummitEventsReadShared.getAdditionalQuestionsByEventId(eventInformation.eventId, registrantTypes); //Get namespace if packaged String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index 864fd306..a67ed17e 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -43,7 +43,10 @@ public without sharing class SummitEventsReadShared { Add_Info_Question_Pick_List_Long_3__c, Add_Info_Question_Pick_List_Long_4__c, Add_Info_Question_Pick_List_Long_5__c, Event_Status__c, reCAPTCHA_v3_Score_Fail_Text__c, reCAPTCHA__c, Ask_Dietary_Restrictions__c, Dietary_Restrictions_Label__c, Accessibility_Detail_Label__c, Accessibility_Label__c, Ask_Accessibility_Needs__c, Display_Guest_Registration__c, Payment_Gateway__c, Event_Additional_Question_Title__c, - Event_Additional_Questions_Description__c + Event_Additional_Questions_Description__c, Event_Submit_Title__c, Event_Submit_Description__c, Tracking_Submit_Registration__c, + Guest_Registration_Title__c, Guest_Max_Amount__c, Guest_Registration_Description__c, Guest_Table_Size__c, Guest_Tables_Available__c, + Guest_Registration_Add_Button_Label__c, No_Guest_Registrations_Added_Message__c, Guest_Unsaved_Cancel_Label__c, Guest_Unsaved_Continue_Label__c, + Guest_Unsaved_Modal_Text__c FROM Summit_Events__c WHERE Id = :eventId WITH SECURITY_ENFORCED @@ -62,23 +65,23 @@ public without sharing class SummitEventsReadShared { Registrant_Other_Phone__c, Registrant_Other_Relationship__c, Registrant_Country__c, Registrant_State_Province__c, Registrant_Postal_Code__c, Registrant_Third_Party_Status__c, Registrant_Pronouns__c, Registrant_Title__c, Registrant_Company_Organization__c, Event_Website__c, Event_Website_Referrer__c, gclid__c, utm_campaign__c, utm_content__c, utm_creative_format__c, utm_id__c, utm_marketing_tactic__c, utm_medium__c, utm_source__c, utm_source_platform__c, utm_term__c, Dietary_Ristrictions__c, - Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c + Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c, Guest_JSON__c FROM Summit_Events_Registration__c WHERE Id = :registrationId WITH SECURITY_ENFORCED ]; } - public static List getAdditionalQuestionsByEventId(Id eventId) { + public static List getAdditionalQuestionsByEventId(Id eventId, List registrantTypes) { return [ - SELECT Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, + SELECT Id, Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c, Error_Assist_Text__c, Lookup_Object__c, Lookup_Fields__c, Lookup_Where_Clause__c, Lookup_No_Results_Label__c, Lookup_Secondary_Input_Link_Text__c, Lookup_Secondary_Value_Field__c, Lookup_Secondary_Input_Instructions__c, Lookup_Results_Icon__c, Existing_Picklist_Values__c, Display_Style__c, Picklist_Values_Long__c, Lookup_Order_By__c FROM Summit_Events_Question__c WHERE Event__c = :eventId - AND (Registrant_Type__c = 'Registrant' OR Registrant_Type__c = 'Registrant and Guest') + AND Registrant_Type__c IN :registrantTypes WITH SECURITY_ENFORCED ORDER BY Display_Order__c NULLS LAST ]; diff --git a/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls b/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls index bc67a91a..b436c378 100644 --- a/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls @@ -52,36 +52,21 @@ public with sharing class SummitEventsRegisterGuestsController { String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); if (String.isNotBlank(eventInformation.eventId) && String.isNotBlank(eventInformation.instanceId)) { - eventPage = [ - SELECT Event_Name__c, Event_Submit_Title__c, Event_Submit_Description__c, Event_Footer__c, Template__c, Event_Home_Link_Title__c, Event_Home_Link_URL__c, - Tracking_Submit_Registration__c, Event_Full_Text__c, Close_Event_Days_Before__c, Keep_Registration_Open_During_Event__c, - Guest_Registration_Title__c, Guest_Max_Amount__c, Guest_Registration_Description__c, Guest_Table_Size__c, Guest_Tables_Available__c, - Display_Guest_Registration__c, Guest_Registration_Add_Button_Label__c, No_Guest_Registrations_Added_Message__c, - Account__r.Name, Audience__c, Filter_Category__c, Event_Sponsor__c, Guest_Unsaved_Cancel_Label__c, Guest_Unsaved_Continue_Label__c, - Guest_Unsaved_Modal_Text__c, Event_Status__c - FROM Summit_Events__c - WHERE Id = :eventInformation.eventId - WITH SECURITY_ENFORCED - ]; - - eventInstance = [ - SELECT Id, Instance_Title__c, Instance_Start_Date__c, Instance_End_Date__c, Instance_Start_Time__c, Instance_End_Time__c, Instance_Time_Zone__c, - Current_Available_Capacity__c, Active_Status__c, Event__r.Event_Name__c, Registration_Close_Date__c, Registration_Close_Time__c - FROM Summit_Events_Instance__c - WHERE Id = :eventInformation.instanceId - WITH SECURITY_ENFORCED - ]; - - eventGuestQuestions = new Map([ - SELECT Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, - Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c, Error_Assist_Text__c, - Existing_Picklist_Values__c, Picklist_Values_Long__c - FROM Summit_Events_Question__c - WHERE Event__c = :eventInformation.eventId - AND (Registrant_Type__c = 'Guest' OR Registrant_Type__c = 'Registrant and Guest') - WITH SECURITY_ENFORCED - ORDER BY Display_Order__c NULLS LAST - ]); + + eventPage = SummitEventsReadShared.getEventById(eventInformation.eventId); + + eventInstance = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); + + List registrantTypes = new List{'Guest', 'Registrant and Guest'}; + List summitEventsQuestions = SummitEventsReadShared.getAdditionalQuestionsByEventId(eventInformation.eventId, registrantTypes); + + //Convert summitEventsQuestions to a map id, summit_events_question__c + eventGuestQuestions = new Map(); + for (Summit_Events_Question__c question : summitEventsQuestions) { + if (question.Registrant_Type__c == 'Guest' || question.Registrant_Type__c == 'Registrant and Guest') { + eventGuestQuestions.put(question.Id, question); + } + } List questionList = new List(); hiddenQuestions = new List(); @@ -123,12 +108,7 @@ public with sharing class SummitEventsRegisterGuestsController { guestQuestionJSON = JSON.serialize(questionList); - eventRegistration = [ - SELECT Id, Guest_JSON__c - FROM Summit_Events_Registration__c - WHERE Id = :eventInformation.registrationId - WITH SECURITY_ENFORCED - ]; + eventRegistration = SummitEventsReadShared.getRegistrationById(eventInformation.registrationId); guestJSON = eventRegistration.Guest_JSON__c; @@ -255,7 +235,7 @@ public with sharing class SummitEventsRegisterGuestsController { eventRegistration.Id = oldRegId; eventRegistration.Guest_JSON__c = jsonOut; try { - upsert eventRegistration; + update eventRegistration; } catch (Exception e) { System.debug(e.getMessage()); } From 9da0052f6c3a136504b0be0e9e8e62f2b01e52da Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 12:45:32 -0500 Subject: [PATCH 45/81] updated donation page with shared queries --- .../SummitEventsDonationController.cls | 29 +++---------------- .../classes/SummitEventsReadShared.cls | 14 ++++++++- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsDonationController.cls b/force-app/main/default/classes/SummitEventsDonationController.cls index d4aa8f5a..b1ba86c6 100644 --- a/force-app/main/default/classes/SummitEventsDonationController.cls +++ b/force-app/main/default/classes/SummitEventsDonationController.cls @@ -22,37 +22,16 @@ public with sharing class SummitEventsDonationController { if (String.isNotBlank(eventInformation.eventId) && String.isNotBlank(eventInformation.instanceId)) { - eventPage = [ - SELECT Event_Name__c, Event_Submit_Title__c, Event_Submit_Description__c, Event_Footer__c, Template__c, Event_Home_Link_Title__c, Event_Home_Link_URL__c, - Tracking_Submit_Registration__c, Event_Full_Text__c, Close_Event_Days_Before__c, Keep_Registration_Open_During_Event__c, Donation_Suggested_Amount_List__c, - Donation_Description__c, Display_Optional_Donation__c, Donation_Allocation_1__c, Donation_Allocation_2__c, Donation_Allocation_3__c, Donation_Allocation_4__c, - Donation_Allocation_5__c, Donation_Allocation_1__r.Name, Donation_Allocation_2__r.Name, Donation_Allocation_3__r.Name, Donation_Allocation_4__r.Name, - Donation_Allocation_5__r.Name, Donation_Title__c, Account__r.Name, Audience__c, Filter_Category__c, Event_Sponsor__c, Event_Status__c - FROM Summit_Events__c - WHERE Id = :eventInformation.eventId - WITH SECURITY_ENFORCED - ]; - - eventInstance = [ - SELECT Id, Instance_Title__c, Instance_Start_Date__c, Instance_End_Date__c, Instance_Start_Time__c, Instance_End_Time__c, Instance_Time_Zone__c, - Current_Available_Capacity__c, Active_Status__c, Event__r.Event_Name__c, Registration_Close_Date__c, Registration_Close_Time__c - FROM Summit_Events_Instance__c - WHERE Id = :eventInformation.instanceId - WITH SECURITY_ENFORCED - ]; + eventPage = SummitEventsReadShared.getEventById(eventInformation.eventId); + + eventInstance = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); pageFlow = SummitEventsShared.getPageFlow(eventInformation.eventId, eventInstance.Instance_Title__c, ApexPages.currentPage(), eventInstance.Instance_Start_Date__c, eventInstance.Instance_End_Date__c); templateSelected = SummitEventsShared.getTemplate(eventPage.Template__c); //Check for current donation fees for this registration - List previousDonationFees = [ - SELECT Id, Event_Registration__c, Event_Fee__c, Event_Fee_Allocation__c - FROM Summit_Events_Fee__c - WHERE Event_Registration__c = :eventInformation.registrationId - AND Event_Fee_Type__c = 'Optional Donation' - WITH SECURITY_ENFORCED - ]; + List previousDonationFees = SummitEventsReadShared.getDonationsByRegistrationId(eventInformation.registrationId); if (previousDonationFees.size() > 0) { incomingFee = previousDonationFees[0]; diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index a67ed17e..1afba461 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -46,7 +46,9 @@ public without sharing class SummitEventsReadShared { Event_Additional_Questions_Description__c, Event_Submit_Title__c, Event_Submit_Description__c, Tracking_Submit_Registration__c, Guest_Registration_Title__c, Guest_Max_Amount__c, Guest_Registration_Description__c, Guest_Table_Size__c, Guest_Tables_Available__c, Guest_Registration_Add_Button_Label__c, No_Guest_Registrations_Added_Message__c, Guest_Unsaved_Cancel_Label__c, Guest_Unsaved_Continue_Label__c, - Guest_Unsaved_Modal_Text__c + Guest_Unsaved_Modal_Text__c, Donation_Suggested_Amount_List__c, Donation_Description__c, Donation_Allocation_1__c, Donation_Allocation_2__c, Donation_Allocation_3__c, + Donation_Allocation_4__c, Donation_Allocation_5__c, Donation_Allocation_1__r.Name, Donation_Allocation_2__r.Name, Donation_Allocation_3__r.Name, + Donation_Allocation_4__r.Name, Donation_Allocation_5__r.Name, Donation_Title__c FROM Summit_Events__c WHERE Id = :eventId WITH SECURITY_ENFORCED @@ -87,6 +89,16 @@ public without sharing class SummitEventsReadShared { ]; } + public static List getDonationsByRegistrationId(Id registrationId) { + return [ + SELECT Id, Event_Registration__c, Event_Fee__c, Event_Fee_Allocation__c + FROM Summit_Events_Fee__c + WHERE Event_Registration__c = :registrationId + AND Event_Fee_Type__c = 'Optional Donation' + WITH SECURITY_ENFORCED + ]; + } + public static Integer getAppointmentTypeCount(Id eventId, String instanceTitle, Date startDate, Date endDate, String dayOfWeek) { return [ SELECT COUNT() From 10bd2bf688a485411b67f0931b604c02111f37b6 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 13:02:31 -0500 Subject: [PATCH 46/81] updated confirmation page with shared queries --- .../SummitEventsAdditionalQuestionsCtlr.cls | 4 +- .../classes/SummitEventsReadShared.cls | 49 ++++++++++--- .../SummitEventsRegisterGuestsController.cls | 10 +-- .../classes/SummitEventsSubmitController.cls | 69 +++---------------- 4 files changed, 53 insertions(+), 79 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls index f2ec2703..4593abc1 100644 --- a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls +++ b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls @@ -15,7 +15,7 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { public String endTimeString { get; set; } public Map pageFlow { get; set; } public String formattedNavDate { get; set; } - public List additionalQuestions { get; set; } + public Map additionalQuestions { get; set; } public Boolean eventIsClosed { get; set; } public List mapToList { get; set; } public List questionWrapper { get; set; } @@ -99,7 +99,7 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { mapToList.add(namespace + 'Event__c'); mapToList.add(namespace + 'Event_Instance__c'); - for (Summit_Events_Question__c question : additionalQuestions) { + for (Summit_Events_Question__c question : additionalQuestions.values()) { //Build each question item and add to question item list to inform creation of visualforce form. questionItem quest = new questionItem(); quest.setupFail = false; diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index 1afba461..f1f3f405 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -46,9 +46,10 @@ public without sharing class SummitEventsReadShared { Event_Additional_Questions_Description__c, Event_Submit_Title__c, Event_Submit_Description__c, Tracking_Submit_Registration__c, Guest_Registration_Title__c, Guest_Max_Amount__c, Guest_Registration_Description__c, Guest_Table_Size__c, Guest_Tables_Available__c, Guest_Registration_Add_Button_Label__c, No_Guest_Registrations_Added_Message__c, Guest_Unsaved_Cancel_Label__c, Guest_Unsaved_Continue_Label__c, - Guest_Unsaved_Modal_Text__c, Donation_Suggested_Amount_List__c, Donation_Description__c, Donation_Allocation_1__c, Donation_Allocation_2__c, Donation_Allocation_3__c, - Donation_Allocation_4__c, Donation_Allocation_5__c, Donation_Allocation_1__r.Name, Donation_Allocation_2__r.Name, Donation_Allocation_3__r.Name, - Donation_Allocation_4__r.Name, Donation_Allocation_5__r.Name, Donation_Title__c + Guest_Unsaved_Modal_Text__c, Donation_Suggested_Amount_List__c, Donation_Description__c, Donation_Allocation_1__c, Donation_Allocation_2__c, + Donation_Allocation_3__c, Donation_Allocation_4__c, Donation_Allocation_5__c, Donation_Allocation_1__r.Name, Donation_Allocation_2__r.Name, + Donation_Allocation_3__r.Name, Donation_Allocation_4__r.Name, Donation_Allocation_5__r.Name, Donation_Title__c, Payment_Button_Label__c, + Event_Appointment_Submit_List_Label__c, Event_Guest_Submit_List_Label__c FROM Summit_Events__c WHERE Id = :eventId WITH SECURITY_ENFORCED @@ -74,18 +75,46 @@ public without sharing class SummitEventsReadShared { ]; } - public static List getAdditionalQuestionsByEventId(Id eventId, List registrantTypes) { - return [ - SELECT Id, Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, - Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c, Error_Assist_Text__c, - Lookup_Object__c, Lookup_Fields__c, Lookup_Where_Clause__c, Lookup_No_Results_Label__c, Lookup_Secondary_Input_Link_Text__c, Lookup_Secondary_Value_Field__c, - Lookup_Secondary_Input_Instructions__c, Lookup_Results_Icon__c, Existing_Picklist_Values__c, Display_Style__c, Picklist_Values_Long__c, - Lookup_Order_By__c + public static Map getAdditionalQuestionsByEventId(Id eventId, List registrantTypes) { + return new Map([ + SELECT Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, + Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c FROM Summit_Events_Question__c WHERE Event__c = :eventId AND Registrant_Type__c IN :registrantTypes WITH SECURITY_ENFORCED ORDER BY Display_Order__c NULLS LAST + ]); + } + + Public static List getAppointmentsByRegistrationId(Id registrationId) { + return [ + SELECT Id, Appointment_Category__c, Event_Appointment_Type__c, Appointment_Type__c, Description__c, Appointment_Title__c, + Chosen_State__c, Registrant_Input__c + FROM Summit_Events_Appointments__c + WHERE Event_Registration__c = :registrationId + AND Chosen_State__c != 'Added but not shown' + WITH SECURITY_ENFORCED + ORDER BY Sort_Order__c + ]; + } + + public static List getPaymentsByRegistrationId(Id registrationId) { + return [ + SELECT Id, Payment_Amount__c, TouchnetReceiptNumber__c, Event_Registration__c + FROM Summit_Events_Payment__c + WHERE Event_Registration__c = :registrationId + WITH SECURITY_ENFORCED + ]; + } + + public static List getFeesByRegistrationId(Id registrationId) { + return [ + SELECT Id, Event_Fee__c, Event_Fee_Allocation__c, Description__c, Event_Fee_Type__c, Event_Appointment_Type__c, + Event_Appointment_Type__r.Title__c, Event_Fee_Allocation__r.Name + FROM Summit_Events_Fee__c + WHERE Event_Registration__c = :registrationId + WITH SECURITY_ENFORCED ]; } diff --git a/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls b/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls index b436c378..6f38288d 100644 --- a/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls @@ -58,15 +58,7 @@ public with sharing class SummitEventsRegisterGuestsController { eventInstance = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); List registrantTypes = new List{'Guest', 'Registrant and Guest'}; - List summitEventsQuestions = SummitEventsReadShared.getAdditionalQuestionsByEventId(eventInformation.eventId, registrantTypes); - - //Convert summitEventsQuestions to a map id, summit_events_question__c - eventGuestQuestions = new Map(); - for (Summit_Events_Question__c question : summitEventsQuestions) { - if (question.Registrant_Type__c == 'Guest' || question.Registrant_Type__c == 'Registrant and Guest') { - eventGuestQuestions.put(question.Id, question); - } - } + eventGuestQuestions = SummitEventsReadShared.getAdditionalQuestionsByEventId(eventInformation.eventId, registrantTypes); List questionList = new List(); hiddenQuestions = new List(); diff --git a/force-app/main/default/classes/SummitEventsSubmitController.cls b/force-app/main/default/classes/SummitEventsSubmitController.cls index 97af257f..cf7535fc 100644 --- a/force-app/main/default/classes/SummitEventsSubmitController.cls +++ b/force-app/main/default/classes/SummitEventsSubmitController.cls @@ -40,16 +40,7 @@ public with sharing class SummitEventsSubmitController { eventInformation = SummitEventsShared.getSummitEventsInfo(); if (!String.isEmpty(eventInformation.eventId)) { - eventPage = [ - SELECT Event_Name__c, Event_Submit_Title__c, Event_Submit_Description__c, Event_Footer__c, Template__c, Event_Home_Link_Title__c, Event_Home_Link_URL__c, - Tracking_Submit_Registration__c, Event_Full_Text__c, Close_Event_Days_Before__c, Keep_Registration_Open_During_Event__c, - Donation_Description__c, Display_Optional_Donation__c, Payment_Gateway__c, Event_Fee_Label__c, Event_Fee_Total_Label__c, - Event_Fee_Submit_List_Label__c, Payment_Button_Label__c, Event_Appointment_Submit_List_Label__c, Event_Guest_Submit_List_Label__c, - Account__r.Name, Audience__c, Filter_Category__c, Event_Sponsor__c, Event_Status__c - FROM Summit_Events__c - WHERE Id = :eventInformation.eventId - WITH SECURITY_ENFORCED - ]; + eventPage = SummitEventsReadShared.getEventById(eventInformation.eventId); templateSelected = SummitEventsShared.getTemplate(eventPage.Template__c); @@ -57,15 +48,7 @@ public with sharing class SummitEventsSubmitController { hasPaymentGateway = true; } - eventInstance = [ - SELECT Instance_Title__c, Event__r.Event_Name__c, Instance_Time_Zone__c, - Instance_Start_Time__c, Instance_End_Time__c, Instance_Start_Date__c, - Instance_End_Date__c, Current_Available_Capacity__c, Active_Status__c, - Registration_Close_Date__c, Registration_Close_Time__c - FROM Summit_Events_Instance__c - WHERE Id = :eventInformation.instanceId - WITH SECURITY_ENFORCED - ]; + eventInstance = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); pageFlow = SummitEventsShared.getPageFlow(eventInformation.eventId, eventInstance.Instance_Title__c, ApexPages.currentPage(), eventInstance.Instance_Start_Date__c, eventInstance.Instance_End_Date__c); @@ -82,24 +65,14 @@ public with sharing class SummitEventsSubmitController { guestAnswers = new List(); - Summit_Events_Registration__c eventRegistration = [ - SELECT Id, Guest_JSON__c - FROM Summit_Events_Registration__c - WHERE Id = :eventInformation.registrationId - ]; - + Summit_Events_Registration__c eventRegistration = SummitEventsReadShared.getRegistrationById(eventInformation.registrationId); if (String.isNotBlank(eventRegistration.Guest_JSON__c)) { - Map eventGuestQuestions = new Map([ - SELECT Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, - Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c - FROM Summit_Events_Question__c - WHERE Event__c = :eventInformation.eventId - AND (Registrant_Type__c = 'Guest' OR Registrant_Type__c = 'Registrant and Guest') - WITH SECURITY_ENFORCED - ORDER BY Display_Order__c NULLS LAST - ]); + List registrantTypes = new List{ + 'Guest', 'Registrant and Guest' + }; + Map eventGuestQuestions = SummitEventsReadShared.getAdditionalQuestionsByEventId(eventInformation.eventId, registrantTypes); guestAnswers = (List) JSON.deserialize(eventRegistration.Guest_JSON__c, List.class); for (Integer xx = 0; xx < guestAnswers.size(); xx++) { @@ -124,39 +97,19 @@ public with sharing class SummitEventsSubmitController { } - chosenAppointments = [ - SELECT Id, Appointment_Category__c, Event_Appointment_Type__c, Appointment_Type__c, Description__c, Appointment_Title__c, - Chosen_State__c, Registrant_Input__c - FROM Summit_Events_Appointments__c - WHERE Event_Registration__c = :eventInformation.registrationId - AND Chosen_State__c != 'Added but not shown' - WITH SECURITY_ENFORCED - ORDER BY Sort_Order__c - ]; - - for(Integer x = 0; x < chosenAppointments.size(); x++) { + chosenAppointments = SummitEventsReadShared.getAppointmentsByRegistrationId(eventInformation.registrationId); + for (Integer x = 0; x < chosenAppointments.size(); x++) { chosenAppointments[x].Description__c = SummitEventsShared.removeHTMLandEscape(chosenAppointments[x].Description__c, false); } /** Check for preexisting payment **/ - List existingPayment = [ - SELECT Id, Payment_Amount__c, TouchnetReceiptNumber__c - FROM Summit_Events_Payment__c - WHERE Event_Registration__c = :eventInformation.registrationId - ]; + List existingPayment = SummitEventsReadShared.getPaymentsByRegistrationId(eventInformation.registrationId); if (existingPayment.size() > 0) { existingPaymentAmount = existingPayment[0].Payment_Amount__c; } /** Collect Fees **/ - eventFees = [ - SELECT Name, Event_Fee__c, Event_Fee_Allocation__c, Description__c, Event_Fee_Type__c, Summit_Events__c, Event_Appointment_Type__c, - Event_Appointment_Type__r.Title__c, Event_Fee_Allocation__r.Name - FROM Summit_Events_Fee__c - WHERE Event_Registration__c = :eventInformation.registrationId - WITH SECURITY_ENFORCED - ]; - + eventFees = SummitEventsReadShared.getFeesByRegistrationId(eventInformation.registrationId); if (eventFees.size() > 0) { feesByIndex = new Map(); eventOnlyPaymentAmount = 0; From bf5117a593200185334d59bd0ebb2d504e658bd4 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 13:25:32 -0500 Subject: [PATCH 47/81] updated confirmation page with shared queries --- .../SummitEventsConfirmationController.cls | 63 +++---------------- .../classes/SummitEventsReadShared.cls | 13 ++-- 2 files changed, 18 insertions(+), 58 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsConfirmationController.cls b/force-app/main/default/classes/SummitEventsConfirmationController.cls index 81f176cd..b1f52cee 100644 --- a/force-app/main/default/classes/SummitEventsConfirmationController.cls +++ b/force-app/main/default/classes/SummitEventsConfirmationController.cls @@ -32,44 +32,20 @@ public with sharing class SummitEventsConfirmationController { eventIsClosed = false; eventInformation = SummitEventsShared.getSummitEventsInfo(); if (!String.isEmpty(eventInformation.eventId)) { - eventPage = [ - SELECT Event_Confirmation_Title__c, Event_Name__c, Template__c, Event_Confirmation_Description__c, Event_Footer__c, - Event_Home_Link_Title__c, Event_Home_Link_URL__c, Tracking_Confirmation_Registration__c, Event_Full_Text__c, - Close_Event_Days_Before__c, Keep_Registration_Open_During_Event__c, Hand_Raise_Action__c, Account__r.Name, Audience__c, - Filter_Category__c, Event_Sponsor__c, Event_Fee_Label__c, Event_Fee_Submit_List_Label__c, Event_Fee_Total_Label__c, - Event_Fee__c, Event_Fee_Allocation__c, Event_Fee_Additional__c, Event_Fees_Received_Label__c, Event_Payment_Due_Description__c, - Event_Payment_Due_Heading_Label__c, Event_Payment_Received_Heading_Label__c, Event_Payment_Received_Description__c, - Event_Status__c - FROM Summit_Events__c - WHERE Id = :eventInformation.eventId - WITH SECURITY_ENFORCED - ]; + eventPage = SummitEventsReadShared.getEventById(eventInformation.eventId); if (eventPage != null) { templateSelected = SummitEventsShared.getTemplate(eventPage.Template__c); if (String.isNotBlank(eventInformation.instanceId)) { - eventInstance = [ - SELECT Instance_Title__c, Event__r.Event_Name__c, Instance_Time_Zone__c, Instance_Start_Time__c, Instance_End_Time__c, - Instance_Start_Date__c, Instance_End_Date__c, Current_Available_Capacity__c, Active_Status__c, Registration_Close_Date__c, Registration_Close_Time__c - FROM Summit_Events_Instance__c - WHERE Id = :eventInformation.instanceId - LIMIT 1 - ]; - + eventInstance = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); eventIsClosed = SummitEventsShared.isEventClosed(eventInstance, eventPage.Event_Status__c); - formattedNavDate = SummitEventsShared.navBreadcrumbBuilder(eventInstance); } if (String.isNotBlank(eventInformation.registrationId)) { - eventRegistration = [ - SELECT Id, Status__c - FROM Summit_Events_Registration__c - WHERE Id = :eventInformation.registrationId - ]; - + eventRegistration = SummitEventsReadShared.getRegistrationById(eventInformation.registrationId); } gatherPaymentInformation(); @@ -93,12 +69,7 @@ public with sharing class SummitEventsConfirmationController { if (!eventIsClosed && !eventInformation.valid.equalsIgnoreCase('false')) { if (String.isNotBlank(eventInformation.registrationId)) { - Summit_Events_Registration__c eventRegistration = [ - SELECT Id, Status__c, Event_Name__c, Event_Instance_Title__c, Guest_JSON__c, Event__r.Payment_Gateway__c, Event_Instance_Date_Time_Formatted__c - FROM Summit_Events_Registration__c - WHERE Id = :eventInformation.registrationId - WITH SECURITY_ENFORCED - ]; + Summit_Events_Registration__c eventRegistration = SummitEventsReadShared.getRegistrationById(eventInformation.registrationId); //Make sure there is returned registration information if (eventRegistration != null) { @@ -111,14 +82,10 @@ public with sharing class SummitEventsConfirmationController { List guestRegistrations = new List(); //Get all questions defined for the event that are for guests - Map availableQuestions = new Map([ - SELECT Id, Map_to_Field__c, Question_Field_Type__c, Display_Order__c, Question_Label__c - FROM Summit_Events_Question__c - WHERE Event__c = :eventInformation.eventId - AND (Registrant_Type__c = 'Guest' OR Registrant_Type__c = 'Registrant and Guest') - WITH SECURITY_ENFORCED - ORDER BY Display_Order__c NULLS LAST - ]); + List registrantTypes = new List{ + 'Guest', 'Registrant and Guest' + }; + Map availableQuestions = SummitEventsReadShared.getAdditionalQuestionsByEventId(eventInformation.eventId, registrantTypes); List guestAnswers = (List) JSON.deserialize(eventRegistration.Guest_JSON__c, List.class); @@ -282,19 +249,9 @@ public with sharing class SummitEventsConfirmationController { eventOnlyPaymentAmount = 0; totalPaymentAmount = 0; - eventFees = [ - SELECT Name, Event_Fee__c, Event_Fee_Allocation__c, Description__c, Event_Fee_Type__c, Summit_Events__c, Event_Appointment_Type__c, - Event_Appointment_Type__r.Title__c, Event_Fee_Allocation__r.Name - FROM Summit_Events_Fee__c - WHERE Event_Registration__c = :eventInformation.registrationId - WITH SECURITY_ENFORCED - ]; + eventFees = SummitEventsReadShared.getFeesByRegistrationId(eventInformation.registrationId); - List payments = [ - SELECT Id, Payment_Amount__c - FROM Summit_Events_Payment__c - WHERE Event_Registration__c = :eventInformation.registrationId - ]; + List payments = SummitEventsReadShared.getPaymentsByRegistrationId(eventInformation.registrationId); for (Summit_Events_Fee__c fee : eventFees) { if (fee.Event_Fee__c != null && fee.Event_Fee__c > 0) { diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index f1f3f405..cadff9a0 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -49,7 +49,9 @@ public without sharing class SummitEventsReadShared { Guest_Unsaved_Modal_Text__c, Donation_Suggested_Amount_List__c, Donation_Description__c, Donation_Allocation_1__c, Donation_Allocation_2__c, Donation_Allocation_3__c, Donation_Allocation_4__c, Donation_Allocation_5__c, Donation_Allocation_1__r.Name, Donation_Allocation_2__r.Name, Donation_Allocation_3__r.Name, Donation_Allocation_4__r.Name, Donation_Allocation_5__r.Name, Donation_Title__c, Payment_Button_Label__c, - Event_Appointment_Submit_List_Label__c, Event_Guest_Submit_List_Label__c + Event_Appointment_Submit_List_Label__c, Event_Guest_Submit_List_Label__c, Event_Confirmation_Title__c, Event_Confirmation_Description__c, + Tracking_Confirmation_Registration__c, Hand_Raise_Action__c, Event_Fees_Received_Label__c, Event_Payment_Due_Description__c, + Event_Payment_Due_Heading_Label__c, Event_Payment_Received_Heading_Label__c, Event_Payment_Received_Description__c FROM Summit_Events__c WHERE Id = :eventId WITH SECURITY_ENFORCED @@ -58,7 +60,7 @@ public without sharing class SummitEventsReadShared { public static Summit_Events_Registration__c getRegistrationById(Id registrationId) { return [ - SELECT Registrant_First_Name__c, Registrant_Last_Name__c, Registrant_Email__c, Number_of_Guests__c, Registrant_Applicant_Type__c, + SELECT Id, Status__c, Event_Name__c, Event_Instance_Title__c, Registrant_Email__c, Number_of_Guests__c, Registrant_Applicant_Type__c, Registrant_Gender__c, Registrant_Street_1__c, Registrant_Street_2__c, Registrant_State__c, Registrant_City__c, Preferred_Visit_Time__c, Registrant_Zip__c, Registrant_Phone__c, Registrant_Mobile_Phone__c, Registrant_College__c, Registrant_College_Code__c, Registrant_College_Year__c, Registrant_High_School__c, Registrant_High_School_Code__c, Registrant_Receive_Texts__c, Registrant_High_School_Grad_Year__c, Registrant_High_School_Not_Found__c, @@ -68,7 +70,8 @@ public without sharing class SummitEventsReadShared { Registrant_Other_Phone__c, Registrant_Other_Relationship__c, Registrant_Country__c, Registrant_State_Province__c, Registrant_Postal_Code__c, Registrant_Third_Party_Status__c, Registrant_Pronouns__c, Registrant_Title__c, Registrant_Company_Organization__c, Event_Website__c, Event_Website_Referrer__c, gclid__c, utm_campaign__c, utm_content__c, utm_creative_format__c, utm_id__c, utm_marketing_tactic__c, utm_medium__c, utm_source__c, utm_source_platform__c, utm_term__c, Dietary_Ristrictions__c, - Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c, Guest_JSON__c + Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c, Guest_JSON__c, + Event__r.Payment_Gateway__c, Event_Instance_Date_Time_Formatted__c FROM Summit_Events_Registration__c WHERE Id = :registrationId WITH SECURITY_ENFORCED @@ -77,7 +80,7 @@ public without sharing class SummitEventsReadShared { public static Map getAdditionalQuestionsByEventId(Id eventId, List registrantTypes) { return new Map([ - SELECT Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, + SELECT Id, Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c FROM Summit_Events_Question__c WHERE Event__c = :eventId @@ -110,7 +113,7 @@ public without sharing class SummitEventsReadShared { public static List getFeesByRegistrationId(Id registrationId) { return [ - SELECT Id, Event_Fee__c, Event_Fee_Allocation__c, Description__c, Event_Fee_Type__c, Event_Appointment_Type__c, + SELECT Id, Name, Event_Fee__c, Event_Fee_Allocation__c, Description__c, Event_Fee_Type__c, Event_Appointment_Type__c, Event_Appointment_Type__r.Title__c, Event_Fee_Allocation__r.Name FROM Summit_Events_Fee__c WHERE Event_Registration__c = :registrationId From a2af6c065588844f8e67230d9513457753200531 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 14:00:46 -0500 Subject: [PATCH 48/81] updated calendar links to use shared queries --- .../SummitEventsAddToCalendarController.cls | 23 +++---------------- .../classes/SummitEventsReadShared.cls | 4 +++- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAddToCalendarController.cls b/force-app/main/default/classes/SummitEventsAddToCalendarController.cls index 75d8d241..ced6dc26 100644 --- a/force-app/main/default/classes/SummitEventsAddToCalendarController.cls +++ b/force-app/main/default/classes/SummitEventsAddToCalendarController.cls @@ -32,7 +32,8 @@ public with sharing class SummitEventsAddToCalendarController { } if (URLInstanceID != null) { - Summit_Events_Instance__c eventInformation = getEventInformation(URLInstanceID); + + Summit_Events_Instance__c eventInformation = SummitEventsReadShared.getInstanceById(URLInstanceID); if (eventInformation != null) { DTStart = SummitEventsShared.convertDateToDatetime(eventInformation.Instance_Start_Date__c, eventInformation.Instance_Start_Time__c, eventInformation.Instance_Time_Zone__c).format('yyyyMMdd\'T\'HHmmss\'Z\''); @@ -169,24 +170,6 @@ public with sharing class SummitEventsAddToCalendarController { return locationLink; } - public Summit_Events_Instance__c getEventInformation(Id eventId) { - List eventInstanceList = [ - SELECT Id, Event_Name__c, Instance_Title__c, Instance_Start_Date__c, Instance_End_Date__c, Instance_Start_Time__c, - Instance_End_Time__c, Instance_Time_Zone__c, Instance_Short_Description__c, Event__r.Event_Short_Listing_Description__c, - Virtual_Meeting_Link__c, Event__r.Location_Title__c, Event__r.Location_Address__c, Event__r.Location_Map_Link__c, - Location_Title_Override__c, Location_Address_Override__c, Location_Map_Link_Override__c, Building_Override__c, - Event__r.Building__c, Event__r.Event_description__c - FROM Summit_Events_Instance__c - WHERE Id = :eventId - WITH SECURITY_ENFORCED - ]; - - if (eventInstanceList.size() > 0) { - return eventInstanceList[0]; - } - return null; - } - public static String NewGuid() { Blob b = Crypto.generateAesKey(128); String h = EncodingUtil.convertToHex(b); @@ -209,7 +192,7 @@ public with sharing class SummitEventsAddToCalendarController { PageReference linkPage = null; String urlCalendarLink = ''; if (URLInstanceID != null) { - Summit_Events_Instance__c eventInformation = getEventInformation(URLInstanceID); + Summit_Events_Instance__c eventInformation = SummitEventsReadShared.getInstanceById(URLInstanceID); String type = ''; if (String.isNotBlank(ApexPages.currentPage().getParameters().get('type'))) { type = String.escapeSingleQuotes(ApexPages.currentPage().getParameters().get('type')); diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index cadff9a0..df7a20cd 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -10,7 +10,9 @@ public without sharing class SummitEventsReadShared { Location_Type_Override__c, Location_Address_Override__c, Event__r.Close_Event_Days_Before__c, Location_Map_Link_Override__c, Location_Title_Override__c, Event_Fee_Additional_Allocation_Override__c, Event_Fee_Additional_Override__c, Event_Fee_Override__c, Event_Fee_Allocation_Override__c, Instance_Start_Date__c, Instance_Start_Time__c, Instance_End_Date__c, Instance_End_Time__c, Instance_Time_Zone__c, Registration_Close_Date__c, - Registration_Close_Time__c, Event__r.Event_Home_Link_URL__c + Registration_Close_Time__c, Event__r.Event_Home_Link_URL__c, Event_Name__c, Instance_Short_Description__c, Event__r.Event_Short_Listing_Description__c, + Virtual_Meeting_Link__c, Event__r.Location_Title__c, Event__r.Location_Address__c, Event__r.Location_Map_Link__c, + Building_Override__c, Event__r.Building__c FROM Summit_Events_Instance__c WHERE Id = :instanceId WITH SECURITY_ENFORCED From a89859dde00eee211030b878ad169307b5bd9cef Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 14:42:03 -0500 Subject: [PATCH 49/81] Added shared queries to appointment trigger handler --- .../SummitEventsAfterLeadConversion.cls | 2 +- .../SummitEventsAppointmentTriggerHandler.cls | 24 ++++++++++--------- .../classes/SummitEventsReadShared.cls | 12 +++++++++- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls b/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls index 6b83629f..744ab830 100644 --- a/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls +++ b/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls @@ -3,7 +3,7 @@ // License can be found found in the LICENSE file in this repository. // Created by Matthew Hubert on 9/17/2021 -public class SummitEventsAfterLeadConversion { +public without sharing class SummitEventsAfterLeadConversion { public static void afterUpdate(List newLeads) { updateEventsOnConvert(newLeads); } diff --git a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls index 40ac6226..d5f955bb 100644 --- a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls +++ b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls @@ -3,7 +3,7 @@ */ -public with sharing class SummitEventsAppointmentTriggerHandler { +public without sharing class SummitEventsAppointmentTriggerHandler { public static void generateItineraries(List newList, List oldList) { @@ -24,7 +24,7 @@ public with sharing class SummitEventsAppointmentTriggerHandler { } if (uniqueRegistrationIds.size() > 0) { - + doCRUD CRUDtoDo = new doCRUD(); String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); //Get the all query fields from global picklist @@ -55,7 +55,7 @@ public with sharing class SummitEventsAppointmentTriggerHandler { query += namespace + 'Event_Host__r.' + namespace + 'Time__c ASC, '; query += namespace + 'Sort_Order__c, '; query += namespace + 'Appointment_Title__c ASC '; - allAppointments = Database.query(query); + allAppointments = CRUDtoDo.getAppointmentByQueryString(query); } catch (DmlException dmlExc) { System.debug(dmlExc.getMessage()); } catch (Exception e) { @@ -73,13 +73,7 @@ public with sharing class SummitEventsAppointmentTriggerHandler { Map eventItinerarySetup = new Map(); if (eventIds.size() > 0) { - eventItinerarySetup = new Map([ - SELECT Id, Itinerary_Item_1__c, Itinerary_Item_2__c, Itinerary_Item_3__c, Itinerary_Item_4__c, Itinerary_Item_5__c, - Itinerary_Label_1__c, Itinerary_Label_2__c, Itinerary_Label_3__c, Itinerary_Label_4__c, Itinerary_Label_5__c, - Itinerary_Display_Options__c - FROM Summit_Events__c - WHERE Id IN :eventIds - ]); + eventItinerarySetup = SummitEventsReadShared.getEventsByIds(new List(eventIds)); } for (Summit_Events_Appointments__c appointment : allAppointments) { @@ -185,7 +179,6 @@ public with sharing class SummitEventsAppointmentTriggerHandler { } if (registrationsWithItineraries.size() > 0) { - doCRUD CRUDtoDo = new doCRUD(); CRUDtoDo.updateRegistration(registrationsWithItineraries); } @@ -253,6 +246,15 @@ public with sharing class SummitEventsAppointmentTriggerHandler { } } + private List getAppointmentByQueryString(String query) { + try { + return Database.query(query); + } catch (Exception e) { + System.debug(e.getMessage()); + return null; + } + } + } } \ No newline at end of file diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index df7a20cd..503e989a 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -10,7 +10,7 @@ public without sharing class SummitEventsReadShared { Location_Type_Override__c, Location_Address_Override__c, Event__r.Close_Event_Days_Before__c, Location_Map_Link_Override__c, Location_Title_Override__c, Event_Fee_Additional_Allocation_Override__c, Event_Fee_Additional_Override__c, Event_Fee_Override__c, Event_Fee_Allocation_Override__c, Instance_Start_Date__c, Instance_Start_Time__c, Instance_End_Date__c, Instance_End_Time__c, Instance_Time_Zone__c, Registration_Close_Date__c, - Registration_Close_Time__c, Event__r.Event_Home_Link_URL__c, Event_Name__c, Instance_Short_Description__c, Event__r.Event_Short_Listing_Description__c, + Registration_Close_Time__c, Event__r.Event_Home_Link_URL__c, Event_Name__c, Instance_Short_Description__c, Event__r.Event_Short_Listing_Description__c, Virtual_Meeting_Link__c, Event__r.Location_Title__c, Event__r.Location_Address__c, Event__r.Location_Map_Link__c, Building_Override__c, Event__r.Building__c FROM Summit_Events_Instance__c @@ -60,6 +60,16 @@ public without sharing class SummitEventsReadShared { ]; } + public static Map getEventsByIds(List eventIds) { + return new Map([ + SELECT Id, Itinerary_Item_1__c, Itinerary_Item_2__c, Itinerary_Item_3__c, Itinerary_Item_4__c, Itinerary_Item_5__c, + Itinerary_Label_1__c, Itinerary_Label_2__c, Itinerary_Label_3__c, Itinerary_Label_4__c, Itinerary_Label_5__c, + Itinerary_Display_Options__c + FROM Summit_Events__c + WHERE Id IN :eventIds + ]); + } + public static Summit_Events_Registration__c getRegistrationById(Id registrationId) { return [ SELECT Id, Status__c, Event_Name__c, Event_Instance_Title__c, Registrant_Email__c, Number_of_Guests__c, Registrant_Applicant_Type__c, From b48d4f5c564fda8432b187bab144387983677175 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 14:51:14 -0500 Subject: [PATCH 50/81] Added shared queries to Cancel review page --- .../SummitEventsCancelReviewController.cls | 35 +++---------------- .../classes/SummitEventsReadShared.cls | 7 ++-- 2 files changed, 8 insertions(+), 34 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsCancelReviewController.cls b/force-app/main/default/classes/SummitEventsCancelReviewController.cls index cb4fbf76..f6082165 100644 --- a/force-app/main/default/classes/SummitEventsCancelReviewController.cls +++ b/force-app/main/default/classes/SummitEventsCancelReviewController.cls @@ -32,41 +32,14 @@ public with sharing class SummitEventsCancelReviewController { } if (String.isNotBlank(eventInformation.registrationId)) { - eventRegistration = [ - SELECT Id, Status__c, Name, Event_Instance__c, Event_Name__c, Event_Instance__r.Instance_Title__c, Event__c - FROM Summit_Events_Registration__c - WHERE Id = :eventInformation.registrationId - WITH SECURITY_ENFORCED - ]; - + eventRegistration = SummitEventsReadShared.getRegistrationById(eventInformation.registrationId); if (eventRegistration != null) { - appointments = [ - SELECT Id, Appointment_Title__c, Appointment_Category__c, Appointment_Type__c - FROM Summit_Events_Appointments__c - WHERE Event_Registration__c = :eventParameter - WITH SECURITY_ENFORCED - ]; - - eventInstance = [ - SELECT Id, Instance_Title__c, Instance_Start_Date__c, Instance_End_Date__c, Instance_Start_Time__c, Instance_End_Time__c, Instance_Time_Zone__c, - Registration_Close_Date__c, Current_Available_Capacity__c, Active_Status__c, Registration_Close_Time__c - FROM Summit_Events_Instance__c W - WHERE Id = :eventRegistration.Event_Instance__c - WITH SECURITY_ENFORCED - ]; - - eventPage = [ - SELECT Id, Event_Name__c, Event_description__c, Event_Footer__c, Event_Cancel_Review_Title__c, Event_Cancel_Review_Description__c, - Event_Cancelled_Notification_Text__c, Event_Home_Link_Title__c, Event_Home_Link_URL__c, Tracking_Cancel_Registration__c, - Account__r.Name, Audience__c, Filter_Category__c, Event_Sponsor__c, Event_Full_Text__c, Template__c, Event_Status__c - FROM Summit_Events__c - WHERE Id = :eventRegistration.Event__c - WITH SECURITY_ENFORCED - ]; + appointments = SummitEventsReadShared.getAppointmentsByRegistrationId(eventRegistration.Id); + eventInstance = SummitEventsReadShared.getInstanceById(eventRegistration.Event_Instance__c); + eventPage = SummitEventsReadShared.getEventById(eventInstance.Event__c); templateSelected = SummitEventsShared.getTemplate(eventPage.Template__c); - eventIsClosed = SummitEventsShared.isEventClosed(eventInstance, eventPage.Event_Status__c); if (eventInstance != null) { diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index 503e989a..94d2315e 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -53,7 +53,8 @@ public without sharing class SummitEventsReadShared { Donation_Allocation_3__r.Name, Donation_Allocation_4__r.Name, Donation_Allocation_5__r.Name, Donation_Title__c, Payment_Button_Label__c, Event_Appointment_Submit_List_Label__c, Event_Guest_Submit_List_Label__c, Event_Confirmation_Title__c, Event_Confirmation_Description__c, Tracking_Confirmation_Registration__c, Hand_Raise_Action__c, Event_Fees_Received_Label__c, Event_Payment_Due_Description__c, - Event_Payment_Due_Heading_Label__c, Event_Payment_Received_Heading_Label__c, Event_Payment_Received_Description__c + Event_Payment_Due_Heading_Label__c, Event_Payment_Received_Heading_Label__c, Event_Payment_Received_Description__c, + Event_Cancel_Review_Title__c, Event_Cancel_Review_Description__c, Event_Cancelled_Notification_Text__c, Tracking_Cancel_Registration__c FROM Summit_Events__c WHERE Id = :eventId WITH SECURITY_ENFORCED @@ -72,7 +73,7 @@ public without sharing class SummitEventsReadShared { public static Summit_Events_Registration__c getRegistrationById(Id registrationId) { return [ - SELECT Id, Status__c, Event_Name__c, Event_Instance_Title__c, Registrant_Email__c, Number_of_Guests__c, Registrant_Applicant_Type__c, + SELECT Id, Name, Status__c, Event_Name__c, Event_Instance_Title__c, Registrant_Email__c, Number_of_Guests__c, Registrant_Applicant_Type__c, Registrant_Gender__c, Registrant_Street_1__c, Registrant_Street_2__c, Registrant_State__c, Registrant_City__c, Preferred_Visit_Time__c, Registrant_Zip__c, Registrant_Phone__c, Registrant_Mobile_Phone__c, Registrant_College__c, Registrant_College_Code__c, Registrant_College_Year__c, Registrant_High_School__c, Registrant_High_School_Code__c, Registrant_Receive_Texts__c, Registrant_High_School_Grad_Year__c, Registrant_High_School_Not_Found__c, @@ -83,7 +84,7 @@ public without sharing class SummitEventsReadShared { Registrant_Pronouns__c, Registrant_Title__c, Registrant_Company_Organization__c, Event_Website__c, Event_Website_Referrer__c, gclid__c, utm_campaign__c, utm_content__c, utm_creative_format__c, utm_id__c, utm_marketing_tactic__c, utm_medium__c, utm_source__c, utm_source_platform__c, utm_term__c, Dietary_Ristrictions__c, Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c, Guest_JSON__c, - Event__r.Payment_Gateway__c, Event_Instance_Date_Time_Formatted__c + Event__r.Payment_Gateway__c, Event_Instance_Date_Time_Formatted__c, Event_Instance__c, Event_Instance__r.Instance_Title__c, Event__c FROM Summit_Events_Registration__c WHERE Id = :registrationId WITH SECURITY_ENFORCED From 351e443740c91937aeac3dde9154fc9a1a2a414c Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 15:25:18 -0500 Subject: [PATCH 51/81] Added shared queries to a feed --- force-app/main/default/classes/SummitEventsFeed.cls | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsFeed.cls b/force-app/main/default/classes/SummitEventsFeed.cls index b28d12d1..32a28d99 100644 --- a/force-app/main/default/classes/SummitEventsFeed.cls +++ b/force-app/main/default/classes/SummitEventsFeed.cls @@ -285,7 +285,8 @@ global with sharing class SummitEventsFeed { eventQuery += ' WITH SECURITY_ENFORCED '; eventQuery += ' ORDER BY Instance_Start_Date__c, Instance_Start_Time__c '; - List EventInstanceList = Database.query(eventQuery); + doCRUD crud = new doCRUD(); + List EventInstanceList = crud.getEventListQueryByString(eventQuery); Datetime regDateOpenDate = null; for (Summit_Events_Instance__c eventInstance : EventInstanceList) { @@ -416,7 +417,7 @@ global with sharing class SummitEventsFeed { evt.locationMapLink = ''; } - if (SummitEventsShared.isEventClosed(eventInstance, eventInstance.Event__r.Event_Status__c )) { + if (SummitEventsShared.isEventClosed(eventInstance, eventInstance.Event__r.Event_Status__c)) { evt.eventClosed = true; evt.eventUrl = 'javascript:;'; evt.className = 'eventClosed'; @@ -576,4 +577,10 @@ global with sharing class SummitEventsFeed { newOption.options = items; return newOption; } + private without sharing class doCRUD { + private List getEventListQueryByString(String eventQuery) { + //Get the event instances + return Database.query(eventQuery); + } + } } \ No newline at end of file From e06529ddaace4152b6f1186a320fd458ee50b7f4 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 15:33:38 -0500 Subject: [PATCH 52/81] Added shared query to generated itineraries --- .../classes/SummitEventsGeneratedItinerariesExt.cls | 8 +------- force-app/main/default/classes/SummitEventsReadShared.cls | 3 ++- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls b/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls index 1e7d94dd..d89b5475 100644 --- a/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls +++ b/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls @@ -10,13 +10,7 @@ public with sharing class SummitEventsGeneratedItinerariesExt { public SummitEventsGeneratedItinerariesExt(ApexPages.StandardController stdController) { seaRegistration = (Summit_Events_Registration__c) stdController.getRecord(); - Id regId = seaRegistration.Id; - Summit_Events_Registration__c registration = [ - SELECT Id, Generated_Itinerary__c, Generated_Requested_Appointments__c - FROM Summit_Events_Registration__c - WHERE Id = :regId - ]; - + Summit_Events_Registration__c registration = SummitEventsReadShared.getRegistrationById(seaRegistration.Id); generatedItinerary = registration.Generated_Itinerary__c; requestedItinerary = registration.Generated_Requested_Appointments__c; } diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index 94d2315e..b817c897 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -84,7 +84,8 @@ public without sharing class SummitEventsReadShared { Registrant_Pronouns__c, Registrant_Title__c, Registrant_Company_Organization__c, Event_Website__c, Event_Website_Referrer__c, gclid__c, utm_campaign__c, utm_content__c, utm_creative_format__c, utm_id__c, utm_marketing_tactic__c, utm_medium__c, utm_source__c, utm_source_platform__c, utm_term__c, Dietary_Ristrictions__c, Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c, Guest_JSON__c, - Event__r.Payment_Gateway__c, Event_Instance_Date_Time_Formatted__c, Event_Instance__c, Event_Instance__r.Instance_Title__c, Event__c + Event__r.Payment_Gateway__c, Event_Instance_Date_Time_Formatted__c, Event_Instance__c, Event_Instance__r.Instance_Title__c, Event__c, + Generated_Itinerary__c, Generated_Requested_Appointments__c FROM Summit_Events_Registration__c WHERE Id = :registrationId WITH SECURITY_ENFORCED From aefedcdc24bca3cc6dfeffc0bb612b0078d7d67a Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 16:22:28 -0500 Subject: [PATCH 53/81] Depreciated unused classes and pages --- .../classes/SummitEventsAdditionalQuestionsCtlr.cls | 8 ++++---- .../classes/SummitEventsAppointmentTriggerHandler.cls | 8 ++++---- .../classes/SummitEventsGeneratedItinerariesExt.cls | 8 ++++---- .../classes/SummitEventsHostAssignmentExtension.cls | 7 +++++++ .../classes/SummitEventsParkingPassController.cls | 8 +++++++- .../main/default/pages/SummitEventsHostAssignment.page | 5 +++-- .../main/default/pages/SummitEventsParkingPass.page | 6 ++++-- .../classes/SummitEventsHostAssignment_TEST.cls | 10 ++++++++-- .../default/classes/SummitEventsParkingPass_TEST.cls | 4 +++- 9 files changed, 44 insertions(+), 20 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls index 4593abc1..87590ae0 100644 --- a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls +++ b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls @@ -1,7 +1,7 @@ -/** - * Created by Thaddaeus Dahlberg, Software Engineer, University of St. Thomas on 7/13/2021. - */ - +// Copyright (c) 2020, Salesforce.org. All rights reserved. +// Use of this source code is governed by a BSD 3-Clause. +// License can be found found in the LICENSE file in this repository. +// Created by Thaddaeus Dahlberg on 7/13/2021. public with sharing class SummitEventsAdditionalQuestionsCtlr { diff --git a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls index d5f955bb..96a712d6 100644 --- a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls +++ b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls @@ -1,7 +1,7 @@ -/** - * Created by Thaddaeus Dahlberg, Software Engineer, University of St. Thomas on 2/1/2023. - */ - +// Copyright (c) 2020, Salesforce.org. All rights reserved. +// Use of this source code is governed by a BSD 3-Clause. +// License can be found found in the LICENSE file in this repository. +// Created by Thaddaeus Dahlberg on 2/1/2023. public without sharing class SummitEventsAppointmentTriggerHandler { diff --git a/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls b/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls index d89b5475..805540c0 100644 --- a/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls +++ b/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls @@ -1,7 +1,7 @@ -/** - * Created by Thaddaeus Dahlberg, Software Engineer, University of St. Thomas on 2/15/2023. - */ - +// Copyright (c) 2020, Salesforce.org. All rights reserved. +// Use of this source code is governed by a BSD 3-Clause. +// License can be found found in the LICENSE file in this repository. +// Created by Thaddaeus Dahlberg on 2/15/2023. public with sharing class SummitEventsGeneratedItinerariesExt { public Summit_Events_Registration__c seaRegistration; diff --git a/force-app/main/default/classes/SummitEventsHostAssignmentExtension.cls b/force-app/main/default/classes/SummitEventsHostAssignmentExtension.cls index dc93bbc4..5e51f79d 100644 --- a/force-app/main/default/classes/SummitEventsHostAssignmentExtension.cls +++ b/force-app/main/default/classes/SummitEventsHostAssignmentExtension.cls @@ -4,6 +4,12 @@ // Created by Thaddaeus Dahlberg on 10/30/2018. public with sharing class SummitEventsHostAssignmentExtension { + + public SummitEventsHostAssignmentExtension() { + } + +/* DEPRECATED 8/12/2025 + public Summit_Events_Appointments__c SEApt; public Id instanceID { get; set; } public Id hostId { get; set; } @@ -80,5 +86,6 @@ public with sharing class SummitEventsHostAssignmentExtension { } return options; } +*/ } \ No newline at end of file diff --git a/force-app/main/default/classes/SummitEventsParkingPassController.cls b/force-app/main/default/classes/SummitEventsParkingPassController.cls index 362fd4de..37cc58db 100644 --- a/force-app/main/default/classes/SummitEventsParkingPassController.cls +++ b/force-app/main/default/classes/SummitEventsParkingPassController.cls @@ -4,7 +4,12 @@ // Created by Thaddaeus Dahlberg on 5/1/2018. public with sharing class SummitEventsParkingPassController { - public String firstName { get; set; } + public SummitEventsParkingPassController() { + //No constructor logic needed + } + +/* DEPRECIATED 8/12/2025 + public String firstName { get; set; } public String warning { get; set; } public Summit_Events_Registration__c visitor { get; set; } public SummitEventsInfo eventInformation { get; set; } @@ -49,4 +54,5 @@ public with sharing class SummitEventsParkingPassController { } } } + */ } \ No newline at end of file diff --git a/force-app/main/default/pages/SummitEventsHostAssignment.page b/force-app/main/default/pages/SummitEventsHostAssignment.page index 0293dc2c..71aa5608 100644 --- a/force-app/main/default/pages/SummitEventsHostAssignment.page +++ b/force-app/main/default/pages/SummitEventsHostAssignment.page @@ -5,8 +5,9 @@ license that can be found in the LICENSE file. Created by Thaddaeus Dahlberg on 10/30/2018. --> - + + \ No newline at end of file diff --git a/force-app/main/default/pages/SummitEventsParkingPass.page b/force-app/main/default/pages/SummitEventsParkingPass.page index b6f56804..9bad62b9 100644 --- a/force-app/main/default/pages/SummitEventsParkingPass.page +++ b/force-app/main/default/pages/SummitEventsParkingPass.page @@ -5,7 +5,9 @@ license that can be found in the LICENSE file. Created by Thaddaeus Dahlberg on 5/1/2018. --> - + + \ No newline at end of file diff --git a/force-app/test/default/classes/SummitEventsHostAssignment_TEST.cls b/force-app/test/default/classes/SummitEventsHostAssignment_TEST.cls index 035bd902..82720429 100644 --- a/force-app/test/default/classes/SummitEventsHostAssignment_TEST.cls +++ b/force-app/test/default/classes/SummitEventsHostAssignment_TEST.cls @@ -6,6 +6,10 @@ @IsTest private class SummitEventsHostAssignment_TEST { @IsTest static void testSEHostAssignment() { + Test.startTest(); + SummitEventsHostAssignmentExtension hostController = new SummitEventsHostAssignmentExtension(); + Test.stopTest(); +/* List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'TestFirst', 'TestLast', 'test@valleyhill.net', '55418', '1971-03-22', '2012', null); List testHosts = SummitEventsTestSharedDataFactory.createHosts(seaTestInstances[1].Id); @@ -53,7 +57,9 @@ private class SummitEventsHostAssignment_TEST { testAssignedHost = [SELECT Id, Assigned__c FROM Summit_Events_Host__c WHERE Id = :testHosts[1].Id]; System.assertEquals(testAssignedHost.Assigned__c, 10); - Test.stopTest(); - } + + Test.stopTest(); + } + */ } } \ No newline at end of file diff --git a/force-app/test/default/classes/SummitEventsParkingPass_TEST.cls b/force-app/test/default/classes/SummitEventsParkingPass_TEST.cls index 66eb6f66..0deeac59 100644 --- a/force-app/test/default/classes/SummitEventsParkingPass_TEST.cls +++ b/force-app/test/default/classes/SummitEventsParkingPass_TEST.cls @@ -6,7 +6,8 @@ @IsTest private class SummitEventsParkingPass_TEST { @IsTest static void testParkingPass() { - SummitEventsTestSharedDataFactory.createContact('TestFirst1', 'TestLast1', 'test1@valleyhill.net', '55418', '(555) 555-5555', '1971-03-22'); + SummitEventsParkingPassController parkingController = new SummitEventsParkingPassController(); + /*SummitEventsTestSharedDataFactory.createContact('TestFirst1', 'TestLast1', 'test1@valleyhill.net', '55418', '(555) 555-5555', '1971-03-22'); List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); Summit_Events_Registration__c seaTestRegistration = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[2], 'TestFirst', 'TestLast', 'test@valleyhill.net', '55418', '1971-03-22', '2012', null); Summit_Events_Registration__c seaTestRegistration2 = SummitEventsTestSharedDataFactory.createEventRegistration(seaTestInstances[1], 'TestFirst2', 'TestLast2', 'test2@valleyhill.net', '55418', '1971-03-22', '2012', null); @@ -62,5 +63,6 @@ private class SummitEventsParkingPass_TEST { Test.stopTest(); } + */ } } \ No newline at end of file From a29b17e474ca87d36a08d2142133bb9d774aad48 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 12 Aug 2025 16:44:09 -0500 Subject: [PATCH 54/81] Added shared queries to appointment page class --- .../classes/SummitEventsReadShared.cls | 33 ++++++++++- .../SummitEventsRegisterAppointmentCtlr.cls | 55 ++----------------- 2 files changed, 38 insertions(+), 50 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index b817c897..e57f7996 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -13,6 +13,7 @@ public without sharing class SummitEventsReadShared { Registration_Close_Time__c, Event__r.Event_Home_Link_URL__c, Event_Name__c, Instance_Short_Description__c, Event__r.Event_Short_Listing_Description__c, Virtual_Meeting_Link__c, Event__r.Location_Title__c, Event__r.Location_Address__c, Event__r.Location_Map_Link__c, Building_Override__c, Event__r.Building__c + FROM Summit_Events_Instance__c WHERE Id = :instanceId WITH SECURITY_ENFORCED @@ -54,7 +55,9 @@ public without sharing class SummitEventsReadShared { Event_Appointment_Submit_List_Label__c, Event_Guest_Submit_List_Label__c, Event_Confirmation_Title__c, Event_Confirmation_Description__c, Tracking_Confirmation_Registration__c, Hand_Raise_Action__c, Event_Fees_Received_Label__c, Event_Payment_Due_Description__c, Event_Payment_Due_Heading_Label__c, Event_Payment_Received_Heading_Label__c, Event_Payment_Received_Description__c, - Event_Cancel_Review_Title__c, Event_Cancel_Review_Description__c, Event_Cancelled_Notification_Text__c, Tracking_Cancel_Registration__c + Event_Cancel_Review_Title__c, Event_Cancel_Review_Description__c, Event_Cancelled_Notification_Text__c, Tracking_Cancel_Registration__c, + Event_Appointment_Title__c, Event_Appointment_Description__c, Tracking_Options_Registration__c, Event_Appointment_Chosen_Label__c, + Event_Appointment_Unchosen_Label__c, Event_Appointment_Next_Instructions__c FROM Summit_Events__c WHERE Id = :eventId WITH SECURITY_ENFORCED @@ -116,6 +119,17 @@ public without sharing class SummitEventsReadShared { ]; } + public static List getChosenAppointmentsByRegistrationId(Id registrationId) { + return [ + SELECT Id, Appointment_Category__c, Event_Appointment_Type__c, Appointment_Type__c, Appointment_Title__c, Chosen_State__c, Description__c, Sort_Order__c, + Registrant_Input__c, Do_Not_Show_Time__c, Event_Registration__c, Client_Created_Appointment__c + FROM Summit_Events_Appointments__c + WHERE Event_Registration__c = :registrationId + AND Client_Created_Appointment__c = TRUE + WITH SECURITY_ENFORCED + ]; + } + public static List getPaymentsByRegistrationId(Id registrationId) { return [ SELECT Id, Payment_Amount__c, TouchnetReceiptNumber__c, Event_Registration__c @@ -145,6 +159,23 @@ public without sharing class SummitEventsReadShared { ]; } + public static Map getAppointmentTypesByEventId(Id eventId, String instanceTitle, Date startDate, Date endDate, String dayOfWeek) { + return new Map([ + SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Appointment_Limits__c, Chosen_State__c, + Registrant_Input__c, Custom_Picklist__c, Sort_Order__c, Auto_Confirm_Appointment__c, Auto_add_building__c, Auto_Add_Time__c, Do_Not_Show_Time__c, + Date_Available_Start__c, Date_Available_End__c, Day_of_Week_Availability__c, Required_Appointment__c, Appointment_Type_Status__c + FROM Summit_Events_Appointment_Type__c + WHERE Summit_Events__c = :eventId + AND (Restrict_To_Instance_Title__r.Instance_Title__c = :instanceTitle OR Restrict_To_Instance_Title__r.Instance_Title__c = NULL) + AND (Date_Available_Start__c <= :startDate OR Date_Available_Start__c = NULL) + AND (Date_Available_End__c >= :endDate OR Date_Available_End__c = NULL) + AND (Day_of_Week_Availability__c INCLUDES (:dayOfWeek) OR Day_of_Week_Availability__c = NULL) + AND (Appointment_Type_Status__c = 'Active' OR Appointment_Type_Status__c = NULL) + WITH SECURITY_ENFORCED + ORDER BY Sort_Order__c ASC NULLS LAST + ]); + } + public static Integer getAppointmentTypeCount(Id eventId, String instanceTitle, Date startDate, Date endDate, String dayOfWeek) { return [ SELECT COUNT() diff --git a/force-app/main/default/classes/SummitEventsRegisterAppointmentCtlr.cls b/force-app/main/default/classes/SummitEventsRegisterAppointmentCtlr.cls index fa4c3af4..93751646 100644 --- a/force-app/main/default/classes/SummitEventsRegisterAppointmentCtlr.cls +++ b/force-app/main/default/classes/SummitEventsRegisterAppointmentCtlr.cls @@ -42,28 +42,11 @@ public with sharing class SummitEventsRegisterAppointmentCtlr { Map appCount = new Map(); if (!String.isBlank(eventInformation.eventId)) { - eventPage = [ - SELECT Event_Name__c, Event_description__c, Event_Appointment_Title__c, Event_Appointment_Description__c, Event_Footer__c, - Template__c, Event_Home_Link_Title__c, Event_Home_Link_URL__c, Tracking_Options_Registration__c, Event_Full_Text__c, - Close_Event_Days_Before__c, Keep_Registration_Open_During_Event__c, Display_Optional_Donation__c, Event_Appointment_Chosen_Label__c, - Event_Appointment_Unchosen_Label__c, Event_Appointment_Next_Instructions__c, Account__r.Name, Audience__c, Filter_Category__c, Event_Sponsor__c, - Event_Status__c - FROM Summit_Events__c - WHERE Id = :eventInformation.eventId - WITH SECURITY_ENFORCED - ]; - + eventPage = SummitEventsReadShared.getEventById(eventInformation.eventId); templateSelected = SummitEventsShared.getTemplate(eventPage.Template__c); if (!String.isBlank(eventInformation.registrationId)) { - evtInstance = [ - SELECT Instance_Title__c, Event__r.Event_Name__c, - Instance_Time_Zone__c, Instance_Start_Time__c, Instance_End_Time__c, Instance_Start_Date__c, - Instance_End_Date__c, Current_Available_Capacity__c, Active_Status__c, Registration_Close_Date__c, Registration_Close_Time__c - FROM Summit_Events_Instance__c - WHERE Id = :eventInformation.instanceId - WITH SECURITY_ENFORCED - ]; + evtInstance = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); pageFlow = SummitEventsShared.getPageFlow(eventInformation.eventId, evtInstance.Instance_Title__c, ApexPages.currentPage(), evtInstance.Instance_Start_Date__c, evtInstance.Instance_End_Date__c); @@ -73,20 +56,7 @@ public with sharing class SummitEventsRegisterAppointmentCtlr { String dayOfWeek = SummitEventsShared.convertDateToDatetime(evtInstance.Instance_Start_Date__c, null, '').format('EEEE'); // = dayOfWeek; //Build available appointments - appointments = new Map([ - SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Appointment_Limits__c, Chosen_State__c, - Registrant_Input__c, Custom_Picklist__c, Sort_Order__c, Auto_Confirm_Appointment__c, Auto_add_building__c, Auto_Add_Time__c, Do_Not_Show_Time__c, - Date_Available_Start__c, Date_Available_End__c, Day_of_Week_Availability__c, Required_Appointment__c, Appointment_Type_Status__c - FROM Summit_Events_Appointment_Type__c - WHERE Summit_Events__c = :eventInformation.eventId - AND (Restrict_To_Instance_Title__r.Instance_Title__c = :evtInstance.Instance_Title__c OR Restrict_To_Instance_Title__r.Instance_Title__c = NULL) - AND (Date_Available_Start__c <= :evtInstance.Instance_Start_Date__c OR Date_Available_Start__c = NULL) - AND (Date_Available_End__c >= :evtInstance.Instance_End_Date__c OR Date_Available_End__c = NULL) - AND (Day_of_Week_Availability__c INCLUDES (:dayOfWeek) OR Day_of_Week_Availability__c = NULL) - AND (Appointment_Type_Status__c = 'Active' OR Appointment_Type_Status__c = NULL) - WITH SECURITY_ENFORCED - ORDER BY Sort_Order__c ASC NULLS LAST - ]); + appointments = SummitEventsREadShared.getAppointmentTypesByEventId(eventInformation.eventId, evtInstance.Instance_Title__c, evtInstance.Instance_Start_Date__c, evtInstance.Instance_End_Date__c, dayOfWeek); formattedNavDate = SummitEventsShared.navBreadcrumbBuilder(evtInstance); @@ -101,14 +71,7 @@ public with sharing class SummitEventsRegisterAppointmentCtlr { } //Gather up the appointments that have already been chosen. - chosenApps = [ - SELECT Id, Appointment_Category__c, Event_Appointment_Type__c, Appointment_Type__c, Appointment_Title__c, Chosen_State__c, Description__c, Sort_Order__c, - Registrant_Input__c, Do_Not_Show_Time__c - FROM Summit_Events_Appointments__c - WHERE Event_Registration__c = :eventInformation.registrationId - AND Client_Created_Appointment__c = TRUE - WITH SECURITY_ENFORCED - ]; + chosenApps = SummitEventsREadShared.getChosenAppointmentsByRegistrationId(eventInformation.registrationId); //Add the chosen state appointments for (Integer x = 0; x < chosenApps.size(); x++) { @@ -147,7 +110,7 @@ public with sharing class SummitEventsRegisterAppointmentCtlr { addAppointment.appLimit = appLimit; addAppointment.appRequired = apt.Required_Appointment__c; addAppointment.inputRequired = false; - if(String.isNotBlank(apt.Appointment_Type__c)) { + if (String.isNotBlank(apt.Appointment_Type__c)) { addAppointment.appTypeSet = true; } @@ -199,13 +162,7 @@ public with sharing class SummitEventsRegisterAppointmentCtlr { //remove old client created appointments crudToDo doCRUD = new crudToDo(); - List deleteAppointments = [ - SELECT Id, Event_Registration__c, Client_Created_Appointment__c, Chosen_State__c, Do_Not_Show_Time__c - FROM Summit_Events_Appointments__c - WHERE Event_Registration__c = :eventInformation.registrationId - AND Client_Created_Appointment__c = TRUE - WITH SECURITY_ENFORCED - ]; + List deleteAppointments = SummitEventsReadShared.getChosenAppointmentsByRegistrationId(eventInformation.registrationId); doCRUD.deleteAppointments(deleteAppointments); List incomingAppointments = (List) JSON.deserialize(incomingAppointmentJSON, List.class); From 341d3084926941d377bab7973748a2e227e6af35 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 13 Aug 2025 08:20:58 -0500 Subject: [PATCH 55/81] Added more fields to question shared query --- .../classes/SummitEventsAdditionalQuestionsCtlr.cls | 6 +++--- .../main/default/classes/SummitEventsReadShared.cls | 5 ++++- force-app/main/default/classes/SummitEventsShared.cls | 11 +---------- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls index 87590ae0..d39ee69c 100644 --- a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls +++ b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls @@ -66,18 +66,18 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { eventPage = SummitEventsReadShared.getEventById(eventInformation.eventId); eventInstance = SummitEventsReadShared.getInstanceById(eventInformation.instanceId); templateSelected = SummitEventsShared.getTemplate(eventPage.Template__c); - pageFlow = SummitEventsShared.getPageFlow(eventInformation.eventId, eventInstance.Instance_Title__c, ApexPages.currentPage(), eventInstance.Instance_Start_Date__c, eventInstance.Instance_End_Date__c); nextUrl = pageFlow.get('Next').getUrl().toLowerCase(); formattedNavDate = SummitEventsShared.navBreadcrumbBuilder(eventInstance); instanceName = eventInstance.Name; startTimeString = SummitEventsShared.formatTime(eventInstance.Instance_Start_Time__c, false); endTimeString = SummitEventsShared.formatTime(eventInstance.Instance_End_Time__c, false); - eventIsClosed = SummitEventsShared.isEventClosed(eventInstance, eventPage.Event_Status__c); //Get the question object questions - List registrantTypes = new List{'Registrant', 'Registrant and Guest'}; + List registrantTypes = new List{ + 'Registrant', 'Registrant and Guest' + }; additionalQuestions = SummitEventsReadShared.getAdditionalQuestionsByEventId(eventInformation.eventId, registrantTypes); //Get namespace if packaged diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index e57f7996..b95b7009 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -98,7 +98,10 @@ public without sharing class SummitEventsReadShared { public static Map getAdditionalQuestionsByEventId(Id eventId, List registrantTypes) { return new Map([ SELECT Id, Name, Question_Label__c, Question_Field_Type__c, Default_Value__c, Registrant_Type__c, Instructions__c, Help_Text__c, Display_Order__c, - Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c + Map_to_Field__c, Picklist_Values__c, Text_Limit__c, Controlling_Question__c, Controlling_Logic__c, Required__c, Is_Visible__c, Display_Style__c, + Existing_Picklist_Values__c, Picklist_Values_Long__c, Error_Assist_Text__c, Lookup_Results_Icon__c, Lookup_Secondary_Input_Link_Text__c, + Lookup_Secondary_Value_Field__c, Lookup_Secondary_Input_Instructions__c, Lookup_No_Results_Label__c, Lookup_Object__c, Lookup_Fields__c, + Lookup_Where_Clause__c, Lookup_Order_By__c FROM Summit_Events_Question__c WHERE Event__c = :eventId AND Registrant_Type__c IN :registrantTypes diff --git a/force-app/main/default/classes/SummitEventsShared.cls b/force-app/main/default/classes/SummitEventsShared.cls index 11286ef1..ed3ca15e 100644 --- a/force-app/main/default/classes/SummitEventsShared.cls +++ b/force-app/main/default/classes/SummitEventsShared.cls @@ -179,16 +179,7 @@ public with sharing class SummitEventsShared { //check if registration id is there and whether status it is set to registered. IF so reset cookie if it is. if (String.isNotBlank(eventInformation.registrationId) && String.isBlank(eventInformation.valid)) { Summit_Events_Registration__c evtReg = new Summit_Events_Registration__c(); - try { - evtReg = [ - SELECT Status__c - FROM Summit_Events_Registration__c - WHERE Id = :eventInformation.registrationId - WITH SECURITY_ENFORCED - ]; - } catch (Exception ex) { - - } + evtReg = SummitEventsReadShared.getRegistrationById(eventInformation.registrationId); if (evtReg.Status__c != 'Started' || evtReg == null) { eventInformation.registrationId = ''; } From f806c3cab0e85f0b4b02bcbbf096b1aa5cd45bdc Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 13 Aug 2025 09:38:32 -0500 Subject: [PATCH 56/81] updated query to retrieve registration and not build and empty one --- .../default/classes/SummitEventsAdditionalQuestionsCtlr.cls | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls index d39ee69c..3f7ac2d8 100644 --- a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls +++ b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls @@ -83,14 +83,11 @@ public with sharing class SummitEventsAdditionalQuestionsCtlr { //Get namespace if packaged String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); - eventRegistration = new Summit_Events_Registration__c(); + eventRegistration = SummitEventsReadShared.getRegistrationById(eventInformation.registrationId); // eventInformation is an object gathered from the encrypted client cookie that contains a registration id without which thou shall not pass if (String.isNotBlank(eventInformation.registrationId)) { - // Apply the registration id from the cookie to a new registration object - eventRegistration.Id = eventInformation.registrationId; - mapToList = new List(); lookUpDisplayValue = new Map(); From 3d182c1916b8912cd4c4a007f1ac9407c5f615db Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 13 Aug 2025 10:45:33 -0500 Subject: [PATCH 57/81] fixed print itinerary test to deploy --- .../SummitEventsPrintItineraries_TEST.cls | 21 ------------------- .../SummitEventsRegisterGuests_TEST.cls | 1 - 2 files changed, 22 deletions(-) diff --git a/force-app/test/default/classes/SummitEventsPrintItineraries_TEST.cls b/force-app/test/default/classes/SummitEventsPrintItineraries_TEST.cls index 058f0ffd..47301f6e 100644 --- a/force-app/test/default/classes/SummitEventsPrintItineraries_TEST.cls +++ b/force-app/test/default/classes/SummitEventsPrintItineraries_TEST.cls @@ -25,27 +25,6 @@ private class SummitEventsPrintItineraries_TEST { // ApexPages.currentPage().getParameters().put('instanceID', testInstance.Id); List updateRegistrationAppointments = [SELECT Id, Event_Registration__r.Event_Instance__r.Id, Event_Host__c FROM Summit_Events_Appointments__c WHERE Event_Registration__c = :seaTestRegistration.Id]; ApexPages.StandardController sc = new ApexPages.StandardController(updateRegistrationAppointments[0]); - SummitEventsHostAssignmentExtension hostController = new SummitEventsHostAssignmentExtension(sc); - hostController.getRecordTypes(); - hostController.getListHost(); - hostController.assignHost(); - - //Assign a host from test data - hostController.hostId = testHosts[0].Id; - hostController.hostAction = 'assign'; - hostController.assignHost(); - //Get list with already assigned host - hostController.getListHost(); - - //Unassign current host - hostController.hostId = testHosts[0].Id; - hostController.hostAction = 'unassign'; - hostController.assignHost(); - - //Assign a host with capacity reached - hostController.hostId = testHosts[1].Id; - hostController.hostAction = 'assign'; - hostController.assignHost(); List dataAppointmentAdd = new List(); dataAppointmentAdd.add( diff --git a/force-app/test/default/classes/SummitEventsRegisterGuests_TEST.cls b/force-app/test/default/classes/SummitEventsRegisterGuests_TEST.cls index 8182c817..44d4f39a 100644 --- a/force-app/test/default/classes/SummitEventsRegisterGuests_TEST.cls +++ b/force-app/test/default/classes/SummitEventsRegisterGuests_TEST.cls @@ -191,7 +191,6 @@ private class SummitEventsRegisterGuests_TEST { //Deserialize the question JSON from the page so we can check for errors List guestQuestions = (List) JSON.deserialize(guestController.guestQuestionJSON, List.class); System.assertEquals(guestQuestions[0].setupError, 'Field NOT_A_FIELD__c may not exist. '); - System.assertEquals(guestQuestions[1].setupError, 'Field ' + namespace + 'Total_Confirmed_Appointments__c is not writable. '); //Correct encrypted cooke information decrypted System.assertEquals(JSON.serialize(guestController.eventInformation), '{"valid":"true","registrationId":"' + seaTestRegistration.Id + '","instanceId":"' + seaTestInstances[1].Id + '","eventId":"' + seaTestInstances[1].Event__c + '","dt":"' + String.valueOf(nowTime) + '","audience":"Transfer"}'); From 8e8746207f57bb749983dfb0a0f70f56919742ca Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:21:41 -0500 Subject: [PATCH 58/81] Fixed unit tests --- .../SummitEventsAppointmentTriggerHandler.cls | 65 +++++++++---------- .../SummitEventsAppointmentTrigger_TEST.cls | 3 +- 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls index 96a712d6..0212922b 100644 --- a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls +++ b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls @@ -30,37 +30,31 @@ public without sharing class SummitEventsAppointmentTriggerHandler { //Get the all query fields from global picklist String appointmentFields = getAppointmentQueryFields(); - try { - String query = 'SELECT Id, Name, '; - query += namespace + 'Appointment_Time__c,'; - query += namespace + 'Event_Registration__r.Id, '; - query += namespace + 'Event_Registration__r.' + namespace + 'Event_Name__c, '; - query += namespace + 'Appointment_Status__c, '; - query += namespace + 'Chosen_State__c, '; - query += namespace + 'Do_Not_Show_Time__c, '; - query += namespace + 'Sort_Order__c, '; - query += namespace + 'Event_Appointment_Type__r.' + namespace + 'Summit_Events__c, '; - query += namespace + 'Event_Registration__r.' + namespace + 'Event__c,'; - //TODO: Maybe surface up host information on appointment record with formula - query += namespace + 'Event_Host__c, '; - query += namespace + 'Event_Host__r.' + namespace + 'Assigned__c, '; - query += namespace + 'Event_Host__r.' + namespace + 'Time__c, '; - query += namespace + 'Event_Host__r.' + namespace + 'Course_Name__c, '; - query += namespace + 'Event_Host__r.RecordType.Name, '; - query += appointmentFields + ' '; - query += 'FROM ' + namespace + 'Summit_Events_Appointments__c '; - query += 'WHERE ' + namespace + 'Event_Registration__r.Id IN :uniqueRegistrationIds '; - //TODO: Order by date before time - query += 'ORDER BY ' + namespace + 'Appointment_Time__c ASC, '; - query += namespace + 'Event_Host__r.' + namespace + 'Time__c ASC, '; - query += namespace + 'Sort_Order__c, '; - query += namespace + 'Appointment_Title__c ASC '; - allAppointments = CRUDtoDo.getAppointmentByQueryString(query); - } catch (DmlException dmlExc) { - System.debug(dmlExc.getMessage()); - } catch (Exception e) { - System.debug(e.getMessage()); - } + String query = 'SELECT Id, Name, '; + query += namespace + 'Appointment_Time__c,'; + query += namespace + 'Event_Registration__r.Id, '; + query += namespace + 'Event_Registration__r.' + namespace + 'Event_Name__c, '; + query += namespace + 'Appointment_Status__c, '; + query += namespace + 'Chosen_State__c, '; + query += namespace + 'Do_Not_Show_Time__c, '; + query += namespace + 'Sort_Order__c, '; + query += namespace + 'Event_Appointment_Type__r.' + namespace + 'Summit_Events__c, '; + query += namespace + 'Event_Registration__r.' + namespace + 'Event__c,'; + //TODO: Maybe surface up host information on appointment record with formula + query += namespace + 'Event_Host__c, '; + query += namespace + 'Event_Host__r.' + namespace + 'Assigned__c, '; + query += namespace + 'Event_Host__r.' + namespace + 'Time__c, '; + query += namespace + 'Event_Host__r.' + namespace + 'Course_Name__c, '; + query += namespace + 'Event_Host__r.RecordType.Name, '; + query += appointmentFields + ' '; + query += 'FROM ' + namespace + 'Summit_Events_Appointments__c '; + query += 'WHERE ' + namespace + 'Event_Registration__r.Id IN :uniqueRegistrationIds '; + //TODO: Order by date before time + query += 'ORDER BY ' + namespace + 'Appointment_Time__c ASC, '; + query += namespace + 'Event_Host__r.' + namespace + 'Time__c ASC, '; + query += namespace + 'Sort_Order__c, '; + query += namespace + 'Appointment_Title__c ASC '; + allAppointments = CRUDtoDo.getAppointmentByQueryString(query); if (allAppointments.size() > 0) { @@ -198,7 +192,7 @@ public without sharing class SummitEventsAppointmentTriggerHandler { String namespace = SummitEventsNamespace.StrTokenNSPrefix(''); - List PicklistValues = Schema.getGlobalDescribe().get(namespace + 'Summit_Events__c').getDescribe().fields.getMap().get(namespace + 'Itinerary_Item_1__c').getDescribe().getPicklistValues(); + List picklistValues = Schema.SObjectType.Summit_Events__c.fields.getMap().get(namespace + 'Itinerary_Item_1__c').getDescribe().getPicklistValues(); //Get the fields off of the appointment object ot make sure we don't add fields that don't exist Set appointmentObjectFields = Schema.SObjectType.Summit_Events_Appointments__c.fields.getMap().keySet(); @@ -210,7 +204,7 @@ public without sharing class SummitEventsAppointmentTriggerHandler { //Keep track of already added fields so as not to corrupt the query with a duplicate Set fieldsFound = new Set(); - for (Schema.PicklistEntry PicklistValue : PicklistValues) { + for (Schema.PicklistEntry PicklistValue : picklistValues) { //Make sure the picklist value is indeed a field ending with __c if (PicklistValue.getValue().endsWithIgnoreCase('__c')) { @@ -247,12 +241,13 @@ public without sharing class SummitEventsAppointmentTriggerHandler { } private List getAppointmentByQueryString(String query) { + List appointments = new List(); try { - return Database.query(query); + appointments = Database.query(query); } catch (Exception e) { System.debug(e.getMessage()); - return null; } + return appointments; } } diff --git a/force-app/test/default/classes/SummitEventsAppointmentTrigger_TEST.cls b/force-app/test/default/classes/SummitEventsAppointmentTrigger_TEST.cls index 0a2814e0..42e983ce 100644 --- a/force-app/test/default/classes/SummitEventsAppointmentTrigger_TEST.cls +++ b/force-app/test/default/classes/SummitEventsAppointmentTrigger_TEST.cls @@ -43,7 +43,8 @@ private class SummitEventsAppointmentTrigger_TEST { newAppointment.Description__c = 'TEST Description'; newAppointment.Appointment_Title__c = 'TEST TITLE 2'; insert newAppointment; - Summit_Events_Registration__c affectedEvent = [SELECT Id, Generated_Requested_Appointments__c, Generated_Itinerary__c FROM Summit_Events_Registration__c WHERE Id = :seaTestRegistration.Id]; + + Summit_Events_Registration__c affectedEvent = [SELECT Id, Registrant_First_Name__c, Generated_Requested_Appointments__c, Generated_Itinerary__c FROM Summit_Events_Registration__c WHERE Id = :seaTestRegistration.Id]; System.runAs(testUser) { System.assertEquals('TEST TITLE 2
TEST Description', affectedEvent.Generated_Requested_Appointments__c); From 769fc2d3e40f16dd1ceb7ba3e199a56c472f1d8c Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:50:46 -0500 Subject: [PATCH 59/81] fixed appointment trigger handler to query appointments in without sharing context --- .../classes/SummitEventsAppointmentTriggerHandler.cls | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls index 0212922b..dbca343a 100644 --- a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls +++ b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls @@ -54,7 +54,7 @@ public without sharing class SummitEventsAppointmentTriggerHandler { query += namespace + 'Event_Host__r.' + namespace + 'Time__c ASC, '; query += namespace + 'Sort_Order__c, '; query += namespace + 'Appointment_Title__c ASC '; - allAppointments = CRUDtoDo.getAppointmentByQueryString(query); + allAppointments = CRUDtoDo.getAppointmentByQueryString(query, uniqueRegistrationIds); if (allAppointments.size() > 0) { @@ -240,10 +240,13 @@ public without sharing class SummitEventsAppointmentTriggerHandler { } } - private List getAppointmentByQueryString(String query) { + private List getAppointmentByQueryString(String query, Set registrationIds) { List appointments = new List(); + //convert set to list + List uniqueRegistrationIds = new List(registrationIds); try { appointments = Database.query(query); + System.debug('Found ' + appointments.size() + ' appointments'); } catch (Exception e) { System.debug(e.getMessage()); } From 6a17f56adbfe8ae8f93a37f400f9f17ab19ffe52 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:55:00 -0500 Subject: [PATCH 60/81] removed sharing rule deployment from cumulus ci build --- ...ents_Fee_Allocation__c.sharingRules-meta.xml | 17 ----------------- .../Summit_Events__c.sharingRules-meta.xml | 17 ----------------- 2 files changed, 34 deletions(-) delete mode 100644 unpackaged/config/sharing/sharingRules/Summit_Events_Fee_Allocation__c.sharingRules-meta.xml delete mode 100644 unpackaged/config/sharing/sharingRules/Summit_Events__c.sharingRules-meta.xml diff --git a/unpackaged/config/sharing/sharingRules/Summit_Events_Fee_Allocation__c.sharingRules-meta.xml b/unpackaged/config/sharing/sharingRules/Summit_Events_Fee_Allocation__c.sharingRules-meta.xml deleted file mode 100644 index dd5e71f0..00000000 --- a/unpackaged/config/sharing/sharingRules/Summit_Events_Fee_Allocation__c.sharingRules-meta.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Guest_Fee_Allocation_Access - Read - - - Summit_Events - - - Name - notEqual - null - - false - - diff --git a/unpackaged/config/sharing/sharingRules/Summit_Events__c.sharingRules-meta.xml b/unpackaged/config/sharing/sharingRules/Summit_Events__c.sharingRules-meta.xml deleted file mode 100644 index aafd8b49..00000000 --- a/unpackaged/config/sharing/sharingRules/Summit_Events__c.sharingRules-meta.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Summit_Event_Guest_User_Access - Read - - - Summit_Events - - - %%%NAMESPACE%%%Event_Name__c - notEqual - null - - false - - From 156d128910e36b0c9aa8652a89453f48c42690e8 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 13 Aug 2025 12:05:14 -0500 Subject: [PATCH 61/81] removed all but account sharing (only for testing) from cci build --- unpackaged/config/sharing/package.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/unpackaged/config/sharing/package.xml b/unpackaged/config/sharing/package.xml index 1d8a5cb6..460488f6 100644 --- a/unpackaged/config/sharing/package.xml +++ b/unpackaged/config/sharing/package.xml @@ -1,16 +1,8 @@ - - Summit_Events__c - SharingRules - Account SharingRules - - Summit_Events_Fee_Allocation__c - SharingRules - 60.0 From 6e18da13c1e8b3d75756a7565b4244178bc58b86 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 13 Aug 2025 12:56:41 -0500 Subject: [PATCH 62/81] added registrant first/last name to reg query that somehow whent missing --- force-app/main/default/classes/SummitEventsReadShared.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index b95b7009..31ad89bc 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -88,7 +88,7 @@ public without sharing class SummitEventsReadShared { utm_creative_format__c, utm_id__c, utm_marketing_tactic__c, utm_medium__c, utm_source__c, utm_source_platform__c, utm_term__c, Dietary_Ristrictions__c, Accessibility_Need__c, Accessibility_Need_Detail__c, reCAPTCHA_Score__c, Registrant_Date_of_Birth_Text__c, Guest_JSON__c, Event__r.Payment_Gateway__c, Event_Instance_Date_Time_Formatted__c, Event_Instance__c, Event_Instance__r.Instance_Title__c, Event__c, - Generated_Itinerary__c, Generated_Requested_Appointments__c + Generated_Itinerary__c, Generated_Requested_Appointments__c, Registrant_First_Name__c, Registrant_Last_Name__c FROM Summit_Events_Registration__c WHERE Id = :registrationId WITH SECURITY_ENFORCED From 1cba3b391052f9559da681442fd3012eef086f46 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Thu, 14 Aug 2025 09:15:00 -0500 Subject: [PATCH 63/81] Fixed event fee duplication --- .../classes/SummitEventsReadShared.cls | 44 ++++++++++++++++--- .../SummitEventsRegisterController.cls | 42 ++++++------------ 2 files changed, 52 insertions(+), 34 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index 31ad89bc..5f4cf737 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -1,6 +1,15 @@ +// Copyright (c) 2020, Salesforce.org. All rights reserved. +// Use of this source code is governed by a BSD 3-Clause. +// License can be found found in the LICENSE file in this repository. +// Created by Thaddaeus Dahlberg on 8/11/2025. + /** - * Created by Thad-PC-2019 on 8/11/2025. - */ + * Summit Events is a multi-step, guest user, registration solution so CRUD work needs to be done on records where guest record ownership is lost between steps. + * The security aspects of guest record updating is achieved by: + * - Using an encrypted cookie on the client browser to keep track of registration id, event id, instance id, and audience + * - Dividing each controller class into a "with sharing" logic area and a sub "without sharing" CRUD area for purposeful CRUD + * - When the encrypted cookie is not available as in the cancel registration link an encrypted string is provided through the URL to not expose the SF ID related to the record + **/ public without sharing class SummitEventsReadShared { public static Summit_Events_Instance__c getInstanceById(Id instanceId) { @@ -110,7 +119,7 @@ public without sharing class SummitEventsReadShared { ]); } - Public static List getAppointmentsByRegistrationId(Id registrationId) { + public static List getAppointmentsByRegistrationId(Id registrationId) { return [ SELECT Id, Appointment_Category__c, Event_Appointment_Type__c, Appointment_Type__c, Description__c, Appointment_Title__c, Chosen_State__c, Registrant_Input__c @@ -144,8 +153,8 @@ public without sharing class SummitEventsReadShared { public static List getFeesByRegistrationId(Id registrationId) { return [ - SELECT Id, Name, Event_Fee__c, Event_Fee_Allocation__c, Description__c, Event_Fee_Type__c, Event_Appointment_Type__c, - Event_Appointment_Type__r.Title__c, Event_Fee_Allocation__r.Name + SELECT Id, Name, Event_Registration__c, Event_Fee__c, Event_Fee_Allocation__c, Description__c, Event_Fee_Type__c, Event_Appointment_Type__c, + Summit_Events__c, Summit_Events_Payment__c, Event_Appointment_Type__r.Title__c, Event_Fee_Allocation__r.Name FROM Summit_Events_Fee__c WHERE Event_Registration__c = :registrationId WITH SECURITY_ENFORCED @@ -154,7 +163,8 @@ public without sharing class SummitEventsReadShared { public static List getDonationsByRegistrationId(Id registrationId) { return [ - SELECT Id, Event_Registration__c, Event_Fee__c, Event_Fee_Allocation__c + SELECT Id, Name, Event_Registration__c, Event_Fee__c, Event_Fee_Allocation__c, Description__c, Event_Fee_Type__c, Event_Appointment_Type__c, + Summit_Events__c, Summit_Events_Payment__c, Event_Appointment_Type__r.Title__c, Event_Fee_Allocation__r.Name FROM Summit_Events_Fee__c WHERE Event_Registration__c = :registrationId AND Event_Fee_Type__c = 'Optional Donation' @@ -162,6 +172,28 @@ public without sharing class SummitEventsReadShared { ]; } + public static List getEventFeesByRegistrationId(Id registrationId) { + return [ + SELECT Id, Event_Fee_Type__c, Event_Fee_Allocation__c, Event_Fee__c + FROM Summit_Events_Fee__c + WHERE Event_Fee_Type__c != 'Appointment' + AND Event_Fee_Type__c != 'Appointment Additional' + AND Event_Fee_Type__c != 'Optional Donation' + AND Event_Registration__c = :registrationId + WITH SECURITY_ENFORCED + ]; + } + + public static List getFeesToDeleteByRegIdFeeIdList(Id registrationId, List recordedUsedIds) { + return [ + SELECT Id, Event_Fee_Type__c, Event_Fee_Allocation__c, Event_Fee__c + FROM Summit_Events_Fee__c + WHERE Event_Registration__c = :registrationId + AND Id IN :recordedUsedIds + WITH SECURITY_ENFORCED + ]; + } + public static Map getAppointmentTypesByEventId(Id eventId, String instanceTitle, Date startDate, Date endDate, String dayOfWeek) { return new Map([ SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Appointment_Limits__c, Chosen_State__c, diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 9b58d059..bd4cc927 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -449,7 +449,7 @@ public with sharing class SummitEventsRegisterController { eventRegistration.Registrant_Date_of_Birth__c = Date.parse(birthDateString); } - if(eventRegistration.Registrant_Date_of_Birth__c != null){ + if (eventRegistration.Registrant_Date_of_Birth__c != null) { Datetime birthDateTime = Datetime.newInstance(eventRegistration.Registrant_Date_of_Birth__c, Time.newInstance(0, 0, 0, 0)); String formattedBirthDateString = birthDateTime.format('yyyy-MM-dd'); eventRegistration.Registrant_Date_of_Birth_Text__c = formattedBirthDateString; @@ -465,16 +465,14 @@ public with sharing class SummitEventsRegisterController { eventRegistration.Registrant_Applicant_Type__c = 'Graduate'; } + eventRegistration.Status__c = 'Started'; + eventRegistration.Event_Instance_Date_Time_Formatted__c = SummitEventsShared.navBreadcrumbBuilder(evtInstance); + eventRegistration.Event__c = eventInformation.eventId; + eventRegistration.Event_Instance__c = eventInformation.instanceId; + eventInformation.registrationId = eventRegistration.Id; + //Check and create fees and save on registration - List recordedEventFeeList = [ - SELECT Id, Event_Fee_Type__c, Event_Fee_Allocation__c, Event_Fee__c - FROM Summit_Events_Fee__c - WHERE Event_Fee_Type__c != 'Appointment' - AND Event_Fee_Type__c != 'Appointment Additional' - AND Event_Fee_Type__c != 'Optional Donation' - AND Event_Registration__c = :eventInformation.registrationId - WITH SECURITY_ENFORCED - ]; + List recordedEventFeeList = SummitEventsReadShared.getEventFeesByRegistrationId(eventInformation.registrationId); if (recordedEventFeeList.size() > 0) { //Fees already exist so checks need to be made if current fees are there List recordedUsedIds = new List(); @@ -486,29 +484,17 @@ public with sharing class SummitEventsRegisterController { } } } - List deleteEventFees = [ - SELECT Id, Event_Fee_Type__c, Event_Fee_Allocation__c, Event_Fee__c - FROM Summit_Events_Fee__c - WHERE Event_Fee_Type__c != 'Appointment' - AND Event_Fee_Type__c != 'Appointment Additional' - AND Event_Fee_Type__c != 'Optional Donation' - AND Event_Registration__c = :eventInformation.registrationId - AND Id NOT IN :recordedUsedIds - WITH SECURITY_ENFORCED - ]; + + //Get all currently recorded event fees and delete them + List deleteEventFees = SummitEventsReadShared.getFeesToDeleteByRegIdFeeIdList(eventInformation.registrationId, recordedUsedIds); + + System.debug('deleteEventFees: ' + deleteEventFees); if (deleteEventFees.size() > 0) { rCRUD.deleteFees(deleteEventFees); } } - eventRegistration.Status__c = 'Started'; - eventRegistration.Event_Instance_Date_Time_Formatted__c = SummitEventsShared.navBreadcrumbBuilder(evtInstance); - eventRegistration.Event__c = eventInformation.eventId; - eventRegistration.Event_Instance__c = eventInformation.instanceId; - - eventRegistration = rCRUD.updateRegistration(eventRegistration, incomingEventRegistrationId, registrantAudience, eventFeeList); - - eventInformation.registrationId = eventRegistration.Id; + eventRegistration = rCRUD.updateRegistration(eventRegistration, eventInformation.registrationId, registrantAudience, eventFeeList); String dayOfWeek = SummitEventsShared.convertDateToDatetime(evtInstance.Instance_Start_Date__c, null, '').format('EEEE'); //Insert pre-chosen appointments for appointments page From f9b10867b8aa6e151f07c54438e128fa7b4de4db Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Thu, 14 Aug 2025 09:53:17 -0500 Subject: [PATCH 64/81] fixed unit test for reordered event fee deletion --- .../test/default/classes/SummitEventsRegister_TEST.cls | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/force-app/test/default/classes/SummitEventsRegister_TEST.cls b/force-app/test/default/classes/SummitEventsRegister_TEST.cls index 322af639..227d638e 100644 --- a/force-app/test/default/classes/SummitEventsRegister_TEST.cls +++ b/force-app/test/default/classes/SummitEventsRegister_TEST.cls @@ -280,8 +280,8 @@ private class SummitEventsRegister_TEST { AND Registrant_Last_Name__c = 'Tester' AND Registrant_Email__c = 'test@test.net' ]; - //Original registration details have changed so old data should not exist. - System.assertEquals(registrations.size(), 0); + + System.assertEquals(registrations.size(), 1); registrations = [ SELECT Id, Name, Registrant_First_Name__c, Registrant_Last_Name__c, Registrant_Email__c @@ -335,8 +335,8 @@ private class SummitEventsRegister_TEST { FROM Summit_Events_Fee__c WHERE Event_Registration__c = :registerController.eventRegistration.Id ]; - //Extra added fee should be deleted and two should remain - System.assertEquals(fees.size(), 2); + //Extra added fee should be deleted and one should remain + System.assertEquals(fees.size(), 1); Test.stopTest(); } } From 802c4dc011574c6281f887907e2f6ffca532aa2c Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Thu, 14 Aug 2025 10:01:49 -0500 Subject: [PATCH 65/81] fixed issue where first,last,email change created a new registration rather than update old --- .../main/default/classes/SummitEventsRegisterController.cls | 2 +- force-app/test/default/classes/SummitEventsRegister_TEST.cls | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index bd4cc927..5838b27c 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -494,7 +494,7 @@ public with sharing class SummitEventsRegisterController { } } - eventRegistration = rCRUD.updateRegistration(eventRegistration, eventInformation.registrationId, registrantAudience, eventFeeList); + eventRegistration = rCRUD.updateRegistration(eventRegistration, incomingEventRegistrationId, registrantAudience, eventFeeList); String dayOfWeek = SummitEventsShared.convertDateToDatetime(evtInstance.Instance_Start_Date__c, null, '').format('EEEE'); //Insert pre-chosen appointments for appointments page diff --git a/force-app/test/default/classes/SummitEventsRegister_TEST.cls b/force-app/test/default/classes/SummitEventsRegister_TEST.cls index 227d638e..5622cce0 100644 --- a/force-app/test/default/classes/SummitEventsRegister_TEST.cls +++ b/force-app/test/default/classes/SummitEventsRegister_TEST.cls @@ -281,7 +281,7 @@ private class SummitEventsRegister_TEST { AND Registrant_Email__c = 'test@test.net' ]; - System.assertEquals(registrations.size(), 1); + System.assertEquals(registrations.size(), 0); registrations = [ SELECT Id, Name, Registrant_First_Name__c, Registrant_Last_Name__c, Registrant_Email__c From 70f15d617a8eee7e435cc2ea55932ac277186ccd Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Thu, 14 Aug 2025 10:43:30 -0500 Subject: [PATCH 66/81] replaced shared query with inline query for itinerary admin view --- .../classes/SummitEventsGeneratedItinerariesExt.cls | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls b/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls index 805540c0..255d1685 100644 --- a/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls +++ b/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls @@ -10,7 +10,12 @@ public with sharing class SummitEventsGeneratedItinerariesExt { public SummitEventsGeneratedItinerariesExt(ApexPages.StandardController stdController) { seaRegistration = (Summit_Events_Registration__c) stdController.getRecord(); - Summit_Events_Registration__c registration = SummitEventsReadShared.getRegistrationById(seaRegistration.Id); + Id regId = seaRegistration.Id; + Summit_Events_Registration__c registration = [ + SELECT Id, Generated_Itinerary__c, Generated_Requested_Appointments__c + FROM Summit_Events_Registration__c + WHERE Id = :regId + ]; generatedItinerary = registration.Generated_Itinerary__c; requestedItinerary = registration.Generated_Requested_Appointments__c; } From 24b1e4bafacd67807ac625c40775c7f526823211 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Thu, 14 Aug 2025 11:28:51 -0500 Subject: [PATCH 67/81] No longer deleting fees on registration page, just update old ones or insert --- .../default/classes/SummitEventsReadShared.cls | 10 ---------- .../classes/SummitEventsRegisterController.cls | 16 +++------------- .../classes/SummitEventsRegister_TEST.cls | 4 ++-- 3 files changed, 5 insertions(+), 25 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index 5f4cf737..31b3161f 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -184,16 +184,6 @@ public without sharing class SummitEventsReadShared { ]; } - public static List getFeesToDeleteByRegIdFeeIdList(Id registrationId, List recordedUsedIds) { - return [ - SELECT Id, Event_Fee_Type__c, Event_Fee_Allocation__c, Event_Fee__c - FROM Summit_Events_Fee__c - WHERE Event_Registration__c = :registrationId - AND Id IN :recordedUsedIds - WITH SECURITY_ENFORCED - ]; - } - public static Map getAppointmentTypesByEventId(Id eventId, String instanceTitle, Date startDate, Date endDate, String dayOfWeek) { return new Map([ SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Appointment_Limits__c, Chosen_State__c, diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 5838b27c..219ad290 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -469,29 +469,19 @@ public with sharing class SummitEventsRegisterController { eventRegistration.Event_Instance_Date_Time_Formatted__c = SummitEventsShared.navBreadcrumbBuilder(evtInstance); eventRegistration.Event__c = eventInformation.eventId; eventRegistration.Event_Instance__c = eventInformation.instanceId; - eventInformation.registrationId = eventRegistration.Id; + eventInformation.registrationId = incomingEventRegistrationId; //Check and create fees and save on registration - List recordedEventFeeList = SummitEventsReadShared.getEventFeesByRegistrationId(eventInformation.registrationId); + List recordedEventFeeList = SummitEventsReadShared.getEventFeesByRegistrationId(incomingEventRegistrationId); if (recordedEventFeeList.size() > 0) { //Fees already exist so checks need to be made if current fees are there - List recordedUsedIds = new List(); for (Integer ff = 0; ff < eventFeeList.size(); ff++) { for (Summit_Events_Fee__c recordedFees : recordedEventFeeList) { if (eventFeeList[ff].Event_Fee_Type__c == recordedFees.Event_Fee_Type__c) { eventFeeList[ff].Id = recordedFees.Id; - recordedUsedIds.add(recordedFees.Id); } } } - - //Get all currently recorded event fees and delete them - List deleteEventFees = SummitEventsReadShared.getFeesToDeleteByRegIdFeeIdList(eventInformation.registrationId, recordedUsedIds); - - System.debug('deleteEventFees: ' + deleteEventFees); - if (deleteEventFees.size() > 0) { - rCRUD.deleteFees(deleteEventFees); - } } eventRegistration = rCRUD.updateRegistration(eventRegistration, incomingEventRegistrationId, registrantAudience, eventFeeList); @@ -594,7 +584,7 @@ public with sharing class SummitEventsRegisterController { } try { if (Schema.SObjectType.Summit_Events_Registration__c.isCreateable()) { - insert upsertFees; + upsert upsertFees; } } catch (Exception ex) { System.debug(ex.getMessage()); diff --git a/force-app/test/default/classes/SummitEventsRegister_TEST.cls b/force-app/test/default/classes/SummitEventsRegister_TEST.cls index 5622cce0..2b67e2c0 100644 --- a/force-app/test/default/classes/SummitEventsRegister_TEST.cls +++ b/force-app/test/default/classes/SummitEventsRegister_TEST.cls @@ -335,8 +335,8 @@ private class SummitEventsRegister_TEST { FROM Summit_Events_Fee__c WHERE Event_Registration__c = :registerController.eventRegistration.Id ]; - //Extra added fee should be deleted and one should remain - System.assertEquals(fees.size(), 1); + //Fees no longer get deleted, so the stray fee should still be there + System.assertEquals(fees.size(), 3); Test.stopTest(); } } From 4d3d68ed13f2852f92f904034020dc01d6848bb5 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 3 Sep 2025 09:05:52 -0500 Subject: [PATCH 68/81] fix for auto add appointments, fees being receipted --- .../objects/Contact/Contact.object-meta.xml | 2 -- ...mmit__Summit_Events__c.sharingRules-meta.xml | 17 ----------------- 2 files changed, 19 deletions(-) delete mode 100644 force-app/main/default/objects/Contact/Contact.object-meta.xml delete mode 100644 unpackaged/config/summit__sharing/sharingRules/summit__Summit_Events__c.sharingRules-meta.xml diff --git a/force-app/main/default/objects/Contact/Contact.object-meta.xml b/force-app/main/default/objects/Contact/Contact.object-meta.xml deleted file mode 100644 index d254e9b0..00000000 --- a/force-app/main/default/objects/Contact/Contact.object-meta.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/unpackaged/config/summit__sharing/sharingRules/summit__Summit_Events__c.sharingRules-meta.xml b/unpackaged/config/summit__sharing/sharingRules/summit__Summit_Events__c.sharingRules-meta.xml deleted file mode 100644 index a90f1319..00000000 --- a/unpackaged/config/summit__sharing/sharingRules/summit__Summit_Events__c.sharingRules-meta.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Summit_Event_Guest_User_Access - Read - - - Summit_Events - - - summit__Event_Name__c - notEqual - null - - false - - From 77212119cdcf83fda368574c18439f75fe308790 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 3 Sep 2025 09:06:11 -0500 Subject: [PATCH 69/81] fix for auto add appointments, fees being receipted --- cumulusci.yml | 30 +++++--------- .../SummitEventsAppointmentTriggerHandler.cls | 1 - .../SummitEventsConfirmationController.cls | 6 +-- .../classes/SummitEventsReadShared.cls | 41 ++++++++++++++++++- .../SummitEventsRegisterController.cls | 30 ++++---------- 5 files changed, 59 insertions(+), 49 deletions(-) diff --git a/cumulusci.yml b/cumulusci.yml index ffb09940..a95713f1 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -72,7 +72,7 @@ tasks: } deploy_guest_permission_set: - description: Give System Admins Event Admin Permission Set + description: Give Guest User Registrant Permission Set class_path: cumulusci.tasks.apex.anon.AnonymousApexTask options: namespace_inject: $project_config.project__package__namespace @@ -91,10 +91,8 @@ tasks: List permissionSetList = new List(); for (Site site : sites) { - if (site.GuestUserId == null) { - for (permissionSet ps : eventPermissionSets) { - PermissionSetList.add(new PermissionSetAssignment(PermissionSetId = ps.Id, AssigneeId = site.GuestUserId)); - } + for (permissionSet ps : eventPermissionSets) { + PermissionSetList.add(new PermissionSetAssignment(PermissionSetId = ps.Id, AssigneeId = site.GuestUserId)); } } @@ -134,30 +132,26 @@ flows: config_qa: steps: 3: - task: deploy_community - 4: task: deploy_permission_set + 4: + task: deploy_site_config 5: - task: deploy_guest_permission_set - 6: - task: deploy_guest_sharing_rules - 7: task: deploy_site_settings + 6: + task: deploy_guest_permission_set 8: task: create_fake_school_data config_dev: steps: 3: - task: deploy_community - 4: task: deploy_permission_set + 4: + task: deploy_site_config 5: - task: deploy_guest_permission_set - 6: - task: deploy_guest_sharing_rules - 7: task: deploy_site_settings + 6: + task: deploy_guest_permission_set 8: task: create_fake_school_data @@ -171,8 +165,6 @@ flows: task: deploy_site_settings 6: task: deploy_guest_permission_set - 7: - task: deploy_guest_sharing_rules 8: task: create_fake_school_data diff --git a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls index dbca343a..77cf5550 100644 --- a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls +++ b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls @@ -246,7 +246,6 @@ public without sharing class SummitEventsAppointmentTriggerHandler { List uniqueRegistrationIds = new List(registrationIds); try { appointments = Database.query(query); - System.debug('Found ' + appointments.size() + ' appointments'); } catch (Exception e) { System.debug(e.getMessage()); } diff --git a/force-app/main/default/classes/SummitEventsConfirmationController.cls b/force-app/main/default/classes/SummitEventsConfirmationController.cls index b1f52cee..08c4cb09 100644 --- a/force-app/main/default/classes/SummitEventsConfirmationController.cls +++ b/force-app/main/default/classes/SummitEventsConfirmationController.cls @@ -224,11 +224,7 @@ public with sharing class SummitEventsConfirmationController { public PageReference checkForPayment() { String errorMessage = ''; PageReference pageRef = null; - List payments = [ - SELECT Id, Payment_Amount__c - FROM Summit_Events_Payment__c - WHERE Event_Registration__c = :eventInformation.registrationId - ]; + List payments = SummitEventsReadShared.getPaymentsByRegistrationId(eventInformation.registrationId); if (payments.size() > 0) { paymentReceived = true; } else if (payments.size() == 0) { diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index 31b3161f..4f2c7083 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -144,7 +144,7 @@ public without sharing class SummitEventsReadShared { public static List getPaymentsByRegistrationId(Id registrationId) { return [ - SELECT Id, Payment_Amount__c, TouchnetReceiptNumber__c, Event_Registration__c + SELECT Id, TouchnetReceiptNumber__c, Event_Registration__c, Payment_Amount__c FROM Summit_Events_Payment__c WHERE Event_Registration__c = :registrationId WITH SECURITY_ENFORCED @@ -159,6 +159,7 @@ public without sharing class SummitEventsReadShared { WHERE Event_Registration__c = :registrationId WITH SECURITY_ENFORCED ]; + } public static List getDonationsByRegistrationId(Id registrationId) { @@ -184,6 +185,44 @@ public without sharing class SummitEventsReadShared { ]; } + public static List getAutoAddAppointments(Id registrationId, Id eventId, String instanceTitle, Date instanceStartDate, Date instanceEndDate, String dayOfWeek) { + return [ + SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Registrant_Input__c, Custom_Picklist__c, Appointment_Limits__c, + Chosen_State__c, Sort_Order__c, Auto_Confirm_Appointment__c, Auto_add_building__c, Auto_Add_Time__c, Do_Not_Show_Time__c + FROM Summit_Events_Appointment_Type__c + WHERE Summit_Events__c = :eventId + AND (Chosen_State__c = 'Added' OR Chosen_State__c = 'Added and Required' OR Chosen_State__c = 'Added but not shown') + AND Id NOT IN ( + SELECT Event_Appointment_Type__c + FROM Summit_Events_Appointments__c + WHERE Event_Registration__c = :registrationId + ) + AND ( + Restrict_To_Instance_Title__r.Instance_Title__c = :instanceTitle + OR Restrict_To_Instance_Title__r.Instance_Title__c = NULL + OR Restrict_To_Instance_Title__r.Instance_Title__c = '' + ) + AND ( + Date_Available_Start__c <= :instanceStartDate + OR Date_Available_Start__c = NULL + ) + AND ( + Date_Available_End__c >= :instanceEndDate + OR Date_Available_End__c = NULL + ) + AND ( + Day_of_Week_Availability__c INCLUDES (:dayOfWeek) + OR Day_of_Week_Availability__c = NULL + ) + AND ( + Appointment_Type_Status__c = 'Active' + OR Appointment_Type_Status__c = NULL + ) + WITH SECURITY_ENFORCED + ORDER BY Sort_Order__c ASC NULLS LAST + ]; + } + public static Map getAppointmentTypesByEventId(Id eventId, String instanceTitle, Date startDate, Date endDate, String dayOfWeek) { return new Map([ SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Appointment_Limits__c, Chosen_State__c, diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 219ad290..433548e3 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -486,28 +486,17 @@ public with sharing class SummitEventsRegisterController { eventRegistration = rCRUD.updateRegistration(eventRegistration, incomingEventRegistrationId, registrantAudience, eventFeeList); + System.debug('Saved Registration id: ' + eventRegistration.Id); String dayOfWeek = SummitEventsShared.convertDateToDatetime(evtInstance.Instance_Start_Date__c, null, '').format('EEEE'); + //Insert pre-chosen appointments for appointments page - List autoAddAppt = [ - SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Registrant_Input__c, Custom_Picklist__c, Appointment_Limits__c, - Chosen_State__c, Sort_Order__c, Auto_Confirm_Appointment__c, Auto_add_building__c, Auto_Add_Time__c, Do_Not_Show_Time__c - FROM Summit_Events_Appointment_Type__c - WHERE Summit_Events__c = :eventInformation.eventId - AND (Chosen_State__c = 'Added' OR Chosen_State__c = 'Added and Required' OR Chosen_State__c = 'Added but not shown') - AND Id NOT IN (SELECT Event_Appointment_Type__c FROM Summit_Events_Appointments__c WHERE Event_Registration__c = :eventInformation.registrationId) - AND (Restrict_To_Instance_Title__r.Instance_Title__c = :evtInstance.Instance_Title__c OR Restrict_To_Instance_Title__r.Instance_Title__c = NULL OR Restrict_To_Instance_Title__r.Instance_Title__c = '') - AND (Date_Available_Start__c <= :evtInstance.Instance_Start_Date__c OR Date_Available_Start__c = NULL) - AND (Date_Available_End__c >= :evtInstance.Instance_End_Date__c OR Date_Available_End__c = NULL) - AND (Day_of_Week_Availability__c INCLUDES (:dayOfWeek) OR Day_of_Week_Availability__c = NULL) - AND (Appointment_Type_Status__c = 'Active' OR Appointment_Type_Status__c = NULL) - ORDER BY Sort_Order__c ASC NULLS LAST - ]; + List autoAddAppt = SummitEventsReadShared.getAutoAddAppointments(eventRegistration.Id, eventInformation.eventId, evtInstance.Instance_Title__c, evtInstance.Instance_Start_Date__c, evtInstance.Instance_End_Date__c, dayOfWeek); List appointmentsToAdd = new List(); for (Summit_Events_Appointment_Type__c appt : autoAddAppt) { Summit_Events_Appointments__c addAppt = new Summit_Events_Appointments__c(); addAppt.Event_Appointment_Type__c = appt.Id; - addAppt.Event_Registration__c = eventInformation.registrationId; + addAppt.Event_Registration__c = eventRegistration.Id; addAppt.Appointment_Title__c = appt.Title__c; //If appointment is not shown and auto confirmed confirm it! if (appt.Auto_Confirm_Appointment__c) { @@ -532,7 +521,9 @@ public with sharing class SummitEventsRegisterController { addAppt.Do_Not_Show_Time__c = appt.Do_Not_Show_Time__c; appointmentsToAdd.add(addAppt); } + System.debug('Appointments to add: ' + JSON.serializePretty(appointmentsToAdd)); if (appointmentsToAdd.size() > 0) { + System.debug('Inserting ' + appointmentsToAdd.size() + ' appointments'); rCRUD.insertAppointments(appointmentsToAdd); } @@ -597,18 +588,11 @@ public with sharing class SummitEventsRegisterController { return eventRegistration; } - public void deleteFees(List deletableFees) { - try { - delete deletableFees; - } catch (Exception ex) { - System.debug(ex.getMessage()); - } - } - public void insertAppointments(List appointments) { try { insert appointments; } catch (Exception ex) { + System.debug(ex.getMessage()); ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.WARNING, ex.getMessage())); } } From fa6ad792375f5093be3a2cb7fee3949f84f15a05 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 3 Sep 2025 09:46:13 -0500 Subject: [PATCH 70/81] fix for auto add appointments, fees being receipted --- .../SummitEventsAppointmentTriggerHandler.cls | 1 - .../SummitEventsConfirmationController.cls | 6 +-- .../classes/SummitEventsReadShared.cls | 39 +++++++++++++++++++ .../SummitEventsRegisterController.cls | 26 ++----------- 4 files changed, 43 insertions(+), 29 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls index dbca343a..77cf5550 100644 --- a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls +++ b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls @@ -246,7 +246,6 @@ public without sharing class SummitEventsAppointmentTriggerHandler { List uniqueRegistrationIds = new List(registrationIds); try { appointments = Database.query(query); - System.debug('Found ' + appointments.size() + ' appointments'); } catch (Exception e) { System.debug(e.getMessage()); } diff --git a/force-app/main/default/classes/SummitEventsConfirmationController.cls b/force-app/main/default/classes/SummitEventsConfirmationController.cls index b1f52cee..08c4cb09 100644 --- a/force-app/main/default/classes/SummitEventsConfirmationController.cls +++ b/force-app/main/default/classes/SummitEventsConfirmationController.cls @@ -224,11 +224,7 @@ public with sharing class SummitEventsConfirmationController { public PageReference checkForPayment() { String errorMessage = ''; PageReference pageRef = null; - List payments = [ - SELECT Id, Payment_Amount__c - FROM Summit_Events_Payment__c - WHERE Event_Registration__c = :eventInformation.registrationId - ]; + List payments = SummitEventsReadShared.getPaymentsByRegistrationId(eventInformation.registrationId); if (payments.size() > 0) { paymentReceived = true; } else if (payments.size() == 0) { diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls b/force-app/main/default/classes/SummitEventsReadShared.cls index 31b3161f..5f77c0ec 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls +++ b/force-app/main/default/classes/SummitEventsReadShared.cls @@ -159,6 +159,7 @@ public without sharing class SummitEventsReadShared { WHERE Event_Registration__c = :registrationId WITH SECURITY_ENFORCED ]; + } public static List getDonationsByRegistrationId(Id registrationId) { @@ -184,6 +185,44 @@ public without sharing class SummitEventsReadShared { ]; } + public static List getAutoAddAppointments(Id registrationId, Id eventId, String instanceTitle, Date instanceStartDate, Date instanceEndDate, String dayOfWeek) { + return [ + SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Registrant_Input__c, Custom_Picklist__c, Appointment_Limits__c, + Chosen_State__c, Sort_Order__c, Auto_Confirm_Appointment__c, Auto_add_building__c, Auto_Add_Time__c, Do_Not_Show_Time__c + FROM Summit_Events_Appointment_Type__c + WHERE Summit_Events__c = :eventId + AND (Chosen_State__c = 'Added' OR Chosen_State__c = 'Added and Required' OR Chosen_State__c = 'Added but not shown') + AND Id NOT IN ( + SELECT Event_Appointment_Type__c + FROM Summit_Events_Appointments__c + WHERE Event_Registration__c = :registrationId + ) + AND ( + Restrict_To_Instance_Title__r.Instance_Title__c = :instanceTitle + OR Restrict_To_Instance_Title__r.Instance_Title__c = NULL + OR Restrict_To_Instance_Title__r.Instance_Title__c = '' + ) + AND ( + Date_Available_Start__c <= :instanceStartDate + OR Date_Available_Start__c = NULL + ) + AND ( + Date_Available_End__c >= :instanceEndDate + OR Date_Available_End__c = NULL + ) + AND ( + Day_of_Week_Availability__c INCLUDES (:dayOfWeek) + OR Day_of_Week_Availability__c = NULL + ) + AND ( + Appointment_Type_Status__c = 'Active' + OR Appointment_Type_Status__c = NULL + ) + WITH SECURITY_ENFORCED + ORDER BY Sort_Order__c ASC NULLS LAST + ]; + } + public static Map getAppointmentTypesByEventId(Id eventId, String instanceTitle, Date startDate, Date endDate, String dayOfWeek) { return new Map([ SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Appointment_Limits__c, Chosen_State__c, diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 219ad290..435ce0db 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -487,27 +487,15 @@ public with sharing class SummitEventsRegisterController { eventRegistration = rCRUD.updateRegistration(eventRegistration, incomingEventRegistrationId, registrantAudience, eventFeeList); String dayOfWeek = SummitEventsShared.convertDateToDatetime(evtInstance.Instance_Start_Date__c, null, '').format('EEEE'); + //Insert pre-chosen appointments for appointments page - List autoAddAppt = [ - SELECT Id, Name, Title__c, Description__c, Appointment_Type__c, Appointment_Category__c, Registrant_Input__c, Custom_Picklist__c, Appointment_Limits__c, - Chosen_State__c, Sort_Order__c, Auto_Confirm_Appointment__c, Auto_add_building__c, Auto_Add_Time__c, Do_Not_Show_Time__c - FROM Summit_Events_Appointment_Type__c - WHERE Summit_Events__c = :eventInformation.eventId - AND (Chosen_State__c = 'Added' OR Chosen_State__c = 'Added and Required' OR Chosen_State__c = 'Added but not shown') - AND Id NOT IN (SELECT Event_Appointment_Type__c FROM Summit_Events_Appointments__c WHERE Event_Registration__c = :eventInformation.registrationId) - AND (Restrict_To_Instance_Title__r.Instance_Title__c = :evtInstance.Instance_Title__c OR Restrict_To_Instance_Title__r.Instance_Title__c = NULL OR Restrict_To_Instance_Title__r.Instance_Title__c = '') - AND (Date_Available_Start__c <= :evtInstance.Instance_Start_Date__c OR Date_Available_Start__c = NULL) - AND (Date_Available_End__c >= :evtInstance.Instance_End_Date__c OR Date_Available_End__c = NULL) - AND (Day_of_Week_Availability__c INCLUDES (:dayOfWeek) OR Day_of_Week_Availability__c = NULL) - AND (Appointment_Type_Status__c = 'Active' OR Appointment_Type_Status__c = NULL) - ORDER BY Sort_Order__c ASC NULLS LAST - ]; + List autoAddAppt = SummitEventsReadShared.getAutoAddAppointments(eventRegistration.Id, eventInformation.eventId, evtInstance.Instance_Title__c, evtInstance.Instance_Start_Date__c, evtInstance.Instance_End_Date__c, dayOfWeek); List appointmentsToAdd = new List(); for (Summit_Events_Appointment_Type__c appt : autoAddAppt) { Summit_Events_Appointments__c addAppt = new Summit_Events_Appointments__c(); addAppt.Event_Appointment_Type__c = appt.Id; - addAppt.Event_Registration__c = eventInformation.registrationId; + addAppt.Event_Registration__c = eventRegistration.Id; addAppt.Appointment_Title__c = appt.Title__c; //If appointment is not shown and auto confirmed confirm it! if (appt.Auto_Confirm_Appointment__c) { @@ -597,14 +585,6 @@ public with sharing class SummitEventsRegisterController { return eventRegistration; } - public void deleteFees(List deletableFees) { - try { - delete deletableFees; - } catch (Exception ex) { - System.debug(ex.getMessage()); - } - } - public void insertAppointments(List appointments) { try { insert appointments; From ba7b67073dee3ea13f5ddb67cb2d4636810db5e7 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 3 Sep 2025 10:45:28 -0500 Subject: [PATCH 71/81] Added unit test to check auto add appointments on registration --- .../classes/SummitEventsRegister_TEST.cls | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/force-app/test/default/classes/SummitEventsRegister_TEST.cls b/force-app/test/default/classes/SummitEventsRegister_TEST.cls index 2b67e2c0..5863178b 100644 --- a/force-app/test/default/classes/SummitEventsRegister_TEST.cls +++ b/force-app/test/default/classes/SummitEventsRegister_TEST.cls @@ -25,6 +25,7 @@ private class SummitEventsRegister_TEST { System.assert(registerController.getApplicantTypeDD().size() > 0); System.assert(registerController.getRelationshipDD().size() > 0); System.assert(registerController.getPronounDD().size() > 0); + System.assert(registerController.getAccessibilityDD().size() > 0); System.assertEquals(registerController.checkEventDetails(), null); registerController.eventRegistration.Registrant_First_Name__c = 'Test'; registerController.eventRegistration.Registrant_Last_Name__c = 'Tester'; @@ -166,6 +167,35 @@ private class SummitEventsRegister_TEST { } } + + @IsTest static void testEventWithAutoAddAppointments() { + List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); + Summit_Events__c seaTestEvent = SummitEventsTestSharedDataFactory.getEventRecord(seaTestInstances[1].Event__c); + List testAppointmentTypes = SummitEventsTestSharedDataFactory.createAppointmentTypes(seaTestInstances[1].Event__c); + testAppointmentTypes[0].Chosen_State__c = 'Added but not shown'; + testAppointmentTypes[1].Chosen_State__c = 'Added and Required'; + testAppointmentTypes[2].Chosen_State__c = 'Added'; + update testAppointmentTypes; + User testUser = SummitEventsTestSharedDataFactory.userToRunWith('Standard User','Summit_Events_Registrant'); + System.runAs(testUser) { + Test.startTest(); + PageReference pageRef = Page.SummitEventsRegister; + Test.setCurrentPage(pageRef); + ApexPages.currentPage().getParameters().put('instanceID', seaTestInstances[1].Id); + SummitEventsRegisterController registerController = new SummitEventsRegisterController(); + registerController.eventRegistration.Registrant_First_Name__c = 'Test'; + registerController.eventRegistration.Registrant_Last_Name__c = 'Tester'; + registerController.eventRegistration.Registrant_Email__c = 'test@test.net'; + registerController.saveContactRegistration(); + List appointments = [ + SELECT Id FROM Summit_Events_Appointments__c WHERE Event_Registration__c = :registerController.eventRegistration.Id + ]; + //There should be only one registration, the first one inserted as data. The second should have been restricted and not allowed through + System.assertEquals(appointments.size(), 3); + Test.stopTest(); + } + } + @IsTest static void testEventWithAdditionalQuestions() { List seaTestInstances = SummitEventsTestSharedDataFactory.createTestEvent(); Summit_Events__c testEvent = SummitEventsTestSharedDataFactory.getEventRecord(seaTestInstances[1].Event__c); From 6a7c8d57aa950a02a43807133c36691e54762af6 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 3 Sep 2025 12:34:19 -0500 Subject: [PATCH 72/81] removed double messages on the submit page --- force-app/main/default/pages/SummitEventsSubmit.page | 2 -- 1 file changed, 2 deletions(-) diff --git a/force-app/main/default/pages/SummitEventsSubmit.page b/force-app/main/default/pages/SummitEventsSubmit.page index 61b29dac..e78a4102 100644 --- a/force-app/main/default/pages/SummitEventsSubmit.page +++ b/force-app/main/default/pages/SummitEventsSubmit.page @@ -51,8 +51,6 @@ Created by Thaddaeus Dahlberg on 5/1/2018. - -

From b214e889a079169df7d0d799490fef1804d90ef0 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Wed, 10 Sep 2025 15:08:28 -0500 Subject: [PATCH 73/81] dummy --- docs/2g-packaging.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/2g-packaging.md b/docs/2g-packaging.md index fd4007ca..c8287578 100644 --- a/docs/2g-packaging.md +++ b/docs/2g-packaging.md @@ -39,7 +39,7 @@ Need to build a mock package to test and throw away without worrying about ances this command: ``` -cci flow run build_feature_test_package +cci flow run build_feature_test_package ``` Use the SubscriberPackageVersion Id to append to an installation link: From 1fdbb98e10f8d29aea089ce808a71bfb1fe9afff Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Mon, 15 Sep 2025 09:00:45 -0500 Subject: [PATCH 74/81] Upped API to 64 --- .../classes/SummitEventsAddToCalendarController.cls-meta.xml | 2 +- .../classes/SummitEventsAdditionalQuestionsCtlr.cls-meta.xml | 2 +- .../classes/SummitEventsAfterLeadConversion.cls-meta.xml | 2 +- .../classes/SummitEventsAppointmentTriggerHandler.cls-meta.xml | 2 +- .../classes/SummitEventsCancelReviewController.cls-meta.xml | 2 +- .../classes/SummitEventsConfirmationController.cls-meta.xml | 2 +- .../default/classes/SummitEventsContactMatching.cls-meta.xml | 2 +- .../main/default/classes/SummitEventsController.cls-meta.xml | 2 +- .../default/classes/SummitEventsDonationController.cls-meta.xml | 2 +- force-app/main/default/classes/SummitEventsFeed.cls-meta.xml | 2 +- .../classes/SummitEventsGeneratedItinerariesExt.cls-meta.xml | 2 +- .../classes/SummitEventsHostAssignmentExtension.cls-meta.xml | 2 +- force-app/main/default/classes/SummitEventsInfo.cls-meta.xml | 2 +- .../classes/SummitEventsLetterheadLookupExtension.cls-meta.xml | 2 +- .../main/default/classes/SummitEventsNamespace.cls-meta.xml | 2 +- .../classes/SummitEventsParkingPassController.cls-meta.xml | 2 +- .../classes/SummitEventsPrintItinerariesExtension.cls-meta.xml | 2 +- .../main/default/classes/SummitEventsReadShared.cls-meta.xml | 2 +- .../classes/SummitEventsRegisterAppointmentCtlr.cls-meta.xml | 2 +- .../default/classes/SummitEventsRegisterController.cls-meta.xml | 2 +- .../classes/SummitEventsRegisterGuestsController.cls-meta.xml | 2 +- .../main/default/classes/SummitEventsRegistration.cls-meta.xml | 2 +- force-app/main/default/classes/SummitEventsShared.cls-meta.xml | 2 +- .../default/classes/SummitEventsSubmitController.cls-meta.xml | 2 +- .../main/default/classes/summitEventsRecaptcha.cls-meta.xml | 2 +- force-app/main/default/pages/CastorTemplate2017.page-meta.xml | 2 +- force-app/main/default/pages/GeneralSLDS.page-meta.xml | 2 +- force-app/main/default/pages/OPUSTemplate2018.page-meta.xml | 2 +- force-app/main/default/pages/SummitEvents.page-meta.xml | 2 +- .../main/default/pages/SummitEventsAddToCalendar.page-meta.xml | 2 +- .../default/pages/SummitEventsAdditionalQuestions.page-meta.xml | 2 +- .../main/default/pages/SummitEventsCancelReview.page-meta.xml | 2 +- .../main/default/pages/SummitEventsConfirmation.page-meta.xml | 2 +- force-app/main/default/pages/SummitEventsDonation.page-meta.xml | 2 +- .../pages/SummitEventsGeneratedItineraries.page-meta.xml | 2 +- .../main/default/pages/SummitEventsHostAssignment.page-meta.xml | 2 +- .../default/pages/SummitEventsLetterheadLookup.page-meta.xml | 2 +- .../main/default/pages/SummitEventsParkingPass.page-meta.xml | 2 +- .../default/pages/SummitEventsPrintItineraries.page-meta.xml | 2 +- force-app/main/default/pages/SummitEventsRegister.page-meta.xml | 2 +- .../pages/SummitEventsRegisterAppointments.page-meta.xml | 2 +- .../main/default/pages/SummitEventsRegisterGuests.page-meta.xml | 2 +- force-app/main/default/pages/SummitEventsSubmit.page-meta.xml | 2 +- force-app/main/default/pages/crowncollege2020.page-meta.xml | 2 +- .../triggers/SummitEventsAppointmentTrigger.trigger-meta.xml | 2 +- .../default/triggers/SummitEventsLeadTrigger.trigger-meta.xml | 2 +- .../triggers/SummitEventsRegistrationTrigger.trigger-meta.xml | 2 +- .../default/classes/SummitEventsAddToCalendar_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsAdditionalQuestions_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsAfterLeadConversion_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsAppointmentTrigger_TEST.cls-meta.xml | 2 +- .../default/classes/SummitEventsCancelReview_TEST.cls-meta.xml | 2 +- .../default/classes/SummitEventsConfirmation_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsContactMatching_TEST.cls-meta.xml | 2 +- .../test/default/classes/SummitEventsDonation_TEST.cls-meta.xml | 2 +- .../test/default/classes/SummitEventsFeed_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsGeneratedItineraries_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsHostAssignment_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsLetterheadLookup_TEST.cls-meta.xml | 2 +- .../default/classes/SummitEventsNamespace_TEST.cls-meta.xml | 2 +- .../default/classes/SummitEventsParkingPass_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsPrintItineraries_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsRegisterAppointment_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsRegisterGuests_TEST.cls-meta.xml | 2 +- .../test/default/classes/SummitEventsRegister_TEST.cls-meta.xml | 2 +- .../default/classes/SummitEventsRegistration_TEST.cls-meta.xml | 2 +- .../test/default/classes/SummitEventsShared_TEST.cls-meta.xml | 2 +- .../test/default/classes/SummitEventsSubmit_TEST.cls-meta.xml | 2 +- .../classes/SummitEventsTestSharedDataFactory.cls-meta.xml | 2 +- force-app/test/default/classes/SummitEvents_TEST.cls-meta.xml | 2 +- .../test/default/classes/summitRecaptcha_TEST.cls-meta.xml | 2 +- 71 files changed, 71 insertions(+), 71 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsAddToCalendarController.cls-meta.xml b/force-app/main/default/classes/SummitEventsAddToCalendarController.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsAddToCalendarController.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsAddToCalendarController.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls-meta.xml b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsAdditionalQuestionsCtlr.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls-meta.xml b/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls-meta.xml b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsAppointmentTriggerHandler.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsCancelReviewController.cls-meta.xml b/force-app/main/default/classes/SummitEventsCancelReviewController.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsCancelReviewController.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsCancelReviewController.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsConfirmationController.cls-meta.xml b/force-app/main/default/classes/SummitEventsConfirmationController.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsConfirmationController.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsConfirmationController.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls-meta.xml b/force-app/main/default/classes/SummitEventsContactMatching.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsController.cls-meta.xml b/force-app/main/default/classes/SummitEventsController.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsController.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsController.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsDonationController.cls-meta.xml b/force-app/main/default/classes/SummitEventsDonationController.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsDonationController.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsDonationController.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsFeed.cls-meta.xml b/force-app/main/default/classes/SummitEventsFeed.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsFeed.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsFeed.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls-meta.xml b/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsGeneratedItinerariesExt.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsHostAssignmentExtension.cls-meta.xml b/force-app/main/default/classes/SummitEventsHostAssignmentExtension.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsHostAssignmentExtension.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsHostAssignmentExtension.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsInfo.cls-meta.xml b/force-app/main/default/classes/SummitEventsInfo.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsInfo.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsInfo.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls-meta.xml b/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsLetterheadLookupExtension.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsNamespace.cls-meta.xml b/force-app/main/default/classes/SummitEventsNamespace.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsNamespace.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsNamespace.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsParkingPassController.cls-meta.xml b/force-app/main/default/classes/SummitEventsParkingPassController.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsParkingPassController.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsParkingPassController.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsPrintItinerariesExtension.cls-meta.xml b/force-app/main/default/classes/SummitEventsPrintItinerariesExtension.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsPrintItinerariesExtension.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsPrintItinerariesExtension.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsReadShared.cls-meta.xml b/force-app/main/default/classes/SummitEventsReadShared.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsReadShared.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsReadShared.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsRegisterAppointmentCtlr.cls-meta.xml b/force-app/main/default/classes/SummitEventsRegisterAppointmentCtlr.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsRegisterAppointmentCtlr.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsRegisterAppointmentCtlr.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls-meta.xml b/force-app/main/default/classes/SummitEventsRegisterController.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls-meta.xml b/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsRegisterGuestsController.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsRegistration.cls-meta.xml b/force-app/main/default/classes/SummitEventsRegistration.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsRegistration.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsRegistration.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsShared.cls-meta.xml b/force-app/main/default/classes/SummitEventsShared.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsShared.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsShared.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/SummitEventsSubmitController.cls-meta.xml b/force-app/main/default/classes/SummitEventsSubmitController.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/SummitEventsSubmitController.cls-meta.xml +++ b/force-app/main/default/classes/SummitEventsSubmitController.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/classes/summitEventsRecaptcha.cls-meta.xml b/force-app/main/default/classes/summitEventsRecaptcha.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/main/default/classes/summitEventsRecaptcha.cls-meta.xml +++ b/force-app/main/default/classes/summitEventsRecaptcha.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/pages/CastorTemplate2017.page-meta.xml b/force-app/main/default/pages/CastorTemplate2017.page-meta.xml index 93b784f9..65cb8ff4 100644 --- a/force-app/main/default/pages/CastorTemplate2017.page-meta.xml +++ b/force-app/main/default/pages/CastorTemplate2017.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 false false diff --git a/force-app/main/default/pages/GeneralSLDS.page-meta.xml b/force-app/main/default/pages/GeneralSLDS.page-meta.xml index 25e3e072..9e3433e0 100644 --- a/force-app/main/default/pages/GeneralSLDS.page-meta.xml +++ b/force-app/main/default/pages/GeneralSLDS.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/OPUSTemplate2018.page-meta.xml b/force-app/main/default/pages/OPUSTemplate2018.page-meta.xml index e193fe1c..c66a00f9 100644 --- a/force-app/main/default/pages/OPUSTemplate2018.page-meta.xml +++ b/force-app/main/default/pages/OPUSTemplate2018.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 false false diff --git a/force-app/main/default/pages/SummitEvents.page-meta.xml b/force-app/main/default/pages/SummitEvents.page-meta.xml index 1f92d1c6..c99c8b01 100644 --- a/force-app/main/default/pages/SummitEvents.page-meta.xml +++ b/force-app/main/default/pages/SummitEvents.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsAddToCalendar.page-meta.xml b/force-app/main/default/pages/SummitEventsAddToCalendar.page-meta.xml index ee8b5a0a..df59bf33 100644 --- a/force-app/main/default/pages/SummitEventsAddToCalendar.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsAddToCalendar.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsAdditionalQuestions.page-meta.xml b/force-app/main/default/pages/SummitEventsAdditionalQuestions.page-meta.xml index e6b289e9..f260b405 100644 --- a/force-app/main/default/pages/SummitEventsAdditionalQuestions.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsAdditionalQuestions.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsCancelReview.page-meta.xml b/force-app/main/default/pages/SummitEventsCancelReview.page-meta.xml index 1433edaf..048a1129 100644 --- a/force-app/main/default/pages/SummitEventsCancelReview.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsCancelReview.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsConfirmation.page-meta.xml b/force-app/main/default/pages/SummitEventsConfirmation.page-meta.xml index 704974af..d014b4a8 100644 --- a/force-app/main/default/pages/SummitEventsConfirmation.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsConfirmation.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsDonation.page-meta.xml b/force-app/main/default/pages/SummitEventsDonation.page-meta.xml index 226a6aeb..3d38fb29 100644 --- a/force-app/main/default/pages/SummitEventsDonation.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsDonation.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsGeneratedItineraries.page-meta.xml b/force-app/main/default/pages/SummitEventsGeneratedItineraries.page-meta.xml index 26ec725d..5ed03969 100644 --- a/force-app/main/default/pages/SummitEventsGeneratedItineraries.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsGeneratedItineraries.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsHostAssignment.page-meta.xml b/force-app/main/default/pages/SummitEventsHostAssignment.page-meta.xml index 6acd68eb..1a15bfa8 100644 --- a/force-app/main/default/pages/SummitEventsHostAssignment.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsHostAssignment.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsLetterheadLookup.page-meta.xml b/force-app/main/default/pages/SummitEventsLetterheadLookup.page-meta.xml index 21b052b7..0aacd313 100644 --- a/force-app/main/default/pages/SummitEventsLetterheadLookup.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsLetterheadLookup.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsParkingPass.page-meta.xml b/force-app/main/default/pages/SummitEventsParkingPass.page-meta.xml index aaa6affe..2a90575b 100644 --- a/force-app/main/default/pages/SummitEventsParkingPass.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsParkingPass.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsPrintItineraries.page-meta.xml b/force-app/main/default/pages/SummitEventsPrintItineraries.page-meta.xml index 81c270bb..f396e617 100644 --- a/force-app/main/default/pages/SummitEventsPrintItineraries.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsPrintItineraries.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsRegister.page-meta.xml b/force-app/main/default/pages/SummitEventsRegister.page-meta.xml index 5da89554..9fc53992 100644 --- a/force-app/main/default/pages/SummitEventsRegister.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsRegister.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsRegisterAppointments.page-meta.xml b/force-app/main/default/pages/SummitEventsRegisterAppointments.page-meta.xml index 993f7881..ab62cdaa 100644 --- a/force-app/main/default/pages/SummitEventsRegisterAppointments.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsRegisterAppointments.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsRegisterGuests.page-meta.xml b/force-app/main/default/pages/SummitEventsRegisterGuests.page-meta.xml index b1126c49..7b2e1c4b 100644 --- a/force-app/main/default/pages/SummitEventsRegisterGuests.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsRegisterGuests.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/SummitEventsSubmit.page-meta.xml b/force-app/main/default/pages/SummitEventsSubmit.page-meta.xml index d0953773..2fff4b78 100644 --- a/force-app/main/default/pages/SummitEventsSubmit.page-meta.xml +++ b/force-app/main/default/pages/SummitEventsSubmit.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 true false diff --git a/force-app/main/default/pages/crowncollege2020.page-meta.xml b/force-app/main/default/pages/crowncollege2020.page-meta.xml index 19698725..d3cc4b20 100644 --- a/force-app/main/default/pages/crowncollege2020.page-meta.xml +++ b/force-app/main/default/pages/crowncollege2020.page-meta.xml @@ -1,6 +1,6 @@ - 61.0 + 64.0 false false diff --git a/force-app/main/default/triggers/SummitEventsAppointmentTrigger.trigger-meta.xml b/force-app/main/default/triggers/SummitEventsAppointmentTrigger.trigger-meta.xml index 04b377d0..36cb41a8 100644 --- a/force-app/main/default/triggers/SummitEventsAppointmentTrigger.trigger-meta.xml +++ b/force-app/main/default/triggers/SummitEventsAppointmentTrigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/triggers/SummitEventsLeadTrigger.trigger-meta.xml b/force-app/main/default/triggers/SummitEventsLeadTrigger.trigger-meta.xml index 04b377d0..36cb41a8 100644 --- a/force-app/main/default/triggers/SummitEventsLeadTrigger.trigger-meta.xml +++ b/force-app/main/default/triggers/SummitEventsLeadTrigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger-meta.xml b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger-meta.xml index 04b377d0..36cb41a8 100644 --- a/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger-meta.xml +++ b/force-app/main/default/triggers/SummitEventsRegistrationTrigger.trigger-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsAddToCalendar_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsAddToCalendar_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsAddToCalendar_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsAddToCalendar_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsAdditionalQuestions_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsAdditionalQuestions_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsAdditionalQuestions_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsAdditionalQuestions_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsAfterLeadConversion_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsAfterLeadConversion_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsAfterLeadConversion_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsAfterLeadConversion_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsAppointmentTrigger_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsAppointmentTrigger_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsAppointmentTrigger_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsAppointmentTrigger_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsCancelReview_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsCancelReview_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsCancelReview_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsCancelReview_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsConfirmation_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsConfirmation_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsConfirmation_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsConfirmation_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsContactMatching_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsDonation_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsDonation_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsDonation_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsDonation_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsFeed_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsFeed_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsFeed_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsFeed_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsGeneratedItineraries_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsGeneratedItineraries_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsGeneratedItineraries_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsGeneratedItineraries_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsHostAssignment_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsHostAssignment_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsHostAssignment_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsHostAssignment_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsLetterheadLookup_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsLetterheadLookup_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsLetterheadLookup_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsLetterheadLookup_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsNamespace_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsNamespace_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsNamespace_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsNamespace_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsParkingPass_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsParkingPass_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsParkingPass_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsParkingPass_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsPrintItineraries_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsPrintItineraries_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsPrintItineraries_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsPrintItineraries_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsRegisterAppointment_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsRegisterAppointment_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsRegisterAppointment_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsRegisterAppointment_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsRegisterGuests_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsRegisterGuests_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsRegisterGuests_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsRegisterGuests_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsRegister_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsRegister_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsRegister_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsRegister_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsRegistration_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsRegistration_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsRegistration_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsRegistration_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsShared_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsShared_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsShared_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsShared_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsSubmit_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEventsSubmit_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsSubmit_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsSubmit_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls-meta.xml b/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls-meta.xml +++ b/force-app/test/default/classes/SummitEventsTestSharedDataFactory.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/SummitEvents_TEST.cls-meta.xml b/force-app/test/default/classes/SummitEvents_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/SummitEvents_TEST.cls-meta.xml +++ b/force-app/test/default/classes/SummitEvents_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active diff --git a/force-app/test/default/classes/summitRecaptcha_TEST.cls-meta.xml b/force-app/test/default/classes/summitRecaptcha_TEST.cls-meta.xml index 651b1729..1e7de940 100644 --- a/force-app/test/default/classes/summitRecaptcha_TEST.cls-meta.xml +++ b/force-app/test/default/classes/summitRecaptcha_TEST.cls-meta.xml @@ -1,5 +1,5 @@ - 61.0 + 64.0 Active From 74a70233a120882669e16802bfb4b697a0af9212 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 10 Oct 2025 11:45:09 -0500 Subject: [PATCH 75/81] adjusted moved cancel/review page to just check for closed date on event, not capacity --- .../SummitEventsCancelReviewController.cls | 2 +- .../default/classes/SummitEventsShared.cls | 38 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/force-app/main/default/classes/SummitEventsCancelReviewController.cls b/force-app/main/default/classes/SummitEventsCancelReviewController.cls index f6082165..5b2ca806 100644 --- a/force-app/main/default/classes/SummitEventsCancelReviewController.cls +++ b/force-app/main/default/classes/SummitEventsCancelReviewController.cls @@ -40,7 +40,7 @@ public with sharing class SummitEventsCancelReviewController { eventInstance = SummitEventsReadShared.getInstanceById(eventRegistration.Event_Instance__c); eventPage = SummitEventsReadShared.getEventById(eventInstance.Event__c); templateSelected = SummitEventsShared.getTemplate(eventPage.Template__c); - eventIsClosed = SummitEventsShared.isEventClosed(eventInstance, eventPage.Event_Status__c); + eventIsClosed = SummitEventsShared.checkCloseDateTime(eventInstance); if (eventInstance != null) { formattedNavDate = SummitEventsShared.navBreadcrumbBuilder(eventInstance); diff --git a/force-app/main/default/classes/SummitEventsShared.cls b/force-app/main/default/classes/SummitEventsShared.cls index d485dcf8..96027b9d 100644 --- a/force-app/main/default/classes/SummitEventsShared.cls +++ b/force-app/main/default/classes/SummitEventsShared.cls @@ -364,22 +364,7 @@ public with sharing class SummitEventsShared { Boolean adminOpen = isBoolean(ApexPages.currentPage().getParameters().get('adminopen')); eventIsClosed = !adminOpen; } else { - Datetime dt = Datetime.now(); - Time compareCloseTime = dt.timeGmt(); - String timeZonePick = getTimeZonePick(evtInstance.Instance_Time_Zone__c); - TimeZone tz = getTimeZone(timeZonePick); - dt = dt.addSeconds(tz.getOffset(dt) / 1000); - compareCloseTime = compareCloseTime.addMilliseconds(tz.getOffset(dt)); - if (evtInstance.Registration_Close_Date__c <= dt.date()) { - if (evtInstance.Registration_Close_Date__c == dt.date()) { - if (evtInstance.Registration_Close_Time__c < compareCloseTime) { - eventIsClosed = true; - } - } else { - eventIsClosed = true; - } - } - + eventIsClosed = checkCloseDateTime(evtInstance); if (evtInstance.Current_Available_Capacity__c <= 0 || evtInstance.Active_Status__c != 'Active' || masterEventStatus != 'Active') { eventIsClosed = true; } @@ -388,6 +373,27 @@ public with sharing class SummitEventsShared { return eventIsClosed; } + public static Boolean checkCloseDateTime(Summit_Events_Instance__c evtInstance) { + Boolean eventIsClosed = false; + Datetime dt = Datetime.now(); + Time compareCloseTime = dt.timeGmt(); + String timeZonePick = getTimeZonePick(evtInstance.Instance_Time_Zone__c); + TimeZone tz = getTimeZone(timeZonePick); + dt = dt.addSeconds(tz.getOffset(dt) / 1000); + compareCloseTime = compareCloseTime.addMilliseconds(tz.getOffset(dt)); + if (evtInstance.Registration_Close_Date__c <= dt.date()) { + if (evtInstance.Registration_Close_Date__c == dt.date()) { + if (evtInstance.Registration_Close_Time__c < compareCloseTime) { + eventIsClosed = true; + } + } else { + eventIsClosed = true; + } + } + return eventIsClosed; + } + + public static String getTimeZonePick(String pickListTimeZone) { if (String.isNotBlank(pickListTimeZone)) { if (pickListTimeZone.length() > 4) { From 139367899374b31fa0043a518ff21f26208b84e9 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 11 Nov 2025 08:30:58 -0600 Subject: [PATCH 76/81] update to ignores --- .forceignore | 5 ++++- .gitignore | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.forceignore b/.forceignore index eeed72a8..37142603 100644 --- a/.forceignore +++ b/.forceignore @@ -2,4 +2,7 @@ **/*.ts **/tsconfig*.json **/*.tsbuildinfo -**/eslint.config.mjs \ No newline at end of file +**/eslint.config.mjs + +# Added by Illuminated Cloud +**/graphql.config.yml \ No newline at end of file diff --git a/.gitignore b/.gitignore index 40a48bf1..f724876a 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,6 @@ target/ node_modules/ /.illuminatedCloud/ **/tsconfig*.json -**/*.tsbuildinfo \ No newline at end of file +**/*.tsbuildinfo + +**/graphql.config.yml \ No newline at end of file From 33800954d2a2b637d8d56ae4e47b0bff3fd370ea Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 21 Nov 2025 08:47:14 -0600 Subject: [PATCH 77/81] updating cumulus to install in experience cloud site --- cumulusci.yml | 73 +++- datasets/data.sql | 357 ++++++++++-------- datasets/mapping.yml | 158 +++++--- .../SummitEventsRegisterController.cls | 2 +- orgs/dev.json | 4 +- .../experiences/Summit_Events1.site-meta.xml | 6 + .../brandingSets/buildYourOwn.json | 54 +++ .../Summit_Events1/config/languages.json | 6 + .../Summit_Events1/config/loginAppPage.json | 7 + .../Summit_Events1/config/mainAppPage.json | 11 + .../Summit_Events1/config/nativeConfig.json | 34 ++ .../Summit_Events1/config/summitEvents.json | 11 + .../Summit_Events1/routes/checkPassword.json | 11 + .../Summit_Events1/routes/createRecord.json | 11 + .../Summit_Events1/routes/error.json | 12 + .../Summit_Events1/routes/forgotPassword.json | 11 + .../Summit_Events1/routes/home.json | 12 + .../Summit_Events1/routes/login.json | 11 + .../Summit_Events1/routes/loginError.json | 11 + .../Summit_Events1/routes/recordDetail.json | 11 + .../Summit_Events1/routes/recordList.json | 12 + .../Summit_Events1/routes/register.json | 11 + .../routes/relatedRecordList.json | 12 + .../Summit_Events1/routes/search.json | 12 + .../routes/serviceNotAvailable.json | 11 + .../routes/tooManyRequests.json | 11 + .../Summit_Events1/themes/buildYourOwn.json | 126 +++++++ .../Summit_Events1/views/checkPassword.json | 58 +++ .../Summit_Events1/views/createRecord.json | 34 ++ .../Summit_Events1/views/error.json | 48 +++ .../Summit_Events1/views/forgotPassword.json | 69 ++++ .../Summit_Events1/views/home.json | 50 +++ .../Summit_Events1/views/login.json | 74 ++++ .../Summit_Events1/views/loginError.json | 48 +++ .../Summit_Events1/views/recordDetail.json | 66 ++++ .../Summit_Events1/views/recordList.json | 46 +++ .../Summit_Events1/views/register.json | 85 +++++ .../views/relatedRecordList.json | 39 ++ .../Summit_Events1/views/search.json | 48 +++ .../views/serviceNotAvailable.json | 25 ++ .../Summit_Events1/views/tooManyRequests.json | 32 ++ unpackaged/config/experiences/package.xml | 8 + .../networks/Summit Events.network-meta.xml | 16 +- .../site/{sites => }/Summit_Events.site | 15 +- unpackaged/config/site/package.xml | 2 +- unpackaged/pre/roles/package.xml | 8 + ...ummit_Events_Community_Owner.role-meta.xml | 8 + unpackaged/site/package.xml | 0 48 files changed, 1553 insertions(+), 234 deletions(-) create mode 100644 unpackaged/config/experiences/Summit_Events1.site-meta.xml create mode 100644 unpackaged/config/experiences/Summit_Events1/brandingSets/buildYourOwn.json create mode 100644 unpackaged/config/experiences/Summit_Events1/config/languages.json create mode 100644 unpackaged/config/experiences/Summit_Events1/config/loginAppPage.json create mode 100644 unpackaged/config/experiences/Summit_Events1/config/mainAppPage.json create mode 100644 unpackaged/config/experiences/Summit_Events1/config/nativeConfig.json create mode 100644 unpackaged/config/experiences/Summit_Events1/config/summitEvents.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/checkPassword.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/createRecord.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/error.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/forgotPassword.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/home.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/login.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/loginError.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/recordDetail.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/recordList.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/register.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/relatedRecordList.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/search.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/serviceNotAvailable.json create mode 100644 unpackaged/config/experiences/Summit_Events1/routes/tooManyRequests.json create mode 100644 unpackaged/config/experiences/Summit_Events1/themes/buildYourOwn.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/checkPassword.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/createRecord.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/error.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/forgotPassword.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/home.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/login.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/loginError.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/recordDetail.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/recordList.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/register.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/relatedRecordList.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/search.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/serviceNotAvailable.json create mode 100644 unpackaged/config/experiences/Summit_Events1/views/tooManyRequests.json create mode 100644 unpackaged/config/experiences/package.xml rename unpackaged/{main/default => config}/networks/Summit Events.network-meta.xml (87%) rename unpackaged/config/site/{sites => }/Summit_Events.site (65%) create mode 100644 unpackaged/pre/roles/package.xml create mode 100644 unpackaged/pre/roles/roles/Summit_Events_Community_Owner.role-meta.xml delete mode 100644 unpackaged/site/package.xml diff --git a/cumulusci.yml b/cumulusci.yml index a95713f1..3cce83a3 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -52,7 +52,7 @@ tasks: eventSettings.%%%NAMESPACE%%%Managed_Package__c = false; upsert eventSettings; - deploy_permission_set: + deploy_admin_permission_set: description: Give System Admins Event Admin Permission Set class_path: cumulusci.tasks.apex.anon.AnonymousApexTask options: @@ -100,14 +100,51 @@ tasks: upsert permissionSetList; } - deploy_community: - description: Deploys the Community for Summit Events App + create_community: + description: Deploys configuration for Development. class_path: cumulusci.tasks.salesforce.CreateCommunity options: + name: Summit Events + description: Summit Events Community template: Build Your Own + skip_existing: True + + create_community_network: + description: Creates the community network for Development. + class_path: cumulusci.tasks.salesforce.network_member_group.CreateNetworkMemberGroups + options: + network_name: Summit Events + profile_names: + - Customer Community Login User + permission_set_names: + - Summit Events Registrant + + create_community_experience_cloud_bundle: + description: Deploys Network config for community for Development. + class_path: cumulusci.tasks.salesforce.Deploy + options: + namespace_inject: $project_config.project__package__namespace + path: unpackaged/config/experiences + unmanaged: True + timeout: 520 + + role_to_userUser: + description: Give Guest User Registrant Permission Set + class_path: cumulusci.tasks.apex.anon.AnonymousApexTask + options: + namespace_inject: $project_config.project__package__namespace + apex: > + User userUser = [SELECT Id FROM User WHERE Alias = 'UUser' LIMIT 1]; + Id seaUserRole = [SELECT Id FROM UserRole WHERE Name = 'Summit Events Community Owner'].Id; + userUser.UserRoleId = seaUserRole; + userUser.Country = 'United States'; + update userUser; + + create_community_publish: + description: Publishes the community for Development. + class_path: cumulusci.tasks.salesforce.PublishCommunity + options: name: Summit Events - description: Community for Summit Events App - skip_existing: true robot: options: @@ -131,8 +168,10 @@ tasks: flows: config_qa: steps: + 1.3: + task: create_community 3: - task: deploy_permission_set + task: deploy_admin_permission_set 4: task: deploy_site_config 5: @@ -144,21 +183,31 @@ flows: config_dev: steps: + 1.3: + task: role_to_userUser 3: - task: deploy_permission_set + task: create_community 4: - task: deploy_site_config + task: create_community_network 5: - task: deploy_site_settings + task: create_community_experience_cloud_bundle 6: + task: deploy_site_config + 7: + task: create_community_publish + 9: + task: deploy_admin_permission_set + 11: + task: deploy_site_settings + 12: task: deploy_guest_permission_set - 8: - task: create_fake_school_data +# 13: +# task: create_fake_school_data config_dev_namespaced: steps: 3: - task: deploy_permission_set + task: deploy_admin_permission_set 4: task: deploy_site_config 5: diff --git a/datasets/data.sql b/datasets/data.sql index 4840f1c9..c2990fe0 100644 --- a/datasets/data.sql +++ b/datasets/data.sql @@ -1,25 +1,39 @@ BEGIN TRANSACTION; CREATE TABLE "Account" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, + "Created_with_Summit_Events__pc" VARCHAR(255), + "FirstName" VARCHAR(255), + "LastName" VARCHAR(255), "Name" VARCHAR(255), + "RecordTypeId" VARCHAR(255), + "IsPersonAccount" VARCHAR(255), "ParentId" VARCHAR(255), PRIMARY KEY (id) ); +INSERT INTO "Account" VALUES('Account-1','False','','','Sample Account for Entitlements','','False',''); +CREATE TABLE "Account_rt_mapping" ( + record_type_id VARCHAR(18) NOT NULL, + developer_name VARCHAR(255), + is_person_type BOOLEAN, + PRIMARY KEY (record_type_id) +); +INSERT INTO "Account_rt_mapping" VALUES('012di000001BpQ1AAK','Business_Account',0); +INSERT INTO "Account_rt_mapping" VALUES('012di000001BpQ2AAK','PersonAccount',1); CREATE TABLE "Contact" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Created_with_Summit_Events__c" VARCHAR(255), "DoNotCall" VARCHAR(255), "FirstName" VARCHAR(255), "HasOptedOutOfEmail" VARCHAR(255), "HasOptedOutOfFax" VARCHAR(255), "LastName" VARCHAR(255), + "IsPersonAccount" VARCHAR(255), "AccountId" VARCHAR(255), "ReportsToId" VARCHAR(255), PRIMARY KEY (id) ); CREATE TABLE "Lead" ( - id INTEGER NOT NULL, - "Company" VARCHAR(255), + id VARCHAR(255) NOT NULL, "DoNotCall" VARCHAR(255), "FirstName" VARCHAR(255), "HasOptedOutOfEmail" VARCHAR(255), @@ -31,7 +45,7 @@ CREATE TABLE "Lead" ( PRIMARY KEY (id) ); CREATE TABLE "Summit_Events_Appointment_Type__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Appointment_Category__c" VARCHAR(255), "Appointment_Fee_Additional__c" VARCHAR(255), "Appointment_Fee__c" VARCHAR(255), @@ -58,67 +72,67 @@ CREATE TABLE "Summit_Events_Appointment_Type__c" ( "Summit_Events__c" VARCHAR(255), PRIMARY KEY (id) ); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(1,'','','','1','Active','','17:00:00.000Z','True','','','','','','','

Kindly confirm the availability for the specified date and time, as well as any additional information or requirements we need to be aware of for a successful reservation.


Details:

Chicago Restaurant

123 Food St.

Chicago, IL 60646


Drinks and Food on us!

','False','Text box','False','10.0','Day 1 Dinner','','','27','4'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(2,'','','','1','Active','','13:30:00.000Z','True','','','Master of Science in Data Science and Analytics +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-1','Attend A Class','','','1','Active','','','False','','','','','','','

See what a classroom experience is like. You don't have to participate, but why not show your future peers was you're all about.

','False','','False','99.0','Attend a Class','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-2','Faculty Visit','','','2','Active','','','False','','','','','','','

Spend time with a Faculty Member and learn about their program.

','False','','False','30.0','Meet with Faculty','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-3','','','','1','Active','','10:00:00.000Z','True','Office of Admissions','Added and Required','','','','','

Campus Tour

','False','','False','10.0','Campus Tour','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-4','','','','1','Active','','09:45:00.000Z','True','Office of Admissions','Added but not shown','','','','','

Check-In at Admissions

','False','','False','20.0','Check-In','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-5','','','','1','Active','','','False','','','','','','','

Enjoy lunch in the main cafeteria and get the full experience of visiting campus!

','False','','False','40.0','Lunch (on us!)','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-6','','','','1','Active','','','True','','','S -Master of Business Administration (MBA) in Technology Management +M -Doctor of Psychology (Psy.D.) in Clinical Neuropsychology +L -Master of Fine Arts (MFA) in Creative Writing +XL -Master of Public Health (MPH) in Global Health Policy +XXL -Master of Engineering (M.Eng) in Sustainable Energy Systems +XXXL -Master of Arts (MA) in International Relations +Save the S.W.A.G for someone else.','','','','

Get some Sprinty S.W.A.G! Let us know what size you'd like and we'll come with it for a Sprint Pic!


All sizes are Uni-Sex Adult.

','False','Required custom pick list','False','20.0','Swag Item','','','','Summit_Events__c-3'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-7','','','','1','Active','','13:30:00.000Z','True','','','Master of Science in Data Science and Analytics -Doctor of Education (Ed.D.) in Educational Technology Leadership','','','','

Choose a program of interest and we will have a professor talk to you!

','False','Required custom pick list','False','15.0','Program of Interest','','','','5'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(3,'','','','1','Active','','12:00:00.000Z','True','','','','','','','

Coming in early and join us for lunch at noon and talk with current students, faculty and staff.

','False','','False','5.0','Lunch','','','','5'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(4,'Attend A Class','','','1','Active','','','False','','','','','','','

See what a classroom experience is like. You don't have to participate, but why not show your future peers was you're all about.

','False','','False','99.0','Attend a Class','','','','3'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(5,'Faculty Visit','','','2','Active','','','False','','','','','','','

Spend time with a Faculty Member and learn about their program.

','False','','False','30.0','Meet with Faculty','','','','3'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(6,'','','','1','Active','','10:00:00.000Z','True','Office of Admissions','Added and Required','','','','','

Campus Tour

','False','','False','10.0','Campus Tour','','','','3'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(7,'','','','1','Active','','09:45:00.000Z','True','Office of Admissions','Added but not shown','','','','','

Check-In at Admissions

','False','','False','20.0','Check-In','','','','3'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(8,'','','','1','Active','','','False','','','','','','','

Enjoy lunch in the main cafeteria and get the full experience of visiting campus!

','False','','False','40.0','Lunch (on us!)','','','','3'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(9,'','','','1','Active','','','False','','','','','','','
  • Logo placement on the official event scorecard.
  • Recognition in event programs.
  • Opportunity to provide branded items with the scorecards


','False','','False','40.0','Scorecard Sponsor - $500','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(10,'','','','1','Active','','12:00:00.000Z','True','','Added but not shown','','','','','','False','','False','85.0','Lunch Break','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(11,'','','','1','Active','','','False','','','','','','','
  • Prominent logo placement and recognition in event materials and pre-event marketing w/full page in program
  • 16 tickets (2 tables) with preferred seating
  • Table sign and emcee announcements
  • Logo on TCOA website and social media
  • Listed in TCOA’s Annual Report
','False','','False','10.0','EVENT SPONSOR - $10,000','','','','8'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(12,'','','','1','Active','','14:30:00.000Z','True','Office of Admissions','','','','','','

Campus Tour post Open House Sessions.

','False','','False','30.0','Campus Tour (Optional)','','','','5'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(13,'','','','1','Active','','13:00:00.000Z','True','','Added and Required','','','','','

Welcome & Introduction to Connected University!

','False','','False','10.0','Welcome & Intro','','','','5'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(14,'','','','1','Active','','14:00:00.000Z','True','','Added and Required','','','','','

Understanding how individuals can afford a graduate degree!

','False','','False','20.0','Financing a Graduate Degree','','','','5'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(15,'','','','1','Active','','','False','','','','','','','
  • Recognition as the sponsor of the pre-event lunch or post-event dinner.
  • Logo placement during the meal and in event materials.
  • Opportunity to address participants during the meal.


','False','','False','15.0','Lunch/Dinner Sponsor - $5,000','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(16,'','','','1','Active','','','False','','','','','','','
  • Sponsorship of specific golf contests (e.g., longest drive, closest to the pin).
  • Recognition during award ceremonies.
  • Logo placement on contest-related materials.


','False','','False','25.0','Prize or Contest Sponsor - $750','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(17,'','','','1','Active','','','False','','','','','','','
  • Corporate table including 8 dinner tickets
  • Table sign and emcee announcements
  • Logo in event program
  • Listed in TCOA’s Annual Report
','False','','False','60.0','TABLE SPONSOR - $1,000','','','','8'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(18,'','','','1','Active','','','False','','','','','','','
  • Company logo in auction program & materials
  • 8 tickets (1 table) with preferred seating
  • Table sign and emcee announcements
  • Logo in event program
  • Logo on TCOA website and social media
  • Listed in TCOA’s Annual Report
','False','','False','40.0','AUCTION SPONSOR - $2,000','','','','8'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(19,'','','','1','Active','','','False','','','','','','','
  • Company logo at stage area 8 tickets (1 table) with preferred seating
  • Table sign and emcee announcements
  • Logo in event program
  • Logo on TCOA website and social media
  • Listed in TCOA’s Annual Report
','False','','False','30.0','ENTERTAINMENT SPONSOR - $2,000','','','','8'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(20,'','','','1','Active','','','False','','','','','','','
  • 8 tickets (1 table) with preferred seating
  • Table sign and emcee announcements
  • Logo in event program
  • Logo on TCOA website
  • Listed in TCOA’s Annual Report
','False','','False','50.0','MENU SPONSOR - $1,500','','','','8'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(21,'','','','1','Active','','','False','','','','','','','
  • Corporate half table including 4 dinner tickets
  • Shared table sign and in emcee announcements
  • Recognition in event program
  • Listed in TCOA’s Annual Report
','False','','False','70.0','CO-TABLE SPONSOR - $500','','','','8'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(22,'','','','1','Active','','','False','','','','','','','
  • Logo placement on golf balls or tees provided to participants.
  • Recognition in event materials.
  • Opportunity to distribute branded golf accessories.


','False','','False','17.0','Golf Ball or Tee Sponsor - $5,000','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(23,'','','','1','Active','','09:30:00.000Z','True','','Added but not shown','','','','','','False','','False','80.0','Shotgun Start','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(24,'','','','1','Active','','16:00:00.000Z','True','','Added but not shown','','','','','','False','','False','90.0','Happy Hour Social & Silent Auction','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(25,'','','','1','Active','','09:00:00.000Z','True','','Added but not shown','','','','','','False','','False','75.0','Welcome & Briefing','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(26,'','','','1','Active','','','False','','','','','','','
  • Logo placement on beverage carts that circulate throughout the course.
  • Recognition in event programs and promotional materials.
  • Option to provide branded items to be distributed from the cart.


','False','','False','30.0','Beverage Cart Sponsor - $500','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(27,'','','','1','Active','','08:00:00.000Z','True','','Added but not shown','','','','','','False','','False','70.0','Registration','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(28,'','','','1','Active','','','True','','','S +Master of Business Administration (MBA) in Technology Management -M +Doctor of Psychology (Psy.D.) in Clinical Neuropsychology -L +Master of Fine Arts (MFA) in Creative Writing -XL +Master of Public Health (MPH) in Global Health Policy -XXL +Master of Engineering (M.Eng) in Sustainable Energy Systems -XXXL +Master of Arts (MA) in International Relations -Save the S.W.A.G for someone else.','','','','

Get some Sprinty S.W.A.G! Let us know what size you'd like and we'll come with it for a Sprint Pic!


All sizes are Uni-Sex Adult.

','False','Required custom pick list','False','20.0','Swag Item','','','','4'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(29,'','','','1','Active','','14:15:00.000Z','True','','Added and Required','','','','','

Open Questions & Answers

','False','','False','25.0','Open Questions & Answers','','','','5'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(30,'','','','1','Active','','','False','','','','','','','
  • Exclusive naming rights for the event (e.g., "Presented by [Title Sponsor]").
  • Prominent logo placement on all event materials, including banners, promotional materials, and the event website.
  • Recognition during opening and closing ceremonies.


','False','','False','10.0','Title Sponsor - $10,000','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(31,'','','','5','Active','','','False','','','','','','','
  • Logo and signage at a specific golf hole.
  • Opportunity to set up a booth or tent at the sponsored hole.
  • Verbal recognition during the event.


','False','','False','20.0','Hole Sponsorship - $1,000','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(32,'','','','1','Active','','17:00:00.000Z','True','','Added but not shown','','','','','','False','','False','95.0','Award Ceremony & Dinner','','','','9'); -INSERT INTO "Summit_Events_Appointment_Type__c" VALUES(33,'','','','1','Active','','','False','','','','','','','
  • Prominent logo placement and recognition in event materials
  • 8 tickets (1 table) with preferred seating
  • Table sign and emcee announcements
  • Logo on TCOA website and social media
  • Listed in TCOA’s Annual Report
','False','','False','20.0','PRESENTING SPONSOR - $5,000','','','','8'); +Doctor of Education (Ed.D.) in Educational Technology Leadership','','','','

Choose a program of interest and we will have a professor talk to you!

','False','Required custom pick list','False','15.0','Program of Interest','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-8','','','','1','Active','','12:00:00.000Z','True','','','','','','','

Coming in early and join us for lunch at noon and talk with current students, faculty and staff.

','False','','False','5.0','Lunch','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-9','','','','1','Active','','14:30:00.000Z','True','Office of Admissions','','','','','','

Campus Tour post Open House Sessions.

','False','','False','30.0','Campus Tour (Optional)','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-10','','','','1','Active','','13:00:00.000Z','True','','Added and Required','','','','','

Welcome & Introduction to Connected University!

','False','','False','10.0','Welcome & Intro','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-11','','','','1','Active','','14:00:00.000Z','True','','Added and Required','','','','','

Understanding how individuals can afford a graduate degree!

','False','','False','20.0','Financing a Graduate Degree','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-12','','','','1','Active','','14:15:00.000Z','True','','Added and Required','','','','','

Open Questions & Answers

','False','','False','25.0','Open Questions & Answers','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-13','','','','1','Active','','','False','','','','','','','
  • Prominent logo placement and recognition in event materials and pre-event marketing w/full page in program
  • 16 tickets (2 tables) with preferred seating
  • Table sign and emcee announcements
  • Logo on TCOA website and social media
  • Listed in TCOA’s Annual Report
','False','','False','10.0','EVENT SPONSOR - $10,000','','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-14','','','','1','Active','','','False','','','','','','','
  • Corporate table including 8 dinner tickets
  • Table sign and emcee announcements
  • Logo in event program
  • Listed in TCOA’s Annual Report
','False','','False','60.0','TABLE SPONSOR - $1,000','','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-15','','','','1','Active','','','False','','','','','','','
  • Company logo in auction program & materials
  • 8 tickets (1 table) with preferred seating
  • Table sign and emcee announcements
  • Logo in event program
  • Logo on TCOA website and social media
  • Listed in TCOA’s Annual Report
','False','','False','40.0','AUCTION SPONSOR - $2,000','','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-16','','','','1','Active','','','False','','','','','','','
  • Company logo at stage area 8 tickets (1 table) with preferred seating
  • Table sign and emcee announcements
  • Logo in event program
  • Logo on TCOA website and social media
  • Listed in TCOA’s Annual Report
','False','','False','30.0','ENTERTAINMENT SPONSOR - $2,000','','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-17','','','','1','Active','','','False','','','','','','','
  • 8 tickets (1 table) with preferred seating
  • Table sign and emcee announcements
  • Logo in event program
  • Logo on TCOA website
  • Listed in TCOA’s Annual Report
','False','','False','50.0','MENU SPONSOR - $1,500','','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-18','','','','1','Active','','','False','','','','','','','
  • Corporate half table including 4 dinner tickets
  • Shared table sign and in emcee announcements
  • Recognition in event program
  • Listed in TCOA’s Annual Report
','False','','False','70.0','CO-TABLE SPONSOR - $500','','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-19','','','','1','Active','','','False','','','','','','','
  • Prominent logo placement and recognition in event materials
  • 8 tickets (1 table) with preferred seating
  • Table sign and emcee announcements
  • Logo on TCOA website and social media
  • Listed in TCOA’s Annual Report
','False','','False','20.0','PRESENTING SPONSOR - $5,000','','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-20','','','','1','Active','','','False','','','','','','','
  • Logo placement on the official event scorecard.
  • Recognition in event programs.
  • Opportunity to provide branded items with the scorecards


','False','','False','40.0','Scorecard Sponsor - $500','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-21','','','','1','Active','','12:00:00.000Z','True','','Added but not shown','','','','','','False','','False','85.0','Lunch Break','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-22','','','','1','Active','','','False','','','','','','','
  • Recognition as the sponsor of the pre-event lunch or post-event dinner.
  • Logo placement during the meal and in event materials.
  • Opportunity to address participants during the meal.


','False','','False','15.0','Lunch/Dinner Sponsor - $5,000','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-23','','','','1','Active','','','False','','','','','','','
  • Sponsorship of specific golf contests (e.g., longest drive, closest to the pin).
  • Recognition during award ceremonies.
  • Logo placement on contest-related materials.


','False','','False','25.0','Prize or Contest Sponsor - $750','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-24','','','','1','Active','','','False','','','','','','','
  • Logo placement on golf balls or tees provided to participants.
  • Recognition in event materials.
  • Opportunity to distribute branded golf accessories.


','False','','False','17.0','Golf Ball or Tee Sponsor - $5,000','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-25','','','','1','Active','','09:30:00.000Z','True','','Added but not shown','','','','','','False','','False','80.0','Shotgun Start','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-26','','','','1','Active','','16:00:00.000Z','True','','Added but not shown','','','','','','False','','False','90.0','Happy Hour Social & Silent Auction','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-27','','','','1','Active','','09:00:00.000Z','True','','Added but not shown','','','','','','False','','False','75.0','Welcome & Briefing','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-28','','','','1','Active','','','False','','','','','','','
  • Logo placement on beverage carts that circulate throughout the course.
  • Recognition in event programs and promotional materials.
  • Option to provide branded items to be distributed from the cart.


','False','','False','30.0','Beverage Cart Sponsor - $500','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-29','','','','1','Active','','08:00:00.000Z','True','','Added but not shown','','','','','','False','','False','70.0','Registration','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-30','','','','1','Active','','','False','','','','','','','
  • Exclusive naming rights for the event (e.g., "Presented by [Title Sponsor]").
  • Prominent logo placement on all event materials, including banners, promotional materials, and the event website.
  • Recognition during opening and closing ceremonies.


','False','','False','10.0','Title Sponsor - $10,000','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-31','','','','5','Active','','','False','','','','','','','
  • Logo and signage at a specific golf hole.
  • Opportunity to set up a booth or tent at the sponsored hole.
  • Verbal recognition during the event.


','False','','False','20.0','Hole Sponsorship - $1,000','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-32','','','','1','Active','','17:00:00.000Z','True','','Added but not shown','','','','','','False','','False','95.0','Award Ceremony & Dinner','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Appointment_Type__c" VALUES('Summit_Events_Appointment_Type__c-33','','','','1','Active','','17:00:00.000Z','True','','','','','','','

Kindly confirm the availability for the specified date and time, as well as any additional information or requirements we need to be aware of for a successful reservation.


Details:

Chicago Restaurant

123 Food St.

Chicago, IL 60646


Drinks and Food on us!

','False','Text box','False','10.0','Day 1 Dinner','','','Summit_Events_Instance__c-20','Summit_Events__c-3'); CREATE TABLE "Summit_Events_Appointments__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Appointment_Category__c" VARCHAR(255), "Appointment_Contact_Email__c" VARCHAR(255), "Appointment_Contact_Name__c" VARCHAR(255), @@ -147,7 +161,7 @@ CREATE TABLE "Summit_Events_Appointments__c" ( PRIMARY KEY (id) ); CREATE TABLE "Summit_Events_Email__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Action_Status__c" VARCHAR(255), "Action_Sub_status__c" VARCHAR(255), "BCC_Email__c" VARCHAR(255), @@ -164,28 +178,28 @@ CREATE TABLE "Summit_Events_Email__c" ( "Event__c" VARCHAR(255), PRIMARY KEY (id) ); -INSERT INTO "Summit_Events_Email__c" VALUES(1,'Registered','','','THIS IS TEXT','

Dear {!Registrant_First_Name__c},


We are thrilled to confirm your registration for the upcoming taking place on {!Event_Instance_Start_Date__c} at the {!Location_Title__c}. Thank you for choosing to be a part of this exciting event!


Registration Details:

Event Name: {!Event_Name__c}

Event Date: {!Event_Instance_Start_Date__c}

Event Location: {!Location_Title__c}

Registration ID: {!Name}



We have received your registration information and you are all set to join us. We can't wait to see you at the event. Here are a few important details to keep in mind:


Event Date: {!Event_Instance_Start_Date__c}

Event Time: {!Event_Instance_Start_Time__c}

Location: {!Location_Title__c}

Registration ID: {!Name}


Please arrive a little early to ensure a smooth check-in process. If you have any questions or need further assistance, don't hesitate to contact our event support team.


We have an exciting agenda planned with amazing speakers and valuable content. Get ready for an enriching experience!


Thank you for choosing to be a part of this event. We look forward to meeting you and hope you have a fantastic time.


Warm regards,

The Common Team!

','','Thank you for Registering! - Commons Open Source Sprint','','','','','','','4'); -INSERT INTO "Summit_Events_Email__c" VALUES(2,'Registered','','','THIS IS TEXT','

Dear {!Registrant_First_Name__c},


Thank you for registering for the ArcticGrapple Games, the ultimate wrestling experience! We are thrilled to have you on board for this exciting event.


Event Details:

  • Date: {!Event_Instance_Date_Time_Formatted__c}
  • Time: {!Event_Instance_Start_Time__c}
  • Location: {!Location_Title__c}
  • Registration ID: {!Name}


Important Information:

Please keep this email for your records as it serves as confirmation of your successful registration. Closer to the event date, you will receive a comprehensive email containing additional details such as rules, check-in procedures, and any other pertinent information to ensure a smooth and enjoyable experience.


Next Steps:

  • Payment Confirmation: Your payment of $200 has been successfully processed.
  • Athlete Information: If you have registered athletes, please be ready to provide their details on the check-in page.
  • Stay Connected: Follow us on [Social Media Links] for event updates, behind-the-scenes content, and more.

We're looking forward to hosting you at the ArcticGrapple Games! If you have any questions or concerns in the meantime, feel free to reach out to our event organizers at

[Organizer's Email] or [Organizer's Phone Number].


Best Regards,

[Your Organization Name]

ArcticGrapple Games Organizing Team

','','Thank you for registering for the ArticGrapple Games','','','','','','','1'); -INSERT INTO "Summit_Events_Email__c" VALUES(3,'Registered','','','THIS IS TEXT','

Add to Calendar

{!Add_To_Google_Calendar_Link__c} | {!Add_To_Outlook_Web_Calendar__c}



Dear {!Registrant_First_Name__c},


Thank you for registering for the 2024 AR Fundraising Golf Event. We are excited to have you on board! Your support will directly contribute to the AR scholarship fund, making a positive impact.


Event Details:

  • Date: {!Event_Instance_Date_Time_Formatted__c}
  • Location: {!Location_Title__c}

Registration Information:

  • Full Name: {!Registrant_First_Name__c} {!Registrant_Last_Name__c}
  • Email Address: {Registrant_Email__c}

Golf Event Details:

  • Handicap: {!Add_Info_Answer_1__c}
  • Shirt Size: {!Add_Info_Answer_2__c}

Itinerary:

{!Generated_Itinerary__c}


Please retain this email for your records. If you have any questions or need assistance, feel free to reach out to us at [Your Contact Email/Phone].


Thank you once again for your support!


Best Regards,

[Your Organization Name]

','','Confirmation of Your Registration for the 2024 AR Fundraising Golf Event','','','','','','','9'); -INSERT INTO "Summit_Events_Email__c" VALUES(4,'Registered','','','THIS IS TEXT','

Dear {!Registrant_First_Name__c},


Thank you for registering for the Connected University Graduate Programs Open House on {!Event_Instance_Start_Date__c}! We're delighted that you'll be joining us for this exciting exploration of our diverse and innovative graduate programs.


Registration Details:

Event Date: {!Event_Instance_Date_Time_Formatted__c}

Event Location: {!Location_Title__c}

Registration ID: {!Name}


Itinerary

{!Generated_Itinerary__c}



Spread the Word:

Invite your friends and colleagues who may also be interested in exploring graduate opportunities at Connected University. The more, the merrier!


Thank you once again for registering. We can't wait to welcome you to the Connected University Graduate Programs Open House and showcase the possibilities that await you.


Best regards,

[Your Organization's Name]

[Your Organization's Contact Information]

','','Thank you for Registering! - Open House Connected University','','','','','','','5'); +INSERT INTO "Summit_Events_Email__c" VALUES('Summit_Events_Email__c-1','Registered','','','THIS IS TEXT','

Dear {!Registrant_First_Name__c},


Thank you for registering for the ArcticGrapple Games, the ultimate wrestling experience! We are thrilled to have you on board for this exciting event.


Event Details:

  • Date: {!Event_Instance_Date_Time_Formatted__c}
  • Time: {!Event_Instance_Start_Time__c}
  • Location: {!Location_Title__c}
  • Registration ID: {!Name}


Important Information:

Please keep this email for your records as it serves as confirmation of your successful registration. Closer to the event date, you will receive a comprehensive email containing additional details such as rules, check-in procedures, and any other pertinent information to ensure a smooth and enjoyable experience.


Next Steps:

  • Payment Confirmation: Your payment of $200 has been successfully processed.
  • Athlete Information: If you have registered athletes, please be ready to provide their details on the check-in page.
  • Stay Connected: Follow us on [Social Media Links] for event updates, behind-the-scenes content, and more.

We're looking forward to hosting you at the ArcticGrapple Games! If you have any questions or concerns in the meantime, feel free to reach out to our event organizers at

[Organizer's Email] or [Organizer's Phone Number].


Best Regards,

[Your Organization Name]

ArcticGrapple Games Organizing Team

','','Thank you for registering for the ArticGrapple Games','','','','','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Email__c" VALUES('Summit_Events_Email__c-2','Registered','','','THIS IS TEXT','

Dear {!Registrant_First_Name__c},


We are thrilled to confirm your registration for the upcoming taking place on {!Event_Instance_Start_Date__c} at the {!Location_Title__c}. Thank you for choosing to be a part of this exciting event!


Registration Details:

Event Name: {!Event_Name__c}

Event Date: {!Event_Instance_Start_Date__c}

Event Location: {!Location_Title__c}

Registration ID: {!Name}



We have received your registration information and you are all set to join us. We can't wait to see you at the event. Here are a few important details to keep in mind:


Event Date: {!Event_Instance_Start_Date__c}

Event Time: {!Event_Instance_Start_Time__c}

Location: {!Location_Title__c}

Registration ID: {!Name}


Please arrive a little early to ensure a smooth check-in process. If you have any questions or need further assistance, don't hesitate to contact our event support team.


We have an exciting agenda planned with amazing speakers and valuable content. Get ready for an enriching experience!


Thank you for choosing to be a part of this event. We look forward to meeting you and hope you have a fantastic time.


Warm regards,

The Common Team!

','','Thank you for Registering! - Commons Open Source Sprint','','','','','','','Summit_Events__c-3'); +INSERT INTO "Summit_Events_Email__c" VALUES('Summit_Events_Email__c-3','Registered','','','THIS IS TEXT','

Dear {!Registrant_First_Name__c},


Thank you for registering for the Connected University Graduate Programs Open House on {!Event_Instance_Start_Date__c}! We're delighted that you'll be joining us for this exciting exploration of our diverse and innovative graduate programs.


Registration Details:

Event Date: {!Event_Instance_Date_Time_Formatted__c}

Event Location: {!Location_Title__c}

Registration ID: {!Name}


Itinerary

{!Generated_Itinerary__c}



Spread the Word:

Invite your friends and colleagues who may also be interested in exploring graduate opportunities at Connected University. The more, the merrier!


Thank you once again for registering. We can't wait to welcome you to the Connected University Graduate Programs Open House and showcase the possibilities that await you.


Best regards,

[Your Organization's Name]

[Your Organization's Contact Information]

','','Thank you for Registering! - Open House Connected University','','','','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Email__c" VALUES('Summit_Events_Email__c-4','Registered','','','THIS IS TEXT','

Add to Calendar

{!Add_To_Google_Calendar_Link__c} | {!Add_To_Outlook_Web_Calendar__c}



Dear {!Registrant_First_Name__c},


Thank you for registering for the 2024 AR Fundraising Golf Event. We are excited to have you on board! Your support will directly contribute to the AR scholarship fund, making a positive impact.


Event Details:

  • Date: {!Event_Instance_Date_Time_Formatted__c}
  • Location: {!Location_Title__c}

Registration Information:

  • Full Name: {!Registrant_First_Name__c} {!Registrant_Last_Name__c}
  • Email Address: {Registrant_Email__c}

Golf Event Details:

  • Handicap: {!Add_Info_Answer_1__c}
  • Shirt Size: {!Add_Info_Answer_2__c}

Itinerary:

{!Generated_Itinerary__c}


Please retain this email for your records. If you have any questions or need assistance, feel free to reach out to us at [Your Contact Email/Phone].


Thank you once again for your support!


Best Regards,

[Your Organization Name]

','','Confirmation of Your Registration for the 2024 AR Fundraising Golf Event','','','','','','','Summit_Events__c-9'); CREATE TABLE "Summit_Events_Fee_Allocation__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Name" VARCHAR(255), PRIMARY KEY (id) ); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(1,'Event Operations'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(2,'Event Operations'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(3,'Annual Golf Operations'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(4,'Gala General Donations'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(5,'General Fund'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(6,'Gala Ticket Sales'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(7,'Meals on Wheels'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(8,'Organization Operations & Technology'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(9,'Tournament Operations'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(10,'General Donation Fund'); -INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES(11,'AR Scholarship Fund'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-1','Event Operations'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-2','Event Operations'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-3','Annual Golf Operations'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-4','Gala General Donations'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-5','General Fund'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-6','Gala Ticket Sales'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-7','Meals on Wheels'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-8','Organization Operations & Technology'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-9','Tournament Operations'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-10','General Donation Fund'); +INSERT INTO "Summit_Events_Fee_Allocation__c" VALUES('Summit_Events_Fee_Allocation__c-11','AR Scholarship Fund'); CREATE TABLE "Summit_Events_Fee__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Description__c" VARCHAR(255), "Event_Fee_Type__c" VARCHAR(255), "Event_Fee__c" VARCHAR(255), @@ -197,7 +211,7 @@ CREATE TABLE "Summit_Events_Fee__c" ( PRIMARY KEY (id) ); CREATE TABLE "Summit_Events_Host__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Additional_Comments__c" VARCHAR(255), "Assigned__c" VARCHAR(255), "Building__c" VARCHAR(255), @@ -219,10 +233,11 @@ CREATE TABLE "Summit_Events_Host__c" ( CREATE TABLE "Summit_Events_Host__c_rt_mapping" ( record_type_id VARCHAR(18) NOT NULL, developer_name VARCHAR(255), + is_person_type BOOLEAN, PRIMARY KEY (record_type_id) ); CREATE TABLE "Summit_Events_Instance__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Active_Status__c" VARCHAR(255), "Alternate_Registration_URL_Override__c" VARCHAR(255), "Attendee_List__c" VARCHAR(255), @@ -252,36 +267,36 @@ CREATE TABLE "Summit_Events_Instance__c" ( "Event__c" VARCHAR(255), PRIMARY KEY (id) ); -INSERT INTO "Summit_Events_Instance__c" VALUES(1,'Active','','False','','Registrants plus Guests','72.0','','','150.0','','2024-06-06','15:00:00.000Z','2024 Fundraising Golf Event','2024-06-06','09:00:00.000Z','Eastern Standard Time (America/Panama)','2024 Fundraising Golf Event (Individual Registration)','','','','','True','','','','','9'); -INSERT INTO "Summit_Events_Instance__c" VALUES(2,'Active','','False','','Registrants plus Guests','150.0','','','','','2023-12-13','17:00:00.000Z','','2023-12-13','08:30:00.000Z','Central Daylight Time (America/Chicago)','In-Person','','','','','False','','','','','7'); -INSERT INTO "Summit_Events_Instance__c" VALUES(3,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-09','14:30:00.000Z','','2023-11-09','13:00:00.000Z','Central Daylight Time (America/Chicago)','First Date','','','','','False','','','','','5'); -INSERT INTO "Summit_Events_Instance__c" VALUES(4,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-23','14:30:00.000Z','','2023-11-23','13:00:00.000Z','Central Daylight Time (America/Chicago)','Third Date','','','','','False','','','','','5'); -INSERT INTO "Summit_Events_Instance__c" VALUES(5,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-16','14:30:00.000Z','','2023-11-16','13:00:00.000Z','Central Daylight Time (America/Chicago)','Second Date','','','','','False','','','','','5'); -INSERT INTO "Summit_Events_Instance__c" VALUES(6,'Active','','False','','Registrants plus Guests','500.0','','','','','2023-12-18','23:00:00.000Z','Annual Dinner & Auction','2023-12-18','18:00:00.000Z','Central Daylight Time (America/Mexico_City)','Annual Dinner & Auction','','','','','False','','','','','8'); -INSERT INTO "Summit_Events_Instance__c" VALUES(7,'Active','','False','','Registrants plus Guests','72.0','','','','','2024-06-06','15:00:00.000Z','2024 Fundraising Golf Event','2024-06-06','09:00:00.000Z','Eastern Standard Time (America/Panama)','2024 Fundraising Golf Event','','','','','False','','','','','9'); -INSERT INTO "Summit_Events_Instance__c" VALUES(8,'Active','','False','','Registrants plus Guests','20.0','','','','','2023-12-10','20:30:00.000Z','December 2023 Caregiver Support','2023-12-10','19:00:00.000Z','Eastern Standard Time (America/Panama)','December 2023 Caregiver Support','','','','','False','','','','','10'); -INSERT INTO "Summit_Events_Instance__c" VALUES(9,'Active','','False','','Registrants plus Guests','20.0','','','','','2024-03-10','20:30:00.000Z','March 2024 Caregiver Support','2024-03-10','19:00:00.000Z','Eastern Standard Time (America/Panama)','March 2024 Caregiver Support','','','','','False','','','','','10'); -INSERT INTO "Summit_Events_Instance__c" VALUES(10,'Active','','False','','Registrants plus Guests','20.0','','','','','2024-02-11','20:30:00.000Z','February 2024 Caregiver Support','2024-02-11','19:00:00.000Z','Eastern Standard Time (America/Panama)','February 2024 Caregiver Support','','','','','False','','','','','10'); -INSERT INTO "Summit_Events_Instance__c" VALUES(11,'Active','','False','','Registrants plus Guests','20.0','','','','','2024-01-14','20:30:00.000Z','December 2024 Caregiver Support','2024-01-14','19:00:00.000Z','Eastern Standard Time (America/Panama)','January 2024 Caregiver Support','','','','','False','','','','','10'); -INSERT INTO "Summit_Events_Instance__c" VALUES(12,'Active','','False','','Registrants plus Guests','20.0','','','','','2024-05-12','20:30:00.000Z','May 2024 Caregiver Support','2024-05-12','19:00:00.000Z','Eastern Standard Time (America/Panama)','May 2024 Caregiver Support','','','','','False','','','','','10'); -INSERT INTO "Summit_Events_Instance__c" VALUES(13,'Active','','False','','Registrants plus Guests','20.0','','','','','2024-04-14','20:30:00.000Z','April 2024 Caregiver Support','2024-04-14','19:00:00.000Z','Eastern Standard Time (America/Panama)','April 2024 Caregiver Support','','','','','False','','','','','10'); -INSERT INTO "Summit_Events_Instance__c" VALUES(14,'Active','','False','','Registrants plus Guests','300.0','','','','','2023-11-17','20:00:00.000Z','2-day Wrestling Event','2023-11-16','07:00:00.000Z','Central Daylight Time (America/Chicago)','ArcticGrapple Games','','','','','False','','','','','1'); -INSERT INTO "Summit_Events_Instance__c" VALUES(15,'Active','','False','','Individual Registrants','40.0','','','','','2024-06-16','23:59:00.000Z','Operated by Orbridge Travel','2024-06-11','00:00:00.000Z','Central Daylight Time (America/Chicago)','Cruise to Japan','','','','','False','','','','','2'); -INSERT INTO "Summit_Events_Instance__c" VALUES(16,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-11','16:00:00.000Z','Tour @ 2pm','2023-11-11','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(17,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-09','12:00:00.000Z','Tour @ 10am','2023-11-09','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(18,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-08','12:00:00.000Z','Tour @ 10am','2023-11-08','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(19,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-12','16:00:00.000Z','Tour @ 2pm','2023-11-12','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(20,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-12-12','12:00:00.000Z','Tour @ 10am','2023-12-12','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(21,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-10','12:00:00.000Z','Tour @ 10am','2023-11-10','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(22,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-08','16:00:00.000Z','Tour @ 2pm','2023-11-08','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(23,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-09','16:00:00.000Z','Tour @ 2pm','2023-11-09','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(24,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-10','16:00:00.000Z','Tour @ 2pm','2023-11-10','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(25,'Active','','False','','Registrants plus Guests','25.0','','','','','2023-11-11','12:00:00.000Z','Tour @ 10am','2023-11-11','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','3'); -INSERT INTO "Summit_Events_Instance__c" VALUES(26,'Active','','False','','Registrants plus Guests','150.0','','','','','2023-11-24','17:00:00.000Z','Can''t be there in-person, we have an option for you!','2023-11-23','08:30:00.000Z','Central Daylight Time (America/Chicago)','Virtual','Sent via Email closer to date','https://trailhead.salesforce.com/trailblazer-community/groups/0F94S000000GwVK?tab=discussion&sort=LAST_MODIFIED_DATE_DESC#discussion?icid=SFORG:resource-page-hero:','Virtual/Zoom','Online','False','','https://www.meetinglink.demo','','','4'); -INSERT INTO "Summit_Events_Instance__c" VALUES(27,'Active','','False','','Registrants plus Guests','150.0','','','','','2023-11-23','17:00:00.000Z','Come join us in person!','2023-11-23','08:30:00.000Z','Central Daylight Time (America/Chicago)','In-Person','','','New York Salesforce Tower','On-Site','False','','','','','4'); -INSERT INTO "Summit_Events_Instance__c" VALUES(28,'Active','','False','','Registrants plus Guests','900.0','','','','','2024-03-03','23:00:00.000Z','','2024-03-03','19:00:00.000Z','Central Daylight Time (America/Chicago)','A Night of Giving Hope 2024','','','','','False','','','','','6'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-1','Active','','False','','Registrants plus Guests','300.0','','','','','2025-11-24','20:00:00.000Z','2-day Wrestling Event','2025-11-23','07:00:00.000Z','Central Daylight Time (America/Chicago)','ArcticGrapple Games','','','','','False','','','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-2','Active','','False','','Registrants plus Guests','20.0','','','','','2025-12-17','20:30:00.000Z','December 2023 Caregiver Support','2025-12-17','19:00:00.000Z','Eastern Standard Time (America/Panama)','December 2023 Caregiver Support','','','','','False','','','','','Summit_Events__c-6'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-3','Active','','False','','Registrants plus Guests','20.0','','','','','2026-03-18','20:30:00.000Z','March 2024 Caregiver Support','2026-03-18','19:00:00.000Z','Eastern Standard Time (America/Panama)','March 2024 Caregiver Support','','','','','False','','','','','Summit_Events__c-6'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-4','Active','','False','','Registrants plus Guests','20.0','','','','','2026-02-18','20:30:00.000Z','February 2024 Caregiver Support','2026-02-18','19:00:00.000Z','Eastern Standard Time (America/Panama)','February 2024 Caregiver Support','','','','','False','','','','','Summit_Events__c-6'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-5','Active','','False','','Registrants plus Guests','20.0','','','','','2026-01-21','20:30:00.000Z','December 2024 Caregiver Support','2026-01-21','19:00:00.000Z','Eastern Standard Time (America/Panama)','January 2024 Caregiver Support','','','','','False','','','','','Summit_Events__c-6'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-6','Active','','False','','Registrants plus Guests','20.0','','','','','2026-05-20','20:30:00.000Z','May 2024 Caregiver Support','2026-05-20','19:00:00.000Z','Eastern Standard Time (America/Panama)','May 2024 Caregiver Support','','','','','False','','','','','Summit_Events__c-6'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-7','Active','','False','','Registrants plus Guests','20.0','','','','','2026-04-22','20:30:00.000Z','April 2024 Caregiver Support','2026-04-22','19:00:00.000Z','Eastern Standard Time (America/Panama)','April 2024 Caregiver Support','','','','','False','','','','','Summit_Events__c-6'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-8','Active','','False','','Individual Registrants','40.0','','','','','2026-06-24','23:59:00.000Z','Operated by Orbridge Travel','2026-06-19','00:00:00.000Z','Central Daylight Time (America/Chicago)','Cruise to Japan','','','','','False','','','','','Summit_Events__c-1'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-9','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-18','16:00:00.000Z','Tour @ 2pm','2025-11-18','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-10','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-16','12:00:00.000Z','Tour @ 10am','2025-11-16','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-11','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-15','12:00:00.000Z','Tour @ 10am','2025-11-15','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-12','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-19','16:00:00.000Z','Tour @ 2pm','2025-11-19','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-13','Active','','False','','Registrants plus Guests','25.0','','','','','2025-12-19','12:00:00.000Z','Tour @ 10am','2025-12-19','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-14','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-17','12:00:00.000Z','Tour @ 10am','2025-11-17','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-15','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-15','16:00:00.000Z','Tour @ 2pm','2025-11-15','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-16','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-16','16:00:00.000Z','Tour @ 2pm','2025-11-16','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-17','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-17','16:00:00.000Z','Tour @ 2pm','2025-11-17','12:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Afternoon','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-18','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-18','12:00:00.000Z','Tour @ 10am','2025-11-18','08:00:00.000Z','Central Daylight Time (America/Chicago)','Campus Tour - Morning','','','','','False','','','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-19','Active','','False','','Registrants plus Guests','150.0','','','','','2025-12-01','17:00:00.000Z','Can''t be there in-person, we have an option for you!','2025-11-30','08:30:00.000Z','Central Daylight Time (America/Chicago)','Virtual','Sent via Email closer to date','https://trailhead.salesforce.com/trailblazer-community/groups/0F94S000000GwVK?tab=discussion&sort=LAST_MODIFIED_DATE_DESC#discussion?icid=SFORG:resource-page-hero:','Virtual/Zoom','Online','False','','https://www.meetinglink.demo','','','Summit_Events__c-3'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-20','Active','','False','','Registrants plus Guests','150.0','','','','','2025-11-30','17:00:00.000Z','Come join us in person!','2025-11-30','08:30:00.000Z','Central Daylight Time (America/Chicago)','In-Person','','','New York Salesforce Tower','On-Site','False','','','','','Summit_Events__c-3'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-21','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-16','14:30:00.000Z','','2025-11-16','13:00:00.000Z','Central Daylight Time (America/Chicago)','First Date','','','','','False','','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-22','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-30','14:30:00.000Z','','2025-11-30','13:00:00.000Z','Central Daylight Time (America/Chicago)','Third Date','','','','','False','','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-23','Active','','False','','Registrants plus Guests','25.0','','','','','2025-11-23','14:30:00.000Z','','2025-11-23','13:00:00.000Z','Central Daylight Time (America/Chicago)','Second Date','','','','','False','','','','','Summit_Events__c-4'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-24','Active','','False','','Registrants plus Guests','900.0','','','','','2026-03-11','23:00:00.000Z','','2026-03-11','19:00:00.000Z','Central Daylight Time (America/Chicago)','A Night of Giving Hope 2024','','','','','False','','','','','Summit_Events__c-10'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-25','Active','','False','','Registrants plus Guests','150.0','','','','','2025-12-20','17:00:00.000Z','','2025-12-20','08:30:00.000Z','Central Daylight Time (America/Chicago)','In-Person','','','','','False','','','','','Summit_Events__c-5'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-26','Active','','False','','Registrants plus Guests','500.0','','','','','2025-12-25','23:00:00.000Z','Annual Dinner & Auction','2025-12-25','18:00:00.000Z','Central Daylight Time (America/Mexico_City)','Annual Dinner & Auction','','','','','False','','','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-27','Active','','False','','Registrants plus Guests','72.0','','','150.0','','2026-06-14','15:00:00.000Z','2024 Fundraising Golf Event','2026-06-14','09:00:00.000Z','Eastern Standard Time (America/Panama)','2024 Fundraising Golf Event (Individual Registration)','','','','','True','','','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Instance__c" VALUES('Summit_Events_Instance__c-28','Active','','False','','Registrants plus Guests','72.0','','','','','2026-06-14','15:00:00.000Z','2024 Fundraising Golf Event','2026-06-14','09:00:00.000Z','Eastern Standard Time (America/Panama)','2024 Fundraising Golf Event','','','','','False','','','','','Summit_Events__c-9'); CREATE TABLE "Summit_Events_Payment__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Account_Number__c" VARCHAR(255), "Address_1__c" VARCHAR(255), "Address_2__c" VARCHAR(255), @@ -312,7 +327,7 @@ CREATE TABLE "Summit_Events_Payment__c" ( PRIMARY KEY (id) ); CREATE TABLE "Summit_Events_Question__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Controlling_Logic__c" VARCHAR(255), "Default_Value__c" VARCHAR(255), "Display_Order__c" VARCHAR(255), @@ -325,6 +340,7 @@ CREATE TABLE "Summit_Events_Question__c" ( "Lookup_Fields__c" VARCHAR(255), "Lookup_No_Results_Label__c" VARCHAR(255), "Lookup_Object__c" VARCHAR(255), + "Lookup_Order_By__c" VARCHAR(255), "Lookup_Results_Icon__c" VARCHAR(255), "Lookup_Secondary_Input_Instructions__c" VARCHAR(255), "Lookup_Secondary_Input_Link_Text__c" VARCHAR(255), @@ -343,19 +359,15 @@ CREATE TABLE "Summit_Events_Question__c" ( "Event__c" VARCHAR(255), PRIMARY KEY (id) ); -INSERT INTO "Summit_Events_Question__c" VALUES(1,'','','20.0','','','','','','True','','','','','','','','','Registrant_Last_Name__c','Guest Last Name','','','Textbox','Guest Last Name','Guest','True','','','8'); -INSERT INTO "Summit_Events_Question__c" VALUES(2,'','','20.0','','','','','','True','','','','','','','','','Registrant_Last_Name__c','Guest Last Name','','','Textbox','Last Name','Guest','True','','','9'); -INSERT INTO "Summit_Events_Question__c" VALUES(3,'','','30.0','','','','','','True','','','','','','','','','Registrant_Email__c','Guest Email','','','Email','Email','Guest','False','','','9'); -INSERT INTO "Summit_Events_Question__c" VALUES(4,'','','10.0','','','','','','True','','','','','','','','','Registrant_First_Name__c','Guest First Name','','','Textbox','First Name','Guest','True','','','9'); -INSERT INTO "Summit_Events_Question__c" VALUES(5,'','','10.0','Half width','','','','','True','','','','','','','','','Registrant_First_Name__c','First Name','','','Textbox','First Name','Guest','True','','','1'); -INSERT INTO "Summit_Events_Question__c" VALUES(6,'','','100.0','','','','','','True','','','','','','','','','Add_Info_Answer_4__c','Reference','','','Textbox','How did you hear about us?','Registrant','False','','','1'); -INSERT INTO "Summit_Events_Question__c" VALUES(7,'','Freestyle','50.0','','','','','This is required for Wrestlers.','True','','','','','','','','','Add_Info_Answer_3__c','Style','Freestyle +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-1','','','10.0','Half width','','','','','True','','','','','','','','','','Registrant_First_Name__c','First Name','','','Textbox','First Name','Guest','True','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-2','','','100.0','','','','','','True','','','','','','','','','','Add_Info_Answer_4__c','Reference','','','Textbox','How did you hear about us?','Registrant','False','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-3','','Freestyle','50.0','','','','','This is required for Wrestlers.','True','','','','','','','','','','Add_Info_Answer_3__c','Style','Freestyle Folkstyle -Both - YOU MAY NOT RECIEVE THE SUGGESTED 30MIN REST TIME','','Picklist','Which Style Bracket?','Registrant and Guest','False','','','1'); -INSERT INTO "Summit_Events_Question__c" VALUES(8,'','','30.0','','','','','','True','','','','','','','','','Registrant_Date_of_Birth__c','Birthday','','','Date','Birthday','Registrant and Guest','True','','','1'); -INSERT INTO "Summit_Events_Question__c" VALUES(9,'','','60.0','','','','W = Women; M = Men - an incorrect selection will be assuming the next level up in the matching gender class.','This is required for Wrestlers. Leaving blank will result in a canceled registration.','True','','','','','','','','','Add_Info_Answer_2__c','Weight Class','W - 110 lbs +Both - YOU MAY NOT RECIEVE THE SUGGESTED 30MIN REST TIME','','Picklist','Which Style Bracket?','Registrant and Guest','False','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-4','','','30.0','','','','','','True','','','','','','','','','','Registrant_Date_of_Birth__c','Birthday','','','Date','Birthday','Registrant and Guest','True','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-5','','','60.0','','','','W = Women; M = Men - an incorrect selection will be assuming the next level up in the matching gender class.','This is required for Wrestlers. Leaving blank will result in a canceled registration.','True','','','','','','','','','','Add_Info_Answer_2__c','Weight Class','W - 110 lbs W - 117 lbs @@ -395,9 +407,9 @@ M - 203 lbs M - 214 lbs -M - 276 lbs','','Picklist','What Weight Class will you compete in?','Registrant and Guest','False','','','1'); -INSERT INTO "Summit_Events_Question__c" VALUES(10,'','','20.0','','','','','','True','','','','','','','','','Registrant_Last_Name__c','Last Name','','','Textbox','Last Name','Guest','True','','','1'); -INSERT INTO "Summit_Events_Question__c" VALUES(11,'','Wrestler','1.0','','','','','','True','','','','','','','','','Add_Info_Answer_1__c','Attendee','Wrestler +M - 276 lbs','','Picklist','What Weight Class will you compete in?','Registrant and Guest','False','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-6','','','20.0','','','','','','True','','','','','','','','','','Registrant_Last_Name__c','Last Name','','','Textbox','Last Name','Guest','True','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-7','','Wrestler','1.0','','','','','','True','','','','','','','','','','Add_Info_Answer_1__c','Attendee','Wrestler Coach @@ -405,20 +417,25 @@ Parent Trainer -Referee','','Picklist','What kind of registration?','Registrant and Guest','True','','','1'); -INSERT INTO "Summit_Events_Question__c" VALUES(12,'','','40.0','Half width','','','','','True','','','','','','','','','Registrant_Gender__c','Gender','Male - -Female','','Picklist','Gender','Guest','False','','','1'); -INSERT INTO "Summit_Events_Question__c" VALUES(13,'','','','','','','','If you will be traveling with someone who is not included on this registration, please provide their name and we will match up your itineraries. If you are traveling solo, do not include a name and you will be contact separately about your single supplement fee.','True','','','','','','','','','event_cotraveler__c','Travel Companion Name','','','Textbox','Co-traveler name (optional)','Registrant','False','','','2'); -INSERT INTO "Summit_Events_Question__c" VALUES(14,'','','10.0','Half width','','','','What High School or College do you go to?','True','','','','','','','','','Registrant_High_School__c','High School/College','','','Textbox','High School/College','Registrant','True','100.0','','3'); -INSERT INTO "Summit_Events_Question__c" VALUES(15,'','','','Half width','','','This is just to drive conversation, not holding you to anything!','If you don''t know, leave it blank and we can talk about it more later.','True','','','','','','','','','Add_Info_Answer_1__c','College Credits','','','Textbox','Are you intended to transfer in credits? If so, How many?','Registrant','False','','','3'); -INSERT INTO "Summit_Events_Question__c" VALUES(16,'','','10.0','Half width','Please enter a valid email address.','','','Please share your the email address associated to your Slack account. Don''t have a Slack account, you''re about to!','True','','','','','','','','','Registrant_Other_Email__c','Other Email','','','Email','Other Email (for Slack purposes during the sprint if different to the above).','Registrant','False','100.0','','4'); -INSERT INTO "Summit_Events_Question__c" VALUES(17,'','','20.0','Half width','','','Example: https://github.com/USERNAME. *','','True','','','','','','','','','Add_Info_Answer_4__c','Github User','','','Textbox','What is your GitHub Username?','Registrant','True','100.0','','4'); -INSERT INTO "Summit_Events_Question__c" VALUES(18,'','','','','','','','','True','','','','','','','','','Registrant_First_Name__c','Guest First Name','','','Textbox','Guest First Name','Guest','True','','','6'); -INSERT INTO "Summit_Events_Question__c" VALUES(19,'','','','','','','','','True','','','','','','','','','Registrant_Last_Name__c','Guest Last Name','','','Textbox','Guest Last Name','Guest','True','','','6'); -INSERT INTO "Summit_Events_Question__c" VALUES(20,'','','','','Please enter a valid email address.','','','','True','','','','','','','','','Registrant_Email__c','Guest Email','','','Email','Guest Email','Guest','True','','','6'); -INSERT INTO "Summit_Events_Question__c" VALUES(21,'','','30.0','','Please enter a valid email address.','','','','True','','','','','','','','','Registrant_Email__c','Guest Email','','','Email','Guest Email','Guest','True','','','8'); -INSERT INTO "Summit_Events_Question__c" VALUES(22,'','','60.0','','','','','','True','','','','','','','','','Add_Info_Answer_2__c','Golfer T-Shirt Size','','S +Referee','','Picklist','What kind of registration?','Registrant and Guest','True','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-8','','','40.0','Half width','','','','','True','','','','','','','','','','Registrant_Gender__c','Gender','Male + +Female','','Picklist','Gender','Guest','False','','','Summit_Events__c-7'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-9','','','','','','','','If you will be traveling with someone who is not included on this registration, please provide their name and we will match up your itineraries. If you are traveling solo, do not include a name and you will be contact separately about your single supplement fee.','True','','','','','','','','','','event_cotraveler__c','Travel Companion Name','','','Textbox','Co-traveler name (optional)','Registrant','False','','','Summit_Events__c-1'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-10','','','10.0','Half width','','','','What High School or College do you go to?','True','','','','','','','','','','Registrant_High_School__c','High School/College','','','Textbox','High School/College','Registrant','True','100.0','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-11','','','','Half width','','','This is just to drive conversation, not holding you to anything!','If you don''t know, leave it blank and we can talk about it more later.','True','','','','','','','','','','Add_Info_Answer_1__c','College Credits','','','Textbox','Are you intended to transfer in credits? If so, How many?','Registrant','False','','','Summit_Events__c-2'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-12','','','10.0','Half width','Please enter a valid email address.','','','Please share your the email address associated to your Slack account. Don''t have a Slack account, you''re about to!','True','','','','','','','','','','Registrant_Other_Email__c','Other Email','','','Email','Other Email (for Slack purposes during the sprint if different to the above).','Registrant','False','100.0','','Summit_Events__c-3'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-13','','','20.0','Half width','','','Example: https://github.com/USERNAME. *','','True','','','','','','','','','','Add_Info_Answer_4__c','Github User','','','Textbox','What is your GitHub Username?','Registrant','True','100.0','','Summit_Events__c-3'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-14','','','','','','','','','True','','','','','','','','','','Registrant_First_Name__c','Guest First Name','','','Textbox','Guest First Name','Guest','True','','','Summit_Events__c-10'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-15','','','','','','','','','True','','','','','','','','','','Registrant_Last_Name__c','Guest Last Name','','','Textbox','Guest Last Name','Guest','True','','','Summit_Events__c-10'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-16','','','','','Please enter a valid email address.','','','','True','','','','','','','','','','Registrant_Email__c','Guest Email','','','Email','Guest Email','Guest','True','','','Summit_Events__c-10'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-17','','','20.0','','','','','','True','','','','','','','','','','Registrant_Last_Name__c','Guest Last Name','','','Textbox','Guest Last Name','Guest','True','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-18','','','30.0','','Please enter a valid email address.','','','','True','','','','','','','','','','Registrant_Email__c','Guest Email','','','Email','Guest Email','Guest','True','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-19','','','10.0','','','','','','True','','','','','','','','','','Registrant_First_Name__c','Guest First Name','','','Textbox','Guest First Name','Guest','True','','','Summit_Events__c-8'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-20','','','20.0','','','','','','True','','','','','','','','','','Registrant_Last_Name__c','Guest Last Name','','','Textbox','Last Name','Guest','True','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-21','','','30.0','','','','','','True','','','','','','','','','','Registrant_Email__c','Guest Email','','','Email','Email','Guest','False','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-22','','','10.0','','','','','','True','','','','','','','','','','Registrant_First_Name__c','Guest First Name','','','Textbox','First Name','Guest','True','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-23','','','60.0','','','','','','True','','','','','','','','','','Add_Info_Answer_2__c','Golfer T-Shirt Size','','S M @@ -428,14 +445,15 @@ XL XXL -XXXL','Picklist','Golfer T-Shirt Size','Guest','True','','','9'); -INSERT INTO "Summit_Events_Question__c" VALUES(23,'','','10.0','','','','','','True','','','','','','','','','Registrant_First_Name__c','Guest First Name','','','Textbox','Guest First Name','Guest','True','','','8'); -INSERT INTO "Summit_Events_Question__c" VALUES(24,'','','40.0','','','','','','True','','','','','','','','','Add_Info_Answer_5__c','Golfer/Guest','','Golfer +XXXL','Picklist','Golfer T-Shirt Size','Guest','True','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-24','','','40.0','','','','','','True','','','','','','','','','','Add_Info_Answer_5__c','Golfer/Guest','','Golfer -Dinner Guest','Picklist','Is this a Golfer or a Guest for Dinner?','Guest','True','','','9'); -INSERT INTO "Summit_Events_Question__c" VALUES(25,'','','50.0','','','','','','True','','','','','','','','','Add_Info_Answer_1__c','Handicap','','','Textbox','Golfer Handicap','Guest','True','','','9'); +Dinner Guest','Picklist','Is this a Golfer or a Guest for Dinner?','Guest','True','','','Summit_Events__c-9'); +INSERT INTO "Summit_Events_Question__c" VALUES('Summit_Events_Question__c-25','','','50.0','','','','','','True','','','','','','','','','','Add_Info_Answer_1__c','Handicap','','','Textbox','Golfer Handicap','Guest','True','','','Summit_Events__c-9'); CREATE TABLE "Summit_Events_Registration__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, + "Accessibility_Need_Detail__c" VARCHAR(255), + "Accessibility_Need__c" VARCHAR(255), "Actual_Number_of_Guests__c" VARCHAR(255), "Add_Info_Answer_1__c" VARCHAR(255), "Add_Info_Answer_2__c" VARCHAR(255), @@ -454,6 +472,7 @@ CREATE TABLE "Summit_Events_Registration__c" ( "Campus_Tour_Time__c" VARCHAR(255), "Confirmation_Call_Result__c" VARCHAR(255), "Date_All_Appointments_Confirmed_del__c" VARCHAR(255), + "Dietary_Ristrictions__c" VARCHAR(255), "Display_Attendance_Publicly__c" VARCHAR(255), "Encrypted_Registration_Id_1__c" VARCHAR(255), "Encrypted_Registration_Id_2__c" VARCHAR(255), @@ -470,6 +489,7 @@ CREATE TABLE "Summit_Events_Registration__c" ( "Matching_Log__c" VARCHAR(255), "New_Contact_Created__c" VARCHAR(255), "New_Lead_Created__c" VARCHAR(255), + "New_Person_Account_Created__c" VARCHAR(255), "Number_of_Guests__c" VARCHAR(255), "Participation_Type__c" VARCHAR(255), "Payment_Gateway_Status__c" VARCHAR(255), @@ -485,6 +505,7 @@ CREATE TABLE "Summit_Events_Registration__c" ( "Registrant_College__c" VARCHAR(255), "Registrant_Company_Organization__c" VARCHAR(255), "Registrant_Country__c" VARCHAR(255), + "Registrant_Date_of_Birth_Text__c" VARCHAR(255), "Registrant_Date_of_Birth__c" VARCHAR(255), "Registrant_Do_Not_Call__c" VARCHAR(255), "Registrant_Email__c" VARCHAR(255), @@ -526,6 +547,7 @@ CREATE TABLE "Summit_Events_Registration__c" ( "Status__c" VARCHAR(255), "Substatus__c" VARCHAR(255), gclid__c VARCHAR(255), + "reCAPTCHA_Score__c" VARCHAR(255), utm_campaign__c VARCHAR(255), utm_content__c VARCHAR(255), utm_creative_format__c VARCHAR(255), @@ -539,13 +561,17 @@ CREATE TABLE "Summit_Events_Registration__c" ( "Event_Instance__c" VARCHAR(255), "Event__c" VARCHAR(255), "Guest_Host__c" VARCHAR(255), + "Lead__c" VARCHAR(255), + "Person_Account__c" VARCHAR(255), PRIMARY KEY (id) ); CREATE TABLE "Summit_Events__c" ( - id INTEGER NOT NULL, + id VARCHAR(255) NOT NULL, "Academic_Program_List_Selected__c" VARCHAR(255), "Academic_Program_List__c" VARCHAR(255), "Academic_Program_Selected__c" VARCHAR(255), + "Accessibility_Detail_Label__c" VARCHAR(255), + "Accessibility_Label__c" VARCHAR(255), "Add_Info_Question_Pick_List_1__c" VARCHAR(255), "Add_Info_Question_Pick_List_2__c" VARCHAR(255), "Add_Info_Question_Pick_List_3__c" VARCHAR(255), @@ -569,9 +595,11 @@ CREATE TABLE "Summit_Events__c" ( "Allow_Other_Attendees__c" VARCHAR(255), "Alternate_Registration_URL__c" VARCHAR(255), "Applicant_Type_Label__c" VARCHAR(255), + "Ask_Accessibility_Needs__c" VARCHAR(255), "Ask_Applicant_Type__c" VARCHAR(255), "Ask_Company_Organization__c" VARCHAR(255), "Ask_Date_Of_Birth__c" VARCHAR(255), + "Ask_Dietary_Restrictions__c" VARCHAR(255), "Ask_Gender__c" VARCHAR(255), "Ask_If_Parent__c" VARCHAR(255), "Ask_Last_Name_As_Student__c" VARCHAR(255), @@ -596,7 +624,9 @@ CREATE TABLE "Summit_Events__c" ( "Contact_Matching_Rules__c" VARCHAR(255), "Custom_Metadata_Contact_Matching_Method__c" VARCHAR(255), "Custom_Metadata_Lead_Matching_Method__c" VARCHAR(255), + "Custom_Metadata_Person_Matching_Method__c" VARCHAR(255), "Date_Of_Birth_Label__c" VARCHAR(255), + "Dietary_Restrictions_Label__c" VARCHAR(255), "Display_Guest_Registration__c" VARCHAR(255), "Display_Optional_Donation__c" VARCHAR(255), "Do_not_show_receive_text_question__c" VARCHAR(255), @@ -689,6 +719,10 @@ CREATE TABLE "Summit_Events__c" ( "No_Guest_Registrations_Added_Message__c" VARCHAR(255), "Payment_Button_Label__c" VARCHAR(255), "Payment_Gateway__c" VARCHAR(255), + "Person_Creation_Duplicate_Rule__c" VARCHAR(255), + "Person_Matching_Multiple_Match_Behavior__c" VARCHAR(255), + "Person_Matching_No_Match_Behavior__c" VARCHAR(255), + "Person_Matching_Rules__c" VARCHAR(255), "Phone_Label__c" VARCHAR(255), "Phone_Type_Label__c" VARCHAR(255), "Preferred_Class_Year_Label__c" VARCHAR(255), @@ -711,6 +745,9 @@ CREATE TABLE "Summit_Events__c" ( "Tracking_Event_Registration__c" VARCHAR(255), "Tracking_Options_Registration__c" VARCHAR(255), "Tracking_Submit_Registration__c" VARCHAR(255), + "Use_Matching_for_Guest_Registrations__c" VARCHAR(255), + "reCAPTCHA__c" VARCHAR(255), + "reCAPTCHA_v3_Score_Fail_Text__c" VARCHAR(255), "Account__c" VARCHAR(255), "Donation_Allocation_1__c" VARCHAR(255), "Donation_Allocation_2__c" VARCHAR(255), @@ -721,8 +758,7 @@ CREATE TABLE "Summit_Events__c" ( "Event_Fee_Allocation__c" VARCHAR(255), PRIMARY KEY (id) ); -INSERT INTO "Summit_Events__c" VALUES(1,'','','','','','','','','','','','','','','','','','','','','','','','False','','Application Type','Do not ask','Ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Ask mobile and require','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','','Do not ask','','','2.0','','Do you belong to a team or other organization?','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Blue','','Date of Birth','True','False','True','','','','Email','2023-12-07','Additional Registrant Details','

To ensure we provide the best experience for you at the ArticGrapple Games, we have a few additional questions to enhance your registration. Your responses will help us tailor the event to meet your needs and preferences. Please take a moment to identify how you're registering and provide the following information.


If you're a Coach, please identify that and complete a form for each athlete on the next page.

','Selected options','','Once you have made your selections click next.','','','Choose your options','

If you're needing to cancel your entire team's registration, please contact us at [Organizer's Email] or [Organizer's Phone Number]

','Cancel Registration','','

You will receive an event confirmation shortly. Please look to it for additional details relating to rules and check in procedures.

','Thank you for registering for this tournament!','','Event Cost','Event Charges','Total','200.0','Payments Received','

For inquiries or assistance, contact our event organizers at [Organizer's Email] or [Organizer's Phone Number].

','

Event is finished, see you next year!

','Confirm Wrestlers & Team','Event Home','','Sample - Summit Wrestling Tournament','','Payment Due','','Payment Received','Get ready for an exhilarating day of intense wrestling!','','Active','

If you've registered a single or multiple athletes, please confirm all details below. For any changes, go back to the previous page and make appropriate edits.




','Review your Entries','Engagement','

Screenshot 2023-10-31 135310.png


Outdoor Open Wrestling at Millennium Park!

Get ready for an exhilarating day of intense wrestling action amidst the beautiful surroundings of Millennium Park. Whether you're a seasoned wrestler or a fan of the sport, this event promises a thrilling experience for all.


Event Highlights:

  • Open Registration: All skill levels welcome! From beginners to seasoned pros, sign up and showcase your wrestling prowess.
  • Spectator Zone: Not a wrestler? No problem! Join us as a spectator and cheer for your favorite contenders. Enjoy the excitement from the designated viewing areas.
  • Scenic Venue: Millennium Park provides a picturesque backdrop for the wrestling event. Take in the action surrounded by greenery and the vibrant energy of the outdoors.
  • Family-Friendly: Bring the whole family for a day of fun! Food vendors, music, and a festive atmosphere make this event enjoyable for everyone.


Registration Information:

  • Participant Fee: $200
  • Registration Deadline: [Insert Deadline]
  • Age Groups: [Specify age groups if applicable]



How to Register:

  1. Fill out the online registration form below. On the next page you'll be able to identify who you are.
  2. Pay the registration fee securely through our payment portal.
  3. Receive a confirmation email with event details and guidelines.
','Register','','','First Name','Gender','15.0','Add Another Team Member','

Complete the below for each individual who'll be a part of the tournament. Registration is required for all participating individuals, wrestlers and staff alike. Complete the appropriate information based on their role and read the instructions.


NOTE: If you're a Wrestler registering and representing themselves, you can skip this page. You're welcome to enter Coach information if they'll be accompanying you.

','Register Additional Wrestlers, Coaches and Support Staff','','False','Cancel','Continue','You have unsaved information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','False','Last Name As Student','Last Name','','','','','201 E Randolph St, Chicago, IL 60602','https://maps.app.goo.gl/efKLkmwybwA61tMr8','Millennium Park','On-Site','Registrant Address','15.0','Sample - Summit Wrestling Tournament','No Members Added Yet','Make Payment','No Gateway','Please provide your mobile phone number.','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2023-10-05','GeneralSLDS','I am...','Title','','','','','','','','','','','','','9'); -INSERT INTO "Summit_Events__c" VALUES(2,'','','','None +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-1','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','None Vegetarian @@ -738,9 +774,9 @@ Yes, at all times','No Yes','No -Yes','','','','','','Dietary Restrictions/Preferences','Please list any food allergies:','Will you require mobility aids or accommodations?','Will you require handicapped-accessible lodgings?','Will you require passport/visa assistance (extra fees may apply)?','Pick-list required','Text area','Pick-list required','Pick-list required','Pick-list required','False','','Application Type','Do not ask','Do not ask','Ask and require','Ask and require','False','Do not ask','Ask and require','Ask with type require','Ask','Do not ask','Do not ask','Do not ask','Do not ask','','Do not ask','','','30.0','','Company or Organization','','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','','','','Date of Birth','False','False','False','','','','Email','2025-01-02','Reservation Details','

Demo Notes


For a real event, this page would be extensively populated with questions about information needed by trip planners. The sample question below errors out because it is not mapped to a corresponding custom field; you would need to map these fields in your instance to make custom questions functional.


As a note on example process, the descriptive text related to the question below might read:

If you will be traveling with someone who is not included on this registration, please provide their name and we will match up your itineraries. If you are traveling solo, do not include a name and you will be contact separately about your single supplement fee.


This information would be used by org staff behind the scenes to match the registration records of individuals who will be traveling together but did not register at the same time. In the event that this procedure is used, the registrant should be clearly informed that if two individuals register on the same transaction and do not specify alternate traveling companions, the default assumption will be that the two registrants are traveling together. A workflow would also need to be developed/implemented for following up with solo travelers for any associated fees, if this is not otherwise built into the registration process (e.g., via a separate solo ticket type and pricing tier).


Other questions in this section might include passport number and expiration date, questions about pre-/post-trip supplements, excursion options. etc.

','Selected options','','Once you have made your selections click next.','','','Choose your options','','','','

Thank you for registering! You will receive a registration number by email shortly, and a member of our travel concierge team will be in touch to confirm the details of your booking in 2-5 business days. Questions in the meantime? Just reply on your registration email and a customer service agent will get in touch.

','You''re going to Japan!','','Event Cost','Event Charges','Total','','Payments Received','

Picture of Japan Skyline

','','','Event Home','','Sample - 2024 Alumni Tours','','Payment Due','','Payment Received','','','Inactive','','','Overnight','

Travel On

Cruise to Japan

Let the harmony of Japanese culture surround you as you immerse yourself in the deeply rooted customs and traditions of this majestic island nation on a 12-night cruise aboard Oceania Cruises’ Riviera.


From the simplest pleasures of a tea ceremony to the excitement of sumo spectating, this voyage offers a unique insight into the Japanese way of life. Begin your journey in metropolitan Tokyo and set sail with views of majestic Mount Fuji to the seaport of Shimizu. Continue to Japan’s old capital of Kyoto for an overnight stay and glimpse the sun glinting off the Golden Pavilion. Take a dip in the city of Beppu, a resort getaway that is home to more than 2,000 hot springs. Sail down the Kanmon Strait and see the flourishing art scene, renowned Buddha statues, and beautiful beaches of Busan, South Korea.


Discover a new side of Japan in the volcanoes and offshore islands of Nagasaki and the picturesque seaside cityscape of Kagoshima on Kyushu Island. Contemplate peace in historic Hiroshima with a stroll through the beautifully landscaped gardens and iconic Hiroshima Castle. Then head to the surfer’s paradise — quaint Kochi — where the blue Pacific waters meet green land. Explore the industrial side of Japan as you take in the newly reconstructed palace and many museums of Nagoya before you conclude your trip back in the bustling city of Tokyo.

Request a Brochure >>



','Book Now','','','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','False','Last Name As Student','Last Name','','','','','','','','On-Site','Registrant Address','','Sample - 2024 Alumni Tours','','Make Payment','No Gateway','Phone number','Type','Grad Year (UW Alumni)','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2023-09-03','GeneralSLDS','I am...','Title','','','','','','','','','','','','',''); -INSERT INTO "Summit_Events__c" VALUES(3,'','','','','','','','','','','','','','','','','','','','','','','','True','','Application Type','Ask','Do not ask','Ask','Do not ask','False','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','Ask','Do not ask','Do not ask','Parent/Guardian;Other','Do not ask','Prospective Student','Office of Admissions','3.0','','Company or Organization','','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','','','','Date of Birth','False','False','False','','','','Email','2025-01-03','Additional Details Needed','

Please share the information below. This information is supportive to us making your experience magical!

','Selected options','

You have options to make your day personalized. Other than the Tour, what else can we accommodate for you?

','Once you have made your selections click next.','','Other than a Tour','Select your options','

We get it. Sometimes you have to cancel. We want to welcome you back to visit campus, so please find another date/time and we'll get things scheduled for you again!

','No!!! We want to see you!','','

Thank you and we look forward to seeing you soon! We'll ensure that your visit is special to you and your desired experience, which may required us to connect with other departments. As soon as we've confirmed all of your appointments we'll reach out with a full itinerary!


Photo of women in group with coffee in hand

','Registration Received!','','Event Cost','Event Charges','Total','','Payments Received','

For more information about Summit Events University, contact us at summitevt@gmail.com or go to our website.

','

This Tour Date is Close due to capacity or timing. Check out our Events Calendar [Insert Link here] to find another date that may work for you!

','','Event Home','','Sample - Higher Ed/K12 Admissions Tours','','Payment Due','','Payment Received','','','Active','

Take a quick look and make sure you indicated everything you'd like about your visit.

','Review your Requests','Admissions Event','

Tour Image.jpg


Join Us for a Glimpse into Your Future at Summit Events University!


Welcome to Summit Events University's Admissions Tour registration page. We're excited to have you join us for an exclusive look at what your journey with us could be like. Please fill out the following details to secure your spot.


Why Choose Summit Events University:

Summit Events University is your gateway to a rewarding career in event management and hospitality. Our innovative programs, expert faculty, and strong industry connections make us the perfect choice for your academic journey.


What to Expect and Opportunities:

  • Campus Tour
  • Faculty Meet and Greet
  • Student Showcase
  • Admissions Information Session
  • Q&A with Our Team
  • Networking Opportunities

Don't miss out on this opportunity to explore your future and kickstart your dream career. Secure your spot for the Admissions Tour now, and get ready to embark on an exciting academic adventure.


By submitting this registration, you're taking your first step toward a future filled with endless possibilities. We can't wait to welcome you to Summit Events University.

','Register','All Websites','All Websites','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','False','Last Name As Student','Last Name','','','','','415 Mission St, San Francisco, CA 94105','https://maps.app.goo.gl/QrHyvdSYkcEQ8fHD8','Summit Events University','On-Site','Registrant Address','4.0','Sample - Higher Ed/K12 Admissions Tours','','Make Payment','No Gateway','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','One registration per instance','Relationship (select all that apply)','2023-01-03','GeneralSLDS','I am...','Title','','','','','','','','','','','','',''); -INSERT INTO "Summit_Events__c" VALUES(4,'','','','1 - 20 employees +Yes','','','','','','Dietary Restrictions/Preferences','Please list any food allergies:','Will you require mobility aids or accommodations?','Will you require handicapped-accessible lodgings?','Will you require passport/visa assistance (extra fees may apply)?','Pick-list required','Text area','Pick-list required','Pick-list required','Pick-list required','False','','Application Type','Do not ask','Do not ask','Do not ask','Ask and require','Do not ask','Ask and require','False','Do not ask','Ask and require','Ask with type require','Ask','Do not ask','Do not ask','Do not ask','Do not ask','','Do not ask','','','30.0','','Company or Organization','','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','','','','','Date of Birth','Do you have any dietary restrictions?','False','False','False','','','','Email','2027-01-10','Reservation Details','

Demo Notes


For a real event, this page would be extensively populated with questions about information needed by trip planners. The sample question below errors out because it is not mapped to a corresponding custom field; you would need to map these fields in your instance to make custom questions functional.


As a note on example process, the descriptive text related to the question below might read:

If you will be traveling with someone who is not included on this registration, please provide their name and we will match up your itineraries. If you are traveling solo, do not include a name and you will be contact separately about your single supplement fee.


This information would be used by org staff behind the scenes to match the registration records of individuals who will be traveling together but did not register at the same time. In the event that this procedure is used, the registrant should be clearly informed that if two individuals register on the same transaction and do not specify alternate traveling companions, the default assumption will be that the two registrants are traveling together. A workflow would also need to be developed/implemented for following up with solo travelers for any associated fees, if this is not otherwise built into the registration process (e.g., via a separate solo ticket type and pricing tier).


Other questions in this section might include passport number and expiration date, questions about pre-/post-trip supplements, excursion options. etc.

','Selected options','','Once you have made your selections click next.','','','Choose your options','','','','

Thank you for registering! You will receive a registration number by email shortly, and a member of our travel concierge team will be in touch to confirm the details of your booking in 2-5 business days. Questions in the meantime? Just reply on your registration email and a customer service agent will get in touch.

','You''re going to Japan!','','Event Cost','Event Charges','Total','','Payments Received','

Picture of Japan Skyline

','','','Event Home','','Sample - 2024 Alumni Tours','','Payment Due','','Payment Received','','','Inactive','','','Overnight','

Travel On

Cruise to Japan

Let the harmony of Japanese culture surround you as you immerse yourself in the deeply rooted customs and traditions of this majestic island nation on a 12-night cruise aboard Oceania Cruises’ Riviera.


From the simplest pleasures of a tea ceremony to the excitement of sumo spectating, this voyage offers a unique insight into the Japanese way of life. Begin your journey in metropolitan Tokyo and set sail with views of majestic Mount Fuji to the seaport of Shimizu. Continue to Japan’s old capital of Kyoto for an overnight stay and glimpse the sun glinting off the Golden Pavilion. Take a dip in the city of Beppu, a resort getaway that is home to more than 2,000 hot springs. Sail down the Kanmon Strait and see the flourishing art scene, renowned Buddha statues, and beautiful beaches of Busan, South Korea.


Discover a new side of Japan in the volcanoes and offshore islands of Nagasaki and the picturesque seaside cityscape of Kagoshima on Kyushu Island. Contemplate peace in historic Hiroshima with a stroll through the beautifully landscaped gardens and iconic Hiroshima Castle. Then head to the surfer’s paradise — quaint Kochi — where the blue Pacific waters meet green land. Explore the industrial side of Japan as you take in the newly reconstructed palace and many museums of Nagoya before you conclude your trip back in the bustling city of Tokyo.

Request a Brochure >>



','Book Now','','','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','False','Last Name As Student','Last Name','','','','','','','','On-Site','Registrant Address','','Sample - 2024 Alumni Tours','','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Phone number','Type','Grad Year (UW Alumni)','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2025-09-10','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','','','','','','',''); +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-2','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','','','','','','','','','','','','','','','','','','','','','True','','Application Type','Do not ask','Ask','Do not ask','Ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','Ask','Do not ask','Do not ask','Parent/Guardian;Other','Do not ask','Prospective Student','Office of Admissions','3.0','','Company or Organization','','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','','','','','Date of Birth','Do you have any dietary restrictions?','False','False','False','','','','Email','2027-01-11','Additional Details Needed','

Please share the information below. This information is supportive to us making your experience magical!

','Selected options','

You have options to make your day personalized. Other than the Tour, what else can we accommodate for you?

','Once you have made your selections click next.','','Other than a Tour','Select your options','

We get it. Sometimes you have to cancel. We want to welcome you back to visit campus, so please find another date/time and we'll get things scheduled for you again!

','No!!! We want to see you!','','

Thank you and we look forward to seeing you soon! We'll ensure that your visit is special to you and your desired experience, which may required us to connect with other departments. As soon as we've confirmed all of your appointments we'll reach out with a full itinerary!


Photo of women in group with coffee in hand

','Registration Received!','','Event Cost','Event Charges','Total','','Payments Received','

For more information about Summit Events University, contact us at summitevt@gmail.com or go to our website.

','

This Tour Date is Close due to capacity or timing. Check out our Events Calendar [Insert Link here] to find another date that may work for you!

','','Event Home','','Sample - Higher Ed/K12 Admissions Tours','','Payment Due','','Payment Received','','','Active','

Take a quick look and make sure you indicated everything you'd like about your visit.

','Review your Requests','Admissions Event','

Tour Image.jpg


Join Us for a Glimpse into Your Future at Summit Events University!


Welcome to Summit Events University's Admissions Tour registration page. We're excited to have you join us for an exclusive look at what your journey with us could be like. Please fill out the following details to secure your spot.


Why Choose Summit Events University:

Summit Events University is your gateway to a rewarding career in event management and hospitality. Our innovative programs, expert faculty, and strong industry connections make us the perfect choice for your academic journey.


What to Expect and Opportunities:

  • Campus Tour
  • Faculty Meet and Greet
  • Student Showcase
  • Admissions Information Session
  • Q&A with Our Team
  • Networking Opportunities

Don't miss out on this opportunity to explore your future and kickstart your dream career. Secure your spot for the Admissions Tour now, and get ready to embark on an exciting academic adventure.


By submitting this registration, you're taking your first step toward a future filled with endless possibilities. We can't wait to welcome you to Summit Events University.

','Register','All Websites','All Websites','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','False','Last Name As Student','Last Name','','','','','415 Mission St, San Francisco, CA 94105','https://maps.app.goo.gl/QrHyvdSYkcEQ8fHD8','Summit Events University','On-Site','Registrant Address','4.0','Sample - Higher Ed/K12 Admissions Tours','','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','One registration per instance','Relationship (select all that apply)','2025-01-10','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','','','','','','',''); +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-3','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','1 - 20 employees 21 - 200 employees @@ -764,10 +800,9 @@ Salesforce Employee','Yes, I have been more than 2 times - can''t wait! Yes, this is my second time joining a Sprint! -No, I''m a first time Sprinter!','','','','','','','','Number of Employees','How do you categorize your organization?','Have you attended a community sprint before?','','','Pick-list required','Pick-list required','Pick-list required','','','False','','Application Type','Do not ask','Ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Ask mobile and require','Do not ask','Do not ask','Ask','Do not ask','Do not ask','','Ask','','','0.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Admissions','','Date of Birth','False','False','True','','','','Email','2024-10-03','Additional Questions','

We're excited that you've chosen to join us for the Commons Open Source Sprint! To ensure we can tailor your experience and provide you with all the necessary details, we kindly ask for a bit more information. Please take a moment to complete the following questions so we can make your experience meaningful!





','Selected options','

We love the community and your sprinters! Make all appropriate selections below and get ready to have an amazing time!

','Once you have made your selections click next.','','We want to treat you!','Choose your options','

We're saddened to hear about your cancellation for the upcoming sprint. We were really looking forward to having you with us, and your absence will be felt. If you ever decide to join us in the future, we'd be thrilled to welcome you back. If you have any questions, feel free to reach out to us at commons@sprint.demo.


Take care, and best wishes.

','Please don''t go!!!','','

We're absolutely thrilled to have you join us for the Commons Open-Source Sprint! Your registration has been successfully confirmed, and we can't wait to see you in person or virtually, depending on your chosen attendance option.


Nov 2022 Community Sprint


Get ready for an unforgettable experience filled with inspiration, knowledge, and networking opportunities. The Common Open Source Sprint is all about bringing like-minded individuals together, and we're excited to have you be a part of our community. Whether you're coming from near or far, or joining us from a different time zone, your presence will make this event even more special.


Stay tuned for further updates and details about the event, including the schedule, speakers, and any materials you might need. In the meantime, if you have any questions or specific requirements, please don't hesitate to reach out to our dedicated support team.



Hotel Recommendations close to the Salesforce Tower:

Holiday Inn

W. Wolf Point Plaza

(312) 555-1234


Hyatt Place

N. Palace Rd.

(312) 555-4321



Once again, thank you for registering, and get ready to be inspired, learn, and connect. We can't wait to welcome you to [Event Name] and share this incredible experience with you!


See you soon!

','Thank you for registering!','','Event Cost','Event Charges','Total','','Payments Received','

For additional Questions please reach out to us in the community or check out our GitHub Pages.



© Copyright 2023 Salesforce.com, inc. All rights reserved. Various trademarks held by their respective owners. Salesforce.com, inc. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States

','','','Event Home','','Sample - Open Source Sprint - Multi-Step','','Payment Due','','Payment Received','','','Active','','Please confirm your details below','Engagement','





Nonprofit & Education Community Sprint


Open Source Commons.png


Activating community to supercharge impact



What is a Sprint? 

The Sprint is a hack-a-thon type event, where you will contribute your skills in small breakout groups and work with others, to discuss different Salesforce technology challenges.

 

Connect and collaborate with your peers to build solutions to common challenges prioritized by you and the community. 

 

Who should attend? 

Register if you're an Admin, Developer, Consultant, or End-User in the Nonprofit or Education Salesforce community.

 

The Sprint is a free event, and all are welcome. For more details, check out the event FAQs.


Open Source Commons Project Logos - DLRS, Grassroots Mobile Survey, Summit Events App






','Register','','','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','True','Last Name As Student','Last Name','','','','','333 W Wolf Point','https://maps.app.goo.gl/wcvs7AduZ3oiu1k2A','Chicago Salesforce Tower','On-Site','Registrant Address','','Sample - Open Source Sprint - Multi-Step','','Make Payment','No Gateway','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2023-10-03','GeneralSLDS','I am...','Title','','','','','','','','','','','','',''); -INSERT INTO "Summit_Events__c" VALUES(5,'','','','','','','','','','','','','','','','','','','','','','','','False','','Application Type','Do not ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Ask','Ask mobile and require','Do not ask','Ask','Do not ask','Do not ask','Do not ask','','Do not ask','Prospective Student','Office of Admissions','0.0','','Company or Organization','','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','','','','Date of Birth','False','False','True','','','','Email','2023-12-30','','','Selected options','','Once you have made your selections click next.','','Please choose additional options!','Choose your options','','','','


Congratulations! Your registration for the Connected University Graduate Programs Open House has been successfully received. We're thrilled that you've chosen to explore our graduate programs and discover the exciting opportunities that await you.



What's Next:

Confirmation Email: In the next few minutes, you'll receive a confirmation email with all the event details and a summary of your registration.

Event Reminder: As the event date approaches, we'll send you a friendly reminder to ensure you don't miss this fantastic opportunity.

Connect with Us: Stay engaged with Connected University by following us on social media. We'll be sharing updates and exclusive content leading up to the Open House.


Have Questions?

If you have any questions or need further assistance, feel free to reach out to our event team at [Organizer's Contact Information]. We're here to make sure your experience with Connected University is seamless and informative.


Thank you for choosing Connected University. We look forward to meeting you at the Graduate Programs Open House and helping you explore the possibilities that await on your academic journey.



We look forward to telling you more about Connected University!

','Thank you for regisitering!','','Event Cost','Event Charges','Total','','Payments Received','

If you have any questions or need further information, please contact us at [Organizer's Contact Information].

','

Thank you for your interest in the Connected University Graduate Programs Open House.


We regret to inform you that the event is currently at full capacity, and registration has been closed. Due to overwhelming interest, we have reached the maximum number of attendees we can accommodate.


We appreciate your enthusiasm and understanding. If you have any questions or would like information about future events, programs, or admissions, please feel free to reach out to our team at [Organizer's Contact Information].


Thank you for considering Connected University. We apologize for any inconvenience, and we hope to have the opportunity to connect with you in the future.

','','Event Home','','Sample - Open House for Prospective Graduate Students','','Payment Due','','Payment Received','','','Active','','Review your selected options and submit!','Admissions Event','

Discover Your Future at Connected University


Salesforce U Logo


Join us for a 90-minute open house and discover how Connected University can provide the graduate school experience you desire while equipping you with the skills needed for success.


What to Expect:

  • Informative Sessions: Engage in insightful presentations that highlight the unique aspects of Connected University's graduate programs.
  • Interactive Workshops: Participate in hands-on workshops designed to showcase the practical skills you'll acquire during your studies.
  • Meet Faculty and Students: Connect with our experienced faculty members and current students to gain valuable insights into the Connected University community.
  • Campus Tour (if applicable): Explore our state-of-the-art facilities and get a feel for the vibrant campus life.

Why Connected University?

  • Tailored Graduate Experience: Discover how Connected University tailors its programs to meet the diverse needs and aspirations of its students.
  • Career-Focused Education: Learn about our commitment to providing education that aligns with current industry demands, ensuring you graduate with the skills employers seek.
  • Supportive Community: Explore the supportive and inclusive community that sets Connected University apart.
','Register','','','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','Labels as headers','Appointment_Title__c','Appointment_Time_Formatted__c','Registrant_Input__c','Description__c','','Session','Time','Detail(s)','Description','','','','','','False','Last Name As Student','Last Name','','','','','123 University Avenue, Academic City, Imaginaria 54321','https://www.google.com/maps?q=123+University+Avenue,+Academic+City,+Imaginaria+54321','Connected U Graduate Campus','On-Site','Registrant Address','','Sample - Open House for Prospective Graduate Students','','Make Payment','No Gateway','Please provide either a mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2023-10-30','GeneralSLDS','I am...','Title','','','','','','','','','','','','',''); -INSERT INTO "Summit_Events__c" VALUES(6,'','','','','','','','','','','','','','','','','','','','','','','','False','','Application Type','Do not ask','Ask','Do not ask','Do not ask','False','Do not ask','Ask','Ask mobile and require','Do not ask','Do not ask','Ask','Do not ask','Do not ask','','Ask','General Public','','0.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Green','','Date of Birth','True','True','True','

If you'd like to directly support our work before the gala, you can do so here. Thank you for helping us continue our mission!

','50','Additional Donation','Email','2024-11-02','','','Selected options','','Once you have made your selections click next.','','','Choose your options','','','','

You will receive an email confirmation. If you have any questions or concerns, please do not hesitate to reach out to j.doe@givinghope.org.


12 Ways to Say “Thank You” With Examples | Grammarly

','We look forward to seeing you at A Night of Giving Hope 2024!','','Event Cost','Event Charges','Total','200.0','Payments Received','

For Additional Details or questions, contacts us at gala@summit.demo

','','Register your guest(s).','Event Home','','Sample - Gala Fundraising Event','','Payment Due','','Payment Received','','','Active','


Picture of a ticket


Ticket Information:

  • Individual Ticket: $200
  • Couple Ticket: $350
  • Corporate Table (Seats 5): $5,000
  • Corporate Table (Seats 10): $10,000



Your ticket includes dinner, entertainment, and the chance to be a part of a night dedicated to making the world a better place. Reserve your place now, and together, let's create a future filled with hope, love, and opportunity for all. Your support can change lives, and this gala is your chance to make it happen.

','Complete your Registration','Fundraising','

We're very excited to invite you to join us for an enchanting evening of elegance, compassion, and generosity at our "A Night of Giving Hope" Gala Fundraising Event. This fun event is your opportunity to make a meaningful difference in the lives of those in need while enjoying an unforgettable night of entertainment, gourmet dining, and socializing!


galatable-2019-May15-1 (1).jpeg


Event Highlights:

  • Dining: Savor a variety of gourmet bites prepared by local fan-favorite restaurants, accompanied by an open bar with a variety of drink options (and a delicious cocktail of the night!).
  • Silent Auction: Bid on an array of exclusive items, including art, luxury experiences, and unique memorabilia, with all proceeds going toward our cause.
  • Fundraising Activities: Participate in various fundraising activities, from pledging to donation stations, to directly impact the lives of those we serve.
  • Impact Showcase: Witness firsthand how your contributions are making a difference through touching stories and presentations from our beneficiaries.
  • Networking Opportunities: Connect with fellow philanthropists, community leaders, and our dedicated team who share your passion for making a positive impact.

Dress Code: Cocktail Attire


Your presence at this gala will not only make the evening extraordinary but will also help us continue our mission to impact the lives of youth all around Chicago. Every dollar raised during this event will go towards free extracurricular activities for Chicago schools that need them, bringing us one step closer to our vision of a better, brighter future.

','Register','','','First Name','Gender','','Register Guest','

It's even more fun with family and friends! Please fill out the information below for your guests. If you are interested in buying a table for 5 or 10 people, please email j.doe@givinghope.org.

','Bring a guest! Or even better, multiple guests.','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','True','Last Name As Student','Last Name','','','','','3057 N Rockwell S','https://maps.app.goo.gl/PP4WNqeHwv7bGNFj9','Rockwell on the River','On-Site','Registrant Address','','Sample - Gala Fundraising Event','','Make Payment','No Gateway','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2023-10-03','GeneralSLDS','I am...','Title','','','','','','','4','','','','','','6'); -INSERT INTO "Summit_Events__c" VALUES(7,'','','','1-500 employees +No, I''m a first time Sprinter!','','','','','','','','Number of Employees','How do you categorize your organization?','Have you attended a community sprint before?','','','Pick-list required','Pick-list required','Pick-list required','','','False','','Application Type','Do not ask','Do not ask','Ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Ask mobile and require','Do not ask','Do not ask','Ask','Do not ask','Do not ask','','Ask','','','0.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Admissions','','','Date of Birth','Do you have any dietary restrictions?','False','False','True','','','','Email','2026-10-11','Additional Questions','

We're excited that you've chosen to join us for the Commons Open Source Sprint! To ensure we can tailor your experience and provide you with all the necessary details, we kindly ask for a bit more information. Please take a moment to complete the following questions so we can make your experience meaningful!





','Selected options','

We love the community and your sprinters! Make all appropriate selections below and get ready to have an amazing time!

','Once you have made your selections click next.','','We want to treat you!','Choose your options','

We're saddened to hear about your cancellation for the upcoming sprint. We were really looking forward to having you with us, and your absence will be felt. If you ever decide to join us in the future, we'd be thrilled to welcome you back. If you have any questions, feel free to reach out to us at commons@sprint.demo.


Take care, and best wishes.

','Please don''t go!!!','','

We're absolutely thrilled to have you join us for the Commons Open-Source Sprint! Your registration has been successfully confirmed, and we can't wait to see you in person or virtually, depending on your chosen attendance option.


Nov 2022 Community Sprint


Get ready for an unforgettable experience filled with inspiration, knowledge, and networking opportunities. The Common Open Source Sprint is all about bringing like-minded individuals together, and we're excited to have you be a part of our community. Whether you're coming from near or far, or joining us from a different time zone, your presence will make this event even more special.


Stay tuned for further updates and details about the event, including the schedule, speakers, and any materials you might need. In the meantime, if you have any questions or specific requirements, please don't hesitate to reach out to our dedicated support team.



Hotel Recommendations close to the Salesforce Tower:

Holiday Inn

W. Wolf Point Plaza

(312) 555-1234


Hyatt Place

N. Palace Rd.

(312) 555-4321



Once again, thank you for registering, and get ready to be inspired, learn, and connect. We can't wait to welcome you to [Event Name] and share this incredible experience with you!


See you soon!

','Thank you for registering!','','Event Cost','Event Charges','Total','','Payments Received','

For additional Questions please reach out to us in the community or check out our GitHub Pages.



© Copyright 2023 Salesforce.com, inc. All rights reserved. Various trademarks held by their respective owners. Salesforce.com, inc. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States

','','','Event Home','','Sample - Open Source Sprint - Multi-Step','','Payment Due','','Payment Received','','','Active','','Please confirm your details below','Engagement','





Nonprofit & Education Community Sprint


Open Source Commons.png


Activating community to supercharge impact



What is a Sprint? 

The Sprint is a hack-a-thon type event, where you will contribute your skills in small breakout groups and work with others, to discuss different Salesforce technology challenges.

 

Connect and collaborate with your peers to build solutions to common challenges prioritized by you and the community. 

 

Who should attend? 

Register if you're an Admin, Developer, Consultant, or End-User in the Nonprofit or Education Salesforce community.

 

The Sprint is a free event, and all are welcome. For more details, check out the event FAQs.


Open Source Commons Project Logos - DLRS, Grassroots Mobile Survey, Summit Events App






','Register','','','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','True','Last Name As Student','Last Name','','','','','333 W Wolf Point','https://maps.app.goo.gl/wcvs7AduZ3oiu1k2A','Chicago Salesforce Tower','On-Site','Registrant Address','','Sample - Open Source Sprint - Multi-Step','','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2025-10-10','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','','','','','','',''); +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-4','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','','','','','','','','','','','','','','','','','','','','','False','','Application Type','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Ask','Ask mobile and require','Do not ask','Ask','Do not ask','Do not ask','Do not ask','','Do not ask','Prospective Student','Office of Admissions','0.0','','Company or Organization','','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','','','','','Date of Birth','Do you have any dietary restrictions?','False','False','True','','','','Email','2026-01-06','','','Selected options','','Once you have made your selections click next.','','Please choose additional options!','Choose your options','','','','


Congratulations! Your registration for the Connected University Graduate Programs Open House has been successfully received. We're thrilled that you've chosen to explore our graduate programs and discover the exciting opportunities that await you.



What's Next:

Confirmation Email: In the next few minutes, you'll receive a confirmation email with all the event details and a summary of your registration.

Event Reminder: As the event date approaches, we'll send you a friendly reminder to ensure you don't miss this fantastic opportunity.

Connect with Us: Stay engaged with Connected University by following us on social media. We'll be sharing updates and exclusive content leading up to the Open House.


Have Questions?

If you have any questions or need further assistance, feel free to reach out to our event team at [Organizer's Contact Information]. We're here to make sure your experience with Connected University is seamless and informative.


Thank you for choosing Connected University. We look forward to meeting you at the Graduate Programs Open House and helping you explore the possibilities that await on your academic journey.



We look forward to telling you more about Connected University!

','Thank you for regisitering!','','Event Cost','Event Charges','Total','','Payments Received','

If you have any questions or need further information, please contact us at [Organizer's Contact Information].

','

Thank you for your interest in the Connected University Graduate Programs Open House.


We regret to inform you that the event is currently at full capacity, and registration has been closed. Due to overwhelming interest, we have reached the maximum number of attendees we can accommodate.


We appreciate your enthusiasm and understanding. If you have any questions or would like information about future events, programs, or admissions, please feel free to reach out to our team at [Organizer's Contact Information].


Thank you for considering Connected University. We apologize for any inconvenience, and we hope to have the opportunity to connect with you in the future.

','','Event Home','','Sample - Open House for Prospective Graduate Students','','Payment Due','','Payment Received','','','Active','','Review your selected options and submit!','Admissions Event','

Discover Your Future at Connected University


Salesforce U Logo


Join us for a 90-minute open house and discover how Connected University can provide the graduate school experience you desire while equipping you with the skills needed for success.


What to Expect:

  • Informative Sessions: Engage in insightful presentations that highlight the unique aspects of Connected University's graduate programs.
  • Interactive Workshops: Participate in hands-on workshops designed to showcase the practical skills you'll acquire during your studies.
  • Meet Faculty and Students: Connect with our experienced faculty members and current students to gain valuable insights into the Connected University community.
  • Campus Tour (if applicable): Explore our state-of-the-art facilities and get a feel for the vibrant campus life.

Why Connected University?

  • Tailored Graduate Experience: Discover how Connected University tailors its programs to meet the diverse needs and aspirations of its students.
  • Career-Focused Education: Learn about our commitment to providing education that aligns with current industry demands, ensuring you graduate with the skills employers seek.
  • Supportive Community: Explore the supportive and inclusive community that sets Connected University apart.
','Register','','','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','Labels as headers','Appointment_Title__c','Appointment_Time_Formatted__c','Registrant_Input__c','Description__c','','Session','Time','Detail(s)','Description','','','','','','False','Last Name As Student','Last Name','','','','','123 University Avenue, Academic City, Imaginaria 54321','https://www.google.com/maps?q=123+University+Avenue,+Academic+City,+Imaginaria+54321','Connected U Graduate Campus','On-Site','Registrant Address','','Sample - Open House for Prospective Graduate Students','','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Please provide either a mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2025-11-06','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','','','','','','',''); +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-5','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','1-500 employees 501-1000 employees @@ -781,15 +816,25 @@ Consulting Customer -Just Sprinting','','','','','','','','','Number of Employees','How do you categorize your organization?','What is your GitHub username?','What is your Slack email - to stay connected?','','Pick-list','Pick-list','Text area required','Text box required','','False','','Application Type','Do not ask','Ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Ask mobile and require','Do not ask','Ask','Ask','Do not ask','Do not ask','','Ask','General Public','','0.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Admissions','','Date of Birth','False','False','False','','','','Email','2024-10-03','','','Selected options','','Once you have made your selections click next.','','','Choose your options','','','','

We're absolutely thrilled to have you join us for the Commons Open-Source Sprint! Your registration has been successfully confirmed, and we can't wait to see you in person or virtually, depending on your chosen attendance option.




Get ready for an unforgettable experience filled with inspiration, knowledge, and networking opportunities. The Common Open Source Sprint is all about bringing like-minded individuals together, and we're excited to have you be a part of our community. Whether you're coming from near or far, or joining us from a different time zone, your presence will make this event even more special.


Stay tuned for further updates and details about the event, including the schedule, speakers, and any materials you might need. In the meantime, if you have any questions or specific requirements, please don't hesitate to reach out to our dedicated support team.


','Thank you for Registering','','Event Cost','Event Charges','Total','','Payments Received','

Salesforce logo

','

This Event's Registration is now CLOSED. Get ready to Sprint on the next one! We'll miss you.

','','Event Home','','Sample - Open Source Sprint Event - Single Step','','Payment Due','','Payment Received','Open Source Sprint Event','','Active','','','Info Session','

image.png


Get ready to rock the Windy City with Salesforce's tech extravaganza! 🌬️ Join us at the Salesforce Commons Sprint event in the heart of Chicago. 🏙️


The Sprint is not just another event – it's your ticket to tech-tastic fun, and it's totally free! Whether you're a beginner or a Salesforce ninja, there's something for everyone at the Sprint. 🚀 You'll learn from Salesforce experts, rub shoulders with like-minded tech enthusiasts, and even get a chance to create something that truly rocks! 🤖🎉


Imagine a tech playground where innovation knows no bounds. Our Sprints are like community innovation parties (think hack-a-thon meets carnival) designed to unite Salesforce partners, customers, and our amazing employee volunteers. Together, we brainstorm, prioritize, and build solutions that make using Salesforce a breeze, especially for nonprofit & education organizations. 🧠🎡


Come for the knowledge, stay for the thrill! Connect, learn, and supercharge your Salesforce expertise with the coolest crowd in the industry. Whether you're a tech newbie or a seasoned pro, this sprint is your backstage pass to a tech party like no other. 🕺💃


Don't miss your chance to ride the innovation wave! 🌊

Save the date, grab your tech gear, and stay tuned for more juicy details. See you in Chicago, where tech dreams come true! 🎈🌟


Ready to have a blast and make a difference at the October Nonprofit & Education Community Sprint? Register below, and let's get this tech party started! 🎊🚀💻


Picture of Commons Director Salesforce Trailblazer Community logo

What is a Sprint? The Sprint is a hack-a-thon type event, where you will contribute your skills in small breakout groups and work with others, to discuss different Salesforce technology challenges.

 

Connect and collaborate with your peers to build solutions to common challenges prioritised by you and the community. 

 

Who should attend? Register if you're an Admin, Developer, Consultant, or End-User in the Nonprofit or Education Salesforce community.



Meet the Team

image.png

','Register','','','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','True','Last Name As Student','Last Name','','','','','333 W Wolf Point Plaza','https://maps.app.goo.gl/ASZMg32hRja4a7vr7','Chicago','On-Site','Registrant Address','','Sample - Open Source Sprint Event - Single Step','','Make Payment','No Gateway','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2023-10-03','GeneralSLDS','I am...','Title','','','','','','','','','','','','',''); -INSERT INTO "Summit_Events__c" VALUES(8,'','','','','','','','','','','','','','','','','','','','','','','','False','','Application Type','Do not ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Ask and require','Ask home and mobile require one','Do not ask','Ask','Do not ask','Do not ask','Do not ask','Company Representative','Do not ask','General Public','','7.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Yellow','','Date of Birth','True','True','False','

The event will be filled with live and silent auction items! So come ready for that, but don't hesitate to give something ahead of the event!


Donors of $250 or more are acknowledged as a BENEFACTOR in event materials and listed in TCOA’s Annual Report.

','100 +Just Sprinting','','','','','','','','','Number of Employees','How do you categorize your organization?','What is your GitHub username?','What is your Slack email - to stay connected?','','Pick-list','Pick-list','Text area required','Text box required','','False','','Application Type','Do not ask','Do not ask','Ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Ask mobile and require','Do not ask','Ask','Ask','Do not ask','Do not ask','','Ask','General Public','','0.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Admissions','','','Date of Birth','Do you have any dietary restrictions?','False','False','False','','','','Email','2026-10-11','','','Selected options','','Once you have made your selections click next.','','','Choose your options','','','','

We're absolutely thrilled to have you join us for the Commons Open-Source Sprint! Your registration has been successfully confirmed, and we can't wait to see you in person or virtually, depending on your chosen attendance option.




Get ready for an unforgettable experience filled with inspiration, knowledge, and networking opportunities. The Common Open Source Sprint is all about bringing like-minded individuals together, and we're excited to have you be a part of our community. Whether you're coming from near or far, or joining us from a different time zone, your presence will make this event even more special.


Stay tuned for further updates and details about the event, including the schedule, speakers, and any materials you might need. In the meantime, if you have any questions or specific requirements, please don't hesitate to reach out to our dedicated support team.


','Thank you for Registering','','Event Cost','Event Charges','Total','','Payments Received','

Salesforce logo

','

This Event's Registration is now CLOSED. Get ready to Sprint on the next one! We'll miss you.

','','Event Home','','Sample - Open Source Sprint Event - Single Step','','Payment Due','','Payment Received','Open Source Sprint Event','','Active','','','Info Session','

image.png


Get ready to rock the Windy City with Salesforce's tech extravaganza! 🌬️ Join us at the Salesforce Commons Sprint event in the heart of Chicago. 🏙️


The Sprint is not just another event – it's your ticket to tech-tastic fun, and it's totally free! Whether you're a beginner or a Salesforce ninja, there's something for everyone at the Sprint. 🚀 You'll learn from Salesforce experts, rub shoulders with like-minded tech enthusiasts, and even get a chance to create something that truly rocks! 🤖🎉


Imagine a tech playground where innovation knows no bounds. Our Sprints are like community innovation parties (think hack-a-thon meets carnival) designed to unite Salesforce partners, customers, and our amazing employee volunteers. Together, we brainstorm, prioritize, and build solutions that make using Salesforce a breeze, especially for nonprofit & education organizations. 🧠🎡


Come for the knowledge, stay for the thrill! Connect, learn, and supercharge your Salesforce expertise with the coolest crowd in the industry. Whether you're a tech newbie or a seasoned pro, this sprint is your backstage pass to a tech party like no other. 🕺💃


Don't miss your chance to ride the innovation wave! 🌊

Save the date, grab your tech gear, and stay tuned for more juicy details. See you in Chicago, where tech dreams come true! 🎈🌟


Ready to have a blast and make a difference at the October Nonprofit & Education Community Sprint? Register below, and let's get this tech party started! 🎊🚀💻


Picture of Commons Director Salesforce Trailblazer Community logo

What is a Sprint? The Sprint is a hack-a-thon type event, where you will contribute your skills in small breakout groups and work with others, to discuss different Salesforce technology challenges.

 

Connect and collaborate with your peers to build solutions to common challenges prioritised by you and the community. 

 

Who should attend? Register if you're an Admin, Developer, Consultant, or End-User in the Nonprofit or Education Salesforce community.



Meet the Team

image.png

','Register','','','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','True','Last Name As Student','Last Name','','','','','333 W Wolf Point Plaza','https://maps.app.goo.gl/ASZMg32hRja4a7vr7','Chicago','On-Site','Registrant Address','','Sample - Open Source Sprint Event - Single Step','','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2025-10-10','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','','','','','','',''); +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-6','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','Yes + +No + +Other','Spouse + +Family member (non-spouse) + +Non-family member','','','','','','','','','Are you a caregiver of someone with Dementia','What is your relation to the individual suffering from dementia?','What is your biggest need of help or support?','','','Pick-list','Pick-list','Text area','','','True','','Application Type','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Ask with type','Do not ask','Ask','Do not ask','Do not ask','Do not ask','','Do not ask','General Public','','0.0','','Company or Organization','','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','','','','','Date of Birth','Do you have any dietary restrictions?','False','False','False','','','','Email','2026-10-11','','','Selected options','','Once you have made your selections click next.','','','Choose your options','','','','

Thank you for registering for the Dementia Caregiver Support Group. Your commitment to being a part of this caring community is truly appreciated.


We are thrilled to have you join us and look forward to creating a supportive and understanding space where caregivers like yourself can share experiences and find solace.


If you have any questions or need further information before the event, feel free to reach out to us at [Organizer's Contact Information].

','Thank you for Registering','','Event Cost','Event Charges','Total','','Payments Received','

Dementia Care Support Group is a non-profit dedicated to proving support to caregivers


We Support Caregivers Of Loved Ones With Dementia

','

Sorry, this session is currently closed - please call our office for more information for caregivers.

','','Event Home','','Sample - Dementia Caregiver Support','','Payment Due','','Payment Received','Series of Events to support caregivers supporting those suffering from Dementia','Center for Common Good','Active','','','Info Session','

Dementia Care Giver Support Group


Caring for a loved one with dementia can be both rewarding and challenging. The Embracing Hope Dementia Caregiver Support Group provides a safe and understanding space for caregivers to share experiences, exchange advice, and find emotional support. This event aims to create a supportive community that empowers caregivers with knowledge and strength to navigate the journey of caring for someone with dementia.


Join this monthly meeting to connect with other Caregivers and learn from Dementia experts to hear the latest care tips, clinical research, and connect with support resources in our community.



Agenda:

  • Welcome and Introduction: Get to know fellow caregivers and share your caregiving journey.
  • Expert Insights: Gain valuable insights from professionals in the field of dementia care.
  • Interactive Sharing: Share your experiences and learn from others facing similar challenges.
  • Q&A Session: Have your questions addressed by our experienced facilitators.
  • Closing Reflection: A moment of reflection and encouragement.


Who Should Attend:

  • Family members caring for a loved one with dementia.
  • Professional caregivers.
  • Those with a loved one suffering from Dementia
  • Anyone interested in learning more about dementia care.


Registration:

  • To ensure a comfortable and intimate setting, pre-registration is required. Please fill out the registration form below.



','Register','All Websites','All Websites','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','True','Last Name As Student','Last Name','','','','','4127 Okemos Rd, Okemos, MI 48864','https://maps.app.goo.gl/6G6GboVUU3sENzzj6','GLF Office','On-Site','Registrant Address','20.0','Sample - Dementia Caregiver Support','','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2025-10-10','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','','','','','','',''); +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-7','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','','','','','','','','','','','','','','','','','','','','','False','','Application Type','Do not ask','Do not ask','Ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Ask mobile and require','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','','Do not ask','','','2.0','','Do you belong to a team or other organization?','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Blue','','','Date of Birth','Do you have any dietary restrictions?','True','False','True','','','','Email','2025-12-14','Additional Registrant Details','

To ensure we provide the best experience for you at the ArticGrapple Games, we have a few additional questions to enhance your registration. Your responses will help us tailor the event to meet your needs and preferences. Please take a moment to identify how you're registering and provide the following information.


If you're a Coach, please identify that and complete a form for each athlete on the next page.

','Selected options','','Once you have made your selections click next.','','','Choose your options','

If you're needing to cancel your entire team's registration, please contact us at [Organizer's Email] or [Organizer's Phone Number]

','Cancel Registration','','

You will receive an event confirmation shortly. Please look to it for additional details relating to rules and check in procedures.

','Thank you for registering for this tournament!','','Event Cost','Event Charges','Total','200.0','Payments Received','

For inquiries or assistance, contact our event organizers at [Organizer's Email] or [Organizer's Phone Number].

','

Event is finished, see you next year!

','Confirm Wrestlers & Team','Event Home','','Sample - Summit Wrestling Tournament','','Payment Due','','Payment Received','Get ready for an exhilarating day of intense wrestling!','','Active','

If you've registered a single or multiple athletes, please confirm all details below. For any changes, go back to the previous page and make appropriate edits.




','Review your Entries','Engagement','

Screenshot 2023-10-31 135310.png


Outdoor Open Wrestling at Millennium Park!

Get ready for an exhilarating day of intense wrestling action amidst the beautiful surroundings of Millennium Park. Whether you're a seasoned wrestler or a fan of the sport, this event promises a thrilling experience for all.


Event Highlights:

  • Open Registration: All skill levels welcome! From beginners to seasoned pros, sign up and showcase your wrestling prowess.
  • Spectator Zone: Not a wrestler? No problem! Join us as a spectator and cheer for your favorite contenders. Enjoy the excitement from the designated viewing areas.
  • Scenic Venue: Millennium Park provides a picturesque backdrop for the wrestling event. Take in the action surrounded by greenery and the vibrant energy of the outdoors.
  • Family-Friendly: Bring the whole family for a day of fun! Food vendors, music, and a festive atmosphere make this event enjoyable for everyone.


Registration Information:

  • Participant Fee: $200
  • Registration Deadline: [Insert Deadline]
  • Age Groups: [Specify age groups if applicable]



How to Register:

  1. Fill out the online registration form below. On the next page you'll be able to identify who you are.
  2. Pay the registration fee securely through our payment portal.
  3. Receive a confirmation email with event details and guidelines.
','Register','','','First Name','Gender','15.0','Add Another Team Member','

Complete the below for each individual who'll be a part of the tournament. Registration is required for all participating individuals, wrestlers and staff alike. Complete the appropriate information based on their role and read the instructions.


NOTE: If you're a Wrestler registering and representing themselves, you can skip this page. You're welcome to enter Coach information if they'll be accompanying you.

','Register Additional Wrestlers, Coaches and Support Staff','','False','Cancel','Continue','You have unsaved information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','False','Last Name As Student','Last Name','','','','','201 E Randolph St, Chicago, IL 60602','https://maps.app.goo.gl/efKLkmwybwA61tMr8','Millennium Park','On-Site','Registrant Address','15.0','Sample - Summit Wrestling Tournament','No Members Added Yet','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Please provide your mobile phone number.','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2025-10-12','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','','','','','','','Summit_Events_Fee_Allocation__c-9'); +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-8','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','','','','','','','','','','','','','','','','','','','','','False','','Application Type','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Ask and require','Ask home and mobile require one','Do not ask','Ask','Do not ask','Do not ask','Do not ask','Company Representative','Do not ask','General Public','','7.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Yellow','','','Date of Birth','Do you have any dietary restrictions?','True','True','False','

The event will be filled with live and silent auction items! So come ready for that, but don't hesitate to give something ahead of the event!


Donors of $250 or more are acknowledged as a BENEFACTOR in event materials and listed in TCOA’s Annual Report.

','100 250 500 -1000','Proactive Giving Opportunity - Be a Benefactor','Email','2023-12-21','','','Selected options','

Interested Sponsors should select from the options below. You're welcome to select multiple and we'll work with you to ensure you're represented appropriately.


NOTE: You will not be asked for payment of this sponsorship at checkout, but will be provided with a paylink or details on other payment methods.

','Once you have made your selections click next.','Selected Sponsorship(s)','Sponsorship Opportunities','Select your sponsorship level','

We will cancel your related registration automatically and will refund your tickets if completed within 7 days of the event. Any donation will not be refunded.

','Can''t Make it?','','

Thank you for registering for the Area on Aging Annual Dinner & Auction. We are delighted that you will be joining us for this special event.


Your registration details have been received, and you are now officially part of the Area on Aging Annual Dinner & Auction. Get ready for an evening filled with camaraderie, entertainment, and the chance to contribute to a meaningful cause.


Important Information:

  • Ticket Confirmation: Your ticket(s) will be sent to the email address provided closer to the event date.
  • Updates: Stay tuned for event updates and announcements leading up to the Annual Dinner & Auction.

We appreciate your support and look forward to celebrating this special occasion with you.


If you have any questions or need further assistance, please feel free to contact us.

','You''re Registered!!!','','Ticket(s)','Total Due Today','Total','75.0','Payments Received','

For details about this event, contact us at [Organization's Email] or [Organization's Phone Number]

','','Additional Guest(s) Registered','Event Home','','Sample - Area on Aging Annual Dinner & Auction','','Payment Due','','Payment Received','Annual Dinner & Auction','','Active','

Please review the information below. Should you need to make changes, hit the previous button.

','Review your Registration','Fundraising','

The Local Area on Aging and Event Sponsor TBD Company® are pleased to host the 38th Annual Dinner and Auction on [Future Date] at the Kellogg Hotel and Conference Center in East Lansing to raise funds for Meals on Wheels and in-home services for older adults in Clinton, Eaton, and Ingham counties.

 

We expect over 350 people to join us for this evening of dining, live and silent auctions, raffle with cash prizes, games and entertainment, cash bar, and many opportunities to socialize in the name of a good cause.

 

All proceeds benefit local older adults and adults with disabilities to remain safe and independent as they age. TCOA connects with over 18,000 people each year who need help, and we are able to do this in part through support from community sponsors, individual attendees, and raffle ticket sales.

 

Please join us for a wonderful evening in support of keeping our aging neighbors, friends, and families safe and thriving in the community. 

 

Tickets are $75 per person. If you're planning to be a sponsor, cost per person you pay today will be deducted from your sponsorship total through a follow up process.

','Register','All Websites','All Websites','First Name','Gender','8.0','','

Please share information about your known Guests. If you'll be sponsoring or purchasing a table (next page), we'll follow up with you for anticipated guests and you can skip this step.

','Guest Information','8.0','True','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guest details.','Touchpoint','False','','','','','','','','','','','','','','','','False','Last Name As Student','Last Name','','','','','219 S Harrison Rd, East Lansing, MI 48824','https://maps.app.goo.gl/bc1Mq98XyrqvsSjE8','Kellog Hotel & Convention Center','On-Site','Registrant Address','500.0','Sample - Area on Aging Annual Dinner & Auction','If you''re sponsoring a table, we''ll capture this later. If you''re coming solo, we''ll make sure you meet some great people with common interests!','Make Payment','No Gateway','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2023-08-03','GeneralSLDS','I am...','Title','','','','','','','10','7','1','8','','','2'); -INSERT INTO "Summit_Events__c" VALUES(9,'','','','','S +1000','Proactive Giving Opportunity - Be a Benefactor','Email','2025-12-28','','','Selected options','

Interested Sponsors should select from the options below. You're welcome to select multiple and we'll work with you to ensure you're represented appropriately.


NOTE: You will not be asked for payment of this sponsorship at checkout, but will be provided with a paylink or details on other payment methods.

','Once you have made your selections click next.','Selected Sponsorship(s)','Sponsorship Opportunities','Select your sponsorship level','

We will cancel your related registration automatically and will refund your tickets if completed within 7 days of the event. Any donation will not be refunded.

','Can''t Make it?','','

Thank you for registering for the Area on Aging Annual Dinner & Auction. We are delighted that you will be joining us for this special event.


Your registration details have been received, and you are now officially part of the Area on Aging Annual Dinner & Auction. Get ready for an evening filled with camaraderie, entertainment, and the chance to contribute to a meaningful cause.


Important Information:

  • Ticket Confirmation: Your ticket(s) will be sent to the email address provided closer to the event date.
  • Updates: Stay tuned for event updates and announcements leading up to the Annual Dinner & Auction.

We appreciate your support and look forward to celebrating this special occasion with you.


If you have any questions or need further assistance, please feel free to contact us.

','You''re Registered!!!','','Ticket(s)','Total Due Today','Total','75.0','Payments Received','

For details about this event, contact us at [Organization's Email] or [Organization's Phone Number]

','','Additional Guest(s) Registered','Event Home','','Sample - Area on Aging Annual Dinner & Auction','','Payment Due','','Payment Received','Annual Dinner & Auction','','Active','

Please review the information below. Should you need to make changes, hit the previous button.

','Review your Registration','Fundraising','

The Local Area on Aging and Event Sponsor TBD Company® are pleased to host the 38th Annual Dinner and Auction on [Future Date] at the Kellogg Hotel and Conference Center in East Lansing to raise funds for Meals on Wheels and in-home services for older adults in Clinton, Eaton, and Ingham counties.

 

We expect over 350 people to join us for this evening of dining, live and silent auctions, raffle with cash prizes, games and entertainment, cash bar, and many opportunities to socialize in the name of a good cause.

 

All proceeds benefit local older adults and adults with disabilities to remain safe and independent as they age. TCOA connects with over 18,000 people each year who need help, and we are able to do this in part through support from community sponsors, individual attendees, and raffle ticket sales.

 

Please join us for a wonderful evening in support of keeping our aging neighbors, friends, and families safe and thriving in the community. 

 

Tickets are $75 per person. If you're planning to be a sponsor, cost per person you pay today will be deducted from your sponsorship total through a follow up process.

','Register','All Websites','All Websites','First Name','Gender','8.0','','

Please share information about your known Guests. If you'll be sponsoring or purchasing a table (next page), we'll follow up with you for anticipated guests and you can skip this step.

','Guest Information','8.0','True','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guest details.','Touchpoint','False','','','','','','','','','','','','','','','','False','Last Name As Student','Last Name','','','','','219 S Harrison Rd, East Lansing, MI 48824','https://maps.app.goo.gl/bc1Mq98XyrqvsSjE8','Kellog Hotel & Convention Center','On-Site','Registrant Address','500.0','Sample - Area on Aging Annual Dinner & Auction','If you''re sponsoring a table, we''ll capture this later. If you''re coming solo, we''ll make sure you meet some great people with common interests!','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2025-08-10','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','Summit_Events_Fee_Allocation__c-10','Summit_Events_Fee_Allocation__c-7','Summit_Events_Fee_Allocation__c-1','Summit_Events_Fee_Allocation__c-8','','','Summit_Events_Fee_Allocation__c-2'); +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-9','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','','S M @@ -799,20 +844,12 @@ XL XXL -XXXL','','','','','','','','','Golf Handicap','T-Shirt Size','','Golfer/Guest','','Text box','Pick-list','','','','False','','Application Type','Do not ask','Ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Do not ask','Do not ask','Ask','Do not ask','Do not ask','Do not ask','','Do not ask','General Public','','5.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Green','','Date of Birth','True','True','False','

As you register for the 2024 AR Fundraising Golf Event, we invite you to consider making an additional contribution to support the AR scholarship fund. Your generosity will directly impact the education and opportunities provided to students in the field of augmented reality.


Why Donate?

  • Empower the next generation of AR innovators and leaders.
  • Foster education and research in the rapidly evolving field of augmented reality.
  • Make a lasting impact on the future of technology and innovation.

How Your Donation Helps:

  • Provides scholarships to students passionate about AR technology.
  • Supports educational programs and initiatives in the AR space.
  • Fuels research and development in augmented reality.



','25 +XXXL','','','','','','','','','Golf Handicap','T-Shirt Size','','Golfer/Guest','','Text box','Pick-list','','','','False','','Application Type','Do not ask','Do not ask','Ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Do not ask','Do not ask','Ask','Do not ask','Do not ask','Do not ask','','Do not ask','General Public','','5.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Green','','','Date of Birth','Do you have any dietary restrictions?','True','True','False','

As you register for the 2024 AR Fundraising Golf Event, we invite you to consider making an additional contribution to support the AR scholarship fund. Your generosity will directly impact the education and opportunities provided to students in the field of augmented reality.


Why Donate?

  • Empower the next generation of AR innovators and leaders.
  • Foster education and research in the rapidly evolving field of augmented reality.
  • Make a lasting impact on the future of technology and innovation.

How Your Donation Helps:

  • Provides scholarships to students passionate about AR technology.
  • Supports educational programs and initiatives in the AR space.
  • Fuels research and development in augmented reality.



','25 50 100 -250','Give Before the Event','Email','2024-07-06','','','Selected options','

Do you have an organization or company wanting to sponsor this event? Check out the opportunities below. Interested Sponsors should select from the options below. You're welcome to select multiple and we'll work with you to ensure you're represented appropriately.


NOTE: You will not be asked for payment of this sponsorship at checkout, but will be provided with a paylink or details on other payment methods.

','Once you have made your selections click next.','Selected Sponsorship(s)','Sponsorship Opportunities','Select your sponsorship level','

We will cancel your related registration automatically and will refund your payment if you've cancelled more than 5 days before the scramble. Any donation(s) will not be refunded.

','Can''t Make it?','','

Thank you for registering for the 2024 AR Fundraising Golf Event. Your support means a lot to us and will contribute to the AR scholarship fund.


We look forward to seeing you on the Golf Course!!


A confirmation email with the details of your registration has been sent to the provided email address. If you have any questions or need further assistance, please contact us at [Contact Email/Phone].

','Thank You for Registering!','','Event Cost','Event Charges','Total','500.0','Payments Received','

For inquiries, please contact [Your Contact Person] at [Your Contact Email/Phone].


','

We would like to express our heartfelt gratitude to everyone who participated in and supported the 2024 AR Fundraising Golf Event. Your enthusiasm, generosity, and commitment have made this event a tremendous success.


Highlights of the Event:

  • A day filled with camaraderie, sportsmanship, and support for the AR scholarship fund.
  • [Insert any notable achievements, highlights, or special moments from the event.]


Fundraising Update:

Thanks to your contributions, we have made significant strides towards our fundraising goal. Every dollar raised will directly impact the education and opportunities provided to students in the field of augmented reality.


Acknowledgments:

We extend our gratitude to our sponsors, volunteers, and all participants who dedicated their time and resources to make this event possible. Your involvement has a lasting impact on the future of augmented reality and the aspiring individuals we aim to support.


Stay Connected:

Although the event has come to a close, our commitment to the AR scholarship fund continues. Stay connected with us on [Your Social Media Channels] and our website for updates on the impact of your contributions and upcoming initiatives.


Once again, thank you for being an integral part of the 2024 AR Fundraising Golf Event. Your support is invaluable, and we look forward to seeing you again at future endeavors.


','Additional Guests/Golfers','Event Home','','Sample - 2024 AR Golf Event','','Payment Due','','Payment Received','2024 Golf Event','','Active','

Please review the information below. Should you need to make changes, hit the previous button.

','Review your Registration','Fundraising','

Annual Fundraising Golf Event


Indian Boundary Golf Course | Golf Courses Chicago Illinois


Join us for an exciting day of golf and philanthropy at the 2024 AR Fundraising Golf Event. This event is dedicated to raising funds for the AR (Augmented Reality) scholarship fund, supporting students who are passionate about the future of augmented reality technology.


Agenda:

  • 8:00 AM - Registration
  • 9:00 AM - Welcome & Briefing
  • 9:30 AM - Shotgun Start
  • 12:00 PM - Lunch Break
  • 4:00 PM - Happy Hour Social & Silent Auction
  • 5:00 PM - Award Ceremony & Dinner


Golf Format:

The event will follow a [Insert Golf Format - e.g., Scramble] format, ensuring an enjoyable experience for golfers of all skill levels.


Registration Fee:


What's Included:

  • 18 Holes of Golf
  • Golf Cart
  • Event T-Shirt
  • Lunch and Dinner


Additional Activities:

  • Silent Auction: Bid on exclusive items and experiences.
  • Networking: Connect with professionals and enthusiasts in the AR industry.
  • Raffle: Exciting prizes up for grabs!


Dress Code:

Please adhere to a golf-appropriate dress code. Collared shirts, golf shoes, and slacks are recommended.


Contact Information:

For inquiries, please contact [Your Contact Person] at [Your Contact Email/Phone].


Note: All proceeds from this event will go directly to the AR scholarship fund, fostering the education and innovation of future leaders in augmented reality.


We look forward to your participation and support in making the 2024 AR Fundraising Golf Event a memorable success!

','Register','All Websites','All Websites','First Name','Gender','3.0','Add Golfer','

Adding Additional Golfers:

  • To register additional golfers, indicate their information below. You can add up to 3 additional golfers for the cost of a group registration. If you register less than 3, you'll be added to another team to equal 4 total players. We'll ensure they are included in the event communications and assigned to your team.

Adding Guests for Dinners:

  • If you've registering as an individual and would like to bring guests for the dinner and award ceremony, please indicate and share that information below. This allows us to make the necessary arrangements for a memorable dining experience.
  • No additional cost for those attending dinner.



NOTE: All registered individuals are welcome to attend Dinner and the Award Ceremony at no additional cost.

','Register Additional Guests and Golfers','','False','Cancel','Continue','You have unsaved Golfer information entered. Select Cancel to finish adding your guests.','Touchpoint','False','Labels as headers','Appointment_Title__c','Appointment_Time_Formatted__c','','','','Agenda Item','Time','','','','','','','','False','Last Name As Student','Last Name','','','','','2231 S Harrison Rd, East Lansing, MI 48823','https://maps.app.goo.gl/Fnq3GmPdETEYDR4m6','Forrest Akers East','','Registrant Address','','Sample - 2024 AR Golf Event','No Additional Golfers Added','Make Payment','No Gateway','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','One registration per instance','Relationship (select all that apply)','2023-10-31','GeneralSLDS','I am...','Title','','','','','','','11','','','','','','3'); -INSERT INTO "Summit_Events__c" VALUES(10,'','','','Yes - -No - -Other','Spouse - -Family member (non-spouse) - -Non-family member','','','','','','','','','Are you a caregiver of someone with Dementia','What is your relation to the individual suffering from dementia?','What is your biggest need of help or support?','','','Pick-list','Pick-list','Text area','','','True','','Application Type','Do not ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Do not ask','Ask with type','Do not ask','Ask','Do not ask','Do not ask','Do not ask','','Do not ask','General Public','','0.0','','Company or Organization','','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','','','','Date of Birth','False','False','False','','','','Email','2024-10-03','','','Selected options','','Once you have made your selections click next.','','','Choose your options','','','','

Thank you for registering for the Dementia Caregiver Support Group. Your commitment to being a part of this caring community is truly appreciated.


We are thrilled to have you join us and look forward to creating a supportive and understanding space where caregivers like yourself can share experiences and find solace.


If you have any questions or need further information before the event, feel free to reach out to us at [Organizer's Contact Information].

','Thank you for Registering','','Event Cost','Event Charges','Total','','Payments Received','

Dementia Care Support Group is a non-profit dedicated to proving support to caregivers


We Support Caregivers Of Loved Ones With Dementia

','

Sorry, this session is currently closed - please call our office for more information for caregivers.

','','Event Home','','Sample - Dementia Caregiver Support','','Payment Due','','Payment Received','Series of Events to support caregivers supporting those suffering from Dementia','Center for Common Good','Active','','','Info Session','

Dementia Care Giver Support Group


Caring for a loved one with dementia can be both rewarding and challenging. The Embracing Hope Dementia Caregiver Support Group provides a safe and understanding space for caregivers to share experiences, exchange advice, and find emotional support. This event aims to create a supportive community that empowers caregivers with knowledge and strength to navigate the journey of caring for someone with dementia.


Join this monthly meeting to connect with other Caregivers and learn from Dementia experts to hear the latest care tips, clinical research, and connect with support resources in our community.



Agenda:

  • Welcome and Introduction: Get to know fellow caregivers and share your caregiving journey.
  • Expert Insights: Gain valuable insights from professionals in the field of dementia care.
  • Interactive Sharing: Share your experiences and learn from others facing similar challenges.
  • Q&A Session: Have your questions addressed by our experienced facilitators.
  • Closing Reflection: A moment of reflection and encouragement.


Who Should Attend:

  • Family members caring for a loved one with dementia.
  • Professional caregivers.
  • Those with a loved one suffering from Dementia
  • Anyone interested in learning more about dementia care.


Registration:

  • To ensure a comfortable and intimate setting, pre-registration is required. Please fill out the registration form below.



','Register','All Websites','All Websites','First Name','Gender','','','','','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','True','Last Name As Student','Last Name','','','','','4127 Okemos Rd, Okemos, MI 48864','https://maps.app.goo.gl/6G6GboVUU3sENzzj6','GLF Office','On-Site','Registrant Address','20.0','Sample - Dementia Caregiver Support','','Make Payment','No Gateway','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2023-10-03','GeneralSLDS','I am...','Title','','','','','','','','','','','','',''); +250','Give Before the Event','Email','2026-07-14','','','Selected options','

Do you have an organization or company wanting to sponsor this event? Check out the opportunities below. Interested Sponsors should select from the options below. You're welcome to select multiple and we'll work with you to ensure you're represented appropriately.


NOTE: You will not be asked for payment of this sponsorship at checkout, but will be provided with a paylink or details on other payment methods.

','Once you have made your selections click next.','Selected Sponsorship(s)','Sponsorship Opportunities','Select your sponsorship level','

We will cancel your related registration automatically and will refund your payment if you've cancelled more than 5 days before the scramble. Any donation(s) will not be refunded.

','Can''t Make it?','','

Thank you for registering for the 2024 AR Fundraising Golf Event. Your support means a lot to us and will contribute to the AR scholarship fund.


We look forward to seeing you on the Golf Course!!


A confirmation email with the details of your registration has been sent to the provided email address. If you have any questions or need further assistance, please contact us at [Contact Email/Phone].

','Thank You for Registering!','','Event Cost','Event Charges','Total','500.0','Payments Received','

For inquiries, please contact [Your Contact Person] at [Your Contact Email/Phone].


','

We would like to express our heartfelt gratitude to everyone who participated in and supported the 2024 AR Fundraising Golf Event. Your enthusiasm, generosity, and commitment have made this event a tremendous success.


Highlights of the Event:

  • A day filled with camaraderie, sportsmanship, and support for the AR scholarship fund.
  • [Insert any notable achievements, highlights, or special moments from the event.]


Fundraising Update:

Thanks to your contributions, we have made significant strides towards our fundraising goal. Every dollar raised will directly impact the education and opportunities provided to students in the field of augmented reality.


Acknowledgments:

We extend our gratitude to our sponsors, volunteers, and all participants who dedicated their time and resources to make this event possible. Your involvement has a lasting impact on the future of augmented reality and the aspiring individuals we aim to support.


Stay Connected:

Although the event has come to a close, our commitment to the AR scholarship fund continues. Stay connected with us on [Your Social Media Channels] and our website for updates on the impact of your contributions and upcoming initiatives.


Once again, thank you for being an integral part of the 2024 AR Fundraising Golf Event. Your support is invaluable, and we look forward to seeing you again at future endeavors.


','Additional Guests/Golfers','Event Home','','Sample - 2024 AR Golf Event','','Payment Due','','Payment Received','2024 Golf Event','','Active','

Please review the information below. Should you need to make changes, hit the previous button.

','Review your Registration','Fundraising','

Annual Fundraising Golf Event


Indian Boundary Golf Course | Golf Courses Chicago Illinois


Join us for an exciting day of golf and philanthropy at the 2024 AR Fundraising Golf Event. This event is dedicated to raising funds for the AR (Augmented Reality) scholarship fund, supporting students who are passionate about the future of augmented reality technology.


Agenda:

  • 8:00 AM - Registration
  • 9:00 AM - Welcome & Briefing
  • 9:30 AM - Shotgun Start
  • 12:00 PM - Lunch Break
  • 4:00 PM - Happy Hour Social & Silent Auction
  • 5:00 PM - Award Ceremony & Dinner


Golf Format:

The event will follow a [Insert Golf Format - e.g., Scramble] format, ensuring an enjoyable experience for golfers of all skill levels.


Registration Fee:


What's Included:

  • 18 Holes of Golf
  • Golf Cart
  • Event T-Shirt
  • Lunch and Dinner


Additional Activities:

  • Silent Auction: Bid on exclusive items and experiences.
  • Networking: Connect with professionals and enthusiasts in the AR industry.
  • Raffle: Exciting prizes up for grabs!


Dress Code:

Please adhere to a golf-appropriate dress code. Collared shirts, golf shoes, and slacks are recommended.


Contact Information:

For inquiries, please contact [Your Contact Person] at [Your Contact Email/Phone].


Note: All proceeds from this event will go directly to the AR scholarship fund, fostering the education and innovation of future leaders in augmented reality.


We look forward to your participation and support in making the 2024 AR Fundraising Golf Event a memorable success!

','Register','All Websites','All Websites','First Name','Gender','3.0','Add Golfer','

Adding Additional Golfers:

  • To register additional golfers, indicate their information below. You can add up to 3 additional golfers for the cost of a group registration. If you register less than 3, you'll be added to another team to equal 4 total players. We'll ensure they are included in the event communications and assigned to your team.

Adding Guests for Dinners:

  • If you've registering as an individual and would like to bring guests for the dinner and award ceremony, please indicate and share that information below. This allows us to make the necessary arrangements for a memorable dining experience.
  • No additional cost for those attending dinner.



NOTE: All registered individuals are welcome to attend Dinner and the Award Ceremony at no additional cost.

','Register Additional Guests and Golfers','','False','Cancel','Continue','You have unsaved Golfer information entered. Select Cancel to finish adding your guests.','Touchpoint','False','Labels as headers','Appointment_Title__c','Appointment_Time_Formatted__c','','','','Agenda Item','Time','','','','','','','','False','Last Name As Student','Last Name','','','','','2231 S Harrison Rd, East Lansing, MI 48823','https://maps.app.goo.gl/Fnq3GmPdETEYDR4m6','Forrest Akers East','','Registrant Address','','Sample - 2024 AR Golf Event','No Additional Golfers Added','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','One registration per instance','Relationship (select all that apply)','2025-11-07','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','Summit_Events_Fee_Allocation__c-11','','','','','','Summit_Events_Fee_Allocation__c-3'); +INSERT INTO "Summit_Events__c" VALUES('Summit_Events__c-10','','','','Please indicate your accessibility request below.','Do you have any accessibility needs for this event?','','','','','','','','','','','','','','','','','','','','','False','','Application Type','Do not ask','Do not ask','Ask','Do not ask','Do not ask','Do not ask','False','Do not ask','Ask','Ask mobile and require','Do not ask','Do not ask','Ask','Do not ask','Do not ask','','Ask','General Public','','0.0','','Company or Organization','Standard Contact Duplicate Rule','Full matching contact creation with duplicate management','Match with most recently modified','Create Contact','Use Salesforce Duplicate Rule','Green','','','Date of Birth','Do you have any dietary restrictions?','True','True','True','

If you'd like to directly support our work before the gala, you can do so here. Thank you for helping us continue our mission!

','50','Additional Donation','Email','2026-11-10','','','Selected options','','Once you have made your selections click next.','','','Choose your options','','','','

You will receive an email confirmation. If you have any questions or concerns, please do not hesitate to reach out to j.doe@givinghope.org.


12 Ways to Say “Thank You” With Examples | Grammarly

','We look forward to seeing you at A Night of Giving Hope 2024!','','Event Cost','Event Charges','Total','200.0','Payments Received','

For Additional Details or questions, contacts us at gala@summit.demo

','','Register your guest(s).','Event Home','','Sample - Gala Fundraising Event','','Payment Due','','Payment Received','','','Active','


Picture of a ticket


Ticket Information:

  • Individual Ticket: $200
  • Couple Ticket: $350
  • Corporate Table (Seats 5): $5,000
  • Corporate Table (Seats 10): $10,000



Your ticket includes dinner, entertainment, and the chance to be a part of a night dedicated to making the world a better place. Reserve your place now, and together, let's create a future filled with hope, love, and opportunity for all. Your support can change lives, and this gala is your chance to make it happen.

','Complete your Registration','Fundraising','

We're very excited to invite you to join us for an enchanting evening of elegance, compassion, and generosity at our "A Night of Giving Hope" Gala Fundraising Event. This fun event is your opportunity to make a meaningful difference in the lives of those in need while enjoying an unforgettable night of entertainment, gourmet dining, and socializing!


galatable-2019-May15-1 (1).jpeg


Event Highlights:

  • Dining: Savor a variety of gourmet bites prepared by local fan-favorite restaurants, accompanied by an open bar with a variety of drink options (and a delicious cocktail of the night!).
  • Silent Auction: Bid on an array of exclusive items, including art, luxury experiences, and unique memorabilia, with all proceeds going toward our cause.
  • Fundraising Activities: Participate in various fundraising activities, from pledging to donation stations, to directly impact the lives of those we serve.
  • Impact Showcase: Witness firsthand how your contributions are making a difference through touching stories and presentations from our beneficiaries.
  • Networking Opportunities: Connect with fellow philanthropists, community leaders, and our dedicated team who share your passion for making a positive impact.

Dress Code: Cocktail Attire


Your presence at this gala will not only make the evening extraordinary but will also help us continue our mission to impact the lives of youth all around Chicago. Every dollar raised during this event will go towards free extracurricular activities for Chicago schools that need them, bringing us one step closer to our vision of a better, brighter future.

','Register','','','First Name','Gender','','Register Guest','

It's even more fun with family and friends! Please fill out the information below for your guests. If you are interested in buying a table for 5 or 10 people, please email j.doe@givinghope.org.

','Bring a guest! Or even better, multiple guests.','','False','Cancel','Continue','You have unsaved Guest information entered. Select Cancel to finish adding your guests.','Touchpoint','False','','','','','','','','','','','','','','','','True','Last Name As Student','Last Name','','','','','3057 N Rockwell S','https://maps.app.goo.gl/PP4WNqeHwv7bGNFj9','Rockwell on the River','On-Site','Registrant Address','','Sample - Gala Fundraising Event','','Make Payment','No Gateway','','Match with most recently modified','Create Person Account','','Please provide either a home or mobile number','Type','Preferred Class Year','Preferred First Name','False','','','','Pronouns','I am willing to receive text messages on my mobile phone about this event','Your relationship to the participant','No limit','Relationship (select all that apply)','2025-10-10','GeneralSLDS','I am...','Title','','','','','','True','','We are sorry. Your registration cannot be completed at this time. Please try again using a different browser or device.','','Summit_Events_Fee_Allocation__c-4','','','','','','Summit_Events_Fee_Allocation__c-6'); COMMIT; diff --git a/datasets/mapping.yml b/datasets/mapping.yml index 89f8b679..4b833296 100644 --- a/datasets/mapping.yml +++ b/datasets/mapping.yml @@ -1,15 +1,19 @@ Insert Account: sf_object: Account fields: + - Created_with_Summit_Events__pc + - FirstName + - LastName - Name + - RecordTypeId lookups: ParentId: - table: Account + table: + - Account after: Insert Account Insert Lead: sf_object: Lead fields: - - Company - DoNotCall - FirstName - HasOptedOutOfEmail @@ -33,9 +37,11 @@ Insert Contact: - LastName lookups: AccountId: - table: Account + table: + - Account ReportsToId: - table: Contact + table: + - Contact after: Insert Contact Insert Summit_Events__c: sf_object: Summit_Events__c @@ -43,6 +49,8 @@ Insert Summit_Events__c: - Academic_Program_List_Selected__c - Academic_Program_List__c - Academic_Program_Selected__c + - Accessibility_Detail_Label__c + - Accessibility_Label__c - Add_Info_Question_Pick_List_1__c - Add_Info_Question_Pick_List_2__c - Add_Info_Question_Pick_List_3__c @@ -66,9 +74,11 @@ Insert Summit_Events__c: - Allow_Other_Attendees__c - Alternate_Registration_URL__c - Applicant_Type_Label__c + - Ask_Accessibility_Needs__c - Ask_Applicant_Type__c - Ask_Company_Organization__c - Ask_Date_Of_Birth__c + - Ask_Dietary_Restrictions__c - Ask_Gender__c - Ask_If_Parent__c - Ask_Last_Name_As_Student__c @@ -93,7 +103,9 @@ Insert Summit_Events__c: - Contact_Matching_Rules__c - Custom_Metadata_Contact_Matching_Method__c - Custom_Metadata_Lead_Matching_Method__c + - Custom_Metadata_Person_Matching_Method__c - Date_Of_Birth_Label__c + - Dietary_Restrictions_Label__c - Display_Guest_Registration__c - Display_Optional_Donation__c - Do_not_show_receive_text_question__c @@ -186,6 +198,10 @@ Insert Summit_Events__c: - No_Guest_Registrations_Added_Message__c - Payment_Button_Label__c - Payment_Gateway__c + - Person_Creation_Duplicate_Rule__c + - Person_Matching_Multiple_Match_Behavior__c + - Person_Matching_No_Match_Behavior__c + - Person_Matching_Rules__c - Phone_Label__c - Phone_Type_Label__c - Preferred_Class_Year_Label__c @@ -208,24 +224,35 @@ Insert Summit_Events__c: - Tracking_Event_Registration__c - Tracking_Options_Registration__c - Tracking_Submit_Registration__c + - Use_Matching_for_Guest_Registrations__c + - reCAPTCHA__c + - reCAPTCHA_v3_Score_Fail_Text__c lookups: Account__c: - table: Account + table: + - Account Donation_Allocation_1__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Donation_Allocation_2__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Donation_Allocation_3__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Donation_Allocation_4__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Donation_Allocation_5__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Event_Fee_Additional_Allocation__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Event_Fee_Allocation__c: - table: Summit_Events_Fee_Allocation__c - anchor_date: '2023-11-12' + table: + - Summit_Events_Fee_Allocation__c + anchor_date: '2025-11-19' Insert Summit_Events_Email__c: sf_object: Summit_Events_Email__c fields: @@ -244,8 +271,9 @@ Insert Summit_Events_Email__c: - Org_Email__c lookups: Event__c: - table: Summit_Events__c - anchor_date: '2023-11-12' + table: + - Summit_Events__c + anchor_date: '2025-11-19' Insert Summit_Events_Instance__c: sf_object: Summit_Events_Instance__c fields: @@ -275,12 +303,15 @@ Insert Summit_Events_Instance__c: - Virtual_Meeting_Link__c lookups: Event_Fee_Additional_Allocation_Override__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Event_Fee_Allocation_Override__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Event__c: - table: Summit_Events__c - anchor_date: '2023-11-12' + table: + - Summit_Events__c + anchor_date: '2025-11-19' Insert Summit_Events_Question__c: sf_object: Summit_Events_Question__c fields: @@ -296,6 +327,7 @@ Insert Summit_Events_Question__c: - Lookup_Fields__c - Lookup_No_Results_Label__c - Lookup_Object__c + - Lookup_Order_By__c - Lookup_Results_Icon__c - Lookup_Secondary_Input_Instructions__c - Lookup_Secondary_Input_Link_Text__c @@ -312,11 +344,13 @@ Insert Summit_Events_Question__c: - Text_Limit__c lookups: Controlling_Question__c: - table: Summit_Events_Question__c + table: + - Summit_Events_Question__c after: Insert Summit_Events_Question__c Event__c: - table: Summit_Events__c - anchor_date: '2023-11-12' + table: + - Summit_Events__c + anchor_date: '2025-11-19' Insert Summit_Events_Appointment_Type__c: sf_object: Summit_Events_Appointment_Type__c fields: @@ -342,14 +376,18 @@ Insert Summit_Events_Appointment_Type__c: - Title__c lookups: Appointment_Fee_Additional_Allocation__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Appointment_Fee_Allocation__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Restrict_To_Instance_Title__c: - table: Summit_Events_Instance__c + table: + - Summit_Events_Instance__c Summit_Events__c: - table: Summit_Events__c - anchor_date: '2023-11-12' + table: + - Summit_Events__c + anchor_date: '2025-11-19' Insert Summit_Events_Host__c: sf_object: Summit_Events_Host__c fields: @@ -369,13 +407,17 @@ Insert Summit_Events_Host__c: - Undergrad_Major__c lookups: Contact__c: - table: Contact + table: + - Contact Event_Instance__c: - table: Summit_Events_Instance__c - anchor_date: '2023-11-12' + table: + - Summit_Events_Instance__c + anchor_date: '2025-11-19' Insert Summit_Events_Registration__c: sf_object: Summit_Events_Registration__c fields: + - Accessibility_Need_Detail__c + - Accessibility_Need__c - Actual_Number_of_Guests__c - Add_Info_Answer_1__c - Add_Info_Answer_2__c @@ -394,6 +436,7 @@ Insert Summit_Events_Registration__c: - Campus_Tour_Time__c - Confirmation_Call_Result__c - Date_All_Appointments_Confirmed_del__c + - Dietary_Ristrictions__c - Display_Attendance_Publicly__c - Encrypted_Registration_Id_1__c - Encrypted_Registration_Id_2__c @@ -410,6 +453,7 @@ Insert Summit_Events_Registration__c: - Matching_Log__c - New_Contact_Created__c - New_Lead_Created__c + - New_Person_Account_Created__c - Number_of_Guests__c - Participation_Type__c - Payment_Gateway_Status__c @@ -425,6 +469,7 @@ Insert Summit_Events_Registration__c: - Registrant_College__c - Registrant_Company_Organization__c - Registrant_Country__c + - Registrant_Date_of_Birth_Text__c - Registrant_Date_of_Birth__c - Registrant_Do_Not_Call__c - Registrant_Email__c @@ -466,6 +511,7 @@ Insert Summit_Events_Registration__c: - Status__c - Substatus__c - gclid__c + - reCAPTCHA_Score__c - utm_campaign__c - utm_content__c - utm_creative_format__c @@ -477,15 +523,25 @@ Insert Summit_Events_Registration__c: - utm_term__c lookups: Contact__c: - table: Contact + table: + - Contact Event_Instance__c: - table: Summit_Events_Instance__c + table: + - Summit_Events_Instance__c Event__c: - table: Summit_Events__c + table: + - Summit_Events__c Guest_Host__c: - table: Summit_Events_Registration__c + table: + - Summit_Events_Registration__c after: Insert Summit_Events_Registration__c - anchor_date: '2023-11-12' + Lead__c: + table: + - Lead + Person_Account__c: + table: + - Account + anchor_date: '2025-11-19' Insert Summit_Events_Appointments__c: sf_object: Summit_Events_Appointments__c fields: @@ -513,12 +569,14 @@ Insert Summit_Events_Appointments__c: - Sort_Order__c lookups: Event_Appointment_Type__c: - table: Summit_Events_Appointment_Type__c + table: + - Summit_Events_Appointment_Type__c Event_Host__c: - table: Summit_Events_Host__c + table: + - Summit_Events_Host__c Event_Registration__c: - table: Summit_Events_Registration__c - anchor_date: '2023-11-12' + table: + - Summit_Events_Registration__c Insert Summit_Events_Payment__c: sf_object: Summit_Events_Payment__c fields: @@ -550,8 +608,9 @@ Insert Summit_Events_Payment__c: - Zip__c lookups: Event_Registration__c: - table: Summit_Events_Registration__c - anchor_date: '2023-11-12' + table: + - Summit_Events_Registration__c + anchor_date: '2025-11-19' Insert Summit_Events_Fee__c: sf_object: Summit_Events_Fee__c fields: @@ -560,13 +619,18 @@ Insert Summit_Events_Fee__c: - Event_Fee__c lookups: Event_Appointment_Type__c: - table: Summit_Events_Appointment_Type__c + table: + - Summit_Events_Appointment_Type__c Event_Fee_Allocation__c: - table: Summit_Events_Fee_Allocation__c + table: + - Summit_Events_Fee_Allocation__c Event_Registration__c: - table: Summit_Events_Registration__c + table: + - Summit_Events_Registration__c Summit_Events_Payment__c: - table: Summit_Events_Payment__c + table: + - Summit_Events_Payment__c Summit_Events__c: - table: Summit_Events__c - anchor_date: '2023-11-12' \ No newline at end of file + table: + - Summit_Events__c + anchor_date: '2025-11-19' diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 433548e3..0a469de4 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -281,7 +281,7 @@ public with sharing class SummitEventsRegisterController { userContact = [ SELECT Id, Name, FirstName, LastName, Email, HomePhone, MobilePhone, Birthdate, MailingStreet, - MailingState, MailingCountry, MailingPostalCode, MailingCity + MailingState, MailingCountry, MailingPostalCode, MailingCity, AccountId FROM Contact WHERE Id IN ( SELECT ContactId diff --git a/orgs/dev.json b/orgs/dev.json index eb2e6565..9e0c6add 100644 --- a/orgs/dev.json +++ b/orgs/dev.json @@ -19,6 +19,7 @@ }, "securitySettings": { "enableAdminLoginAsAnyUser": true, + "enableAuditFieldsInactiveOwner": true, "sessionSettings": { "forceRelogin": false } @@ -30,7 +31,8 @@ "enableExperienceBundleMetadata": true }, "communitiesSettings": { - "enableNetworksEnabled": true + "enableNetworksEnabled": true, + "enableOotbProfExtUserOpsEnable": true } } } \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1.site-meta.xml b/unpackaged/config/experiences/Summit_Events1.site-meta.xml new file mode 100644 index 00000000..f6008304 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1.site-meta.xml @@ -0,0 +1,6 @@ + + + + ChatterNetworkPicasso + /s + diff --git a/unpackaged/config/experiences/Summit_Events1/brandingSets/buildYourOwn.json b/unpackaged/config/experiences/Summit_Events1/brandingSets/buildYourOwn.json new file mode 100644 index 00000000..1dad55d0 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/brandingSets/buildYourOwn.json @@ -0,0 +1,54 @@ +{ + "definitionName" : "starter:branding-starter", + "id" : "e2b9f380-7a4b-4a0b-a098-608aafe35864", + "label" : "Build Your Own", + "type" : "brandingSet", + "values" : { + "ActionColor" : "#2574A9", + "BorderColor" : "#939393", + "CardBackgroundColor" : "rgba(255, 255, 255, 0)", + "CompanyLogo" : "", + "DetailTextColor" : "#696969", + "ErrorFontColor" : "#ff9e9e", + "HeaderFonts" : "Montserrat", + "LinkColor" : "#57A3FD", + "LoginBackgroundColor" : "#F4F4F4", + "LoginBackgroundImage" : "../../../../sfsites/picasso/core/external/salesforceIdentity/images/background.jpg?v=1", + "OverlayTextColor" : "#FFFFFF", + "PrimaryFont" : "Lato", + "TextColor" : "#333", + "TextTransformStyle" : "uppercase", + "_ActionColorDarker" : "#03234D", + "_ActionColorTrans" : "rgba(25, 124, 190, 0.9)", + "_BackgroundColor1" : "rgb(235, 235, 235)", + "_BackgroundColor2" : "rgb(194, 194, 194)", + "_BackgroundColor3" : "rgb(133, 133, 133)", + "_DxpPageBackgroundColor" : "#FFFFFF", + "_HoverColor" : "rgba(25, 124, 190, 0.05)", + "_LinkColorDarker" : "#1B96FF", + "_NeutralColor" : "#ecebea", + "_NeutralColor1" : "rgb(217, 215, 213)", + "_NeutralColor2" : "rgb(178, 174, 170)", + "_NeutralColor3" : "rgb(118, 113, 107)", + "_NeutralForegroundColor" : "#000", + "_NeutralForegroundColor1" : "#000", + "_NeutralForegroundColor2" : "#000", + "_NeutralForegroundColor3" : "#fff", + "_OverlayTextColorShadow" : "#000000", + "_PrimaryAccentColor1" : "rgb(30, 93, 136)", + "_PrimaryAccentColor2" : "rgb(15, 47, 69)", + "_PrimaryAccentColor3" : "rgb(0, 0, 0)", + "_PrimaryAccentForegroundColor1" : "rgb(255, 255, 255)", + "_PrimaryAccentForegroundColor2" : "rgb(255, 255, 255)", + "_PrimaryAccentForegroundColor3" : "rgb(255, 255, 255)", + "_TextColor1" : "rgb(31, 31, 31)", + "_TextColor2" : "rgb(0, 0, 0)", + "_TextColor3" : "rgb(0, 0, 0)", + "_brandNavigationBarBackgroundColor" : "rgb(115,115,115)", + "_brandNavigationItemBackgroundColorHover" : "rgba(0,0,0,.2)", + "_brandNavigationItemDividerColor" : "rgba(255, 255, 255, 0.2)", + "brandNavigationBackgroundColor" : "rgb(128,128,128)", + "brandNavigationBarBackgroundColor" : "rgb(115,115,115)", + "brandNavigationColorText" : "#FFFFFF" + } +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/config/languages.json b/unpackaged/config/experiences/Summit_Events1/config/languages.json new file mode 100644 index 00000000..2fbd4fa6 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/config/languages.json @@ -0,0 +1,6 @@ +{ + "defaultCode" : "en_US", + "defaultLabel" : "English (US)", + "id" : "4e2c843e-d724-42f6-88be-fa16e2dcb61e", + "type" : "languageContainer" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/config/loginAppPage.json b/unpackaged/config/experiences/Summit_Events1/config/loginAppPage.json new file mode 100644 index 00000000..8faa094d --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/config/loginAppPage.json @@ -0,0 +1,7 @@ +{ + "cmsSettings" : { }, + "id" : "2b24547d-3389-457a-8a77-b03541a38acb", + "label" : "login", + "templateName" : "Login Template", + "type" : "appPage" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/config/mainAppPage.json b/unpackaged/config/experiences/Summit_Events1/config/mainAppPage.json new file mode 100644 index 00000000..27f095ed --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/config/mainAppPage.json @@ -0,0 +1,11 @@ +{ + "cmsSettings" : { }, + "currentThemeId" : "84a3a53f-115f-4cd6-8931-c29ee65ae7b2", + "headMarkup" : null, + "id" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "isLockerServiceEnabled" : true, + "isRelaxedCSPLevel" : false, + "label" : "main", + "templateName" : "Starter Template", + "type" : "appPage" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/config/nativeConfig.json b/unpackaged/config/experiences/Summit_Events1/config/nativeConfig.json new file mode 100644 index 00000000..eadbe3a4 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/config/nativeConfig.json @@ -0,0 +1,34 @@ +{ + "id" : "da6d5c70-c17e-48d0-9fd9-a8f5ee8a1074", + "mobilePublisherAppUpdateConfig" : { + "forceAppUpdate" : false, + "enableAppUpdate" : false, + "minVersion" : { + "ios" : { + "version" : "10.0", + "url" : "https://apps.apple.com/us" + }, + "android" : { + "version" : "10.1", + "url" : "https://play.google.com/store" + } + } + }, + "nativeMobileNavConfig" : { + "showBackButton" : true, + "showHamburgerMenuWithBackButton" : false + }, + "nativeTabMenu" : { + "branding" : { + "iconTintColorUnselected" : "#C9C5C5", + "barTintColor" : "#FFFFFF" + }, + "menuItems" : [ { + "name" : "Home", + "targetUrl" : "/", + "iconAsset" : "slds-icon:home" + } ] + }, + "showHamburgerMenu" : true, + "type" : "nativeConfig" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/config/summitEvents.json b/unpackaged/config/experiences/Summit_Events1/config/summitEvents.json new file mode 100644 index 00000000..29dc2c19 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/config/summitEvents.json @@ -0,0 +1,11 @@ +{ + "forgotPasswordRouteId" : "7b097121-c272-4ef1-813c-7e6ba0723f3a", + "isAvailableToGuests" : false, + "isFilteredComponentsView" : false, + "isProgressiveRenderingEnabled" : false, + "loginAppPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "mainAppPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "preferredDomain" : "none", + "selfRegistrationRouteId" : "ece9e397-b294-4e70-8a08-d03e50fc3431", + "type" : "site" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/checkPassword.json b/unpackaged/config/experiences/Summit_Events1/routes/checkPassword.json new file mode 100644 index 00000000..9c720416 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/checkPassword.json @@ -0,0 +1,11 @@ +{ + "activeViewId" : "7dc209c8-6d2b-4764-8130-d928cc1afeb5", + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "configurationTags" : [ ], + "devName" : "Check_Password", + "id" : "a85f5f2f-7815-40b4-a0e5-b8a3e883911b", + "label" : "Check Password", + "routeType" : "check-password", + "type" : "route", + "urlPrefix" : "CheckPasswordResetEmail" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/createRecord.json b/unpackaged/config/experiences/Summit_Events1/routes/createRecord.json new file mode 100644 index 00000000..826410b3 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/createRecord.json @@ -0,0 +1,11 @@ +{ + "activeViewId" : "b93dcbe3-de93-4765-99ab-8a08c0860f61", + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "configurationTags" : [ ], + "devName" : "Create_Record", + "id" : "b8f682ae-5f49-4273-ac87-f4a8426b22ad", + "label" : "Create Record", + "routeType" : "createrecord", + "type" : "route", + "urlPrefix" : "createrecord" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/error.json b/unpackaged/config/experiences/Summit_Events1/routes/error.json new file mode 100644 index 00000000..02b88d7b --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/error.json @@ -0,0 +1,12 @@ +{ + "activeViewId" : "d60ff27b-b984-44fb-b4ea-6f9dae86ac63", + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "configurationTags" : [ ], + "devName" : "Error", + "id" : "1d4fc645-a583-4b65-a4a3-eda47bca5d0f", + "label" : "Error", + "pageAccess" : "UseParent", + "routeType" : "error", + "type" : "route", + "urlPrefix" : "error" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/forgotPassword.json b/unpackaged/config/experiences/Summit_Events1/routes/forgotPassword.json new file mode 100644 index 00000000..6e3fd242 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/forgotPassword.json @@ -0,0 +1,11 @@ +{ + "activeViewId" : "b9d74585-bd80-4547-844f-35d717ff5a25", + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "configurationTags" : [ ], + "devName" : "Forgot_Password", + "id" : "7b097121-c272-4ef1-813c-7e6ba0723f3a", + "label" : "Forgot Password", + "routeType" : "forgot-password", + "type" : "route", + "urlPrefix" : "ForgotPassword" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/home.json b/unpackaged/config/experiences/Summit_Events1/routes/home.json new file mode 100644 index 00000000..860b130e --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/home.json @@ -0,0 +1,12 @@ +{ + "activeViewId" : "415b9c69-0325-486a-a90b-ec53a0344078", + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "configurationTags" : [ ], + "devName" : "Home", + "id" : "4f3f379b-8350-42df-b16b-2aff0a93733a", + "label" : "Home", + "pageAccess" : "UseParent", + "routeType" : "home", + "type" : "route", + "urlPrefix" : "" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/login.json b/unpackaged/config/experiences/Summit_Events1/routes/login.json new file mode 100644 index 00000000..79bac827 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/login.json @@ -0,0 +1,11 @@ +{ + "activeViewId" : "b0ddeebb-5db2-463b-b9b5-0e0aeae14aac", + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "configurationTags" : [ ], + "devName" : "Login", + "id" : "8db2ebb9-fea7-4494-824c-b1b7ea23599b", + "label" : "Login", + "routeType" : "login-home", + "type" : "route", + "urlPrefix" : "" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/loginError.json b/unpackaged/config/experiences/Summit_Events1/routes/loginError.json new file mode 100644 index 00000000..7336d073 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/loginError.json @@ -0,0 +1,11 @@ +{ + "activeViewId" : "2ce23f61-d6d4-4035-bb3d-0ae3db9560f2", + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "configurationTags" : [ ], + "devName" : "Login_Error", + "id" : "18b94467-01eb-4c88-948b-f3f101b32042", + "label" : "Login Error", + "routeType" : "login-error", + "type" : "route", + "urlPrefix" : "error" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/recordDetail.json b/unpackaged/config/experiences/Summit_Events1/routes/recordDetail.json new file mode 100644 index 00000000..34ec338b --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/recordDetail.json @@ -0,0 +1,11 @@ +{ + "activeViewId" : "5ad7be8b-cd4b-401b-8223-d96372979ee2", + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "configurationTags" : [ ], + "devName" : "Record_Detail", + "id" : "45f46b69-8bc0-4676-9ccf-c8e468d57588", + "label" : "Record Detail", + "routeType" : "detail", + "type" : "route", + "urlPrefix" : "detail" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/recordList.json b/unpackaged/config/experiences/Summit_Events1/routes/recordList.json new file mode 100644 index 00000000..678f3279 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/recordList.json @@ -0,0 +1,12 @@ +{ + "activeViewId" : "73c5ba6f-c654-4ff2-9c3d-86e2c769f950", + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "configurationTags" : [ ], + "devName" : "Record_List", + "id" : "81982364-53da-4748-8cb9-a5dafb4e7e4c", + "label" : "Record List", + "pageAccess" : "UseParent", + "routeType" : "list", + "type" : "route", + "urlPrefix" : "recordlist" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/register.json b/unpackaged/config/experiences/Summit_Events1/routes/register.json new file mode 100644 index 00000000..316f604a --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/register.json @@ -0,0 +1,11 @@ +{ + "activeViewId" : "9b22e694-14fc-41b4-88e8-0428bdae1b26", + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "configurationTags" : [ ], + "devName" : "Register", + "id" : "ece9e397-b294-4e70-8a08-d03e50fc3431", + "label" : "Register", + "routeType" : "self-register", + "type" : "route", + "urlPrefix" : "SelfRegister" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/relatedRecordList.json b/unpackaged/config/experiences/Summit_Events1/routes/relatedRecordList.json new file mode 100644 index 00000000..bccdb88c --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/relatedRecordList.json @@ -0,0 +1,12 @@ +{ + "activeViewId" : "e5cf1a7c-aa42-49e1-9655-535a70956381", + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "configurationTags" : [ ], + "devName" : "Related_Record_List", + "id" : "ac6a6554-9af8-478c-9f89-be55edb8859e", + "label" : "Related Record List", + "pageAccess" : "UseParent", + "routeType" : "relatedlist", + "type" : "route", + "urlPrefix" : "relatedlist" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/search.json b/unpackaged/config/experiences/Summit_Events1/routes/search.json new file mode 100644 index 00000000..14e28126 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/search.json @@ -0,0 +1,12 @@ +{ + "activeViewId" : "ffe8cb37-5803-435f-b2b4-199327286351", + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "configurationTags" : [ ], + "devName" : "Search", + "id" : "bbc6152f-d74e-41b3-9489-b668e60b643f", + "label" : "Search", + "pageAccess" : "UseParent", + "routeType" : "global-search", + "type" : "route", + "urlPrefix" : "global-search" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/serviceNotAvailable.json b/unpackaged/config/experiences/Summit_Events1/routes/serviceNotAvailable.json new file mode 100644 index 00000000..fe36f7cb --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/serviceNotAvailable.json @@ -0,0 +1,11 @@ +{ + "activeViewId" : "2e77f5c3-830d-4614-9d26-346e94677720", + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "configurationTags" : [ "allow-in-static-site" ], + "devName" : "Service_Not_Available", + "id" : "04b8f29b-df1b-4a30-a13d-def69c75a1e3", + "label" : "Service Not Available", + "routeType" : "service-not-available", + "type" : "route", + "urlPrefix" : "service-not-available" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/routes/tooManyRequests.json b/unpackaged/config/experiences/Summit_Events1/routes/tooManyRequests.json new file mode 100644 index 00000000..3a72c625 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/routes/tooManyRequests.json @@ -0,0 +1,11 @@ +{ + "activeViewId" : "aac27928-109b-4abe-b468-e11c995f08a7", + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "configurationTags" : [ "too-many-requests", "allow-in-static-site" ], + "devName" : "Too_Many_Requests", + "id" : "9edab25f-b9af-478d-902a-7c9d0b975da0", + "label" : "Too Many Requests", + "routeType" : "too-many-requests", + "type" : "route", + "urlPrefix" : "too-many-requests" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/themes/buildYourOwn.json b/unpackaged/config/experiences/Summit_Events1/themes/buildYourOwn.json new file mode 100644 index 00000000..6e95b8f4 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/themes/buildYourOwn.json @@ -0,0 +1,126 @@ +{ + "activeBrandingSetId" : "e2b9f380-7a4b-4a0b-a098-608aafe35864", + "customCSS" : "", + "developerName" : "starter", + "id" : "84a3a53f-115f-4cd6-8931-c29ee65ae7b2", + "label" : "Build Your Own", + "layouts" : { + "Inner" : "ffa17038-dcae-4840-a69c-d0ce49f135ba", + "Login" : "c216be3f-4a95-4d07-acdd-49ca51a38f13", + "ServiceNotAvailable" : "24f12a62-78e0-4620-a830-89d232f22fb0" + }, + "type" : "theme", + "views" : [ { + "componentAttributes" : { }, + "componentName" : "salesforceIdentity:loginBody2", + "id" : "c216be3f-4a95-4d07-acdd-49ca51a38f13", + "label" : "Login", + "regions" : [ { + "id" : "7b1a4e25-c306-4334-90cf-b5b89717d1da", + "regionName" : "header", + "type" : "region" + }, { + "id" : "9e03158a-9503-4131-9ee9-4ea657c298d7", + "regionName" : "content", + "type" : "region" + }, { + "id" : "0103c418-fb32-421f-8adb-463cd0f9db65", + "regionName" : "footer", + "type" : "region" + } ], + "type" : "view" + }, { + "componentAttributes" : { + "fixedPageWidth" : 1440, + "isPageWidthFixed" : true + }, + "componentName" : "siteforce:starterBody", + "id" : "ffa17038-dcae-4840-a69c-d0ce49f135ba", + "label" : "Default", + "regions" : [ { + "components" : [ { + "componentAttributes" : { + "maxAutoCompleteResults" : 5, + "searchLabel" : "Search...", + "searchObjects" : [ { + "isPublic" : true, + "name" : "Account" + } ] + }, + "componentName" : "forceCommunity:globalSearchInput", + "id" : "4298cef1-954b-4598-a7bd-111ef0d483d9", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "7af1a11e-ce93-4ac1-a0a0-0b30cb848151", + "regionName" : "search", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "accountManagementLabel" : "Account Management", + "communityBuilderLabel" : "Experience Builder", + "communitySetupLabel" : "Salesforce Setup", + "contactSupportLabel" : "Contact Support", + "filterName" : "MyCases", + "homeLabel" : "Home", + "includeContactSupport" : true, + "includeMessages" : false, + "loginLabel" : "Login", + "logoutLabel" : "Logout", + "myAccountLabel" : "My Account", + "showAccountManagement" : true, + "showUserSettings" : true, + "userSettingsLabel" : "My Settings", + "viewProfileLabel" : "My Profile" + }, + "componentName" : "selfService:userProfileMenu", + "id" : "050a6fde-dcfd-4fc3-9f7c-e48b515fa437", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "70856dce-2db7-49d9-8aed-c31977b21e9d", + "regionName" : "profileMenu", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "NavigationMenuEditorRefresh" : "", + "hideAppLauncher" : true, + "hideHomeText" : true + }, + "componentName" : "forceCommunity:globalNavigation", + "id" : "c8055bf5-52b3-46c6-ac4c-76ef53c3d6e9", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "f6bd27cf-c082-4173-a6a7-43d663e4388e", + "regionName" : "navBar", + "type" : "region" + } ], + "type" : "view" + }, { + "componentAttributes" : { + "fixedPageWidth" : 1170, + "headerBgColor" : "rgba(0, 0, 0, 0)", + "isHeaderPinned" : false, + "isHeroUnderHeader" : false, + "isPageWidthFixed" : true, + "showHeader" : true, + "showHero" : true + }, + "componentName" : "siteforce:themeLayoutStarter", + "id" : "24f12a62-78e0-4620-a830-89d232f22fb0", + "label" : "ServiceNotAvailable", + "regions" : [ { + "id" : "f319b1b7-2dd3-4426-bafd-cbc9ce343d64", + "regionName" : "themeHeader", + "type" : "region" + }, { + "id" : "66aba42c-918a-4da0-8215-9c100e7248eb", + "regionName" : "themeFooter", + "type" : "region" + } ], + "type" : "view" + } ] +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/checkPassword.json b/unpackaged/config/experiences/Summit_Events1/views/checkPassword.json new file mode 100644 index 00000000..1bebcd35 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/checkPassword.json @@ -0,0 +1,58 @@ +{ + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "7dc209c8-6d2b-4764-8130-d928cc1afeb5", + "label" : "Check Password", + "regions" : [ { + "components" : [ { + "componentAttributes" : { + "richTextValue" : "
NOW, CHECK YOUR EMAIL
" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "c179944b-5016-4e4f-a55e-9e50caae3eef", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "richTextValue" : "
Check the email account associated with your user name for instructions on resetting your password. Remember to look in your spam folder, where automated messages sometimes filter. If you still can't log in, contact your administrator.
" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "b2cd370d-3d36-4cd8-9b7c-23972d37439f", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "richTextValue" : "" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "3aee29df-1a5f-415a-89fb-26ef782281cf", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "1537397c-ca3d-4c0b-8f83-acd7e7944f90", + "regionName" : "content", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "customHeadTags" : "", + "description" : "", + "title" : "Check Password" + }, + "componentName" : "forceCommunity:seoAssistant", + "id" : "de7a58f0-865b-4b55-a0a7-8009b6b430bc", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "febc3d7b-162b-4b26-b8ff-4a8f360ed309", + "regionName" : "sfdcHiddenRegion", + "type" : "region" + } ], + "themeLayoutType" : "Login", + "type" : "view", + "viewType" : "check-password" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/createRecord.json b/unpackaged/config/experiences/Summit_Events1/views/createRecord.json new file mode 100644 index 00000000..832ec4f6 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/createRecord.json @@ -0,0 +1,34 @@ +{ + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "b93dcbe3-de93-4765-99ab-8a08c0860f61", + "label" : "Create Record", + "regions" : [ { + "id" : "ed1e2b65-1f6d-4b53-8ee6-be7ad6922dd2", + "regionName" : "header", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "actionApiName" : "{!actionApiName}", + "isMicrobatch" : false + }, + "componentName" : "forceCommunity:createRecordForm", + "id" : "0da4e75a-43cf-40b2-8b69-be5c49d0ad8d", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "c191e558-2227-4425-b941-d75682e7ae1f", + "regionName" : "content", + "type" : "region" + }, { + "id" : "a8863008-4dbb-4c5b-ad6f-2bfabe28068b", + "regionName" : "footer", + "type" : "region" + } ], + "themeLayoutType" : "Inner", + "type" : "view", + "viewType" : "createrecord" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/error.json b/unpackaged/config/experiences/Summit_Events1/views/error.json new file mode 100644 index 00000000..82a26243 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/error.json @@ -0,0 +1,48 @@ +{ + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "d60ff27b-b984-44fb-b4ea-6f9dae86ac63", + "label" : "Error", + "regions" : [ { + "id" : "38dd437c-331a-4098-a207-546a248e1c59", + "regionName" : "header", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "richTextValue" : "
Invalid Page
" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "e4036f4d-cbe7-41e9-acec-d7154627b3b9", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "5cce226e-bbd3-4103-b575-c3397f9dc94a", + "regionName" : "content", + "type" : "region" + }, { + "id" : "89797f8c-8527-4d98-bf4a-62c79aed1986", + "regionName" : "footer", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "customHeadTags" : "", + "description" : "", + "title" : "Error" + }, + "componentName" : "forceCommunity:seoAssistant", + "id" : "f6a2e3b3-1104-45a4-a528-dde33c1f8149", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "a6a735e9-9a50-4c83-85e7-980ce50456e4", + "regionName" : "sfdcHiddenRegion", + "type" : "region" + } ], + "themeLayoutType" : "Inner", + "type" : "view", + "viewType" : "error" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/forgotPassword.json b/unpackaged/config/experiences/Summit_Events1/views/forgotPassword.json new file mode 100644 index 00000000..e27f9f8e --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/forgotPassword.json @@ -0,0 +1,69 @@ +{ + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "b9d74585-bd80-4547-844f-35d717ff5a25", + "label" : "Forgot Password", + "regions" : [ { + "components" : [ { + "componentAttributes" : { + "richTextValue" : "
PASSWORD RESET
" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "542a5c6a-4373-429f-8535-37b61f83875a", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "richTextValue" : "
To reset your password, we'll need your username.
We'll send password reset instructions to the email address associated with your account.
" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "91910620-3b37-4ace-bbd0-8f09536aedcf", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "checkEmailUrl" : "./CheckPasswordResetEmail", + "submitButtonLabel" : "Reset Password", + "usernameLabel" : "Username" + }, + "componentName" : "salesforceIdentity:forgotPassword2", + "id" : "c7c89a7e-9d53-4523-8dd7-45c659240d82", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "richTextValue" : "" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "7d8b116f-bab4-4ea9-8ef3-00210a8e0f34", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "e53eb0c1-01af-4e30-9672-9394626905bd", + "regionName" : "content", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "customHeadTags" : "", + "description" : "", + "title" : "Forgot Password" + }, + "componentName" : "forceCommunity:seoAssistant", + "id" : "6a8c7720-5664-4f47-92c7-6b34ab26c287", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "64c52d90-79db-49f1-a139-49b2fa2b129a", + "regionName" : "sfdcHiddenRegion", + "type" : "region" + } ], + "themeLayoutType" : "Login", + "type" : "view", + "viewType" : "forgot-password" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/home.json b/unpackaged/config/experiences/Summit_Events1/views/home.json new file mode 100644 index 00000000..33ada9ef --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/home.json @@ -0,0 +1,50 @@ +{ + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "415b9c69-0325-486a-a90b-ec53a0344078", + "label" : "Home", + "regions" : [ { + "id" : "2c6c7b04-dfc6-4887-86a4-5439e36b99e5", + "regionName" : "header", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "height" : "300", + "pageName" : "SummitEvents", + "recordId" : "{!recordId}" + }, + "componentName" : "forceCommunity:visualforcePage", + "id" : "9e458b2c-c74a-4d8a-b433-09d51307ab79", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "fb240379-f2a7-4396-b616-e96de9c6bbbc", + "regionName" : "content", + "type" : "region" + }, { + "id" : "809ca025-34cc-48e6-9040-1c45448318ce", + "regionName" : "footer", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "customHeadTags" : "", + "description" : "", + "title" : "Home" + }, + "componentName" : "forceCommunity:seoAssistant", + "id" : "743938db-2ea6-4fd0-ab57-4a044e99483d", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "6a9732a7-ad98-4ede-b1cc-3db147505295", + "regionName" : "sfdcHiddenRegion", + "type" : "region" + } ], + "themeLayoutType" : "Inner", + "type" : "view", + "viewType" : "home" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/login.json b/unpackaged/config/experiences/Summit_Events1/views/login.json new file mode 100644 index 00000000..e3cd761c --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/login.json @@ -0,0 +1,74 @@ +{ + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "b0ddeebb-5db2-463b-b9b5-0e0aeae14aac", + "label" : "Login", + "regions" : [ { + "components" : [ { + "componentAttributes" : { }, + "componentName" : "salesforceIdentity:communityLogo2", + "id" : "dac46297-d167-462b-8e9a-cac6eab323ac", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "forgotPasswordLabel" : "Forgot your password?", + "forgotPasswordUrl" : "/ForgotPassword", + "loginButtonLabel" : "Log in", + "passwordLabel" : "Password", + "selfRegisterLabel" : "Not a member?", + "selfRegisterUrl" : "/SelfRegister", + "startUrl" : "", + "usernameLabel" : "Username" + }, + "componentName" : "salesforceIdentity:loginForm2", + "id" : "1317ba15-2aee-4e94-aa5e-4e9f027822ff", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "headerText" : "", + "showHeader" : false, + "useCommunityDomainSso" : true + }, + "componentName" : "salesforceIdentity:socialLogin2", + "id" : "0c5351bd-2486-4013-8ce1-54b18114d11f", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "employeeLoginLinkLabel" : "Are you an employee? Login here" + }, + "componentName" : "salesforceIdentity:employeeLoginLink2", + "id" : "5612c590-e46d-432c-b044-8a50c6329f87", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "1c28de9e-0106-4a43-97fa-a1269cff3605", + "regionName" : "content", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "customHeadTags" : "", + "description" : "", + "title" : "Login" + }, + "componentName" : "forceCommunity:seoAssistant", + "id" : "986888ac-2544-497d-aef7-70b67110e0d5", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "900bb32d-ebc6-4ef4-93dd-5c3340778288", + "regionName" : "sfdcHiddenRegion", + "type" : "region" + } ], + "themeLayoutType" : "Login", + "type" : "view", + "viewType" : "login-home" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/loginError.json b/unpackaged/config/experiences/Summit_Events1/views/loginError.json new file mode 100644 index 00000000..3abef464 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/loginError.json @@ -0,0 +1,48 @@ +{ + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "2ce23f61-d6d4-4035-bb3d-0ae3db9560f2", + "label" : "Login Error", + "regions" : [ { + "id" : "ac8febc2-a382-4a86-abf1-e63d9998e4b4", + "regionName" : "header", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "richTextValue" : "
Invalid Page
" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "f7e477cd-bd87-4779-a75a-4570b7539881", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "8c40bab6-4d67-4d35-ba75-2d56ca425461", + "regionName" : "content", + "type" : "region" + }, { + "id" : "f1c875b8-e4c2-4c80-8834-5af7f3eaf1e2", + "regionName" : "footer", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "customHeadTags" : "", + "description" : "", + "title" : "Login Error" + }, + "componentName" : "forceCommunity:seoAssistant", + "id" : "b79d5d3a-589c-4b48-8cab-1bacc9e90589", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "3adb1271-0583-4dd9-b5c6-8e4d34ee88c2", + "regionName" : "sfdcHiddenRegion", + "type" : "region" + } ], + "themeLayoutType" : "Login", + "type" : "view", + "viewType" : "login-error" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/recordDetail.json b/unpackaged/config/experiences/Summit_Events1/views/recordDetail.json new file mode 100644 index 00000000..70bc07be --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/recordDetail.json @@ -0,0 +1,66 @@ +{ + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "5ad7be8b-cd4b-401b-8223-d96372979ee2", + "label" : "Record Detail", + "regions" : [ { + "id" : "9b0d3879-b8d1-41ba-b63b-a6d1c895599d", + "regionName" : "header", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "recordId" : "{!recordId}" + }, + "componentName" : "forceCommunity:recordHeadline", + "id" : "ae58973f-4232-4099-8517-58a1370e6225", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "detailsTabLabel" : "Details", + "discussionsTabLabel" : "Feed", + "recordId" : "{!recordId}", + "relatedTabLabel" : "Related", + "showLegacyActivityComposer" : false, + "tab1Type" : "details", + "tab2Type" : "related", + "tab3Type" : "chatter", + "tab4Type" : "none", + "timelineTabLabel" : "Activity" + }, + "componentName" : "forceCommunity:recordHomeTabs", + "id" : "57d0898e-c0ef-424e-aff1-53cf6e7e0a83", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "b885d072-6657-4fa5-b2c1-e13bd07951db", + "regionName" : "content", + "type" : "region" + }, { + "id" : "f02cee5b-84d3-4e0a-a20e-23052b997dc1", + "regionName" : "footer", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "customHeadTags" : "", + "description" : "", + "title" : "{!Record._Object}: {!Record._Title}" + }, + "componentName" : "forceCommunity:seoAssistant", + "id" : "92aaead1-8d5f-481a-bbf7-694b299300f2", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "f1bada0e-4eba-408d-979a-8bc241d5e3ec", + "regionName" : "sfdcHiddenRegion", + "type" : "region" + } ], + "themeLayoutType" : "Inner", + "type" : "view", + "viewType" : "detail" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/recordList.json b/unpackaged/config/experiences/Summit_Events1/views/recordList.json new file mode 100644 index 00000000..bd781ee0 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/recordList.json @@ -0,0 +1,46 @@ +{ + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "73c5ba6f-c654-4ff2-9c3d-86e2c769f950", + "label" : "Record List", + "regions" : [ { + "id" : "564c47f8-27e4-48c5-a9af-a4a1ba17151a", + "regionName" : "header", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "enableInlineEdit" : true, + "filterName" : "{!filterId}", + "layout" : "FULL", + "pageSize" : 25, + "scope" : "{!objectName}", + "showActionBar" : true, + "showChartsPanel" : true, + "showDisplay" : "showall", + "showFilterPanel" : true, + "showImageIcon" : true, + "showManualRefreshButton" : true, + "showObjectName" : true, + "showPinnedList" : true, + "showSearchBar" : true + }, + "componentName" : "forceCommunity:objectHome", + "id" : "52a3ce61-c26e-4495-91ab-c8640d4470d5", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "fe092c6b-1c38-4916-8505-33be0ea07190", + "regionName" : "content", + "type" : "region" + }, { + "id" : "ef183abc-54da-4b1e-9971-a6e4ebf30048", + "regionName" : "footer", + "type" : "region" + } ], + "themeLayoutType" : "Inner", + "type" : "view", + "viewType" : "list" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/register.json b/unpackaged/config/experiences/Summit_Events1/views/register.json new file mode 100644 index 00000000..f1f25eb3 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/register.json @@ -0,0 +1,85 @@ +{ + "appPageId" : "2b24547d-3389-457a-8a77-b03541a38acb", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "9b22e694-14fc-41b4-88e8-0428bdae1b26", + "label" : "Register", + "regions" : [ { + "components" : [ { + "componentAttributes" : { }, + "componentName" : "salesforceIdentity:communityLogo2", + "id" : "08ce8901-8465-4d1e-b988-81027d3614be", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "richTextValue" : "
Join the community to receive personalized information and customer support.
" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "b76a6de9-7cbb-44ca-974e-93b01a860454", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "confirmPasswordLabel" : "Confirm Password", + "emailLabel" : "Email", + "extraFieldsFieldSet" : "", + "firstnameLabel" : "First Name", + "includePasswordField" : false, + "lastnameLabel" : "Last Name", + "passwordLabel" : "Create Password", + "regConfirmUrl" : "./CheckPasswordResetEmail", + "startUrl" : "", + "submitButtonLabel" : "Sign Up" + }, + "componentName" : "salesforceIdentity:selfRegister2", + "id" : "f8a5290b-53f5-4923-be0e-4a578301d090", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "headerText" : "", + "showHeader" : false, + "useCommunityDomainSso" : true + }, + "componentName" : "salesforceIdentity:socialLogin2", + "id" : "4ea9df55-6c45-4e53-ac75-8a56553f4388", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { + "richTextValue" : "" + }, + "componentName" : "forceCommunity:richTextInline", + "id" : "9f312089-e32e-4d3f-bfe8-cf9c1c2f20c3", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "c61b0379-2994-4ba4-b2e4-ac53bb0af770", + "regionName" : "content", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "customHeadTags" : "", + "description" : "", + "title" : "Register" + }, + "componentName" : "forceCommunity:seoAssistant", + "id" : "ae98a0e0-9248-45dc-ac67-addef0138990", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "cd60bbfe-f098-43e6-a614-905afe73400d", + "regionName" : "sfdcHiddenRegion", + "type" : "region" + } ], + "themeLayoutType" : "Login", + "type" : "view", + "viewType" : "self-register" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/relatedRecordList.json b/unpackaged/config/experiences/Summit_Events1/views/relatedRecordList.json new file mode 100644 index 00000000..4f9bc6d7 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/relatedRecordList.json @@ -0,0 +1,39 @@ +{ + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "e5cf1a7c-aa42-49e1-9655-535a70956381", + "label" : "Related Record List", + "regions" : [ { + "id" : "973d792b-b52d-4727-a6e9-0ee5292a8f91", + "regionName" : "header", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "customTitle" : "", + "parentRecordId" : "{!recordId}", + "relatedListName" : "{!relationshipApiName}", + "showBreadCrumbs" : true, + "showCustomTitle" : false, + "showManualRefreshButton" : true, + "showRowNumbers" : true + }, + "componentName" : "forceCommunity:relatedList", + "id" : "a4db09bc-e9bd-4f6c-bd7a-ad64f406d7cb", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "1c20ac7d-14fb-4a1d-be55-88e978894869", + "regionName" : "content", + "type" : "region" + }, { + "id" : "42e7cc0d-9a09-4ccc-a783-57115b9862f2", + "regionName" : "footer", + "type" : "region" + } ], + "themeLayoutType" : "Inner", + "type" : "view", + "viewType" : "relatedlist" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/search.json b/unpackaged/config/experiences/Summit_Events1/views/search.json new file mode 100644 index 00000000..6b4adb9b --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/search.json @@ -0,0 +1,48 @@ +{ + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "ffe8cb37-5803-435f-b2b4-199327286351", + "label" : "Search", + "regions" : [ { + "id" : "7d836d09-1ecc-4058-87b9-d36cb489d624", + "regionName" : "header", + "type" : "region" + }, { + "components" : [ { + "componentAttributes" : { + "scopes" : [ { + "isPublic" : true, + "name" : "FeedPost" + }, { + "isPublic" : true, + "name" : "KnowledgeArticleVersion" + }, { + "isPublic" : false, + "name" : "Case" + }, { + "isPublic" : true, + "name" : "CollaborationGroup" + } ], + "searchResultFiltering" : true, + "searchTerm" : "{!term}", + "showTopResults" : true + }, + "componentName" : "forceCommunity:search", + "id" : "1a140b38-50d8-4d37-8162-6605a100ae15", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "ab8ce034-aa2d-4617-bd7c-118312e3e62f", + "regionName" : "content", + "type" : "region" + }, { + "id" : "3158d2b3-4bdf-478b-b877-4109792cd158", + "regionName" : "footer", + "type" : "region" + } ], + "themeLayoutType" : "Inner", + "type" : "view", + "viewType" : "global-search" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/serviceNotAvailable.json b/unpackaged/config/experiences/Summit_Events1/views/serviceNotAvailable.json new file mode 100644 index 00000000..c7f1ff97 --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/serviceNotAvailable.json @@ -0,0 +1,25 @@ +{ + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "2e77f5c3-830d-4614-9d26-346e94677720", + "label" : "Service Not Available", + "regions" : [ { + "components" : [ { + "componentAttributes" : { + "richTextValue" : "

Looks like the site is temporarily unavailable


Please try again in a bit.

" + }, + "componentName" : "forceCommunity:htmlBlock", + "id" : "3a9584c6-fb76-4ecc-8e10-2598d0c55484", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "7319fb9b-506d-4a78-bb5c-c0defd3b9b0d", + "regionName" : "content", + "type" : "region" + } ], + "themeLayoutType" : "ServiceNotAvailable", + "type" : "view", + "viewType" : "service-not-available" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/Summit_Events1/views/tooManyRequests.json b/unpackaged/config/experiences/Summit_Events1/views/tooManyRequests.json new file mode 100644 index 00000000..76be39ad --- /dev/null +++ b/unpackaged/config/experiences/Summit_Events1/views/tooManyRequests.json @@ -0,0 +1,32 @@ +{ + "appPageId" : "2f5e7442-a66b-4829-a210-a62eb1f72e96", + "componentName" : "siteforce:sldsOneColLayout", + "dataProviders" : [ ], + "id" : "aac27928-109b-4abe-b468-e11c995f08a7", + "label" : "Too Many Requests", + "regions" : [ { + "components" : [ { + "componentAttributes" : { + "richTextValue" : "

Looks like the site is experiencing higher than usual demand…

Don't go anywhere. We'll redirect you in a moment.

" + }, + "componentName" : "forceCommunity:htmlBlock", + "id" : "b44a89ec-abd1-4c8b-94da-3df392293e15", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + }, { + "componentAttributes" : { }, + "componentName" : "forceCommunity:autoRefresh", + "id" : "846742c8-5a10-4282-b98f-5123c5fac95b", + "renderPriority" : "NEUTRAL", + "renditionMap" : { }, + "type" : "component" + } ], + "id" : "0080d27f-c623-45f9-a2e4-84c058c7f3df", + "regionName" : "content", + "type" : "region" + } ], + "themeLayoutType" : "ServiceNotAvailable", + "type" : "view", + "viewType" : "too-many-requests" +} \ No newline at end of file diff --git a/unpackaged/config/experiences/package.xml b/unpackaged/config/experiences/package.xml new file mode 100644 index 00000000..fe02bd9b --- /dev/null +++ b/unpackaged/config/experiences/package.xml @@ -0,0 +1,8 @@ + + + + * + ExperienceBundle + + 56.0 + \ No newline at end of file diff --git a/unpackaged/main/default/networks/Summit Events.network-meta.xml b/unpackaged/config/networks/Summit Events.network-meta.xml similarity index 87% rename from unpackaged/main/default/networks/Summit Events.network-meta.xml rename to unpackaged/config/networks/Summit Events.network-meta.xml index 299237d0..9986a8dc 100644 --- a/unpackaged/main/default/networks/Summit Events.network-meta.xml +++ b/unpackaged/config/networks/Summit Events.network-meta.xml @@ -5,7 +5,7 @@ unfiled$public/CommunityChangePasswordEmailTemplate true - 16785863+tcdahlberg@users.noreply.github.com + 16785863+tcdahlberg@users.noreply.github.com.invalid Summit Events false true @@ -14,7 +14,7 @@ false true false - true + false false false false @@ -50,21 +50,25 @@ 0.0 + Summit_Events_Registrant admin + customer community login user Standard - Designer + Standard Designer - Designer - Designer + Standard + Standard + 16785863+tcdahlberg@users.noreply.github.com Summit_Events1 + customer community login user true true Summit_Events NotArchived - UnderConstruction + Live home Chatter diff --git a/unpackaged/config/site/sites/Summit_Events.site b/unpackaged/config/site/Summit_Events.site similarity index 65% rename from unpackaged/config/site/sites/Summit_Events.site rename to unpackaged/config/site/Summit_Events.site index ef0fd5cc..14e9a5cb 100644 --- a/unpackaged/config/site/sites/Summit_Events.site +++ b/unpackaged/config/site/Summit_Events.site @@ -1,26 +1,29 @@ true + false false false false false true false - Unauthorized + CommunitiesLogin BandwidthExceeded true + true SameOriginOnly true true FileNotFound Exception InMaintenance - InMaintenance - %%%NAMESPACE%%%SummitEvents + CommunitiesLanding Summit Events + false true - test-unoxuhgakkwq@example.com - SiteTemplate - Visualforce + CommunitiesSelfReg + test-ao2a5u00gclz@example.com + test-ao2a5u00gclz@example.com + ChatterNetwork diff --git a/unpackaged/config/site/package.xml b/unpackaged/config/site/package.xml index fa100a41..c13a80d3 100644 --- a/unpackaged/config/site/package.xml +++ b/unpackaged/config/site/package.xml @@ -1,7 +1,7 @@ - Summit_Events + * CustomSite 60.0 diff --git a/unpackaged/pre/roles/package.xml b/unpackaged/pre/roles/package.xml new file mode 100644 index 00000000..fbe460d0 --- /dev/null +++ b/unpackaged/pre/roles/package.xml @@ -0,0 +1,8 @@ + + + + Summit_Events_Community_Owner + Role + + 65.0 + \ No newline at end of file diff --git a/unpackaged/pre/roles/roles/Summit_Events_Community_Owner.role-meta.xml b/unpackaged/pre/roles/roles/Summit_Events_Community_Owner.role-meta.xml new file mode 100644 index 00000000..ed406df1 --- /dev/null +++ b/unpackaged/pre/roles/roles/Summit_Events_Community_Owner.role-meta.xml @@ -0,0 +1,8 @@ + + + Edit + Edit + false + Summit Events Community Owner + Edit + diff --git a/unpackaged/site/package.xml b/unpackaged/site/package.xml deleted file mode 100644 index e69de29b..00000000 From 0c3541c195f2f623b4718a223eb4072524038a84 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Fri, 21 Nov 2025 16:11:08 -0600 Subject: [PATCH 78/81] added bold to selected, attributed person account to logged in users and lead conversion --- cumulusci.yml | 2 +- .../default/classes/SummitEventsAfterLeadConversion.cls | 3 ++- .../main/default/classes/SummitEventsContactMatching.cls | 6 ++++++ .../main/default/classes/SummitEventsRegisterController.cls | 4 ++++ robot/SummitEventsApp/tests/create_reg2.robot | 2 +- sfdx-project.json | 2 +- 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/cumulusci.yml b/cumulusci.yml index 3cce83a3..f18fdfa8 100644 --- a/cumulusci.yml +++ b/cumulusci.yml @@ -4,7 +4,7 @@ project: package: name: Summit Events App namespace: summit - api_version: "61.0" + api_version: "64.0" source_format: sfdx git: default_branch: master diff --git a/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls b/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls index 744ab830..c5582cb2 100644 --- a/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls +++ b/force-app/main/default/classes/SummitEventsAfterLeadConversion.cls @@ -26,7 +26,8 @@ public without sharing class SummitEventsAfterLeadConversion { for (Summit_Events_Registration__c reg : registrations) { reg.Contact__c = leadMap.get(reg.Lead__c).ConvertedContactId; - reg.Matching_Log__c += '
Lead converted to Contact - ' + System.now(); + reg.Person_Account__c = leadMap.get(reg.Lead__c).ConvertedAccountId; + reg.Matching_Log__c += '
Lead converted to Contact/Account - ' + System.now(); } update registrations; diff --git a/force-app/main/default/classes/SummitEventsContactMatching.cls b/force-app/main/default/classes/SummitEventsContactMatching.cls index 5ba6122f..3e8dec65 100644 --- a/force-app/main/default/classes/SummitEventsContactMatching.cls +++ b/force-app/main/default/classes/SummitEventsContactMatching.cls @@ -411,6 +411,9 @@ public without sharing class SummitEventsContactMatching { l.FirstName = reg.Registrant_First_Name__c; l.LastName = reg.Registrant_Last_Name__c; l.Email = reg.Registrant_Email__c; + if(!SummitEventsShared.personAccountsEnabled()) { + l.Company = reg.Preferred_First_Name_Formatted__c; + } l.Company = reg.Preferred_First_Name_Formatted__c; l.Street = reg.Registrant_Street_1__c; l.City = reg.Registrant_City__c; @@ -558,6 +561,9 @@ public without sharing class SummitEventsContactMatching { matchRow += '
' + email + '
'; matchRow += '
' + zip + '
'; matchRow += '
' + lastModifiedString + '
'; + if(action.equalsIgnoreCase('selected')) { + action = '' + action + ''; + } matchRow += '
' + action + '
'; matchRow += ''; return matchRow; diff --git a/force-app/main/default/classes/SummitEventsRegisterController.cls b/force-app/main/default/classes/SummitEventsRegisterController.cls index 0a469de4..5775a79c 100644 --- a/force-app/main/default/classes/SummitEventsRegisterController.cls +++ b/force-app/main/default/classes/SummitEventsRegisterController.cls @@ -304,6 +304,10 @@ public with sharing class SummitEventsRegisterController { eventRegistration.Registrant_Mobile_Phone__c = userContact.MobilePhone; eventRegistration.Registrant_Date_of_Birth__c = userContact.Birthdate; eventRegistration.Contact__c = userContact.Id; + + if(SummitEventsShared.personAccountsEnabled()) { + eventRegistration.Person_Account__c = userContact.AccountId; + } if (userContact.Birthdate != null) { birthDateString = userContact.Birthdate.format(); diff --git a/robot/SummitEventsApp/tests/create_reg2.robot b/robot/SummitEventsApp/tests/create_reg2.robot index f8782885..f0845476 100644 --- a/robot/SummitEventsApp/tests/create_reg2.robot +++ b/robot/SummitEventsApp/tests/create_reg2.robot @@ -13,7 +13,7 @@ Create_SEA_reg #Query for the an SEA instance Id to test upon @{records}= Salesforce Query Summit_Events_Instance__c select=Id,Name ... Event__r.Name=Sample - Sample - 2024 Alumni Tours - ... Instance_Title__c= Cruise to Japan + ... Instance_Title__c= A Night of Giving Hope 2024 ... limit=1 FOR ${record} IN @{records} log Name: ${record['Name']} Id: ${record['Id']} diff --git a/sfdx-project.json b/sfdx-project.json index f97d93be..da0778c7 100644 --- a/sfdx-project.json +++ b/sfdx-project.json @@ -12,7 +12,7 @@ ], "namespace": "summit", "sfdcLoginUrl": "https://login.salesforce.com", - "sourceApiVersion": "61.0", + "sourceApiVersion": "64.0", "packageAliases": { "Summit Events App": "0Ho4P000000fxYiSAI", "Summit Events App@0.4.0-1": "04t4P000002T5ZCQA0", From 73f9ee7935d135d4fb181dc96540daf110fc0e67 Mon Sep 17 00:00:00 2001 From: Cori O'Brien <37851761+coriobriensfdo@users.noreply.github.com> Date: Tue, 25 Nov 2025 11:16:44 -0800 Subject: [PATCH 79/81] Update CODEOWNERS Description to use: Adding ECCN information per Salesforce OSPO request --- .github/CODEOWNERS | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b4c23232..f1550f4a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,7 +1,14 @@ - # Python -*.py @SalesforceFoundation/release-engineering-reviewers +*.py @SFDO-Community/sfdo-release-engineers # CumulusCI -/cumulusci.yml @SalesforceFoundation/release-engineering-reviewers -/tasks/ @SalesforceFoundation/release-engineering-reviewers +/cumulusci.yml @SFDO-Community/sfdo-release-engineers +/tasks/ @SFDO-Community/sfdo-release-engineers + +# Actions +/.github @SFDO-Community/sfdo-release-engineers +/scripts @SFDO-Community/sfdo-release-engineers + + +#ECCN:Open Source +#GUSINFO:Open Source,Open Source Workflow From 5ae9b7c0032f08ad556aee8311142da376bb3793 Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 2 Dec 2025 10:13:32 -0600 Subject: [PATCH 80/81] Create security requirements documentation for SEA Added documentation outlining the security requirements for Connected Apps and External Client Apps in relation to the Summit Events App. --- docs/connect-apps-statment.md | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/connect-apps-statment.md diff --git a/docs/connect-apps-statment.md b/docs/connect-apps-statment.md new file mode 100644 index 00000000..b3c39667 --- /dev/null +++ b/docs/connect-apps-statment.md @@ -0,0 +1,43 @@ +# Connected Apps and External Client Apps Security Requirements + +The Summit Events App (SEA) team would like to address the notification regarding the updated security requirements for Connected Apps and External Client Apps in Salesforce managed packages. + +Since we are an open-source solution our code base is available for review in our [GitHub repository](https://github.com/SFDO-Community/Summit-Events-App). Documentation on how to use the SEA can be found on our [documentation site](https://sfdo-community-sprints.github.io/summit-events-app-documentation/). + +After thoroughly reviewing our SEA solution and its codebase, we have determined that these requirements do not apply to our application for the following reasons: + +1. No Connected Apps or External Client Apps: SEA is a native Salesforce application built entirely with Apex, Visualforce, and Lightning Web Components. Our repository contains no Connected App or External Client App metadata or configurations that are distributed to customers. + +2. No OAuth Flows: The application does not implement any OAuth flows (device flow, implicit flow, username/password flow, or client-credentials flow). All authentication is handled through standard Salesforce user sessions and Communities (Experience Cloud) guest user access. + +3. Native Salesforce Architecture: The application operates entirely within the Salesforce platform using: + + - Apex classes and triggers + - Visualforce pages + - Lightning Web Components + - Experience Cloud sites for public event registration + - Standard Salesforce permission sets and sharing rules + +4. No External Integrations: There are no backend services, external APIs, middleware, or third-party integrations that would require Connected App credentials, OAuth tokens, or secret management beyond Salesforce's native security model. + +5. No Packaged Secrets: The application does not store or distribute any client keys, secrets, JWT private keys, or OAuth credentials in Custom Settings, Custom Metadata, or any other form. + +6. Public REST API: Our application includes a public REST API (/services/apexrest/summit/summiteventsfeed) that provides read-only access to event instance information. This endpoint: + + - Does not require OAuth or Connected App authentication + - Uses standard Salesforce site guest user permissions + - Returns only publicly available event data already accessible through the registration site + - Does not expose any sensitive customer data or secrets + +7. Cookie Encryption Key: The application stores an encryption key in Custom Settings for securing registration IDs in browser cookies. This key: + + - Is used solely for client-side cookie encryption/decryption within the same Salesforce org + - Is not an OAuth secret, JWT private key, or Connected App credential + - Does not facilitate authentication or authorization between systems + - Is managed through standard Salesforce Custom Settings with field-level security + +SEA uses deployment tooling (CumulusCI) that is used solely for development, testing, and package deployment automation and does not create any Connected Apps that are distributed to customers. + +We will continue to monitor our application architecture and will immediately address these requirements should we introduce any Connected Apps or External Client Apps in future releases. + +Please let us know if you need any additional information regarding our application's architecture. From fd59bd52e8caaf00893b51a681102b14e7ad218a Mon Sep 17 00:00:00 2001 From: Thaddaeus Dahlberg <16785863+tcdahlberg@users.noreply.github.com> Date: Tue, 9 Dec 2025 12:27:31 -0600 Subject: [PATCH 81/81] fixed cumulusci.yml to be backwards compatible for external projects --- docs/connected-apps-statement.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/connected-apps-statement.md diff --git a/docs/connected-apps-statement.md b/docs/connected-apps-statement.md new file mode 100644 index 00000000..e69de29b