define(["N/record", "N/search", "N/ui/serverWidget",'N/https','N/runtime',"N/format"], (
record,
search,
serverWidget,
https,
runtime,
format
) => {
const PAGE_SIZE = 100;
/**
* Defines the Suitelet script trigger point.
* @param {Object} scriptContext
* @param {ServerRequest} scriptContext.request - Incoming request
* @param {ServerResponse} scriptContext.response - Suitelet response
* @since 2015.2
*/
function checkForParameter(parameter) {
if (
parameter != "" &&
parameter !== null &&
parameter !== undefined &&
parameter !== false &&
parameter !== "null" &&
parameter !== "undefined" &&
parameter !== "false" &&
parameter != " "
)
return parameter;
else {
return 0;
}
}
/**
*
* @param pageId
* @param pageCount
* @param sublist
* @param form
* @param count
* @returns {number}
*/
function addPagination(pageId, pageCount, sublist, form, count,scriptContext) {
try {
var salesOrderList = form.addField({
id: "custpage_salesorder_field",
type: serverWidget.FieldType.TEXT,
// type: serverWidget.FieldType.SELECT,
label: "Sales Order #",
// source: "SALESORDER",
});
var poList = form.addField({
id: "custpage_po_field",
type: serverWidget.FieldType.TEXT,
label: "PO #",
});
var progressBarField =form.addField({
id: 'custpage_progress_bar',
type: serverWidget.FieldType.INLINEHTML,
label: 'Progress bar'
});
var loadingUrl = "https://4594915.app.netsuite.com/core/media/media.nl?id=2919379&c=4594915&h=5VJFw6xdqF7mY2o8no5GUDCDZLs8AObTJv-Svveq8NlpZsd9";
var htmlCode = "<div><img id='custpage_load_img_new' style='height:50px;width:50px;top: 110px;left:745px;margin-left: auto; margin-right: auto; position: absolute;display: none;' src='" + loadingUrl + "'/></div>";
progressBarField.defaultValue = htmlCode;
var shipDate = form.addField({
id: "custpage_date_field",
type: serverWidget.FieldType.DATE,
label: "Ship Date",
//container: "custpage_primary",
});
shipDate.isMandatory = true;
var soId=scriptContext.request.parameters.soid;
if (soId)
salesOrderList.defaultValue = soId
var poHash=scriptContext.request.parameters.ponum
if (poHash)
poList.defaultValue = poHash
if (!pageId || pageId < 0) pageId = 0;
else if (pageId >= pageCount) pageId = pageCount - 1;
if (pageId != 0) {
sublist.addButton({
id: "custpage_previous",
label: "Previous",
functionName: "getSuiteletPage(" + (pageId - 1) + ")",
});
}
if (pageId != pageCount-1 ) {
sublist.addButton({
id: "custpage_next",
label: "Next",
// container: 'custpage_tertiary',
functionName: "getSuiteletPage(" + (pageId + 1) + ")",
});
}
const selectOptions = form.addField({
id: "custpage_pageid",
label: "Page Index",
//container: 'custpage_tertiary',
type: serverWidget.FieldType.SELECT,
});
for (let i = 0; i < pageCount; i++) {
if (i === pageId && i === pageCount - 1) {
selectOptions.addSelectOption({
value: "pageid_" + i,
text: i * PAGE_SIZE + 1 + " - " + count,
isSelected: true,
});
} else if (i === pageId) {
selectOptions.addSelectOption({
value: "pageid_" + i,
text: i * PAGE_SIZE + 1 + " - " + (i + 1) * PAGE_SIZE,
isSelected: true,
});
} else if (i === pageCount - 1) {
selectOptions.addSelectOption({
value: "pageid_" + i,
text: i * PAGE_SIZE + 1 + " - " + count,
});
} else {
selectOptions.addSelectOption({
value: "pageid_" + i,
text: i * PAGE_SIZE + 1 + " - " + (i + 1) * PAGE_SIZE,
});
}
}
selectOptions.defaultValue = "pageid_" + pageId;
return pageId;
} catch (error) {
log.error("Error @pagination", error);
}
}
/**
* Function for creating custom page
*/
function createPage(form, itemSublist, sublistValue,scriptContext) {
try{
form.clientScriptModulePath ='SuiteScripts/Jobin and Jismi IT Solutions/MARL-927/JJ CS Field change and button action MARL-928.js'
itemSublist.addMarkAllButtons();
var checkbox = itemSublist.addField({
id: "custpage_chk",
label: "Update Ship Date",
type: serverWidget.FieldType.CHECKBOX,
});
var internalId = itemSublist.addField({
id: "custpage_intid",
label: "Internal Id",
type: serverWidget.FieldType.TEXT,
});
internalId.updateDisplayType({
displayType: serverWidget.FieldDisplayType.HIDDEN
});
var documentNum = itemSublist.addField({
id: "custpage_docnum",
label: "SO #",
type: serverWidget.FieldType.TEXT,
});
var customer = itemSublist.addField({
id: "custpage_customer",
label: "Customer",
type: serverWidget.FieldType.TEXT,
});
var poField = itemSublist.addField({
id: "custpage_po",
label: "PO #",
type: serverWidget.FieldType.TEXT,
});
var itemName = itemSublist.addField({
id: "custpage_unique_key",
label: "Line Unique Key",
type: serverWidget.FieldType.TEXT,
});
itemName.updateDisplayType({
displayType: serverWidget.FieldDisplayType.HIDDEN
});
var uniqueKey = itemSublist.addField({
id: "custpage_item_name",
label: "Item Name",
type: serverWidget.FieldType.TEXT,
});
var itemDescription = itemSublist.addField({
id: "custpage_description",
label: "Item Description",
type: serverWidget.FieldType.TEXT,
});
var itemQuantity = itemSublist.addField({
id: "custpage_qty",
label: "Item Quantity",
type: serverWidget.FieldType.TEXT,
});
var shipDate = itemSublist.addField({
id: "custpage_shipdate",
label: "Ship Date",
type: serverWidget.FieldType.TEXT,
});
var createBy = itemSublist.addField({
id: "custpage_createdby",
label: "Created By",
type: serverWidget.FieldType.TEXT,
});
var soStatus = itemSublist.addField({
id: "custpage_sostatus",
label: "Sales Order Status",
type: serverWidget.FieldType.TEXT,
});
if(sublistValue) {
//set values in sublist
for (var i = 0; i < sublistValue.length; i++) {
itemSublist.setSublistValue({
id: "custpage_intid",
line: i,
value: sublistValue[i].intId,
});
if(sublistValue[i].poNumber){
itemSublist.setSublistValue({
id: "custpage_po",
line: i,
value: sublistValue[i].poNumber,
});
}
itemSublist.setSublistValue({
id: "custpage_docnum",
line: i,
value: sublistValue[i].docNumber,
});
itemSublist.setSublistValue({
id: "custpage_customer",
line: i,
value: sublistValue[i].custName,
});
itemSublist.setSublistValue({
id: "custpage_unique_key",
line: i,
value: sublistValue[i].uniqueKeyName,
});
itemSublist.setSublistValue({
id: "custpage_item_name",
line: i,
value: sublistValue[i].item,
});
if (sublistValue[i].itemDescr) {
itemSublist.setSublistValue({
id: "custpage_description",
line: i,
value: sublistValue[i].itemDescr,
});
}
if (sublistValue[i].quantity) {
itemSublist.setSublistValue({
id: "custpage_qty",
line: i,
value: sublistValue[i].quantity,
});
}
itemSublist.setSublistValue({
id: "custpage_shipdate",
line: i,
value: sublistValue[i].shipdate,
});
if (sublistValue[i].createdby) {
itemSublist.setSublistValue({
id: "custpage_createdby",
line: i,
value: sublistValue[i].createdby,
});
}
var soStatus=sublistValue[i].status
itemSublist.setSublistValue({
id: "custpage_sostatus",
line: i,
value: soStatus[0].toUpperCase() + soStatus.substring(1),
});
}
}
form.addButton({
id: "custpage_update_shipdate",
label: "SUBMIT",
functionName: "updateShipdate",
});
return form;
} catch (error) {
log.error("Error @createPage", error);
}
}
/**
* Function for getting the sales orders
*/
function soSearch(scriptContext) {
try {
var filters_all = []
filters_all.push(["type", "anyof", "SalesOrd"]);
filters_all.push("AND");
filters_all.push(["item.type", "anyof", "InvtPart"]);
filters_all.push("AND");
filters_all.push(["status", "noneof", "SalesOrd:C", "SalesOrd:H", "SalesOrd:G", "SalesOrd:A"]);
filters_all.push("AND");
filters_all.push(["item", "noneof", "@NONE@"]);
filters_all.push("AND");
filters_all.push(["taxline", "is", "F"]);
filters_all.push("AND");
filters_all.push(["shipping", "is", "F"]);
filters_all.push("AND");
filters_all.push(["formulanumeric: CASE when {quantity}={quantityshiprecv} then 1 else 0 end", "equalto", "0"]);
var soID = scriptContext.request.parameters.soid;
if (checkForParameter(soID)) {
filters_all.push("AND");
filters_all.push(["numbertext","is", soID]);
}
var poNum = scriptContext.request.parameters.ponum;
if (checkForParameter(poNum)) {
filters_all.push("AND");
filters_all.push(["otherrefnum", "equalto", poNum]);
}
var salesorderSearchObj = search.create({
type: "salesorder",
filters: filters_all,
columns: [
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({name: "tranid", label: "Document Number"}),
search.createColumn({
name: "entityid",
join: "customerMain",
label: "Name",
}),
search.createColumn({
name: "itemid",
join: "item",
label: "Name",
}),
// search.createColumn({
// name: "salesdescription",
// join: "item",
// label: "Description",
// }),
search.createColumn({name: "memo", label: "Memo"}),
search.createColumn({name: "quantity", label: "Quantity"}),
search.createColumn({name: "shipdate", label: "Ship Date"}),
search.createColumn({name: "custbody_created_by", label: "Created By"}),
search.createColumn({name: "statusref", label: "Status"}),
search.createColumn({name: "lineuniquekey", label: "Line Unique Key"}),
search.createColumn({name: "otherrefnum", label: "PO/Check Number"}),
search.createColumn({
name: "formulatext",
formula:
"Case When TO_CHAR({shipdate},'MM/DD/YYYY') IS NULL Then ' ' Else TO_CHAR({shipdate},'MM/DD/YYYY') End",
label: "Formula (Text)",
}),
],
});
return salesorderSearchObj.runPaged({
pageSize: PAGE_SIZE,
});
}catch (e) {
log.error("error@soSearch",e)
}
}
/**
*
* @param pagedData
* @param i
* @returns {boolean|*[]}
*/
function fetchResult (pagedData, i) {
try {
var soArray = [];
// fetch the current page data
var currentPage = pagedData.fetch(i);
// and forEach() thru all results
currentPage.data.forEach(function (result) {
var soObj = {};
soObj.intId =result.getValue({
name: "internalid",
label: "Internal ID"
})
soObj.docNumber = result.getValue({
name: "tranid",
label: "Document Number",
});
soObj.poNumber=result.getValue({
name: "otherrefnum",
label: "PO/Check Number"
});
soObj.custName = result.getValue({
name: "entityid",
join: "customerMain",
label: "Name",
});
soObj.uniqueKeyName = result.getValue({
name: "lineuniquekey",
label: "Line Unique Key",
});
soObj.item = result.getValue({
name: "itemid",
join: "item",
label: "Name",
});
soObj.itemDescr = result.getValue({
name: "memo",
label: "Memo"
});
soObj.quantity = result.getValue({
name: "quantity",
label: "Quantity",
});
soObj.shipdate = result.getValue({
name: "formulatext",
formula:
"Case When TO_CHAR({shipdate},'MM/DD/YYYY') IS NULL Then ' ' Else TO_CHAR({shipdate},'MM/DD/YYYY') End",
label: "Formula (Text)",
});
soObj.createdby = result.getText({
name: "custbody_created_by",
label: "Created By",
});
soObj.status = result.getText({ name: "statusref", label: "Status" });
soArray.push(soObj);
return true;
});
if (soArray.length>0) {
return soArray;
} else {
return [];
}
} catch (error) {
log.error("Error @fetchResult", error.message);
}
}
const onRequest = (scriptContext) => {
try {
var form = serverWidget.createForm({
title: "Sales Order - Ship Date Update",
hideNavBar: false,
});
var itemSublist = form.addSublist({
id: "custpage_item_lines",
type: serverWidget.SublistType.LIST,
label: "Item List",
});
var searchResultObj = soSearch(scriptContext);
log.debug("searchResultObj",searchResultObj)
var soID = scriptContext.request.parameters.soid;
var count = searchResultObj?.count;
const pageCount = Math.ceil(count / PAGE_SIZE);
var pageId = scriptContext.request.parameters.page;
var pageID = addPagination(pageId, pageCount, itemSublist, form, count, scriptContext);
if (count && count > 0) {
var sublistValue = fetchResult(searchResultObj, pageID);
}
var page = createPage(form, itemSublist, sublistValue,scriptContext);
scriptContext.response.writePage(page);
} catch (e) {
log.debug("error@onRequest", e);
}
};
return { onRequest };
});