From a93e82a37bfee43c96877191fa312c0384a94267 Mon Sep 17 00:00:00 2001 From: d-sharmagit Date: Fri, 24 Oct 2025 09:11:51 +0530 Subject: [PATCH 1/4] Create pending Approval30days.js script to identify and cancel RITM pending for approval for 30 days --- .../Scheduled Jobs/pending Approval30days.js | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Server-Side Components/Scheduled Jobs/pending Approval30days.js diff --git a/Server-Side Components/Scheduled Jobs/pending Approval30days.js b/Server-Side Components/Scheduled Jobs/pending Approval30days.js new file mode 100644 index 0000000000..f769e1029f --- /dev/null +++ b/Server-Side Components/Scheduled Jobs/pending Approval30days.js @@ -0,0 +1,40 @@ +/* +Scheduled Script Execution: Auto-cancel RITM if group manager approval pending after 30 days + +This script: +- Finds RITM records older than 30 days +- Checks if any group manager approvals are still pending (state='requested') +- If so, cancels the RITM (sets state to 'Cancelled') +Usage: +- Schedule this script to run daily. +*/ + +// Calculate date 30 days ago +var thirtyDaysAgo = new GlideDateTime(); +thirtyDaysAgo.addDaysUTC(-30); + +// Query RITMs older than 30 days and not closed/cancelled already +var ritmGR = new GlideRecord('sc_req_item'); +ritmGR.addQuery('sys_created_on', '<=', thirtyDaysAgo); +ritmGR.addEncodedQuery('stateIN1,2,112^cat_item=a24b1e113bc21e1050109c9c24e45a51'); +ritmGR.query(); + +while (ritmGR.next()) { + // Query approvals for this RITM from group managers - adjust condition accordingly + var approvalGR = new GlideRecord('sysapproval_approver'); + approvalGR.addQuery('sysapproval', ritmGR.sys_id); // approvals linked to this RITM + approvalGR.addQuery('state', 'requested'); // pending approvals + approvalGR.query(); + + if (approvalGR.hasNext()) { + // Group manager approvals pending after 30 days => Cancel RITM + + ritmGR.state = 8; // Closed Cancelled + ritmGR.assignment_group = ''; //group ABC + ritmGR.work_notes = 'Auto-cancelled due to no group manager approval within 30 days.'; + ritmGR.update(); + + } +} + + From 84bffa88e1b8ccb865bf7a397f87777bc1a7984b Mon Sep 17 00:00:00 2001 From: d-sharmagit Date: Fri, 24 Oct 2025 09:13:39 +0530 Subject: [PATCH 2/4] Create readme.md --- .../Scheduled Jobs/CancelApproval/readme.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Server-Side Components/Scheduled Jobs/CancelApproval/readme.md diff --git a/Server-Side Components/Scheduled Jobs/CancelApproval/readme.md b/Server-Side Components/Scheduled Jobs/CancelApproval/readme.md new file mode 100644 index 0000000000..690d2c9289 --- /dev/null +++ b/Server-Side Components/Scheduled Jobs/CancelApproval/readme.md @@ -0,0 +1,8 @@ +Scheduled Script Execution: Auto-cancel RITM if group manager approval pending after 30 days + +This script: +- Finds RITM records older than 30 days +- Checks if any group manager approvals are still pending (state='requested') +- If so, cancels the RITM (sets state to 'Cancelled') +Usage: +- Schedule this script to run daily. From 2e75462e1a364013b19ea6df049c1f927483749d Mon Sep 17 00:00:00 2001 From: d-sharmagit Date: Fri, 24 Oct 2025 09:14:35 +0530 Subject: [PATCH 3/4] Create script.js --- .../Scheduled Jobs/CancelApproval/script.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Server-Side Components/Scheduled Jobs/CancelApproval/script.js diff --git a/Server-Side Components/Scheduled Jobs/CancelApproval/script.js b/Server-Side Components/Scheduled Jobs/CancelApproval/script.js new file mode 100644 index 0000000000..68b5189c9a --- /dev/null +++ b/Server-Side Components/Scheduled Jobs/CancelApproval/script.js @@ -0,0 +1,38 @@ +/* +Scheduled Script Execution: Auto-cancel RITM if group manager approval pending after 30 days + +This script: +- Finds RITM records older than 30 days +- Checks if any group manager approvals are still pending (state='requested') +- If so, cancels the RITM (sets state to 'Cancelled') +Usage: +- Schedule this script to run daily. +*/ + +// Calculate date 30 days ago +var thirtyDaysAgo = new GlideDateTime(); +thirtyDaysAgo.addDaysUTC(-30); + +// Query RITMs older than 30 days and not closed/cancelled already +var ritmGR = new GlideRecord('sc_req_item'); +ritmGR.addQuery('sys_created_on', '<=', thirtyDaysAgo); +ritmGR.addEncodedQuery('stateIN1,2,112^cat_item=a24b1e113bc21e1050109c9c24e45a51'); +ritmGR.query(); + +while (ritmGR.next()) { + // Query approvals for this RITM from group managers - adjust condition accordingly + var approvalGR = new GlideRecord('sysapproval_approver'); + approvalGR.addQuery('sysapproval', ritmGR.sys_id); // approvals linked to this RITM + approvalGR.addQuery('state', 'requested'); // pending approvals + approvalGR.query(); + + if (approvalGR.hasNext()) { + // Group manager approvals pending after 30 days => Cancel RITM + + ritmGR.state = 8; // Closed Cancelled + ritmGR.assignment_group = ''; //group ABC + ritmGR.work_notes = 'Auto-cancelled due to no group manager approval within 30 days.'; + ritmGR.update(); + + } +} From 14025bfd9ac71b42df3dc22c7e471fec9168a0e6 Mon Sep 17 00:00:00 2001 From: d-sharmagit Date: Fri, 24 Oct 2025 09:15:06 +0530 Subject: [PATCH 4/4] Delete Server-Side Components/Scheduled Jobs/pending Approval30days.js --- .../Scheduled Jobs/pending Approval30days.js | 40 ------------------- 1 file changed, 40 deletions(-) delete mode 100644 Server-Side Components/Scheduled Jobs/pending Approval30days.js diff --git a/Server-Side Components/Scheduled Jobs/pending Approval30days.js b/Server-Side Components/Scheduled Jobs/pending Approval30days.js deleted file mode 100644 index f769e1029f..0000000000 --- a/Server-Side Components/Scheduled Jobs/pending Approval30days.js +++ /dev/null @@ -1,40 +0,0 @@ -/* -Scheduled Script Execution: Auto-cancel RITM if group manager approval pending after 30 days - -This script: -- Finds RITM records older than 30 days -- Checks if any group manager approvals are still pending (state='requested') -- If so, cancels the RITM (sets state to 'Cancelled') -Usage: -- Schedule this script to run daily. -*/ - -// Calculate date 30 days ago -var thirtyDaysAgo = new GlideDateTime(); -thirtyDaysAgo.addDaysUTC(-30); - -// Query RITMs older than 30 days and not closed/cancelled already -var ritmGR = new GlideRecord('sc_req_item'); -ritmGR.addQuery('sys_created_on', '<=', thirtyDaysAgo); -ritmGR.addEncodedQuery('stateIN1,2,112^cat_item=a24b1e113bc21e1050109c9c24e45a51'); -ritmGR.query(); - -while (ritmGR.next()) { - // Query approvals for this RITM from group managers - adjust condition accordingly - var approvalGR = new GlideRecord('sysapproval_approver'); - approvalGR.addQuery('sysapproval', ritmGR.sys_id); // approvals linked to this RITM - approvalGR.addQuery('state', 'requested'); // pending approvals - approvalGR.query(); - - if (approvalGR.hasNext()) { - // Group manager approvals pending after 30 days => Cancel RITM - - ritmGR.state = 8; // Closed Cancelled - ritmGR.assignment_group = ''; //group ABC - ritmGR.work_notes = 'Auto-cancelled due to no group manager approval within 30 days.'; - ritmGR.update(); - - } -} - -