UI Actions
Update the βListβ type field from SOP Tasks reviewers(Reference Field) by clicking on Approve
var sopName = current.sys_id;
var ReviewersList =[];
var arrayUtil = new global.ArrayUtil();
var sopReviewers = new GlideRecord("x_idfcf_idfc_valid_sop_task");
sopReviewers.addEncodedQuery("state=completed^sop=" + sopName);
sopReviewers.query();
while (sopReviewers.next()) {
ReviewersList.push(sopReviewers.reviewer.toString());
}
var uniqueReviewersList = arrayUtil.unique(ReviewersList);
current.u_review_pending = uniqueReviewersList.toString();
current.update();
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
When user click on βAdditional Reviewβ then we have check whether any existing task is created for the additional task what we are going to create
Ex: if βLegalβ checkbox is true and Task is already created then we shouldnβt allow user to create a task and display the error message
Condition: current.state=="review"&¤t.u_substate=='14' && current.u_track=='ORM'&& current.canWrite() && new sn_compliance.ORM_SOPServerUtility().requestReviewButtonVisibility(current.sys_id);
var aml = current.getValue('u_aml_kyc_compliance_review');
var legal = current.getValue('u_legal_review');
var showError = false;
var errorMsg = '';
var msg = '';
var flag = false;
if (aml == true || legal == true) {
if (aml == true) {
flag = checkSopTask('aml_kyc_compliance_review');
if (flag == true) {
createSopTask('aml_kyc_compliance_review', 'AML KYC Compliance Review', 'AML KYC Compliance', '4');
msg = "AML KYC Compliance Review task has been created .";
} else {
msg = ' There is already AML KYC Compliance Review Ongoing task .';
}
}
if (legal == true) {
flag = checkSopTask('legel_review');
if (flag == true) {
createSopTask('legel_review', 'Legel Review', 'Legal', '3');
msg = msg + " " + "Legel Review Task been created ";
} else {
msg = msg + '' + ' There is already Legel Review Ongoing task ';
}
}
gs.addInfoMessage(msg);
} else {
gs.addInfoMessage('Please select atleast one task');
}
action.setRedirectURL(current);
function checkSopTask(taskType) {
var grSopTask = new GlideRecord("x_idfcf_idfc_valid_sop_task");
grSopTask.addEncodedQuery('sop=' + current.getValue('sys_id') + '^task_type=' + taskType + '^state!=cancelled^approved=false');
grSopTask.query();
if (grSopTask.next()) {
return false;
} else {
return true;
}
}
function createSopTask(taskType, shortDes, groupName, subState) {
var sopTask1 = new GlideRecord('x_idfcf_idfc_valid_sop_task');
sopTask1.initialize();
sopTask1.state = 'review';
sopTask1.task_type = taskType;
sopTask1.sop = current.getValue('sys_id');
sopTask1.short_description = shortDes + ' ' + 'for SOP' + ' ' + current.name;
sopTask1.reviewer_group = getGroups(groupName);
sopTask1.substate = subState;
sopTask1.insert();
}
function getGroups(groupName) {
var grGroup = new GlideRecord("sys_user_group");
grGroup.addQuery("name", groupName);
grGroup.query();
if (grGroup.next()) {
return grGroup.sys_id.toString();
}
}
current.update();
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Create a Add-hoc task by bring the dialog window (form from another table) (Current Table SOP)
function createSopTask() {
var sopTaskSysID = g_form.getUniqueValue();
var dialog = new GlideDialogForm(getMessage('Create an Ad-Hoc Task'), 'x_idfcf_idfc_valid_sop_task'); //Provide dialog title and table name
dialog.setSysID(-1); //Pass in sys_id to edit existing record, -1 to create new record
dialog.addParm('sysparm_view','orm_popup'); //Specify a form view
dialog.addParm('sysparm_form_only', 'true'); //Add or remove related lists
dialog.setX(100);
dialog.setY(50);
dialog.setDialogSize('900', '600');
dialog.setLoadCallback(function(iframeDoc) {
var dialogFrame = 'defaultView' in iframeDoc ? iframeDoc.defaultView : iframeDoc.parentWindow;
dialogFrame.g_form.setValue('sop', sopTaskSysID);
dialogFrame.g_form.setValue('state', 'review');
dialogFrame.g_form.setValue('task_type', 'ad_hoc_review');
var short_desc = g_form.getValue('name');
dialogFrame.g_form.setValue('short_description', "Ad-hoc Review Task for:" + " " + short_desc);
dialogFrame.g_form.setValue('aging', 0);
dialogFrame = null;
});
dialog.render(); //Open the dialog
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
When click on βRequest Reviewβ check whether attachment is updated on SOP form and post that based on checkbox create the task from SOP Task table
var compliance = current.u_compliance_review;
var legal = current.u_legal_review;
var aml = current.u_aml_kyc_compliance_review;
var checkAttachment = new sn_compliance.ORM_SOPServerUtility().sopAttachmentValidation(current.sys_id);
if (checkAttachment == true) {
createSopTask('orm_review', 'ORM Review', 'ORMD', '1');
createSopTask('compliance_review', 'Compliance Review', 'Compliance', '2');
if (legal == true) {
createSopTask('legel_review', 'Legel Review', 'Legal', '3');
}
if (aml == true) {
createSopTask('aml_kyc_compliance_review', 'AML KYC Compliance Review', 'AML KYC Compliance', '4');
}
gs.addInfoMessage("SOP Tasks have been created");
current.state = 'review';
current.u_substate = 14;
current.update();
action.setRedirectURL(current);
} else {
gs.addErrorMessage('You need to add attachment to proceed further');
action.setRedirectURL(current);
}
function createSopTask(taskType, shortDes, groupName, subState) {
var sopTask1 = new GlideRecord('x_idfcf_idfc_valid_sop_task');
sopTask1.initialize();
sopTask1.state = 'review';
sopTask1.task_type = taskType;
sopTask1.sop = current.getValue('sys_id');
sopTask1.short_description = shortDes + ' ' + 'for SOP' + ' ' + current.name;
sopTask1.reviewer_group = getGroups(groupName);
sopTask1.substate = subState;
sopTask1.insert();
}
function getGroups(groupName) {
var grGroup = new GlideRecord("sys_user_group");
grGroup.addQuery("name", groupName);
grGroup.query();
if (grGroup.next()) {
return grGroup.sys_id.toString();
}
}
sopAttachmentValidation: function(sop_id) {
var _sopAttachment = new GlideRecord('u_attachment_links');
_sopAttachment.addEncodedQuery('u_source_number=' + sop_id);
_sopAttachment.query();
if (_sopAttachment.next()) {
return true;
} else {
return false;
}
},
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
When clicking on the reject button popup ui page should be displayed and given inputs should be passed to an additional comment field
function rejection() {
var dialog = new GlideModal("sn_compliance_orm_sop_reject_page", false, 500);
dialog.setTitle(new GwtMessage().getMessage("Rejection Reason"));
dialog.setPreference("comments_text", g_form.getValue("comments"));
dialog.setPreference("table_name", g_form.getTableName());
dialog.setPreference("sys_id", g_form.getUniqueValue());
dialog.render();
}
<g:ui_form>
<table width="100%">
<tr>
<td>
<g:ui_multiline_input_field name="dial_comments" id="dial_comments" label="${gs.getMessage('Rejection Reason')}" value="${JS,HTML:jvar_comments_text}" mandatory="true"> </g:ui_multiline_input_field>
</td> </tr>
<tr>
<td colspan="2">
<input type="hidden" id="jvar_table_name" name="jvar_table_name"/>
</td> </tr>
<tr>
<td colspan="2">
<input type="hidden" id="jvar_sys_id" name="jvar_sys_id"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" id="jvar_sys_id" name="jvar_sys_id"/>
</td>
</tr>
<tr id="dialog_buttons">
<td colspan="2" align="right">
<g:dialog_buttons_ok_cancel ok_text="${gs.getMessage('Ok')}" ok="return validateComments(true);" ok_style_class="btn btn-primary"
cancel_text="${gs.getMessage('Cancel')}" cancel_type="button" />
</td>
</tr>
</table>
</g:ui_form>
function validateComments(submit) {
var dialog = GlideModal.prototype.get("sn_compliance_orm_sop_reject_page");
var commentsElement = gel("dial_comments");
var comments = commentsElement.value;
comments = trim(comments);
if (comments == "" && submit) {
commentsElement.style.borderColor = "#c83c36";
return false;
} else {
commentsElement.style.borderColor = "none";
}
var table = gel("jvar_table_name");
table.value = dialog.getPreference('table_name');
var sysId = gel("jvar_sys_id");
sysId.value = dialog.getPreference('sys_id');
}
if (dial_comments) {
//gs.info("commentTest "+dial_comments);
var grrejection = new GlideRecord(jvar_table_name);
grrejection.get(jvar_sys_id);
grrejection.u_additional_comment = 'Rejection Reason By ' +gs.getUserName()+ ':' +dial_comments;
grrejection.state = 'draft';
grrejection.u_substate = 15 ;
grrejection.u_rejected_by = gs.getUserName();
var grSopTask = new GlideRecord('x_idfcf_idfc_valid_sop_task');
grSopTask.addQuery('sop', grrejection.sys_id.toString());
grSopTask.addEncodedQuery('approved=false');
grSopTask.query();
while (grSopTask.next()) {
grSopTask.state = 'cancelled';
grSopTask.additional_comment ='Rejection Reason By ' +gs.getUserName()+ ':'+dial_comments;
grSopTask.update();
}
grrejection.update();
}
response.sendRedirect(jvar_table_name + ".do?sys_id=" + jvar_sys_id);
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
When click on cancel button form should display the cancel reason dropdown field and later popup ui page should be displayed and given inputs should passed to additional comment field.
function mandatoryCheck() {
var txt = g_form.getValue("u_sop_cancel_reason");
if (txt == '' || txt == 'NULL') {
// g_form.setMandatory('u_sop_cancel_reason', true);
// g_form.getControl('u_sop_cancel_reason').focus();
alert("Please provide the reason to Cancel");
g_form.setVisible('u_sop_cancel_reason', true);
g_form.setMandatory('u_sop_cancel_reason', true);
return false;
} else {
// alert("Please provide the reason to Cancel" + g_form.getValue("u_sop_cancel_reason"));
var dialog = new GlideModal("sn_compliance_orm_sop_cancel", false, 500);
dialog.setTitle(new GwtMessage().getMessage("Cancellation Reason"));
dialog.setPreference("comments_text", g_form.getValue("comments"));
dialog.setPreference("sop_cancel_reason", g_form.getValue("u_sop_cancel_reason"));
dialog.setPreference("table_name", g_form.getTableName());
dialog.setPreference("sys_id", g_form.getUniqueValue());
dialog.render();
}
}
HTML:
<table width="100%">
<tr>
<td>
<g:ui_multiline_input_field name="dial_comments" id="dial_comments" label="${gs.getMessage('Reason for Cancellation')}" value="${JS,HTML:jvar_comments_text}" mandatory="true"> </g:ui_multiline_input_field>
</td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" id="jvar_table_name" name="jvar_table_name"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" id="jvar_sys_id" name="jvar_sys_id"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" id="jvar_sop_cancel_reason" name="jvar_sop_cancel_reason" />
</td>
</tr>
<tr id="dialog_buttons">
<td colspan="2" align="right">
<g:dialog_buttons_ok_cancel ok_text="${gs.getMessage('Ok')}" ok="return validateComments(true);" ok_style_class="btn btn-primary"
cancel_text="${gs.getMessage('Cancel')}" cancel_type="button" />
</td>
</tr>
</table>
</g:ui_form>
function validateComments(submit) {
var dialog = GlideModal.prototype.get("sn_compliance_orm_sop_cancel");
var commentsElement = gel("dial_comments");
var comments = commentsElement.value;
comments = trim(comments);
if (comments == "" && submit) {
commentsElement.style.borderColor = "#c83c36";
return false;
} else {
commentsElement.style.borderColor = "none";
}
var table = gel("jvar_table_name");
table.value = dialog.getPreference('table_name');
var sysId = gel("jvar_sys_id");
sysId.value = dialog.getPreference('sys_id');
// alert("sysID value" + sysId.value);
var _canc = gel("jvar_sop_cancel_reason");
_canc.value = dialog.getPreference('sop_cancel_reason');
}
Processing script:
if (dial_comments) {
var grCancel = new GlideRecord(jvar_table_name);
grCancel.get(jvar_sys_id);
grCancel.u_additional_comment = dial_comments;
grCancel.u_sop_cancel_reason = jvar_sop_cancel_reason;
// if (grCancel.state == "draft" && (grCancel.u_substate != '10')) {
// gs.addInfoMessage("For Substate is not SOP under Review & Missing SOP and State is draft");
// allCancel();
// } else if ((grCancel.state == "review" || grCancel.state == "awaiting_approval") && (grCancel.u_substate != '10')) {
// gs.addInfoMessage("For Substate is not SOP under Review and State is review & awaiting approval");
// allCancel();
// }
// // For Substate is Missing SOP and State is Draft
// else if (grCancel.state == "draft" && grCancel.u_substate == '9') {
// gs.addInfoMessage("For Substate is Missing SOP and State is Draft");
// allCancel();
// }
// When Substate is SOP under Review and State is Draft
if ((grCancel.state == "draft" || grCancel.state == "review" || grCancel.state == "awaiting_approval") && (grCancel.u_substate != '10')) {
gs.addInfoMessage("For Substate is Missing SOP and State is Draft");
allCancel();
} else if ((grCancel.state == "draft" && grCancel.u_substate == '10')) {
gs.addInfoMessage("When Substate is SOP under Review and State is Draft");
grCancel.state = 'published';
grCancel.u_substate = '';
}
grCancel.update();
}
function allCancel() {
var _SOPCancel = new GlideRecord(jvar_table_name);
_SOPCancel.addEncodedQuery('sys_id=' + grCancel.sys_id);
_SOPCancel.query();
if (_SOPCancel.next()) {
_SOPCancel.state = 'retired';
_SOPCancel.u_substate = 12;
_SOPCancel.update();
var _grtask = new GlideRecord('x_idfcf_idfc_valid_sop_task');
_grtask.addEncodedQuery('sop=' + grCancel.sys_id);
_grtask.query();
while (_grtask.next()) {
_grtask.state = 'cancelled';
_grtask.active = 'false';
_grtask.substate = 11;
_grtask.update();
}
}
}
response.sendRedirect(jvar_table_name + ".do?sys_id=" + jvar_sys_id);
Another example on processing script:
if (dial_comments) {
//gs.info("commentTest "+dial_comments);
var referBack = new GlideRecord(jvar_table_name);
referBack.get(jvar_sys_id);
referBack.u_additional_comment = dial_comments;
referBack.u_substate = '';
var pendingReviewer = referBack.u_orm_review + "," + referBack.u_compliance_reviewer + "," + referBack.u_legal_reviewer + "," + referBack.u_aml_kyc_compliance_reviewer;
referBack.u_review_pending = pendingReviewer;
referBack.u_rejected_by = gs.getUserName();
referBack.update();
}
response.sendRedirect(jvar_table_name + ".do?sys_id=" + jvar_sys_id);
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
The client wants to have a parallel approval for SOP
Accept: current.u_track=='ORM'&& new sn_compliance.ORM_SOPServerUtility().retireaccpt(current)
current.u_substate = '17';
} else if (current.u_substate == '17') {
var arrPendingApprovers = current.u_review_pending.split(",");
if (arrPendingApprovers.length == 1) {
setApprovals();
}
for (var i = 0; i < arrPendingApprovers.length; i++) {
if (arrPendingApprovers[i] == gs.getUserID()) {
arrPendingApprovers.splice(i, 1);
}
current.u_review_pending = arrPendingApprovers.toString();
}
}
function setApprovals() {
current.state = 'retired';
current.u_substate = '';
}
current.update();
action.setRedirectURL(current);
Script Include:
retireaccpt: function(current) {
if (current.state.toString() == 'published' && current.u_substate.toString() == '16' && (gs.hasRole("admin") || gs.getUser().isMemberOf('ORM Admin') || current.u_sop_dept_head.toString() == gs.getUserID())) {
return true;
} else if (current.state.toString() == 'published' && current.u_substate.toString() == '17' && current.u_review_pending.toString().indexOf(gs.getUserID()) >= 0) {
return true;
} else {
return false;
}
},
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Comments
Post a Comment