Prepaid schedules at line level of bill

Jira Code: LEAD-16

Add prepaid schedules on the line level of the bill in NetSuite and then create Amortization JE at month end, the PO Number has to include in the line level.

/**
 * @NApiVersion 2.x
 * @NScriptType ScheduledScript
 * @NModuleScope SameAccount
 */
/**
 * 
 * This ScheduledScript to edit and save the amortized journal entry.
 * 
 */
/*******************************************************************************
 * 
 * LEAD-16 JJ Schedule Add PO
 * 
 * **************************************************************************
 * 
 * Date: 28-12-2018
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 *****************************************************************************
 **/
define(['N/email', 'N/file', 'N/url', 'N/https', 'N/record', 'N/runtime', 'N/search', 'N/ui/serverWidget', 'N/task', 'N/render', 'N/currency'],
    /**
     * @param {email} email
     * @param {http} http
     * @param {https} https
     * @param {record} record
     * @param {runtime} runtime
     * @param {search} search
     * @param {url} url
     */
    function (email, file, url, https, record, runtime, search, serverWidget, task, render, currency) {

        /**
         * Definition of the Scheduled script trigger point.
         *
         * @param {Object} scriptContext
         * @param {string} scriptContext.type - The context in which the script is executed. It is one of the values from the scriptContext.InvocationType enum.
         * @Since 2015.2
         */
        var main = {
            execute: function (scriptContext) {
                var records = main.findtheRecords();
                for (var i = 0; i < records.length; i++) {
                    main.process(records[i])
                }
            },
            findtheRecords: function () {
                var recordId = [];
                var accountingtransactionSearchObj = search.create({
                    type: "accountingtransaction",
                    filters: [
                        ["type", "anyof", "Journal"],
                        "AND",
                        ["transaction.datecreated", "on", "today"]
                    ],
                    columns: [
                        search.createColumn({
                            name: "internalid",
                            summary: "GROUP",
                            label: "Internal ID"
                        })
                    ]
                });
                var searchResultCount = accountingtransactionSearchObj.runPaged().count;
                log.debug("accountingtransactionSearchObj result count", searchResultCount);
                accountingtransactionSearchObj.run().each(function (result) {
                    var internalid = result.getValue({
                        name: "internalid",
                        summary: "GROUP",
                        label: "Internal ID"
                    });
                    recordId.push(internalid)
                    return true;
                });
                log.debug("recordId", recordId)
                return recordId;
            },
            process: function (recid) {
                var newrec = record.load({
                    type: record.Type.JOURNAL_ENTRY,
                    id: recid,
                    isDynamic: true,
                });
                var book = newrec.getValue({
                    fieldId: 'bookje'
                });
                var flag = newrec.getValue({
                    fieldId: 'custbody_jj_amortized_journal'
                });
                log.debug("flag", flag)
                if (flag == false || flag == "F") {
                    if (book == "T") {
                        var numLines = newrec.getLineCount({
                            sublistId: 'line'
                        });
                        for (var i = 0; i < numLines; i++) {
                            var lineNum = newrec.selectLine({
                                sublistId: 'line',
                                line: i
                            });
                            var memo = newrec.getCurrentSublistValue({
                                fieldId: 'memo',
                                sublistId: 'line'
                            })
                            var currencyjournal = newrec.getText({
                                fieldId: 'currency'
                            });
                            if (memo == "Amortization Destination" || memo == "Amortization Source") {
                                var schedulenumber = newrec.getCurrentSublistValue({
                                    fieldId: 'schedulenum',
                                    sublistId: 'line'
                                })
                                var schedule = record.load({
                                    type: record.Type.AMORTIZATION_SCHEDULE,
                                    id: schedulenumber,
                                    isDynamic: true,
                                });
                                var sourcerecid = schedule.getValue({
                                    fieldId: 'sourcetran'
                                });
                                var amountsch = schedule.getValue({
                                    fieldId: 'totalamount'
                                });
                                
                                try {
                                    var sourcerecord = record.load({
                                        type: record.Type.VENDOR_BILL,
                                        id: sourcerecid,
                                        isDynamic: true,
                                    });
                                    var billdate = sourcerecord.getText({
                                        fieldId: 'createddate'
                                    });
                                    var currencybill = sourcerecord.getText({
                                        fieldId: 'currency'
                                    });
                                    log.debug("billdate", billdate)
                                    if (currencybill != currencyjournal){
                                        var rate = currency.exchangeRate({
                                            source: currencyjournal,
                                            target: currencybill,
                                            date: new Date(billdate)
                                        });
                                        amountsch = amountsch * rate;
                                        amountsch = Math.ceil(amountsch);
                                        log.debug("amountsch", amountsch)
                                    }

                                    var numLinesinsource = sourcerecord.getLineCount({
                                        sublistId: 'expense'
                                    });
                                    for (var j = 0; j < numLinesinsource; j++) {
                                        var amount = sourcerecord.getSublistValue({
                                            fieldId: 'amount',
                                            sublistId: 'expense',
                                            line: j
                                        });
                                        if (amountsch == amount) {
                                            ponumber = sourcerecord.getSublistValue({
                                                fieldId: 'custcol_po_number',
                                                sublistId: 'expense',
                                                line: j
                                            });
                                        } else {
                                            amount = "-" + amount
                                            if (amountsch == amount) {
                                                ponumber = sourcerecord.getSublistValue({
                                                    fieldId: 'custcol_po_number',
                                                    sublistId: 'expense',
                                                    line: j
                                                });
                                            }
                                        }
                                    }
                                } catch (err) {
                                    try {
                                        var sourcerecord = record.load({
                                            type: record.Type.VENDOR_CREDIT,
                                            id: sourcerecid,
                                            isDynamic: true,
                                        });
                                        var numLinesinsource = sourcerecord.getLineCount({
                                            sublistId: 'expense'
                                        });
                                        for (var j = 0; j < numLinesinsource; j++) {
                                            var amount = sourcerecord.getSublistValue({
                                                fieldId: 'amount',
                                                sublistId: 'expense',
                                                line: j
                                            });
                                            if (amountsch == amount) {
                                                ponumber = sourcerecord.getSublistValue({
                                                    fieldId: 'custcol_po_number',
                                                    sublistId: 'expense',
                                                    line: j
                                                });
                                            } else {
                                                amount = "-" + amount
                                                if (amountsch == amount) {
                                                    ponumber = sourcerecord.getSublistValue({
                                                        fieldId: 'custcol_po_number',
                                                        sublistId: 'expense',
                                                        line: j
                                                    });
                                                }
                                            }
                                        }
                                    } catch (error) {
                                        var sourcerecord = record.load({
                                            type: record.Type.JOURNAL_ENTRY,
                                            id: sourcerecid,
                                            isDynamic: true,
                                        });
                                        var numLinesinsource = sourcerecord.getLineCount({
                                            sublistId: 'line'
                                        });
                                        for (var j = 0; j < numLinesinsource; j++) {
                                            var amount = sourcerecord.getSublistValue({
                                                fieldId: 'debit',
                                                sublistId: 'line',
                                                line: j
                                            });
                                            if (amountsch == amount) {
                                                ponumber = sourcerecord.getSublistValue({
                                                    fieldId: 'custcol_po_number',
                                                    sublistId: 'line',
                                                    line: j
                                                });
                                            } else {
                                                amount = "-" + amount
                                                if (amountsch == amount) {
                                                    ponumber = sourcerecord.getSublistValue({
                                                        fieldId: 'custcol_po_number',
                                                        sublistId: 'expense',
                                                        line: j
                                                    });
                                                }
                                            }
                                        }
                                    }
                                }
                                newrec.setCurrentSublistValue({
                                    sublistId: 'line',
                                    fieldId: "custcol_po_number",
                                    value: ponumber
                                });
                                newrec.commitLine({
                                    sublistId: 'line'
                                });
                            }
                        }
                        newrec.setValue({
                            fieldId: 'custbody_jj_amortized_journal',
                            value: true,
                            ignoreFieldChange: true
                        });
                        var id = newrec.save({
                            enableSourcing: false,
                            ignoreMandatoryFields: true
                        });
                        log.debug("id", id);
                    }
                }
            }
        }
        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 *