Picking ticket print update

Jira Code: PROT-194
Update the picking ticket print to include both the bin number and customize via fields.

Suitelet Script: JJ SL PickingTicketPrint

/**
 * Suitelet for printing picking ticket for 
 * Sales order in BLVD department
 * 
 * Filename : JJ SL PickingTicketPrint.js
 * Dependency : 
 * User event : JJ UE PickingTicketPrint.js
 * Client : JJ CS PickingTicketPrint.js
 * 
 * Revision 1.1 $ 05/10/2017 aishwarya : Implement Authorization amount
 * Revision 1.2 $ 28/03/2019 navia : resolved error caused due to the occurence of special characters(by replace string)
 * Revision 1.3 $ 10/05/2019 aj :Remove options for matrix item
 * 
 * 
 * Version    Date            Author           Remarks
 * 1.00       23 Mar 2017     Jismi
 * 
 *
 */

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 data =request.getParameter('datacontent');
	 nlapiLogExecution('DEBUG', 'data',data);
	 
	 var optionDataArray = JSON.parse(data);
	 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), 
  		 new nlobjSearchColumn("quantitycommitted"),
  		 new nlobjSearchColumn("custcol35")
	]
	);
	

	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="150px" >BINS</th><th width="100px" >Customize Via</th><th width="250px">Item</th>'+'<th align="left" width="75px">To Ship</th><th width="75px">Picked</th><th width="180px">Options</th></tr></thead>';
			for (var j =0; j<salesorderSearch.length; j++)
	{
		var context = nlapiGetContext();
		var usageRemaining = context.getRemainingUsage();
	   var searchresult = salesorderSearch[j];
	   var itemId = searchresult.getValue("internalid","item");
	   var  balanceToShip = searchresult.getValue("quantitycommitted");
	    var  comit = searchresult.getValue("custcol35");
	   var customize_via = searchresult.getText("custitem41","item");
	   
	   //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;
	   if(balanceToShip>0){
	   	 			
				   content+= retriveBindetails(salesOrderID,tranRec,itemId,customize_via, row_no,optionDataArray,balanceToShip,comit);
				 }				
				 if(itemId==-3){
				 	 
					 content+= displayDescription(tranRec, row_no);
				 }else if((balanceToShip == "" || balanceToShip == null || balanceToShip == undefined || balanceToShip =='- None -' || balanceToShip == " ")&& itemId!=-3){
				 	
					 content+= retriveBindetails(salesOrderID,tranRec,itemId,customize_via, row_no,optionDataArray,"",comit);
				 }
	}
	 content+= '</table>';
	}

	return content;
}

function retriveBindetails(salesOrderID,tranRec,itemId,customize_via, row,optionDataArray,balanceToShip,comit){
  try{
  	var filter =[];
	filter.push(new nlobjSearchFilter('internalidnumber', null, 'equalto', itemId));
	
	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', "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);
    		 var binnumber_display = itemRecord.getLineItemValue('binnumber','binnumber_display',j);
    		 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;
    		 }
    		 
    	 }
    	
     }
     

	var type = 'InvtPart';
	var itemName ="";
	var salesorderSearch1 = nlapiSearchRecord("salesorder",null,
	[
   		["type","anyof","SalesOrd"], 
   		"AND", 
   		["internalidnumber","equalto",salesOrderID], 
   		"AND", 
   		["item.internalidnumber","equalto",itemId]
	], 
	[
   		new nlobjSearchColumn("custcol_jj_sales_description"), 
   		new nlobjSearchColumn("displayname","item",null), 
   		new nlobjSearchColumn("itemid","item",null), 
   		new nlobjSearchColumn("type","item",null)
	]
	);

	if(salesorderSearch1){
	for ( var i =0; i<salesorderSearch1.length; i++ )
	{
	   var searchresult1 = salesorderSearch1[i];	
	   var description = searchresult1.getValue("custcol_jj_sales_description" );
	   type = searchresult1.getValue("type","item");
	   itemName = nlapiEscapeXML(searchresult1.getValue("itemid","item") + ' ' +searchresult1.getValue("displayname","item"));
	}	
	}
     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('Kit')>-1){ 
         
     	nlapiLogExecution('DEBUG', 'type if kit',type);
    	 itemRowContent += wrapTD(balanceToShip, "75px");
         itemRowContent += wrapTD("", "75px");
    	 itemRowContent += wrapTD(getOptions(itemName.trim(),optionDataArray, row,comit), "180px");
       return wrapNonInvTr(itemRowContent);
     }else if((type.indexOf('InvtPart')>-1 || 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");
         itemRowContent += wrapTD("", "75px");
    	 itemRowContent += wrapTD("", "180px");
       return wrapNonInvTr(itemRowContent);
     }
     
     else{
     	
    	 itemRowContent += wrapTD(balanceToShip, "75px");
         itemRowContent += wrapTD("", "75px");
    	 itemRowContent += wrapTD("", "180px");
    	 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', 'optionDataArray in getOptions',JSON.stringify(optionDataArray));
	for(var i=0; i<optionDataArray.length; i++){
		var obj = optionDataArray[i];
		nlapiLogExecution('DEBUG', 'obj',JSON.stringify(obj));
		nlapiLogExecution('DEBUG', 'obj.comit',obj.comit);
		nlapiLogExecution('DEBUG', 'comit',comit);
			
			if(obj.comit == "" || obj.comit == null || obj.comit == undefined || obj.comit =='- None -' || obj.comit == " " ||comit == "" || comit == null || comit == undefined || comit =='- None -' || comit == " "  ){
				nlapiLogExecution('DEBUG', comit+'@ ',obj.comit);
				obj.comit=0;
				comit=0;
			}
		if(obj.name.trim() == itemName && obj.comit == comit){
			var option = obj.options;
			nlapiLogExecution('DEBUG', 'obj.options',obj.options);
			if(option.indexOf('plus') != -1 || option.indexOf('and') != -1|| option.indexOf('lsst') != -1 ||option.indexOf('grt') != -1 || option.indexOf('break') != -1 ||option.indexOf('space') != -1 || option.indexOf('hash') != -1 ){
				content1 = option.replace(/plus/g,'+');
				content1 = content1.replace(/space/g,' ');
				content1 = content1.replace(/hash/g,'#');
				content1 = content1.replace(/break/g,'<br/>');
				content1 = content1.replace(/and/g,'&');
				content1 = content1.replace(/lsst/g,'<');
				content1 = content1.replace(/grt/g,'>');
			}else{
				content1 = option
			}
			
			return 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>';
}



	

Client Script: JJ CS Picking Ticket

/**
 * Module Description
 * 
 * Version    Date            Author           Remarks
 * 1.00       24 Mar 2017     jismiai
 * 1.1		  28 Mar 2019       navia           resolved error caused due to the occurence of special 
 * 												characters(by replace string)
 */

/**
 * Call the print Suitelet	
 */
function printPickingTicket() {

    try {
        var content1;
        var recId = nlapiGetRecordId();
        var recType = nlapiGetRecordType();
        var record = nlapiLoadRecord(recType, recId, true);

        isPTPrinted = isPrinted(recId);
        if (isPrinted(recId)) {
            alert('Picking Ticket already printed');
        }
        var content = getOptionsObject(recId);

        if (((content.indexOf('+') != -1) || (content.indexOf('>') != -1) || (content.indexOf('<') != -1) || (content.indexOf('&') != -1) || (content.indexOf(' ') != -1) || (content.indexOf('#') != -1)) && (content != null)) {
            content1 = content.replace(/\+/g, 'plus');
            content1 = content1.replace(/ /g, 'space');
            content1 = content1.replace(/#/g, 'hash');
            content1 = content1.replace(/&/g, 'and');
            content1 = content1.replace(/>/g, 'grt');
            content1 = content1.replace(/</g, 'lsst');
        } else {
            content1 = content;
        }
        //	if((content.indexOf('&nbsp') != -1) && ((content != null) /*|| (content != '')*/)){
        //		content1 = content.replace(/&nbsp/g,'and');
        //	}else{                                                                                                                                                                            
        //		content1 = content;
        //	}
        console.log('content1', content1)
        console.log('content', content)

        nlapiSubmitField('salesorder', recId, 'custbody_jj_optionhiddenfield', content1.toString())
        var suiteUrl = "";
        var department = record.getFieldValue('department');
        console.log('department', department)
        //var department = nlapiGetFieldText('department');
        if (department == 2) {
            linkURL = nlapiResolveURL('SUITELET', 'customscript_jj_sl_picking_ticket', 'customdeploy_jj_sl_picking_ticket', null) +
                '&custparam_recid=' + recId /*+'&datacontent='+content1*/ ;
            //suiteUrl = 'https://system.na1.netsuite.com/app/site/hosting/scriptlet.nl?script=400&deploy=1&custparam_recid='+nlapiGtRecordId()+'&datacontent='+content;
        } else {
            linkURL = nlapiResolveURL('SUITELET', 'customscript_jj_sl_protec_picking_ticket', 'customdeploy_jj_sl_protec_picking_ticket', null) +
                '&custparam_recid=' + recId + '&datacontent=' + content1;

        }
        if (!isPTPrinted) {
            insertSOToWatcher(recId);
        }
        newWindow = window.open(linkURL);


    } catch (e) {
        nlapiLogExecution('DEBUG', 'ERROR', e.message);
    }
}

function isPrinted(soId) {
    var filter = [];
    filter.push(new nlobjSearchFilter('custrecord_jj_sale_order_id', null, 'is', soId));
    var searchResults = nlapiSearchRecord('customrecord_jj_picking_ticket_watcher', null, filter, null);
    if (searchResults) {
        return true;
    }
    return false;
}

function insertSOToWatcher(soId) {
    var record = nlapiCreateRecord('customrecord_jj_picking_ticket_watcher');
    record.setFieldValue('custrecord_jj_sale_order_id', soId);
    nlapiSubmitRecord(record);
}

function getOptionsObject() {
    //"Font Style: Bookman <br>Font Color: Black Gloss<br>Stamp Content: 2<br>Sayings: Hello Gorgeous↵"
    var tbl = document.getElementById('item_splits');
    console.log('tbl', tbl)
    var optionArray = [];
    // get all table rows from the items table
    var rows = tbl.getElementsByTagName("tr");
    console.log('rows.length', rows.length)
    for (var row = 1; row < rows.length; row++) {
        var itemName = rows[row].cells[1].innerText;
        console.log('itemName', itemName)
        var type = rows[row].cells[20].innerText;
        var commit_qty = rows[row].cells[0].innerText;
        console.log('commit_qty', commit_qty)

        try {
            if ((type.indexOf('Kit/Package') > -1 || type.indexOf(' Non Inventory Item') > -1 || type.indexOf('Non-inv') > -1 || type.indexOf('Inv') > -1 || type.indexOf('Inventory Item') > -1) && (itemName != 'MISC TO BE DETERMINED' && itemName != 'SUF SET UP FEE')) {
                var optionObj = new Object();
                console.log('type', type)
                var options = rows[row].cells[5].innerHTML;
                optionObj.name = itemName;
                optionObj.comit = commit_qty;
                options = options.replace(/<br>/g, '<br />');
                optionObj.options = options;
                console.log('options', options)
                optionArray.push(optionObj);
            }
        } catch (err) {

            console.log(err)
        }

        console.log('type', type)
    }

    return JSON.stringify(optionArray);

}

Leave a comment

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