Auto-Ship: Payment Card Token Updation

When payment card id is used in order, CyberSource initiates tokenization. At that time the script deployed in Payment card token record creation will find the Auto-Ship record by matching the mask value and the credit card look field key set on Auto-Ship record and updates the payment card Token field in line record/Auto-Ship

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

define( [ 'N/record', 'N/runtime', 'N/search' ],

    function ( record, runtime, search )
    {
        /* CUSTOM RECORD IDS */
        const _AUTOSHIP_LINE_RECORD = "customrecord_vv_autoship_record";
        const _AUTOSHIP_PYMT_CARD_TOKEN = "custrecord_vv_payment_card_token";
        const _AUTOSHIP_CC_PYMT_TOKEN_LOOKUP = "custrecord_vv_autoship_selected_card";
        const _AUTOSHIP_CUSTOMER = "custrecord_vv_autoship_customer_src";
        /* CUSTOM RECORD IDS */


        function afterSubmit ( scriptContext )
        {
            try
            {
                if ( scriptContext.type == scriptContext.UserEventType.CREATE)
                {
                    var cardNewRec = scriptContext.newRecord;
                    var cardNewRecID = cardNewRec.id;          

                    var entityId = cardNewRec.getValue( 'entity' )
                    var strCardDetails = cardNewRec.getValue( 'mask' )
                    log.debug( "strCardDetails", strCardDetails )

                    if ( entityId && strCardDetails )
                    {
                        var customrecord_vv_autoship_recordSearchObj = search.create( {
                            type: _AUTOSHIP_LINE_RECORD,
                            filters:
                                [
                                    [ _AUTOSHIP_CC_PYMT_TOKEN_LOOKUP, "is", strCardDetails ],
                                    "AND",
                                    [ _AUTOSHIP_PYMT_CARD_TOKEN, "anyof", "@NONE@" ],
                                    "AND",
                                    [ _AUTOSHIP_CUSTOMER, "anyof", entityId ]
                                ],
                            columns:
                                [
                                    search.createColumn( { name: "internalid", label: "Internal ID" } )
                                ]
                        } );
                        var searchResultCount = customrecord_vv_autoship_recordSearchObj.runPaged().count;
                        log.debug( "customrecord_vv_autoship_recordSearchObj result count", searchResultCount );

                        var lineRecId;
                        customrecord_vv_autoship_recordSearchObj.run().each( function ( result )
                        {
                            lineRecId = result.getValue( customrecord_vv_autoship_recordSearchObj.columns[ 0 ] );

                            if ( lineRecId )
                            {
                                log.debug( "lineRecId", lineRecId )
                                record.submitFields( {
                                    type: _AUTOSHIP_LINE_RECORD,
                                    id: lineRecId,
                                    values: {
                                        "custrecord_vv_payment_card_token": cardNewRecID
                                    },
                                    options: {
                                        enablesourcing: true,
                                        ignoreMandatoryFields: true
                                    }
                                } );
                            }
                            return true;
                        } );
                    }

                }

            } catch ( e )
            {
                log.debug( "error@afterSubmit", e );
                log.error( "error@afterSubmit", e );
            }
        }
        return {
            afterSubmit: afterSubmit
        };

    } );

Leave a comment

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