JustPaste.it

global class EmailPublisherLoader implements QuickAction.QuickActionDefaultsHandler {
// Empty constructor
global EmailPublisherLoader() { }

// The main interface method
global void onInitDefaults(QuickAction.QuickActionDefaults[] defaults) {
QuickAction.SendEmailQuickActionDefaults sendEmailDefaults = null;

// Check if the quick action is the standard Case Feed send email action
for (Integer j = 0; j < defaults.size(); j++) {
if (defaults.get(j) instanceof QuickAction.SendEmailQuickActionDefaults &&
defaults.get(j).getTargetSObject().getSObjectType() ==
EmailMessage.sObjectType &&
defaults.get(j).getActionName().equals('Case.Email') &&
defaults.get(j).getActionType().equals('Email')) {
sendEmailDefaults =
(QuickAction.SendEmailQuickActionDefaults)defaults.get(j);
break;
}
}

if (sendEmailDefaults != null) {
Case c = [SELECT Status, contact.Email, Additional_To__c, Additional_CC__c, Additional_BCC__c, RecordType.name FROM Case WHERE Id=:sendEmailDefaults.getContextId()];
EmailMessage emailMessage = (EmailMessage)sendEmailDefaults.getTargetSObject();
//set TO address
if (c.contact.Email == c.Additional_To__c){
emailMessage.toAddress = (c.contact.Email);
}
else{
if (c.Additional_To__c != null){
emailMessage.toAddress = (c.contact.Email+' '+c.Additional_To__c);
}
}
//set CC address
emailMessage.ccAddress = (c.Additional_CC__c);
//set BCC address
emailMessage.bccAddress = (c.Additional_BCC__c);

//if In Reply To Id field is null we know the interface is called on page load
if (sendEmailDefaults.getInReplyToId() == null) {
Integer emailCount = [SELECT count() FROM EmailMessage WHERE ParentId=:sendEmailDefaults.getContextId()];
if (emailCount!= null && emailCount > 0) {
if (c.recordtype.name == 'Consumer'){
sendEmailDefaults.setTemplateId(getTemplateIdHelper('Default_Consumer_Email'));
}
else {
sendEmailDefaults.setTemplateId(getTemplateIdHelper('Default_Enterprise_Email'));
}
}
if (c.recordtype.name == 'Consumer'){
sendEmailDefaults.setTemplateId(getTemplateIdHelper('Default_Consumer_Email'));
}
else {
sendEmailDefaults.setTemplateId(getTemplateIdHelper('Default_Enterprise_Email'));
}
}
//handle 'Reply' and 'ReplyAll'
if (c.recordtype.name == 'Consumer'){
sendEmailDefaults.setTemplateId(getTemplateIdHelper('Default_Consumer_Email'));
sendEmailDefaults.setInsertTemplateBody(false);
}
else{
sendEmailDefaults.setTemplateId(getTemplateIdHelper('Default_Enterprise_Email'));
sendEmailDefaults.setInsertTemplateBody(false);
}

}
}

private Id getTemplateIdHelper(String templateApiName) {
Id templateId = null;
try {
templateId = [select id, name from EmailTemplate
where developername = : templateApiName].id;
} catch (Exception e) {
system.debug('Unble to locate EmailTemplate using name: ' +
templateApiName + ' refer to Setup | Communications Templates '
+ templateApiName);
}
return templateId;
}
}