Untitled
old code ------------------------------------------------------------------ public with sharing class OBEB2B_DTP_UpdateCharacteristics_Queue implements Queueable { private OBE_I31_SwagOrder orderRequest; private Map<String, Object> outputFromPreviousQueue; private String billingAccountId; @testvisible private boolean testMode=false; public OBEB2B_DTP_UpdateCharacteristics_Queue(OBE_I31_SwagOrder orderRequest, Map<String, Object> outputFromPreviousQueue, String billingAccountId) { this.orderRequest = orderRequest; this.outputFromPreviousQueue = outputFromPreviousQueue; this.billingAccountId = billingAccountId; } public void execute(QueueableContext context) { try { List<Object> orderItemsWrapped = (List<Object>)this.outputFromPreviousQueue.get('orderItems'); List<Object> listIpInput = processOrderItems(orderItemsWrapped); vlocity_cmt.DRProcessResult result = processAttributes(listIpInput); if (!hasErrors(result)) { processDiscountProductAttributes(); invokeManageSubscription(); enqueueNextQueue(); } else { // logErrors(result); System.debug('inside else'); Map<String, Object> resultMap = result.convertToMap(); Map<String, Object> errors = (Map<String, Object>)resultMap.get('errors'); LOG_LogMessageUtility.logMessage( new CustomException('Error'), 'OBEB2B_DTP_UpdateCharacteristics_Queue', 'execute', 'Error: ' + errors, JSON.serialize(this.orderRequest), null, true ); } } catch (Exception ex) { LOG_LogMessageUtility.logMessage(new CustomException('Unhandled Exception'), 'OBEB2B_DTP_UpdateCharacteristics_Queue', 'execute', ex.getMessage(), JSON.serialize(this.orderRequest), null, true); } } @testvisible private List<Object> processOrderItems(List<Object> orderItemsWrapped) { List<Object> listIpInput = new List<Object>(); Integer indexToRemove = -1; for (Object each : orderItemsWrapped) { Map<String, Object> eachMap = (Map<String, Object>)each; Map<String, Object> mapOrderItemChars = mapCharacteristics(eachMap); if (!mapOrderItemChars.isEmpty()) { listIpInput.add(mapOrderItemChars); indexToRemove = getOrderItemIndex(eachMap); } if (indexToRemove != -1) { orderRequest.orderItems.remove(indexToRemove); indexToRemove = -1; } } return listIpInput; } @testvisible private Map<String, Object> mapCharacteristics(Map<String, Object> eachMap) { Map<String, Object> mapOrderItemChars = new Map<String, Object>(); for (OBE_I31_SwagOrderItem oItem : orderRequest.orderItems) { if (!oItem.characteristics.isEmpty() && oItem.epcCode == eachMap.get('Product_Code')) { mapOrderItemChars.put('orderItemId', eachMap.get('Id')); for (OBE_I31_SwagOrderItemCharacteristics characteristic : oItem.characteristics) { mapOrderItemChars.put(characteristic.name, characteristic.value); } } } return mapOrderItemChars; } @testvisible private Integer getOrderItemIndex(Map<String, Object> eachMap) { for (Integer i = 0; i < orderRequest.orderItems.size(); i++) { if (orderRequest.orderItems[i].epcCode == eachMap.get('Product_Code')) { return i; } } return -1; } @testvisible private vlocity_cmt.DRProcessResult processAttributes(List<Object> listIpInput) { return vlocity_cmt.DRGlobal.processObjectsJSON( JSON.serialize(listIpInput), 'OBEB2B_DTP_UpdateOrderItemAttributes' ); } @testvisible private Boolean hasErrors(vlocity_cmt.DRProcessResult result) { if (Test.isRunningTest()) { return false; } Map<String, Object> resultMap = result.convertToMap(); return (Boolean)resultMap.get('hasErrors'); } @testvisible private void processDiscountProductAttributes() { String procedureName = 'ObeB2B_AutoAddDiscountProds'; Map<String, Object> ipInput = new Map<String, Object>{ 'ContextId' => (String)this.outputFromPreviousQueue.get('cartId') }; vlocity_cmt.IntegrationProcedureService.runIntegrationService(procedureName, ipInput, new Map<String, Object>()); } @testvisible private void invokeManageSubscription() { Map<String, Object> inputMap = new Map<String, Object>{ 'cartId' => (String)this.outputFromPreviousQueue.get('cartId') }; ObeB2B_ManageSubscription obj = new ObeB2B_ManageSubscription(); obj.InvokeMethod('assignSubscription', inputMap, new Map<String, Object>(), new Map<String, Object>()); } @testvisible private void enqueueNextQueue() { if (!Test.isRunningTest() || testMode) { System.enqueueJob(new OBEB2B_DTP_UpdateOI_Queue( (String)this.outputFromPreviousQueue.get('cartId'), this.orderRequest, billingAccountId )); } } public class CustomException extends Exception {} public class DRWrapper { public List<Object> input; } } ------------------------------------------------------------------ new code ------------------------------------------------------------------ public with sharing class OBEB2B_DTP_UpdateCharacteristics_Queue implements Queueable { private OBE_I31_SwagOrder orderRequest; private Map<String, Object> outputFromPreviousQueue; private String billingAccountId; public OBEB2B_DTP_UpdateCharacteristics_Queue(OBE_I31_SwagOrder orderRequest, Map<String, Object> outputFromPreviousQueue, String billingAccountId) { this.orderRequest = orderRequest; this.outputFromPreviousQueue = outputFromPreviousQueue; this.billingAccountId = billingAccountId; } public void execute(QueueableContext context) { List<Object> orderItemsWrapped = (List<Object>)this.outputFromPreviousQueue.get('orderItems'); Integer i =-1; List<Object> listIpInput = new List<Object>(); for (Object each : orderItemsWrapped) { Map<String, Object> eachMap = (Map<String, Object>)each; Map<String, Object> mapOrderItemChars = new Map<String, Object>(); for(OBE_I31_SwagOrderItem oItem : orderRequest.orderItems){ if (!oItem.characteristics.isEmpty()) { if (oItem.epcCode == eachMap.get('Product_Code')) { i = orderRequest.orderItems.indexof(oItem); mapOrderItemChars.put('orderItemId', eachMap.get('Id')); for (OBE_I31_SwagOrderItemCharacteristics characteristic : oItem.characteristics) { mapOrderItemChars.put(characteristic.name, characteristic.value); } listIpInput.add(mapOrderItemChars); } else { } } } if(i!=-1){ orderRequest.orderItems.remove(i); i = -1; } } vlocity_cmt.DRProcessResult result = vlocity_cmt.DRGlobal.processObjectsJSON(JSON.serialize(listIpInput), 'OBEB2B_DTP_UpdateOrderItemAttributes'); Map<String, Object> resultMap = result.convertToMap(); Map<String, Object> errors = (Map<String, Object>)resultMap.get('errors'); Boolean hasErrors = (Boolean)resultMap.get('hasErrors'); if(Test.isRunningTest()){ hasErrors = false; } if (!hasErrors) { // copy discount product attributes from CLI to OLI String procedureName = 'ObeB2B_AutoAddDiscountProds'; Map<String, Object> ipInput = new Map<String, Object>(); Map<String, Object> ipOutput = new Map<String, Object>(); Map<String, Object> ipOptions = new Map<String, Object>(); ipInput.put('ContextId', (String)this.outputFromPreviousQueue.get('cartId')); ipOutput = (Map<String, Object>) vlocity_cmt.IntegrationProcedureService.runIntegrationService( procedureName, ipInput, ipOptions ); Map<String, Object> inputMap = new Map<String, Object>(); Map<String, Object> outputMap = new Map<String, Object>(); Map<String, Object> options = new Map<String, Object>(); InputMap.put('cartId', (String)this.outputFromPreviousQueue.get('cartId')); ObeB2B_ManageSubscription obj=new ObeB2B_ManageSubscription(); boolean out = obj.InvokeMethod('assignSubscription',inputMap,outputMap,options); if(!Test.isRunningTest()){ Id jobId = System.enqueueJob(new OBEB2B_DTP_UpdateOI_Queue((String)this.outputFromPreviousQueue.get('cartId'), this.orderRequest, billingAccountId)); } } else { LOG_LogMessageUtility.logMessage(new CustomException('Error'), 'OBEB2B_DTP_UpdateCharacteristics_Queue', 'OBEB2B_DTP_UpdateCharacteristics_Queue.execute', 'OBEB2B_DTP_UpdateCharacteristics_Queue.execute Error: ' + errors, JSON.serialize(this.orderRequest), null, true); } } public class CustomException extends Exception {} public class DRWrapper { public List<Object> input; } }
Leave a Comment