Create separate CSV file of Sales order created by Each Customer and send Email to the Sales rep.

/**

 * @NApiVersion 2.1

 * @NScriptType MapReduceScript

 */

define([‘N/record’, ‘N/search’, ‘N/file’,”N/email”],

  /**

 * @param{record} record

 * @param{search} search

 */

  (record, search, file,email) => { 

    function getInputData(context) {

      var salesInformationSearch = search.create({

        type: “salesorder”,

        settings:[{“name”:”consolidationtype”,”value”:”ACCTTYPE”}],

        filters:

        [

          [“type”,”anyof”,”SalesOrd”], 

          “AND”, 

          [“mainline”,”is”,”T”], 

          “AND”, 

          [“trandate”,”within”,”lastmonth”]

        ],

        columns:

        [

          search.createColumn({name: “entity”, label: “Name”}),

          search.createColumn({name: “email”, label: “Email”}),

          search.createColumn({name: “tranid”, label: “Document Number”}),

          search.createColumn({name: “amount”, label: “Amount”})

        ]

       });

      return salesInformationSearch;

    }

    const map = (mapContext) => {

      let searchResult = JSON.parse(mapContext.value);

      let customerName = searchResult.values[‘entity’].value;

      let salesOrderDetails = {

        ‘customername’: searchResult.values[‘entity’].text,

        ’email’: searchResult.values[’email’],

        ‘documentnumber’: searchResult.values[‘tranid’],

        ‘amount’: searchResult.values[‘amount’]

      };

      mapContext.write({

        key: customerName,

        value: JSON.stringify(salesOrderDetails) 

      });

    }

     

    const reduce = (context) => {

      var customerId = context.key;

      var salesDetails = context.values;

      const custRecord = record.load({

        type: record.Type.CUSTOMER,

        id: customerId

      });

      var salesRep = custRecord.getValue({

        fieldId: ‘salesrep’

       });

       log.debug(“salesRep”,salesRep);

     

      var csvContent = ‘Customer Name,Email,Document,Amountn’;

     

      salesDetails.forEach((sale) => {

        const fetchData = JSON.parse(sale);

        // log.debug(“fetchData”, fetchData);

        var customerName = fetchData.customername;

        var customerEmail = fetchData.email;

        var custDocument = fetchData.documentnumber;

        var custAmount = fetchData.amount;

        csvContent += customerName + ‘,’ + customerEmail + ‘,’ + custDocument + ‘,’ + custAmount + ‘n’;

      });

      var csvFile = file.create({

        name: ‘last_month_’ + customerId + ‘.csv’,

        contents: csvContent,

        fileType: file.Type.CSV,

        folder: 5 

      });

      var csvFileId = csvFile.save();

      log.debug(“csvFileId”, csvFileId);

      if(salesRep){

        log.debug(“If is Working”);

        email.send({

          author: -5, 

          recipients: salesRep,

          subject: “Sale Order Details “,

          body: “Please Check the Sales Order Details in below Attachment”,

          attachments: [csvFile],

        });

      }

      else{

        log.debug(“Else is working”);

        email.send({

          author: -5, 

          recipients: “will@gmail.com”,

          subject: “Add Sales Rep”,

          body: “Plesase Add Sales Rep for the Customer “+ customerId,

          attachments: [csvFile],

        });

      }

    }

     

    const summarize = (summaryContext) => {

      

    }

    return { getInputData, map, reduce, summarize }

  });

   

Leave a comment

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