Update Portlet Criteria

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
        };
    });

Leave a comment

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