Shipping Tag PDF From Sales Order

Jira code: AN-2 Task 4


Place a Shipping Tag button in the SO record. On that button click, it will create the PDF with the data from the SO. And also it contains the item line details.

User Event Script

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */

/**
 * Script Description: This script is for setting a buttons in the Sales Order record
 */

/*******************************************************************************
 * * AN * *
 * **************************************************************************
 * Date:02/11/18 
 * Script name: AN UE SO Buttons
 * Script id: customscript_an_ue_so_buttons
 * Deployment id: customdeploy_an_ue_so_buttons
 * Applied to: Sales 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 = 10458;
    			
    			var recId=scriptContext.newRecord.id;
    			log.debug({    
    				title: 'recId',
                    details: recId
                });
    			
              	
              //Set Shipping PDF button
    			var shippingPDF=CustRec.addButton({
    				id:'custpage_shipping_pdf_btn',
    				label:'Shipping PDF',
    				functionName:'shippingPDF'
    			});
    			
    			
    		    
    		}
    	
			
		} 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:7/11/18 
 * Script name: AN CS SO Btn Action
 * Script id: customscript_an_cs_so_btn_action
 * Deployment id: customdeploy_an_cs_so_btn_action
 * Applied to: Sales 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 shippingPDF() {
    	try {
    		console.log("shippingPDF");
    		var recID = currentRecord.get().id;

            var parameterObj = {
                intenalId: recID
            };
            var recObj = record.load({ type: "salesorder", id: recID });
          
          
            var labelUrl = url.resolveScript({
                scriptId: "customscript_sl_shipping_pdf",
                deploymentId: "customdeploy_sl_shipping_pdf",
                returnExternalUrl: false,
                params: parameterObj
            });
            var childwindow = window.open(labelUrl);
			
		} catch (e) {
			console.log(e.name,e.message);
		}
		
	}
    
    


    

    return {
        pageInit: pageInit,
        shippingPDF:shippingPDF
    };
    
});

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: 250px;
        	height:30px;
        }
       
        </style>
    </head>

    <body header="nlheader" footer="nlfooter" header-height="10pt" footer-height="10pt" padding="0.35in 0.35in 0.35in 0.35in" size="A5-LANDSCAPE">
    		<br></br> 

        ReplacewithContent
    </body>
</pdf>

Suitelet

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */

/**
 * Script Description: PDF Creation 
 */

/*******************************************************************************
 * * AN * *
 * **************************************************************************
 * Date:7/11/18 
 * Script name: AN SL Shipping PDF
 * Script id: customscript_sl_shipping_pdf
 * Deployment id: customdeploy_sl_shipping_pdf
 * 


 ******************************************************************************/

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: "salesorder", id: internalId });
            var soNO=recordObj.getText({
   			 fieldId: 'tranid'
       	 	});
           
            var date=recordObj.getText({
     			fieldId: 'trandate'
         	});
            
            var soNO=recordObj.getText({
   			 	fieldId: 'tranid'
       	 	});
            
            var customer=recordObj.getText({
      			fieldId: 'entity'
          	 });
            
       
            var  pickedBy = recordObj.getText({
                fieldId: 'shipaddress'
            });                   
           
            log.debug({    
   				title: "pickedBy",
                details: pickedBy
            });
            
            var pallet=recordObj.getText({
      			 fieldId: 'shipcarrier'
          	});
            
            var palletOf=recordObj.getText({
     			 fieldId: 'shipcarrier'
         	});
            
            var subsidiary=recordObj.getText({
    			 fieldId: 'subsidiary'
        	});
            
            
            log.debug({    
   				title: "soNO",
                details: soNO
            });
            
            var numLines = recordObj.getLineCount({
                sublistId: 'item'
            });
            
            log.debug({    
  				title: "numLines",
                details: numLines
            });
            var pdfContent = '<table style="width: 100%;border-top:1px;border-left:1px;border-right:1px;border-bottom:1px;page-break-inside: auto;"> <tr><td  align="center"><p align="center" class="title" style="font-size:22px;"><b>SHIPPING TAG</b></p></td></tr></table> <table style="width: 100%;font-size:18px;border-left:1px;border-right:1px;border-top:1px;"> <tr><td  align="left" style="width: 29%;"><p align="left" class="title" style="font-size:18px;"><b>DATE</b></p></td><td align="left" style="width: 71%;">'+date+'</td></tr> <tr><td  align="left"><p align="left" class="title" style="font-size:18px;"><b>ORDER NUMBER</b></p></td><td  align="left">'+soNO+'</td></tr> <tr><td  align="left"><p align="left" class="title" style="font-size:18px;"><b>CUSTOMER</b></p></td><td  align="left">'+customer+'</td></tr> <tr><td  align="left"><p align="left" class="title" style="font-size:18px;"><b>PICKED BY</b></p></td><td  align="left"> </td></tr> <!--<tr><td  align="left" style="width: 30%;"><p align="left" class="title" style="font-size:18px;"><b>PALLET #</b></p></td><td  align="left">'+pallet+'</td><td style="width: 5%;"><b>OF</b></td><td  style="width: 40%;">'+palletOf+'</td></tr> -->  <tr><td> </td></tr></table>  <table style="width: 100%; font-size:18px;page-break-inside: auto;border-left:1px;border-right:1px;border-top:1px;border-bottom:1px;"> <tr><td  align="left" style="width: 30%;"><p align="left" class="title" style="font-size:18px;"><b>PRODUCT</b></p></td><td align="left" style="width: 50%;"><b>  PRODUCT BARCODE</b></td><td align="left" style="width: 20%;"><b>QTY</b></td></tr>ReplacewithTableBody<tr><td> </td></tr></table> <table style="width: 100%;border:1px; font-size:18px;border:1px;page-break-inside: auto;"> <tr><td  align="left" style="width: 60%;"><p align="left" class="title" style="font-size:18px;"><b>'+subsidiary+'</b></p></td><td align="right" style="width: 25%;"><b>CASES TOTAL:</b></td><td align="center" style="width: 15%;"><b>ReplacewithQTY</b></td></tr></table>';
            
            
            
            var bodyContent='';
            var totalQ=0;
            
            for (var i = 0; i < numLines; i++) {
                   
            	
            	 	var itemName = recordObj.getSublistText({
            	 		fieldId: "item",
            	 		sublistId: 'item',
            	 		line: i
            	 	});
            	 	
            	 	var itemNamev = recordObj.getSublistValue({
            	 		fieldId: "item",
            	 		sublistId: 'item',
            	 		line: i
            	 	});
            	 	
                    var quantity = recordObj.getSublistValue({
                        fieldId: "quantity",
                        sublistId: 'item',
                        line: i
                    });
                   
                    totalQ+=quantity;
                    
                    
                    var itemNumber=null;
                    
                    var salesorderSearchObj = search.create({
                   	   type: "salesorder",
                   	   filters:
                   	   [
                   	      ["type","anyof","SalesOrd"], 
                   	      "AND", 
                   	      ["internalidnumber","equalto",internalId], 
                   	      "AND", 
                   	      ["item.internalidnumber","equalto",itemNamev]
                   	   ],
                   	   columns:
                   	   [
                   	      
                   	      search.createColumn({
                   	         name: "itemid",
                   	         join: "item",
                   	         label: "Name"
                   	      })
                   	   ]
                   	});
                   	var SOsearchResultCount = salesorderSearchObj.runPaged().count;
                   	log.debug("SOsearchResultCount",SOsearchResultCount);
                   	
                   	if(SOsearchResultCount>0){
                   		resultSO = salesorderSearchObj.run().getRange({
       						start: 0,
       						end: 1
       					});
                   		
                   		itemNumber = resultSO[0].getValue({
                   			name: "itemid",
                  	        join: "item",
   						});
                   	}
                   	
                   	log.debug("itemNumber",itemNumber);
            
                    
               
                    var content = '<tr><td  align="left" style="width: 30%;"><p align="left" style="font-size:18px;">'+itemName+'</p></td><td align="left" style="width: 50%;"><barcode codetype="code128" align="left" showtext="false" value="'+itemNumber+'"></barcode></td><td align="left" style="width: 20%;">'+quantity+'</td></tr><tr><td> </td></tr>';
                    
                    bodyContent += content;
                   
                }
            
            pdfContent = pdfContent.replace("ReplacewithQTY",totalQ);
            pdfContent = pdfContent.replace("ReplacewithTableBody",bodyContent);

            
            var myXMLFile = file.load({
                id: '10462'
            });
            var xmlContent = myXMLFile.getContents();
            xmlContent = xmlContent.replace("ReplacewithContent",pdfContent);
            var pdfFile = render.xmlToPdf({
                xmlString: xmlContent
            });
            pdfFile.name = "shippingPDF.pdf";
            context.response.writeFile(pdfFile,true);
    		
    		
			
		} catch (e) {
			log.debug({    
				title: e.name,
                details: e.message
            });
		}

    }

    return {
        onRequest: onRequest
    };
    
});

Leave a comment

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