Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class RequalificationEmailHelper {
- public static void sendEmailsAndGenerateCases(List<Opportunity> records) {
- Map<Id, Opportunity> oppsToCheck = new Map<Id, Opportunity>();
- // fetch the email template Ids
- List<EmailTemplate> requalificationTemplates = new List<EmailTemplate>();
- requalificationTemplates = [Select Id, DeveloperName FROM EmailTemplate WHERE DeveloperName = 'Requalification_Reminder_Email_DE' OR DeveloperName = 'Requalification_Email_DE' OR DeveloperName = 'Requalification_Reminder_Email_FR' OR DeveloperName = 'Requalification_Email_FR' OR DeveloperName = 'Requalification_Reminder_Email_SE' OR DeveloperName = 'Requalification_Email_SE'];
- String requalificationTemplateFR = '';
- String requalificationTemplateDE = '';
- String requalificationTemplateSE = '';
- String requalificationReminderTemplateFR = '';
- String requalificationReminderTemplateDE = '';
- String requalificationReminderTemplateSE = '';
- for(EmailTemplate template : requalificationTemplates){
- if(template.DeveloperName == 'Requalification_Email_FR')
- requalificationTemplateFR = template.Id;
- else if (template.DeveloperName == 'Requalification_Email_DE')
- requalificationTemplateDE = template.Id;
- else if (template.DeveloperName == 'Requalification_Email_SE')
- requalificationTemplateSE = template.Id;
- else if (template.DeveloperName == 'Requalification_Reminder_Email_FR')
- requalificationReminderTemplateFR = template.Id;
- else if (template.DeveloperName == 'Requalification_Reminder_Email_DE')
- requalificationReminderTemplateDE = template.Id;
- else if (template.DeveloperName == 'Requalification_Reminder_Email_SE')
- requalificationReminderTemplateSE = template.Id;
- }
- // end - fetch email template ids
- for (Opportunity o : records) {
- oppsToCheck.put(o.id, o);
- }
- Boolean isonsandbox = runningInASandbox();
- Map<Opportunity, String> oppsToSendEmailsWith = new Map<Opportunity, String>();
- List<Opportunity> oppsToCreateCasesOn = new List<Opportunity>();
- for (Opportunity o : oppsToCheck.values()) {
- Integer daysBetween = (o.bookingDate__c).daysBetween(o.MovingoutDate__c);
- Integer daysFromToday = (System.today()).daysBetween(o.MovingoutDate__c);
- if (daysBetween > 21) {
- //check if email was sent
- if (o.Requal_Email_Sent_On__c != null) {
- //check if response was received - if it was nothing happens
- if (o.Requal_Email_Response_received__c) {
- //stop
- } else {
- if (daysFromToday == 17) {
- //send email again
- oppsToSendEmailsWith.put(o, 'reminder');
- }
- if (daysFromToday == 15) {
- //create case
- oppsToCreateCasesOn.add(o);
- }
- }
- } else {
- //send an email since it wasnt send already - 21 days before the move
- if(daysFromToday == 21)
- oppsToSendEmailsWith.put(o, 'requal');
- }
- } else if (daysBetween <= 21 && daysbetween >= 17) {
- //check if email was sent
- if (o.Requal_Email_Sent_On__c != null) {
- //check if response was received - if it was nothing happens
- if (o.Requal_Email_Response_received__c) {
- //stop
- } else {
- if (daysFromToday == 14) {
- //create case
- oppsToCreateCasesOn.add(o);
- }
- }
- } else {
- //send an email since it wasnt send already- 16 days before the move
- if(daysFromToday == 16)
- oppsToSendEmailsWith.put(o, 'requal');
- }
- } else if (daysBetween < 17) {
- //check if email was sent
- if (o.Requal_Email_Sent_On__c != null) {
- //check if response was received - if it was nothing happens
- if (o.Requal_Email_Response_received__c) {
- //stop
- } else {
- if ((Date.valueOf(o.Requal_Email_Sent_On__c)).daysBetween(system.today()) == 2) {
- //create case
- oppsToCreateCasesOn.add(o);
- }
- }
- } else {
- //send an email since it wasnt send already - 1 day after booking
- if((o.BookingDate__c).daysBetween(system.today()) == 1)
- oppsToSendEmailsWith.put(o, 'requal');
- }
- }
- }
- //method to send emails and update last email sent field on opportunities
- if (oppsToSendEmailsWith.size() > 0) {
- List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
- OrgWideEmailAddress[] owea;
- owea = [select Id, Address from OrgWideEmailAddress where Address = 'service@movinga.de' OR Address = 'service.client@movinga.fr' OR Address = 'service@movinga.se'];
- List<Opportunity> oppsToUpdate = new List<Opportunity>();
- for (Opportunity opp : oppsToSendEmailsWith.keySet()) {
- Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
- mail.setTargetObjectId(opp.PersonContactIdAuto__c);
- mail.setWhatId(opp.Id);
- mail.setToAddresses(new List<String>{opp.email__c});
- mail.setSaveAsActivity(true);
- opp.LastRESTUpdate__c = System.now().addYears(-10);
- if (opp.RecordTypeName__c == 'DE Opportunity' || opp.RecordTypeName__c == 'DE Baggage Opportunity') {
- mail.setReplyTo('service@movinga.de');
- //mail.setTemplateId(requalificationTemplateDE);
- if (owea.get(0).Address == 'service@movinga.de') {
- mail.setOrgWideEmailAddressId(owea.get(0).Id);
- } else if (owea.get(1).Address == 'service@movinga.de') {
- mail.setOrgWideEmailAddressId(owea.get(1).Id);
- } else if (owea.get(2).Address == 'service@movinga.de') {
- mail.setOrgWideEmailAddressId(owea.get(2).Id);
- }
- } else if (opp.RecordTypeName__c == 'FR Opportunity' || opp.RecordTypeName__c == 'FR Baggage Opportunity' || opp.RecordTypeName__c == 'White Label') {
- mail.setReplyTo('service.client@movinga.fr');
- //mail.setTemplateId(requalificationTemplateFR);
- if (owea.get(0).Address == 'service.client@movinga.fr') {
- mail.setOrgWideEmailAddressId(owea.get(0).Id);
- } else if (owea.get(1).Address == 'service.client@movinga.fr') {
- mail.setOrgWideEmailAddressId(owea.get(1).Id);
- } else if (owea.get(2).Address == 'service.client@movinga.fr') {
- mail.setOrgWideEmailAddressId(owea.get(2).Id);
- }
- } else if (opp.RecordTypeName__c == 'SE Opportunity') {
- mail.setReplyTo('service@movinga.se');
- if (owea.get(0).Address == 'service@movinga.se') {
- mail.setOrgWideEmailAddressId(owea.get(0).Id);
- } else if (owea.get(1).Address == 'service@movinga.se') {
- mail.setOrgWideEmailAddressId(owea.get(1).Id);
- } else if (owea.get(2).Address == 'service@movinga.se') {
- mail.setOrgWideEmailAddressId(owea.get(2).Id);
- }
- }
- else continue;
- if (opp.RecordTypeName__c == 'DE Opportunity' || opp.RecordTypeName__c == 'DE Baggage Opportunity'){
- if (oppsToSendEmailsWith.get(opp) == 'requal') mail.setTemplateId(requalificationTemplateDE);
- else mail.setTemplateId(requalificationReminderTemplateDE);
- }
- else if(opp.RecordTypeName__c == 'FR Opportunity' || opp.RecordTypeName__c == 'FR Baggage Opportunity' || opp.RecordTypeName__c == 'White Label'){
- if (oppsToSendEmailsWith.get(opp) == 'requal') mail.setTemplateId(requalificationTemplateFR);
- else mail.setTemplateId(requalificationReminderTemplateFR);
- }
- else if(opp.RecordTypeName__c == 'SE Opportunity'){
- if (oppsToSendEmailsWith.get(opp) == 'requal') mail.setTemplateId(requalificationTemplateSE);
- else mail.setTemplateId(requalificationReminderTemplateSE);
- }
- Opportunity oppty = new Opportunity();
- oppty.id = opp.id;
- oppty.Requal_Email_Sent_On__c = System.now();
- oppty.Skip_Validation_New__c = Decimal.valueOf(String.valueOf(System.now()).replace('-','').replace(':','').replace(' ',''));
- oppsToUpdate.add(oppty);
- mails.add(mail);
- }
- try {
- Messaging.sendEmail(mails);
- update oppsToUpdate;
- } catch (Exception e) {
- System.debug('Error happened while sending emails/updating opportunities: ' + e.getMessage());
- }
- }
- //method to create cases
- if (oppsToCreateCasesOn.size() > 0) {
- List<Case> casesToInsert = new List<Case>();
- //Fetching the assignment rules on case
- AssignmentRule AR = new AssignmentRule();
- AR = [select id from AssignmentRule where SobjectType = 'Case' and Active = true limit 1];
- //Creating the DMLOptions for "Assign using active assignment rules" checkbox
- Database.DMLOptions dmlOpts = new Database.DMLOptions();
- dmlOpts.assignmentRuleHeader.assignmentRuleId= AR.id;
- for (Opportunity opp : oppsToCreateCasesOn) {
- Case c = new Case();
- c.Opportunity__c = opp.id;
- c.Issue_Category_1__c = 'Before move';
- c.Issue_Category_2__c = 'Order Validation';
- c.Subject = 'Requalification';
- //Setting the DMLOption on Case instance
- c.setOptions(dmlOpts);
- if (opp.RecordTypeName__c == 'DE Opportunity' || opp.RecordTypeName__c == 'DE Baggage Opportunity')
- c.Origin = 'DACH Customer Service';
- else if (opp.RecordTypeName__c == 'FR Opportunity' || opp.RecordTypeName__c == 'FR Baggage Opportunity' || opp.RecordTypeName__c == 'White Label')
- c.Origin = 'FR Customer Service';
- else if (opp.RecordTypeName__c == 'SE Opportunity')
- c.Origin = 'SE Customer Service';
- else continue;
- casesToInsert.add(c);
- }
- if (casesToInsert.size() > 0) {
- insert casesToInsert;
- }
- }
- }
- public static Boolean runningInASandbox() {
- return [SELECT Id, IsSandbox FROM Organization LIMIT 1].IsSandbox;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement