APEX Code:
public Class AgencyNameService{
Set<String> updatedAgencyIds = new Set<String> ();
List<Agency_Name__c> updatedagencyList = new List<Agency_Name__c>();
List<Agency_Name__c> agencylistRec = new List<Agency_Name__c>();
Agency_Name__c agencyName = new Agency_Name__c();
public AgencyNameService(Agency_Name__c newAgencyName){
agencyName = newAgencyName;
}
public AgencyNameService(){
}
public void getAgencyNameList(){
//Empty check added to unnecessary avoid query call
if (agencylistRec.isEmpty()){
//get all the list of agency names
//Modified the below query to exclude Alias Names
agencylistRec = [Select Name, Agency_Name_Type__c,Effective_Date__c,Is_Display_Name__c,New_Agency_Name__c
from Agency_Name__c where Agency__c =: agencyName.Agency__c and Agency_Name_Type__c <> 'Alias'];
}
}
//Note:Assuming there is no bulk insertion of Agency Name records
/*Unchecking the previous display name after
new agency name is selected as display name */
public void UncheckAllrecords(){
getAgencyNameList();
for(Agency_Name__c agencyuse : agencylistRec){
System.debug('kanhu ** '+agencyName.ID +' - '+ agencyuse.ID);
if(agencyuse.Is_Display_Name__c && agencyName.ID != agencyuse.ID){
agencyuse.Is_Display_Name__c = false;
system.debug('uncheck:'+agencyuse.Is_Display_Name__c);
Update agencyuse;
}
}
}
/* Checking if no Agency name is Display name and making
Legal Name as Default Display Name */
public void CheckLegalrecord(){
system.debug('checklegal');
Set<String> AgencyIds = new Set<String> ();
Agency_Name__c agencynameLegal;
getAgencyNameList();
for(Agency_Name__c agencyuse : agencylistRec){
if(agencyName.Agency__r.RecordtypeName__c != System.Label.Agency_Record_Type_Nationwide){
if(agencyuse.Is_Display_Name__c)
AgencyIds.add(agencyuse.ID);
if(agencyuse.Agency_Name_Type__c.equals(System.label.AGENCY_NAME_TYPE_LEGAL))
agencynameLegal = agencyuse;
}
}
if(AgencyIds.isEmpty() && agencynameLegal != null){
agencynameLegal.Is_Display_Name__c = true;
Update agencynameLegal;
}
}
/**Method to change the previous legal name as display name,
when a new agency name is created as legal */
public void ChangePreviousLegaltoDBA(){
getAgencyNameList();
for(Agency_Name__c agencyuse : agencylistRec){
if(agencyName.Agency_Name_Type__c == System.Label.Agency_Name_Type_Legal && agencyName.ID != agencyuse.ID){
agencyuse.Agency_Name_Type__c = System.Label.Agency_Name_Type_DBA;
update agencyuse;
}
}
}
/* Method to update the agency name used in processing code whenever
there is change in the value of it. */
public void updateProcessingCodeName(){
List<Processing_Code__c> PCagencyNameList = [select Processing_Code_Name_Val__c,Processing_Code_Name__c FROM Processing_Code__c WHERE Processing_Code_Name__c = : agencyName.ID];
for(Processing_Code__c PCRec : PCagencyNameList){
PCRec.Processing_Code_Name_Val__c = agencyName.Agency_Name_Type__c + ' - ' + agencyName.Name;
}
Update PCagencyNameList;
}
/*Agency Name changes for Bulk updates to Account and PC*/
public void agencyNameUpdateAccPC(List<Agency_Name__c> nameList){
Map<ID, String> PCNameIDMap = new Map<ID, String>();
Map<ID, String> AgencyNameMap = new Map<ID, String>();
Map<ID, String> AgencyLegalNameMap = new Map<ID, String>();
Set<ID> AccIds = new Set<ID>();
for(Agency_Name__c name_obj: nameList) {
if(name_obj.Is_Display_Name__c) {
AgencyNameMap.put(name_obj.agency__c, name_obj.name);
AccIds.add(name_obj.agency__c);
}
if(name_obj.agency_name_type__c == System.Label.Agency_Name_Type_Legal) {
AgencyLegalNameMap.put(name_obj.agency__c, name_obj.name);
AccIds.add(name_obj.agency__c);
}
PCNameIDMap.put(name_obj.id,name_obj.Agency_Name_Type__c + ' - ' + name_obj.name);
}
if(!AgencyNameMap.isEmpty() || !AgencyLegalNameMap.isEmpty()) {
List<Account> AgencyList = new List<Account>();
for(Account acc : [SELECT id, name, R_Agency_Legal_Name__c from Account where id IN :AccIds]) {
if(acc.name != AgencyNameMap.get(acc.id) && AgencyNameMap.get(acc.id)!=null){
System.debug('kanhu ** '+AgencyNameMap.get(acc.id));
acc.name = AgencyNameMap.get(acc.id);
}
if(AgencyLegalNameMap.get(acc.id) <> null && acc.R_Agency_Legal_Name__c != AgencyLegalNameMap.get(acc.id)){
acc.R_Agency_Legal_Name__c = AgencyLegalNameMap.get(acc.id);
}
AgencyList.add(acc);
}
if(!AgencyList.isEmpty())
database.update(AgencyList,false);
}
List<Processing_Code__c> PCList = new List<Processing_Code__c>();
for(Processing_Code__c pc_obj : [select Processing_Code_Name_Val__c,Processing_Code_Name__c FROM Processing_Code__c WHERE Processing_Code_Name__c IN :PCNameIDMap.keySet()]) {
if(pc_obj.Processing_Code_Name_Val__c != PCNameIDMap.get(pc_obj.Processing_Code_Name__c)){
pc_obj.Processing_Code_Name_Val__c = PCNameIDMap.get(pc_obj.Processing_Code_Name__c);
PCList.add(pc_obj);
}
}
if(!PCList.isEmpty()) {
database.update(PCList,false);
}
}
/*Check for duplicates before inserting agency name*/
public boolean agencyNameDupCheck(List<Agency_Name__c> nameList){
Map<ID,List<Agency_Name__c>> agencyNamesMap = new Map<ID,List<Agency_Name__c>>();
Set<ID> agencyIDSet = new Set<ID>();
for(Agency_Name__c nameRec : nameList){
agencyIDSet.add(nameRec.Agency__c);
}
for(Agency_Name__c nameRec : [SELECT ID,Agency__c, Name, Is_Display_Name__c, Agency_Name_Type__c,Effective_Date__c
FROM Agency_Name__c WHERE Agency__c IN :agencyIDSet]){
if(agencyNamesMap.containskey(nameRec.Agency__c)){
List<Agency_Name__c> childNames = agencyNamesMap.get(nameRec.Agency__c);
childNames.add(nameRec);
agencyNamesMap.put(nameRec.Agency__c,childNames);
}
else{
List<Agency_Name__c> childNames = new List<Agency_Name__c>();
childNames.add(nameRec);
agencyNamesMap.put(nameRec.Agency__c,childNames);
}
}
if(!agencyNamesMap.isEmpty()) {
for(Agency_Name__c nameRec : nameList){
for(Agency_Name__c childName : agencyNamesMap.get(nameRec.Agency__c)){
if(nameRec.ID != childName.ID && nameRec.Name == childName.Name){
return true;
}
}
}
}
return false;
}
}
Trigger:
trigger AgencyNameAfterTrigger on Agency_Name__c (after insert, after update,after delete) {
FFIC_App_Settings__c s = FFIC_App_Settings__c.getInstance(UserInfo.GetUserID());
if( null != s && s.Disable_Triggers__c ) return;
/*
Adding the below code snippet for Testing Outbound Messaging
*/
COBM.from_trigger = 'AgencyNameAfterTrigger';
COBM.add_stack();
if(Trigger.IsDelete == False && !COBM.convert_prospect_to_location_flag && !COBM.create_new_account_flag){
AgencyNameService agencyname = new AgencyNameService(Trigger.New[0]);
if(trigger.new.size() == 1) {
//To uncheck old display name when new agency name is selected as display name
//Calling the class to uncheck the previous Agency Name where the Display Name check box is checked
if(Trigger.isInsert || (Trigger.isUpdate && Trigger.oldMap.get(Trigger.New[0].ID).Is_Display_Name__c != Trigger.New[0].Is_Display_Name__c)){
system.debug('display::'+Trigger.New[0].Is_Display_Name__c);
if(Trigger.New[0].Is_Display_Name__c)
agencyname.UncheckAllrecords(); //Class to Uncheck previous display name
else
agencyname.CheckLegalrecord(); //Class to Make Legal name as default display name
}
TriggerRecursionHelper.setAlreadyCreated();
// Moved query inside display name check to avoid unnecessary query
if(trigger.new[0].Is_Display_Name__c || Trigger.new[0].agency_name_type__c == System.Label.Agency_Name_Type_Legal){
Account accObj = [SELECT ID, Name, R_Agency_Legal_Name__c FROM Account WHERE ID = :trigger.new[0].Agency__c];
if(trigger.new[0].Is_Display_Name__c && accObj.Name != trigger.new[0].Name){
accObj.Name = trigger.new[0].Name;
}
system.debug('legel1::'+Trigger.new[0].agency_name_type__c);
if(Trigger.new[0].agency_name_type__c == System.Label.Agency_Name_Type_Legal) {
accObj.R_Agency_Legal_Name__c = trigger.new[0].Name;
}
update accObj;
}
TriggerRecursionHelper.unCheckCreated();
if(trigger.New[0].Agency_Name_Type__c == System.Label.Agency_Name_Type_Legal
&& (trigger.isInsert || (trigger.isupdate && Trigger.oldMap.get(Trigger.New[0].ID).Agency_Name_Type__c != Trigger.New[0].Agency_Name_Type__c )))
agencyname.ChangePreviousLegaltoDBA();
}
// For Bulk updates to Account and PC
if(Trigger.isUpdate) {
System.debug(trigger.New[0].Agency_Name_Type__c+'** Kanhu **'+Trigger.new[0].name+' ** '+trigger.new[0].Is_Display_Name__c);
agencyname.agencyNameUpdateAccPC(Trigger.new);
}
}
/*
Adding the below code snippet for Outbound Messaging - Agency Name
*/
COBM.from_trigger = 'AgencyNameAfterTrigger';
COBM.parent_api_name = 'agency__c';
Set<String> name_acc_ids = new Set<String>();
if(Trigger.isInsert || Trigger.isUpdate) {
for(Agency_Name__c name_obj: Trigger.new) {
if(!COBM.s_acc_map.keyset().contains(name_obj.agency__c)) {
name_acc_ids.add(name_obj.agency__c);
}
}
if(name_acc_ids.size() > 0){
for(Account acc_obj: [SELECT id, name, location_code__c, nationwide_code_2__c, active_status_effective_date__c, status__c, lastmodifieddate, recordtypename__c, personal_effective_status__c, commercial_effective_status__c, special_risk_effective_status__c, entertainment_effective_status__c, obsolete_effective_status__c, billingstate, Hierarchy_Type__c from Account where id IN :name_acc_ids]) {
// System.debug('Adding Name Parent - Agency to Static Map' + acc_obj.id);
COBM.s_acc_map.put(acc_obj.id, acc_obj);
}
}
COBM cobm_obj = new COBM(Trigger.new[0].getsObjectType(),Trigger.new, Trigger.old);
} else {
COBM cobm_obj = new COBM(Trigger.old[0].getsObjectType(),Trigger.old, 'DELETE');
}
}