Print packing slip from a custom button to show Expiration date from inventory details

The requirement is to show the expiration date from inventory details in the packing slip. As there is no standard option to fetch the expiration date to print template, we have used the custom button to print packing slip. via script we can get the inventory detail subrecord fields.

/**
 *@NApiVersion 2.x
 *@NScriptType UserEventScript
 */
/* Create button to print Packing slip */


define(['N/record','N/runtime', 'N/url'],
    function(record, runtime, url) {
            function beforeLoad(context) {
                    if (context.type !== context.UserEventType.VIEW && context.type !== context.UserEventType.EDIT)
                            return;

                    var ifRecord = context.newRecord;

                    var form = context.form;

                    var urlString = url.resolveScript({
                            scriptId : 'customscript1671',
                            deploymentId : 'customdeploy1',
                            params : {
                                    'itemfulfillmentid' : ifRecord.id
                            }
                    });

                    form.addButton({
                            id:			  'custpage_print_packing_slip',
                            label:        'Print Packing Slip',
                            functionName: 'window.open(\'' + urlString +  '\')'
                    });
                   
            }
            return {
                    beforeLoad: beforeLoad
            };
    });
/**
 *@NApiVersion 2.x
 *@NScriptType Suitelet
 */

/* Name : Spectra_PrintPackingSlip_SL.js
*
 */
define(
    [
        'N/record',
        'N/render',
        'N/search',
        'N/format'
    ]
    ,   function (
        record, render, search, format
    )
    {

        function onRequest(context) {

            var template = 122; //Packing slip custom template ID
            var ifId = context.request.parameters.itemfulfillmentid;
           
            var renderer = render.create();
            renderer.setTemplateById(template);

            var ifRecord = record.load({
                type: record.Type.ITEM_FULFILLMENT,
                id: ifId
            });
            
            renderer.addRecord('record', ifRecord);

            // field lookup
            var fieldLookUp = search.lookupFields({
                type: search.Type.ITEM_FULFILLMENT,
                id: ifId,
                columns: ['createdfrom']
            });
            
            var soId = fieldLookUp.createdfrom[0].value;

            var soRecord = record.load({
                type: record.Type.SALES_ORDER,
                id: fieldLookUp.createdfrom[0].value
            });
            
            renderer.addRecord('salesorder', soRecord);



            var customData = {};
            customData.item = [];
            var lineCount = ifRecord.getLineCount({
                sublistId: 'item'
            });
            for (var i = 0; i < lineCount; i++) {
                var itemData = {};
                var itemInternalId = ifRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'item',
                    line: i
                });
                var fieldLookUp = search.lookupFields({
                    type: 'item',
                    id: itemInternalId,
                    columns: ['itemid']
                });
                
                itemData.item = fieldLookUp.itemid;

                itemData.custcol_scm_customerpartnumber = ifRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'custcol_scm_customerpartnumber',
                    line: i
                });
                itemData.description = ifRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'description',
                    line: i
                });
                itemData.units = ifRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'units',
                    line: i
                });
                itemData.quantity = ifRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'quantity',
                    line: i
                });
                var subrec = ifRecord.getSublistSubrecord({ //todo there may have multiple lines too
                    sublistId: 'item',
                    fieldId: 'inventorydetail',
                    line: i
                });
                var invAssignmentlineCount = subrec.getLineCount({
                    sublistId: 'inventoryassignment'
                });
                itemData.inventorydetail = '';
                for (var x = 0; x < invAssignmentlineCount; x++) {
                    itemData.inventorydetail += subrec.getSublistText({
                        sublistId: 'inventoryassignment',
                        fieldId: 'issueinventorynumber',
                        line: x
                    });
                    itemData.inventorydetail += ',';
                    itemData.inventorydetail += subrec.getSublistText({
                        sublistId: 'inventoryassignment',
                        fieldId: 'binnumber',
                        line: x
                    });
                    itemData.inventorydetail += '(' + subrec.getSublistValue({
                        sublistId: 'inventoryassignment',
                        fieldId: 'quantity',
                        line: x
                    }) + ')';
                    // itemData.inventorydetail += ',';
                    var expirationDate = subrec.getSublistValue({
                        sublistId: 'inventoryassignment',
                        fieldId: 'expirationdate',
                        line: x
                    });
                    
                    if(expirationDate){
                        log.debug("expiration date exist")
                        var formattedDateString = format.format({
                            value:expirationDate,
                            type: format.Type.DATE
                        });
                        
                        itemData.inventorydetail += ',';
                        itemData.inventorydetail += formattedDateString + '<br/>';
                    }
                }
                customData.item.push(itemData);
            }
           
            renderer.addCustomDataSource({
                format: render.DataSource.OBJECT,
                alias: "customdata",
                data: customData
            });
            
            var ifasString = renderer.renderAsString();
           
            context.response.renderPdf(ifasString);
        }

        return {
            onRequest: onRequest
        };
    });

Leave a comment

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