Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions force-app/main/default/classes/MembershipContactRoleHandler.cls
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Created by MHumpolec on 6/3/2021.
*/

public with sharing class MembershipContactRoleHandler extends TriggerHandler{

private Map<Id, Membership_Contact_Role__c> touchedRoles;
private Map<Id, Membership_Contact_Role__c> oldRolesMap;
@TestVisible private ConfigurationService cs;

public MembershipContactRoleHandler(){
cs = new ConfigurationService();
this.touchedRoles = (Map<Id, Membership_Contact_Role__c>) Trigger.newMap;
if (Trigger.oldMap != null) {
this.oldRolesMap = (Map<Id, Membership_Contact_Role__c>) Trigger.oldMap;
} else {
this.oldRolesMap = new Map<Id, Membership_Contact_Role__c>();
}
}

public override void afterUpdate(){
managePrimaryContactRole();
}

/**
* If Contact Role has been marked as primary put the contact to the primary contact on membership - will roll down
*/

private void managePrimaryContactRole (){
List<Membership__c> membershipsToUpdate = new List<Membership__c>();

for(Id touchedRole : this.touchedRoles.keySet()) {
Boolean newPrim = touchedRoles.get(touchedRole).Is_Primary__c;
Boolean oldPrim = oldRolesMap.containsKey(touchedRole) ? oldRolesMap.get(touchedRole).Is_Primary__c : false;
if (oldPrim == false && newPrim == true) {
Membership__c m = new Membership__c( Id = touchedRoles.get(touchedRole).Membership__c, Primary_Contact__c = touchedRoles.get(touchedRole).Contact__c);
membershipsToUpdate.add( m);
}
}
update membershipsToUpdate;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>52.0</apiVersion>
<status>Active</status>
</ApexClass>
Original file line number Diff line number Diff line change
Expand Up @@ -160,4 +160,83 @@ private without sharing class MembershipContactRoleService_TEST {
];
System.assertEquals(0, mcrs.size(), 'expected no Roles');
}
}

@isTest
private static void testAddSecondPrimaryContact() {
Test.startTest();
List<Contact> cs = new List<Contact>{
new Contact(
AccountId = [SELECT Id FROM Account WHERE Name = 'First Account'].Id,
FirstName = 'Molly',
LastName = 'Member'
),
new Contact(
AccountId = [SELECT Id FROM Account WHERE Name = 'First Account'].Id,
FirstName = 'Mikaela',
LastName = 'Member'
)
};
insert cs;

Membership__c m = new Membership__c( Id = [SELECT Id FROM Membership__c WHERE Name = 'First Membership'].Id,
Primary_Contact__c = cs[0].Id);
update m;

List<Membership_Contact_Role__c> mcrs = [
SELECT Id, Is_Primary__c, Name, Start_Date__c, Role__c, Membership__c, Contact__c
FROM Membership_Contact_Role__c
WHERE Membership__c = :m.Id AND Is_Primary__c = TRUE
];
System.assertEquals(1, mcrs.size(), 'expected 1 Primary Role');

m = new Membership__c( Id = [SELECT Id FROM Membership__c WHERE Name = 'First Membership'].Id,
Primary_Contact__c = cs[1].Id);
update m;

mcrs = [
SELECT Id, Is_Primary__c, Name, Start_Date__c, Role__c, Membership__c, Contact__c
FROM Membership_Contact_Role__c
WHERE Membership__c = :m.Id AND Is_Primary__c = TRUE
];
System.assertEquals(1, mcrs.size(), 'still expected only 1 Primary Role');
}

@isTest
private static void testMakeSecondRolePrimary() {
List<Contact> cs = new List<Contact>{
new Contact(
AccountId = [SELECT Id FROM Account WHERE Name = 'First Account'].Id,
FirstName = 'Molly',
LastName = 'Member'
),
new Contact(
AccountId = [SELECT Id FROM Account WHERE Name = 'First Account'].Id,
FirstName = 'Mikaela',
LastName = 'Member'
)
};
insert cs;

Membership__c m = new Membership__c( Id = [SELECT Id FROM Membership__c WHERE Name = 'First Membership'].Id,
Primary_Contact__c = cs[0].Id);
update m;

Test.startTest();
List<Membership_Contact_Role__c> mcrs = [
SELECT Id, Is_Primary__c, Name, Start_Date__c, Role__c, Membership__c, Contact__c
FROM Membership_Contact_Role__c
WHERE Membership__c = :m.Id AND Is_Primary__c = TRUE
];
System.assertEquals(1, mcrs.size(), 'expected 1 Primary Role');

Membership_Contact_Role__c mcr = new Membership_Contact_Role__c(Id = [SELECT Id FROM Membership_Contact_Role__c WHERE Membership__c = :m.Id AND Contact__c = :cs[1].Id].Id, Is_Primary__c = TRUE);
update mcr;

mcrs = [
SELECT Id, Is_Primary__c, Name, Start_Date__c, Role__c, Membership__c, Contact__c
FROM Membership_Contact_Role__c
WHERE Membership__c = :m.Id AND Is_Primary__c = TRUE
];
System.assertEquals(1, mcrs.size(), 'still expected only 1 Primary Role');
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/**
* Created by MHumpolec on 6/30/2021.
*/

trigger MembershipContactRoleTrigger on Membership_Contact_Role__c (before insert, before update, before delete,
after insert, after update, after delete, after undelete) {
new MembershipContactRoleHandler().run();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexTrigger xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>52.0</apiVersion>
<status>Active</status>
</ApexTrigger>