Jira Code: ECSI-6 Price Level
This article is about a client script which is used to apply custom markup to a transaction like sales order, quote, and invoice. Markup is added as a percentage value. Markup can be applied in a transaction in two ways: one markup for the whole transaction or separate markup for each line items. The user can input the markup in the custom fields in transaction body level and line item level. This markup percentage is considered for calculating new pricing of items. It calculates the rates using item markup level and set rate.
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
/****************************************************************
*
* Author : Jobin and Jismi IT Services LLP
* created on:16/3/2018
*
*
* When new item is entered set the form markup level to item markup level .
* Calculate rate using item markup level and set rate.
* If the user changes the form markup level, item markup level then recalculate rate.
*
****************************************************************/
define(['N/record', 'N/search', 'N/currentRecord'],
function(record, search, currentRecord) {
/**
* 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) {
try {
if ((scriptContext.sublistId == 'item')&&(scriptContext.fieldId == 'item')) {
var currentRecord = scriptContext.currentRecord;
var apply_markup = currentRecord.getValue({
fieldId: 'custbody_jj_apply_markup'
});
//console.log("apply_markup",apply_markup);
if(apply_markup==true){
document.getElementById('custcol_jj_item_markup_level_formattedValue').disabled = false;
var checkbox = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_checkbox'
});
console.log("checkbox",checkbox);
if(checkbox==true){
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_checkbox',
value: false,
fireSlavingSync: true,
ignoreFieldChange: false
});
//console.log("apply11");
var cost_estimate_type = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'costestimatetype'
});
console.log("cost_estimate_type", cost_estimate_type);
if (cost_estimate_type != 'CUSTOM') {
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'costestimatetype',
value: 'CUSTOM',
fireSlavingSync: true,
ignoreFieldChange: false
});
}
// form markup level %
var form_markup = currentRecord.getValue({
fieldId: 'custbody_jj_form_markup_level'
});
console.log("form_markup", form_markup);
if (((form_markup != '') && (form_markup != null) && (form_markup != undefined))||(form_markup ==0)){
// set form markup level % to item markup level
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_item_markup_level',
value: form_markup,
ignoreFieldChange: true
});
// item markup level %
var item_markup = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_item_markup_level'
});
item_markup = parseFloat(item_markup / 100);
console.log("item_markup", item_markup);
// Est unit cost
var ext_unit_cost = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'costestimaterate'
});
//console.log("ext_unit_cost",ext_unit_cost);
if ((ext_unit_cost != 0) && (ext_unit_cost != '') && (ext_unit_cost != null)) {
// find rate
var rate = parseFloat(ext_unit_cost) / parseFloat(1 - item_markup);
rate = rate.toFixed(2);
//console.log("rate",rate);
// set rate
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: rate,
ignoreFieldChange: true
});
// quantity
var quantity = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity'
});
// find amount
var amount = (parseFloat(rate) * parseFloat(quantity)).toFixed(2);
//console.log("amount",amount);
// set amount
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'amount',
value: amount,
fireSlavingSync: true,
ignoreFieldChange: false
});
}
}
}
}
else{
document.getElementById('custcol_jj_item_markup_level_formattedValue').disabled = true;
}
}
} catch (e) {
log.debug({
title: 'error@postsourcing',
details: e.message
});
console.log('error@postsourcing', e.message);
}
}
/**
* 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) {
try {
var currentRecord = scriptContext.currentRecord;
var apply_markup = currentRecord.getValue({
fieldId: 'custbody_jj_apply_markup'
});
//console.log("apply_markup",apply_markup);
if(apply_markup==true){
console.log("apply markup");
/**** when field Form markup level changes***/
if (scriptContext.fieldId == 'custbody_jj_form_markup_level') {
// form markup level %
var form_markup = currentRecord.getValue({
fieldId: 'custbody_jj_form_markup_level'
});
console.log("form_markup",form_markup);
if (((form_markup != '') && (form_markup != null) && (form_markup != undefined))||(form_markup ==0)){
console.log("form level % change");
// get line count
var lineCount = currentRecord.getLineCount({
sublistId: 'item'
});
for (var i = 0; i < lineCount; i++) {
// select line
currentRecord.selectLine({
sublistId: 'item',
line: i
});
// set item markup level % as form markup level %
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_item_markup_level',
value: form_markup,
ignoreFieldChange: true
});
// est unit cost
var ext_unit_cost = currentRecord.getSublistValue({
sublistId: 'item',
fieldId: 'costestimaterate',
line: i
});
//console.log("ext_unit_cost",ext_unit_cost);
if ((ext_unit_cost != 0) && (ext_unit_cost != '') && (ext_unit_cost != null)) {
// set custom est unit cost to est unit cost
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_est_unit_cost',
value: ext_unit_cost,
ignoreFieldChange: true
});
var form_markup_new = parseFloat(form_markup / 100);
// calculate rate
var rate = parseFloat(ext_unit_cost) / parseFloat(1 - form_markup_new);
rate = rate.toFixed(2);
//console.log("rate",rate);
// set rate
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: rate,
ignoreFieldChange: true
});
var quantity = currentRecord.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: i
});
// calculate amount
var amount = (parseFloat(rate) * parseFloat(quantity)).toFixed(2);
//console.log("amount",amount);
// set amountt
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'amount',
value: amount,
fireSlavingSync: true,
ignoreFieldChange: false
});
}
// commit line
currentRecord.commitLine({
sublistId: 'item'
});
}
}
}
/**** when field Item markup level changes ***/
if ((scriptContext.sublistId == 'item') && (scriptContext.fieldId == 'custcol_jj_item_markup_level')) {
linecalculations(currentRecord);
}
}
/**** when field Custom Est Unit Cost changes ****/
if ((scriptContext.sublistId == 'item') && (scriptContext.fieldId == 'custcol_jj_est_unit_cost')) {
// custom est unit cost
var new_est_unit_cost = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_est_unit_cost'
});
if ((new_est_unit_cost != '') && (new_est_unit_cost != null) && (new_est_unit_cost != undefined)) {
// set po rate as est unit cost
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'porate',
value: new_est_unit_cost,
fireSlavingSync: true,
ignoreFieldChange: false
});
// set value in custom est unit cost to original est unit cost
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'costestimaterate',
value: new_est_unit_cost,
fireSlavingSync: true,
ignoreFieldChange: false
});
// calculate new rate only when apply markup checkbox is ticked
if(apply_markup==true){
linecalculations(currentRecord);
}
}
}
/***** when field vendor RFQ winner changes*****/
if ((scriptContext.sublistId == 'item') && (scriptContext.fieldId == 'custcol_vendorrfqcostused')) {
var currentRecord = scriptContext.currentRecord;
// vendor RFQ winner
var vendor_rfq_winner = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_vendorrfqcostused'
});
//console.log("vendor_rfq_winner",vendor_rfq_winner);
// current line item
var item = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'item'
});
//console.log("item",item);
if ((vendor_rfq_winner != '') && (vendor_rfq_winner != null) && (vendor_rfq_winner != undefined)) {
// set po vendor as vendor rfq winner
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'povendor',
value: vendor_rfq_winner,
fireSlavingSync: true,
ignoreFieldChange: false
});
// custom est unit cost
var new_est_unit_cost = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_est_unit_cost'
});
if ((new_est_unit_cost != '') && (new_est_unit_cost != null) && (new_est_unit_cost != undefined)) {
// set po rate as est unit cost
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'porate',
value: new_est_unit_cost,
fireSlavingSync: true,
ignoreFieldChange: false
});
}
}
else{
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'povendor',
value: '',
fireSlavingSync: true,
ignoreFieldChange: false
});
}
}
/**** when est extended cost chnges*****/
if ((scriptContext.sublistId == 'item') && (scriptContext.fieldId == 'costestimate')) {
var currentRecord = scriptContext.currentRecord;
// est extended cost
var est_extended_cost = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'costestimate'
});
if ((est_extended_cost != '') && (est_extended_cost != null) && (est_extended_cost != undefined)) {
// quantity
var quantity = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity'
});
var new_est_unit_cost = parseFloat(est_extended_cost / quantity).toFixed(2);
//console.log("new_est_unit_cost",new_est_unit_cost);
// set value in custom est unit cost to original est unit cost
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_est_unit_cost',
value: new_est_unit_cost,
ignoreFieldChange: true
});
if(apply_markup==true){
linecalculations(currentRecord);
}
}
}
/**** when Rate changes ****/
if ((scriptContext.sublistId == 'item') && (scriptContext.fieldId == 'rate')) {
if(apply_markup==true){
var rate=currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate'
});
if ((rate != '') && (rate != null)&& (rate != undefined)) {
var new_est_unit_cost = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_est_unit_cost'
});
if ((new_est_unit_cost != '') && (new_est_unit_cost != null) && (new_est_unit_cost != undefined))
{
var new_markup=(parseFloat(rate)-parseFloat(new_est_unit_cost))/parseFloat(rate);
new_markup=(new_markup*100).toFixed(2);
console.log("new_markup",new_markup);
if((new_markup>=0)&&(new_markup<99.99)){
console.log("aa");
// set item markup level % new markup
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_item_markup_level',
value: new_markup,
ignoreFieldChange: true
});
}
else{
alert("Rate should be greater than or equal to Est Unit Cost");
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: null,
ignoreFieldChange: true
});
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'amount',
value: null,
ignoreFieldChange: true
});
}
}
}
}
}
/**** when item changes ****/
if ((scriptContext.sublistId == 'item') && (scriptContext.fieldId == 'item')) {
console.log("itemchange");
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_checkbox',
value: true,
ignoreFieldChange: true
});
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_est_unit_cost',
value: null,
ignoreFieldChange: true
});
}
/**** when form level vendor RFQ changes ****/
if (scriptContext.fieldId == 'custbody_formlevelrfqvendor'){
var form_level_vendor=currentRecord.getValue({
fieldId: 'custbody_formlevelrfqvendor'
});
var lineCount = currentRecord.getLineCount({
sublistId: 'item'
});
for (var i = 0; i < lineCount; i++) {
// select line
currentRecord.selectLine({
sublistId: 'item',
line: i
});
// set vendor rfq as form level vendor rfq
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_vendorrfqcostused',
value: form_level_vendor,
fireSlavingSync: true,
ignoreFieldChange: false
});
// commit line
currentRecord.commitLine({
sublistId: 'item'
});
}
}
} catch (e) {
log.debug({
title: 'error@fieldchange',
details: e.message
});
console.log('error@fieldchange', e.message);
}
}
function linecalculations(currentRecord) {
try {
// item markup level %
var item_markup = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_item_markup_level'
});
item_markup = parseFloat(item_markup / 100);
console.log("item_markup", item_markup);
// Est unit cost
var ext_unit_cost = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'costestimaterate'
});
console.log("ext_unit_cost", ext_unit_cost);
if ((ext_unit_cost != 0) && (ext_unit_cost != '') && (ext_unit_cost != null)) {
// find rate
var rate = parseFloat(ext_unit_cost) / parseFloat(1 - item_markup);
rate = rate.toFixed(2);
console.log("rate", rate);
// set rate
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'rate',
value: rate,
ignoreFieldChange: true
});
// quantity
var quantity = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity'
});
// find amount
var amount = (parseFloat(rate) * parseFloat(quantity)).toFixed(2);
console.log("amount", amount);
// set amount
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'amount',
value: amount,
fireSlavingSync: true,
ignoreFieldChange: false
});
}
} catch (e) {
console.log('error@linecalculations', e.message);
}
}
/**
* 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) {
try {
if (scriptContext.sublistId == 'item') {
var currentRecord = scriptContext.currentRecord;
/*** disable item level markup when apply markup checkbox is not checked start***/
var apply_markup = currentRecord.getValue({
fieldId: 'custbody_jj_apply_markup'
});
console.log("apply_markup_line",apply_markup);
if(apply_markup==true){
console.log("inn");
document.getElementById('custcol_jj_item_markup_level_formattedValue').disabled = true;
}
else{
document.getElementById('custcol_jj_item_markup_level_formattedValue').disabled = false;
}
/*** disable item level markup when apply markup checkbox is not checked end ***/
var customer = currentRecord.getText({
fieldId: 'entity'
});
var item = currentRecord.getCurrentSublistText({
sublistId: 'item',
fieldId: 'item'
});
console.log("customer", customer);
console.log("item", item);
document.getElementById('customsublist49_Transaction_NAME_display').value = customer;
}
} catch (e) {
console.log('error@linrinit', e.message);
}
}
/**
* 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) {
const oldAlert = window.alert;
window.alert = function(text) {
console.log(text);
if (!text.includes("back"))
oldAlert(text);
return true;
};
console.log("scriptContext.mode",scriptContext.mode);
try{
if(scriptContext.mode=='copy'){
var currentRecord = scriptContext.currentRecord;
var record_type=scriptContext.currentRecord.type;
//console.log("record_type",record_type);
var createdfrom=currentRecord.getText({
fieldId:'createdfrom'
});
console.log("createdfrom",createdfrom);
if((record_type=='salesorder')&&(createdfrom.startsWith('Quote'))){
// get line count
var lineCount = currentRecord.getLineCount({
sublistId: 'item'
});
for(var i=0;i<lineCount;i++){
// select line
currentRecord.selectLine({
sublistId: 'item',
line: i
});
var venodr_rfq = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_vendorrfqcostused'
});
// set po venodr as vendor rfq
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'povendor',
value: venodr_rfq,
fireSlavingSync: true,
ignoreFieldChange: false
});
var est_unit_cost = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_est_unit_cost'
});
// set po rate as est unit cost
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'porate',
value: est_unit_cost,
fireSlavingSync: true,
ignoreFieldChange: false
});
// set value in custom est unit cost to original est unit cost
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'costestimaterate',
value: est_unit_cost,
fireSlavingSync: true,
ignoreFieldChange: false
});
// commit line
currentRecord.commitLine({
sublistId: 'item'
});
}
}
if((record_type=='invoice')&&(createdfrom.startsWith('Sales'))){
// get line count
var lineCount = currentRecord.getLineCount({
sublistId: 'item'
});
for(var i=0;i<lineCount;i++){
// select line
currentRecord.selectLine({
sublistId: 'item',
line: i
});
var est_unit_cost = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_est_unit_cost'
});
// set value in custom est unit cost to original est unit cost
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'costestimaterate',
value: est_unit_cost,
fireSlavingSync: true,
ignoreFieldChange: false
});
// commit line
currentRecord.commitLine({
sublistId: 'item'
});
}
}
}
}
catch (e) {
console.log('error@pageInit', e.message);
}
}
function validateLine(scriptContext) {
if (scriptContext.sublistId =='item'){
try{
var currentRecord = scriptContext.currentRecord;
var venodr_rfq = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_vendorrfqcostused'
});
// set po venodr as vendor rfq
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'povendor',
value: venodr_rfq,
fireSlavingSync: true,
ignoreFieldChange: false
});
var est_unit_cost = currentRecord.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_est_unit_cost'
});
// set po rate as est unit cost
currentRecord.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'porate',
value: est_unit_cost,
fireSlavingSync: true,
ignoreFieldChange: false
});
}
catch (e) {
console.log('error@validateLine', e.message);
}
}
return true;
}
return {
pageInit: pageInit,
postSourcing: postSourcing,
fieldChanged: fieldChanged,
linecalculations: linecalculations,
lineInit: lineInit,
validateLine:validateLine
};
function setfiltervals() {
var resultrec = currentRecord.get();
var lineCount = resultrec.getLineCount({
sublistId: 'item'
});
var item = resultrec.getSublistText({
sublistId: 'item',
fieldId: 'item',
line: lineCount - 1
});
jQuery("#IT_Item_NAME").val(item);
}
});