Jira code: AN-2 Task 2
Place one Stock Tag button in the work order(WO) record. This button is set only if that WO is not created from a Sales Order. On that button click, it will create the Stock tag PDF with the data from the WO. The tag includes details such as Product, WO#, Lot Number, COO, Date Received, and Mfg. Date.
User Event Script
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
/**
* Script Description: This script is for setting a buttons in the Work Order record
*/
/*******************************************************************************
* * AN * *
* **************************************************************************
* Date:06/11/18
* Script name: AN UE WO Buttons
* Script id: customscript_an_ue_wo_buttons
* Deployment id: customdeploy_an_ue_wo_buttons
* Applied to: Work order
*
******************************************************************************/
define(['N/search'],
function(search) {
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {string} scriptContext.type - Trigger type
* @param {Form} scriptContext.form - Current form
* @Since 2015.2
*/
function beforeLoad(scriptContext) {
try {
var CustRec=scriptContext.form;
if(scriptContext.type == 'view'){
//Loading Client Script
CustRec.clientScriptFileId = 10173;
var recId=scriptContext.newRecord.id;
log.debug({
title: 'recId',
details: recId
});
var transactionSearchObj = search.create({
type: "transaction",
filters:
[
["mainline","is","T"],
"AND",
["internalidnumber","equalto",recId],
"AND",
["createdfrom.type","anyof","SalesOrd"]
],
columns:
[
search.createColumn({
name: "tranid",
sort: search.Sort.ASC,
label: "Document Number"
})
]
});
var searchResultCount = transactionSearchObj.runPaged().count;
log.debug("transactionSearchObj result count",searchResultCount);
if(searchResultCount==0){
//Set Raw Material Tag button
var stockTag=CustRec.addButton({
id:'custpage_stock_tag_btn',
label:'Stock Tag',
functionName:'stockTag'
});
}
}
} catch (e) {
log.debug({
title: e.name,
details: e.message
});
}
}
return {
beforeLoad: beforeLoad
};
});
Client Script
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
/**
* Script Description: This script defining the function of button
*/
/*******************************************************************************
* * AN * *
* **************************************************************************
* Date:6/11/18
* Script name: AN CS WO Btn Action
* Script id: customscript_an_cs_wo_btn_action
* Deployment id: customdeploy_an_cs_wo_btn_action
* Applied to: Work order
*
******************************************************************************/
define(['N/currentRecord','N/record','N/url'],
function(currentRecord,record,url) {
/**
* Function to be executed after page is initialized.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
*
* @since 2015.2
*/
function pageInit(scriptContext) {
try {
console.log("In");
} catch (e) {
console.log(e.name,e.message);
}
}
function stockTag() {
try {
console.log("stockTag");
var recID = currentRecord.get().id;
var parameterObj = {
intenalId: recID
};
var recObj = record.load({ type: "workorder", id: recID });
var labelUrl = url.resolveScript({
scriptId: "customscript_sl_stock_tag",
deploymentId: "customdeploy_sl_stock_tag",
returnExternalUrl: false,
params: parameterObj
});
var childwindow = window.open(labelUrl);
} catch (e) {
console.log(e.name,e.message);
}
}
return {
pageInit: pageInit,
stockTag: stockTag
};
});
XML Code
<?xml version="1.0"?>
<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
<pdf>
<head>
<macrolist>
<macro id="nlfooter">
<table class="footer" style="width: 100%;">
<tr>
<td align="center" class="pagenumber">
<pagenumber /> of
<totalpages />
</td>
</tr>
</table>
</macro>
</macrolist>
<style type="text/css">
span.title {
font-size: 24pt;
}
span.pagenumber {
font-size: 10pt;
}
span.number {
font-size: 16pt;
}
.pagenumber {
font-size: 6pt;
}
.addressheader {
font-size: 9pt;
}
span.itemname {
font-weight: bold;
line-height: 150%;
}
barcode{
width: 450px;
height:75px;
}
</style>
</head>
<body header="nlheader" header-height="10%" footer="nlfooter" footer-height="10pt" padding="0.35in 0.35in 0.35in 0.35in" size="A4">
<br></br>
<p class="title" align="center" style="font-size:28px;">
<b>Stock Tag</b>
</p>
<br></br>
ReplacewithContent
</body>
</pdf>
Suitelet
/**
* @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
*
******************************************************************************/
define(['N/file','N/render','N/record','N/search'],
function(file,render,record,search) {
/**
* 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 {
var internalId = context.request.parameters.intenalId;
log.debug({
title: "record internalId",
details: internalId
});
var recordObj = record.load({ type: "workorder", id: internalId });
var WoNo=recordObj.getText({
fieldId: 'tranid'
});
var itemNameV=recordObj.getValue({
fieldId: 'assemblyitem'
});
var itemName=recordObj.getText({
fieldId: 'assemblyitem'
});
var locationv=recordObj.getValue({
fieldId: 'location'
});
var countryofOrigindtls = null;
if((locationv!=null) && (locationv!=undefined) && (locationv!='')){
var countryofOrigindtls = search.lookupFields({
type: record.Type.LOCATION,
id: locationv,
columns: ['country']
});
}
var receiveDate = recordObj.getText({
fieldId: 'trandate'
});
var mfgDate= recordObj.getText({
fieldId: 'enddate'
});
var countryofOrigin=countryofOrigindtls.country;
log.debug({
title: "WoNo",
details: WoNo
});
var numLines = recordObj.getLineCount({
sublistId: 'item'
});
log.debug({
title: "numLines",
details: numLines
});
var bodyContent = '';
var numpages = 0;
var assemblyitemSearchObj = search.create({
type: "assemblyitem",
filters:
[
["type","anyof","Assembly"],
"AND",
["internalidnumber","equalto",itemNameV]
],
columns:
[
search.createColumn({
name: "itemid",
summary: "GROUP",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({
name: "serialnumber",
summary: "MAX",
label: "Serial/Lot Number"
})
]
});
var searchResultCount = assemblyitemSearchObj.runPaged().count;
log.debug("assemblyitemSearchObj result count",searchResultCount);
var lotNumber=null;
if(searchResultCount>0){
result = assemblyitemSearchObj.run().getRange({
start: 0,
end: 1
});
lotNumber = result[0].getValue({
name: "serialnumber",
summary: "MAX"
});
}
var content = '<div style="border:1px;"> <table style="width: 100%; margin-top: 10px;font-size:24px;"> <tr> <td align="center"> <b>Product: '+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 align="center"><b> Date Received: '+receiveDate+'</b> </td> </tr> <tr><td> Replacewithdate </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" style="width: 640px;" align="center" showtext="false" value="'+itemName+'"> </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((receiveDate!=null) && (receiveDate!=undefined) && (receiveDate!='')){
content = content.replace("Replacewithdate", '<barcode codetype="code128" align="center" showtext="false" value="'+receiveDate+'"></barcode>');
}
else{
content = content.replace("Replacewithdate", '<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;
var myXMLFile = file.load({
id: '10172'
});
var xmlContent = myXMLFile.getContents();
xmlContent = xmlContent.replace("ReplacewithContent",bodyContent);
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
};
});