Untitled
plain_text
a month ago
3.8 kB
5
Indexable
Never
Map<Id,String> mapCaseIdToEmailSend = new Map<String,Id>(); Set<Id> casesIds = new Set<Id>(); Map<String,String> mapEmailSendAndEmailQueue = new Map<String,String>(); for (VippIntegrationSOAP.SituacaoPostagemResponseNew_element currentObject : objectsStatusResponse.SituacaoPostagemRetorno.SituacaoPostagem.SituacaoPostagem) { Case caseWithTag = casesWithTagMap.get(currentObject.Etiqueta); if (caseWithTag == null || caseWithTag.StatusObjetoVipp__c == currentObject.DescricaoStatusAtual) continue; caseWithTag.StatusObjetoVipp__c = currentObject.DescricaoStatusAtual; String emailToSend = caseWithTag.Account.RecordType.Name.equals('Conta CPF') && !String.isBlank(caseWithTag.Account.PersonEmail) ? caseWithTag.Account.PersonEmail : !String.isBlank(caseWithTag.Account.BusinessEmail__c) ? caseWithTag.Account.BusinessEmail__c : ''; if (currentObject.DescricaoStatusAtual.equals('Objeto postado') || currentObject.DescricaoStatusAtual.equals('Objeto postado após o horário limite da unidade') && String.isNotBlank(emailToSend)) { CaseSelector.selectByFieldOwner(caseHistory) Messaging.SingleEmailMessage emailSend = sendObjectPostedEmail(emailToSend, caseWithTag.NumeroEtiqueta__c); createEmailMessage(emailSend, new List<Case> {caseWithTag}); } Boolean vippStatusDeliveryProblem = currentObject.DescricaoStatusAtual.equals('Objeto não localizado no fluxo postal') || currentObject.DescricaoStatusAtual.equals('Endereço incorreto - Entrega não realizada') || currentObject.DescricaoStatusAtual.equals('Objeto entregue ao remetente'); if (vippStatusDeliveryProblem) caseWithTag.Status = 'Respondido'; if (currentObject.DescricaoStatusAtual.equals('Objeto entregue ao destinatário') && String.isNotBlank(emailToSend)) { caseWithTag.Status = 'Closed'; if (!String.isBlank(emailToSend)){ objectDeliveredEmails.add(emailToSend); if(!mapCaseIdToEmailSend.containsKey(caseWithTag.Id)) mapCaseIdToEmailSend.put(caseWithTag.Id,emailToSend); casesIds.add(caseWithTag); } } if (!casesToUpdate.contains(caseWithTag)) casesToUpdate.add(caseWithTag); } Set<String> oldValueCaseHistory = new Set<String>(); List<CaseHistory> cases = [ SELECT NewValue, OldValue, CreatedDate, Case.Subject, Case.Owner.Type FROM CaseHistory WHERE Field = 'Owner' AND Case.Id IN: casesIds ORDER BY CreatedDate ]; for(CaseHistory currentCase: cases) oldValueCaseHistory.add((String) currentCase.OldValue); List<Group> queues = [SELECT Id,Email FROM Group Where Type = 'Queue']; Map<Id,String> mapIdQueueAndEmail = new Map<Id,String>(); Map<String,List<Id>> mapEmailQueueAndCaseId = new Map<String,List<Id>>(); for(Group queue: queues) mapIdQueueAndEmail.put(queue.Id,queue.String); for(String idOldValue: oldValueCaseHistory) if(mapIdQueueAndEmail.containsKey(idOldValue)) if(!mapEmailQueueAndCaseId.containsKey(mapIdQueueAndEmail.get(idOldValue))) mapEmailQueueAndCaseId.put(mapIdQueueAndEmail.get(idOldValue), new List<Id>()); mapEmailQueueAndCaseId.get(mapIdQueueAndEmail.get(idOldValue)).add(idOldValue); for(Id caseId: mapCaseIdToEmailSend.keySet()){ String emailSend = mapCaseIdToEmailSend.get(caseId); for(String emailQueue : mapEmailQueueAndCaseId.keySet()) List<Id> ids = mapEmailQueueAndCaseId.get(emailQueue); for(Id id: ids) if(caseId == id) mapEmailSendAndEmailQueue.put(emailSend,emailQueue); } if(!objectDeliveredEmails.isEmpty()) sendObjectDeliveredEmail(mapEmailSendAndEmailQueue);