Name

sn_install_base.SoldProductFilter

Description

Returns reference qualifier for case.

Script

var SoldProductFilter = Class.create();
SoldProductFilter.prototype = {
  initialize: function() {
  },
  
  getSoldProductRefQualifier: function(caseRecord) {
  	if(gs.nil(caseRecord)) return "";

  	var soldProductGr = new GlideRecord(global.CSMBaseConstants.SOLD_PRODUCT);
  	var accountIsEmpty = true;
  	var isB2BConsumersPluginActive = GlidePluginManager.isActive(global.CSMBaseConstants.B2B2C_PLUGIN);
  	var isHouseholdPluginActive = GlidePluginManager.isActive(global.CSMBaseConstants.HOUSEHOLD_PLUGIN);

  	if (!caseRecord.account.nil()) {
  		accountIsEmpty = false;
  		soldProductGr.addQuery('account', caseRecord.account);
  		if (!gs.nil(caseRecord.contact) && new global.Account().isRestrictedAccessAccount(caseRecord.account)) {
  			var contactHasCustomerAdminRole = new global.CSHelper().userHasRole(caseRecord.contact, "sn_customerservice.customer_admin");
  			if(!contactHasCustomerAdminRole){
  				var qc = soldProductGr.addQuery('contact', caseRecord.contact);
  				qc.addOrCondition('additional_users', 'CONTAINS', caseRecord.contact);
  				if(caseRecord.contact.account == caseRecord.account)
  					qc.addOrCondition('sys_id', 'IN', new sn_install_base.InstallBaseUtil().getMySPsForAuthorizedAccount(caseRecord.account, caseRecord.contact, global.CSMRelationshipConstants.ACCESS.FULL));
  			}
  		}
  	}

  	//With respect to Sold Product, account and consumer are mutually exclusive until and unless B2B2C plugin is active
  	if (!caseRecord.consumer.nil() && (accountIsEmpty || isB2BConsumersPluginActive)){
  		soldProductGr.addEncodedQuery('consumer=' + caseRecord.consumer + this._getSPEncQueryForConsumer(caseRecord));
  	}

  	if (!caseRecord.product.nil())
  		soldProductGr.addQuery('product', caseRecord.product);
  	
  	if (!gs.nil(caseRecord.requesting_service_organization) && caseRecord.account.nil() && caseRecord.consumer.nil() && (!isHouseholdPluginActive || (isHouseholdPluginActive && caseRecord.household.nil())))
  		soldProductGr.addQuery('service_organization', caseRecord.requesting_service_organization);

  	//show only the sold products that have matching the product service config, this filter will kick in only if the SO is filled
  	if(GlidePluginManager.isActive(global.CSMBaseConstants.SERVICE_ORGANIZATION_PLUGIN) && caseRecord.service_organization) {
  		var products = new global.ServiceOrganizationUtil().getProductsAvailableForCase(caseRecord);
  		if(!gs.nil(products)) {
  			soldProductGr.addQuery('product', products);
  		}
  	}
  	
  	if (GlidePluginManager.isActive(global.CSMBaseConstants.HOUSEHOLD_PLUGIN) && !caseRecord.household.nil()) {
  		soldProductGr.addQuery('household', caseRecord.household);
  	}

      return soldProductGr.getEncodedQuery();
  },

  _getSPEncQueryForConsumer: function(caseRecord) {
      var encodedQuery = "";

      if (gs.nil(caseRecord) || !caseRecord.isValid() || gs.nil(caseRecord.consumer))
          return encodedQuery;

  	encodedQuery = encodedQuery + "^ORadditional_consumersCONTAINS" + caseRecord.consumer;
  	var isHouseholdPluginActive = GlidePluginManager.isActive(global.CSMBaseConstants.HOUSEHOLD_PLUGIN);
  	if(isHouseholdPluginActive)
  		encodedQuery = encodedQuery + "^ORhousehold.head=" + caseRecord.consumer;

  	return encodedQuery;
  },
  
  type: 'SoldProductFilter'
};

Sys ID

7f726efd730323008b516cb63cf6a7ea

Offical Documentation

Official Docs: