Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
510
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.87 KB | None | 0 0
  1. public class RequalificationEmailHelper {
  2.  
  3. public static void sendEmailsAndGenerateCases(List<Opportunity> records) {
  4. Map<Id, Opportunity> oppsToCheck = new Map<Id, Opportunity>();
  5.  
  6. // fetch the email template Ids
  7. List<EmailTemplate> requalificationTemplates = new List<EmailTemplate>();
  8. 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'];
  9. String requalificationTemplateFR = '';
  10. String requalificationTemplateDE = '';
  11. String requalificationTemplateSE = '';
  12. String requalificationReminderTemplateFR = '';
  13. String requalificationReminderTemplateDE = '';
  14. String requalificationReminderTemplateSE = '';
  15. for(EmailTemplate template : requalificationTemplates){
  16. if(template.DeveloperName == 'Requalification_Email_FR')
  17. requalificationTemplateFR = template.Id;
  18. else if (template.DeveloperName == 'Requalification_Email_DE')
  19. requalificationTemplateDE = template.Id;
  20. else if (template.DeveloperName == 'Requalification_Email_SE')
  21. requalificationTemplateSE = template.Id;
  22. else if (template.DeveloperName == 'Requalification_Reminder_Email_FR')
  23. requalificationReminderTemplateFR = template.Id;
  24. else if (template.DeveloperName == 'Requalification_Reminder_Email_DE')
  25. requalificationReminderTemplateDE = template.Id;
  26. else if (template.DeveloperName == 'Requalification_Reminder_Email_SE')
  27. requalificationReminderTemplateSE = template.Id;
  28. }
  29. // end - fetch email template ids
  30.  
  31. for (Opportunity o : records) {
  32. oppsToCheck.put(o.id, o);
  33. }
  34.  
  35. Boolean isonsandbox = runningInASandbox();
  36. Map<Opportunity, String> oppsToSendEmailsWith = new Map<Opportunity, String>();
  37. List<Opportunity> oppsToCreateCasesOn = new List<Opportunity>();
  38.  
  39.  
  40. for (Opportunity o : oppsToCheck.values()) {
  41. Integer daysBetween = (o.bookingDate__c).daysBetween(o.MovingoutDate__c);
  42. Integer daysFromToday = (System.today()).daysBetween(o.MovingoutDate__c);
  43. if (daysBetween > 21) {
  44. //check if email was sent
  45. if (o.Requal_Email_Sent_On__c != null) {
  46. //check if response was received - if it was nothing happens
  47. if (o.Requal_Email_Response_received__c) {
  48. //stop
  49. } else {
  50. if (daysFromToday == 17) {
  51. //send email again
  52. oppsToSendEmailsWith.put(o, 'reminder');
  53. }
  54. if (daysFromToday == 15) {
  55. //create case
  56. oppsToCreateCasesOn.add(o);
  57. }
  58. }
  59. } else {
  60. //send an email since it wasnt send already - 21 days before the move
  61. if(daysFromToday == 21)
  62. oppsToSendEmailsWith.put(o, 'requal');
  63. }
  64. } else if (daysBetween <= 21 && daysbetween >= 17) {
  65. //check if email was sent
  66. if (o.Requal_Email_Sent_On__c != null) {
  67. //check if response was received - if it was nothing happens
  68. if (o.Requal_Email_Response_received__c) {
  69. //stop
  70. } else {
  71. if (daysFromToday == 14) {
  72. //create case
  73. oppsToCreateCasesOn.add(o);
  74. }
  75. }
  76. } else {
  77. //send an email since it wasnt send already- 16 days before the move
  78. if(daysFromToday == 16)
  79. oppsToSendEmailsWith.put(o, 'requal');
  80. }
  81. } else if (daysBetween < 17) {
  82. //check if email was sent
  83. if (o.Requal_Email_Sent_On__c != null) {
  84. //check if response was received - if it was nothing happens
  85. if (o.Requal_Email_Response_received__c) {
  86. //stop
  87. } else {
  88. if ((Date.valueOf(o.Requal_Email_Sent_On__c)).daysBetween(system.today()) == 2) {
  89. //create case
  90. oppsToCreateCasesOn.add(o);
  91. }
  92. }
  93. } else {
  94. //send an email since it wasnt send already - 1 day after booking
  95. if((o.BookingDate__c).daysBetween(system.today()) == 1)
  96. oppsToSendEmailsWith.put(o, 'requal');
  97. }
  98. }
  99. }
  100.  
  101.  
  102. //method to send emails and update last email sent field on opportunities
  103. if (oppsToSendEmailsWith.size() > 0) {
  104. List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
  105. OrgWideEmailAddress[] owea;
  106. owea = [select Id, Address from OrgWideEmailAddress where Address = 'service@movinga.de' OR Address = 'service.client@movinga.fr' OR Address = 'service@movinga.se'];
  107. List<Opportunity> oppsToUpdate = new List<Opportunity>();
  108.  
  109. for (Opportunity opp : oppsToSendEmailsWith.keySet()) {
  110. Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
  111. mail.setTargetObjectId(opp.PersonContactIdAuto__c);
  112. mail.setWhatId(opp.Id);
  113. mail.setToAddresses(new List<String>{opp.email__c});
  114. mail.setSaveAsActivity(true);
  115.  
  116. opp.LastRESTUpdate__c = System.now().addYears(-10);
  117.  
  118. if (opp.RecordTypeName__c == 'DE Opportunity' || opp.RecordTypeName__c == 'DE Baggage Opportunity') {
  119. mail.setReplyTo('service@movinga.de');
  120. //mail.setTemplateId(requalificationTemplateDE);
  121. if (owea.get(0).Address == 'service@movinga.de') {
  122. mail.setOrgWideEmailAddressId(owea.get(0).Id);
  123. } else if (owea.get(1).Address == 'service@movinga.de') {
  124. mail.setOrgWideEmailAddressId(owea.get(1).Id);
  125. } else if (owea.get(2).Address == 'service@movinga.de') {
  126. mail.setOrgWideEmailAddressId(owea.get(2).Id);
  127. }
  128.  
  129. } else if (opp.RecordTypeName__c == 'FR Opportunity' || opp.RecordTypeName__c == 'FR Baggage Opportunity' || opp.RecordTypeName__c == 'White Label') {
  130. mail.setReplyTo('service.client@movinga.fr');
  131. //mail.setTemplateId(requalificationTemplateFR);
  132. if (owea.get(0).Address == 'service.client@movinga.fr') {
  133. mail.setOrgWideEmailAddressId(owea.get(0).Id);
  134. } else if (owea.get(1).Address == 'service.client@movinga.fr') {
  135. mail.setOrgWideEmailAddressId(owea.get(1).Id);
  136. } else if (owea.get(2).Address == 'service.client@movinga.fr') {
  137. mail.setOrgWideEmailAddressId(owea.get(2).Id);
  138. }
  139.  
  140. } else if (opp.RecordTypeName__c == 'SE Opportunity') {
  141. mail.setReplyTo('service@movinga.se');
  142. if (owea.get(0).Address == 'service@movinga.se') {
  143. mail.setOrgWideEmailAddressId(owea.get(0).Id);
  144. } else if (owea.get(1).Address == 'service@movinga.se') {
  145. mail.setOrgWideEmailAddressId(owea.get(1).Id);
  146. } else if (owea.get(2).Address == 'service@movinga.se') {
  147. mail.setOrgWideEmailAddressId(owea.get(2).Id);
  148. }
  149. }
  150. else continue;
  151.  
  152.  
  153. if (opp.RecordTypeName__c == 'DE Opportunity' || opp.RecordTypeName__c == 'DE Baggage Opportunity'){
  154. if (oppsToSendEmailsWith.get(opp) == 'requal') mail.setTemplateId(requalificationTemplateDE);
  155. else mail.setTemplateId(requalificationReminderTemplateDE);
  156. }
  157. else if(opp.RecordTypeName__c == 'FR Opportunity' || opp.RecordTypeName__c == 'FR Baggage Opportunity' || opp.RecordTypeName__c == 'White Label'){
  158. if (oppsToSendEmailsWith.get(opp) == 'requal') mail.setTemplateId(requalificationTemplateFR);
  159. else mail.setTemplateId(requalificationReminderTemplateFR);
  160. }
  161. else if(opp.RecordTypeName__c == 'SE Opportunity'){
  162. if (oppsToSendEmailsWith.get(opp) == 'requal') mail.setTemplateId(requalificationTemplateSE);
  163. else mail.setTemplateId(requalificationReminderTemplateSE);
  164. }
  165. Opportunity oppty = new Opportunity();
  166. oppty.id = opp.id;
  167. oppty.Requal_Email_Sent_On__c = System.now();
  168. oppty.Skip_Validation_New__c = Decimal.valueOf(String.valueOf(System.now()).replace('-','').replace(':','').replace(' ',''));
  169. oppsToUpdate.add(oppty);
  170.  
  171. mails.add(mail);
  172. }
  173.  
  174. try {
  175. Messaging.sendEmail(mails);
  176. update oppsToUpdate;
  177. } catch (Exception e) {
  178. System.debug('Error happened while sending emails/updating opportunities: ' + e.getMessage());
  179. }
  180. }
  181.  
  182. //method to create cases
  183. if (oppsToCreateCasesOn.size() > 0) {
  184. List<Case> casesToInsert = new List<Case>();
  185. //Fetching the assignment rules on case
  186. AssignmentRule AR = new AssignmentRule();
  187. AR = [select id from AssignmentRule where SobjectType = 'Case' and Active = true limit 1];
  188.  
  189. //Creating the DMLOptions for "Assign using active assignment rules" checkbox
  190. Database.DMLOptions dmlOpts = new Database.DMLOptions();
  191. dmlOpts.assignmentRuleHeader.assignmentRuleId= AR.id;
  192.  
  193. for (Opportunity opp : oppsToCreateCasesOn) {
  194. Case c = new Case();
  195. c.Opportunity__c = opp.id;
  196. c.Issue_Category_1__c = 'Before move';
  197. c.Issue_Category_2__c = 'Order Validation';
  198. c.Subject = 'Requalification';
  199. //Setting the DMLOption on Case instance
  200. c.setOptions(dmlOpts);
  201. if (opp.RecordTypeName__c == 'DE Opportunity' || opp.RecordTypeName__c == 'DE Baggage Opportunity')
  202. c.Origin = 'DACH Customer Service';
  203. else if (opp.RecordTypeName__c == 'FR Opportunity' || opp.RecordTypeName__c == 'FR Baggage Opportunity' || opp.RecordTypeName__c == 'White Label')
  204. c.Origin = 'FR Customer Service';
  205. else if (opp.RecordTypeName__c == 'SE Opportunity')
  206. c.Origin = 'SE Customer Service';
  207. else continue;
  208.  
  209. casesToInsert.add(c);
  210. }
  211.  
  212. if (casesToInsert.size() > 0) {
  213. insert casesToInsert;
  214. }
  215. }
  216.  
  217. }
  218.  
  219. public static Boolean runningInASandbox() {
  220. return [SELECT Id, IsSandbox FROM Organization LIMIT 1].IsSandbox;
  221. }
  222.  
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement