The script that calculates commissions on invoices.

Jira code : CD-12

When an invoice is paid, the script calculates commissions based on % defined at the sales rep record and updates the invoice with the commission to be paid. After accepting payment the commission amount will be set in both sales order and invoice record.

User Event Script:-

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
/**
 * Script Description
 *  In SO, Calculates commission based on value in commission field.
.
 *  
 */
/*******************************************************************************
 * CORP DESIGN
 * **************************************************************************
 * 
 * Date: 23/05/2019
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 * 
 * REVISION HISTORY
 * 
 * Revision  $ 23/05/2019 Maria: Create
 * 
 ******************************************************************************/
define(['N/record','N/search'],

function(record, search) {  


    /**
     * Function definition to be triggered before record is loaded.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.newRecord - New record
     * @param {Record} scriptContext.oldRecord - Old record
     * @param {string} scriptContext.type - Trigger type
     * @Since 2015.2
     */
    function afterSubmit(scriptContext) {
    	
    	try{
    		
    		if(scriptContext.type == 'create'){
	    		var numLines = scriptContext.newRecord.getLineCount({
	                sublistId: 'apply'
	            });
	            var invoiceArray = [];
	            var invoiceId;
	            for (var i = 0; i < numLines; i++) {
	            	
	            	var applyvalue = scriptContext.newRecord.getSublistValue({
	                    sublistId: 'apply',
	                    fieldId: 'apply',
	                    line: i
	                });
	            	
	            	if(applyvalue == true){      
	            		
		                var dataObj = {};
		                dataObj.invId = scriptContext.newRecord.getSublistValue({
		                    sublistId: 'apply',
		                    fieldId: 'internalid',
		                    line: i
		                });
		                logme("dataObj.invId",dataObj.invId);
		                dataObj.amt = scriptContext.newRecord.getSublistValue({
		                    sublistId: 'apply',
		                    fieldId: 'amount',
		                    line: i
		                });
		                logme("dataObj.amt",dataObj.amt);
		                var commisPerc = search.lookupFields({
		                    type: search.Type.INVOICE,
		                    id: dataObj.invId,
		                    columns: ['custbody_cd12_sales_rep_comm_percent']
		                });
		                
		                logme("commisPerc",commisPerc);
		                var commisPerct = (commisPerc.custbody_cd12_sales_rep_comm_percent).split("%");
		                logme("commisPerct",commisPerct);
		                dataObj.commisPerct = commisPerct[0];
		                dataObj.commisAmt = parseFloat(dataObj.amt) * parseFloat(dataObj.commisPerct)/ 100;  
		                
		                logme("dataObj.commisPerct",dataObj.commisPerct);
		                logme("dataObj.commisAmt",dataObj.commisAmt);
		                
		                invoiceArray.push(dataObj);              	                
	            	}
	            }
	            
	            var inv_length = invoiceArray.length;
	            updateinvoice(invoiceArray);
    		}   
	    }catch (e) {
			logme("error@afterSubmit", getError(e));
		}
    }
    
    function updateinvoice(invoiceArray){
    	
    	try{  		
    		
    		 for (var i = 0, len = invoiceArray.length; i < len; i++) {
    			 
                 var invoice = invoiceArray[i];
                 var inv_id = invoice.invId;
                 var commisAmt = invoice.commisAmt;
                 var commisPerct = invoice.commisPerct;
                 
                 var invoicesLoad = record.load({
                     type: "invoice",
                     id: inv_id,
                     isDynamic: true
                 });
                 
                 var commission_amount = invoicesLoad.getValue({
                     fieldId: 'custbody_cd12_invsales_rep_comm_amount'
                 });
                 
                 if(commission_amount){
                	 
                	 var new_INVcomm_amount = parseFloat(commission_amount) + parseFloat(commisAmt);
                	 logme("new_INVcomm_amount",new_INVcomm_amount);
                	 invoicesLoad.setValue({
                         fieldId: 'custbody_cd12_invsales_rep_comm_amount',
                         value: parseFloat(new_INVcomm_amount)
                     });
                	 invoicesLoad.setValue({
                         fieldId: 'custbody_cd12_invsales_rep_comm_prcnt',
                         value: commisPerct
                    });
                	 
                 }else{
                	 invoicesLoad.setValue({
                         fieldId: 'custbody_cd12_invsales_rep_comm_amount',
                         value: parseFloat(commisAmt)
                     });
                    invoicesLoad.setValue({
                         fieldId: 'custbody_cd12_invsales_rep_comm_prcnt',
                         value: commisPerct
                    });
                 }                                 
                 
                 var invoice_record = invoicesLoad.save();
                 
                 var salesorderid = invoicesLoad.getValue({
                     fieldId: 'createdfrom'
                 });                 
                 var salesLoad = record.load({
                     type: "salesorder",
                     id: salesorderid,
                     isDynamic: true
                 });

                 var sales_commissionamount = salesLoad.getValue({
                     fieldId: 'custbody_cd12_sales_rep_comm_amount'
                 });
                 
                 if(sales_commissionamount){
                	 
                	 var new_salescomm_amount = parseFloat(commisAmt) + parseFloat(sales_commissionamount);    
                	 logme("new_salescomm_amount",new_salescomm_amount);
                     
                     salesLoad.setValue({
                         fieldId: 'custbody_cd12_sales_rep_comm_amount',
                         value: parseFloat(new_salescomm_amount)
                     });
                 }else{
                	 salesLoad.setValue({
                         fieldId: 'custbody_cd12_sales_rep_comm_amount',
                         value: parseFloat(commisAmt)
                     });
                 }                 
                 var sales_record = salesLoad.save();
                 
                 
    		 }    		    
              	
	    }catch (e) {
			logme("error@updateinvoice", getError(e));
		}
	    	
    }
    
    /*******************************************************************************
	 * return error
	 * 
	 * @param e
	 * @returns
	 * 
	 * Created on 22-Feb-2019 by Maria
	 */
	function getError(e) {
		var stErrMsg = '';
		if (e.getDetails != undefined) {
			stErrMsg = '_' + e.getCode() + '<br>' + e.getDetails() + '<br>'
			+ e.getStackTrace();
		} else {
			stErrMsg = '_' + e.toString();
		}
		return stErrMsg;
	}

	/*******************************************************************************
	 * Log these data
	 * 
	 * @param title
	 * @param details
	 * @returns
	 * 
	 * Created on 22-Feb-2019 by Maria
	 */
	function logme(title, details) {
		log.debug({
			title : title,
			details : details
		});
	}

    return {
        //beforeLoad: beforeLoad,
        //beforeSubmit: beforeSubmit,
        afterSubmit: afterSubmit
    };
    
});

Leave a comment

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