Jira Code: AN-71
Update the ‘Mfg. Date’ in the stock tag print with the current date by using suitelet script.
Suitelet Script: AN SL Stock Tag
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*/
/**
* Script Description: PDF Creation
*/
/*******************************************************************************
AN
*************************************************************************
* Date:6/11/18
* Script name: AN SL Stock Tag
* Script id: customscript_sl_stock_tag
* Deployment id: customdeploy_sl_stock_tag
*
* REVISION HISTORY
*
* Revision 1.0 ${06-02-2019} Link on Item Record
*
*
******************************************************************************/
define(['N/file','N/render','N/record','N/search','N/format'],
function(file,render,record,search,format) {
/**
* Definition of the Suitelet script trigger point.
*
* @param {Object} context
* @param {ServerRequest} context.request - Encapsulation of the incoming request
* @param {ServerResponse} context.response - Encapsulation of the Suitelet response
* @Since 2015.2
*/
function onRequest(context) {
try {
//Getting the parameters
var internalId = context.request.parameters.intenalId;
var usage = assignDefaultValue(context.request.parameters.usage, null);
var itemIntenalId = assignDefaultValue(context.request.parameters.itemIntenalId, null);
var itemSerialNumber = assignDefaultValue(context.request.parameters.itemSrl, null);
var tranIntenalId = assignDefaultValue(context.request.parameters.tranIntenalId, null);
var bodyContent = '';
//Action on the link from Item record
if(usage=='stockLink'){
var workorderSearchObj = search.create({
type: "workorder",
filters:
[
["type","anyof","WorkOrd"],
"AND",
["createdfrom.type","noneof","SalesOrd"],
"AND",
["mainline","is","T"],
"AND",
["internalidnumber","equalto",tranIntenalId],
"AND",
["item.internalidnumber","equalto",itemIntenalId],
"AND",
["applyingtransaction.serialnumber","is",itemSerialNumber],
],
columns:
[
search.createColumn({name: "tranid", label: "Document Number"}),
search.createColumn({
name: "binnumber",
join: "applyingTransaction",
label: "Transaction Bin Number"
}),
// search.createColumn({
// name: "serialnumber",
// join: "item",
// label: "Serial/Lot Number"
// }),
search.createColumn({
name: "serialnumbers",
join: "applyingTransaction",
label: "Serial/Lot Numbers"
}),
search.createColumn({
name: "countryofmanufacture",
join: "item",
label: "Manufacturer Country"
}),
search.createColumn({
name: "trandate",
sort: search.Sort.ASC,
label: "Date"
}),
search.createColumn({name: "enddate", label: "End Date"}),
search.createColumn({
name: "itemid",
join: "item",
label: "Name"
}),
search.createColumn({
name: "displayname",
join: "item",
label: "Display Name"
})
]
});
var searchResultCount = workorderSearchObj.runPaged().count;
if(searchResultCount>0){
//Getting values from the search result
resultWO = workorderSearchObj.run().getRange({
start: 0,
end: 1
});
var displayName = escape_for_xml(resultWO[0].getValue({
name: "displayname",
join: "item"
}));
var itemNumber = escape_for_xml(resultWO[0].getValue({
name: "itemid",
join: "item"
}));
var itemName=escape_for_xml(itemNumber+" "+displayName);
//var itemName=escape_for_xml(itemNumber);
var countryofOrigin = escape_for_xml(resultWO[0].getValue({
name: "countryofmanufacture",
join: "item"
}));
var lotNumber = escape_for_xml(resultWO[0].getValue({
name: "serialnumbers",
join: "applyingTransaction"
}));
var mfgDate = escape_for_xml(resultWO[0].getValue({
name: "enddate"
}));
var WoNo = escape_for_xml(resultWO[0].getValue({
name: "tranid"
}));
//Creating the xml for the creation of the PDF body
var content = '<div style="border:1px;"> <table style="width: 100%; margin-top: 10px;font-size:24px;"> <tr> <td align="center"> <b>Product: '+itemNumber+'</b></td> </tr> <tr><td> Replacewithitemcode </td> </tr> <tr> <td align="center"><b> WO#: '+WoNo+' </b></td> </tr> <tr><td> ReplacewithWONo </td></tr><tr> <td align="center"><b> COO: '+countryofOrigin+'</b> </td> </tr> <tr><td> ReplacewithCountryofOrigin </td></tr> <tr> <td align="center"><b> Lot Number: '+lotNumber+'</b> </td> </tr> <tr><td> ReplacewithLotNumber </td> </tr> <tr> <td> </td> </tr> <tr> <td align="center"><b> Mfg. Date: '+mfgDate+'</b> </td> </tr> <tr><td> Replacewithmfgdate </td></tr> <tr> <td> </td> </tr> </table> </div><br></br><br></br>';
if((itemName!=null) && (itemName!=undefined) && (itemName!='')){
content = content.replace("Replacewithitemcode", '<barcode codetype="code128" align="center" showtext="false" value="'+itemNumber+'"> </barcode>');
}
else{
content = content.replace("Replacewithitemcode", '<span></span>');
}
if((WoNo!=null) && (WoNo!=undefined) && (WoNo!='')){
content = content.replace("ReplacewithWONo", '<barcode codetype="code128" align="center" showtext="false" value="'+WoNo+'"> </barcode>');
}
else{
content = content.replace("ReplacewithWONo", '<span></span>');
}
if((countryofOrigin!=null) && (countryofOrigin!=undefined) && (countryofOrigin!='')){
content = content.replace("ReplacewithCountryofOrigin", '<barcode codetype="code128" align="center" showtext="false" value="'+countryofOrigin+'"> </barcode>');
}
else{
content = content.replace("ReplacewithCountryofOrigin", '<span></span>');
}
if((lotNumber!=null) && (lotNumber!=undefined) && (lotNumber!='')){
content = content.replace("ReplacewithLotNumber", '<barcode codetype="code128" align="center" showtext="false" value="'+lotNumber+'"></barcode>');
}
else{
content = content.replace("ReplacewithLotNumber", '<span></span>');
}
if((mfgDate!=null) && (mfgDate!=undefined) && (mfgDate!='')){
content = content.replace("Replacewithmfgdate", '<barcode codetype="code128" align="center" showtext="false" value="'+mfgDate+'"></barcode>');
}
else{
content = content.replace("Replacewithmfgdate", '<span></span>');
}
bodyContent += content;
}
}
//Action on the Stock Button click from WO record
else{
//Getting values for the PDF from WO
var recordObj = record.load({ type: "workorder", id: internalId });
var itemName = null;
var WoNo=escape_for_xml(recordObj.getText({
fieldId: 'tranid'
}));
var itemId=escape_for_xml(recordObj.getValue({
fieldId: 'assemblyitem'
}));
/*var fieldLookUp = search.lookupFields({
type: search.Type.ITEM,
id: itemId,
columns: ['itemid']
});
if (fieldLookUp.itemid != null && fieldLookUp.itemid != "" && fieldLookUp.itemid != undefined)
{
itemName = fieldLookUp.itemid;
}*/
var itemName=recordObj.getText({
fieldId: 'assemblyitem'
});
// var mfgDate= escape_for_xml(recordObj.getText({
// fieldId: 'enddate'
// }));
currentDate= new Date();
// log.debug('currentDate',currentDate)
var format_date = format.format({
value: currentDate,
type: format.Type.DATETIME,
timezone: format.Timezone.AMERICA_NEW_YORK
})
// log.debug('format_date',format_date)
var todayDate = format_date.split(" ");
var todayDate1 = todayDate[0].split("/");
var mm =todayDate1[0];
var dd = todayDate1[1];
var yyyy = todayDate1[2];
var mfgDate = mm+'/'+dd+'/'+yyyy;
// log.debug('mfgDate',mfgDate)
var workorderSearchObj = search.create({
type: "workorder",
filters:
[
["type","anyof","WorkOrd"],
"AND",
["createdfrom.type","noneof","SalesOrd"],
"AND",
["mainline","is","T"],
"AND",
["internalidnumber","equalto",internalId]
],
columns:
[
search.createColumn({name: "tranid", label: "Document Number"}),
// search.createColumn({
// name: "serialnumbers",
// join: "applyingTransaction",
// label: "Serial/Lot Numbers"
// }),
search.createColumn({
name: "countryofmanufacture",
join: "item",
label: "Manufacturer Country"
}),
search.createColumn({
name: "custitem_allergen",
join: "item",
label: "Allergen"
}),
search.createColumn({
name: "internalid",
join: "applyingTransaction",
label: "Internal ID"
}),
search.createColumn({
name: "datecreated",
join: "applyingTransaction",
sort: search.Sort.DESC,
label: "Date Created"
}),
search.createColumn({
name: "itemid",
join: "item",
label: "Name"
}),
search.createColumn({
name: "displayname",
join: "item",
label: "Display Name"
}),
search.createColumn({
name: "formulatext",
formula: "CASE WHEN ({applyingtransaction.type} ='Work Order Completion' ) THEN {applyingtransaction.serialnumber} END",
label: "lot number"
})
]
});
var searchResult = workorderSearchObj.run().getRange({
start: 0,
end: 100
});
var test=null;
var lotNumber=null;
var itemNumber=null;
var countryofOrigin=null;
for(var k=0;k<searchResult.length;k++){
var lotNumber = searchResult[k].getValue({
name: "formulatext",
formula: "CASE WHEN ({applyingtransaction.type} ='Work Order Completion' ) THEN {applyingtransaction.serialnumbers} END"
});
var date_wocompletion = searchResult[k].getValue({
name: "datecreated",
join: "applyingTransaction",
sort: search.Sort.DESC
});
itemNumber = searchResult[k].getValue({
name: "itemid",
join: "item"
});
var displayName = searchResult[k].getValue({
name: "displayname",
join: "item"
});
if(displayName.indexOf(' ') == -1)
{
if(displayName.indexOf(',')!=-1)
{
arrayName = displayName.split(',', 2);
displayName = arrayName[0]+" , "+arrayName[1] ;
//log.debug('itemDisp11',itemDisp);
}
else if(displayName.indexOf('/')!=-1){
arrayName = displayName.split('/', 2);
displayName = arrayName[0]+" / "+arrayName[1] ;
}
}
var wo_compltion_id = searchResult[k].getValue({
name: "internalid",
join: "applyingTransaction"
});
var h=k+1;
if(h!=searchResult.length){
test = searchResult[h].getValue({
name: "internalid",
join: "applyingTransaction"
});
}
countryofOrigin = searchResult[k].getValue({
name: "countryofmanufacture",
join: "item"
});
var allergen = searchResult[k].getText({
name: "custitem_allergen",
join: "item"
});
var allerg = allergen.split(",");
var len = allerg.length
// log.debug('allerg',allerg)
//Creating the xml for the creation of the PDF body
var content = '<div style="border:1px;"> <table style="width: 100%; margin-top: 10px;font-size:24px;"> <tr> <td align="center"> <b>Product: '+escape_for_xml(itemName)+'</b></td> </tr> <tr><td> Replacewithitemcode </td> </tr> <tr> <td align="center"><b> WO#: '+WoNo+' </b></td> </tr> <tr><td> ReplacewithWONo </td></tr><tr> <td align="center"><b> COO: '+countryofOrigin+'</b> </td> </tr> <tr><td> ReplacewithCountryofOrigin </td></tr> <tr> <td align="center"><b> Lot Number: '+lotNumber+'</b> </td> </tr> <tr><td> ReplacewithLotNumber </td> </tr> <tr> <td> </td> </tr> <tr> <td align="center"><b> Mfg. Date: '+mfgDate+'</b> </td> </tr> <tr><td> Replacewithmfgdate </td></tr> <tr> <td> </td> </tr> </table> </div><br></br><br></br>';
if((itemName!=null) && (itemName!=undefined) && (itemName!='')){
content = content.replace("Replacewithitemcode", '<barcode codetype="code128" align="center" showtext="false" value="'+escape_for_xml(itemNumber)+'"> </barcode>');
}
else{
content = content.replace("Replacewithitemcode", '<span></span>');
}
if((WoNo!=null) && (WoNo!=undefined) && (WoNo!='')){
content = content.replace("ReplacewithWONo", '<barcode codetype="code128" align="center" showtext="false" value="'+escape_for_xml(WoNo)+'"> </barcode>');
}
else{
content = content.replace("ReplacewithWONo", '<span></span>');
}
if((countryofOrigin!=null) && (countryofOrigin!=undefined) && (countryofOrigin!='')){
content = content.replace("ReplacewithCountryofOrigin", '<barcode codetype="code128" align="center" showtext="false" value="'+escape_for_xml(countryofOrigin)+'"> </barcode>');
}
else{
content = content.replace("ReplacewithCountryofOrigin", '<span></span>');
}
if((lotNumber!=null) && (lotNumber!=undefined) && (lotNumber!='')){
content = content.replace("ReplacewithLotNumber", '<barcode codetype="code128" align="center" showtext="false" value="'+escape_for_xml(lotNumber)+'"></barcode>');
}
else{
content = content.replace("ReplacewithLotNumber", '<span></span>');
}
if((mfgDate!=null) && (mfgDate!=undefined) && (mfgDate!='')){
content = content.replace("Replacewithmfgdate", '<barcode codetype="code128" align="center" showtext="false" value="'+escape_for_xml(mfgDate)+'"></barcode>');
}
else{
content = content.replace("Replacewithmfgdate", '<span></span>');
}
//to display allergence
/* content_allergence = '<div style="margin-left: 5%; margin-right:5%;"><table style="width: 90%;"><tr><td style="font-size:28px; width:20% "><p align="center">Replaceallergen1</p></td><td style="font-size:28px; width:10% "><p align="center"> </p></td><td style="font-size:28px; width:20% "><p align="center">Replaceallergen2</p></td><td style="font-size:28px; width:10% "><p align="center"> </p></td><td style="font-size:28px; width:20% "><p align="center">Replaceallergen3</p></td></tr></table></div>'
if((allerg!=null) && (allerg!=undefined) && (allerg!='') && (allerg!='- None -')){
if((allerg[0]!=null) && (allerg[0]!=undefined) && (allerg[0]!='') && (allerg[0]!='- None -')){
content_allergence = content_allergence.replace("Replaceallergen1", '<span><b>'+allerg[0]+'</b><br></br></span>');
}else{
content_allergence = content_allergence.replace("Replaceallergen1", '<span><br></br></span>');
}
if((allerg[1]!=null) && (allerg[1]!=undefined) && (allerg[1]!='') && (allerg[1]!='- None -')){
content_allergence = content_allergence.replace("Replaceallergen2", '<span><b>'+allerg[1]+'</b><br></br></span>');
}else{
content_allergence = content_allergence.replace("Replaceallergen2", '<span><br></br></span>');
}
if((allerg[2]!=null) && (allerg[2]!=undefined) && (allerg[2]!='') && (allerg[2]!='- None -')){
content_allergence = content_allergence.replace("Replaceallergen3", '<span><b>'+allerg[2]+'</b><br></br></span>');
}else{
content_allergence = content_allergence.replace("Replaceallergen3", '<span><br></br></span>');
}
}
else{
content_allergence = content_allergence.replace("Replaceallergen1", '<span><br></br></span>');
content_allergence = content_allergence.replace("Replaceallergen2", '<span><br></br></span>');
content_allergence = content_allergence.replace("Replaceallergen3", '<span><br></br></span>');
}*/
var all =null;
var content_allergence;
content_allergence = '<div style="margin-left: 5%; margin-right:5%;"><table style="width: 90% "><tr>Replaceallergen</tr></table></div>'
if((allerg!=null) && (allerg!=undefined) && (allerg!='') && (allerg!='- None -') && (allerg!="")){
var wid = 90/len;
for(var z=0; z<len; z++){
all+='<td style="font-size:28px; width:'+wid+'% " align="center"><b>'+allerg[z]+'</b></td> <td> </td>'
}
content_allergence = content_allergence.replace("Replaceallergen", all);
}else{
content_allergence = content_allergence.replace("Replaceallergen",'');
}
content += content_allergence;
if(lotNumber == "" || lotNumber == null || lotNumber == undefined || lotNumber =='- None -' || lotNumber == " " || lotNumber == NaN || lotNumber == 'NaN'){
if((k+1) == searchResult.length ){
bodyContent += content;
var content_pallet = nextPage(escape_for_xml(itemNumber),escape_for_xml(displayName),escape_for_xml(lotNumber),escape_for_xml(mfgDate));
bodyContent += content_pallet;
}
continue;
}
else if((lotNumber != "" && lotNumber != null && lotNumber != undefined && lotNumber !='- None -' && lotNumber != " " && lotNumber != NaN && lotNumber != 'NaN') && (test == wo_compltion_id)){
bodyContent += content;
var content_pallet = nextPage(escape_for_xml(itemNumber),escape_for_xml(displayName),escape_for_xml(lotNumber),escape_for_xml(mfgDate));
bodyContent += content_pallet;
continue;
}
else if((lotNumber != "" && lotNumber != null && lotNumber != undefined && lotNumber !='- None -' && lotNumber != " " && lotNumber != NaN && lotNumber != 'NaN') && ( test != wo_compltion_id)){
bodyContent += content;
var content_pallet = nextPage(escape_for_xml(itemNumber),escape_for_xml(displayName),escape_for_xml(lotNumber),escape_for_xml(mfgDate));
bodyContent += content_pallet;
break;
}
}
}
//Loading the XML layout file
var myXMLFile = file.load({
id: '10172'
});
var xmlContent = myXMLFile.getContents();
//Replacing the Body
xmlContent = xmlContent.replace("ReplacewithContent",bodyContent);
//Converting xml to a PDF file
var pdfFile = render.xmlToPdf({
xmlString: xmlContent
});
pdfFile.name = "stockTag.pdf"
context.response.writeFile(pdfFile,true);
} catch (e) {
log.debug({
title: e.name,
details: e.message
});
}
}
return {
onRequest: onRequest
};
//To check whether a value exists in parameter
function checkForParameter(parameter, parameterName) {
if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " ") {
return true;
} else {
if (parameterName)
return false;
}
}
//To assign a default value if the it is empty
function assignDefaultValue(value, defaultValue) {
if (checkForParameter(value))
return value;
else
return defaultValue;
}
});
/*******************************************************************
* Fix text
*
* @param argument
* @returns Created By JJ on 15-Nov-2017 4:30:21 PM
*/
function escape_for_xml(argument) {
try {
if (argument != "" && argument != null) {
//var newString = xml.escape({
// xmlText : argument
//});
argument = argument.replace(/&/g, '&');
argument = argument.replace(/</g, '<');
argument = argument.replace(/>/g, '>');
argument = argument.replace(/"/g, '"');
argument = argument.replace(/'/g, ''');
return argument;
} else {
return "";
}
} catch (e) {
log.debug({
title : e.name,
details : e.message
});
}
}
function nextPage(itemNumber,itemDisp,lotNumber,mfgDate)
{
var bigFlag = false;
var dispFlag = false;
//xml NEXT PAGE
var content_pallet ='<div style="margin-left: 5%; margin-right:5%;"><table style="page-break-before: always"><tr><td style=" font-family: thai-font, sans-serif;font-weight: bold;"><p align="center">ReplaceItemNum</p></td></tr><tr><td style="font-family: thai-font,sans-serif;text-transform:uppercase;font-weight:bold ; "><p align="center">ReplacewithItemDesc</p></td></tr><tr><td style="font-family: tha-font, sans-serif; font-weight: bold;"><p align="center">ReplacewithLotNum</p></td></tr><tr><td style="font-family: tha-font, sans-serif; font-weight: bold;"><p align="center">ReplacewithmfgDate</p></td></tr></table></div>'
if((itemNumber!=null) && (itemNumber!=undefined) && (itemNumber!='') && (itemNumber.length < 9)){
content_pallet = content_pallet.replace("ReplaceItemNum", '<span style="font-size:140px;"><b>'+itemNumber+'</b><br></br></span>');
}
else if ((itemNumber!=null) && (itemNumber!=undefined) && (itemNumber!='') && (itemNumber.length >= 9) && (itemNumber.length <= 15))
{
content_pallet = content_pallet.replace("ReplaceItemNum", '<span style="font-size:100px;"><b>'+itemNumber+'</b><br></br></span>');
}
else if ((itemNumber!=null) && (itemNumber!=undefined) && (itemNumber!='') && (itemNumber.length > 15))
{
content_pallet = content_pallet.replace("ReplaceItemNum", '<span style="font-size:78px;"><b>'+itemNumber+'</b><br></br></span>');
}
else{
content_pallet = content_pallet.replace("ReplaceItemNum", '<span><br></br></span>');
}
if((itemDisp!=null) && (itemDisp!=undefined) && (itemDisp!='') && (itemDisp.length<=15)){
if(itemDisp.indexOf(' ')!=-1)
{
arrayName = itemDisp.split(' ');
for(var m=0;m<arrayName.length;m++)
{
if(arrayName[m].length > 7)
{
dispFlag = true;
break;
}
}
if(dispFlag)
{
content_pallet = content_pallet.replace("ReplacewithItemDesc",'<span style="font-size:120px;"><b>'+itemDisp+'</b><br></br></span>');
}
else
{
content_pallet = content_pallet.replace("ReplacewithItemDesc",'<span style="font-size:140px;"><b>'+itemDisp+'</b><br></br></span>');
}
}
else
content_pallet = content_pallet.replace("ReplacewithItemDesc",'<span style="font-size:140px;"><b>'+itemDisp+'</b><br></br></span>');
//content_pallet = content_pallet.replace("ReplacewithItemDesc",'<span style="font-size:140px;"><b>'+itemDisp+'</b><br></br></span>');
}
else if((itemDisp!=null) && (itemDisp!=undefined) && (itemDisp!='') && (itemDisp.length>15) && (itemDisp.length<25)){
content_pallet = content_pallet.replace("ReplacewithItemDesc",'<span style="font-size:96px;"><b>'+itemDisp+'</b><br></br></span>');
}
else if((itemDisp!=null) && (itemDisp!=undefined) && (itemDisp!='') && (itemDisp.length>=25)){
bigFlag = true;
content_pallet = content_pallet.replace("ReplacewithItemDesc",'<span style="font-size:90px;"><b>'+itemDisp+'</b><br></br></span>');
}
else if((itemDisp==null) && (itemDisp==undefined) && (itemDisp=='')){
content_pallet = content_pallet.replace("ReplacewithItemDesc", '<span><br> </br></span>');
}
if((lotNumber!=null) && (lotNumber!=undefined) && (lotNumber!='') && (lotNumber.length <9)){
content_pallet = content_pallet.replace("ReplacewithLotNum", '<span style="text-align:center;font-size:140px;"><b>'+lotNumber+'</b><br></br></span>');
}
else if((lotNumber!=null) && (lotNumber!=undefined) && (lotNumber!='') && (lotNumber.length >=9)){
content_pallet = content_pallet.replace("ReplacewithLotNum", '<span style="text-align:center;font-size:120px;"><b>'+lotNumber+'</b><br></br></span>');
}
else{
content_pallet = content_pallet.replace("ReplacewithLotNum", '<span><br></br></span>');
}
if((mfgDate!=null) && (mfgDate!=undefined) && (mfgDate!='') && (bigFlag)){
content_pallet = content_pallet.replace("ReplacewithmfgDate", '<span style="text-align:center;font-size:100px;"><b>'+mfgDate+'</b><br></br></span>');
}
else if((mfgDate!=null) && (mfgDate!=undefined) && (mfgDate!='')){
content_pallet = content_pallet.replace("ReplacewithmfgDate", '<span style="text-align:center;font-size:120px;"><b>'+mfgDate+'</b><br></br></span>');
}
else{
content_pallet = content_pallet.replace("ReplacewithmfgDate", '<span><br></br></span>');
}
return content_pallet;
}