/**
* @NApiVersion 2.1
* @NScriptType MapReduceScript
*/
define(['N/record', 'N/runtime', 'N/search'],
/**
* @param{record} record
* @param{search} search
*/
(record,runtime ,search) => {
const getInputData = (inputContext) => {
try{
//search to find new items
var itemSearchObj = search.create({
type: "item",
filters:
[
["isinactive","is","F"],
"AND",
["custitem67","isnotempty",""],
"AND",
["pricing.currency","anyof","1"]
],
columns:
[
search.createColumn({
name: "internalid",
summary: "GROUP",
label: "Internal ID"
}),
search.createColumn({
name: "itemid",
summary: "MAX",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({
name: "name",
summary: "MAX",
join: "inventoryLocation",
label: "Name"
}),
search.createColumn({
name: "baseprice",
summary: "MAX",
label: "Base Price"
}),
// search.createColumn({
// name: "formulatext",
// summary: "MAX",
// formula: "NVL({pricing.pricelevel},'')",
// label: "Formula (Text)"
// }),
// search.createColumn({
// name: "formulacurrency",
// summary: "MAX",
// formula: "NVL({pricing.unitprice},0)",
// label: "Formula (Currency)"
// }),
search.createColumn({
name: "custitem67",
summary: "MAX",
label: "new item name"
}),
search.createColumn({
name: "internalid",
join: "inventoryLocation",
summary: "MAX",
label: "Internal ID"
})
]
});
var resultArray = [];
var searchResultCount = itemSearchObj.runPaged().count;
if (searchResultCount > 0) {
itemSearchObj.run().each(function (result) {
var resultObj={};
resultObj.itemName = result.getValue({name: "itemid", summary: "MAX", label: "Name"});
resultObj.onHand = result.getValue({name: "totalquantityonhand", summary: "MAX", label: "Total Quantity On Hand"});
resultObj.internalId = result.getValue({name: "internalid", summary: "GROUP", label: "Internal ID"});
resultObj.locName = result.getValue({name: "name", join: "inventoryLocation", summary: "MAX", label: "Name"});
resultObj.itemRef = result.getValue({name: "custitem67", summary: "MAX", label: "Internal ID- Ex Item"})
resultObj.loctId=result.getValue({name: "internalid", join: "inventoryLocation", summary: "MAX", label: "Internal ID"})
resultArray.push(resultObj);
return true;
});
}
return resultArray;
}catch (e) {
log.debug("error@getInputData",e)
}
}
const map = (mapContext) => {
try{
var resultObject=JSON.parse(mapContext.value);
var itemId= resultObject.internalId;
mapContext.write({
key:itemId,
value:resultObject
})
}catch (e) {
log.debug('Error @ map',e);
return [];
}
}
const reduce = (reduceContext) => {
try {
var invData = reduceContext.values.map(JSON.parse);
for (var i = 0; i < invData.length; i++) {
var newinterId =invData[i].internalId;
//var loctionName =invData[i].locName;
//var onHandQty =invData[i].onHand;
var itemRefer = invData[i].itemRef;
//var newlocId =invData[i].loctId
}
//search to get old items
var itemSearchObj = search.create({
type: "item",
filters:
[
["internalid","anyof", itemRefer],
"AND",
["locationquantityonhand","greaterthan","0"]
],
columns:
[
search.createColumn({name: "internalid",label: "Internal ID"}),
search.createColumn({name: "inventorylocation", label: "Inventory Location"}),
search.createColumn({name: "locationquantityonhand", label: "Location On Hand"}),
search.createColumn({
name: "name",
join: "inventoryLocation",
label: "Name"
}),
search.createColumn({
name: "internalid",
join: "inventoryLocation",
label: "Internal ID"
}),
search.createColumn({
name: "formulanumeric",
formula: "NVL({locationaveragecost},0)",
label: "Formula (Numeric)"
})
]
});
var searchResArray = [];
var searchResultCount = itemSearchObj.runPaged().count;
itemSearchObj.run().each(function(result) {
var searchResultObj={};
searchResultObj.intId=result.getValue({name: "internalid", label: "Internal ID"});
searchResultObj.qtyOnhand=result.getValue({name: "locationquantityonhand", label: "Location On Hand"});
searchResultObj.loc=result.getValue({name: "name", join: "inventoryLocation", label: "Name"});
searchResultObj.locId=result.getValue({name: "internalid", join: "inventoryLocation", label: "Internal ID"});
searchResultObj.price=result.getValue({ name: "formulanumeric", formula: "NVL({locationaveragecost},0)",label: "Formula (Numeric)"})
searchResArray.push(searchResultObj);
return true;
});
//inventory adjustment
var inveAdj = record.create({
type: record.Type.INVENTORY_ADJUSTMENT,
isDynamic: true
});
inveAdj.setValue({ fieldId: 'subsidiary', value: 4 });
inveAdj.setValue({ fieldId: 'account', value: 367 });
//set flag
inveAdj.setValue('custbody_jj_inv_adjustment', true);
for(var i = 0; i < searchResArray.length; i++) {
// Old item line
inveAdj.selectNewLine({
sublistId: 'inventory'
});
inveAdj.setCurrentSublistValue({
sublistId: 'inventory',
fieldId: 'item',
value:searchResArray[i].intId
});
inveAdj.setCurrentSublistValue({
sublistId: 'inventory',
fieldId: 'custcol69',
value:9
});
inveAdj.setCurrentSublistValue({
sublistId: 'inventory',
fieldId: 'adjustqtyby',
value: searchResArray[i].qtyOnhand*-1
});
inveAdj.setCurrentSublistValue({
sublistId: 'inventory',
fieldId: 'location',
value: searchResArray[i].locId
});
inveAdj.commitLine({
sublistId: 'inventory'
});
//New item line
inveAdj.selectNewLine({
sublistId: 'inventory'
});
inveAdj.setCurrentSublistValue({
sublistId: 'inventory',
fieldId: 'item',
value:newinterId
});
inveAdj.setCurrentSublistValue({
sublistId: 'inventory',
fieldId: 'custcol69',
value:9
});
inveAdj.setCurrentSublistValue({
sublistId: 'inventory',
fieldId: 'adjustqtyby',
value: searchResArray[i].qtyOnhand*1
});
inveAdj.setCurrentSublistValue({
sublistId: 'inventory',
fieldId: 'location',
value:searchResArray[i].locId
});
inveAdj.setCurrentSublistValue({
sublistId: 'inventory',
fieldId: 'unitcost',
value:searchResArray[i].price
});
inveAdj.commitLine({
sublistId: 'inventory'
});
}
var recordId = inveAdj.save();
}catch (e) {
log.debug("error@reduce",e)
}
}
return {getInputData, map, reduce}
});