The values from the child suitelet can be set to the parent suitelet using window.opener.
let CS_SCRIPT_PATH = ‘/SuiteScripts/Jobin and Jismi/Credit Memo Vendor Portal MYNE-503/jj_cs_bill_credit_vendor_portal_myne503.js’;
const onRequest = (scriptContext) => {
try {
if (scriptContext.request.method == ‘GET’) {
let itemName, itemQuantity, itemLocation, itemId;
if (scriptContext.request.parameters.item) {
itemName = scriptContext.request.parameters.item;
}
if (scriptContext.request.parameters.quantity) {
itemQuantity = scriptContext.request.parameters.quantity;
}
if (scriptContext.request.parameters.location) {
itemLocation = scriptContext.request.parameters.location;
}
if (scriptContext.request.parameters.itemValue) {
itemId = scriptContext.request.parameters.itemValue;
}
let itemLotNumberSearchDetails = invtDetailSearch(itemId, itemLocation);
// Call the function to get the array of lotNumber and availableQty
let searchResultsArray = processSearchResults(itemId, itemLocation);
let popupForm = serverWidget.createForm({
title: ‘INVENTORY DETAIL’,
hideNavBar: true
});
popupForm.clientScriptFileId = 15579;
popupForm.addFieldGroup({
id: ‘configureinventorydetail’,
label: ‘Configure Inventory Detail’
});
let nameItem = popupForm.addField({
id: ‘custpage_item_name’,
type: serverWidget.FieldType.TEXT,
label: ‘ITEM’,
container: ‘configureinventorydetail’
});
nameItem.defaultValue = itemName;
nameItem.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
let quantityItem = popupForm.addField({
id: ‘custpage_item_quantity’,
type: serverWidget.FieldType.INTEGER,
label: ‘QUANTITY’,
container: ‘configureinventorydetail’
});
quantityItem.defaultValue = itemQuantity;
quantityItem.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
let locationItem = popupForm.addField({
id: ‘custpage_item_location’,
type: serverWidget.FieldType.INTEGER,
label: ‘LOCATION’,
container: ‘configureinventorydetail’
});
locationItem.updateDisplayType({
displayType: serverWidget.FieldDisplayType.HIDDEN
});
locationItem.defaultValue = itemLocation;
let itemValue = popupForm.addField({
id: ‘custpage_item_value’,
type: serverWidget.FieldType.TEXT,
label: ‘ITEM ID’,
container: ‘configureinventorydetail’
});
itemValue.updateDisplayType({
displayType: serverWidget.FieldDisplayType.HIDDEN
});
itemValue.defaultValue = itemId;
let availabileLotNUmberArray = JSON.stringify(searchResultsArray); // Convert the array to JSON string
//Hidden field to store lot number and availabile quantity
let hiddenAvailabileQuantity = popupForm.addField({
id: ‘custpage_hidden_availabile_quantity’,
type: serverWidget.FieldType.LONGTEXT,
label: ‘HIDDEN AVAILABILE QUANTITY’,
container: ‘configureinventorydetail’
})
hiddenAvailabileQuantity.updateDisplayType({
displayType: serverWidget.FieldDisplayType.HIDDEN
});
hiddenAvailabileQuantity.defaultValue = availabileLotNUmberArray
popupForm.addFieldGroup({
id: ‘inventorydetail’,
label: ‘Inventory Detail’
});
let inventoryDetailSublist = popupForm.addSublist({
id: ‘inventory_detail_sublist’,
type: serverWidget.SublistType.INLINEEDITOR,
label: ‘Inventory Detail’
});
let serialLotNumber = inventoryDetailSublist.addField({
id: ‘custpage_serial_lotnumber’,
type: serverWidget.FieldType.SELECT,
label: ‘SERIAL/LOT NUMBER’,
});
serialLotNumber.isMandatory = true;
serialLotNumber.defaultValue =
serialLotNumber.addSelectOption({
value: ”,
text: ”
});
//Loop through the itemLotNumberSearchDetails and add each lot number as an option to the select field
itemLotNumberSearchDetails.forEach(function (item) {
serialLotNumber.addSelectOption({
value: item.lotNumber.internalId,
text: item.lotNumber.text
});
});
let lotAvailable = inventoryDetailSublist.addField({
id: ‘custpage_lot_available’,
type: serverWidget.FieldType.INTEGER,
label: ‘LOT QTY AVAILABLE’
});
lotAvailable.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
let quantity = inventoryDetailSublist.addField({
id: ‘custpage_quantity’,
type: serverWidget.FieldType.INTEGER,
label: ‘QUANTITY’,
});
quantity.isMandatory = true;
popupForm.addButton({
id: ‘custpage_close_button’,
label: ‘CLOSE’,
functionName: ‘onCloseButtonClick’
});
let okButton = popupForm.addSubmitButton({
label: ‘OK’
//function: ‘saveRecord()’
});
scriptContext.response.writePage(popupForm);
}
else {
//post
let itemName, itemQuantity, itemId, locationId;
let request = scriptContext.request;
if (request.parameters.custpage_item_name) {
itemName = request.parameters.custpage_item_name;
log.debug(“item name*”, itemName)
}
if (request.parameters.custpage_item_quantity) {
itemQuantity = request.parameters.custpage_item_quantity;
log.debug(“itemQuantity*”, itemQuantity)
}
if (request.parameters.custpage_item_value) {
itemId = scriptContext.request.parameters.custpage_item_value;
log.debug(“itemid*”, itemId)
}
if (request.parameters.custpage_item_location) {
locationId = scriptContext.request.parameters.custpage_item_location;
log.debug(“locationid*”, locationId)
}
if (itemName) {
let sublistLineCount = request.getLineCount(‘inventory_detail_sublist’);
let lotObj = {};
let totalQuantity = 0;
for (let i = 0; i < sublistLineCount; i++) {
let lotName = request.getSublistValue({
group: ‘inventory_detail_sublist’,
name: ‘custpage_serial_lotnumber’,
line: i
});
log.debug(“lot name”, lotName)
let lotQuantity = request.getSublistValue({
group: ‘inventory_detail_sublist’,
name: ‘custpage_quantity’,
line: i
});
log.debug(“lot quantity”, lotQuantity)
lotObj[lotName] = lotQuantity;
//alert if total quantity does not match with sublist quantity
let quantitySublist = request.getSublistValue({
group: ‘inventory_detail_sublist’,
name: ‘custpage_quantity’,
line: i
});
log.debug(“Quantity Sublist”, quantitySublist)
totalQuantity += parseInt(quantitySublist || 0);
log.debug(“totalQuantity inside”, totalQuantity)
}
log.debug(“totalQuantity outside”, totalQuantity)
log.debug(“lot object”, lotObj)
let formQuantity = parseInt(itemQuantity);
if (formQuantity == totalQuantity) {
if (lotObj) {
//let documentDatas = lotObj;
let documentDatas = {
itemId: itemId, // Include itemId in the documentData
locationId: locationId, //Include locationId in the document data
lots: lotObj // Original lotObj
};
log.debug(documentDatas, documentDatas)
let documentData = JSON.stringify(documentDatas);
log.debug(documentData, documentData)
str = “<script>window.opener.require( [ ‘” + CS_SCRIPT_PATH + “‘ ], function ( cs ) { cs.setSlLine( ‘” + documentData + “‘ ); } ); window.opener.focus(); window.close() </script>”;
log.debug(“str”, str)
scriptContext.response.write(str);
}
}
else {
let alert = `<script>alert(“Selected quantity must be equal to the required quantity.”);window.history.back();</script>`
scriptContext.response.write(alert);
}
}
}
} catch (e) {
log.error(“Error @ onRequest”, e)
}
}
Function setSlLine used in client scrip to set the values from the popup page to the parent page.
function setSlLine(data) {
try {
let docData = JSON.parse(data);
let rec = currentRecord.get();
if (docData) {
let keys = Object.keys(docData.lots);
let keysString = keys.join(‘,’);
// Get an array of values
let values = Object.values(docData.lots);
// Join the values with commas
let valuesString = values.join(‘,’);
rec.setCurrentSublistValue({
sublistId: “item_sublist”,
fieldId: “custpage_required_lotnumber”,
value: keysString,
});
rec.setCurrentSublistValue({
sublistId: “item_sublist”,
fieldId: “custpage_required_quantity”,
value: valuesString,
});
rec.setCurrentSublistValue({
sublistId: “item_sublist”,
fieldId: “custpage_selected_item”,
value: docData.itemId,
});
rec.setCurrentSublistValue({
sublistId: “item_sublist”,
fieldId: “custpage_selected_location”,
value: docData.locationId,
});
rec.commitLine({
sublistId: “item_sublist”,
});
}
} catch (e) {
console.error(“Error @ setSlLine”, e)
}
}