Override System preference of Tax Setup

Based on another Event Address “Trade Show Location” rather than the Address of the customer all tax rate calculations in the Cash sale record should take place.

/**
* @NApiVersion 2.x
* @NScriptType ClientScript
*/

define( [ 'N/currentRecord', 'N/record', 'N/search', 'N/runtime' ], function ( currentRecord, record, search, runtime )
{
    var CURR_REC;
    var CURR_REC_ID;
    var USER_OBJ;
    var USER_ID;
    var TRANDATE;
    var SHOWRECID;

    const SHOW_STATE = 'custrecord_vv_trade_show_state';
    const SHOW_COUNTRY = 'custrecord_vv_trade_show_country';
    const SHOW_ZIP = 'custrecord_vv_trade_show_zip';
    const SHOW_CITY = 'custrecord_vv_trade_show_city';
    const SHOW_ADDRSS1 = 'custrecord_vv_trade_show_addrss1';
    const SHOW_ADDRSS2 = 'custrecord_vv_trade_show_addrss2';
    const SHOW_PHONE = 'custrecord_vv_trade_show_phone';
    const SHIP_ADDRESS = 'shipaddress';
    const TRADE_SHOW_LIST = 'custbody_vv_trade_show_list';
    const TRADE_SHOW_RECORD_TYPE = 'customrecord_vv_trade_show_details';

    function pageInit ( scriptContext )
    {
        try
        {
            if ( scriptContext.mode == 'create' || scriptContext.mode == 'copy' || scriptContext.mode == 'edit' )
            {
                CURR_REC = scriptContext.currentRecord
                CURR_REC_ID = CURR_REC.id


                //TO GET CURRENT USER WHO IS CREATING THE CASH SALE
                USER_OBJ = runtime.getCurrentUser()
                USER_ID = USER_OBJ.id

                //GET CASH SALE DATE
                TRANDATE = CURR_REC.getText( {
                    fieldId: 'trandate'
                } )

                //CHECK THE DATE GET SOURCED TO AVOID ERROR IN THE FUNCTION CALLED
                if ( TRANDATE )
                {
                    getTradeShowDetailsRecord()
                }


                // SET THE VALUE (RETURNED FROM FUNCTION) OF SHOW RECORD IN THE FIELD IN CASH SALE
                if ( SHOWRECID )                    
                {
                    console.log( 'SHOWRECID', SHOWRECID )
                    CURR_REC.setValue( {
                        fieldId: TRADE_SHOW_LIST,
                        value: SHOWRECID
                    } )
                }
            }
        }
        catch ( e )
        {
            console.log( "Err@pageInit", e );
        }

    }

    function validateField ( scriptContext )
    {
        try
        {
            // scriptContext.fieldId == TRADE_SHOW_LIST || 
            if ( scriptContext.fieldId == 'entity' )
            {
                //ENTERS WHEN USER SELECT A CUSTOMER IN THE CASH SALE
                console.log( "VALIDATE_FIELD" )
                var shipAddress = CURR_REC.getValue( {
                    fieldId: SHIP_ADDRESS
                } );
                var shipaddresslist = CURR_REC.getValue( {
                    fieldId: 'shipaddresslist'
                } );       

                var tradeshowList = CURR_REC.getValue( {
                    fieldId: TRADE_SHOW_LIST
                } );

                if ( tradeshowList )
                {
                    //LOAD THE CUSTOM RECORD AND GET ALL ADDRESS RELATED FIELD VALUES
                    var tradeshowRecObj = record.load( {
                        type: TRADE_SHOW_RECORD_TYPE,
                        id: tradeshowList,
                        isDynamic: true,
                    } );
                    var showCounty = tradeshowRecObj.getText( { fieldId: SHOW_COUNTRY } );
                    var showState = tradeshowRecObj.getValue( { fieldId: SHOW_STATE } );          
                    var showZip = tradeshowRecObj.getValue( { fieldId: SHOW_ZIP } );
                    var showCity = tradeshowRecObj.getValue( { fieldId: SHOW_CITY } );                  
                    var showAddrss1 = tradeshowRecObj.getValue( { fieldId: SHOW_ADDRSS1 } );
                    var showAddrss2 = tradeshowRecObj.getValue( { fieldId: SHOW_ADDRSS2 } );
                    var showPhone = tradeshowRecObj.getValue( { fieldId: SHOW_PHONE } );
                    var entity = CURR_REC.getValue( { fieldId: 'entity' } );
                
                    //LOAD CUSTOMER RECORD AND ADD NEW ADDRESS IN THE ADDRESS BOOK
                    if ( entity )
                    {
                        var objRecord = record.load( {
                            type: record.Type.CUSTOMER,
                            id: entity,
                            isDynamic: true,
                        } );
                        objRecord.selectNewLine( {
                            sublistId: 'addressbook'
                        } );
                        var addressSubrecord = objRecord.getCurrentSublistSubrecord( {
                            sublistId: 'addressbook',
                            fieldId: 'addressbookaddress'
                        } );
                        if ( showState ) { addressSubrecord.setValue( { fieldId: 'state', value: showState } ) }
                        if ( showCounty ) { addressSubrecord.setText( { fieldId: 'country', text: showCounty } ) }
                        if ( showZip ) { addressSubrecord.setValue( { fieldId: 'zip', value: showZip } ) }
                        if ( showCity ) { addressSubrecord.setValue( { fieldId: 'city', value: showCity } ) }
                        if ( showAddrss1 ) { addressSubrecord.setValue( { fieldId: 'addr1', value: showAddrss1 } ) }
                        if ( showAddrss2 ) { addressSubrecord.setValue( { fieldId: 'addr2', value: showAddrss2 } ) }
                        if ( showPhone ) { addressSubrecord.setValue( { fieldId: 'addrphone', value: showPhone } ) }

                        //SET THE ADDRESS LABLE FOR IDENTIFICATION
                        objRecord.setCurrentSublistValue( {
                            sublistId: "addressbook",
                            fieldId: "label",
                            value: "Show Location Address"
                        } );

                        //SET THIS ADDRESS AS THE DEFAULT SHIPPING ADDRESS FOR THE CUSTOMER
                        objRecord.setCurrentSublistValue( {
                            sublistId: 'addressbook',
                            fieldId: 'defaultshipping',
                            value: true,
                            ignoreFieldChange: true
                        } );
                        objRecord.commitLine( {
                            sublistId: 'addressbook'
                        } );
                        objRecord.save( {
                            enableSourcing: true,
                            ignoreMandatoryFields: true
                        } );
                    }
                }
            }
            return true;
        } catch ( e )
        {
            console.log( "Err@validateField", e );
            log.debug( "Err@validateField", e );
        }
    }

    //FUNCTION RETURNS CORRECT TRADE SHOW FOR THE CURRENT USER AND FALLS IN RANDE OF CASH SALES'S CREATION DATE
    function getTradeShowDetailsRecord ()
    {
        try
        {
            var customrecord_vv_trade_show_detailsSearchObj = search.create( {
                type: "customrecord_vv_trade_show_details",
                filters:
                    [
                        [ "custrecord_vv_trade_show_startdate", "onorbefore", TRANDATE ],
                        "AND",
                        [ "custrecord_vv_trade_show_enddate", "onorafter", TRANDATE ],
                        "AND",
                        [ "custrecord_vv_parent_link_in_child.custrecord_vv_is_attended", "is", "T" ],
                        "AND",
                        [ "custrecord_vv_parent_link_in_child.custrecord_vv_attendee_field", "anyof", USER_ID ]
                    ],
                columns:
                    [
                        search.createColumn( {
                            name: "internalid",
                            summary: "MIN",
                            label: "Internal ID"
                        } )
                    ]
            } );

            //SEARCH WILL RETURN ONLY ONE RESULT AS WE ARE FINDING THE FISRT RECORD CREATED IN TERMS OF ID (MIN) IN WORST CASES ie.WHEN OVERLAP IN DATE AND EMPLOYEE ATTEND MORE THAN ONE SHOW AT A TIME.
            var searchResultCount = customrecord_vv_trade_show_detailsSearchObj.runPaged().count;
            console.log( "customrecord_vv_trade_show_detailsSearchObj result count", searchResultCount );


            //GET THE SHOW RECORD ID
            customrecord_vv_trade_show_detailsSearchObj.run().each( function ( result )
            {
                SHOWRECID = result.getValue( customrecord_vv_trade_show_detailsSearchObj.columns[ 0 ] )
                return true;
            } );
            return SHOWRECID;
        }
        catch ( e )
        {
            console.log( "Err@getTradeShowDetailsRecord", e );
            log.debug( "Err@getTradeShowDetailsRecord", e );
        }
    }
    return {
        validateField: validateField,
        pageInit: pageInit
    };
} );

Leave a comment

Your email address will not be published. Required fields are marked *