Convert sales order to invoice using script

/**
 * @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,
  };
});

    

Leave a comment

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