/**
* @description Function to check value
* @param {*} parameter
* @returns boolean
*/
function checkForParameter(parameter) {
if (parameter !== “” && parameter !== null && parameter !== undefined && parameter !== false && parameter !== “null” && parameter !== “undefined” && parameter !== ” “ && parameter !== ‘false’ && parameter !== {}) {
return true;
} else {
return false;
}
}
/**
* Function to exchange the rate
* @param {int} fromCurrency
* @param {int} toCurrency
* @param {date} date
* @returns
*/
function getExchangeRate(fromCurrency, toCurrency, date) {
let exchangeRate = 1; // Default to 1 if no conversion is needed
try {
// Fetch exchange rate from source to target currency on a specific date
exchangeRate = currency.exchangeRate({
source: fromCurrency,
target: toCurrency,
date: date
}) || 1;
return exchangeRate;
} catch (e) {
console.error(‘Error fetching exchange rate:’, e);
}
return exchangeRate;
}
/**
* @description Function to update GP
* @param {*} recId
* @param {*} typeOfRec
*/
function updateGPFields(recId, typeOfRec, path) {
try {
let rec;
rec = record.load({
type: typeOfRec,
id: recId,
isDynamic: false,
});
let lineCount = rec.getLineCount({ sublistId: ‘item’ });
for (let i = 0; i < lineCount; i++) {
let requestKey = rec.getSublistValue({
sublistId: ‘item’,
fieldId: ‘custcol_mhi_ibs_request_key’,
line: i
});
let lineCurrency;
if (typeOfRec == “purchaseorder”) {
let vrfqId = rec.getSublistValue({
sublistId: ‘item’,
fieldId: ‘custcol_mhi_ibs_vendor_quote’,
line: i
});
let purchaseorderSearchObj = search.create({
type: search.Type.PURCHASE_ORDER,
filters: [
[‘internalid’, ‘anyof’, rec.id],
‘AND’,
[‘custcol_mhi_ibs_request_key’, ‘is’, requestKey],
‘AND’,
[‘custcol_mhi_ibs_vendor_quote’, ‘anyof’, vrfqId]
],
columns: [
search.createColumn({ name: ‘custcol_mhi_ibs_vendor_currency’, join: ‘CUSTCOL_MHI_IBS_VENDOR_QUOTE’ })
]
});
purchaseorderSearchObj.run().each(function (result) {
lineCurrency = result.getValue({ name: ‘custcol_mhi_ibs_vendor_currency’, join: ‘CUSTCOL_MHI_IBS_VENDOR_QUOTE’ });
// If lineCurrency is empty, skip to the next iteration
if (!lineCurrency) {
console.log(‘Vendor Currency is empty, moving to next iteration’);
return true; // Continue to the next iteration
}
return false; // Exit early after finding the first match
});
} else {
lineCurrency = rec.getSublistValue({
sublistId: ‘item’,
fieldId: ‘custcol_mhi_ibs_vendor_currency’,
line: i
})
}
if (!requestKey) {
console.log(‘No request key on line ${i}’);
continue;
}
let soData = fetchSalesOrderData(requestKey);
if ((!checkForParameter(soData.intId)) && (!checkForParameter(soData.quantity)) && (!checkForParameter(soData.rate)) && (!checkForParameter(soData.price))) {
alert(‘No Sales Order Data for line!’);
return;
}
else {
let soQty;
let estGP;
soQty = soData.quantity;
let exchangeRate = null;
if (lineCurrency != soData.currency) {
exchangeRate = getExchangeRate(lineCurrency, soData.currency, new Date()); // Assuming ‘1’ is USD
}
console.log(“exchangeRate…”, exchangeRate)
if (checkForParameter(soQty)) {
let altSaleAmt = soData.rate * exchangeRate;;
let allocationQty = rec.getSublistValue({
sublistId: ‘item’,
fieldId: ‘custcol_mhi_ibs_request_qty’,
line: i
});
estGP = (altSaleAmt / soQty) * allocationQty;
}
if (checkForParameter(soData.price)) {
let convertedPrice = exchangeRate != null ? soData.price * exchangeRate : soData.price;
rec.setSublistValue({
sublistId: ‘item’,
fieldId: ‘custcol_req_po_so_sale_price’,
line: i,
value: convertedPrice
});
}
if (checkForParameter(soData.amount)) {
let convertedAmount = exchangeRate != null ? soData.amount * exchangeRate : soData.amount; // Convert amount
rec.setSublistValue({
sublistId: ‘item’,
fieldId: ‘custcol_req_po_so_sale_amount’,
line: i,
value: convertedAmount
});
}
if (checkForParameter(soData.currency)) {
rec.setSublistValue({
sublistId: ‘item’,
fieldId: ‘custcol_req_po_so_sale_currency’,
line: i,
value: soData.currency
});
}
if (checkForParameter(estGP)) {
rec.setSublistValue({
sublistId: ‘item’,
fieldId: ‘custcol_req_po_so_est_gp’,
line: i,
value: estGP
});
}
}
}
rec.save({
enableSourcing: true,
ignoreMandatoryFields: true,
});
alert(‘Gross Profit fields updated successfully!’);
let parent = window.parent;
parent.location.href = getRecURL(recId, path);
} catch (e) {
console.error(‘Error updating GP fields:’, e);
alert(‘An error occurred while updating GP fields. Check the logs for details.’);
}
}
/**
* @description Function to reload record
* @param {*} recId
* @param {*} path
* @returns string
*/
function getRecURL(recId, path) {
try {
var recURL = url.format({
domain: path,
params: {
id: recId,
whence: ”,
}
});
window.parent.location.href = recURL;
return recURL;
}
catch (e) {
log.error(“error@getIFURL”, e);
}
}
/**
* @description Sales Order search
* @param {*} requestKey
* @returns object
*/
function fetchSalesOrderData(requestKey) {
var salesorderSearchObj = search.create({
type: “salesorder”,
filters: [
[“type”, “anyof”, “SalesOrd”],
“AND”,
[“custcol_mhi_ibs_request_key”, “is”, requestKey],
“AND”,
[“taxline”, “is”, “F”],
“AND”,
[“mainline”, “is”, “F”],
“AND”,
[“cogs”, “is”, “F”],
“AND”,
[“shipping”, “is”, “F”]
],
columns: [
search.createColumn({ name: “internalid”, label: “Internal Id” }),
search.createColumn({ name: “custcol_mhi_ibs_entity_price”, label: “Entity Price” }),
search.createColumn({ name: “amount”, label: “Amount” }),
search.createColumn({ name: “currency”, label: “Currency” }),
search.createColumn({ name: “rate”, label: “Base Price” }),
search.createColumn({ name: “quantity”, label: “Sale Qty” }),
search.createColumn({ name: “fxestgrossprofit”, label: “Est. Gross Profit (Line) (Foreign Currency)” })
]
});
var obj = {};
salesorderSearchObj.run().each(function (result) {
obj.intId = result.getValue({ name: “internalid” });
obj.price = result.getValue({ name: “custcol_mhi_ibs_entity_price” });
obj.amount = result.getValue({ name: “amount” });
obj.currency = result.getValue({ name: “currency” });
obj.rate = result.getValue({ name: “fxestgrossprofit” });
obj.quantity = result.getValue({ name: “quantity” });
return false;
});
return obj;
}