SuiteScript Function to Convert NetSuite Invoice Records into CSV Format for R365 ERP

The SuiteScript function toCSV(invoiceId) generates a CSV file containing specific invoice data for a given invoice ID. It uses the search.create method to retrieve relevant transaction lines while filtering out any unnecessary data.

function toCSV(invoiceId) {
    try {
        let filters = [
            ["internalid", "anyof", invoiceId],
            "AND",
            ["mainline", "is", "F"],
            "AND",
            [["amount", "greaterthan", "0.00"], "OR", ["taxline", "is", "F"]],
            "AND",
            ["cogs", "is", "F"]
        ];


        let searchResult = search.create({
            type: "transaction",
            filters: filters,
            columns: [
                search.createColumn({
                    name: "formulatext",
                    formula: "'Vendor Name'",
                    label: "Vendor"
                }),
                search.createColumn({
                    name: "formulatext",
                    formula: "{customerwarehouselocation}",
                    label: "Location"
                }),
                search.createColumn({
                    name: "tranid",
                    label: "Document Number"
                }),
                search.createColumn({
                    name: "trandate",
                    label: "Date"
                }),
                search.createColumn({
                    name: "formulatext",
                    formula: "CASE WHEN {taxline} = 'T' THEN 'Sales Tax' WHEN {itemType} = 'ShipItem' THEN 'Shipping/Delivery' ELSE {item} END",
                    label: "Vendor Item Number"
                }),
                search.createColumn({
                    name: "formulatext",
                    formula: "CASE WHEN {taxline} = 'T' THEN CONCAT({shipstate} ,' Tax') WHEN {itemType} = 'ShipItem' THEN '' ELSE {item.displayname} END",
                    label: "Vendor Item Name"
                }),
                search.createColumn({
                    name: "formulatext",
                    formula: "CASE WHEN {taxline}='T' THEN 'Each' ELSE {unit} END",
                    label: "UofM"
                }),
                search.createColumn({
                    name: "quantity",
                    label: "Qty"
                }),
                search.createColumn({
                    name: "formulacurrency",
                    formula: "CASE WHEN {taxline}='T' THEN {amount} ELSE {rate} END",
                    label: "Unit Price"
                }),
                search.createColumn({
                    name: "amount",
                    label: "Total"
                }),
                search.createColumn({
                    name: "formulatext",
                    formula: "''",
                    label: "Break flag"
                })
            ]
        });


        let csvContent = "";
        let pageSize = 1000;
        let pageIndex = 0;
        let pagedResults = searchResult.runPaged({ pageSize: pageSize });
        let pageCount = pagedResults.pageRanges.length;


        let csvHeader = [
            "Vendor", "Location", "Document Number", "Date", "Vendor Item Number", "Vendor Item Name", "UofM", "Qty", "Unit Price", "Total", "Break Flag"
        ].join(',');
        csvContent = csvHeader + 'n';


        let tranId = "";
        for (pageIndex = 0; pageIndex < pageCount; pageIndex++) {
            let page = pagedResults.fetch({ index: pageIndex });
            page.data.forEach(function(result) {
                let row = searchResult.columns.map(function(column) {
                    return result.getValue(column).includes(',') 
                        ? `"${result.getValue(column)}"` 
                        : result.getValue(column);
                }).join(',');


                csvContent += row + 'n';


                if (!tranId) {
                    tranId = result.getValue({ name: "tranid" });
                }
            });
        }


        const today = new Date().toLocaleDateString('en-US').replace(///g, '-');
        let csvFile = file.create({
            name: `Vendor Name_${tranId}_${today}.csv`,
            fileType: file.Type.CSV,
            contents: csvContent,
            folder: folderID
        });


        let fileId = csvFile.save();
        return fileId;
    } catch (error) {
        log.error("Error in toCSV: " + error.name, error.message);
        return null;
    }
} 

This SuiteScript function efficiently converts NetSuite invoice data into a CSV format that can be easily imported into R365 ERP.

Leave a comment

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