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(' ') != -1) && ((content != null) /*|| (content != '')*/)){
// content1 = content.replace(/ /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);
}