From cd542798602819280b94cbba628b19eb58e30352 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:01:18 +0530
Subject: [PATCH 01/17] Create Mask Sensitive Data in Descriptions
Create Mask Sensitive Data in Descriptions
---
.../Business Rules/Mask Sensitive Data in Descriptions | 1 +
1 file changed, 1 insertion(+)
create mode 100644 Server-Side Components/Business Rules/Mask Sensitive Data in Descriptions
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Descriptions b/Server-Side Components/Business Rules/Mask Sensitive Data in Descriptions
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/Server-Side Components/Business Rules/Mask Sensitive Data in Descriptions
@@ -0,0 +1 @@
+
From b596b799ee4728bc34c63638692d9e94cbd763ea Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:01:55 +0530
Subject: [PATCH 02/17] Readme.md
Automatically replaces sensitive patterns (like credit card numbers) with masked text
---
Server-Side Components/Business Rules/Readme.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 Server-Side Components/Business Rules/Readme.md
diff --git a/Server-Side Components/Business Rules/Readme.md b/Server-Side Components/Business Rules/Readme.md
new file mode 100644
index 0000000000..71a0f2c2a0
--- /dev/null
+++ b/Server-Side Components/Business Rules/Readme.md
@@ -0,0 +1 @@
+Automatically replaces sensitive patterns (like credit card numbers) with masked text
From 86954dc6257a9874d6de6dbe845e86410e52adc2 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:04:08 +0530
Subject: [PATCH 03/17] Rename Server-Side Components/Business Rules/Mask
Sensitive Data in Descriptions to Server-Side Components/Business Rules/Mask
Sensitive Data in Descript/readme.md
Mask Sensitive Data in Descriptions
---
.../readme.md} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename Server-Side Components/Business Rules/{Mask Sensitive Data in Descriptions => Mask Sensitive Data in Descript/readme.md} (100%)
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Descriptions b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
similarity index 100%
rename from Server-Side Components/Business Rules/Mask Sensitive Data in Descriptions
rename to Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
From e1751ce3aea1f617622c81fa2ccd94c5ff331d83 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:05:01 +0530
Subject: [PATCH 04/17] Update readme.md
Automatically replaces sensitive patterns (like credit card numbers) with masked text
---
.../Business Rules/Mask Sensitive Data in Descript/readme.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
index 8b13789179..71a0f2c2a0 100644
--- a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
+++ b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
@@ -1 +1 @@
-
+Automatically replaces sensitive patterns (like credit card numbers) with masked text
From 71a417462307a1b087fa3d7eec5ef3b6ade6ab20 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:06:11 +0530
Subject: [PATCH 05/17] Create MaskData.js
Automatically replaces sensitive patterns (like credit card numbers) with masked text
---
.../Business Rules/Mask Sensitive Data in Descript/MaskData.js | 1 +
1 file changed, 1 insertion(+)
create mode 100644 Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
@@ -0,0 +1 @@
+
From d13f885900fee2721fd512703c4fbad05af32d5d Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:07:35 +0530
Subject: [PATCH 06/17] Create Mask Sensitive Data in Description
---
.../Business Rules/Mask Sensitive Data in Description | 1 +
1 file changed, 1 insertion(+)
create mode 100644 Server-Side Components/Business Rules/Mask Sensitive Data in Description
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Description b/Server-Side Components/Business Rules/Mask Sensitive Data in Description
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/Server-Side Components/Business Rules/Mask Sensitive Data in Description
@@ -0,0 +1 @@
+
From 0e0a6f45f06ffad179fdf5cbe2d405d42b758b74 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:42:39 +0530
Subject: [PATCH 07/17] Update MaskData.js
---
.../Mask Sensitive Data in Descript/MaskData.js | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
index 8b13789179..8ff14921b1 100644
--- a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
+++ b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
@@ -1 +1,9 @@
+(function executeRule(current, previous /*null when async*/) {
+ var desc = current.description + "";
+ var ccRegex = /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/g;
+ if (ccRegex.test(desc)) {
+ current.description = desc.replace(ccRegex, "****-****-****-****");
+ gs.addInfoMessage("Sensitive data was masked automatically.");
+ }
+})(current, previous);
From 5331f0c0eba71fd75e49a2e7a29b5f58510bd808 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:52:44 +0530
Subject: [PATCH 08/17] Update readme.md
---
.../Business Rules/Mask Sensitive Data in Descript/readme.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
index 71a0f2c2a0..ca7980d192 100644
--- a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
+++ b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
@@ -1 +1,5 @@
Automatically replaces sensitive patterns (like credit card numbers) with masked text
+
+
+maked details
+
From cf9decf8acd63a8dbd47d6a173d206667432e38b Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:53:58 +0530
Subject: [PATCH 09/17] Update MaskData.js
---
.../MaskData.js | 50 +++++++++++++++++--
1 file changed, 45 insertions(+), 5 deletions(-)
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
index 8ff14921b1..8a033efad5 100644
--- a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
+++ b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
@@ -1,9 +1,49 @@
(function executeRule(current, previous /*null when async*/) {
- var desc = current.description + "";
- var ccRegex = /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/g;
- if (ccRegex.test(desc)) {
- current.description = desc.replace(ccRegex, "****-****-****-****");
- gs.addInfoMessage("Sensitive data was masked automatically.");
+
+
+ // Only run if description has a value
+ if (current.description) {
+ var desc = current.description.toString();
+
+
+ // Regex patterns for sensitive data
+ var ccRegex = /\b\d{13,16}\b/g; // 13–16 continuous digits
+ var ccSpaced = /\b(\d{4}[- ]?){3}\d{4}\b/g; // 4-4-4-4 with spaces/dashes
+ var ssnRegex = /\b\d{3}-\d{2}-\d{4}\b/g; // US SSN
+ var phoneRegex = /(\+?\d{1,2}[- ]?)?\(?\d{3}\)?[- ]?\d{3}[- ]?\d{4}/g; // phone
+
+ var masked = desc;
+
+ // Apply masking with messages
+ if (ccRegex.test(desc)) {
+ gs.addInfoMessage("Credit card pattern found → masking");
+ masked = masked.replace(ccRegex, "****-****-****-****");
+ }
+
+ if (ccSpaced.test(desc)) {
+ gs.addInfoMessage("Spaced/dashed credit card pattern found → masking");
+ masked = masked.replace(ccSpaced, "****-****-****-****");
+ }
+
+ if (ssnRegex.test(desc)) {
+ gs.addInfoMessage("SSN pattern found → masking");
+ masked = masked.replace(ssnRegex, "***-**-****");
+ }
+
+ if (phoneRegex.test(desc)) {
+ gs.addInfoMessage("Phone number pattern found → masking");
+ masked = masked.replace(phoneRegex, "**********");
+ }
+
+ // If changes were made, update the description
+ if (masked !== desc) {
+ current.description = masked;
+ gs.addInfoMessage("Final masked description: " + masked);
+ gs.log("Masking rule triggered on record: " + current.number, "MaskingRule");
+ } else {
+ gs.addInfoMessage("No sensitive data detected, nothing masked.");
+ }
}
+
})(current, previous);
From 3e53529b3afc181fade41c1172312921b4201265 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 14:59:07 +0530
Subject: [PATCH 10/17] Create readme.md
Mask Sensitive Data in Description Field
---
.../Mask Sensitive Data in Description Field/readme.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 Server-Side Components/Business Rules/Mask Sensitive Data in Description Field/readme.md
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Description Field/readme.md b/Server-Side Components/Business Rules/Mask Sensitive Data in Description Field/readme.md
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/Server-Side Components/Business Rules/Mask Sensitive Data in Description Field/readme.md
@@ -0,0 +1 @@
+
From 6b9fff3cc2b3b4d70d399ed00fc87756231d244e Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 15:02:23 +0530
Subject: [PATCH 11/17] Create MaskSensitiviteData.js
---
.../MaskSensitiviteData.js | 49 +++++++++++++++++++
1 file changed, 49 insertions(+)
create mode 100644 Server-Side Components/Business Rules/Mask Sensitive Data in Description Field/MaskSensitiviteData.js
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Description Field/MaskSensitiviteData.js b/Server-Side Components/Business Rules/Mask Sensitive Data in Description Field/MaskSensitiviteData.js
new file mode 100644
index 0000000000..8a033efad5
--- /dev/null
+++ b/Server-Side Components/Business Rules/Mask Sensitive Data in Description Field/MaskSensitiviteData.js
@@ -0,0 +1,49 @@
+(function executeRule(current, previous /*null when async*/) {
+
+
+
+ // Only run if description has a value
+ if (current.description) {
+ var desc = current.description.toString();
+
+
+ // Regex patterns for sensitive data
+ var ccRegex = /\b\d{13,16}\b/g; // 13–16 continuous digits
+ var ccSpaced = /\b(\d{4}[- ]?){3}\d{4}\b/g; // 4-4-4-4 with spaces/dashes
+ var ssnRegex = /\b\d{3}-\d{2}-\d{4}\b/g; // US SSN
+ var phoneRegex = /(\+?\d{1,2}[- ]?)?\(?\d{3}\)?[- ]?\d{3}[- ]?\d{4}/g; // phone
+
+ var masked = desc;
+
+ // Apply masking with messages
+ if (ccRegex.test(desc)) {
+ gs.addInfoMessage("Credit card pattern found → masking");
+ masked = masked.replace(ccRegex, "****-****-****-****");
+ }
+
+ if (ccSpaced.test(desc)) {
+ gs.addInfoMessage("Spaced/dashed credit card pattern found → masking");
+ masked = masked.replace(ccSpaced, "****-****-****-****");
+ }
+
+ if (ssnRegex.test(desc)) {
+ gs.addInfoMessage("SSN pattern found → masking");
+ masked = masked.replace(ssnRegex, "***-**-****");
+ }
+
+ if (phoneRegex.test(desc)) {
+ gs.addInfoMessage("Phone number pattern found → masking");
+ masked = masked.replace(phoneRegex, "**********");
+ }
+
+ // If changes were made, update the description
+ if (masked !== desc) {
+ current.description = masked;
+ gs.addInfoMessage("Final masked description: " + masked);
+ gs.log("Masking rule triggered on record: " + current.number, "MaskingRule");
+ } else {
+ gs.addInfoMessage("No sensitive data detected, nothing masked.");
+ }
+ }
+
+})(current, previous);
From 2a21ae0ce363e254db5b9253288bb96a4886de57 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 15:28:37 +0530
Subject: [PATCH 12/17] Delete Server-Side Components/Business Rules/Mask
Sensitive Data in Descript directory
---
.../MaskData.js | 49 -------------------
.../Mask Sensitive Data in Descript/readme.md | 5 --
2 files changed, 54 deletions(-)
delete mode 100644 Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
delete mode 100644 Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
deleted file mode 100644
index 8a033efad5..0000000000
--- a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/MaskData.js
+++ /dev/null
@@ -1,49 +0,0 @@
-(function executeRule(current, previous /*null when async*/) {
-
-
-
- // Only run if description has a value
- if (current.description) {
- var desc = current.description.toString();
-
-
- // Regex patterns for sensitive data
- var ccRegex = /\b\d{13,16}\b/g; // 13–16 continuous digits
- var ccSpaced = /\b(\d{4}[- ]?){3}\d{4}\b/g; // 4-4-4-4 with spaces/dashes
- var ssnRegex = /\b\d{3}-\d{2}-\d{4}\b/g; // US SSN
- var phoneRegex = /(\+?\d{1,2}[- ]?)?\(?\d{3}\)?[- ]?\d{3}[- ]?\d{4}/g; // phone
-
- var masked = desc;
-
- // Apply masking with messages
- if (ccRegex.test(desc)) {
- gs.addInfoMessage("Credit card pattern found → masking");
- masked = masked.replace(ccRegex, "****-****-****-****");
- }
-
- if (ccSpaced.test(desc)) {
- gs.addInfoMessage("Spaced/dashed credit card pattern found → masking");
- masked = masked.replace(ccSpaced, "****-****-****-****");
- }
-
- if (ssnRegex.test(desc)) {
- gs.addInfoMessage("SSN pattern found → masking");
- masked = masked.replace(ssnRegex, "***-**-****");
- }
-
- if (phoneRegex.test(desc)) {
- gs.addInfoMessage("Phone number pattern found → masking");
- masked = masked.replace(phoneRegex, "**********");
- }
-
- // If changes were made, update the description
- if (masked !== desc) {
- current.description = masked;
- gs.addInfoMessage("Final masked description: " + masked);
- gs.log("Masking rule triggered on record: " + current.number, "MaskingRule");
- } else {
- gs.addInfoMessage("No sensitive data detected, nothing masked.");
- }
- }
-
-})(current, previous);
diff --git a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md b/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
deleted file mode 100644
index ca7980d192..0000000000
--- a/Server-Side Components/Business Rules/Mask Sensitive Data in Descript/readme.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Automatically replaces sensitive patterns (like credit card numbers) with masked text
-
-
-maked details
-
From e9c40cab21d5a3c97d37daa3d036f2ff8e543a16 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 07:23:29 -0700
Subject: [PATCH 13/17] Create Readme.md
Currency conversion
---
.../Business Rules/Currency conversion to USD/Readme.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 Server-Side Components/Business Rules/Currency conversion to USD/Readme.md
diff --git a/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md b/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md
@@ -0,0 +1 @@
+
From d3aa8a7f167d6cfb03e448aa5b5ae2c8031a6e23 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 07:34:43 -0700
Subject: [PATCH 14/17] Update Readme.md
---
.../Business Rules/Currency conversion to USD/Readme.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md b/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md
index 8b13789179..2779b802b9 100644
--- a/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md
+++ b/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md
@@ -1 +1 @@
-
+Currency converion from other region currecy code to USD value
From 7984aa97588f585bf42afd7732ec8f0254f2af6d Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 07:52:12 -0700
Subject: [PATCH 15/17] Update Readme.md
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This script automates the conversion of an annual budget value from a selected currency to USD using exchange rates stored in the fx_rate table. It performs the following steps:
Extracts the currency code from the budget_currency field.
Validates the input amount and currency.
Checks if the currency is already USD; if so, it directly stores the amount.
Queries the fx_currency table to confirm the currency exists.
Retrieves the most recent exchange rate for both the selected currency and USD.
Calculates the converted amount using the formula:
USD Amount = (Original Amount / Source Rate) × USD Rate
Stores the result in the u_annual_budget_usd field.
Includes error handling for missing or invalid data.
---
.../Currency conversion to USD/Readme.md | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md b/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md
index 2779b802b9..91e0c69819 100644
--- a/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md
+++ b/Server-Side Components/Business Rules/Currency conversion to USD/Readme.md
@@ -1 +1,11 @@
-Currency converion from other region currecy code to USD value
+This script automates the conversion of an annual budget value from a selected currency to USD using exchange rates stored in the fx_rate table. It performs the following steps:
+
+Extracts the currency code from the budget_currency field.
+Validates the input amount and currency.
+Checks if the currency is already USD; if so, it directly stores the amount.
+Queries the fx_currency table to confirm the currency exists.
+Retrieves the most recent exchange rate for both the selected currency and USD.
+Calculates the converted amount using the formula:
+USD Amount = (Original Amount / Source Rate) × USD Rate
+Stores the result in the u_annual_budget_usd field.
+Includes error handling for missing or invalid data.
From abaca15a0e3c695f71db3e35ba5952526c60bfe3 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 07:53:18 -0700
Subject: [PATCH 16/17] Create currency conversion.js
---
.../Currency conversion to USD/currency conversion.js | 1 +
1 file changed, 1 insertion(+)
create mode 100644 Server-Side Components/Business Rules/Currency conversion to USD/currency conversion.js
diff --git a/Server-Side Components/Business Rules/Currency conversion to USD/currency conversion.js b/Server-Side Components/Business Rules/Currency conversion to USD/currency conversion.js
new file mode 100644
index 0000000000..8b13789179
--- /dev/null
+++ b/Server-Side Components/Business Rules/Currency conversion to USD/currency conversion.js
@@ -0,0 +1 @@
+
From af439e8597296d8d84e2ffb0a86903b5138c3134 Mon Sep 17 00:00:00 2001
From: vijaykumar7177 <68215714+vijaykumar7177@users.noreply.github.com>
Date: Fri, 17 Oct 2025 07:53:51 -0700
Subject: [PATCH 17/17] Update currency conversion.js
---
.../currency conversion.js | 71 +++++++++++++++++++
1 file changed, 71 insertions(+)
diff --git a/Server-Side Components/Business Rules/Currency conversion to USD/currency conversion.js b/Server-Side Components/Business Rules/Currency conversion to USD/currency conversion.js
index 8b13789179..0504a6ab80 100644
--- a/Server-Side Components/Business Rules/Currency conversion to USD/currency conversion.js
+++ b/Server-Side Components/Business Rules/Currency conversion to USD/currency conversion.js
@@ -1 +1,72 @@
+(function executeRule(current, previous /*null when async*/) {
+ // Extract the first 3 characters of the budget currency code (e.g., "INR", "EUR")
+ var currencyCode = current.budget_currency ? current.budget_currency.toString().substring(0, 3) : '';
+
+ // Convert the annual budget value to a float
+ var amount = parseFloat(current.annual_budget);
+
+ // Validate input: If currency code is missing or amount is not a valid number, clear the USD field and exit
+ if (!currencyCode || isNaN(amount)) {
+ current.u_annual_budget_usd = '';
+ return;
+ }
+
+ // If the currency is already USD, no conversion needed — store the original amount
+ if (currencyCode === 'USD') {
+ current.u_annual_budget_usd = amount;
+ return;
+ }
+
+ // Check if the currency exists in the fx_currency table
+ var currencyGR = new GlideRecord('fx_currency');
+ currencyGR.addQuery('code', currencyCode);
+ currencyGR.query();
+
+ // If currency is not found, clear the USD field and exit
+ if (!currencyGR.next()) {
+ current.u_annual_budget_usd = '';
+ return;
+ }
+
+ // Get the latest exchange rate for the selected currency from fx_rate table
+ var fxGR = new GlideRecord('fx_rate');
+ fxGR.addQuery('currency.code', currencyCode);
+ fxGR.orderByDesc('sys_updated_on'); // Sort by most recent update
+ fxGR.setLimit(1); // Limit to the latest record
+ fxGR.query();
+
+ // If no exchange rate found, clear the USD field and exit
+ if (!fxGR.next()) {
+ current.u_annual_budget_usd = '';
+ return;
+ }
+
+ var rate = parseFloat(fxGR.getValue('rate')); // Exchange rate for selected currency
+
+ // Get the latest exchange rate for USD from fx_rate table
+ var fxGR1 = new GlideRecord('fx_rate');
+ fxGR1.addQuery('currency.code', 'USD');
+ fxGR1.orderByDesc('sys_updated_on'); // Sort by most recent update
+ fxGR1.setLimit(1); // Limit to the latest record
+ fxGR1.query();
+
+ // If no USD exchange rate found, clear the USD field and exit
+ if (!fxGR1.next()) {
+ current.u_annual_budget_usd = '';
+ return;
+ }
+
+ var usdRate = parseFloat(fxGR1.getValue('rate')); // USD base rate
+
+ // Perform conversion only if both rates are valid and non-zero
+ if (!isNaN(rate) && !isNaN(usdRate) && rate !== 0) {
+ var convertedAmount = (amount / rate) * usdRate; // Convert to USD
+ current.u_annual_budget_usd = convertedAmount; // Store the converted value
+ } else {
+ gs.info("Invalid exchange rate values");
+ current.u_annual_budget_usd = '';
+ }
+
+})(current, previous);
+``