netsuitesuitescriptsuitescript2.0

SuiteScript 2.X How to edit a sales order after a special order PO has been placed


The functionality of my commission value script was been excellent. While the script will work when editing/creating a sales order and quote, I found a unique scenario in which I must apply the same script.

When a Special Order PO is placed, we can edit the cost estimate (identified as amount/rate). After we submit the PO, it takes us back to the Sales Order. After placing a Special Order PO and if you happen to edit the cost estimate, it will reflect back onto the Sales Order and will affect the Profit Margin.

This is what I am wanting to accomplish:

Below is the code I am trying to get working, the deployment is set to Purchase Orders.

/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */

define(['N/record', 'N/currentRecord','N/log'], (record,currentRecord,log)=>{
    
    const UpdateSO = (context)=>{
        if(context.type == context.UserEventType.DELETE) {
            return true;
        }
    //begin UpdateSO
            const newPO = context.newRecord,
                  salesOrderId = newPO.getValue({ fieldId: 'createdfrom' });
                  
           if(!salesOrderId) { return true; }
           
            const salesOrderRecord = record.load({ type: record.Type.SALES_ORDER, id: salesOrderId,isDynamic: true}),
                  lineItemCount = salesOrderRecord.getLineCount("item");
                  
                  //log.debug('salesOrderRecord',salesOrderRecord);
                  //log.debug('Count',lineItemCount);
                  
            for(let i=0; i<lineItemCount; i++){
             
            const lineNum = salesOrderRecord.selectLine({ sublistId: 'item', line: i });
            //log.debug('lineNum',lineNum);
            
            var lAmnt = salesOrderRecord.getSublistValue({ sublistId: 'item', line: i, fieldId: 'amount'});
            var lCost = salesOrderRecord.getSublistValue({ sublistId: 'item', line: i, fieldId: 'costestimate'});
            var GP = Math.trunc(((lAmnt-lCost)/lAmnt)*100).toFixed(2);
            
             var ioutput = "item# "+i+", amount: "+lAmnt+", cost: "+lCost+", GP: "+GP;
             log.debug('line value',ioutput);
            
            if (GP <= 9.99) { 
                     salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 1 });
                     log.debug('commission value '+i,1);
                     }
                     
                    if (GP >= 10.00 && GP < 15.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 2 });
                      log.debug('commission value '+i,2);
                     }
                     
                   if (GP >= 15.00 && GP < 20.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 3 });
                      log.debug('commission value '+i,3);
                     }
                     
                    if (GP >= 20.00 && GP < 25.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 4 });
                      log.debug('commission value '+i,4);
                     }
                     
                     if (GP >= 25.00 && GP < 30.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 5 });
                      log.debug('commission value '+i,5);
                     }
                     
                     if (GP >= 30.00 && GP < 35.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 6 });
                      log.debug('commission value '+i,6);
                     }
                     
                     if (GP >= 35.00 && GP < 40.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 7 });
                      log.debug('commission value '+i,7);
                     }
                     
                     if (GP >= 40.00 && GP < 45.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 8 });
                      log.debug('commission value '+i,8);
                     }
                     
                     if (GP >= 45.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 9 });
                      log.debug('commission value '+i,9);
                     }
                     
            
         } //end for
         
        salesOrderRecord.save({ type: record.Type.SALES_ORDER, id: salesOrderId, ignoreMandatoryFields: true});
        log.debug('save complete','order saved');
                  
   //end UpdateSO        
    }
    

    return {
        afterSubmit: UpdateSO
    };
    
});

I can create the PO, the Sales Order will load with it's line items and set the new values; but it does not show the changes when you land back onto the sales order after submitting your PO.

Do I have the record.save function correct? I don't get an error for this.

 salesOrderRecord.save({ type: record.Type.SALES_ORDER, id: salesOrderId, ignoreMandatoryFields: true});

Solution

  • Thanks again for all your help. I was able to figure this out and get the commission values to update.

    What I needed to do was after assigning the values, I had to commit the subrecord and then save. Upon testing, it was a success!

    /**
     * @NApiVersion 2.1
     * @NScriptType UserEventScript
     * @NModuleScope SameAccount
     */
    
    define(['N/record', 'N/currentRecord','N/log'], (record,currentRecord,log)=>{
    
    const UpdateSO = (context)=>{
        if(context.type == context.UserEventType.DELETE) {
            return true;
        }
    //begin UpdateSO
            const newPO = context.newRecord,
                  salesOrderId = newPO.getValue({ fieldId: 'createdfrom' });
                  
           if(!salesOrderId) { return true; }
           
            const salesOrderRecord = record.load({ type: record.Type.SALES_ORDER, id: salesOrderId,isDynamic: true}),
                  lineItemCount = salesOrderRecord.getLineCount("item");
                  
                  //log.debug('salesOrderRecord',salesOrderRecord);
                  //log.debug('Count',lineItemCount);
                  
            for(let i=0; i<lineItemCount; i++){
             
            const lineNum = salesOrderRecord.selectLine({ sublistId: 'item', line: i });
            //log.debug('lineNum',lineNum);
            
            var lAmnt = salesOrderRecord.getSublistValue({ sublistId: 'item', line: i, fieldId: 'amount'});
            var lCost = salesOrderRecord.getSublistValue({ sublistId: 'item', line: i, fieldId: 'costestimate'});
            var GP = Math.trunc(((lAmnt-lCost)/lAmnt)*100).toFixed(2);
            
             var ioutput = "item# "+i+", amount: "+lAmnt+", cost: "+lCost+", GP: "+GP;
             log.debug('line value',ioutput);
            
            if (GP < 10.00) { 
                     salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 1 });
                     salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 1 });
                     log.debug('commission value '+i,1);
                     }
                     
                    if (GP >= 10.00 && GP < 15.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 2 });
                      salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 2 });
                      log.debug('commission value '+i,2);
                     }
                     
                   if (GP >= 15.00 && GP < 20.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 3 });
                      salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 3 });
                      log.debug('commission value '+i,3);
                     }
                     
                    if (GP >= 20.00 && GP < 25.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 4 });
                      salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 4 });
                      log.debug('commission value '+i,4);
                     }
                     
                     if (GP >= 25.00 && GP < 30.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 5 });
                      salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 5 });
                      log.debug('commission value '+i,5);
                     }
                     
                     if (GP >= 30.00 && GP < 35.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 6 });
                      salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 6 });
                      log.debug('commission value '+i,6);
                     }
                     
                     if (GP >= 35.00 && GP < 40.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 7 });
                      salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 7 });
                      log.debug('commission value '+i,7);
                     }
                     
                     if (GP >= 40.00 && GP < 45.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 8 });
                      salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 8 });
                      log.debug('commission value '+i,8);
                     }
                     
                     if (GP >= 45.00) { 
                      salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 9 });
                      salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 9 });
                      log.debug('commission value '+i,9);
                     }
                     
            
         } //end for
         
        const saveSalesOrder = salesOrderRecord.save({ type: record.Type.SALES_ORDER, id: salesOrderId, ignoreMandatoryFields: true});
        log.debug('save complete','order saved');
                  
       //end UpdateSO        
        }
    
    
    return {
        afterSubmit: UpdateSO
    };
    
    });