Name
sn_install_base.RecordProducerUtils
Description
Helper functions for reference qualifiers for Record Producer.
Script
var RecordProducerUtils = Class.create();
RecordProducerUtils.prototype = {
initialize: function() {},
getGlideRecordDeployedItemsList: function(soldid, account_id, consumer, service_organization, household, current) {
if (gs.nil(soldid) && gs.nil(account_id) && gs.nil(consumer) && gs.nil(service_organization) && gs.nil(household))
return;
var gr;
if (gs.nil(soldid)) {
gr = new GlideRecordSecure("sn_install_base_item");
if (!gs.nil(consumer)) {
if (!gs.nil(household))
gr.addQuery('household', household);
else
gr.addQuery('consumer', consumer);
} else if (!gs.nil(account_id))
gr.addQuery('account', account_id);
else if (!gs.nil(service_organization))
gr.addQuery('service_organization', service_organization);
} else {
gr = new GlideRecordSecure("sn_install_base_m2m_installed_product");
gr.addQuery('sold_product', soldid);
}
gr.query();
var listOfDeployedItems = [];
if (gs.nil(soldid))
while (gr.next())
listOfDeployedItems.push(gr.sys_id + '');
else {
var installBaseUtil = new sn_install_base.InstallBaseUtil();
var uniqueIBsDict = {};
while (gr.next()) {
var currentIB = gr.install_base_item + '';
uniqueIBsDict[currentIB] = true;
var descendentIBs = [];
descendentIBs = installBaseUtil.getAllInstallBaseItemDescendants(currentIB);
descendentIBs.forEach(function(descendentIB) {
uniqueIBsDict[descendentIB] = true;
});
listOfDeployedItems.push(Object.keys(uniqueIBsDict));
}
}
var installBaseGr = new GlideRecord("sn_install_base_item");
installBaseGr.addEncodedQuery("sys_idIN" + listOfDeployedItems);
if (GlidePluginManager.isActive(global.CSMBaseConstants.SERVICE_ORGANIZATION_PLUGIN)) {
if (!gs.nil(current) && current.variables.service_organization) {
var supportedProducts = new global.ServiceOrganizationUtil().getProductsAvailableForCaseRP(current);
if (!gs.nil(supportedProducts))
installBaseGr.addEncodedQuery("productIN" + supportedProducts);
}
}
return installBaseGr.getEncodedQuery();
},
getGlideRecordSoldProductList: function(deployid, account_id, current) {
var contact_id = current.variables.contact;
var consumer_id = current.variables.consumer;
if (gs.nil(deployid) && gs.nil(account_id))
return;
var contactHasCustomerAdminRole = false;
if (!gs.nil(contact_id))
contactHasCustomerAdminRole = new global.CSHelper().userHasRole(contact_id, "sn_customerservice.customer_admin");
var gr;
if (gs.nil(deployid)) {
gr = new GlideRecordSecure("sn_install_base_sold_product");
gr.addQuery('account', account_id);
if (!gs.nil(contact_id) && !contactHasCustomerAdminRole && new global.Account().isRestrictedAccessAccount(account_id)) {
var qc1 = gr.addQuery('contact', contact_id);
qc1.addOrCondition('additional_users', 'CONTAINS', contact_id);
}
if (!gs.nil(consumer_id)) {
var qc2 = gr.addQuery('consumer', consumer_id);
qc2.addOrCondition('additional_consumers', 'CONTAINS', consumer_id);
}
} else {
gr = new GlideRecordSecure("sn_install_base_m2m_installed_product");
gr.addQuery('install_base_item', deployid);
if (!gs.nil(contact_id) && !contactHasCustomerAdminRole && new global.Account().isRestrictedAccessAccount(account_id)) {
var qc3 = gr.addQuery('sold_product.contact', contact_id);
qc3.addOrCondition('sold_product.additional_users', 'CONTAINS', contact_id);
qc3.addOrCondition('install_base_item.contact', contact_id);
qc3.addOrCondition('install_base_item', 'DYNAMIC', '8952347818ea5110f8778c8881aa9751');
}
if (!gs.nil(consumer_id)) {
var qc4 = gr.addQuery('sold_product.consumer', consumer_id);
qc4.addOrCondition('sold_product.additional_consumers', 'CONTAINS', consumer_id);
}
}
gr.query();
var listOfSoldProducts = [];
if (gs.nil(deployid))
while (gr.next())
listOfSoldProducts.push(gr.sys_id + '');
else
while (gr.next())
listOfSoldProducts.push(gr.sold_product + '');
if (gs.nil(deployid))
listOfSoldProducts.push(new sn_install_base.InstallBaseUtil().getMySPsFromAdditionalAccount(global.CSMRelationshipConstants.ACCESS.FULL));
return "sys_idIN" + listOfSoldProducts.join();
},
getCreateCaseRPSOUrl: function(tableName, recordSysId) {
var rpUrl = "";
if (gs.nil(tableName) || gs.nil(recordSysId))
return rpUrl;
var gr = new GlideRecord(tableName);
if (gr.isValid() && gr.get(recordSysId)) {
if (!gs.nil(gr.getValue('service_organization') && gs.hasRole("sn_customerservice.service_organization_contributor", true))) {
rpUrl += "?id=contributor_user_create_case&sys_id=3f00041853b51010b37cddeeff7b12c0";
rpUrl += "&service_organization=true";
}
}
return rpUrl;
},
/**
* return :-
* if sold_product is filled AND account is restricted,
* encoded query having sysIds of (contacts of account) AND (contacts having access to sold_products)
* else
* encoded query having sysIds of all contacts of account
*
* This method is called in reference qualifier of variable Contact in record producer Create Case from Install Base
*/
getContactList: function(current) {
var cond1 = '';
var account = current.variables.account;
var sold_product = current.variables.sold_product;
var consumer = current.variables.consumer;
if (!gs.nil(account))
cond1 = 'account.customer=true';
var caseGr = new GlideRecord('sn_customerservice_case');
caseGr.initialize();
if (!gs.nil(account))
caseGr.setValue('account', account);
if (!gs.nil(sold_product))
caseGr.setValue('sold_product', sold_product);
if (!gs.nil(consumer))
caseGr.setValue('consumer', consumer);
return cond1 + '^' + new global.CSManagementUtils().getCaseContactRefQualifier(caseGr);
},
checkContactAccountOrConsumer: function(table, sysID) {
if (gs.nil(table) || gs.nil(sysID))
return false;
var gr = new GlideRecord(table);
gr.get(sysID);
if (gr.getValue('account') || gr.getValue('contact'))
return this.canCreateCase(table, sysID);
if (gr.getValue('consumer') || gr.getValue('household'))
return this.canConsumerCreateCase(table, sysID);
},
/*
This function checks whether logged-in user (contact) has access to account to show/hide "create case" button
*/
canCreateCase: function(table, sysID) {
//Case is not for IB/SP, we can skip account access check
if (gs.nil(table) || gs.nil(sysID))
return "true";
var gr = new GlideRecord(table);
gr.addQuery('sys_id', sysID);
gr.query();
var account = '';
if (gr.next())
account = gr.getValue('account');
//account is not available, we can skip account access check
if (gs.nil(account)) {
if (!gs.nil(gr.getValue('service_organization'))) {
return new sn_bus_loc.BLPortalUtil().canAccessSOCases();
}
return false;
}
var accountGr = new GlideRecord('customer_account');
accountGr.addQuery('sys_id', account);
accountGr.query();
return (accountGr.next() && accountGr.canRead());
},
canConsumerCreateCase: function(table, sysID) {
var loggedInConsumerId = new global.CSManagementUtils().getConsumerId();
var gr = new GlideRecord(table);
gr.get(sysID);
var isLoggedInConsumer = (gr.getValue('consumer') && gr.getValue('consumer') == loggedInConsumerId);
var isHouseholdHead = (gr.getValue('household') && this.getHeadOfHousehold(gr.getValue('household')) == loggedInConsumerId);
if (isLoggedInConsumer || isHouseholdHead) {
return true;
}
var RC = global.CSMRelationshipConstants;
var entityList = '';
var params = {};
params[RC.SKIP_BEFORE_QUERY_FILTER] = true;
params[RC.ADDITIONAL_ENCODED_QUERY] = "consumer=" + loggedInConsumerId;
if (table == 'sn_install_base_item') {
entityList = new global.CSMRelationshipUtils().getMyEntities(null, global.CSMBaseConstants.INSTALL_BASE_RELATED_PARTY, RC.FIELD_INSTALL_BASE_ITEM, RC.ACCESS.FULL, params);
} else if (table == 'sn_install_base_sold_product') {
entityList = new global.CSMRelationshipUtils().getMyEntities(null, global.CSMBaseConstants.SOLD_PRODUCT_RELATED_PARTY, RC.FIELD_SOLD_PRODUCT, RC.ACCESS.FULL, params);
}
if(entityList.length > 0)
return true;
return false;
},
getHeadOfHousehold: function(householdID) {
var householdGr = new GlideRecord('csm_household');
householdGr.get(householdID);
return householdGr.getValue('head');
},
canReadRecord: function(table, sysID) {
if (gs.nil(table) || gs.nil(sysID))
return "false";
var gr = new GlideRecord(table);
gr.addQuery('sys_id', sysID);
gr.query();
return (gr.next() && gr.canRead());
},
type: 'RecordProducerUtils'
};
Sys ID
e32a8c1d53c03300303cddeeff7b1255