Add an additional column for displaying an image in the Picking ticket PDF document.

Create an additional column for showing the configurator image in the picking ticket (from the Sales order).

Check the picking ticket button functionality (Suitelet: JJ SL PickingTicketPrint.js) and update the script as well as the XML file(if available) to add the personalized image corresponding to the item line.


function pickingTicketPrint(request, response) {
    try {
        var renderer = nlapiCreateTemplateRenderer();
        var salesOrderID = request.getParameter('custparam_recid');

        var tranRec = nlapiLoadRecord('salesorder', salesOrderID);

        //var data = nlapiLookupField('salesorder', salesOrderID, 'custbody_jj_optionhiddenfield')


        var optionDataArray = tranRec.getFieldValue('custbody_jj_optionhiddenfield') ?
            JSON.parse(tranRec.getFieldValue('custbody_jj_optionhiddenfield')) : {};
        nlapiLogExecution('DEBUG', 'optionDataArray', JSON.stringify(optionDataArray));
        var myXMLFile = nlapiLoadFile(268551);
        var myXMLFile_value = myXMLFile.getValue();

        var tableValue = getPickingTicketTable(salesOrderID, tranRec, optionDataArray);
        if (tableValue) {
            myXMLFile_value = myXMLFile_value.replace('<!-- ItemTable -->', tableValue);
        }
        renderer.setTemplate(myXMLFile_value);

        renderer.addRecord('record', tranRec);

        var xmlRendered = renderer.renderToString();

        var file = nlapiXMLToPDF(xmlRendered);
        response.setContentType('PDF', 'Print Picking Ticket', 'INLINE');
        response.write(file.getValue());

    } catch (e) {
        nlapiLogExecution('DEBUG', 'error @ pickingTicketPrint', e);
    }
}


function getPickingTicketTable(salesOrderID, tranRec, optionDataArray) {
    var content;
    var salesorderSearch = nlapiSearchRecord("salesorder", null, [
        ["type", "anyof", "SalesOrd"],
        "AND", ["internalidnumber", "equalto", salesOrderID],
        "AND", ["mainline", "is", "F"],
        "AND", ["taxline", "is", "F"],
        "AND", ["commit", "noneof", "3"],
        "AND", ["shipping", "is", "F"]
    ], [
        new nlobjSearchColumn("internalid", "item", null),
        new nlobjSearchColumn("custitem41", "item", null) /*.setSort(false)*/, //MODIFIED BY ND-20/06/19(PROT-219)
        new nlobjSearchColumn("quantitycommitted"),
        new nlobjSearchColumn("custcol35"),
        new nlobjSearchColumn("quantity"),// MODIFIED BY ND ON 08.07.2019 (To fetch the qty from the SO item sublist)
        new nlobjSearchColumn("custcol_ptc_773_item_image_child")//personalised image update
    ]);


    if (salesorderSearch) {
        content = '<table  style="width: 100%; margin-top: 10px;text-align:left;border: .5px solid #A9A9A9;">' +
            '<thead><tr style="text-align:center;"><th width="170px" >BINS</th><th width="200px">Customize Via</th><th width="200px">Item</th>' + '<th align="left" width="150px" >To Ship</th><th width="150px" >Picked</th><th width="250px" >Options</th><th width="250px">Personalized Image</th></tr></thead>';
        nlapiLogExecution('DEBUG', 'salesorderSearch.length', salesorderSearch.length);
        for (var j = 0; j < salesorderSearch.length; j++) {
            var context = nlapiGetContext();
            var usageRemaining = context.getRemainingUsage();
            nlapiLogExecution('DEBUG', 'usageRemaining', usageRemaining);

            var searchresult = salesorderSearch[j];
            var itemId = searchresult.getValue("internalid", "item");
            var balanceToShip = searchresult.getValue("quantitycommitted");
            var comit = searchresult.getValue("custcol35");
            // var comit = searchresult.getValue("quantitycommitted");
            var qty = searchresult.getValue("quantity");
            var customize_via = searchresult.getText("custitem41", "item");
            var personalized_imageURL =  searchresult.getValue("custcol_ptc_773_item_image_child");//personalised image update

            //AJ MOD ON 10.05.2019
            /* nlapiLogExecution('DEBUG', 'comit',comit);
             nlapiLogExecution('DEBUG', 'customize_via',customize_via);
             nlapiLogExecution('DEBUG', 'searchresult',searchresult);*/
            var row_no = j + 1;
            nlapiLogExecution('DEBUG', 'balanceToShip', balanceToShip);
            /* if (balanceToShip > 0) { JJ0016 commented*/
            if (balanceToShip > 0) {
                content += retriveBindetails(context, salesOrderID, tranRec, itemId, customize_via, row_no, optionDataArray, balanceToShip, qty, comit, personalized_imageURL);
              nlapiLogExecution('DEBUG', 'Inn1', itemId);
            }
            nlapiLogExecution('DEBUG', 'itemId', itemId);
            if (itemId == -3) {

                content += displayDescription(tranRec, row_no);
            } else if ((balanceToShip == "" || balanceToShip == null || balanceToShip == undefined || balanceToShip == '- None -' || balanceToShip == " ") && itemId != -3) {

                content += retriveBindetails(context, salesOrderID, tranRec, itemId, customize_via, row_no, optionDataArray, "", qty, comit,personalized_imageURL);
              nlapiLogExecution('DEBUG', 'Inn2', itemId);
            }
        }
        content += '</table>';
        nlapiLogExecution('DEBUG', 'Contents', content);
    }

    return content;
}

function retriveBindetails(context, salesOrderID, tranRec, itemId, customize_via, row, optionDataArray, balanceToShip, qty, comit,personalized_imageURL) {
    try {
        var usageRemaining_retriveBindetails = context.getRemainingUsage();
        nlapiLogExecution('DEBUG', 'usageRemaining_retriveBindetails', usageRemaining_retriveBindetails);
        var filter = [];
        filter.push(new nlobjSearchFilter('internalidnumber', null, 'equalto', itemId));
        nlapiLogExecution('DEBUG', "personalized_imageURL",personalized_imageURL);
        var coloumn = [];
        coloumn.push(new nlobjSearchColumn('type', null));
        coloumn.push(new nlobjSearchColumn('itemid', null));
        coloumn.push(new nlobjSearchColumn('displayname', null));
        var searchresults = nlapiSearchRecord('item', null, filter, coloumn);
        var type = 'inventoryitem';
        var itemName = "";
        if (searchresults) {
            type = searchresults[0].getRecordType();
            itemName = nlapiEscapeXML(searchresults[0].getValue('itemid') + ' ' + searchresults[0].getValue('displayname'));
        }
        nlapiLogExecution('DEBUG', 'itemName', itemName);
        // nlapiLogExecution('DEBUG', "TYPE", type +' itemId'+itemId);
        var itemRecord = null;
        try {
            itemRecord = nlapiLoadRecord(type, itemId);
        } catch (e) {
            itemRecord = nlapiLoadRecord('descriptionitem', itemId);
        }
        var binDetails = "";
        var lineCount = itemRecord.getLineItemCount('binnumber');

        if (lineCount > 0) {

            for (var j = 1; j <= lineCount; j++) {
                var binnumber = itemRecord.getLineItemValue('binnumber', 'binnumber', j);
                // nlapiLogExecution('DEBUG', "binnumber",binnumber);
                var binnumber_display = itemRecord.getLineItemValue('binnumber', 'binnumber_display', j);
                // nlapiLogExecution('DEBUG', "binnumber_display",binnumber_display);
                var onhand = itemRecord.getLineItemValue('binnumber', 'onhand', j);

                if (onhand == null || onhand == undefined) {
                    onhand = 0;
                }
                if (j == 1) {
                    binDetails = binnumber_display + ":" + onhand;
                } else {
                    binDetails = binDetails + ", " + binnumber_display + ":" + onhand;
                }

            }

        }
        // nlapiLogExecution('DEBUG', "binDetails",binDetails);
        if (type == 'kititem') {

            // itemRecord = nlapiLoadRecord(type, itemId);
            var kititemSearch = nlapiSearchRecord("kititem", null, [
                ["type", "anyof", "Kit"],
                "AND", ["internalidnumber", "equalto", itemId]
            ], [
                new nlobjSearchColumn("memberitem"),
                new nlobjSearchColumn("binnumber", "memberItem", null),
                new nlobjSearchColumn("binonhandcount", "memberItem", null)
            ]);
            // nlapiLogExecution('DEBUG', "kititemSearch",JSON.stringify(kititemSearch));
            if (kititemSearch) {
                for (var i = 0; i < kititemSearch.length; i++) {
                    var onHand = kititemSearch[i].getValue("binonhandcount", "memberItem", null);
                    var binnumber_Display = kititemSearch[i].getValue("binnumber", "memberItem", null);
                    if (onHand == null || onHand == undefined) {
                        onHand = 0;
                    }

                    if (i == 0) {
                        if (binnumber_Display) {
                            binDetails = binnumber_Display + ":" + onHand;
                        }

                    } else {
                        if (binnumber_Display) {
                            binDetails = binDetails + ", " + binnumber_Display + ":" + onHand;
                        }

                    }

                }

            }
        }

        var quantity = tranRec.getLineItemValue('item', 'quantity', row);
        var itemRowContent = wrapTD(binDetails, "150px");
        itemRowContent += wrapTD(customize_via, "100px");
        itemRowContent += wrapTD(itemName, "250px");
        //itemRowContent += wrapTD(description, "200px");
        if (quantity == null) {
            quantity = "";
        }
        /*AJ COMMENTED ON 10.05.19     if((type.indexOf('Kit')>-1 || type.indexOf('InvtPart')>-1 || type.indexOf('NonInvtPart')>-1) && itemName !='MISC TO BE DETERMINED' && itemName !='SUF SET UP FEE'){
         */
        nlapiLogExecution('DEBUG', "type", type);
        if (type.indexOf('noninventoryitem') > -1 || type.indexOf('Non-inventory Item') > -1 || type.indexOf('NonInvtPart') > -1) {
            itemRowContent += wrapTD(qty, "75px"); // MODIFIED BY ND ON 08.07.2019 (to pull from the quantity for non-inventory items)
            itemRowContent += wrapTD("", "75px");
            itemRowContent += wrapTD(getOptions(itemName.trim(), optionDataArray, row, comit), "180px");
            //itemRowContent += wrapTD("aaaa", "150px");
            itemRowContent += wrapTD1(personalized_imageURL, "150px");
            return wrapNonInvTr(itemRowContent);
        } else if (type.indexOf('Kit') > -1 || type.indexOf('kititem') > -1) {
            //commented JJ0016
            /*itemRowContent += wrapTD(balanceToShip, "75px");*/
            itemRowContent += wrapTD(qty, "75px");
            itemRowContent += wrapTD("", "75px");
            itemRowContent += wrapTD(getOptions(itemName.trim(), optionDataArray, row, comit), "180px");
            //itemRowContent += wrapTD(personalized_imageURL,"150px");
            itemRowContent += wrapTD1(personalized_imageURL, "150px");
            return wrapNonInvTr(itemRowContent);
        } else if ((type.indexOf('lotnumberedinventoryitem') > -1 || type.indexOf('InvtPart') > -1 || type.indexOf('Inventory Item') > -1 /*|| type.indexOf('Non-inventory Item') > -1 || type.indexOf('NonInvtPart') > -1*/) && itemName != 'MISC TO BE DETERMINED' && itemName != 'SUF SET UP FEE') {
            // nlapiLogExecution('DEBUG', 'type other',type);
            /* itemRowContent += wrapTD(balanceToShip, "75px"); -->JJ0016*/
            itemRowContent += wrapTD(qty, "75px");
            itemRowContent += wrapTD("", "75px");
            //itemRowContent += wrapTD("", "180px");
            itemRowContent += wrapTD(getOptions(itemName.trim(), optionDataArray, row, comit), "180px");
            //itemRowContent += wrapTD(personalized_imageURL,"150px");
            //itemRowContent += wrapTD("aaaa", "150px");
            itemRowContent += wrapTD1(personalized_imageURL, "150px");

            return wrapNonInvTr(itemRowContent);
        } else {

            /* itemRowContent += wrapTD(balanceToShip, "75px");*/
            itemRowContent += wrapTD(qty, "75px");
            itemRowContent += wrapTD("", "75px");
            // itemRowContent += wrapTD("", "180px");
            itemRowContent += wrapTD(getOptions(itemName.trim(), optionDataArray, row, comit), "180px");
            //itemRowContent += wrapTD(personalized_imageURL,"150px");
            itemRowContent += wrapTD1(personalized_imageURL, "150px");

            return wrapInvTr(itemRowContent);
        }
    } catch (e) {
        nlapiLogExecution('DEBUG', 'error @ retriveBindetails', e);
    }


}

function displayDescription(tranRec, row) {
    var description = nlapiEscapeXML(tranRec.getLineItemValue('item', 'description', row));
    var itemRowContent = wrapTD('', "100px");
    itemRowContent += wrapTD('Description', "150px");
    itemRowContent += wrapTD(description, "200px");
    itemRowContent += wrapTD("", "75px");
    itemRowContent += wrapTD("", "75px");
    itemRowContent += wrapTD("", "75px");
    return wrapInvTr(itemRowContent);
}


function getOptions(itemName, optionDataArray, row, comit) {
    nlapiLogExecution('DEBUG', '**********', '******************************');
    nlapiLogExecution('DEBUG', 'itemName', itemName);
    nlapiLogExecution('DEBUG', 'row', row);
    nlapiLogExecution('DEBUG', 'comit', comit);
    nlapiLogExecution('DEBUG', 'optionDataArray', JSON.stringify(optionDataArray));
    var content1 = ""
    nlapiLogExecution('DEBUG', 'optionDataArray.length ', optionDataArray.length);
    for (var i = 0; i < optionDataArray.length; i++) {
        // nlapiLogExecution('DEBUG', 'i ', i);

        var obj = optionDataArray[i];
        nlapiLogExecution('DEBUG', 'obj', JSON.stringify(obj));
        nlapiLogExecution('DEBUG', 'i ' + optionDataArray.length, i);
        if (obj.comit == "" || obj.comit == null || obj.comit == undefined || obj.comit == '- None -' || obj.comit == " " || comit == "" || comit == null || comit == undefined || comit == '- None -' || comit == " ") {
            // nlapiLogExecution('DEBUG', 'test', c);
            obj.comit = 0;
            comit = 0;
        }

        if ((obj.name.toString().trim().replace(/ /g, '') == itemName.toString().trim().replace(/ /g, '')) && (obj.comit.toString().trim().replace(/ /g, '') == comit.toString().trim().replace(/ /g, ''))) {
            var option = obj.options;
            nlapiLogExecution('DEBUG', 'option', option);

            if (option.indexOf('replaceplus') != -1 || option.indexOf('replaceand') != -1 || option.indexOf('replacelsst') != -1 || option.indexOf('replacegrt') != -1 || option.indexOf('break') != -1 || option.indexOf('replacespace') != -1 || option.indexOf('replacehash') != -1) {
                // nlapiLogExecution('DEBUG', 'option with spcl chara', option);
                content1 = option.replace(/replaceplus/g, '+');
                content1 = content1.replace(/replacespace/g, ' ');
                content1 = content1.replace(/replacehash/g, '#');
                content1 = content1.replace(/break/g, '<br/>');
                content1 = content1.replace(/replaceand/g, '&amp;');
                content1 = content1.replace(/replacelsst/g, '&lt;');
                content1 = content1.replace(/replacegrt/g, '&gt;');
                // nlapiLogExecution('DEBUG', 'content1 inside loop', content1);

                // break; /* MODIFIED BY ND-11/06/19(PROT-217)*/
            } else {
                content1 = option
                // nlapiLogExecution('DEBUG', 'content1 else', content1);

            }
            nlapiLogExecution('DEBUG', 'content1 return', content1);
            return content1;
        }

    }
    nlapiLogExecution('DEBUG', 'content1 returnempty', content1);
    return "";

}


function wrapNonInvTr(value) {

    return '<tr style="text-align:left;border: .05px solid #A9A9A9;" class="noninv" >' + value + '</tr>';
}
function wrapInvTr(value) {
    return '<tr style="text-align:left;border: .05px solid #A9A9A9;" >' + value + '</tr>';
}
function wrapTD(value, width) {
    return '<td  style="text-align:left;border: .05px solid #A9A9A9;" width="' + width + '" ><p align="left">' + value + '</p></td>';
}
function wrapTD1(value, width) {
    // var index=value.lastIndexOf(',');
    // nlapiLogExecution('DEBUG', 'coma index', index);
    // var value1=value.replaceAt(index,';');
    // nlapiLogExecution('DEBUG','final value',value1)
    var value1
    value1 = value.replace(/&/g, "&amp;")
    value1 = value1.replace(/</g, "&lt;")
    value1 = value1.replace(/>/g, "&gt;")
    value1 = value1.replace(/"/g, "&quot;")
    value1 = value1.replace(/'/g, "'");
    nlapiLogExecution('DEBUG','final222 value',value1);
    return '<td  style="text-align:left;border: .05px solid #A9A9A9;" width="' + width + '" ><img style="display: block; width:100px; height:100px;" src="' + value1 + '" ></img></td>';
}

Leave a comment

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