REQUIREMENT
Determine which sales orders are included in the corresponding PO and make sure the
committed quantity equals the order quantity. If the condition is met, remove the
corresponding PO value and the estimated time of arrival (ETA) from the corresponding sales
order column.
SOLUTION
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
/************************************************************************************************
CDU - 776 Remove the CORRESPONDING PO and ETA Column Values from Sales Orders
*********************************************************************************************
*
* Author: Jobin & Jismi IT Services LLP
*
* Date Created : 28/February/2022
*
* Description : schedules the MR script that removes the corresponding PO and ETA column value From the sales orders on creating or
* editing IR, if the ordered and commited qty are same.
*
***********************************************************************************************/
define(['N/record', 'N/task'],
/**
* @param{record} record
* @param{task} task
*/
(record, task) => {
const afterSubmit = (context) => {
try{
var newRec = context.newRecord;
if ((context.type == context.UserEventType.CREATE) || (context.type == context.UserEventType.EDIT)) {
var POid = newRec.getValue('createdfrom');
//Schedule the MR script
var mrTask = task.create({
taskType: task.TaskType.MAP_REDUCE,
scriptId: //SCRIPT ID,
deploymentId: //SCRIPT DEPLOYMENT ID,
params: {
'custscript_jj_poid_cdu776': POid
}
});
var mrTaskId = mrTask.submit();
}
}catch (e) {
log.debug("Error@afterSubmit", e)
}
}
return {afterSubmit}
});
/**
* @NApiVersion 2.1
* @NScriptType MapReduceScript
*/
/************************************************************************************************
CDU - 776 Remove the CORRESPONDING PO and ETA Column Values from Sales Orders
*********************************************************************************************
*
* Author: Jobin & Jismi IT Services LLP
*
* Date Created : 28/February/2022
*
* Description : removes the corresponding PO and ETA column value From the sales orders on creating or editing IR, if the ordered and commited qty are same.
*
***********************************************************************************************/
define(['N/record', 'N/search', 'N/runtime'],
/**
* @param{record} record
* @param{search} search
* @param{runtime} runtime
*/
(record, search, runtime) => {
/**
* function to get the array of salesorders having the PO in their corresponding PO column's value
*/
function getSOhavingCurrespondingPO_search(POid){
try{
var salesorderSearchObj = search.create({
type: "salesorder",
filters:
[
["type","anyof","SalesOrd"],
"AND",
["mainline","is","F"],
"AND",
["cogs","is","F"],
"AND",
["taxline","is","F"],
"AND",
["shipping","is","F"],
"AND",
["custcol_jj_tlf_po_cdu_462.internalid","anyof",POid]
],
columns:
[
search.createColumn({
name: "internalid",
summary: "GROUP",
label: "Internal ID"
})
]
});
var searchResultCount = salesorderSearchObj.runPaged().count;
log.debug("salesorderSearchObj result count",searchResultCount);
var SOid, soArray = [];
if (searchResultCount>0) {
salesorderSearchObj.run().each(function (result) {
var soObj ={};
SOid = result.getValue({
name: "internalid",
summary: "GROUP",
label: "Internal ID"
});
soObj.PO = POid;
soObj.SO = SOid
soArray.push(soObj);
return true;
});
log.debug("so array getinput", soArray)
return soArray;
}
else
return [];
}catch (e) {
log.debug("Error@getSOhavingCurrespondingPO_search", e)
return [];
}
}
/**
* function to remove corresponding PO and ETA values if the commited and ordered quantities are equal.
*/
function removeCurrespondingPO_ETA(salesOrder, POid){
try {
//load the SO
var soRec = record.load({
type: 'salesorder',
id: salesOrder
});
var orderStatus = soRec.getValue('orderstatus');
if (orderStatus == 'A' || orderStatus == 'B' || orderStatus == 'D' || orderStatus == 'E' || orderStatus == 'F') {
var lineCount = soRec.getLineCount({
sublistId: 'item'
});
log.debug("line cpunt", lineCount)
for (let line = 0; line < lineCount; line++) {
var correspondingPO = soRec.getSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_tlf_po_cdu_462',
line: line
});
if (correspondingPO == POid) {
var qtyCommited = soRec.getSublistValue({
sublistId: 'item',
fieldId: 'quantitycommitted',
line: line
})
var qtyOrdered = soRec.getSublistValue({
sublistId: 'item',
fieldId: 'quantity',
line: line
})
if (qtyCommited == qtyOrdered) {
soRec.setSublistValue({
sublistId: 'item',
fieldId: 'custcol_jj_tlf_po_cdu_462',
value: null,
line: line
})
soRec.setSublistValue({
sublistId: 'item',
fieldId: 'custcol_corpdesigneta',
value: null,
line: line
})
soRec.save({
ignoreMandatoryFields: true
})
}
}
}
}
}catch (e) {
log.debug("Error@removeCurrespondingPO", e);
}
}
const getInputData = (inputContext) => {
try {
let POid = runtime.getCurrentScript().getParameter('custscript_jj_poid_cdu776')
let soArray = getSOhavingCurrespondingPO_search(POid);
if (soArray.length>0)
return soArray;
else
return [];
}catch (e) {
log.debug("Error@getInputData", e)
return [];
}
}
const reduce = (reduceContext) => {
try {
let dataObj = JSON.parse(reduceContext.values[0]);
log.debug("reduceContext", dataObj);
let SOid = dataObj.SO;
let POid = dataObj.PO;
log.debug("SOid", SOid);
log.debug("POid", POid);
if (SOid){
removeCurrespondingPO_ETA(SOid, POid);
}
}catch (e) {
log.debug("Error@reduceContext", e)
}
}
const summarize = (summaryContext) => {
}
return {getInputData, reduce, summarize}
});