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.