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
};
});