The functionality of my commission value script was been excellent. While the script will work when editing/creating a sales order and quote, I found a unique scenario in which I must apply the same script.
When a Special Order PO is placed, we can edit the cost estimate (identified as amount/rate). After we submit the PO, it takes us back to the Sales Order. After placing a Special Order PO and if you happen to edit the cost estimate, it will reflect back onto the Sales Order and will affect the Profit Margin.
This is what I am wanting to accomplish:
Below is the code I am trying to get working, the deployment is set to Purchase Orders.
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define(['N/record', 'N/currentRecord','N/log'], (record,currentRecord,log)=>{
const UpdateSO = (context)=>{
if(context.type == context.UserEventType.DELETE) {
return true;
}
//begin UpdateSO
const newPO = context.newRecord,
salesOrderId = newPO.getValue({ fieldId: 'createdfrom' });
if(!salesOrderId) { return true; }
const salesOrderRecord = record.load({ type: record.Type.SALES_ORDER, id: salesOrderId,isDynamic: true}),
lineItemCount = salesOrderRecord.getLineCount("item");
//log.debug('salesOrderRecord',salesOrderRecord);
//log.debug('Count',lineItemCount);
for(let i=0; i<lineItemCount; i++){
const lineNum = salesOrderRecord.selectLine({ sublistId: 'item', line: i });
//log.debug('lineNum',lineNum);
var lAmnt = salesOrderRecord.getSublistValue({ sublistId: 'item', line: i, fieldId: 'amount'});
var lCost = salesOrderRecord.getSublistValue({ sublistId: 'item', line: i, fieldId: 'costestimate'});
var GP = Math.trunc(((lAmnt-lCost)/lAmnt)*100).toFixed(2);
var ioutput = "item# "+i+", amount: "+lAmnt+", cost: "+lCost+", GP: "+GP;
log.debug('line value',ioutput);
if (GP <= 9.99) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 1 });
log.debug('commission value '+i,1);
}
if (GP >= 10.00 && GP < 15.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 2 });
log.debug('commission value '+i,2);
}
if (GP >= 15.00 && GP < 20.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 3 });
log.debug('commission value '+i,3);
}
if (GP >= 20.00 && GP < 25.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 4 });
log.debug('commission value '+i,4);
}
if (GP >= 25.00 && GP < 30.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 5 });
log.debug('commission value '+i,5);
}
if (GP >= 30.00 && GP < 35.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 6 });
log.debug('commission value '+i,6);
}
if (GP >= 35.00 && GP < 40.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 7 });
log.debug('commission value '+i,7);
}
if (GP >= 40.00 && GP < 45.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 8 });
log.debug('commission value '+i,8);
}
if (GP >= 45.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 9 });
log.debug('commission value '+i,9);
}
} //end for
salesOrderRecord.save({ type: record.Type.SALES_ORDER, id: salesOrderId, ignoreMandatoryFields: true});
log.debug('save complete','order saved');
//end UpdateSO
}
return {
afterSubmit: UpdateSO
};
});
I can create the PO, the Sales Order will load with it's line items and set the new values; but it does not show the changes when you land back onto the sales order after submitting your PO.
Do I have the record.save function correct? I don't get an error for this.
salesOrderRecord.save({ type: record.Type.SALES_ORDER, id: salesOrderId, ignoreMandatoryFields: true});
Thanks again for all your help. I was able to figure this out and get the commission values to update.
What I needed to do was after assigning the values, I had to commit the subrecord and then save. Upon testing, it was a success!
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define(['N/record', 'N/currentRecord','N/log'], (record,currentRecord,log)=>{
const UpdateSO = (context)=>{
if(context.type == context.UserEventType.DELETE) {
return true;
}
//begin UpdateSO
const newPO = context.newRecord,
salesOrderId = newPO.getValue({ fieldId: 'createdfrom' });
if(!salesOrderId) { return true; }
const salesOrderRecord = record.load({ type: record.Type.SALES_ORDER, id: salesOrderId,isDynamic: true}),
lineItemCount = salesOrderRecord.getLineCount("item");
//log.debug('salesOrderRecord',salesOrderRecord);
//log.debug('Count',lineItemCount);
for(let i=0; i<lineItemCount; i++){
const lineNum = salesOrderRecord.selectLine({ sublistId: 'item', line: i });
//log.debug('lineNum',lineNum);
var lAmnt = salesOrderRecord.getSublistValue({ sublistId: 'item', line: i, fieldId: 'amount'});
var lCost = salesOrderRecord.getSublistValue({ sublistId: 'item', line: i, fieldId: 'costestimate'});
var GP = Math.trunc(((lAmnt-lCost)/lAmnt)*100).toFixed(2);
var ioutput = "item# "+i+", amount: "+lAmnt+", cost: "+lCost+", GP: "+GP;
log.debug('line value',ioutput);
if (GP < 10.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 1 });
salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 1 });
log.debug('commission value '+i,1);
}
if (GP >= 10.00 && GP < 15.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 2 });
salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 2 });
log.debug('commission value '+i,2);
}
if (GP >= 15.00 && GP < 20.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 3 });
salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 3 });
log.debug('commission value '+i,3);
}
if (GP >= 20.00 && GP < 25.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 4 });
salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 4 });
log.debug('commission value '+i,4);
}
if (GP >= 25.00 && GP < 30.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 5 });
salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 5 });
log.debug('commission value '+i,5);
}
if (GP >= 30.00 && GP < 35.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 6 });
salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 6 });
log.debug('commission value '+i,6);
}
if (GP >= 35.00 && GP < 40.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 7 });
salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 7 });
log.debug('commission value '+i,7);
}
if (GP >= 40.00 && GP < 45.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 8 });
salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 8 });
log.debug('commission value '+i,8);
}
if (GP >= 45.00) {
salesOrderRecord.setCurrentSublistValue({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 9 });
salesOrderRecord.commitLine({ sublistId: 'item', line: i, fieldId: 'custcol3', value: 9 });
log.debug('commission value '+i,9);
}
} //end for
const saveSalesOrder = salesOrderRecord.save({ type: record.Type.SALES_ORDER, id: salesOrderId, ignoreMandatoryFields: true});
log.debug('save complete','order saved');
//end UpdateSO
}
return {
afterSubmit: UpdateSO
};
});