Guest User

Untitled

a guest
Oct 23rd, 2018
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.27 KB | None | 0 0
  1. global class Batch_EmailBlast implements Schedulable,Database.Batchable<sObject>, Database.Stateful {
  2.  
  3. String query;
  4. public string emailBlastId;
  5. public Email_Blast__c emailBlast;
  6. public List<Case> listOfEmailsToBeSent;
  7. public List<Case> listOfDuplicateCases;
  8. public List<Account> listOfAccountsToBeUpdated;
  9. public Map<Id,String> mapOfOrgCaseIdToError;
  10. public Map<Id,String> mapOfDupCaseIdToError;
  11. public boolean isError;
  12. global Batch_EmailBlast() {
  13.  
  14. }
  15.  
  16. global Database.QueryLocator start(Database.BatchableContext BC) {
  17. return Database.getQueryLocator([SELECT Id, Inquiry_Type__c, Product_type__c, Solution__c,Reason_For_Calling__c,Problem_Category__c, Duplicate_Case_Problem_Category__c,Duplicate_Case_Product_Type__c, Duplicate_Case_Reason_For_Calling__c, Duplicate_Case_Status__c,Web_Product_Business_Group__c, WebProductPLTypeName__c,Age_Hours__c,Language__c, Case_Status__c,Completed_Date__c, status__c, No_Of_Emails_Sent__c, No_Of_Duplicate_Cases__c FROM Email_Blast__c WHERE status__c =: Label.Email_Blast_Process_Status AND Criteria_Tested__c =:Label.Email_Blast_TestingStatus AND No_Of_Records_Satisfying_Criteria__c >:Decimal.valueOf(Label.Email_Blast_Case_Count_Limit)]);
  18. }
  19.  
  20. global void execute(Database.BatchableContext BC, List<Email_Blast__c> scope)
  21. {
  22. set<String> setOfDuplicateCreiteria = new set<String>();
  23. set<ID> setOfAccIds = new set<Id>();
  24. //Get Duplicate cases and cases for which email to be sent
  25.  
  26. for(Email_Blast__c emailBlast : scope)
  27. {
  28. String businessGroup = emailBlast.Web_Product_Business_Group__c;
  29. String webProductPLTypeName = emailBlast.WebProductPLTypeName__c;
  30. Integer age = Integer.valueOf(emailBlast.Age_Hours__c);
  31. List<String> languageList = new List<String>();
  32. if(emailBlast.Language__c != null && emailBlast.Language__c.contains(';'))
  33. {
  34. List<String> allLangs = emailBlast.Language__c.split(';');
  35. for(String iterString: allLangs)
  36. {
  37. languageList.add(iterString);
  38. }
  39. }
  40. else
  41. {
  42. languageList.add(emailBlast.Language__c);
  43. }
  44. String status = emailBlast.Case_Status__c;
  45.  
  46. String caseQuery = 'Select Id, Inquiry_Type__c, Product_type__c, Solution__c, Reason_For_Calling__c, Email_Blast__c, '
  47. +'Problem_Category__c,Status,Send_Mass_Email__c,Web_Product_Support_Product__c, Validation_Flag__c ,'
  48. +'Account.PersonEmail,AccountId, Account.Mass_Email_Received__c, Account.Last_mass_email_Date__c from Case where '
  49. +'Web_Product_Support_Product__r.Business_Group__c =: businessGroup AND '
  50. +'WebProductPLTypeName__c =: webProductPLTypeName AND Case_Age_in_Hours__c >: age AND '
  51. +'Language__c in: languageList AND Status=: status AND Account.Mass_Email_Received__c = false '
  52. +'order by Id, Account.PersonEmail, Case_Age_in_Hours__c DESC ';
  53.  
  54. for(Case iterCase : Database.query(caseQuery))
  55. {
  56. listOfEmailsToBeSent = new List<Case>();
  57. listOfDuplicateCases = new List<Case>();
  58. mapOfOrgCaseIdToError = new Map<Id,String>();
  59. mapOfDupCaseIdToError = new Map<Id,String>();
  60. listOfAccountsToBeUpdated = new List<Account>();
  61.  
  62. String criteria = iterCase.Account.PersonEmail +'-'+iterCase.Web_Product_Support_Product__c;
  63. if(!setOfDuplicateCreiteria.contains(criteria)){
  64. setOfDuplicateCreiteria.add(iterCase.Account.PersonEmail +'-'+iterCase.Web_Product_Support_Product__c);
  65. iterCase.Send_Mass_Email__c = true;
  66. iterCase.Inquiry_Type__c = emailBlast.Inquiry_Type__c;
  67. iterCase.Product_type__c = emailBlast.Product_type__c;
  68. iterCase.Problem_Category__c = emailBlast.Problem_Category__c;
  69. iterCase.Reason_For_Calling__c = emailBlast.Reason_For_Calling__c;
  70. iterCase.Solution__c = emailBlast.Solution__c;
  71. iterCase.Email_Blast__c = emailBlast.Id;
  72. If(Test.isRunningTest() && ProcessEmailBlast.isError)
  73. iterCase.Id = null;
  74. listOfEmailsToBeSent.add(iterCase);
  75.  
  76. }
  77. else{
  78. iterCase.Status = emailBlast.Duplicate_Case_Status__c;
  79. iterCase.Product_type__c = emailBlast.Duplicate_Case_Product_Type__c;
  80. iterCase.Problem_Category__c = emailBlast.Duplicate_Case_Problem_Category__c;
  81. iterCase.Reason_For_Calling__c = emailBlast.Duplicate_Case_Reason_For_Calling__c;
  82. iterCase.Email_Blast__c = emailBlast.Id;
  83. If(Test.isRunningTest() && ProcessEmailBlast.isError)
  84. iterCase.Id = null;
  85. listOfDuplicateCases.add(iterCase);
  86. }
  87.  
  88. if(!listOfEmailsToBeSent.isEmpty()){
  89. //update listOfEmailsToBeSent;
  90. List<Database.SaveResult> updateResults = Database.update(listOfEmailsToBeSent, false);
  91. for(Integer i=0;i<updateResults.size();i++){
  92. if (updateResults.get(i).isSuccess()){
  93. setOfAccIds.add(listOfEmailsToBeSent.get(i).AccountId);
  94.  
  95. }else if (!updateResults.get(i).isSuccess()){
  96. // DML operation failed
  97. Database.Error error = updateResults.get(i).getErrors().get(0);
  98. String failedDML = error.getMessage();
  99. mapOfOrgCaseIdToError.put(listOfEmailsToBeSent.get(i).Id,failedDML);//failed record from the list
  100. system.debug('Failed ID'+listOfEmailsToBeSent.get(i).Id);
  101. }
  102.  
  103. }
  104. }
  105.  
  106. if(!listOfDuplicateCases.isEmpty()){
  107. //update listOfDuplicateCases;
  108. List<Database.SaveResult> updateResults = Database.update(listOfDuplicateCases, false);
  109. for(Integer i=0;i<updateResults.size();i++)
  110. {
  111. if (updateResults.get(i).isSuccess()){
  112. updateResults.get(i).getId();
  113.  
  114. }else if (!updateResults.get(i).isSuccess()){
  115. // DML operation failed
  116. Database.Error error = updateResults.get(i).getErrors().get(0);
  117. String failedDML = error.getMessage();
  118. mapOfDupCaseIdToError.put(listOfDuplicateCases.get(i).Id,failedDML);//failed record from the list
  119. system.debug('Failed ID'+listOfDuplicateCases.get(i).Id);
  120. }
  121.  
  122. }
  123. }
  124.  
  125. for(Account iterAcc : [select Id, Mass_Email_Received__c, Last_mass_email_Date__c from Account where
  126. Id in: setOfAccIds ])
  127. {
  128. iterAcc.Mass_Email_Received__c = true;
  129. iterAcc.Last_mass_email_Date__c = Date.Today();
  130. listOfAccountsToBeUpdated.add(iterAcc);
  131. }
  132. system.debug('listOfAccountsToBeUpdateddd '+listOfAccountsToBeUpdated);
  133. try{
  134. if(!listOfAccountsToBeUpdated.isEmpty())
  135. {
  136. update listOfAccountsToBeUpdated;
  137. }
  138. }
  139. catch(Exception e){
  140. SystemLoggerUtil.logError(e);
  141. }
  142.  
  143. }
  144. updateEmailBlast(emailBlast);
  145. }
  146.  
  147.  
  148.  
  149.  
  150. }
  151.  
  152. global void finish(Database.BatchableContext BC) {
  153.  
  154. }
  155.  
  156. global void execute(SchedulableContext scon) {
  157. Database.executeBatch(new Batch_EmailBlast(),1000);
  158. }
  159.  
  160. private void updateEmailBlast(Email_Blast__c emailBlast)
  161. {
  162. if(mapOfDupCaseIdToError.keySet().size() > 0){
  163. String OrgCaseError = 'Case Id,Error Messagen';
  164. for(Id iterCaseId : mapOfDupCaseIdToError.keySet()){
  165. OrgCaseError += iterCaseId+','+mapOfDupCaseIdToError.get(iterCaseId)+'n';
  166. }
  167. Attachment dupCaseAttchment = new Attachment();
  168. dupCaseAttchment.Name = 'Duplicate Case Errors'+ dateTime.Now()+'.csv';
  169. dupCaseAttchment.contentType = 'text/csv';
  170. dupCaseAttchment.body = Blob.valueOf(OrgCaseError);
  171. dupCaseAttchment.ParentId = emailBlast.Id;
  172. insert dupCaseAttchment;
  173. }
  174.  
  175. if(mapOfOrgCaseIdToError.keySet().size() > 0){
  176. String OrgCaseError = 'Case Id,Error Messagen';
  177. for(Id iterCaseId : mapOfOrgCaseIdToError.keySet()){
  178. OrgCaseError += iterCaseId+','+mapOfOrgCaseIdToError.get(iterCaseId)+'n';
  179. }
  180. Attachment orgCaseAttchment = new Attachment();
  181. orgCaseAttchment.Name = 'Case Errors'+ dateTime.Now()+'.csv';
  182. orgCaseAttchment.contentType = 'text/csv';
  183. orgCaseAttchment.body = Blob.valueOf(OrgCaseError);
  184. orgCaseAttchment.ParentId = emailBlast.Id;
  185. insert orgCaseAttchment;
  186. }
  187.  
  188. emailBlast.Completed_Date__c = DateTime.Now();
  189. if(!mapOfDupCaseIdToError.values().isEmpty() || !mapOfOrgCaseIdToError.values().isEmpty()){
  190. emailBlast.status__c = 'Partially Completed';
  191. }
  192. else
  193. emailBlast.status__c = 'Completed';
  194. emailBlast.No_Of_Emails_Sent__c = listOfEmailsToBeSent.size();
  195. emailBlast.No_Of_Duplicate_Cases__c = listOfDuplicateCases.size();
  196. update emailBlast;
  197. }
  198.  
  199. }
Add Comment
Please, Sign In to add comment