Add billing address to website credit card form

Adding street name and zipcode to website credit card form and save these values to customer record and sales order billing section.

 “Card ZIP code” and “Card Street” are the fields are not visible in the view mode of the customer record.

But In order to get that fields in NetSuite we need to enable a feature named “PAYMENT INSTRUMENTS”.

Path:

setup -> Company -> Enable features -> Under transaction tab -> Enable the feature “PAYMENT INSTRUMENTS”.

In the below codes considering 2 conditions for updating the field. ie; If the feature is enabled then ‘nickname’, card street’ and ‘card zip’ are updated.

If the feature is not enabled then the ‘nickname ‘ is only updated with standard fields.

JavaScript Entry point file

define(
    'JJ.creditCardExtension.creditCardExtension', [
   'CreditCard.Edit.Form.View','PaymentInstrument.CreditCard.Edit.Form.View',
         'jj_creditcardextension_creditcardextension.tpl',
         'PaymentInstrument.CreditCard.View', 'Backbone','underscore', 'Utils', 'Backbone.FormView', 
         'jj_creditcardextension.tpl', 'Profile.Model','CreditCard.View',
        'jj_creditcardextension_instrumentextension.tpl','jj_paymentinstrument.tpl'
        ,'PaymentMethod.CreditCard.List.View','PaymentInstrument.CreditCard.Edit.View'
    ],
    function(
        CreditCardEditFormView,PaymentInstrumentCreditCardEditFormView,
         jj_creditcardextensioncredittpl, 
        PaymentInstrumentCreditCardView,Backbone, _, Utils, BackboneFormView,
         jj_creditcardextensiontpl, ProfileModel,CreditCardView,jj_creditcardextension_instrumentextensiontpl,
         jj_paymentinstrumenttpl,PaymentMethodCreditCardListView,PaymentInstrumentCreditCardEditView
        ) {
        'use strict';
        return {
            mountToApp: function mountToApp(container) {
                var cart = container.getComponent('Cart');
                var payinstrumentenabled= SC.ENVIRONMENT.paymentInstrumentEnabled;
                _.extend(PaymentInstrumentCreditCardEditFormView.prototype, {
                    template: jj_creditcardextension_instrumentextensiontpl,
                    initialize: _.wrap(PaymentInstrumentCreditCardEditFormView.prototype.initialize, function(fn) {
                        fn.apply(this, _.toArray(arguments).slice(1));
                        _.extend(this.model.validation, {
                            memo: {
                                fn: function(memo) {
                                    if (!memo || !jQuery.trim(memo)) {
                                        return _('Nickname is required').translate();
                                    } else if (memo.length > 26) {
                                        return _('Name too long').translate();
                                    }
                                }
                            },
                            street:{
                                fn: function(street) {
                                    if (!street || !jQuery.trim(street)) {
                                        return _('Street name is required').translate();
                                    } else if (street.length > 26) {
                                        return _('Name too long').translate();
                                    }
                                }
                            },
                            zipcode:{
                                fn: function(zipcode) {
                                    if (!zipcode || !jQuery.trim(zipcode)) {
                                        return _('Zipcode is required').translate();
                                    } else if (zipcode.length > 9) {
                                        return _('Zip too long').translate();
                                    }
                                    else if (zipcode.length < 4) {
                                        return _('Zip too small,Please enter correct zip').translate();
                                    }                                    
                                }
                            }
                        })
                        BackboneFormView.add(this);
                        //console.log("this 22",this)
                    }),
                    bindings: _.extend(PaymentInstrumentCreditCardEditFormView.prototype.bindings, {
                        '[name="memo"]': 'memo',
                        '[name="street"]': 'street',
                        '[name="zipcode"]': 'zipcode'
                    }),
                    getContext: _.wrap(PaymentInstrumentCreditCardEditFormView.prototype.getContext, function(fn) {
                        var originalRet = fn.apply(this, _.toArray(arguments).slice(1));
                        originalRet.memo = this.model.get('memo');
                        originalRet.street = this.model.get('street');
                        originalRet.zipcode = this.model.get('zipcode'); // @property {String} ccmemo
                        return originalRet;
                    })

                })
                _.extend(PaymentInstrumentCreditCardView.prototype, {
                    template: jj_paymentinstrumenttpl,
                    getContext: _.wrap(PaymentInstrumentCreditCardView.prototype.getContext, function(fn) {
                        var originalRet = fn.apply(this, _.toArray(arguments).slice(1));
                        originalRet.memo = this.model.get('memo'); // @property {String} ccmemo
                        originalRet.street = this.model.get('street');
                        originalRet.zipcode = this.model.get('zipcode');
                        return originalRet;
                    })
                })

                _.extend(CreditCardEditFormView.prototype, {
                    template: jj_creditcardextensioncredittpl,
                    initialize: _.wrap(CreditCardEditFormView.prototype.initialize, function(fn) {
                        fn.apply(this, _.toArray(arguments).slice(1));
                        _.extend(this.model.validation, {
                            ccmemo: {
                                fn: function(ccmemo) {
                                    if (!ccmemo || !jQuery.trim(ccmemo)) {
                                        return _('Nickname is required').translate();
                                    } else if (ccmemo.length > 26) {
                                        return _('Name too long').translate();
                                    }
                                }
                            }
                        })
                        BackboneFormView.add(this);
                    }),
                    bindings: _.extend(CreditCardEditFormView.prototype.bindings, {
                        '[name="ccmemo"]': 'ccmemo'
                    }),
                    getContext: _.wrap(CreditCardEditFormView.prototype.getContext, function(fn) {
                        var originalRet = fn.apply(this, _.toArray(arguments).slice(1));
                        originalRet.ccmemo = this.model.get('ccmemo') // @property {String} ccmemo
                        return originalRet;
                    })
                })
                _.extend(CreditCardView.prototype, {
                    template: jj_creditcardextensiontpl,
                    getContext: _.wrap(CreditCardView.prototype.getContext, function(fn) {
                        var originalRet = fn.apply(this, _.toArray(arguments).slice(1));
                       // console.log('CreditCardEditFormView', this)
                        originalRet.ccmemo = this.model.get('ccmemo') // @property {String} ccmemo
                        return originalRet;
                    })

                })
                
            }
        };
    });
Suitescript



// JJ.creditCardExtension.creditCardExtension.js
// Load all your starter dependencies in backend for your extension here
// ----------------

define('JJ.creditCardExtension.creditCardExtension', [
    //'JJ.creditCardExtension.creditCardExtension.ServiceController'
    'SC.Model', 'SC.Models.Init', 'underscore', 'PaymentInstrument.Model', "JJ.creditCardExtension.extend",'CreditCard.Model'
], function(
    //creditCardExtensionServiceController

    SCModel,
    ModelsInit,
    _,
    PaymentInstrumentModel, creditCardExtension,CreditCardModel
) {
    'use strict';
    _.extend(PaymentInstrumentModel, {
        get:function(id) {
            try{
                var customerID = nlapiGetUser();
                var enablepaymentfeature=ModelsInit.context.getSetting('FEATURE', 'PAYMENTINSTRUMENTS');
                var flag ='get';
                var scriptId = 'customscriptctg_58_jj_creditcard_ext',deploymentId = 'customdeployctg_58_jj_creditcard_ext';
                var requestURL = nlapiResolveURL('SUITELET', scriptId, deploymentId, 'external');
                requestURL = requestURL + "&customerId=" + customerID+ "&id=" + id + "&flag=" + flag +"&enablepaymentfeature=" + enablepaymentfeature;
                var responseData = nlapiRequestURL(requestURL);
                responseData = JSON.parse(responseData.getBody());
                var memoList=responseData.response=="SUCCESS"? responseData.message:[];
                var credit_cardList= _.each(ModelsInit.customer.getCreditCard(id), function(credit_card) {
                    credit_card['memo']=memoList[credit_card['internalid']].memo;
                    credit_card['street']=memoList[credit_card['internalid']].address;
                    credit_card['zipcode']=memoList[credit_card['internalid']].pcode;
                    return credit_card;
                });
                return credit_cardList
            }catch(err){
                return ModelsInit.customer.getCreditCard(id);
            }
        },
        list:function() {
            // Update the credit card if the data is valid
            var customerID = nlapiGetUser();
            var flag ='get';
			var enablepaymentfeature=ModelsInit.context.getSetting('FEATURE', 'PAYMENTINSTRUMENTS');
            var scriptId = 'customscriptctg_58_jj_creditcard_ext',deploymentId = 'customdeployctg_58_jj_creditcard_ext';
            var requestURL = nlapiResolveURL('SUITELET', scriptId, deploymentId, 'external');
            requestURL = requestURL + "&customerId=" + customerID + "&flag=" + flag +"&enablepaymentfeature=" + enablepaymentfeature;
            var responseData = nlapiRequestURL(requestURL);
            responseData = JSON.parse(responseData.getBody())
            var memoList=responseData.response=="SUCCESS"? responseData.message:[];
            var credit_cardList= _.each(ModelsInit.customer.getCreditCards(), function(credit_card) {
                credit_card['memo']=memoList[credit_card['internalid']]?memoList[credit_card['internalid']].memo:'';
                credit_card['street']=memoList[credit_card['internalid']]?memoList[credit_card['internalid']].address:'';
                credit_card['zipcode']=memoList[credit_card['internalid']]?memoList[credit_card['internalid']].pcode:'';
                return credit_card;
            });
            return _.filter(credit_cardList, function(credit_card) {
                return credit_card.paymentmethod;
            });
        },
        update: _.wrap(PaymentInstrumentModel.update, function(fn) {
            var originalupdate2 = _.toArray(arguments);
            var originalupdate = fn.apply(this, _.toArray(arguments).slice(1));
            var enablepaymentfeature=ModelsInit.context.getSetting('FEATURE', 'PAYMENTINSTRUMENTS');
            var flag ='update';
            var argument =JSON.parse(JSON.stringify(arguments[2]))
            var nickname = argument?argument["memo"]:"";
            var cardaddress = argument?argument["street"]:"";
            var cardzip = argument?argument["zipcode"]:"";
            //var id = null;
           // var id = argument?argument.ccnumber:"";
            var id = originalupdate;
            var customerID = nlapiGetUser();
            var scriptId = 'customscriptctg_58_jj_creditcard_ext',deploymentId = 'customdeployctg_58_jj_creditcard_ext';
            var requestURL = nlapiResolveURL('SUITELET', scriptId, deploymentId, 'external');
            requestURL = requestURL + "&customerId=" + customerID + "&nickname=" + nickname +"&id=" + id +"&flag=" + flag + "&cardaddress=" + cardaddress + "&cardzip=" + cardzip + "&enablepaymentfeature=" + enablepaymentfeature;
            var responseData = nlapiRequestURL(requestURL);
            responseData = JSON.parse(responseData.getBody())
            return originalupdate
        }),

        create: _.wrap(PaymentInstrumentModel.create, function(fn) {
            var createOrigin = fn.apply(this, _.toArray(arguments).slice(1));
            var enablepaymentfeature=ModelsInit.context.getSetting('FEATURE', 'PAYMENTINSTRUMENTS');
            var flag ='update';
            var argument =JSON.parse(JSON.stringify(arguments[1]))
            var nickname = argument?argument["memo"]:"";
            var cardaddress = argument?argument["street"]:"";
            var cardzip = argument?argument["zipcode"]:"";
            var id = createOrigin;
            var customerID = nlapiGetUser();
            var scriptId = 'customscriptctg_58_jj_creditcard_ext',deploymentId = 'customdeployctg_58_jj_creditcard_ext';
            var requestURL = nlapiResolveURL('SUITELET', scriptId, deploymentId, 'external');
            requestURL = requestURL + "&customerId=" + customerID + "&nickname=" + nickname +"&id=" + id +"&flag=" + flag + "&cardaddress=" + cardaddress + "&cardzip=" + cardzip +"&enablepaymentfeature=" + enablepaymentfeature;
            var responseData = nlapiRequestURL(requestURL);
            responseData = JSON.parse(responseData.getBody())
            return createOrigin
        })
    });
    _.extend(CreditCardModel, {
        get:function(id) {
            try{
                var customerID = nlapiGetUser();
                var enablepaymentfeature=ModelsInit.context.getSetting('FEATURE', 'PAYMENTINSTRUMENTS');
                var flag ='get';
                var scriptId = 'customscriptctg_58_jj_creditcard_ext',deploymentId = 'customdeployctg_58_jj_creditcard_ext';
                var requestURL = nlapiResolveURL('SUITELET', scriptId, deploymentId, 'external');
                requestURL = requestURL + "&customerId=" + customerID+ "&id=" + id + "&flag=" + flag +"&enablepaymentfeature=" + enablepaymentfeature;
                var responseData = nlapiRequestURL(requestURL);
                responseData = JSON.parse(responseData.getBody())
                var memoList=responseData.response=="SUCCESS"? responseData.message:[]
                var credit_cardList= _.each(ModelsInit.customer.getCreditCard(id), function(credit_card) {
                    credit_card['ccmemo']=memoList[credit_card['internalid']]
                    return credit_card;
                });
                return credit_cardList
            }catch(err){
                // Return a specific credit card
                return ModelsInit.customer.getCreditCard(id);
            }
        },
        list:function() {
            // Update the credit card if the data is valid
            var customerID = nlapiGetUser();
            var enablepaymentfeature=ModelsInit.context.getSetting('FEATURE', 'PAYMENTINSTRUMENTS');
            var flag ='get';
            var scriptId = 'customscriptctg_58_jj_creditcard_ext',deploymentId = 'customdeployctg_58_jj_creditcard_ext';
            var requestURL = nlapiResolveURL('SUITELET', scriptId, deploymentId, 'external');
            requestURL = requestURL + "&customerId=" + customerID + "&flag=" + flag +"&enablepaymentfeature=" + enablepaymentfeature;
            var responseData = nlapiRequestURL(requestURL);
            responseData = JSON.parse(responseData.getBody())
            var memoList=responseData.response=="SUCCESS"? responseData.message:[]
            var credit_cardList= _.each(ModelsInit.customer.getCreditCards(), function(credit_card) {
                credit_card['ccmemo']=memoList[credit_card['internalid']]
                return credit_card;
            });
            return _.filter(credit_cardList, function(credit_card) {
                return credit_card.paymentmethod;
            });
        },
        update: _.wrap(CreditCardModel.update, function(fn) {
            var originalupdate2 = _.toArray(arguments);
            var originalupdate = fn.apply(this, _.toArray(arguments).slice(1));
            var flag ='update';
            var enablepaymentfeature=ModelsInit.context.getSetting('FEATURE', 'PAYMENTINSTRUMENTS');             
            var argument =JSON.parse(JSON.stringify(arguments[2]))           
            var nickname = argument?argument["ccmemo"]:"";          
            var id = argument?argument.internalid:"";
            var customerID = nlapiGetUser();
            var scriptId = 'customscriptctg_58_jj_creditcard_ext',deploymentId = 'customdeployctg_58_jj_creditcard_ext';
            var requestURL = nlapiResolveURL('SUITELET', scriptId, deploymentId, 'external');
            requestURL = requestURL + "&customerId=" + customerID + "&nickname=" + nickname +"&id=" + id +"&flag=" + flag +"&enablepaymentfeature=" + enablepaymentfeature;
            var responseData = nlapiRequestURL(requestURL);
            responseData = JSON.parse(responseData.getBody())
            return originalupdate
        }),

        create: _.wrap(CreditCardModel.create, function(fn) {
            var createOrigin = fn.apply(this, _.toArray(arguments).slice(1));
            var flag ='update';
            var enablepaymentfeature=ModelsInit.context.getSetting('FEATURE', 'PAYMENTINSTRUMENTS');
            var argument =JSON.parse(JSON.stringify(arguments[1]))
            var nickname = argument?argument["ccmemo"]:"";
            var id = createOrigin;
            var customerID = nlapiGetUser();
            var scriptId = 'customscriptctg_58_jj_creditcard_ext',deploymentId = 'customdeployctg_58_jj_creditcard_ext';
            var requestURL = nlapiResolveURL('SUITELET', scriptId, deploymentId, 'external');
            requestURL = requestURL + "&customerId=" + customerID + "&nickname=" + nickname +"&id=" + id +"&flag=" + flag +"&enablepaymentfeature=" + enablepaymentfeature;
            var responseData = nlapiRequestURL(requestURL);
            responseData = JSON.parse(responseData.getBody())
            return createOrigin
        })
    });
});

Suitelet

/*******************************************************************************
   Jobin & Jismi IT Services | Good Earth | This script will update the memo field on credit card edit page *
  *************************************************************************
 *
 * Author: Jobin & Jismi IT Services LLP
 *
 * Date Created :
 *
 * Created By : Jobin & Jismi IT Services LLP
 *
 * SCRIPT ID:
 *
 * DEPLOYMENT ID:
 *
 * REVISION HISTORY 1.0 AB
 *                  1.1 MD
 *
 *
 ******************************************************************************/
function CreditCardExtension(request, response) {
    try {
        if (request.getMethod() == 'GET') {

            var lineID = request.getParameter('id');
            var memoArray = [];
            var ccObj = {};
            var enablepaymentfeature= request.getParameter('enablepaymentfeature');
            var CustomerID = request.getParameter('customerId');
            var flag = request.getParameter('flag');
            var nickname = request.getParameter('nickname');
            var cardaddress = request.getParameter('cardaddress');
            var cardzip = request.getParameter('cardzip');
            var CustRecord = nlapiLoadRecord('customer', CustomerID);
            var resultJSON = formatResponse("SUCCESS", lineID, null);
            if(enablepaymentfeature == 'T'){
                var findline = CustRecord.findLineItemValue('paymentinstruments', 'id', lineID);
            } else {
                var findline = CustRecord.findLineItemValue('creditcards', 'internalid', lineID);
            }
            nlapiLogExecution('ERROR', 'findline', findline);

            if (flag === "update") {
                if(enablepaymentfeature == 'T'){
                    nlapiLogExecution('ERROR', 'enablepaymentfeature update INSIDE T', enablepaymentfeature);
                    CustRecord.selectLineItem('paymentinstruments', findline);
                    var paycard=CustRecord.getCurrentLineItemValue('paymentinstruments', 'id');
                    var PayRecord=nlapiLoadRecord('paymentcard', paycard);
                    PayRecord.setFieldValue('memo',nickname);
                    PayRecord.setFieldValue('street',cardaddress);
                    PayRecord.setFieldValue('zipcode',cardzip);
                    nlapiSubmitRecord(PayRecord);
                } else {
                    nlapiLogExecution('ERROR', 'enablepaymentfeature get OUTSIDE T', enablepaymentfeature);
                    CustRecord.selectLineItem('creditcards', findline);
                    CustRecord.setCurrentLineItemValue('creditcards', 'ccmemo', nickname);
                    CustRecord.commitLineItem('creditcards');
                    nlapiSubmitRecord(CustRecord);
                }
            }
            if (flag === "get") {
                if(enablepaymentfeature == 'T'){
                    nlapiLogExecution('ERROR', 'enablepaymentfeature get INSIDE T', enablepaymentfeature);
                    if (findline>-1) {
                    nlapiLogExecution('ERROR', 'testval', 'inside get');
                        CustRecord.selectLineItem('paymentinstruments', findline);
                        var paycard=CustRecord.getCurrentLineItemValue('paymentinstruments', 'id');
                        var PayRecord=nlapiLoadRecord('paymentcard', paycard);
                        var nickname_memo = PayRecord.getFieldValue('memo');
                        var cardbilladdress = PayRecord.getFieldValue('street');
                        var cardzipcode = PayRecord.getFieldValue('zipcode');
                        ccObj[lineID] = {
                                        memo:nickname_memo,
                                        address:cardbilladdress,
                                        pcode:cardzipcode
                                        }
                        nlapiLogExecution('ERROR', 'ccObj', ccObj);
                    } else {
                        var ItemCount = CustRecord.getLineItemCount('paymentinstruments')
                        // nlapiLogExecution('DEBUG', 'ItemCount', ItemCount);
                        for (var i = 1; i <= ItemCount; i++) {
                            CustRecord.selectLineItem('paymentinstruments', i);
                            var paycard=CustRecord.getCurrentLineItemValue('paymentinstruments', 'id');
                            var PayRecord=nlapiLoadRecord('paymentcard', paycard);
                            var nickname_memo = PayRecord.getFieldValue('memo');
                            var cardbilladdress = PayRecord.getFieldValue('street');
                            var cardzipcode = PayRecord.getFieldValue('zipcode');
                            ccObj[paycard] = {
                                memo:nickname_memo,
                                address:cardbilladdress,
                                pcode:cardzipcode
                                }
                            nlapiLogExecution('ERROR', 'ccObj', ccObj);
                        }
                    }
                    resultJSON = formatResponse("SUCCESS", ccObj, null);

                } else {
                    nlapiLogExecution('ERROR', 'enablepaymentfeature get OUTSIDE T', enablepaymentfeature);
                    if (findline>-1) {
                        CustRecord.selectLineItem('creditcards', findline);
                        var nickname_memo = CustRecord.getCurrentLineItemValue('creditcards', 'ccmemo');
                        ccObj[lineID] = nickname_memo;
                    } else {
                        var ItemCount = CustRecord.getLineItemCount('creditcards')
                        nlapiLogExecution('DEBUG', 'ItemCount', ItemCount);
                        for (var i = 1; i <= ItemCount; i++) {
                            nlapiLogExecution('DEBUG', 'line', i);
                            CustRecord.selectLineItem('creditcards', i);
                            var nickname_memo = CustRecord.getCurrentLineItemValue('creditcards', 'ccmemo');
                            var id = CustRecord.getCurrentLineItemValue('creditcards', 'internalid');
                            ccObj[id] = nickname_memo;
                        }
                    }
                    resultJSON = formatResponse("SUCCESS", ccObj, null);
                }
            }

            response.write(resultJSON);
        }
    } catch (error) {
        nlapiLogExecution('DEBUG', 'CreditCardExtension', error);
        var resultJSON = formatResponse("FAILURE", "ERROR WHILE Updating Nickname", "@main.updateQuote", error.message);
        response.write(resultJSON);
    }
}

function formatResponse(SHORT_RESPONSE, LONG_RESPONSE, FAULT_POSITION, MORE_INFO) {
    var responseObj = {};
    responseObj.response = (SHORT_RESPONSE) ? SHORT_RESPONSE : "FAILURE";
    responseObj.message = (LONG_RESPONSE) ? LONG_RESPONSE : null;
    responseObj.position = (FAULT_POSITION) ? FAULT_POSITION : null;
    responseObj.information = (MORE_INFO) ? MORE_INFO : null;
    return JSON.stringify(responseObj);
}

Leave a comment

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