netsuitesuitescriptclientscript

NetSuite Get Description and Set Tax during Onchange "Line Items"


I am learning NetSuite,

The scenario I am trying to archive, In an Invoice, When adding the line items, if the item description contains "non JP" then add tax value "193" else other tax.

My Question:

How to fetch the description of line item when the user select it or change the description.

I am trying to do custom function:

The function will execute on : " POST SOURCING FUNCTION"

My code

if(scriptContext.sublistId == 'item' && subsidiary_id == 6){
                 var inv_type = objRecord.getText({fieldId:'custbody3'});
                 var inv_val;
                 for(var i=0;i<inv_type.length;i++){
                 val = inv_type[i];
                 log.debug({
            title: 'inv_type', 
            details: inv_type[i]
        });
                 console.log('inv_type',inv_type);
                 //inv_type = 'Service' || 'Subscription'
                if(inv_type[i] == 'Services');
            {

 var description="";
              //////If the Description contains Non JP set Tax Rate = 0
              if(description.contains("non JP"))
                {
                   objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxcode',
                        value: 193,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
                }
              //////If the Description contains Non JP set Tax Rate = 10
             if(description.contains("JP"))
                {
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxrate1',
                        value: 7,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
                }
                }
            }
                }

My full script code

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
define(['N/record', 'N/log'],
    /**
     * @param {record} record
     */
    function (record, log) {
        /**
         * Defines the function that is executed after a sublist is inserted, removed, or edited.
         *
         * @param {Object} scriptContext
         * @param {Record} scriptContext.currentRecord - Current form record
         * @param {string} scriptContext.sublistId - 
         * @since 2015.2
         */
        function postSourcing(scriptContext) {
            try {
                var objRecord = scriptContext.currentRecord;
                var subsidiary_id = objRecord.getValue({fieldId:'subsidiary'});
                
                //Tax Calculation for China Subsidiary
                if(scriptContext.sublistId == 'item' && subsidiary_id == 5){
                 var inv_type = objRecord.getText({fieldId:'custbody3'});
                 var inv_val;
                 for(var i=0;i<inv_type.length;i++){
                 val = inv_type[i];
                 log.debug({
            title: 'inv_type', 
            details: inv_type[i]
        });
                 console.log('inv_type',inv_type);
                 //inv_type = 'Service' || 'Subscription'
                if(inv_type[i] == 'Services' || inv_type[i] == 'Subscription' || (inv_type[i] == 'Subscription' && (inv_type[i] =='Expenses' || inv_type[i] == 'Customer Summit Sponsor Fees')) || (inv_type[i] == 'Services' && (inv_type[i] == 'Expenses' || inv_type[i] == 'Customer Summit Sponsor Fees')) || (inv_type[i] == 'Services' && inv_type[i] == 'Expenses' && inv_type[i] == 'Customer Summit Sponsor Fees') || (inv_type[i] == 'Services' && inv_type[i] == 'Expenses' && inv_type[i] == 'Customer Summit Sponsor Fees' && inv_type[i] == 'Subscription' ) || (inv_type[i] == 'Subscription' && inv_type[i] == 'Expenses' && inv_type[i] == 'Customer Summit Sponsor Fees')){
                log.debug({title: 'inv_type1', details: inv_type[i]});
            
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxcode',
                        value: 52,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxrate1',
                        value: 6,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
//                    objRecord.commitLine('item');
                }
                if(inv_type[i] == 'Expenses' || inv_type[i] == 'Customer Summit Sponsor Fees') {
                
                log.debug({title: 'inv_type1', details: inv_type[i]});
            
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxcode',
                        value: 51,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxrate1',
                        value: 0,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
//                    objRecord.commitLine('item');
                }
            }
                }
                
                //Tax Calculation for Singapore Subsidiary
                
                if(scriptContext.sublistId == 'item' && subsidiary_id == 69){
                 var inv_type = objRecord.getText({fieldId:'custbody3'});
                 var inv_val;
                 for(var i=0;i<inv_type.length;i++){
                 val = inv_type[i];
                 log.debug({
            title: 'inv_type', 
            details: inv_type[i]
        });
                 console.log('inv_type',inv_type);
                 //inv_type = 'Service' || 'Subscription'
                if(inv_type[i] == 'Services' || (inv_type[i] == 'Subscription' && (inv_type[i] =='Expenses' || inv_type[i] == 'Customer Summit Sponsor Fees')) || (inv_type[i] == 'Services' && (inv_type[i] == 'Expenses' || inv_type[i] == 'Customer Summit Sponsor Fees')) || (inv_type[i] == 'Services' && inv_type[i] == 'Expenses' && inv_type[i] == 'Customer Summit Sponsor Fees') || (inv_type[i] == 'Services' && inv_type[i] == 'Expenses' && inv_type[i] == 'Customer Summit Sponsor Fees' && inv_type[i] == 'Subscription' ) || (inv_type[i] == 'Subscription' && inv_type[i] == 'Expenses' && inv_type[i] == 'Customer Summit Sponsor Fees')){
                log.debug({title: 'inv_type1', details: inv_type[i]});
            
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxcode',
                        value: 193,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxrate1',
                        value: 7,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
//                    objRecord.commitLine('item');
                }
                if(inv_type[i] == 'Expenses' || inv_type[i] == 'Customer Summit Sponsor Fees' || inv_type[i] == 'Subscription' ) {
                
                log.debug({title: 'inv_type1', details: inv_type[i]});
            
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxcode',
                        value: 192,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxrate1',
                        value: 0,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
//                    objRecord.commitLine('item');
                }
            }
                }
              
              
              
              
              
              //////////////////////Tax calculation for subsidiary 'Japan'
                    
                
                if(scriptContext.sublistId == 'item' && subsidiary_id == 6){
                 var inv_type = objRecord.getText({fieldId:'custbody3'});
                 var inv_val;
                 for(var i=0;i<inv_type.length;i++){
                 val = inv_type[i];
                 log.debug({
            title: 'inv_type', 
            details: inv_type[i]
        });
                 console.log('inv_type',inv_type);
                 //inv_type = 'Service' || 'Subscription'
                if(inv_type[i] == 'Services');
            {

 var description="";
              //////If the Description contains Non JP set Tax Rate = 0
              if(description.contains("non JP"))
                {
                   objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxcode',
                        value: 193,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
                }
              //////If the Description contains Non JP set Tax Rate = 10
             if(description.contains("JP"))
                {
                    objRecord.setCurrentSublistValue({
                        sublistId: 'item',
                        fieldId: 'taxrate1',
                        value: 7,
                        ignoreFieldChange: true,
                        enableSourcing: true
                    });
                }
                }
            }
                }
              /////////////////////////////////////End
           
                
                
                return true;
            } catch (e) {
                console.log("Error in validateLine : " + e);
                log.error('Error in validateLine', e);
            }
        }

        return {
            postSourcing: postSourcing
        };

    });

Other functionality works fine,

I need to get description for line items only in section Japan (Added in comments) and set the tax based on the description.


Solution

  • Create a custom column field and source that when the item is selected, so when you select the item automatically description will be populated. Use that in your script to validate your logic

    enter image description here