Debit note PDF customization

Jira Code: ME-105

Bill credit record has no provision for taking the print out of the record so we have customized a solution for the printout. ie Added a custom button in bill credit record that renders the XML and took the PDF print.

Suitelet

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
/*******************************************************************************
* CLIENTNAME:Manglam
* ME-105
* Debit Note creation on Mangalam
* **************************************************************************
* Date : 09-03-2019
*
* Author: Jobin & Jismi IT Services LLP
* Script Description : This script is to create the suitelet for debit memo pdf
* Date created : 09-03-2019
*
* REVISION HISTORY
*
* Revision 1.0 ${09-03-2019} nd : created
* 
*
******************************************************************************/
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.vendorBill_id;
             var total_amnt=0;
             var total_tax =0;
             var bodyContent = '';
             var objRecord = record.load({
                    type: record.Type.VENDOR_CREDIT, 
                    id: internalId
//                  isDynamic: true,
                });

                var currency = objRecord.getValue({
                    fieldId: 'currency'
                });

                     log.debug('currency',currency)
                      var currecyRec = record.load({
                    type: record.Type.CURRENCY, 
                    id: currency
//                  isDynamic: true,
                });
log.debug('currecyRec',currecyRec)
var symbol = currecyRec.getValue({
                    fieldId: 'displaysymbol'
                });
                log.debug('symbol',symbol)




             var tran_num = objRecord.getValue({
                fieldId: 'transactionnumber'
            });
             log.debug('tran_num',tran_num)
             var numLines = objRecord.getLineCount({
                    sublistId: 'item'
                });
             for(var i=0;i<numLines;i++){
                 var item_name = objRecord.getSublistText({
                    sublistId: 'item',
                    fieldId: 'item',
                    line: i
                });

                 var item_desc = objRecord.getSublistText({
                    sublistId: 'item',
                    fieldId: 'description',
                    line: i
                });

                 var item_amount = objRecord.getSublistValue({
                        sublistId: 'item',
                        fieldId: 'amount',
                        line: i
                    });
                 log.debug('item_amount',item_amount)
                 
                 var item_qty = objRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'quantity',
                    line: i
                });

                 var item_rate = objRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'rate',
                    line: i
                });

                 var item_grossAmnt = objRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'grossamt',
                    line: i
                });
                 parseFloat(total_amnt +=item_grossAmnt).toFixed(2)

                 var tax_amount = objRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'taxamount',
                    line: i
                });
                 parseFloat(total_tax +=tax_amount).toFixed(2)
                 log.debug('total_tax',total_tax)


                 var reason = objRecord.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'custcol_jj_reason',
                    line: i
                });
                 var lineContent= '<tr><td align="center" colspan="4" line-height="150%">'+item_qty+'</td><td colspan="8"><span class="itemname">'+escape_for_xml(item_name)+'</span><br />'+escape_for_xml(item_desc)+'</td><td align="left" colspan="4">'+escape_for_xml(reason)+'</td><td align="right" colspan="4">'+symbol+''+number_test(item_rate)+'</td><td align="right" colspan="4">'+symbol+''+number_test(item_amount)+'</td><td align="right" colspan="4">'+symbol+''+number_test(tax_amount)+'</td><td align="right" colspan="4">'+symbol+''+number_test(item_grossAmnt)+'</td></tr>'
                 bodyContent += lineContent;
             }
            
            
             var shipTo = objRecord.getValue({
                    fieldId: 'billaddress'
                });

              var memodata = objRecord.getValue({
                    fieldId: 'memo'
                });

              var refNo = objRecord.getValue({
                    fieldId: 'custbody_jj_supplier_ref_no'
                });

              var amountinWrds = objRecord.getValue({
                    fieldId: 'custbody_amount_in_wrds'
                });

              var tran_date = objRecord.getText({
                    fieldId: 'trandate'
                });

    
            //Loading the XML layout file
             var myXMLFile = file.load({
                 id: '3372'
             });
             var xmlContent = myXMLFile.getContents();
             
             //Replacing the Body 
             xmlContent = xmlContent.replace("ReplaceItemLine",bodyContent);
             xmlContent = xmlContent.replace("<!-- replacewithShipTo -->",shipTo);
             xmlContent = xmlContent.replace("<!-- replacewithTotal -->",symbol+" "+number_test(total_amnt));
             xmlContent = xmlContent.replace("<!-- replacewithTotal2 -->",symbol+" "+number_test(total_amnt));
             xmlContent = xmlContent.replace("<!-- replacewithRefno -->",refNo);
             xmlContent = xmlContent.replace("<!-- replacewithMemo -->",memodata);
             xmlContent = xmlContent.replace("<!-- replacewithAmountinWrd -->",amountinWrds);
             xmlContent = xmlContent.replace("<!-- replacewithDate -->",tran_date);
             xmlContent = xmlContent.replace("<!-- replacewithtranNo -->",tran_num);
             xmlContent = xmlContent.replace("<!-- replacewithTaxTotal -->",symbol+" "+number_test(total_tax));
//             if(po_num){
//               xmlContent = xmlContent.replace("<!-- ReplacewithPO -->",po_num);
//             }
             
             
           //Converting xml to a PDF file
             var pdfFile = render.xmlToPdf({
                 xmlString: xmlContent
             });
             pdfFile.name = "debitMemo.pdf"
             context.response.writeFile(pdfFile,true);
        }catch(error){
            log.error('error @ onRequest',error)
        }

    }

    return {
        onRequest: onRequest
    };
    
});

function number_test(n)
{
   var result = (n - Math.floor(n)) !== 0; 
   
  if (result){

      var val= n;
    return n;
  }
   else
     return n+'.00';
  }

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

}

User Event

/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
/*******************************************************************************
* CLIENTNAME:Manglam
* ME-105
* Debit Note creation on Mangalam
* **************************************************************************
* Date : 09-03-2019
*
* Author: Jobin & Jismi IT Services LLP
* Script Description : This script is to add a button in Vendor/bill credit to print the debit memo.
* Date created : 09-03-2019
*
* REVISION HISTORY
*
* Revision 1.0 ${09-03-2019} nd : created
* 
*
******************************************************************************/
define([],

function() {
   
    /**
     * 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 vndorBill =  scriptContext.form;
    		 scriptContext.form.clientScriptFileId = 965;
        	 if(scriptContext.type == 'view'){
        		
        		 var button = vndorBill.addButton({
             		id: 'custpage_debitnote',
             		label :'Print Debit Note',
             		 functionName: 'printbuttonClick'
             	 });
     		}
    	}catch(err){
    		log.debug('error @ beforeLoad',err)
    	}
    	

    

    }

    /**
     * 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
 */
/*******************************************************************************
* CLIENTNAME:Manglam
* ME-105
* Debit Note creation on Mangalam
* **************************************************************************
* Date : 09-03-2019
*
* Author: Jobin & Jismi IT Services LLP
* Script Description : This script is to define the action of print button
* Date created : 09-03-2019
*
* REVISION HISTORY
*
* Revision 1.0 ${09-03-2019} nd : created
* 
*
******************************************************************************/
define(['N/currentRecord','N/url'],

function(currentRecord,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) {

    }

    function printbuttonClick(){
    	try{
    		var record = currentRecord.get();
    		var int_id = record.id;
    		console.log('int_id',int_id)
    		get_url = url.resolveScript({
	    		scriptId: "customscript_me105_jj_sl_debitmemo",
	            deploymentId: "customdeploy_me105_jj_sl_debitmemo"
	        });	
   		 	
	        get_url += '&vendorBill_id=' + int_id;
	        window.open(get_url);
    		
    	}catch(er){
    		console.log('error at printbuttonClick',er)
    	}
    }
    

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

Leave a comment

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