Skip Spiff and commission calculation if a transaction has a replacement item.

Jira Code: CORP-49

Description

We have to skip the calculation for spiff and commission amount if the sales order has a replacement item.
The spiff calculated when there is a spiff person, the invoice is “paid in full” and there is no replacement item.
The commission is calculated when the invoice is “paid in full”.

COMMISSION AMOUNT

/**
 * @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
*           19/06/2019   Anju Babu:Updated           
 * 
 ******************************************************************************/
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 payment = record.load({
                        type: "customerpayment",
                        id: scriptContext.newRecord.id,
                        isDynamic: false
                    });
                    var numLines = payment.getLineCount({
                        sublistId: 'apply'
                    });
                    var invoiceArray = [];
                    var invoiceId;
                    for (var i = 0; i < numLines; i++) {

                        var applyvalue = payment.getSublistValue({
                            sublistId: 'apply',
                            fieldId: 'apply',
                            line: i
                        });

                        var INVtYPE = payment.getSublistValue({
                            sublistId: 'apply',
                            fieldId: 'type',
                            line: i
                        });
                        log.debug("INVtYPE", INVtYPE)
                        if (applyvalue == true && INVtYPE == "Invoice") {

                            var dataObj = {};
                            var invId = payment.getSublistValue({
                                sublistId: 'apply',
                                fieldId: 'internalid',
                                line: i
                            });
                            var amt = invItemInvoice(invId)
                            var checkReplacement = search.lookupFields({
                                type: search.Type.INVOICE,
                                id: invId,
                                columns: ['custbody_corp49_skip_replacemnt']
                            });
                            var invoiceSales = search.lookupFields({
                                type: search.Type.INVOICE,
                                id: invId,
                                columns: ['salesrep']
                            });
                            log.debug(invoiceSales);
                            var invoiceSalesId = invoiceSales.salesrep[0].value;
                            var commisPerc = search.lookupFields({
                                type: search.Type.EMPLOYEE,
                                id: invoiceSalesId,
                                columns: ['custentity_cd12_jj_commi_percent']
                            });
                            /*var commisPerc = search.lookupFields({
                                type: search.Type.INVOICE,
                                id: invId,
                                columns: ['custbody_cd12_sales_rep_comm_percent']
                            });*/
                            var innvoiceStatus = search.lookupFields({
                                type: search.Type.INVOICE,
                                id: invId,
                                columns: ['status']
                            });
                            var oldVal = search.lookupFields({
                                type: search.Type.INVOICE,
                                id: invId,
                                columns: ['custbody_cd12_invsales_rep_comm_amount']
                            });
                            log.debug(innvoiceStatus, innvoiceStatus.status[0].text);
                            var ststusInvoice = innvoiceStatus.status[0].text;
                            log.debug(checkReplacement, checkReplacement)
                            if (!oldVal.custbody_cd12_invsales_rep_comm_amount && ststusInvoice == "Paid In Full" && checkReplacement.custbody_corp49_skip_replacemnt == false) {
                                dataObj.invId = invId;

                                dataObj.amt = amt;

                                log.debug('dataObj.amt', dataObj.amt)
                                // dataObj.amt = scriptContext.newRecord.getSublistValue({
                                //     sublistId: 'apply',
                                //     fieldId: 'amount',
                                //     line: i
                                // });
                                dataObj.commisPerct = 0;
                                dataObj.commisAmt = 0;
                                var commisPerct = (commisPerc.custentity_cd12_jj_commi_percent).split("%");
                                log.debug(' commisPerct', commisPerct);
                                if (commisPerct != null && commisPerct !== undefined && commisPerct != "" && commisPerct != " " && commisPerct != NaN) {
                                    log.debug(' entry dataObj.commisAmt', dataObj.commisAmt);
                                    dataObj.commisPerct = commisPerct[0];
                                    dataObj.commisAmt = parseFloat(dataObj.amt) * parseFloat(dataObj.commisPerct) / 100;
                                }
                                log.debug(' dataObj.commisAmt1', dataObj.commisAmt)
                                invoiceArray.push(dataObj);
                            }

                        }
                    }
                    log.debug('invoiceArray', invoiceArray);
                    var inv_length = invoiceArray.length;
                    if (inv_length > 0)
                        updateinvoice(invoiceArray);
                }
            } catch (e) {
                logme("error@afterSubmit", getError(e));
            }
        }

        function beforeSubmit(scriptContext) {

            try {
                log.debug("entry", "entry");

                log.debug("scriptContext", scriptContext)
                var oldRecId = scriptContext.oldRecord.id;
                log.debug('oldRecId', oldRecId)
                if (scriptContext.type == "delete") {

                    var invoiceRec = record.load({
                        type: "customerpayment",
                        id: oldRecId,
                        isDynamic: false
                    });
                    var numLines = invoiceRec.getLineCount({
                        sublistId: 'apply'
                    });
                    var invoiceArray = [];
                    var invoiceId;
                    for (var i = 0; i < numLines; i++) {

                        var applyvalue = invoiceRec.getSublistValue({
                            sublistId: 'apply',
                            fieldId: 'apply',
                            line: i
                        });

                        var INVtYPE = invoiceRec.getSublistValue({
                            sublistId: 'apply',
                            fieldId: 'type',
                            line: i
                        }); //
                        if (applyvalue == true && INVtYPE == "Invoice") {

                            var dataObj = {};
                            var invId = invoiceRec.getSublistValue({
                                sublistId: 'apply',
                                fieldId: 'internalid',
                                line: i
                            });
                            var amt = invItemInvoice(invId);
                            log.debug(12);
                            var checkReplacement = search.lookupFields({
                                type: search.Type.INVOICE,
                                id: invId,
                                columns: ['custbody_corp49_skip_replacemnt']
                            });
                            log.debug(123);
                            var invoiceSales = search.lookupFields({
                                type: search.Type.INVOICE,
                                id: invId,
                                columns: ['salesrep']
                            });
                            log.debug(invoiceSales);
                            var invoiceSalesId = invoiceSales.salesrep[0].value;
                            log.debug(invoiceSalesId);
                            var commisPerc = search.lookupFields({
                                type: search.Type.EMPLOYEE,
                                id: invoiceSalesId,
                                columns: ['custentity_cd12_jj_commi_percent']
                            });
                            log.debug(12456);
                            log.debug(commisPerc, commisPerc);
                            var innvoiceStatus = search.lookupFields({
                                type: search.Type.INVOICE,
                                id: invId,
                                columns: ['status']
                            });
                            log.debug(innvoiceStatus, innvoiceStatus)
                            var ststusInvoice = innvoiceStatus.status[0].text;
                            log.debug(checkReplacement, checkReplacement)
                            if (ststusInvoice == "Paid In Full" && checkReplacement.custbody_corp49_skip_replacemnt == false) {
                                dataObj.invId = invId;

                                dataObj.amt = -amt;

                                log.debug('dataObj.amt', dataObj.amt)
                                // dataObj.amt = scriptContext.newRecord.getSublistValue({
                                //     sublistId: 'apply',
                                //     fieldId: 'amount',
                                //     line: i
                                // });
                                dataObj.commisPerct = 0;
                                dataObj.commisAmt = 0;
                                log.debug(commisPerc.custentity_cd12_jj_commi_percent);
                                var commisPerct = (commisPerc.custentity_cd12_jj_commi_percent).split("%");
                                log.debug(' commisPerct2', commisPerct)
                                if (commisPerct != null && commisPerct !== undefined && commisPerct != "" && commisPerct != " " && commisPerct != NaN) {
                                    log.debug(' entry 2 dataObj.commisAmt', dataObj.commisAmt)
                                    dataObj.commisPerct = commisPerct[0];
                                    dataObj.commisAmt = parseFloat(dataObj.amt) * parseFloat(dataObj.commisPerct) / 100;
                                }
                            }
                            log.debug(' dataObj.commisAmt2', dataObj.commisAmt)
                            invoiceArray.push(dataObj);
                        }
                    }
                    log.debug('invoiceArray', invoiceArray);
                    var inv_length = invoiceArray.length;
                    if (inv_length > 0)
                        updateinvoice(invoiceArray);
                }
            } catch (e) {
                logme("error@beforeSubmit", 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 = 0;
                    var commisPerct = 0;
                    if (invoice.commisAmt != null && invoice.commisAmt !== undefined && invoice.commisAmt != "" && invoice.commisAmt != " " && invoice.commisAmt != NaN)
                        commisAmt = invoice.commisAmt;

                    if (invoice.commisPerct != null && invoice.commisPerct !== undefined && invoice.commisPerct != "" && invoice.commisPerct != " " && invoice.commisPerct != NaN)
                        commisPerct = invoice.commisPerct;
                    log.debug("inv_id", inv_id);
                    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) {
                        invoicesLoad.setValue({
                            fieldId: 'custbody_cd12_invsales_rep_comm_amount',
                            value: (parseFloat(commisAmt)).toFixed(3)
                        });
                        invoicesLoad.setValue({
                            fieldId: 'custbody_cd12_invsales_rep_comm_prcnt',
                            value: commisPerct
                        });
                        var salesorderid = invoicesLoad.getValue({
                            fieldId: 'createdfrom'
                        });
                        if (salesorderid) {
                            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);

                                salesLoad.setValue({
                                    fieldId: 'custbody_cd12_sales_rep_comm_amount',
                                    value: (parseFloat(new_salescomm_amount)).toFixed(3)
                                });
                            } else {
                                salesLoad.setValue({
                                    fieldId: 'custbody_cd12_sales_rep_comm_amount',
                                    value: (parseFloat(commisAmt)).toFixed(3)
                                });
                            }
                            var sales_record = salesLoad.save();
                        }


                    }

                    var invoice_record = invoicesLoad.save();


                }

            } catch (e) {
                logme("error@updateinvoice", getError(e));
            }

        }
        /*******************************************************************************
        Function to find the inventory items from invoice
         ******************************************************************************/

        function invItemInvoice(invId) {
            try {
                var amount_total = 0;
                var invoiceRec = record.load({
                    type: "invoice",
                    id: invId,
                    isDynamic: true
                });
                var numLines = invoiceRec.getLineCount({
                    sublistId: 'item'
                });
                log.debug('numLines', numLines)
                for (i = 0; i < numLines; i++) {
                    var item_type = invoiceRec.getSublistValue({
                        sublistId: 'item',
                        fieldId: 'itemtype',
                        line: i
                    });
                    log.debug('item_type', item_type)
                    if (item_type == 'InvtPart') {
                        var item_amount = invoiceRec.getSublistValue({
                            sublistId: 'item',
                            fieldId: 'amount',
                            line: i
                        });
                        log.debug('item_amount', item_amount)
                        amount_total += item_amount;
                    }



                }
                return amount_total;
            } catch (err) {
                log.debug('error @ invItemInvoice ', err)
            }
        }
        /*******************************************************************************
         * 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
        };

    });

SPIFF AMOUNT

    /**
     * @NApiVersion 2.x
     * @NScriptType UserEventScript
     * @NModuleScope SameAccount
     */
    /*******************************************************************************
     * CD-13 UE Update Spiff Amount
     * **************************************************************************
     * 
     * Date: 03-05-2019 ANJU:CREATE
     *       19/06/2019 UPDATED
     * Author: Jobin & Jismi IT Services LLP
     * 
     *****************************************************************************
     **/
    define(['N/format', 'N/url', 'N/search', 'N/runtime', 'N/record', 'N/https', 'N/ui/serverWidget'],

        function(format, url, search, runtime, record, https, serverWidget) {
            var main = {
                afterSubmit: function(scriptContext) {
                    log.debug("scriptContext", scriptContext)
                    var newRecId = scriptContext.newRecord.id;
                    if (scriptContext.type == "edit") {

                        var payment = record.load({
                            type: "customerpayment",
                            id: newRecId,
                            isDynamic: false
                        });
                        var numLines = payment.getLineCount({
                            sublistId: 'apply'
                        });
                        var invoiceArray = [];


                        for (var k = 0; k < numLines; k++) {
                            var itemid = payment.getSublistValue({
                                sublistId: 'apply',
                                fieldId: 'internalid',
                                line: k
                            });
                            var applyvalue = payment.getSublistValue({
                                sublistId: 'apply',
                                fieldId: 'apply',
                                line: k
                            });
                            var INVtYPE = payment.getSublistValue({
                                sublistId: 'apply',
                                fieldId: 'type',
                                line: k
                            });
                            if (applyvalue == true && INVtYPE == "Invoice")
                                invoiceArray.push(itemid);
                        }
                        log.debug(invoiceArray);
                        for (var index = 0, len = invoiceArray.length; index < len; index++) {
                            var Id = invoiceArray[index];
                            log.debug("Id", Id)
                            var invoiceLoad = record.load({
                                type: "invoice",
                                id: Id,
                                isDynamic: false
                            });
                            var statusinvoice = invoiceLoad.getValue({
                                fieldId: 'status'
                            })
                            log.debug("statusinvoice", statusinvoice)

                            var spiffinvoice = invoiceLoad.getText({
                                fieldId: 'custbody_corpdesign_spiff'
                            })
                            var replacement = invoiceLoad.getText({
                                fieldId: 'custbody_corp49_skip_replacemnt'
                            })
                            log.debug('replacement', replacement)
                            log.debug("spiffinvoice", spiffinvoice)
                            var oldval = invoiceLoad.getValue({
                                fieldId: 'custbodyjj_spiff_amount_custom'

                            });
                            log.debug("oldval", oldval);
                            if (!oldval && statusinvoice == "Paid In Full" && spiffinvoice != '' && replacement == "F") {

                                var numLines1 = invoiceLoad.getLineCount({
                                    sublistId: 'item'
                                });
                                log.debug("invoicenum", numLines1)
                                var spiffamount = 0;
                                for (var n = 0; n < numLines1; n++) {
                                    var item_type = invoiceLoad.getSublistValue({
                                        sublistId: 'item',
                                        fieldId: 'itemtype',
                                        line: n
                                    });
                                    if (item_type == 'InvtPart') {
                                        var invoiceAmount = invoiceLoad.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'rate',
                                            line: n
                                        });
                                        var invoiceQty = invoiceLoad.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'quantity',
                                            line: n
                                        });
                                        var classpiff = invoiceLoad.getSublistText({
                                            sublistId: 'item',
                                            fieldId: 'class',
                                            line: n
                                        });

                                        var classpiff = invoiceLoad.getSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'class',
                                            line: n
                                        });
                                        if (classpiff) {
                                            var classpiff = main.getSpiffpercent(classpiff);
                                            var spiffRate;
                                            if (classpiff[classpiff.length - 1] === '%') {
                                                // log.debug("classpiff", classpiff)

                                                spiffRate = (parseFloat(invoiceAmount) * parseFloat(classpiff) / 100) * parseFloat(invoiceQty);
                                                log.debug("spiffRateperce", spiffRate.toFixed(2))
                                            } else {
                                                spiffRate = parseFloat(invoiceQty) * parseFloat(classpiff);

                                                log.debug("spiffRatecclcamm", spiffRate.toFixed(2))
                                            }
                                            invoiceLoad.setSublistValue({
                                                sublistId: 'item',
                                                fieldId: 'custcoljj_spiff_custom',
                                                line: n,
                                                value: spiffRate
                                            });

                                            spiffamount = parseFloat(spiffamount) + parseFloat(spiffRate);
                                            log.debug("spiffamount", spiffamount.toFixed(2))
                                        }
                                    }

                                }
                                log.debug("spiffamounttotal", spiffamount.toFixed(2))


                                invoiceLoad.setValue({
                                    fieldId: 'custbodyjj_spiff_amount_custom',
                                    value: spiffamount
                                });
                                var salesorderid = invoiceLoad.getValue({
                                    fieldId: 'createdfrom'
                                })
                                main.salesorder(salesorderid, spiffamount, Id);
                            }

                            var invoiceLoadId = invoiceLoad.save();
                            log.debug(invoiceLoadId);
                        }

                    }

                },
                beforeSubmit: function(scriptContext) {
                    log.debug("scriptContext", scriptContext)
                    var oldRecId = scriptContext.oldRecord.id;
                    if (scriptContext.type == "delete") {

                        var payment = record.load({
                            type: "customerpayment",
                            id: oldRecId,
                            isDynamic: false
                        });
                        var numLines = payment.getLineCount({
                            sublistId: 'apply'
                        });
                        var invoiceArray = [];


                        for (var k = 0; k < numLines; k++) {
                            var itemid = payment.getSublistValue({
                                sublistId: 'apply',
                                fieldId: 'internalid',
                                line: k
                            });
                            var applyvalue = payment.getSublistValue({
                                sublistId: 'apply',
                                fieldId: 'apply',
                                line: k
                            });
                            var INVtYPE = payment.getSublistValue({
                                sublistId: 'apply',
                                fieldId: 'type',
                                line: k
                            });
                            if (applyvalue == true && INVtYPE == "Invoice")
                                invoiceArray.push(itemid);
                        }
                        log.debug(invoiceArray);
                        for (var index = 0, len = invoiceArray.length; index < len; index++) {
                            var Id = invoiceArray[index];
                            log.debug("Id", Id)
                            var invoiceLoad = record.load({
                                type: "invoice",
                                id: Id,
                                isDynamic: false
                            });
                            var statusinvoice = invoiceLoad.getValue({
                                fieldId: 'status'
                            })
                            log.debug("statusinvoice", statusinvoice)

                            var spiffinvoice = invoiceLoad.getText({
                                fieldId: 'custbody_corpdesign_spiff'
                            })
                            var replacement = invoiceLoad.getText({
                                fieldId: 'custbody_corp49_skip_replacemnt'
                            })
                            log.debug('replacement', replacement)
                            log.debug("spiffinvoice", spiffinvoice)


                            if (statusinvoice == "Paid In Full" && spiffinvoice != '' && replacement == "F") {
                                var spiffamount = invoiceLoad.getValue({
                                    fieldId: 'custbodyjj_spiff_amount_custom',
                                });

                                invoiceLoad.setValue({
                                    fieldId: 'custbodyjj_spiff_amount_custom',
                                    value: 0
                                });
                                spiffamount = -spiffamount;

                                var salesorderid = invoiceLoad.getValue({
                                    fieldId: 'createdfrom'
                                })
                                main.salesorder(salesorderid, spiffamount, Id);
                            }
                            var invoiceLoadId = invoiceLoad.save();
                            log.debug(invoiceLoadId);
                        }
                    }

                },
                salesorder: function(salesid, spiffamount, saleId) {
                    var salesLoad = record.load({
                        type: "salesorder",
                        id: salesid,
                        isDynamic: false
                    });
                    var spiffsales = salesLoad.getText({
                        fieldId: 'custbody_corpdesign_spiff'
                    })
                    log.debug("spiffsales", spiffsales)

                    if (spiffsales != '') {
                        var numLines1 = salesLoad.getLineCount({
                            sublistId: 'links'
                        });
                        log.debug("salesnum", numLines1)
                        var idSales = [];
                        for (var n = 0; n < numLines1; n++) {
                            var salesId = salesLoad.getSublistValue({
                                sublistId: 'links',
                                fieldId: 'id',
                                line: n
                            });
                            var salesstatus = salesLoad.getSublistValue({
                                sublistId: 'links',
                                fieldId: 'status',
                                line: n
                            });
                            var salestype = salesLoad.getSublistValue({
                                sublistId: 'links',
                                fieldId: 'type',
                                line: n
                            });
                            if (salesstatus == 'Paid In Full' && salestype == 'Invoice')
                                // if (salestype == 'Invoice')
                                if (salesId != saleId)
                                    idSales.push(salesId);
                        }
                        var salesSpiffamount = parseFloat(spiffamount);
                        if (idSales.length > 0) {
                            for (var index = 0, len = idSales.length; index < len; index++) {
                                var Id = idSales[index];
                                log.debug("Id", Id)
                                var invoicesSaleLoad = record.load({
                                    type: "invoice",
                                    id: Id,
                                    isDynamic: false
                                });
                                var InvoicesSpiff = invoicesSaleLoad.getValue({
                                    fieldId: 'custbodyjj_spiff_amount_custom'
                                });
                                log.debug(InvoicesSpiff, InvoicesSpiff);
                                salesSpiffamount = parseFloat(salesSpiffamount) + parseFloat(InvoicesSpiff);
                                log.debug(salesSpiffamount, salesSpiffamount);
                            }
                            salesLoad.setValue({
                                fieldId: 'custbodyjj_spiff_amount_custom',
                                value: salesSpiffamount
                            });
                        } else {
                            var oldval = salesLoad.getValue({
                                fieldId: 'custbodyjj_spiff_amount_custom',
                            });
                            salesSpiffamount = oldval + salesSpiffamount;
                            salesLoad.setValue({
                                fieldId: 'custbodyjj_spiff_amount_custom',
                                value: salesSpiffamount
                            });
                        }
                    }
                    var salesLoadId = salesLoad.save();
                    log.debug(salesLoadId);
                },
                getSpiffpercent: function(spiffclass) {
                    log.debug("spiffclass", spiffclass)
                    var spiffrate;
                    var customrecord_jj_item_class_spiffSearchObj = search.create({
                        type: "customrecord_jj_item_class_spiff",
                        filters: [
                            ["custrecord_jj_item_class", "anyof", spiffclass]
                        ],
                        columns: [
                            search.createColumn({ name: "custrecord_jj_spiff_percentage", label: "Spiff Percentage" }),
                            search.createColumn({ name: "custrecord_jj_spiff_amount", label: "Spiff Amount" })
                        ]
                    });
                    var searchResultCount = customrecord_jj_item_class_spiffSearchObj.runPaged().count;
                    // log.debug("customrecord_jj_item_class_spiffSearchObj result count", searchResultCount);
                    customrecord_jj_item_class_spiffSearchObj.run().each(function(result) {
                        // .run().each has a limit of 4,000 res
                        spiffrate = result.getValue("custrecord_jj_spiff_percentage");
                        if (!spiffrate) {

                            spiffrate = result.getValue("custrecord_jj_spiff_amount");
                            log.debug("spiffrateamount", spiffrate)
                        }
                        return true;
                    });
                    return spiffrate;

                }
            }
            for (var key in main) {
                if (typeof main[key] === 'function') {
                    main[key] = trycatch(main[key], key);
                }
            };

            function trycatch(myfunction, key) {
                return function() {
                    try {
                        return myfunction.apply(this, arguments);
                    } catch (e) {
                        log.debug("e in  " + key, e);
                    }
                }
            };
            return main;

        });

Leave a comment

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