user16717317
user16717317

Reputation:

NetSuite Invoice from Case

Hoping some one may be able to help me out with this error I am receiving... I am working a custom button on the case record that will create an invoice using fields from the case. I have a custom field that is a multi select of all items that can be needed as part of a case. Not all cases require an item, so I will code in logic or workflow to prevent the button from showing up if an item isn't selected and also lock editing and mark the case status as invoiced with a stage of closed once invoice has been created from the record. My problem is that when testing the suitelet I am getting an error when trying to set the subsidiary field and also department. Here is my error: ["type":"error.SuiteScriptError"."name":"INVALID_FLD_VALUE", "message":"You have entered an Invalid Field Value 2 for the following field: subsidiary"

The customer I am testing with is assigned the subsidiary with a internal Id of 2

Below is a portion of my code, I've tried removing quotes in sub value and also trying to set the subsidiary value using the current record.getValue. both throw the same error

    function onRequest(context) {

    var custom_id = context.request.parameters.custom_id;

    var currentRecord = record.load({
        type: record.Type.SUPPORT_CASE,
        id: custom_id
    });

    var newRecord = record.create({
        type: record.Type.INVOICE,
        isDynamic: true
    });

    newRecord.setValue({
        fieldId: 'customform',
        value: 122
    });

    newRecord.setValue({
        fieldId: 'entity',
        value: currentRecord.getValue('entity')
    });

    newRecord.setValue({
        fieldId: 'otherrefnum',
        value: currentRecord.getValue('casenumber')
    });

    newRecord.setValue({
        fieldId: 'subsidiary', value: '2'
    });

    newRecord.setValue({
        fieldId: 'department',
        value: '17'
    });

    newRecord.selectNewLine({
        sublistId: 'item'
    });

    newRecord.setCurrentSublistValue({
        sublistId: 'item',
        fieldId: 'item',
        //value: 46
        value: currentRecord.getValue('custevent_multi_select_work_orders')
    });

    newRecord.setCurrentSublistValue({
        sublistId: 'item',

        fieldId: 'quantity',

        value: '1'

    });
}

Any help much appreciated!

Upvotes: 0

Views: 856

Answers (2)

Martha
Martha

Reputation: 764

I know this isn't exactly what you need, but it is fully functioning and you can make customizations/pick-and-choose parts to use. It's a custom function I've used in the past to create a Sales Order from a Case Record. Best of luck!

/**
 * case_createSOButton.js
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 */

define (['N/record', 'N/currentRecord'],
    function (record, currentRecord){

    //NetSiuite requires the existence of 1 of their functions
    function pageInit(context) {
      var currentRecord = context.currentRecord;
    }
    
    //Button function to create a Sales order and indicate on the Case record the new Sales Order record
    //in the UI on the Script record add this function name to the "Buttons" section
    function createSO(){
      log.audit('function started', 'Cases - Service Case CS createSO');
      var caseRecord = currentRecord.get();

      //if record is in create mode than do not allow creation of a Sales Order
      //mode property is not available, so base it off of id properrty.  ids dont exist until record is saved
      var caseId = caseRecord.id;
      if (!caseId){
        alert('You cannot create a Sales Order while creating a new Case.\nPlease save the Case, then try again.');
        return;
      }

      //if sales order already exists, do not allow creation of a new SO
      var associatedSO = caseRecord.getValue({fieldId: 'custevent_case_associated_sales_orde'});
      if (associatedSO){
        alert('Cannot create a Sales Order since "Associated Sales Order" already exists.');
        return;
      }

      //gather info from user
      var memo = prompt("What's the reason for the charge?\nThe text below will be copied onto the Sales Order \"Memo\" field.");
      //if user clicks cancel, do not continue
      if (memo == null){
        return;
      }
      var description = prompt("Enter a description for the Service Work Item.");
      //if user clicks cancel, do not continue
      if (description == null){
        return;
      }
      var amount = prompt("Enter an amount for the Service Work Item.\nPlease only enter #s, no letters, decimal/cents optional.");
      //if user clicks cancel or there's no # value found, do not continue
      var hasNumber = /\d/;  //validation for confirming the amount variable is a number
      hasNumber = hasNumber.test(amount);
      if (amount == null){
        return;
      }
      if(hasNumber == false){
        alert('No numbers found in entry, please try again.');
        return;
      }
      alert('Please wait for the process to complete before closing this page.');

      //declare static values
      var customform = 199;
      var subsidiary = 2; 
      var status = 3;
      var specialist = 62736;
      var channel = 181; 
      var totalKW = 0; 
      var lenderPoints = 0; 
      var today = new Date();
      var itemId = 3566;
      var lender = 10;
      var loanProduct = 37;

      //load customer to gather values
      var entity = caseRecord.getValue({fieldId: 'company'});
      var customerRec = record.load({type: record.Type.CUSTOMER, id: entity});
      var location = customerRec.getValue({fieldId: 'custentity_customer_market'})|| null;
      var job = caseRecord.getValue({fieldId: 'custevent_case_associated_project'});

      //load associated project to gather values
      var projectRec = record.load({type: record.Type.JOB, id: job});
      var projectMgr = projectRec.getValue({fieldId: 'custentity_project_manager_customer'})|| null;
      var engineer = projectRec.getValue({fieldId: 'custentity31'})|| null;
      var installMgr = projectRec.getValue({fieldId: 'custentity_install_manager'})|| null;
      var state = projectRec.getValue({fieldId: 'custentity_csegmarke'})|| null;
      var region = projectRec.getValue({fieldId: 'custentity_cseg2'})|| null;
      var market = projectRec.getValue({fieldId: 'custentity_cseg3'})|| null;

      //create SO record, set values
      var newSORec = record.create({type: record.Type.SALES_ORDER, isDynamic: true});
      newSORec.setValue({fieldId: 'customform', value: customform, ignoreFieldChange: false});
      newSORec.setValue({fieldId: 'entity', value: entity});
      newSORec.setValue({fieldId: 'job', value: job});
      newSORec.setValue({fieldId: 'custbody_sostatus', value: status});
      newSORec.setValue({fieldId: 'custbody_total', value: totalKW});
      newSORec.setValue({fieldId: 'custbody13', value: lenderPoints});
      newSORec.setValue({fieldId: 'custbody_fundingissues', value: memo});
      newSORec.setValue({fieldId: 'subsidiary', value: subsidiary});
      newSORec.setValue({fieldId: 'custbody_finance_specialist', value: specialist});
      newSORec.setValue({fieldId: 'saleseffectivedate', value: today});
      newSORec.setValue({fieldId: 'custbody_cseglende', value: lender});
      newSORec.setValue({fieldId: 'custbody_csegloan', value: loanProduct});
      newSORec.setValue({fieldId: 'custbody_project_manager', value: projectMgr});
      newSORec.setValue({fieldId: 'custbody_engineer', value: engineer});
      newSORec.setValue({fieldId: 'custbody_installmgr', value: installMgr});
      newSORec.setValue({fieldId: 'class',  value: channel, forceSyncSourcing: true});
      newSORec.setValue({fieldId: 'custbody_csegmarke', value: state, forceSyncSourcing: true});
      newSORec.setValue({fieldId: 'custbody_cseg2', value: region, forceSyncSourcing: true});
      newSORec.setValue({fieldId: 'custbody_cseg3', value: market, forceSyncSourcing: true});
      newSORec.setValue({fieldId: 'location', value: location, forceSyncSourcing: true});

      //set default line item(s)
      newSORec.selectLine({sublistId: 'item', line: 0});
      newSORec.setCurrentSublistValue({sublistId: 'item', fieldId: 'item', value: itemId, ignoreFieldChange: false});
      newSORec.setCurrentSublistValue({sublistId: 'item', fieldId: 'description', value: description, ignoreFieldChange: false});
      newSORec.setCurrentSublistValue({sublistId: 'item', fieldId: 'rate', value: parseInt(amount), ignoreFieldChange: false});
      newSORec.commitLine({sublistId: 'item'});

      //save new SO
      var newSORecId = newSORec.save({enableSourcing: true, ignoreMandatoryFields: false});

      //add SO Rec to Case
      record.submitFields({
        type: record.Type.SUPPORT_CASE,
        id: caseRecord.id,
        values: {
          custevent_case_associated_sales_orde: newSORecId
        },
        options: {
          //enableSourcing: false,  //default is true
          ignoreMandatoryFields : true //default is false
        }
      });

      //alert user when SO is created and open in a new tab
      alert("The new Sales Order will open in a new tab. \n*Reminder - to save this record if you've made changes.");
      var url = 'https://1234567.app.netsuite.com/app/accounting/transactions/salesord.nl?id='+newSORecId
      window.open(url, '_blank');
      log.audit('function end', 'Cases - Service Case CS createSO');
    }//end of create SO funciton

        return {
      pageInit: pageInit,
            createSO: createSO
        }
    }
);

Upvotes: 1

Sayeesh
Sayeesh

Reputation: 236

Errors I found:

  • There is a typo when you are loading the Support Case Record. It should be SUPPORT_CASE
var currentRecord = record.load({ 
   type: record.Type.SUPPORT_CASE,
   id: custom_id
});
  • There are many typos like an inverted comma here, hope you look into it
newRecord.setValue({ 
   fieldId: 'customform',
   value: 122'
});
  • Regarding your main Subsidiary issue, you are passing value (2) using Inverted Commas. Try passing it without those
newRecord.setValue({
   fieldId: 'subsidiary', 
   value: 2
});

OR

newRecord.setValue({
   fieldId: 'subsidiary', 
   value: Number(2)
});

Use inverted commas only to pass String value. For Numerical value, don't use them.

Try these changes and let me know if the problem still persist, there are many possibilities to this error!

Upvotes: 0

Related Questions