var AssetTerritoryUtils = Class.create();
AssetTerritoryUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
validateAssetTerritories: function() {
var assetIds = this.getParameter('sysparm_asset_ids');
if (!assetIds)
return JSON.stringify({
success: true
});
var assetArr = assetIds.split(',');
var companyMap = {};
var assetGR = new GlideRecord('alm_asset');
assetGR.addQuery('sys_id', 'IN', assetArr);
assetGR.query();
while (assetGR.next()) {
var company = assetGR.getValue('company');
if (!company)
continue;
if (!companyMap[company])
companyMap[company] = [];
companyMap[company].push(assetGR.getDisplayValue());
}
var invalidAssets = [];
for (var companyId in companyMap) {
var procGR = new GlideRecord('sn_hamp_territory_procurement');
procGR.addQuery('u_company', companyId);
procGR.query();
var optIn = false;
if (procGR.next()) {
optIn = procGR.getValue('u_opt_in') == '1' ||
procGR.getValue('u_opt_in') == 'true';
}
if (!optIn) {
invalidAssets = invalidAssets.concat(companyMap[companyId]);
}
}
if (invalidAssets.length > 0) {
return JSON.stringify({
success: false,
message: 'Territory is not Opt-In for asset(s): ' +
invalidAssets.join(', ')
});
}
return JSON.stringify({
success: true
});
},
type: 'AssetTerritoryUtils'
});
// var AssetTerritoryUtils = Class.create();
// AssetTerritoryUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
// validateAssetTerritories: function() {
// return JSON.stringify({
// success: true
// });
// },
// type: 'AssetTerritoryUtils'
// });
// var AssetTerritoryUtils = Class.create();
// AssetTerritoryUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
// validateAssetTerritories: function() {
// var assetIds = this.getParameter('sysparm_asset_ids');
// if (!assetIds) {
// return JSON.stringify({ success: true });
// }
// var assetArr = assetIds.split(',');
// var companyMap = {};
// var noCompanyAssets = [];
// var assetGR = new GlideRecord('alm_asset');
// assetGR.addQuery('sys_id', 'IN', assetArr);
// assetGR.query();
// while (assetGR.next()) {
// var company = assetGR.getValue('company');
// var displayName = assetGR.getDisplayValue();
// // FIX: don't silently skip assets with no company —
// // flag them as invalid instead of letting them pass unvalidated
// if (!company) {
// noCompanyAssets.push(displayName);
// continue;
// }
// if (!companyMap[company]) {
// companyMap[company] = [];
// }
// companyMap[company].push(displayName);
// }
// var invalidAssets = [];
// for (var companyId in companyMap) {
// var procGR = new GlideRecord('sn_hamp_territory_procurement');
// procGR.addQuery('u_company', companyId);
// procGR.query();
// // FIX: check ALL procurement records for this company, not just the first.
// // Company is opt-in only if AT LEAST ONE matching record is opt-in true.
// // (Flip this logic to "ALL must be true" instead if that's the actual business rule.)
// var optIn = false;
// while (procGR.next()) {
// var val = procGR.getValue('u_opt_in');
// if (val == '1' || val == 'true') {
// optIn = true;
// break;
// }
// }
// if (!optIn) {
// invalidAssets = invalidAssets.concat(companyMap[companyId]);
// }
// }
// // FIX: assets with no company are always treated as invalid/unvalidated
// if (noCompanyAssets.length > 0) {
// invalidAssets = invalidAssets.concat(noCompanyAssets);
// }
// if (invalidAssets.length > 0) {
// return JSON.stringify({
// success: false,
// message: 'Territory is not Opt-In for asset(s): ' +
// invalidAssets.join(', ')
// });
// }
// return JSON.stringify({ success: true });
// },
// type: 'AssetTerritoryUtils'
// });
client script
var validated = false;
function onSubmit() {
if (validated) {
return true;
}
var ga = new GlideAjax('global.AssetTerritoryUtils');
ga.addParam('sysparm_name', 'validateAssetTerritories');
ga.addParam('sysparm_asset_ids', g_form.getValue('assets'));
ga.getXMLAnswer(function(answer) {
var result = JSON.parse(answer);
if (result.success === true) {
validated = true;
// Trigger submit again
$('.btn-primary:contains("Submit")').click();
} else {
g_form.addErrorMessage(
result.message || 'Territory is not Opt-In'
);
}
});
return false;
}