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