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
};
});