NAFTA Report in Sales Order

Jira Code: AD 51

This task is to create a NAFTA(North American Free Trade Agreement) report in the sales order. This NAFTA report is restricted to 2 forms (
ADV – Sales Order and ADV – Web Sales Order ). We should include all the assembly, lot numbered assembly, inventory, lot numbered inventory items in print.

Userevent Script

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
/*******************************************************************************
* CLIENTNAME:Advantus 
* AD-51
* Print NAFTA button
* **************************************************************************
* Date : 05-03-2019
*
* Author: Jobin & Jismi IT Services LLP
* Script Description : This script is to add a print button to print the NAFTA document
* Date created :  05-03-2019
*
* REVISION HISTORY
*
* Revision 1.0 ${ 05-03-2019} nd : created
*          1.1 ${ 30-03-2019} aj : modified to restrict in forms
* 
*
******************************************************************************/
define(['N/record'],

function(record) {
   
    /**
     * 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 curRecID= scriptContext.newRecord.id;
          var curRec=record.load({
            type:'salesorder',
            id:curRecID
          });
            var formSo = curRec.getText({
                fieldId:'customform'

            });
            log.debug("form",formSo)
          if(formSo=="ADV - Sales Order"||formSo=="ADV - Web Sales Order")
            {
    		var projectRec =  scriptContext.form;
   		 scriptContext.form.clientScriptFileId = 11426;
       	 if((scriptContext.type == 'view') || (scriptContext.type == 'edit')){
       		
       		 var button = projectRec.addButton({
            		id: 'custpage_nafta',
            		label :'Print NAFTA',
            		functionName: 'printNAFTA'
            	 });
       	 }
            }
    	}catch(e){
    		log.debug('error @ beforeLoad',e)
            log.error('error @ beforeLoad',e)
    	}

    }

    /**
     * Function definition to be triggered before record is loaded.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.newRecord - New record
     * @param {Record} scriptContext.oldRecord - Old record
     * @param {string} scriptContext.type - Trigger type
     * @Since 2015.2
     */
    function beforeSubmit(scriptContext) {

    }

    /**
     * Function definition to be triggered before record is loaded.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.newRecord - New record
     * @param {Record} scriptContext.oldRecord - Old record
     * @param {string} scriptContext.type - Trigger type
     * @Since 2015.2
     */
    function afterSubmit(scriptContext) {

    }

    return {
        beforeLoad: beforeLoad,
        beforeSubmit: beforeSubmit,
        afterSubmit: afterSubmit
    };
    
});

Client script

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
define(['N/search', 'N/url' ,'N/currentRecord'],
/**
 * @param {search} search
 * @param {url} url
 */
function(search, url,currentRecord) {
    
    /**
     * 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) {

    }

    /**
     * Function to be executed when field is changed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
     * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
     *
     * @since 2015.2
     */
    function fieldChanged(scriptContext) {

    }

    /**
     * Function to be executed when field is slaved.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     *
     * @since 2015.2
     */
    function postSourcing(scriptContext) {

    }

    /**
     * Function to be executed after sublist is inserted, removed, or edited.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @since 2015.2
     */
    function sublistChanged(scriptContext) {

    }

    /**
     * Function to be executed after line is selected.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @since 2015.2
     */
    function lineInit(scriptContext) {

    }

    /**
     * Validation function to be executed when field is changed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
     * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
     *
     * @returns {boolean} Return true if field is valid
     *
     * @since 2015.2
     */
    function validateField(scriptContext) {

    }

    /**
     * Validation function to be executed when sublist line is committed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @returns {boolean} Return true if sublist line is valid
     *
     * @since 2015.2
     */
    function validateLine(scriptContext) {

    }

    /**
     * Validation function to be executed when sublist line is inserted.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @returns {boolean} Return true if sublist line is valid
     *
     * @since 2015.2
     */
    function validateInsert(scriptContext) {

    }

    /**
     * Validation function to be executed when record is deleted.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @returns {boolean} Return true if sublist line is valid
     *
     * @since 2015.2
     */
    function validateDelete(scriptContext) {

    }

    /**
     * Validation function to be executed when record is saved.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @returns {boolean} Return true if record is valid
     *
     * @since 2015.2
     */
    function saveRecord(scriptContext) {

    }
    
    /*********
     * Function to open SL
     */
    function printNAFTA()
    {
    	try{
    		// to get the curent record data
    		var currRec = currentRecord.get();
    		var id = currRec.id;
    		var TO_SL_LINK = url.resolveScript({
				scriptId:'customscript_ad51_jj_sl_print_nafta',
				deploymentId:'customdeploy_ad51_jj_sl_print_nafta',
				params:{
					idOfRec:currRec.id
				},
				returnExternalUrl:false
			});
    		console.log(TO_SL_LINK)
    window.open(TO_SL_LINK);
    		
    	}catch(e)
    	{
    		console.log("Err@ printNAFTA =",e);
    	}
       
    }

    return {
        pageInit: pageInit,
        printNAFTA:printNAFTA

    
});

Suitelet script

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
/*******************************************************************************
 * CLIENTNAME:ADVANTUS 
 * AD 51 NAFTA REPORT
 *************************************************************************
 * Date : 08/03/2019
 *
 * Author: Jobin & Jismi IT Services LLP
 * Script Description : To add NAFTA report in SO
 *
 * REVISION HISTORY
 *
 * Revision 1.0 ${08/03/2019} aj : created
 * 			1.1 ${28/03/2019} aj : Modified to avoid other items than Assembly & Inventory
 * 
 *
 ******************************************************************************/
define(['N/record', 'N/render', 'N/search', 'N/ui/serverWidget','N/config', 'N/format','N/file'],
		/**
		 * @param {record} record
		 * @param {render} render
		 * @param {search} search
		 * @param {serverWidget} serverWidget
		 */
		function(record, render, search, serverWidget,config,format,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{
			//to get the data recID
			var recID = context.request.parameters.idOfRec;
			

			// to get the SO Details..
			var SODetails = findSODetails(recID);
			
			// to create XML DATA
			var XML_DATA= findXMLData(SODetails);
			
			// to render
			var pdfFile = render.xmlToPdf({
				xmlString: XML_DATA
			});
			context.response.writeFile(pdfFile, true);
		}catch(e)
		{
			log.debug("Err@ FN onRequest",e);
			log.error("Err@ onRequest FN ",e);

		}


	}
	/***
	 * Function to get SO details..
	 */
	function findSODetails(recID)
	{
		try{
			// to craete search
			var salesorderSearchObj = search.create({
				type: "salesorder",
				filters:
					[
						["type","anyof","SalesOrd"], 
						"AND", 
						["internalidnumber","equalto",recID],
						 "AND", 
					      ["item.type","anyof","Assembly","InvtPart"]
						],
						columns:
							[
								search.createColumn({
									name: "internalid",
									join: "subsidiary",
									label: "subsidiary internal id"
								}),
								search.createColumn({
							         name: "custitem_adv_nafta_pref_code",
							         join: "item",
							         label: "Preference"
							      }),
								search.createColumn({
									name: "legalname",
									join: "subsidiary",
									label: "Exporter Name"
								}),
								search.createColumn({
									name: "mainsupportemailaddress",
									join: "subsidiary",
									label: "Address"
								}),
								search.createColumn({
									name: "internalid",
									join: "item",
									label: "item internal id"
								}),
								search.createColumn({name: "item", label: "item name"}),
								search.createColumn({
									name: "displayname",
									join: "item",
									label: "item description"
								}),
								search.createColumn({
									name: "custitem_adv_purchase_tariff_code",
									join: "item",
									label: " Hs Tariff Classification"
								}),
								search.createColumn({
									name: "altname",
									join: "vendor",
									label: "Producer"
								}),
								search.createColumn({
									name: "custitem_adv_buyer",
									join: "item",
									label: "Buyer"
								}),search.createColumn({name: "amount", label: "Amount"}),
								search.createColumn({
									name: "formulatext",
									formula: "CASE WHEN {item.custitem_adv_mult_countries_of_origin}='Yes' THEN {item.custitem_adv_country_origin_long} ELSE {item.countryofmanufacture} END",
									label: "Formula (Text)"
								})
								]
			});
			var searchResultCount = salesorderSearchObj.runPaged().count;
			

			// to get the result
			var searchResult = salesorderSearchObj.run().getRange({
				start:0,
				end:1000
			}); 
			
			var subsidiary,exporterName,item,itemName,itemDescription,hsTariff,producer;
			var returnObj={},itemArray=[];
			if(searchResult.length>0)
			{
				subsidiary = searchResult[0].getValue({
					name: "internalid",
					join: "subsidiary",
					label: "subsidiary internal id"
				});

				exporterName = searchResult[0].getValue({
					name: "legalname",
					join: "subsidiary",
					label: "Exporter Name"
				});
				for(var i=0;i<searchResult.length;i++)
				{
					var itemObj={};

					item = searchResult[i].getValue({
						name: "internalid",
						join: "item",
						label: "item internal id"
					});
					itemName = searchResult[i].getText({
						name: "item", 
						label: "item name"
					});
					itemDescription = searchResult[i].getValue({
						name: "displayname",
						join: "item",
						label: "item description"
					});

					hsTariff = searchResult[i].getText({
						name: "custitem_adv_purchase_tariff_code",
						join: "item",
						label: " Hs Tariff Classification"

					});

					producer =searchResult[i].getText({
						name: "custitem_adv_buyer",
						join: "item",
						label: "Buyer"
					});
					var amount = searchResult[i].getValue({
						name: "amount",
						label: "Amount"
					});

					var preference = searchResult[i].getText({
				         name: "custitem_adv_nafta_pref_code",
				         join: "item",
				         label: "Preference"
				      });
					var country = searchResult[i].getValue({
						name: "formulatext",
						formula: "CASE WHEN {item.custitem_adv_mult_countries_of_origin}='Yes' THEN {item.custitem_adv_country_origin_long} ELSE {item.countryofmanufacture} END",
						label: "Formula (Text)"
					});
					
					if(item!=12337 && item!=-7 && item!=null && item!=undefined && item!="" && item!=' '&& item!='null')
					{
						itemObj = {itemName:itemName,itemDescription:itemDescription,hsTariff:hsTariff,producer:producer,amount:amount,country:country,preference:preference};
						itemArray.push(itemObj);
					}

				}
				// to get the subsidiary data..
				var subsidiaryData = findSubsidiaryDatas(subsidiary);
				
				returnObj = {subsidiary:subsidiary,exporterName:exporterName,itemArray:itemArray,subsidiaryName:subsidiaryData.subsidiaryName,subsidiaryAddress:subsidiaryData.subsidiaryAddress,legalName:subsidiaryData.legalName,today:subsidiaryData.today,taxId:subsidiaryData.taxId};
			}
			log.debug("returnObj",returnObj);
			return returnObj;
		}catch(e)
		{
			log.debug("Err@ FN findSODetails",e);
			log.error("Err@ findSODetails FN ",e);

		}
	}

	/***
	 * 
	 */
	function findSubsidiaryDatas(subsidiary)
	{
		try{
			// creating search..
			var subsidiarySearchObj = search.create({
				type: "subsidiary",
				filters:
					[
						["internalidnumber","equalto",subsidiary]
						],
						columns:
							[
								search.createColumn({
									name: "name",
									sort: search.Sort.ASC,
									label: "Name"
								}),
								search.createColumn({
									name: "address",
									join: "address",
									label: " Address"
								}),
								search.createColumn({name: "legalname", label: "Legal Name"}),
								search.createColumn({
							         name: "formuladate",
							         formula: "{today}",
							         label: "Formula (Date)"
							      }),
							      search.createColumn({name: "taxidnum", label: "Tax ID"})
								]
			});
			var searchResultCount = subsidiarySearchObj.runPaged().count;
			//	log.debug("subsidiarySearchObj result count",searchResultCount);
			var searchResult = subsidiarySearchObj.run().getRange({
				start:0,
				end:1
			});
			var legalName,subsidiaryAddress,subsidiaryName; 
			if(searchResult.length>0)
			{
				subsidiaryName = searchResult[0].getValue({
					name: "name",
					sort: search.Sort.ASC,
					label: "Name"
				});

				subsidiaryAddress = searchResult[0].getValue({
					name: "address",
					join: "address",
					label: " Address"
				});
				log.debug("subsidiaryAddress be4",subsidiaryAddress);
				
				legalName = searchResult[0].getValue({
					name: "legalname", 
					label: "Legal Name"
				});
				var today =searchResult[0].getValue({
					 name: "formuladate",
			         formula: "{today}",
			         label: "Formula (Date)"
				});
				var taxId =searchResult[0].getValue({
					name: "taxidnum",
					label: "Tax ID"
						});
			}
			log.debug("legalName",legalName)
			// to get the tax num 
			

			var subsidiary =record.load({
				type:record.Type.SUBSIDIARY,
				id:subsidiary
				});
			var tax = subsidiary.getValue({
				fieldId:'ssnortin'
			});
			

					
			return {subsidiaryName:subsidiaryName,subsidiaryAddress:subsidiaryAddress,legalName:legalName,today:today,taxId:tax};

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

		}
	}
	/***
	 * 
	 */
	function findXMLData(SODetails)
	{
		try{
			var array = SODetails["itemArray"];

			var day =new Date();
			var year = new Date().getFullYear();
			var today =parseInt(new Date().getMonth()+1)+'/'+new Date().getDate()+'/'+year;
			var conf = config.load({
				type: 'userpreferences'
			});
			var timezone = conf.getValue({ fieldId: 'TIMEZONE' });
			
			var today_zone = format.format({
				value: day,
				type: format.Type.DATE,
				timezone: timezone
			});
		

			// to load XML file
			var myXMLFile = file.load({
				id : '11425'
			});
			var myXMLFile_value = myXMLFile.getContents();

			var XML=myXMLFile_value;
			
			XML =XML.replace(/<!--LEGAL_NAME-->/g,escape_for_xml(SODetails.legalName));
			XML =XML.replace(/<!--MAIN_ADDRESS-->/g,escape_for_xml(SODetails.subsidiaryAddress).replace(/(?:\r\n|\r|\n)/g, '<br/>'));
			XML =XML.replace(/<!--TAXID-->/g,SODetails.taxId);
			XML =XML.replace(/%year%/g,year);
			XML =XML.replace(/<!--totalPages-->/g,'<totalpages />');
			
			var tableData="";
			for(var i=0;i<array.length;i++)
			{
				tableData=tableData+'	<tr>'+
				'	<td style="text-align: left; width:20.4%;">'+escape_for_xml(array[i]["itemName"])+',<br />'+escape_for_xml(array[i]["itemDescription"])+'</td>'+
				'	<td style="text-align: left; width:14%;">'+array[i]["hsTariff"]+'</td>'+
				'	<td style="text-align: left; width:17%;">'+checkif(escape_for_xml(array[i]["preference"]))+'</td>'+
				'	<td style="text-align: left; width:15%;"><p align="left">Advantus</p></td>'+
				'	<td style="text-align: left; width:15%;">'+array[i]["amount"]+'</td>'+
				'	<td style="text-align: left; width:16.6%;">'+checkif(escape_for_xml(array[i]["country"]))+'</td>'+
				'	</tr>';
			}
			XML =XML.replace('<!--TABLE_DATA-->',tableData);
			XML =XML.replace('<!--TODAY-->',today);
			

			return XML;

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

		}

	}
	function checkif(parameter){
				if(parameter!=null && parameter!=undefined &&parameter!='' && parameter!=' ')
					return parameter;
				else
					return "-";

			}
	return {
		onRequest: onRequest
	};

});

XML Code

<?xml version="1.0"?>
<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
<pdf>

    <head>
        <style>
            table tr td {
                border: 1px;
                font-size: 11pt;
            }

            th {
                border: 1px;
                font-size: 11pt;
            }

            span {
                text-align: center;
                font-size: 2rem;
                padding-left: 28%
            }

            .newTable {
                border: 0px!important;
                font-size: 11pt;
            }

            .newTable tr {
                border-top: 1px;
                width: 100%;
            }

            table.header td {
                padding: 0;
                font-size: 10pt;
                border: 0px;
            }

        </style>
        <macrolist>
            <macro id="nlheader">
                <table class="header" style="width: 100%;">
                    <tr border="0px;">
                        <td align="right" border="0px;" class="pagenumber"> Page
                            <pagenumber /> of
                            <totalpages /> </td>
                    </tr>
                </table>
            </macro>
        </macrolist>
   </head>

    <body header="nlheader" header-height="2%" footer="nlfooter" footer-height="20pt" padding="0.5in 0.5in 0.5in 0.5in" size="Letter">
        <!---div style="text-align: center;padding-top:-10px;"-->
        <p><span align="center" style="padding-bottom:10px;">NORTH AMERICAN FREE TRADE AGREEMENT</span></p>
        <h2 align="center" style="padding-top:-10px;">CERTIFICATE OF ORIGIN</h2>
        <!--/div-->
        <table width="100%">
            <tr>
                <td style="colspan:2;"><strong>1. EXPORTER NAME & ADDRESS</strong><br /><!--MAIN_ADDRESS--><br />info@advantus.com<br /><b>TAX IDENTIFICATION NUMBER:</b><!--TAXID--></td>
                <td style="colspan:2;">
                    <table class="newTable" style="border: 1px white;" width="100%">
                        <tr style="border-bottom: 1px; border-top: 0px;">
                            <td style="border: 0px;"><strong>2. BLANKET PERIOD (MM/DD/YY)</strong></td>
                        </tr>
                        <tr style="border-bottom: 1px; border-top: 0px;">
                            <td style="border: 0px;">FROM: 01/01/%year%</td>
                        </tr>
                        <tr style="border: 0px;">
                            <td style="border: 0px;">TO: 12/31/%year%</td>
                        </tr>
                    </table>
                </td>
            </tr>
            <tr>
                <td><strong>3. PRODUCER NAME & ADDRESS</strong><br /><!--MAIN_ADDRESS--><br />info@advantus.com<br /><b>TAX IDENTIFICATION NUMBER:</b><!--TAXID--></td>
                <td><strong>4. IMPORTERS NAME AND ADDRESS </strong><br /><!--MAIN_ADDRESS--><br />info@advantus.com<br /><b>TAX IDENTIFICATION NUMBER:</b><!--TAXID--></td>
            </tr>
        </table>
        <table width="100%">
            <tr>
                <th>
                    <p align="center" style="text-align:center; font-weight:bold;">5. Description of Goods</p>
                </th>
                <th>
                    <p style="text-align:center; font-weight:bold;">6. HS Tariff Classification</p>
                </th>
                <th>
                    <p style="text-align:center; font-weight:bold;">7. Preference Criterion</p>
                </th>
                <th>
                    <p align="center" style="text-align:center; font-weight:bold;">8. Producer</p>
                </th>
                <th>
                    <p align="center" style="text-align:center; font-weight:bold;">9. Net Cost</p>
                </th>
                <th>
                    <p style="text-align:center; font-weight:bold;">10. Country Of Origin</p>
                </th>
            </tr>
     <!--TABLE_DATA-->
        </table>
        <p><strong>I CERTIFY THAT:  </strong></p>
        <p style="font-size:12px;">-THE INFORMATION ON THIS DOCUMENT IS TRUE AND ACCURATE AND I ASSUME THE RESPONSIBILITY FOR PROVING SUCH REPRESENTATIONS. I UNDERSTAND THAT I AM LIABLE FOR ANY FLASE STATEMENTS OR MATERIAL OMISSIONS MADE ON OR IN CONNECTION WITH THIS DOCUMENT;<br />- I AGREE TO MAINTAIN AND PRESENT UP ON REQUEST, DOCUMENTATION NECESSARY TO SUPPORT THIS CERTIFICATE, AND TO INFORM, IN WRITING, ALL PERSON TO WHOM THE CERTIFICATE WAS GIVEN OF ANY CHANGES THAT COULD AFFECT THE ACCURACY OR VALIDITY OF THIS CERTIFICATE;<br />- THE GOODS ORIGINATED IN THE TERRITORY OF ONE OR MORE OF THE PARTIES, AND COMPLY WITH THE ORIGIN REQUIREMENTS SPECIFIED FOR THOSE GOODS IN THE NORTH AMERICAN FREE TRADE AGREEMENT, AND UNLESS SPECIFICALLY EXEMPTED IN ARTICLE 411 OR ANNEX 401, THERE HAS BEEN NO FURTHER PRODUCTION OR ANY OTHER OPERATION OUTSIDE THE TERRITORIES OF THE PARTIES; AND<br />- THIS CERTIFICATE CONSISTS OF  <span style="padding-left:0px"> <totalpages /></span> PAGES, INCLUDING ALL ATTACHMENTS.</p>
        <table width="100%" style="page-break-inside: avoid">
            <tr>
                <td style="width:50%; border-top:1px;"><strong>11a. AUTHORIZED SIGNATURE </strong><br /><img src="https://system.netsuite.com/core/media/media.nl?id=6558&c=5050497_SB1&h=826aa2e9451510f08473" style="width:20%; height:20%;" /></td>
                <td style="width:50%; border-right:1px; border-top:1px;"><strong>11b. COMPANY </strong><br /><br />Advantus, Corp.</td>
            </tr>
            <tr>
                <td><strong>11c. NAME</strong><br /><!--LEGAL_NAME--></td>
                <td style="border-right:1px;"><strong>11d. TITLE</strong><br />Shipping Team</td>
            </tr>
        </table>
        <table width="100%" style="page-break-inside: avoid">
            <tr>
                <td style="border-bottom:1px;">
                    <p style="text-align:left;"><strong>11e. DATE (MM/DD/YY) </strong><br /><!--TODAY--></p>
                </td>
                <td style="border-bottom:1px;">
                    <p style="text-align:left;"><strong>11f. TELEPHONE NUMBER</strong><br />904-482-0091 </p>
                </td>
                <td style="border-bottom:1px; border-right:1px;">
                    <p style="text-align:left;"><strong>11G. FAX NUMBER </strong><br />904-482-0099</p>
                </td>
            </tr>
            <tr>
                <td style="border:0px"></td>
                <td style="border:0px"></td>
                <td style="border-top:0px">
                    <p style="text-align:left;font-size:11px;">EQUIVALENT TO CUSTOMS FORM 434(121793)</p>
                </td>
            </tr>
        </table>
    </body>
</pdf>

Leave a comment

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