Untitled
unknown
plain_text
2 years ago
3.8 kB
13
Indexable
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);Editor is loading...