/**
* @NApiVersion 2.0
* @NScriptType scheduledscript
*/
define(['N/record','N/search'],
function(record,search){
function execute(scriptContext) {
var searchResults = getSalesOrdersForInvoicing();
searchResults.forEach(function (searchResult) {
var salesOrderId = searchResult.getValue({
name: 'internalid',
});
try {
transformSalesOrderToInvoice(salesOrderId);
} catch (error) {
log.debug('Error creating invoice for Sales Order ', error);
}
});
}
/**
* Retrieve Sales Orders that are eligible for invoicing
*
* @returns {Array} - Array of search results representing Sales Orders
*/
function getSalesOrdersForInvoicing() {
// Add your own criteria to filter Sales Orders for invoicing
var salesOrderSearch = search.create({
type: search.Type.SALES_ORDER,
filters: [
["type","anyof","SalesOrd"],
"AND",
["status","anyof","SalesOrd:F"],
"AND",
["mainline","is","T"]
columns: [
search.createColumn({
name: 'internalid',
}),
],
});
return salesOrderSearch.run().getRange({
start: 0,
end: 1000, // Adjust this value based on your requirements
});
}
/**
* Transform a Sales Order into an Invoice
*
* @param {string|number} salesOrderId - Internal ID of the Sales Order to transform
*/
function transformSalesOrderToInvoice(salesOrderId) {
var invoiceRecord = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: salesOrderId,
toType: record.Type.INVOICE,
isDynamic: true,
});
invoiceRecord.setValue({
fieldId: 'tobeemailed',
value: false,
ignoreFieldChange: true
});
var invoiceId = invoiceRecord.save();
log.debug('Invoice created', 'Invoice ID: ' + invoiceId + ', Sales Order ID: ' + salesOrderId);
}
return {
execute: execute,
};
});