Name

sn_grc.ItemGenerationV2ConditionsBase

Description

No description available

Script

var ItemGenerationV2ConditionsBase = Class.create();
ItemGenerationV2ConditionsBase.prototype = {
  initialize: function(tableName) {
      if (tableName) {
          this.strategy = new ItemGenerationV2Utils().getStrategy(tableName);
      }
  },

  documentHasActiveContents: function(documentId) {
      if (gs.nil(this.strategy)) {
          return false;
      }

      return this.strategy.documentHasContents(documentId, true);
  },

  documentHasInactiveContents: function(documentId) {
      if (gs.nil(this.strategy)) {
          return false;
      }

      return this.strategy.documentHasContents(documentId, false);
  },

  documentHasContents: function(documentId) {
      if (gs.nil(this.strategy)) {
          return false;
      }

      return this.strategy.documentHasContents(documentId);
  },

  documentHasEntityTypeAssociation: function(documentId) {
      if (gs.nil(this.strategy)) {
          return false;
      }

      return this.strategy.documentHasEntityTypeAssociation(documentId);
  },

  contentShouldAssociateProfileTypes: function(entityTypeId, content) {
      if (gs.nil(this.strategy)) {
          return false;
      }

      return this.entityTypeHasActiveEntities(entityTypeId) && this.strategy.contentShouldAssociateProfileTypes(content);
  },

  contentShouldDissociateProfileTypes: function(entityTypeId, contentId) {
      // If entity type doesnt exist, meaning this action is caused by entity type deletion, skip item generation process
      var profileType = new GlideRecord('sn_grc_profile_type');
      if (!profileType.get(entityTypeId)) {
          return false;
      }

      var contentRecord = new GlideRecord('sn_grc_content');
      if (!contentRecord.get(contentId)) {
          return false;
      }

      return this.entityTypeHasEntities(entityTypeId);
  },

  documentShouldAssociateEntityTypes: function(entityTypeId, document) {
      if (gs.nil(this.strategy)) {
          return false;
      }

      return this.strategy.documentShouldAssociateProfileTypes(document);
  },

  documentShouldDissociateEntityTypes: function(entityTypeId, documentId) {
      // If entity type doesnt exist, meaning this action is caused by entity type deletion, skip item generation process
      var profileType = new GlideRecord('sn_grc_profile_type');
      if (!profileType.get(entityTypeId)) {
          return false;
      }

      // If document doesnt exist, meaning this action is caused by document deletion, skip item generation process
      var document = new GlideRecord('sn_grc_document');
      if (!document.get(documentId)) {
          return false;
      }

      return this.entityTypeHasEntities(entityTypeId);
  },

  entityTypeHasActiveContentAssociation: function(entityTypeId) {
      var util = new ItemGenerationV2Utils();
      // Get all the contents attached to the profile type
      var contentToEntityTypeTables = new GlideTableHierarchy('sn_grc_m2m_content_profile_type').getTableExtensions();
      for (var i = 0; i < contentToEntityTypeTables.length; i++) {
          var contentToEntityTypeTable = contentToEntityTypeTables[i];

          // Get contents
          var contentToProfileType = new GlideRecord(contentToEntityTypeTable);
          contentToProfileType.addQuery('sn_grc_profile_type', entityTypeId);
          contentToProfileType.addQuery('sn_grc_content.active', 'true');
          contentToProfileType.setLimit(1);
          contentToProfileType.query();

          if (contentToProfileType.hasNext()) {
              return true;
          }
      }

      return false;
  },

  entityTypeHasEntities: function(entityTypeId) {
      var entityToET = new GlideRecord('sn_grc_m2m_profile_profile_type');
      entityToET.addQuery('profile_type', entityTypeId);
      entityToET.setLimit(1);
      entityToET.query();

      return entityToET.hasNext();
  },

  entityTypeHasActiveEntities: function(entityTypeId) {
      var entityToET = new GlideRecord('sn_grc_m2m_profile_profile_type');
      entityToET.addQuery('profile_type', entityTypeId);
      entityToET.addQuery('profile.active', true);
      entityToET.setLimit(1);
      entityToET.query();

      return entityToET.hasNext();
  },

  entityTypeHasInactiveEntities: function(entityTypeId) {
      var entityToET = new GlideRecord('sn_grc_m2m_profile_profile_type');
      entityToET.addQuery('profile_type', entityTypeId);
      entityToET.addQuery('profile.active', false);
      entityToET.setLimit(1);
      entityToET.query();

      return entityToET.hasNext();
  },

  entityHasAssociatedItem: function(entityId) {
      var item = new GlideAggregate('sn_grc_item');
      item.addQuery('profile', entityId);
      item.addAggregate('COUNT');
      item.query();
      item.next();

      if (item.getAggregate('COUNT') > 0) return true;

      var itemEntityM2m = new GlideAggregate('sn_grc_m2m_item_entity');
      itemEntityM2m.addQuery('entity', entityId);
      itemEntityM2m.addAggregate('COUNT');
      itemEntityM2m.query();
      itemEntityM2m.next();

      return itemEntityM2m.getAggregate('COUNT') > 0;
  },

  entityTypeHasItemAssociation: function(entityTypeId, addItemActiveQuery) {
      var itemToEntityType = new GlideRecord('sn_grc_m2m_item_entity_type');
      itemToEntityType.addQuery('entity_type', entityTypeId);
      if (addItemActiveQuery)
          itemToEntityType.addQuery('item.active', true);
      itemToEntityType.setLimit(1);
      itemToEntityType.query();

      return itemToEntityType.hasNext();
  },

  hasEntityTypeSourceOnItemEntityAssociation: function(entityTypeId, isActive) {
      var itemToEntity = new GlideRecord('sn_grc_m2m_item_entity');
      itemToEntity.addQuery('source_entity_types', 'CONTAINS', entityTypeId);
      itemToEntity.addQuery('active', isActive);
      itemToEntity.setLimit(1);
      itemToEntity.query();

      return itemToEntity.hasNext();
  },

  canAssociateContentToEntity: function(content, profile) {
      return this.strategy.canAssociateContentToEntity(content, profile);
  },

  contentHasActiveDownStreamEntities: function(contentID) {
      return this.contentHasActiveAdditionalEntities(contentID) || this.contentHasActiveAssociatedEntities(contentID);
  },

  contentHasActiveDownStreamEntitiesOrItems: function(contentID) {
      return this.contentHasActiveAdditionalEntities(contentID) || this.contentHasActiveAssociatedEntities(contentID) || this.contentHasActiveItems(contentID);
  },

  contentHasActiveItems: function(contentID) {
      var item = new GlideRecord(this.strategy.itemTable);
      item.addActiveQuery();
      item.addQuery('content', contentID);
      item.addQuery('instance', true);
      item.setLimit(1);
      item.query();

      return item.hasNext();
  },

  contentHasActiveAssociatedEntities: function(contentID) {
      var contentProfileTypeGr = new GlideRecord(this.strategy.getContentToProfileTypeTable());
      contentProfileTypeGr.addQuery('sn_grc_content', contentID);
      contentProfileTypeGr.addQuery('sn_grc_profile_type.active', true);
      var profileTypeActiveEntity = contentProfileTypeGr.addJoinQuery('sn_grc_m2m_profile_profile_type', 'sn_grc_profile_type', 'profile_type');
      profileTypeActiveEntity.addCondition('sn_grc_profile.active', true);
      contentProfileTypeGr.query();

      return contentProfileTypeGr.hasNext();
  },

  contentHasActiveAdditionalEntities: function(contentID) {
      var addEntityGr = new GlideRecord('sn_grc_m2m_content_profile');
      addEntityGr.addQuery('sn_grc_content', contentID);
      addEntityGr.addQuery('sn_grc_profile.active', true);
      addEntityGr.setLimit(1);
      addEntityGr.query();
      return addEntityGr.hasNext();
  },

  contentHasManualyCreatedItemOrInactiveCommonControl: function(contentID) {
      var itemGr = new GlideAggregate('sn_grc_item');
      itemGr.addAggregate('COUNT');
      itemGr.addQuery('content', contentID);
      itemGr.addQuery('profile.active', true);
      itemGr.addQuery('active', false);
      itemGr.addQuery('created_one_off=true^ORitem_function=1');
      itemGr.addQuery('retired_manually', false);
      itemGr.query();
      if (itemGr.next() && itemGr.getAggregate('COUNT') > 0)
          return true;

      return false;


  },

  contentHasActiveProcessingActivities: function(contentID) {
      var coProcessingActivityM2MGr = new GlideRecord('sn_privacy_m2m_policy_statement_processing_activity');
      if (coProcessingActivityM2MGr.isValid()) {
          coProcessingActivityM2MGr.addQuery('policy_statement', contentID);
          coProcessingActivityM2MGr.addQuery('processing_activity.active', true);
          coProcessingActivityM2MGr.setLimit(1);
          coProcessingActivityM2MGr.query();
          return coProcessingActivityM2MGr.hasNext();
      }
      return false;
  },

  contentActivationShouldGenerateAction: function(content) {
      return (this.contentHasActiveDownStreamEntities(content.getUniqueValue()) || this.contentHasManualyCreatedItemOrInactiveCommonControl(content.getUniqueValue()) || this.contentHasActiveProcessingActivities(content.getUniqueValue())) && this.strategy.recordCanCreateItems(content);
  },

  contentHasActiveItem: function(contentId) {
      if (gs.nil(this.strategy)) {
          return false;
      }

      var item = new GlideRecord(this.strategy.itemTable);
      item.addActiveQuery();
      item.addQuery('content', contentId);
      item.setLimit(1);
      item.query();

      return item.hasNext();
  },

  checkIfRiskComplianceInstalled: function() {
      return (GlidePluginManager.isActive('sn_risk') || GlidePluginManager.isActive('com.sn_risk')) &&
          (GlidePluginManager.isActive('sn_compliance') || GlidePluginManager.isActive('com.sn_compliance'));
  },

  type: 'ItemGenerationV2ConditionsBase'
};

Sys ID

d700add807722010bbc77f04a9d30099

Offical Documentation

Official Docs: