This script creates a custom suitelet form with fields project Name, project subsidiary, Current Status, New Status.On selecting the new status from the dropdown field ithe value will set on the project record.and can add this link to the Employee center.
/**
* @NApiVersion 2.1
* @NScriptType Suitelet
*/
define(['N/record', 'N/redirect', 'N/runtime', 'N/search', 'N/ui/message', 'N/ui/serverWidget'],
/**
* @param{record} record
* @param{redirect} redirect
* @param{runtime} runtime
* @param{search} search
* @param{message} message
* @param{serverWidget} serverWidget
*/
(record, redirect, runtime, search, message, serverWidget) => {
/**
*
* @param searchResult,projectnameSublist
* searchResults sets in the projectnameSublist
* @returns {[]}
* Returns an Empty array
*/
function setValuesinSublist(searchResult, projectnameSublist) {
try {
var count = searchResult.length;
log.debug("Count",count);
for (var i = 0; i < searchResult.length; i++) {
projectnameSublist.setSublistValue({
id: 'custpage_projectid',
line: i,
value: checkif(searchResult[i]["GROUP(company)"][0].value)
});
projectnameSublist.setSublistValue({
id: 'custpage_project',
line: i,
value: checkif(searchResult[i]["GROUP(company)"][0].text)
});
projectnameSublist.setSublistValue({
id: 'custpage_subsidiary',
line: i,
value: checkif(searchResult[i]["MAX(job.subsidiary)"])
});
projectnameSublist.setSublistValue({
id: 'custpage_current_status',
line: i,
value: checkif(searchResult[i]["MAX(job.entitystatus)"])
});
}
} catch (e) {
log.debug("Err@ setValuesinSublist", e);
return []
}
}
/**
*
* @param singleitem
* @returns {string|_}
*/
function checkif(singleitem) {
if (singleitem == "" || singleitem == null || singleitem == undefined || singleitem == '- None -' || singleitem == " ") {
return "_";
} else {
return singleitem;
}
}
/**
*Project task search for listing the projects.
* @returns {[]}
*/
function createSearch() {
try {
var projecttaskSearchObj = search.create({
type: "projecttask",
filters:
[
["formulanumeric: CASE WHEN {job.jobresource.id} = {user.id} THEN 1 ELSE 0 END","equalto","1"],
"AND",
["job.jobresourcerole","anyof","-2"],
"AND",
["job.status","anyof","2"],
"AND",
["job.isinactive","is","F"]
],
columns:
[
search.createColumn({
name: "company",
summary: "GROUP",
label: "Project"
}),
search.createColumn({
name: "subsidiary",
join: "job",
summary: "MAX",
label: "Subsidiary"
}),
search.createColumn({
name: "entitystatus",
join: "job",
summary: "MAX",
label: "Status"
})
/* search.createColumn({
name: "formulatext",
summary: "GROUP",
formula: "case when {job.internalid} IS NOT NULL then '<a href=\"/app/accounting/project/projecttask.nl?l=T&company='||{job.internalid}||'\" target=\"_blank\">Create New Project Task</a>' else NULL end",
label: "Formula (Text)"
}),
search.createColumn({
name: "jobresourcerole",
join: "job",
summary: "GROUP",
label: "Project Resource Role"
})*/
]
});
var searchResultCount = projecttaskSearchObj.runPaged().count;
log.debug("projecttaskSearchObj result count",searchResultCount);
var projecttaskarray = [];
projecttaskSearchObj.run().each(function (result) {
var allValues = result.getAllValues();
projecttaskarray.push(allValues);
return true;
});
return projecttaskarray;
} catch (e) {
log.debug("Err@ createSearch", e);
return []
}
}
/**
* Defines the Suitelet script trigger point.
* @param {Object} scriptContext
* @param {ServerRequest} scriptContext.request - Incoming request
* @param {ServerResponse} scriptContext.response - Suitelet response
* @since 2015.2
*/
const onRequest = (scriptContext) => {
if (scriptContext.request.method === 'POST') {
try {
var response = scriptContext.response;
// getting sublist line count
var projectListCount = scriptContext.request.getLineCount({ group: "custpage_project_list" });
var getProjectIdArray = [];
var getprojectNameArray = [];
var getCurrentStatusArray = [];
var getNewStatusArray = [];
for(var i=0;i<projectListCount;i++){
/**
*getting projectId, projectname,current status and new status
*/
var getProjectId = scriptContext.request.getSublistValue({ group: 'custpage_project_list', name: 'custpage_projectid', line: i });
var getProjectName = scriptContext.request.getSublistValue({ group: 'custpage_project_list', name: 'custpage_project', line: i });
var getCurrentStatus = scriptContext.request.getSublistValue({ group: 'custpage_project_list', name: 'custpage_current_status', line: i });
var getNewStatus = scriptContext.request.getSublistValue({ group: 'custpage_project_list', name: 'custpage_new_status', line: i });
getprojectNameArray.push(getProjectName);
getCurrentStatusArray.push(getCurrentStatus);
getNewStatusArray.push(getNewStatus);
getProjectIdArray.push(getProjectId);
// loads the project record.
var projectRec = record.load({
type: record.Type.JOB,
id: getProjectIdArray[i],
isDynamic: true
});
// set new status in the project record
projectRec.setValue({
fieldId: 'entitystatus',
value: getNewStatusArray[i]
});
projectRec.save();
var reSuitelt = redirect.toSuitelet({
scriptId: '626',
deploymentId: '1'
});
}
} catch (e) {
log.debug("error@ onRequest POST", e)
}
} else {
try {
var form = serverWidget.createForm({
title: 'Change Project Status'
});
// Search for getting the project status
var jobSearchObj = search.create({
type: "job",
filters:
[
["status","anyof","20","1","2"]
],
columns:
[
search.createColumn({
name: "entitystatus",
summary: "GROUP",
label: "Status"
})
]
});
var searchResultstatusCount = jobSearchObj.runPaged().count;
log.debug("jobSearchObj result count",searchResultstatusCount);
var jobStatusArray = [];
jobSearchObj.run().each(function(result){
var jobStatus = result.getValue(jobSearchObj.columns[0]);
var jobStatustext = result.getText(jobSearchObj.columns[0])
var jobStattusObj = {id: jobStatus, value: jobStatustext};
jobStatusArray.push(jobStattusObj);
return true;
});
log.debug("jobStatusArray",jobStatusArray);
// creating a sublist
var projectnameSublist = form.addSublist({
id: 'custpage_project_list',
type: serverWidget.SublistType.LIST,
label: 'Project List'
});
// creating the sublist fields
var ProjectId = projectnameSublist.addField({
id: 'custpage_projectid',
type: serverWidget.FieldType.TEXT,
label: 'Project ID',
}).updateDisplayType({displayType: serverWidget.FieldDisplayType.HIDDEN});
var ProjectName = projectnameSublist.addField({
id: 'custpage_project',
type: serverWidget.FieldType.TEXT,
label: 'Project Name',
}).updateDisplayType({displayType: serverWidget.FieldDisplayType.INLINE});;
var subsidiary = projectnameSublist.addField({
id: 'custpage_subsidiary',
type: serverWidget.FieldType.TEXT,
label: 'Project Subsidiary',
}).updateDisplayType({displayType: serverWidget.FieldDisplayType.INLINE});;
var currentStatus = projectnameSublist.addField({
id: 'custpage_current_status',
type: serverWidget.FieldType.TEXT,
label: 'Current Status',
}).updateDisplayType({displayType: serverWidget.FieldDisplayType.INLINE});;
var newStatus = projectnameSublist.addField({
id: 'custpage_new_status',
type: serverWidget.FieldType.SELECT,
label: 'New Status',
});
// Sourcing values to the drop down field New Status
newStatus.addSelectOption({
value: 0,
text: ""
});
for (var k = 0; k < searchResultstatusCount; k++) {
newStatus.addSelectOption({
value: jobStatusArray[k].id,
text: jobStatusArray[k].value
});
}
// adding submit button
form.addSubmitButton({
label: 'Submit'
});
var searchResult = createSearch();
log.debug("Array", searchResult);
var setSublist = setValuesinSublist(searchResult, projectnameSublist);
scriptContext.response.writePage(form);
} catch (e) {
log.debug("error@ onRequest", e)
}
}
}
// }
return {onRequest}
});