Name
sn_install_base.SoldProductAndInstallBaseUtil
Description
Util class for sold product and install base records.
Script
var SoldProductAndInstallBaseUtil = Class.create();
SoldProductAndInstallBaseUtil.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
getSoldProductRelatedFields: function() {
var soldProductId = this.getParameter('sysparm_soldProductId') || '';
var item = this.newItem();
var gr = new GlideRecord("sn_install_base_sold_product");
gr.addQuery('sys_id', soldProductId);
gr.query();
if (gr.next()) {
item.setAttribute('account', gr.account);
item.setAttribute('consumer', gr.consumer);
item.setAttribute('product', gr.product);
if (this.isSOActivated()) {
item.setAttribute('service_organization', gr.service_organization);
}
if (gs.tableExists('csm_household_member'))
item.setAttribute('household', gr.household);
}
},
getDeployedItemRelatedFields: function() {
var deployedItemId = this.getParameter('sysparm_deployedItemId') || '';
var item = this.newItem();
var gr = new GlideRecord("sn_install_base_item");
gr.addQuery('sys_id', deployedItemId);
gr.query();
if (gr.next()) {
item.setAttribute('account', gr.account);
item.setAttribute('consumer', gr.consumer);
}
},
isSoldProductPresentInM2M: function(soldProduct, contract, dateAdded, dateRemoved) {
var coveredSoldProductGr = new GlideRecord("sn_install_base_m2m_contract_sold_product");
coveredSoldProductGr.addQuery('contract', contract);
coveredSoldProductGr.addQuery('sold_product', soldProduct);
coveredSoldProductGr.query();
while (coveredSoldProductGr.next()) {
var added = (new GlideDateTime(coveredSoldProductGr.getValue('added'))).getNumericValue();
var removed = (new GlideDateTime(coveredSoldProductGr.getValue('removed'))).getNumericValue();
if ((added == 0 && removed == 0) || (dateAdded == added && dateRemoved == removed))
return true;
}
return false;
},
insertChildSoldItem: function() {
var sysIdList = this.getParameter('sysparm_sysIdList') || '';
var contractSysId = this.getParameter('sysparm_contractSysId') || '';
var sysId = sysIdList.split(',');
for (var i = 0; i < sysId.length; i++) {
var id = sysId[i];
var gr = new GlideRecord('sn_install_base_m2m_contract_sold_product');
if (!gr.get(id))
continue;
var soldProduct = gr.sold_product;
var soldProductGr = new GlideRecord('sn_install_base_sold_product');
soldProductGr.addQuery('parent_sold_product', soldProduct);
soldProductGr.query();
var added = (new GlideDateTime(gr.getValue('added'))).getNumericValue();
var removed = (new GlideDateTime(gr.getValue('removed'))).getNumericValue();
while (soldProductGr.getRowCount() > 0) {
var child = [];
/* Add all child sold product */
while (soldProductGr.next()) {
child.push(soldProductGr.sys_id + '');
/* only insert if exact record is not there */
if (!this.isSoldProductPresentInM2M(soldProductGr.sys_id, contractSysId, added, removed)) {
var coveredSoldProductGr = new GlideRecord("sn_install_base_m2m_contract_sold_product");
if (!coveredSoldProductGr.canCreate())
continue;
coveredSoldProductGr.initialize();
coveredSoldProductGr.contract = contractSysId;
coveredSoldProductGr.sold_product = soldProductGr.sys_id;
coveredSoldProductGr.added = gr.added;
coveredSoldProductGr.removed = gr.removed;
coveredSoldProductGr.insert();
}
}
soldProductGr = new GlideRecord('sn_install_base_sold_product');
soldProductGr.addQuery('parent_sold_product', 'IN', child);
soldProductGr.query();
}
}
},
//Helper method to check whether a given record is present in Sold Product Covered table or not
isInstallBaseItemPresentInM2M: function(installbaseitem, contract, dateAdded, dateRemoved) {
var coveredInstallBaseItemGr = new GlideRecordSecure(global.CSMBaseConstants.M2M_CONTRACT_SOLD_PRODUCT);
coveredInstallBaseItemGr.addQuery('contract', contract);
coveredInstallBaseItemGr.addQuery('install_base', installbaseitem);
coveredInstallBaseItemGr.query();
while (coveredInstallBaseItemGr.next()) {
var added = (new GlideDateTime(coveredInstallBaseItemGr.getValue('added'))).getNumericValue();
var removed = (new GlideDateTime(coveredInstallBaseItemGr.getValue('removed'))).getNumericValue();
if ((added == 0 && removed == 0) || (dateAdded == added && dateRemoved == removed))
return true;
}
return false;
},
//Fetches all the child install base items and drops into Install Base Items Covered related list on Contracts
insertChildInstallBaseItem: function() {
var sysIdList = this.getParameter('sysparm_sysIdList') || '';
var contractSysId = this.getParameter('sysparm_contractSysId') || '';
var sysId = sysIdList.split(',');
for (var i = 0; i < sysId.length; i++) {
var id = sysId[i];
var gr = new GlideRecordSecure(global.CSMBaseConstants.M2M_CONTRACT_SOLD_PRODUCT);
if (!gr.get(id))
continue;
var installBaseItem = gr.install_base;
var installBaseItemGr = new GlideRecordSecure(global.CSMBaseConstants.INSTALL_BASE_ITEM);;
installBaseItemGr.addQuery('parent', installBaseItem);
installBaseItemGr.query();
var added = (new GlideDateTime(gr.getValue('added'))).getNumericValue();
var removed = (new GlideDateTime(gr.getValue('removed'))).getNumericValue();
while (installBaseItemGr.getRowCount() > 0) {
var child = [];
/* Add all child install base item */
while (installBaseItemGr.next()) {
child.push(installBaseItemGr.sys_id + '');
/* only insert if exact record is not there */
if (!this.isInstallBaseItemPresentInM2M(installBaseItemGr.sys_id, contractSysId, added, removed)) {
var coveredInstallBaseItemGr = new GlideRecordSecure(global.CSMBaseConstants.M2M_CONTRACT_SOLD_PRODUCT);
if (!coveredInstallBaseItemGr.canCreate())
continue;
coveredInstallBaseItemGr.initialize();
coveredInstallBaseItemGr.contract = contractSysId;
coveredInstallBaseItemGr.install_base = installBaseItemGr.sys_id;
coveredInstallBaseItemGr.added = gr.added;
coveredInstallBaseItemGr.removed = gr.removed;
coveredInstallBaseItemGr.insert();
}
}
installBaseItemGr = new GlideRecordSecure(global.CSMBaseConstants.INSTALL_BASE_ITEM);
installBaseItemGr.addQuery('parent', 'IN', child);
installBaseItemGr.query();
}
}
},
//helper method to fetch consumer sold product entities
getConsumerSoldProducts: function(accessLevel, additionalParams) {
var relConst = global.CSMRelationshipConstants;
if (gs.nil(additionalParams))
additionalParams = {};
if (!additionalParams["consumerId"] && !gs.hasRole(relConst.ROLE_SOLD_PRODUCT_AUTH_CONSUMER))
return [];
additionalParams[relConst.SKIP_BEFORE_QUERY_FILTER] = true;
additionalParams[relConst.IS_CONSUMER_SOLD_PRODUCT] = true;
if (!accessLevel)
accessLevel = relConst.ACCESS.READ;
var spCacheKey = new sn_install_base.InstallBaseUtil().generateCacheKeyForSPConsumer(accessLevel, additionalParams);
var validSP = GlideAppCache.get(spCacheKey);
if (gs.nil(validSP)) {
validSP = new global.CSMRelationshipUtils().getMyEntities(null, global.CSMBaseConstants.SOLD_PRODUCT_RELATED_PARTY, relConst.SOLD_PRODUCT, accessLevel, additionalParams);
GlideAppCache.put(spCacheKey, validSP);
}
return validSP;
},
//Fetch install base items from valid installed products of consumer/customer
getInstallBaseItems: function(pointerEncodedQuery, cacheKey) {
var cachedIB;
if (!cacheKey)
cacheKey = sn_install_base.InstallBaseUtil.CACHE_KEY_MY_IB;
cachedIB = GlideAppCache.get(cacheKey);
if (!gs.nil(cachedIB))
return cachedIB;
var soldProdIBGR = new GlideRecord(global.CSMBaseConstants.M2M_INSTALLED_PRODUCT);
var ipCacheValue = GlideAppCache.get(sn_install_base.InstallBaseUtil.CACHE_KEY_MY_IP_FROM_SP);
if (!gs.nil(ipCacheValue)) {
soldProdIBGR.addEncodedQuery('sys_idIN' + ipCacheValue.join());
}
if(pointerEncodedQuery){
soldProdIBGR.setWorkflow(false); // to avoid cyclic loops, IB-->IP-->IB
soldProdIBGR.addEncodedQuery(pointerEncodedQuery);
}
soldProdIBGR.query(); //query rules or query business rules takes care of adding filters.
var installBaseItems = [];
while (soldProdIBGR.next())
installBaseItems.push(soldProdIBGR.install_base_item + '');
GlideAppCache.put(cacheKey, installBaseItems);
return installBaseItems;
},
populateResponsibilityFromType: function() {
var table = this.getParameter('sysparm_table');
var sysIds = this.getParameter('sysparm_sysIds');
var typeId = this.getParameter('sysparm_typeId');
if (gs.nil(table) || gs.nil(sysIds) || gs.nil(typeId)) return;
var typeGr = this.getRelatedPartyConfigGr(typeId);
if (gs.nil(typeGr)) return;
var responsibility = typeGr.getValue("default_responsibility") + "";
var additionalContacts = new GlideRecordSecure(table);
additionalContacts.addQuery('sys_id', 'IN', sysIds);
additionalContacts.setValue('responsibility', responsibility);
additionalContacts.updateMultiple();
},
getRelatedPartyConfigGr: function(sysId) {
if (gs.nil(sysId)) return;
var partyConfig = new GlideRecord(global.CSMBaseConstants.RELATED_PARTY_CONFIG_TABLE);
partyConfig.get(sysId);
return partyConfig;
},
isSOActivated: function() {
return GlidePluginManager.isActive('com.snc.service_organization');
},
validateTypeAndResponsibility: function(current, entityType) {
return this.validateType(current, entityType) && this.validateResponsibility(current, entityType);
},
validateType: function(current, entityType) {
if (current.type && (current.type.applies_to != global.CSMBaseConstants.SOLD_PRODUCT || current.type.entity_type != entityType)) {
gs.addErrorMessage(gs.getMessage('Invalid type'));
return false;
}
return true;
},
validateResponsibility: function(current, entityType) {
if (current.responsibility && current.responsibility.type && current.responsibility.type != entityType) {
gs.addErrorMessage(gs.getMessage('Invalid responsibility'));
return false;
}
return true;
},
validateFieldBasedOnType: function(entityType, current) {
var field = '';
if (entityType == "customer_contact" && gs.nil(current.contact))
field = "Contact";
else if (entityType == "csm_consumer" && gs.nil(current.consumer))
field = "Consumer";
else if (entityType == "customer_account" && gs.nil(current.account))
field = "Account";
if (!gs.nil(field)) {
gs.addErrorMessage(gs.getMessage("The following mandatory fields are not filled in: {0}", field));
return false;
}
return true;
},
type: 'SoldProductAndInstallBaseUtil'
});
Sys ID
c0b7f88e734323008b516cb63cf6a7c9