Fulfill and Bill Sales Orders Each Day

This sample is a scheduled script that fulfills and bills sales orders created each day.

The conversion of this script from SuiteScript 1.0 to SuiteScript 2.1 includes the following:

SuiteScript 1.0 Script

SuiteScript 2.1 Script

                    function processOrdersCreatedToday( type )
{
 //only execute when run from the scheduler 
  if ( type != 'scheduled' && type != 'skipped' ) return; 
 
   var filters = new Array();
   filters[0] = new nlobjSearchFilter( 'mainline', null, 'is', 'T' );
   filters[1] = new nlobjSearchFilter( 'trandate', null, 'equalTo', 'today' );
 
   var searchresults = nlapiSearchRecord( 'salesorder', null, filters, null, new nlobjSearchColumn('terms') );
   for ( var i = 0; searchresults != null && i < searchresults.length; i++ )
   {
      var id = searchresults[i].getId();
      var fulfillRecord = nlapiTransformRecord('salesorder', id, 'itemfulfillment');
      nlapiSubmitRecord( fulfillRecord );
 
      var billType = searchresults[i].getValue('paymentmethod') == null ? 'invoice' : 'cashsale';
      var billRecord = nlapiTransformRecord('salesorder', id, billType);
      nlapiSubmitRecord( billRecord );
   }
} 

                  
                    /**
 * @NApiVersion 2.1
 * @NScriptType ScheduledScript
 */

// Creates fulfillments and billing transactions for sales orders created today.
define(['N/search', 'N/record', 'N/log'], (search, record, log) => {
    const execute = () => {
        const salesOrderSearch = search.create({
            type: search.Type.SALES_ORDER,
            filters: [
                search.createFilter({
                    name: 'mainline',
                    operator: search.Operator.IS,
                    values: 'T'
                }),
                search.createFilter({
                    name: 'trandate',
                    operator: search.Operator.ON,
                    values: 'today'
                })
            ],
            columns: [
                search.createColumn({
                    name: 'internalid'
                }),
                search.createColumn({
                    name: 'paymentmethod'
                })
            ]
        });

        salesOrderSearch.run().each((result) => {
            const salesOrderId = result.getValue({
                name: 'internalid'
            });

            const fulfillmentRecord = record.transform({
                fromType: record.Type.SALES_ORDER,
                fromId: salesOrderId,
                toType: record.Type.ITEM_FULFILLMENT
            });

            const fulfillmentId = fulfillmentRecord.save();

            const paymentMethod = result.getValue({
                name: 'paymentmethod'
            });

            const billingRecord = record.transform({
                fromType: record.Type.SALES_ORDER,
                fromId: salesOrderId,
                toType: paymentMethod
                    ? record.Type.INVOICE
                    : record.Type.CASH_SALE
            });

            const billingId = billingRecord.save();

            log.audit({
                title: 'Sales Order Processed',
                details: `Sales Order ${salesOrderId}: Item Fulfillment ${fulfillmentId}, Billing Record ${billingId}`
            });

            return true;
        });
    };

    return {
        execute
    };
}); 

                  

General Notices