Group the items in Picking Ticket print based on ‘Customize via’ field

Jira Code:PROT-183
This is to group the items in the Picking ticket print of SO based on the field ‘Customize via’. A row sequencing has been applied to the SO item sublist.

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);
	console.log('content',content)
	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;
	}
	console.log('content1',content1)
	console.log('content1.toString',content1.toString)

	nlapiSubmitField('salesorder', recId, 'custbody_jj_optionhiddenfield', content1.toString())
	var suiteUrl ="";
	var department = record.getFieldValue('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;
		//suiteUrl = 'https://system.na1.netsuite.com/app/site/hosting/scriptlet.nl?script=400&deploy=1&custparam_recid='+nlapiGetRecordId()+'&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(recId){
	//"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',rows)
	var rec=nlapiLoadRecord('salesorder',recId)
	
	for (var row = 1; row < rows.length; row++) {
	var line_num =	rec.getLineItemValue('item','line',row)

		var itemName = rows[row].cells[1].innerText;
		console.log('itemName',itemName)
		var type = rows[row].cells[20].innerText;
		console.log('type',type)
		// var commit_qty = rows[row].cells[3].innerText;
	 	var commit_qty = rows[row].cells[0].innerText;
	 	console.log('commit_qty',commit_qty)
			if((type.indexOf('Kit/Package')>-1 || type.indexOf('Non-inv')>-1 || type.indexOf('Inv')>-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;
			console.log('commit_qty',commit_qty)
			options = options.replace(/<br>/g,'<br />');
			optionObj.options =options;
			console.log('options',options)
			optionArray.push(optionObj);
			}
		
	}
	
	 return JSON.stringify(optionArray);

}

Suitelet script: JJ SL Picking Ticket Print

/**
 * 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)
 * 
 * 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')

	 nlapiLogExecution('DEBUG', 'data',data);
	 
	 var optionDataArray = JSON.parse(data);
	 
	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("custcol_jj_slno")
	]
	);
	

	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="100px" >Customize Via</th><th width="150px">Item</th><th width="200px">Description</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("custcol_jj_slno");
	   var customize_via = searchresult.getText("custitem41","item");
	   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 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(customize_via, "100px");
     itemRowContent += wrapTD(itemName, "150px");
     itemRowContent += wrapTD(description, "200px");
     if(quantity==null){
    	 quantity="";
     }
     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 not found',type);
    	 itemRowContent += wrapTD(balanceToShip, "75px");
         itemRowContent += wrapTD("", "75px");
    	 itemRowContent += wrapTD(getOptions(itemName.trim(),optionDataArray, row,comit), "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){
	for(var i=0;i<optionDataArray.length;i++){
		var obj = optionDataArray[i];
			
			if(obj.comit == "" || obj.comit == null || obj.comit == undefined || obj.comit =='- None -' || obj.comit == " " ||comit == "" || comit == null || comit == undefined || comit =='- None -' || 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>';
}



	

User event script: PROTEC-183 JJ UE Row Seq

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
/**
 * Script Description
 *  To set a row sequencing to the SO sublist. This script sets value to the custom column created.
 *  
 */
/*******************************************************************************
 * PROTEC-183
 * **************************************************************************
 * 
 * Date: 09/04/2019
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 * 
 * REVISION HISTORY
 * 
 * Revision 1 $  09/04/2019 Navia: Create
 * 
 ******************************************************************************/
define(['N/record'],

function(record) {
  

    /**
     * Function definition to be triggered before record is loaded.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.newRecord - New record
     * @param {Record} scriptContext.oldRecord - Old record
     * @param {string} scriptContext.type - Trigger type
     * @Since 2015.2
     */
    function beforeSubmit(scriptContext) {

    	try{
    		var sales_order = scriptContext.newRecord;
    		log.debug('sales_order',sales_order)
    		var lineCount = sales_order.getLineCount({
    		    sublistId: 'item'
    		}); 
    		log.debug('lineCount',lineCount)
    		for(var i=0;i<lineCount;i++){
    			sales_order.setSublistValue({
    			    sublistId: 'item',
    			    fieldId: 'custcol35',
    			    line: i,
    			    value: i+1
    			});

    		}
    	}catch(er){
    		log.debug('error @ afterSubmit',er)
    	}
    

    }

   

    return {
        beforeSubmit: beforeSubmit
    };
    
});

Leave a comment

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