Name
sn_install_base.InstallBaseRelatedPartyValidationsSNC
Description
No description available
Script
var InstallBaseRelatedPartyValidationsSNC = Class.create();
InstallBaseRelatedPartyValidationsSNC.prototype = {
initialize: function() {
},
validate: function(current) {
var msg = "";
var tableName = current.type.applies_to;
var tabName = new GlideTableHierarchy(tableName);
if (current.type.nil() || gs.nil(tabName) || tabName.getRoot() != global.CSMBaseConstants.INSTALL_BASE_ITEM ) {
current.setAbortAction(true);
msg = 'Please select the type of related party to be created.';
gs.addErrorMessage(gs.getMessage(msg));
return;
}
var account = !gs.nil(current.account);
var contact = !gs.nil(current.contact);
var consumer = !gs.nil(current.consumer);
var serviceOrg = !gs.nil(current.service_organization);
var user = !gs.nil(current.user);
entityType = current.type.entity_type;
if(entityType == "customer_account") {
if( !account || contact || consumer || serviceOrg || user)
{
current.setAbortAction(true);
msg = 'Please select only Account with Authorized Account';
gs.addErrorMessage(gs.getMessage(msg));
return;
}
}
else if(entityType == "csm_consumer") {
if( account || contact || !consumer || user || serviceOrg) {
current.setAbortAction(true);
msg = 'Please select only Consumer with Authorized Consumer';
gs.addErrorMessage(gs.getMessage(msg));
return;
}
}
else if(entityType == "customer_contact") {
if( !account || !contact || consumer || user || serviceOrg) {
current.setAbortAction(true);
msg = 'Please select Account, Contact with Authorized Contact';
gs.addErrorMessage(gs.getMessage(msg));
return;
}
if (!this.validateContact(current)) {
current.setAbortAction(true);
return;
}
}
else if(current.type.name == "Authorized Member" && entityType == "sys_user") {
if( account || contact || consumer || !user || !serviceOrg) {
current.setAbortAction(true);
msg = 'Please select SO, Contact with Authorized Member';
gs.addErrorMessage(gs.getMessage(msg));
return;
}
if(!this.validateMember(current))
{
current.setAbortAction(true);
return;
}
}
else if(entityType == "sys_user") {
if( account || contact || consumer || !user || serviceOrg) {
current.setAbortAction(true);
msg = 'Please select only Contact attribute with Authorized Contributor';
gs.addErrorMessage(gs.getMessage(msg));
return;
}
}
else if(entityType == "sn_customer_service_organization") {
if( account || contact || consumer || user || !serviceOrg) {
current.setAbortAction(true);
msg = 'Please select only SO attribute with Authorized SO';
gs.addErrorMessage(gs.getMessage(msg));
return;
}
}
var isValid = true;
if(!this.validateResponsibility(current, entityType))
{
current.setAbortAction(true);
return;
}
},
/*
* validate related party glide record.
*/
isValidGlideRecord: function(gr) {
return (gr && !gs.nil(gr) && gr instanceof GlideRecord);
},
/*
* Contact validations:
*
* 1. Check whether account exists
* 2. Check whether contact is valid for the account.
*
* @param rpGr - install base item glide record
* @returns true - if the validation is succeeded.
* false - if the validation is failed.
*/
validateContact: function(rpGr) {
if (!this.isValidGlideRecord(rpGr)) {
gs.addErrorMessage("Invalid related party glide record.");
return false;
}
var isValid = true;
if (gs.nil(rpGr.account)) {
gs.addErrorMessage(gs.getMessage('Contact cannot exist without an account for the {0} related party.', rpGr.getDisplayValue()));
isValid = false;
}
//Check the contact's account is matching with the account.
else if (rpGr.contact.account != rpGr.account) {
gs.addErrorMessage(gs.getMessage('{0} contact is not associated with the {1} account for the {2} related party.', [rpGr.contact.getDisplayValue(), rpGr.account.getDisplayValue(), rpGr.getDisplayValue()]));
isValid = false;
}
return isValid;
},
/*
* Responsibility validations:
*
* 1. Check whether appropriate responsibility is passed
*
* @param rpGr - related party glide record
* @returns true - if the validation is succeeded.
* false - if the validation is failed.
*/
validateResponsibility: function(rpGr, entityType) {
if (!this.isValidGlideRecord(rpGr)) {
gs.addErrorMessage("Invalid related party glide record.");
return false;
}
var isValid = true;
if(entityType == "customer_account"){
if(rpGr.type.name == "Authorized Account") {
if(gs.nil(rpGr.responsibility) || rpGr.responsibility.type != entityType){
isValid = false;
}
} else if(!gs.nil(rpGr.responsibility) && rpGr.responsibility.type != entityType) { // if it is Listed Account
isValid = false;
}
if(!isValid) {
gs.addErrorMessage(gs.getMessage('{0} responsibility is not associated with the {1} type for the related party.', [rpGr.responsibility.getDisplayValue(), rpGr.type.getDisplayValue()]));
}
}
else if(!gs.nil(rpGr.responsibility.type) && rpGr.responsibility.type != entityType) {
gs.addErrorMessage(gs.getMessage('{0} responsibility is not associated with the {1} type for the {2} related party.', [rpGr.responsibility.getDisplayValue(), rpGr.type.getDisplayValue(), rpGr.getDisplayValue()]));
isValid = false;
}
return isValid;
},
/*
* Member validations:
*
* 1. Check whether user is valid for the SO.
*
* @param rpGr - related party glide record
* @returns true - if the validation is succeeded.
* false - if the validation is failed.
*/
validateMember: function(rpGr) {
if (!this.isValidGlideRecord(rpGr)) {
gs.addErrorMessage("Invalid related party glide record.");
return false;
}
var isValid = true;
if (gs.nil(rpGr.user)) {
gs.addErrorMessage(gs.getMessage('User cannot exist without an SO for the related party.'));
isValid = false;
}
else {
var memberGr = new GlideRecord(InstallBaseItemAPIConstants.SO_MEMBER_TABLE);
memberGr.addQuery("user", rpGr.user);
memberGr.addQuery("service_organization", rpGr.service_organization);
memberGr.query();
if(!memberGr.hasNext()) {
gs.addErrorMessage(gs.getMessage('{0} user is not associated with the {1} SO for the related party.', [rpGr.contact.getDisplayValue(), rpGr.account.getDisplayValue()]));
isValid = false;
}
}
return isValid;
},
type: 'InstallBaseRelatedPartyValidationsSNC'
};
Sys ID
45005496cb79211050501ebfe8076dd1