Create inventory for new items using old items details

/**
 * @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}

    });

Leave a comment

Your email address will not be published. Required fields are marked *