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

Offical Documentation

Official Docs: