Untitled

 avatar
unknown
plain_text
a month ago
9.8 kB
1
Indexable
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