Sample script for transforming Purchase Order (PO) into Item Receipts, ensuring that separate Item Receipts are created for expenses and items.

/**

 * @NApiVersion 2.1

 * @NScriptType UserEventScript

 */

define([‘N/record’, ‘N/search’],

    /**

 * @param{record} record

 * @param{search} search

 */

    (record, search) => {

        /**

         * Defines the function definition that is executed after record is submitted.

         * @param {Object} scriptContext

         * @param {Record} scriptContext.newRecord – New record

         * @param {Record} scriptContext.oldRecord – Old record

         * @param {string} scriptContext.type – Trigger type; use values from the context.UserEventType enum

         * @since 2015.2

         */

        const afterSubmit = (scriptContext) => {

            try {

                log.debug(‘type’,scriptContext.type)

                let status = scriptContext.newRecord.getValue({ fieldId: ‘approvalstatus’ });

                let oldStatus = scriptContext.oldRecord ? scriptContext.oldRecord.getValue({ fieldId: ‘approvalstatus’ }) : null;

                log.debug(“status”, status);

                log.debug(“oldStatus”, oldStatus);

                if (scriptContext.type !== scriptContext.UserEventType.EDIT || status != 2 || oldStatus !=1) {

                    return;

                }

               

               

                let newRecord = scriptContext.newRecord;

                let expenseLineCount = newRecord.getLineCount({ sublistId: ‘expense’ });

                let itemLineCount = newRecord.getLineCount({ sublistId: ‘item’ });

               

               

               

               

                 

                // If there are no expense lines, do nothing

                if (expenseLineCount > 0) {

                    createItemReceiptForSublist({

                        newRecordId: newRecord.id,

                        sublistId: ‘expense’,

                        sublistFieldId: ‘markreceived’,

                        memoText: ‘Generated from Purchase Order (Items): ‘ + newRecord.id

                    });

                }

   

                if (itemLineCount > 0) {

                    createItemReceiptForSublist({

                        newRecordId: newRecord.id,

                        sublistId: ‘item’,

                        sublistFieldId: ‘itemreceive’,

                        memoText: ‘Generated from Purchase Order (Expense): ‘ + newRecord.id

                    });

                }

   

            } catch (e) {

                log.error(‘Error Creating Item Receipt’, e);

            }

        };

   

        const createItemReceiptForSublist = ({ newRecordId, sublistId, sublistFieldId, memoText }) => {

            try {

                let itemReceipt = record.transform({

                    fromType: record.Type.PURCHASE_ORDER,

                    fromId: newRecordId,

                    toType: record.Type.ITEM_RECEIPT,

                    isDynamic: true

                });

   

                itemReceipt.setValue({

                    fieldId: ‘memo’,

                    value: memoText

                });

   

                let lineCount = itemReceipt.getLineCount({ sublistId });

                for (let i = 0; i < lineCount; i++) {

                    itemReceipt.selectLine({ sublistId, line: i });

                    itemReceipt.setCurrentSublistValue({

                        sublistId,

                        fieldId: sublistFieldId,

                        value: false

                    });

                    itemReceipt.commitLine({ sublistId });

                }

                let itemReceiptId = itemReceipt.save();

                log.debug(`Item Receipt for ${sublistId} Created`, ‘ID: ‘ + itemReceiptId);

   

            } catch (e) {

                log.error(`Error processing sublist ${sublistId}`, e);

            }

        };

   

        return { afterSubmit };

    });

Leave a comment

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