Jira code: UMAR-5
The script will create Parts Items in the main Job, sub jobs and purchase requisitions for each sub-job by using the selected vendor, and items.
Vendor item select page using Suitelet
Suitelet for sub job and PR creation
/**
* This contains all the backend actions that needs to be done in the main job wizard
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*/
define(['N/record', 'N/search', 'N/url'],
function(record, search, url) {
/**
* Definition of the Suitelet script trigger point.
*
* @param {Object} context
* @param {ServerRequest} context.request - Encapsulation of the incoming request
* @param {ServerResponse} context.response - Encapsulation of the Suitelet response
* @Since 2015.2
*/
function onRequest(context) {
var ACTION_CREATE_PART_ITEMS = 1;
var ACTION_CHECK_PART_EXISTANCE = 2;
var ACTION_CREATE_SUBJOBS = 3;
var RESPONSE_SUCCESS = 'Success';
var RESPONSE_FAILURE = 'Failure';
var RESPONSE_EXISTS = 'true';
var RESPONSE_NOT_EXISTS = 'false';
if (context.request.method == 'POST') {
var body = context.request.body;
var dataObj = JSON.parse(body);
var action = parseInt(dataObj.action);
var jobId = dataObj.jobId;
var responseObj = RESPONSE_FAILURE;
switch (action) {
case ACTION_CREATE_PART_ITEMS:
responseObj = createPartItemsRecord(jobId, dataObj);
break;
case ACTION_CHECK_PART_EXISTANCE:
responseObj = checkExistanceOfPartsJob(jobId, dataObj);
break;
case ACTION_CREATE_SUBJOBS:
responseObj = createSubJobs(jobId, dataObj);
break;
}
logme('action', responseObj);
//var responseObj = {msg:responseObj1};
//context.response.write(JSON.stringify(responseObj));
context.response.write(responseObj);
}
function logme(title, details) {
log.debug({
title: title,
details: details
});
}
/**
* Create Parts Items in main Job
*/
function createPartItemsRecord(jobId, dataObj) {
try {
var partsItemStr = dataObj.parts_item;
var partsResult = JSON.parse(partsItemStr);
for (var index = 0; index < partsResult.length; index++) {
var partsRecord = record.create({
type: 'customrecord_netu_parts_items',
isDynamic: true
});
partsRecord.setValue({
fieldId: 'custrecord_netu_main_job_ref',
value: jobId
});
var partsObj = partsResult[index];
for (var key in partsObj) {
partsRecord.setValue({
fieldId: key,
value: partsObj[key]
});
}
partsRecord.save({
enableSourcing: false,
ignoreMandatoryFields: true
});
}
return RESPONSE_SUCCESS;
} catch (e) {
return e.message;
}
}
function getSubJobSequence(jobId) {
try {
var sequence = 0;
var subJobSearch = search.create({
type: 'customrecord_netu_sub_job',
columns: ['name',
search.createColumn({
name: 'internalid',
sort: 'DESC'
})
],
});
subJobSearch.filters.push(search.createFilter({
name: 'custrecord_netu_main_job',
operator: 'IS',
values: jobId
}));
var subJobResults = subJobSearch.run().getRange({
start: 0,
end: 1
});
if (subJobResults) {
if (subJobResults.length > 0) {
var lastJobName = subJobResults[0].getValue({
name: 'name'
});
var jobSplit = lastJobName.split('-');
sequence = Number(jobSplit[1]);
}
}
return sequence;
} catch (e) {
log.debug("err in getSubJobSequence", e);
}
}
function checkExistanceOfPartsJob(jobId, dataObj) {
try {
logme('Check Parts Enter', 'partsResult');
var partsSearch = search.create({
type: 'customrecord_netu_parts_items',
columns: ['custrecord_netu_part_description', 'custrecord_netu_part_number', 'custrecord_netu_parts_quantity', 'custrecord_netu_parts_unit'],
filters: [{
name: 'custrecord_netu_main_job_ref',
operator: 'is',
values: jobId
}]
});
var partsResult = partsSearch.run().getRange({
start: 0,
end: 10
});
logme('SLB Check Parts', partsResult.length);
if (!partsResult || partsResult.length == 0) {
return RESPONSE_NOT_EXISTS;
} else {
return RESPONSE_EXISTS;
}
} catch (e) {
log.debug("err in checkExistanceOfPartsJob", e);
}
}
//create subjobs
function createSubJobs(jobId, dataObj) {
try {
var jobFields = search.lookupFields({
type: 'customrecord_netu_main_job',
id: jobId,
columns: ['name']
});
var jobName = jobFields.name;
var SUB_JOB_STATUS_AWAITING_OFFER = 2;
var ITEM_DIRECT = 2;
var ITEM_PART = 1;
var parts_item = dataObj.parts_item;
var partsObjectArray = JSON.parse(parts_item);
var vendor_select_record_str = dataObj.vendor_list;
var itemCode = dataObj.itemCode;
var vendorArray = JSON.parse(vendor_select_record_str);
var newSequence = getSubJobSequence(jobId);
var SUBLISTID = 'recmachcustrecord_netu_pur_req_id';
var subjobName;
var len=(vendorArray.length)-1;
for (var index = len; index >=0 ; index--) {
log.debug("i", index);
var vendorObj = vendorArray[index];
var subJobRecord = record.create({
type: 'customrecord_netu_sub_job',
isDynamic: true,
});
subJobRecord.setValue({
fieldId: "custrecord_netu_main_job",
value: jobId
});
subJobRecord.setValue({
fieldId: "custrecord_netu_subjob_vendor_2",
value: vendorObj.id
});
if (vendorObj.job_type == 'Direct') {
vendorObj.job_type = ITEM_DIRECT;
} else {
vendorObj.job_type = ITEM_PART;
}
subJobRecord.setValue({
fieldId: "custrecord_netu_subjob_type",
value: vendorObj.job_type
});
subJobRecord.setValue({
fieldId: "custrecord_netu_subjob_status",
value: SUB_JOB_STATUS_AWAITING_OFFER
});
subJobRecord.setValue({
fieldId: 'autoname',
value: false
});
//subjobName=jobName +'-'+(newSequence+1);
for (var j = 0, len = true; len == true; j++) {
subjobName = jobName + '-' + (newSequence + 1);
try {
subJobRecord.setValue({
fieldId: 'name',
value: subjobName
});
var subjobId = subJobRecord.save({
enableSourcing: true,
ignoreMandatoryFields: true
});
len = false;
} catch (e) {
newSequence++;
continue;
}
}
//createSubFolder(subjobId,subjobName,jobName);
var vendorId = vendorObj.id;
//checking the vendor commission type
var vendorComtype = search.lookupFields({
type: search.Type.VENDOR,
id: vendorId,
columns: ['custentity_netu_commission_type']
});
//console.log(vendorComtype);
var vendorType1 = vendorComtype.custentity_netu_commission_type[0];
var vendorType = null;
if (vendorType1 == null || vendorType1 == "" || vendorType1 == undefined) {
} else {
vendorType = vendorType1.value;
}
//if((vendorType=='1') && (commiCheck==null || commiCheck=="" || commiCheck==undefined)){
if ((vendorType == '1')) {
var scaleField = false;
}
if (vendorType == '2') {
var scaleField = true;
}
if (vendorType == '3') {
var scaleField = false;
}
if (vendorObj.job_type == ITEM_DIRECT) {
createDirectPurchaseRequistion(jobId, subjobId, itemCode, SUBLISTID, scaleField);
} else {
createPartsPurchaseRequisition(jobId, subjobId, itemCode, SUBLISTID, partsObjectArray, scaleField);
}
newSequence++;
}
return RESPONSE_SUCCESS;
} catch (e) {
log.debug("err in createSubJobs", e);
}
}
function saveSubjob(subjobName, subJobRecord) {
log.debug("subjobName", subjobName);
try {
subJobRecord.setValue({
fieldId: 'name',
value: subjobName
});
var subjobId = subJobRecord.save({
enableSourcing: true,
ignoreMandatoryFields: true
});
return {
status: true,
subjobId: subjobId
};
} catch (e) {
return {
status: false,
subjobId: subjobId
};
}
}
///function to create purchase requisitions for parts
function createPartsPurchaseRequisition(jobId, subjobId, itemCode, SUBLISTID, partsObjectArray, scaleField) {
try {
var requisitionRecord = record.create({
type: 'customrecord_netu_purchase_requisition',
isDynamic: true
});
requisitionRecord.setValue({
fieldId: 'custrecord_netu_pur_req_main_job',
value: jobId
});
requisitionRecord.setValue({
fieldId: 'custrecord_netu_sub_job_number',
value: subjobId
});
requisitionRecord.setValue({
fieldId: 'custrecord_netu_req_scale_commission',
value: scaleField
});
var partsResult = getPartsFromMainJob(jobId);
var partsResultLength = partsResult.length;
for (var index = 0; index < partsResultLength; index++) {
if (itemCode) {
requisitionRecord.selectNewLine({
sublistId: SUBLISTID
});
requisitionRecord.setCurrentSublistValue({
sublistId: SUBLISTID,
fieldId: 'custrecord_netu_pur_req_item_code',
value: itemCode,
ignoreFieldChange: true
});
var partsObj = partsResult[index];
for (var key in partsObj) {
requisitionRecord.setCurrentSublistValue({
sublistId: SUBLISTID,
fieldId: key,
value: partsObj[key],
ignoreFieldChange: true
});
}
requisitionRecord.commitLine({
sublistId: SUBLISTID
});
}
}
var id = requisitionRecord.save({
enableSourcing: true,
ignoreMandatoryFields: true
});
/** AU STARTS--- For setting job status **/
// to load the main job page
var main_job = record.submitFields({
type: 'customrecord_netu_main_job',
id: jobId,
values: {
custrecord_netu_job_status: '1'
}
});
/** AU ENDS **/
} catch (e) {
log.debug("err in createPartsPurchaseRequisition", e);
}
}
///function to create purchase requisitions for direct
function createDirectPurchaseRequistion(jobId, subjobId, itemCode, SUBLISTID, scaleField) {
try {
var requisitionRecord = record.create({
type: 'customrecord_netu_purchase_requisition',
isDynamic: true
});
requisitionRecord.setValue({
fieldId: 'custrecord_netu_pur_req_main_job',
value: jobId
});
requisitionRecord.setValue({
fieldId: 'custrecord_netu_sub_job_number',
value: subjobId
});
requisitionRecord.setValue({
fieldId: 'custrecord_netu_req_scale_commission',
value: scaleField
});
if (itemCode) {
requisitionRecord.selectNewLine({
sublistId: SUBLISTID
});
requisitionRecord.setCurrentSublistValue({
sublistId: SUBLISTID,
fieldId: 'custrecord_netu_pur_req_item_code',
value: itemCode,
ignoreFieldChange: true
});
requisitionRecord.setCurrentSublistValue({
sublistId: SUBLISTID,
fieldId: 'custrecord_netu_pur_req_partdescription',
value: 'Direct',
ignoreFieldChange: true
});
requisitionRecord.commitLine({
sublistId: SUBLISTID
});
}
requisitionRecord.save({
enableSourcing: true,
ignoreMandatoryFields: true
});
record.submitFields({
type: 'customrecord_netu_main_job',
id: jobId,
values: {
custrecord_netu_job_status: '1'
}
});
} catch (e) {
log.debug("err in createDirectPurchaseRequistion", e);
}
}
function getPartsFromMainJob(jobId) {
try {
var partsSearch = search.create({
type: 'customrecord_netu_parts_items',
columns: ['custrecord_netu_part_description', 'custrecord_netu_part_number', 'custrecord_netu_parts_quantity', 'custrecord_netu_parts_unit'],
filters: [{
name: 'custrecord_netu_main_job_ref',
operator: 'is',
values: jobId
}]
});
var partsResult = partsSearch.run().getRange({
start: 0,
end: 1000
});
var partsArray = [];
partsResult.forEach(function(result) {
var partsObj = {};
partsObj.custrecord_netu_pur_req_partdescription = result.getValue({
name: 'custrecord_netu_part_description'
});
partsObj.custrecord_netu_pur_req_partnumber = result.getValue({
name: 'custrecord_netu_part_number'
});
partsObj.custrecord_netu_quantity = result.getValue({
name: 'custrecord_netu_parts_quantity'
});
partsObj.custrecord_netu_pur_req_units = result.getValue({
name: 'custrecord_netu_parts_unit'
});
partsArray.push(partsObj);
});
return partsArray;
} catch (e) {
log.debug("err in getPartsFromMainJob", e);
}
}
}
return {
onRequest: onRequest
};
});