Jira Code: APC-1
Description – It updates the Item committed and total quantity field in both asynchronously (Map reduce) and synchronously (Workflow action).
/**
* @NApiVersion 2.x
* @NScriptType MapReduceScript
* @NModuleScope SameAccount
*/
/*******************************************************************************
* APC-1 Update Portlet Criteria
* Script Description
* Updates a fields total quantity backordered and total Quantity committed
* *****************************************************************************
* Date: 21/01/2018
*
*
* Author: Jobin & Jismi IT Services LLP
*
*
* REVISION HISTORY
*
* Revision 1.0 21/01/2018 : created
* Revision 1.0 30/01/2018 : APC-2
*
******************************************************************************/
define(['N/search','N/file','N/task',"N/record"],function(search,file,task,record) {
var TOTAL_COMMITED="custbody_acl_jj_total_commited";
var TOTAL_ORDERED="custbody_acl_jj_total_ordered";
function getResults(S) {
var results = [];
var pageData = search.create(S).runPaged({pageSize:1000});
var page = pageData.pageRanges;
for (var k = 0; k < page.length; k++) {
var data = pageData.fetch({index:k}).data;
for (var j = 0; j < data.length; j++){
var R = data[j];
results.push(R.getValue(S.columns[0]));
}
}
return results;
}
function getInputData(c){
try {
var transactionSearchOptions ={
type: "transaction",
filters:[
["type","anyof","SalesOrd","WorkOrd"],"AND",
["item.internalidnumber","greaterthan","0"],"AND",
["taxline","is","F"], "AND",
["shipping","is","F"], "AND",
["item","noneof","@NONE@","116862","116871","1917"],"AND",
["mainline","is","F"],"AND",
["formulanumeric: CASE WHEN {quantitycommitted} > {quantitypicked} THEN 1 ELSE 0 END","equalto","1"],"AND",
["status","noneof","SalesOrd:C","SalesOrd:H","WorkOrd:C","WorkOrd:H"]
],
columns:[search.createColumn({name:"internalid",label: "Internalid",summary:"GROUP"})]
};
var soIds=getResults(transactionSearchOptions);
if(soIds.length==0)return [];
var transactionSearchObj = search.create({
type: "transaction",
filters:[
["type","anyof","SalesOrd","WorkOrd"],"AND",
["item.internalidnumber","greaterthan","0"],"AND",
["taxline","is","F"], "AND",
["shipping","is","F"], "AND",
["item","noneof","@NONE@","116862","116871","1917"],"AND",
["mainline","is","F"],"AND",
["status","noneof","SalesOrd:C","SalesOrd:H","WorkOrd:C","WorkOrd:H"],"AND",
["internalid", "anyof",[soIds]]
],
columns:[
search.createColumn({name: "internalid", label: "Internalid"}),
search.createColumn({name: "quantitycommitted", label: "Quantity Committed"}),
search.createColumn({name: "quantity", label: "Quantity"}),
search.createColumn({name: "type", label: "Type"})
]
});
return transactionSearchObj;
} catch (err) {
log.debug("error@getInputData",err);
}
}
function reduce(c) {
try {
var totalCommitted=0;
var totalQuantity=0;
var type;
for(var i=0;i<c.values.length;i++)
{
var valObj =JSON.parse(c.values[i]);
log.debug("valObj",valObj);
totalQuantity +=valObj.values.quantity?parseInt(valObj.values.quantity):0;
totalCommitted +=valObj.values.quantitycommitted?parseInt(valObj.values.quantitycommitted):0;
type =valObj.recordType;
}
values={};
values[TOTAL_COMMITED]=totalCommitted;
values[TOTAL_ORDERED]=totalQuantity;
log.debug("values",values);
record.submitFields({type:type,id:parseInt(c.key),values:values});
} catch (err) {
log.debug("error@reduce",err);
}
}
function summarize(c) {
try {
log.debug("summarize",c);
} catch (err) {
log.debug("error@summarize",err);
}
}
return {
getInputData:getInputData,
reduce:reduce,
summarize:summarize
};
});
/**
*@NApiVersion 2.x
*@NScriptType workflowactionscript
*/
/*******************************************************************************
* APC-1 Update Portlet Criteria
* Script Description
* Triggers the map reduce task
* **************************************************************************
* Date: 21/01/2018
*
*
* Author: Jobin & Jismi IT Services LLP
*
*
* REVISION HISTORY
*
* Revision 1.0 21/01/2018 : created
*
******************************************************************************/
define(['N/file','N/task',"N/runtime"],function(file,task,runtime){
var BUFFER_FILE="SuiteScripts/Jobin and Jismi IT Services LLP/APC-1/buffer.js";
var TASK_OPTIONS={
taskType:"MAP_REDUCE",
scriptId:"customscript_acl_1_jj_mr_update_fields",
deploymentId:"customdeploy_acl_1_jj_mr_update_fields"
};
var TOTAL_COMMITED="custbody_acl_jj_total_commited";
var TOTAL_ORDERED="custbody_acl_jj_total_ordered";
function zeroIfNull(r){
return r?r:0;
}
function onAction(c) {
try {
var flag=runtime.getCurrentScript().getParameter("custscript1");//.custscript1;
log.debug("flag",flag);
var qtyCommited=0;
var qtyOrderd=0;
var length= c.newRecord.getLineCount({sublistId:'item'});
for(var i=0;i<length;i++)
{
if((["116862","116871","1917"]).indexOf(c.newRecord.getSublistValue({sublistId:'item',fieldId:'item',line:i}))>=0)
continue;
qtyCommited+=zeroIfNull(c.newRecord.getSublistValue({sublistId:'item',fieldId:'quantitycommitted',line:i}));
qtyOrderd+=zeroIfNull(c.newRecord.getSublistValue({sublistId:'item',fieldId:'quantity',line: i}));
}
return parseInt(flag==0?qtyCommited:qtyOrderd);
} catch (err) {
log.debug("error@onAction",err);
}
}
return {
onAction:onAction
};
});
/**
*@NApiVersion 2.x
*@NScriptType workflowactionscript
*/
/*******************************************************************************
* APC-1 Update Portlet Criteria
* Script Description
* Triggers the map reduce task
* **************************************************************************
* Date: 21/01/2018
*
*
* Author: Jobin & Jismi IT Services LLP
*
*
* REVISION HISTORY
*
* Revision 1.0 21/01/2018 : created
*
******************************************************************************/
define(['N/file','N/task'],function(file,task){
var BUFFER_FILE="SuiteScripts/Jobin and Jismi IT Services LLP/APC-1/buffer.js";
var TASK_OPTIONS={ taskType:"MAP_REDUCE",
scriptId:"customscript_acl_1_jj_mr_update_fields",
deploymentId:"customdeploy_acl_1_jj_mr_update_fields"
};
function onAction(c) {
try {
log.debug("HI",(c.newRecord.type=="inventoryadjustment"?"inventory":"item"));
var ItemsAdjusted=[];
var length= c.newRecord.getLineCount({sublistId:(c.newRecord.type=="inventoryadjustment"?"inventory":"item")});
for(var i=0;i<length;i++)
ItemsAdjusted.push(c.newRecord.getSublistValue({sublistId:(c.newRecord.type=="inventoryadjustment"?"inventory":"item"),fieldId:'item',line: i}));
log.debug("HI",ItemsAdjusted);
var arrayFile=file.load({id:BUFFER_FILE});
var idArray = JSON.parse(arrayFile.getContents());
idArray = idArray.concat(ItemsAdjusted);
file.create({
name: arrayFile.name,
fileType: arrayFile.fileType,
contents: JSON.stringify(idArray),
folder: arrayFile.folder
}).save();
if(idArray.length>0){
try{
var mrTask = task.create(TASK_OPTIONS).submit();
}catch(err){
log.debug("Already Running");
}
}
} catch (err) {
log.debug("error@onAction",err)
}
}
return {
onAction: onAction
};
});