Print RF Smart Licence Plate Report

Jira Code: AD 50

In this task, we have to create an RF Smart Licence plate print in RF Smart record. There are data coming from RF Smart Licence plate, RF Smart Header. The license plate is a 4×6 label that gets printed by a function in RF Smart Header record.

Suitelet Script

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
/*******************************************************************************
* CLIENTNAME:ADVANTUS 
* AD 50 RF Smart report
 *************************************************************************
* Date : 04/03/2019
*
* Author: Jobin & Jismi IT Services LLP
* Script Description : To print RF smart report
*  Date created : 04/03/2019
*
* REVISION HISTORY
*
* Revision 1.0 ${04/03/2019} aj : created
* 		   1.1 ${16/03/2019} aj : To seperate XML 
* 
*
******************************************************************************/
define(['N/record', 'N/render', 'N/search', 'N/ui/serverWidget', 'N/url','N/file'],
		/**
		 * @param {record} record
		 * @param {render} render
		 * @param {search} search
		 * @param {serverWidget} serverWidget
		 * @param {url} url
		 */
		function(record, render, search, serverWidget, url,file) {

	/**
	 * 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 recID =  context.request.parameters.idOfRec;
			// to get the header record details..
			var headerDetails =  findHeaderNameAndDate(recID);

			// to get the pdf as xml

			var XML = findXMLData(headerDetails);
			

			// to render the xml

			var pdfFile = render.xmlToPdf({
				xmlString: XML
			});
			context.response.writeFile(pdfFile, true);

		}catch(e)
		{
			log.debug("Err@ FN onRequest",e);
			log.error("Err@ onRequest FN ",e);

		}


	}
	/*******************************************************************
	 * To assign a default value if the it is empty
	 * 
	 * @param value
	 * @param defaultValue
	 * @returns
	 ******************************************************************/
	function findHeaderNameAndDate(recID)
	{
		try{
			// create search for getting data
			var customrecord_rfs_lp_headerSearchObj = search.create({
				type: "customrecord_rfs_lp_header",
				filters:
					[
						["internalidnumber","equalto",recID]
						],
						columns:
							[
								search.createColumn({
									name: "name",
									sort: search.Sort.ASC,
									label: "Name"
								}),
								search.createColumn({name: "created", label: "Date Created"}),
								search.createColumn({
									name: "displaynametranslated",
									join: "CUSTRECORD_RFS_LP_LINE_PARENT",
									label: "Display Name (Translated)"
								}),
								search.createColumn({
									name: "custrecord_rfs_lp_line_item",
									join: "CUSTRECORD_RFS_LP_LINE_PARENT",
									label: "Item"
								}),
								search.createColumn({
									name: "custrecord_rfs_lp_line_quantity",
									join: "CUSTRECORD_RFS_LP_LINE_PARENT",
									label: "Quantity"
								}),
								search.createColumn({
									name: "custrecord_rfs_lp_line_uom",
									join: "CUSTRECORD_RFS_LP_LINE_PARENT",
									label: "UOM"
								})
								]
			});
			var searchResultCount = customrecord_rfs_lp_headerSearchObj.runPaged().count;

			customrecord_rfs_lp_headerSearchObj.run().each(function(result){
				// .run().each has a limit of 4,000 results
				return true;
			});
			var searchResult = customrecord_rfs_lp_headerSearchObj.run().getRange({
				start:0,
				end:10
			}); 

			var returnArray = [];
			for(var i=0;i<searchResult.length;i++)
			{

				// to get the data
				var name  =  searchResult[i].getValue({
					name: "name",
					sort: search.Sort.ASC,
					label: "Name"
				});

				var dateCreated = searchResult[i].getValue({
					name: "created", label: "Date Created"
				});
				dateCreated =dateCreated.split(" ")[0];

				var item = searchResult[i].getText({
					name: "custrecord_rfs_lp_line_item",
					join: "CUSTRECORD_RFS_LP_LINE_PARENT",
					label: "Item"
				});

				var itemID = searchResult[i].getValue({
					name: "custrecord_rfs_lp_line_item",
					join: "CUSTRECORD_RFS_LP_LINE_PARENT",
					label: "Item"
				});

				var qty = searchResult[i].getValue({
					name: "custrecord_rfs_lp_line_quantity",
					join: "CUSTRECORD_RFS_LP_LINE_PARENT",
					label: "Quantity"
				});

				var uom = searchResult[i].getText({
					name: "custrecord_rfs_lp_line_uom",
					join: "CUSTRECORD_RFS_LP_LINE_PARENT",
					label: "UOM"
				});
				// to find the line details..
				var lineDetails = findLPLineDetails(name);
				// to find the item detais..
				var itemFields = findItemFields(itemID,lineDetails.poNum,lineDetails.soNum);
				var objects ={name:name,dateCreated:dateCreated,item:item,qty:qty,uom:uom,po:lineDetails.poNum,description:itemFields.displayName,lotNum:itemFields.lotNum,exp:itemFields.exp};

				returnArray.push(objects);

			}
			return returnArray;

		}catch(e)
		{
			log.debug("Err@ FN findHeaderNameAndDate",e);
			log.error("Err@ findHeaderNameAndDate FN ",e);

		}

	}
	/****************
	 * find item desc from trn
	 */
	function findItemFields(item,po,so)
	{
		try{
			var tranId;
			// to craete a search for this..
			if(po!=undefined && po!=null && po!='null' && po!="" && po!=' ' )
				tranId = po;
			else if(so!=undefined && so!=null && so!='null' && so!="" && so!=' ' )
				tranId = so;
			var displayName,lotNum,exp;
			var itemObj ={};

			if(item!=undefined && item!=null && item!='null' && item!="" && item!=' ' && tranId!=undefined && tranId!=null && tranId!='null' && tranId!="" && tranId!=' ')
			{
				var transactionSearchObj = search.create({
					type: "transaction",
					filters:
						[

							["internalidnumber","equalto",tranId], 
							"AND", 
							["item","anyof",item]
							],
							columns:
								[
									search.createColumn({
										name: "salesdescription",
										join: "item",
										label: "Description"
									}),
									search.createColumn({
										name: "displayname",
										join: "item",
										label: "Display Name"
									}),
									search.createColumn({name: "serialnumbers", label: "Serial/Lot Numbers"}),
									search.createColumn({name: "expectedclosedate", label: "Expected Close"}),
									search.createColumn({
										name: "serialnumber",
										join: "item",
										label: "Serial/Lot Number"
									}),
									search.createColumn({
										name: "lastinvtcountdate",
										join: "item",
										label: "Last Count Date"
									})
									]
				});
				var searchResultCount = transactionSearchObj.runPaged().count;
				log.debug("transactionSearchObj result count",searchResultCount);

				var searchResult = transactionSearchObj.run().getRange({
					start:0,
					end:1
				}); 
				if(searchResult.length>0)
				{
					displayName = searchResult[0].getValue({
						name: "displayname",
						join: "item",
						label: "Display Name"
					});
					lotNum = searchResult[0].getValue({
						name: "serialnumber",
						join: "item",
						label: "Serial/Lot Number"
					});
					exp =searchResult[0].getValue({
						name: "expectedclosedate",
						label: "Expected Close"
					});

					itemObj['lotNum']=lotNum;
					itemObj['displayName']=displayName;
					itemObj['exp'] = exp;

				}
			}
			else if(item!=undefined && item!=null && item!='null' && item!="" && item!=' '){
				var itemSearchObj = search.create({
					type: "item",
					filters:
						[
							["name","is",item]
							],
							columns:
								[
									search.createColumn({name: "displayname", label: "Display Name"}),
									search.createColumn({name: "serialnumber", label: "Serial/Lot Number"})
									]
				});
				var searchResultCount = itemSearchObj.runPaged().count;


				var searchResult = itemSearchObj.run().getRange({
					start:0,
					end:1
				}); 
				if(searchResult.length>0)
				{
					displayName = searchResult[0].getValue({
						name: "displayname", 
						label: "Display Name"
					});
					lotNum = searchResult[0].getValue({
						name: "serialnumber",
						label: "Serial/Lot Number"
					});
					itemObj.lotNum =lotNum;
					itemObj.displayName=displayName;

				}
			}

			return itemObj;

		}catch(e)
		{
			log.debug("Err@ FN findItemFields",e);
			log.error("Err@ findItemFields FN ",e);

		}

	}

	/**********
	 * 
	 */
	function findLPLineDetails(name)
	{
		try{
			var customrecord_rfs_lp_line_detailSearchObj = search.create({
				type: "customrecord_rfs_lp_line_detail",
				filters:
					[
						["custrecord_rfs_lp_line_detail_lpn","is",name]
						],
						columns:
							[
								search.createColumn({
									name: "scriptid",
									sort: search.Sort.ASC,
									label: "Script ID"
								}),
								search.createColumn({name: "custrecord_rfs_lp_line_detail_lpn", label: "License Plate Number"}),
								search.createColumn({name: "custrecord_rfs_lp_line_detail_inv_number", label: "Inventory Number"}),
								search.createColumn({name: "custrecord_rfs_lp_line_detail_quantity", label: "Quantity"}),
								search.createColumn({name: "custrecord_rfs_lp_line_detail_inv_status", label: "Inventory Status"}),
								search.createColumn({name: "custrecord_rfs_lp_line_detail_inb_tx_num", label: "Inbound Transaction Number"}),
								search.createColumn({name: "custrecord_rfs_lp_line_detail_out_tx_num", label: "Outbound Transaction Number"}),
								search.createColumn({name: "custrecord_rfs_lp_line_detail_out_lineid", label: "Outbound Line Id"}),
								search.createColumn({name: "custrecord_rfs_lp_line_detail_last_count", label: "Last Counted Date"})
								]
			});
			var searchResultCount = customrecord_rfs_lp_line_detailSearchObj.runPaged().count;

			customrecord_rfs_lp_line_detailSearchObj.run().each(function(result){
				// .run().each has a limit of 4,000 results
				return true;
			});
			var searchResult = customrecord_rfs_lp_line_detailSearchObj.run().getRange({
				start:0,
				end:10
			}); 

			var returnArrayLPLineDeatils = [];

			for(var i=0;i<searchResult.length;i++)
			{
				poNum = searchResult[i].getValue({
					name: "custrecord_rfs_lp_line_detail_inb_tx_num", 
					label: "Inbound Transaction Number"
				});
				poName = searchResult[i].getText({
					name: "custrecord_rfs_lp_line_detail_inb_tx_num", 
					label: "Inbound Transaction Number"
				});


				var soNum = searchResult[i].getValue({
					name: "custrecord_rfs_lp_line_detail_out_tx_num",
					label: "Outbound Transaction Number"
				});
				returnArrayLPLineDeatils={poNum:poNum,poName:poName,soNum:soNum};
			}

			return returnArrayLPLineDeatils;

		}catch(e)
		{
			log.debug("Err@ FN findLPLineDetails",e);
			log.error("Err@ findLPLineDetails FN ",e);
			//console.log("Err@ FN =",e);
		}


	}
	/***********
	 * 
	 * 
	 */
	function findXMLData(obj)
	{
		try{
			// to load XML file
			var myXMLFile = file.load({
				id : '26082'
			});
			var myXMLFile_value = myXMLFile.getContents();


			var XMLstring = '<?xml version="1.0"?>'+
			'<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">'+
			'<pdfset>';
			for(var i=0;i<obj.length;i++)
			{
				var XML=myXMLFile_value;
				XML =XML.replace('<!--ITEM-->',obj[i].item);
				XML = XML.replace('%barCodeValue%',obj[i].name);
				XML = XML.replace('<!--DESCRIPTION-->',escape_for_xml(obj[i].description));
				XML = XML.replace('<!--QTY-->',obj[i].qty);
				XML = XML.replace('<!--UOM-->',obj[i].uom);
				XML =XML.replace('<!--PONUM-->',checkForParameter(obj[i].po));
				XML = XML.replace('<!--RECEIVEDDATE-->',obj[i].dateCreated);
				XML = XML.replace('<!--LOTNUM-->',checkForParameter(escape_for_xml(obj[i].lotNum)));
				XML = XML.replace('<!--EXP-->',checkForParameter(obj[i].exp));
				XMLstring = XMLstring+XML;;
			}

			XMLstring=XMLstring+'</pdfset>';

			return XMLstring;

		}catch(e)
		{
			log.debug("Err@ findXMLData",e)
			log.error("Err@ findXMLData",e)
		}
	}
	/*******************************************************************
	 * 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) {

				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.error({
				title : e.name,
				details : e.message
			});

		}

	}
	/*******************************************************************
	 * To check whether a value exists in parameter
	 ******************************************************************/
	function checkForParameter(parameter, parameterName) {
		try {
			if (parameter !== null && parameter !== undefined &&
					parameter !== false && parameter !== "null" &&
					parameter !== "undefined" &&
					parameter !== "false" && parameter != "" &&
					parameter != " ") {
				return parameter;
			} else {
				if (parameterName)
					log.debug('Empty Value found',
							'Empty Value for parameter ' +
							parameterName);

				return " ";
			}
		} catch (e) {
			log.debug("Err@ FN checkForParameter", e);
			log.error("Err@ FN checkForParameter", e);
		}
	}
	return {
		onRequest: onRequest
	};

});

XML File

<pdf>

        <head>
            <style>
                tr {
                    border: 0;
                }

                td {
                    border-left: 1;
                    border-bottom: 0;
                    border-right: 0;
                    border-color: black;
                    font-weight: bold
                }

                .head {
                    background-color: black;
                    color: white;
                    font-size: 25pt;
                }

                p {
                    padding-top: -100% font-weight:bold
                }

            </style>
        </head>

        <body padding="0.5in 0.5in 0.5in 0.5in" size="Letter">
            <table style="border:1; width :288pt; height:432pt; align:center">
                <tr style="height:25%">
                    <td style="vertical-align:baseline; border-top:0; border-left:0; colspan:2;">
                        <table style="border:0; width:282pt; height:164.16pt;">
                            <tr style="border:0; height:20.16pt;">
                                <td style="border:0; colspan:2;">ITEM #</td>
                            </tr>
                            <tr style="border:0; height:50.16pt;padding-left:-14pt;">
                                <td class="head" style="border:0; colspan:1; align:center;"><strong><!--ITEM--></strong></td>
                            </tr>
                            <tr style="border:0;">
                                <td style="border:0; colspan:2; align:center">INBOUND LICENCE PLATE<br />
                                    <barcode style="height:35%;width:80%" codetype="code128" showtext="true" value="%barCodeValue%"> </barcode>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
                <tr style="border:1; height:99.28pt;">
                    <td width="144pt" style="border-left:0;">DESCRIPTION<br /><br /><!--DESCRIPTION--></td>
                    <td width="144pt">
                        <div style="padding-top:-11pt;"><span>QTY</span><br /><br /><span style="font-size:25px;font-weight:bold"><!--QTY--></span><br /><br /><span style="font-size:15px; text-transform: uppercase; font-weight:bold;display:-webkit-box;"><!--UOM--></span></div>
                    </td>
                </tr>
                <tr style="border:1 height:89.28pt;">
                    <td width="144pt" style="border-left:0;">PO#<br />
                        <p style="font-size:25px;font-weight:bold"><!--PONUM--></p>
                    </td>
                    <td width="144pt">RECEIVED<br />
                        <p style="font-size:25px;font-weight:bold"><!--RECEIVEDDATE--></p>
                    </td>
                </tr>
                <tr style="border:1 height:79.28pt;">
                    <td width="144pt" style="border-left:0;">LOT #
                        <p style="font-size:25px;font-weight:bold"><!--LOTNUM--></p>
                    </td>
                    <td width="144pt">EXP
                        <p style="font-size:25px;font-weight:bold"><!--EXP--></p>
                    </td>
                </tr>
            </table>
        </body>
    </pdf>

Leave a comment

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