/// <reference path="../../../util/ArrayUtils.ts" />
/// <reference path="../../ITouchpoint.ts" />
/// <reference path="../IProvisioningResult.ts" />
/// <reference path="../IOrderInformation.ts" />
/// <reference path="./IConstructorArgument.ts" />
var econda;
(function (econda) {
var tpm;
(function (tpm) {
var provisioning;
(function (provisioning) {
var partials;
(function (partials) {
/**
* Use only touchpoints from current session.
*
* @class econda.tpm.provisioning.partials.OnlyCurrentSession
*/
var ComputeProvisioningRecord = (function () {
function ComputeProvisioningRecord(data) {
this._touchpoints = [];
this._order = null;
this._keyName = null;
this._touchpoints = data.touchpoints;
this._order = data.order;
this._keyName = data.keyName || 'name';
}
ComputeProvisioningRecord.prototype.apply = function (keyName) {
var cmp = this;
if (typeof keyName === 'string') {
this._keyName = keyName;
}
var tmp;
tmp = this._getTargets();
tmp._ = { order: cmp._order };
var normalizedTmp = ComputeProvisioningRecord._getNormalizedResult(tmp);
this._addValuesForCalculatedShares(normalizedTmp);
return normalizedTmp;
};
ComputeProvisioningRecord.prototype._getTargets = function () {
var keyName = this._keyName;
var targets = { _: null };
for (var n = 0; n < this._touchpoints.length; n++) {
if (typeof this._touchpoints[n].share !== 'undefined' && this._touchpoints[n].share > 0) {
ComputeProvisioningRecord._addTouchpoint(targets, this._touchpoints[n], keyName);
}
}
return targets;
};
/**
* Input: Reference of result with share properties normalized
* @param tempResult
* @private
*/
ComputeProvisioningRecord.prototype._addValuesForCalculatedShares = function (tempResult) {
var order = this._order || { value: 1 };
var orderValue = order.value || 1;
for (var targetName in tempResult) {
if (tempResult.hasOwnProperty(targetName) && targetName !== '_') {
var currentTarget = tempResult[targetName];
currentTarget.value = +((currentTarget.share * orderValue).toFixed(2));
}
}
return tempResult;
};
ComputeProvisioningRecord._addTouchpoint = function (provisioningResult, touchpoint, keyName) {
var targetKey = touchpoint[keyName] || 'unknown';
if (typeof provisioningResult[targetKey] === 'undefined') {
provisioningResult[targetKey] = {
share: 0,
touchpoints: []
};
}
var target = provisioningResult[targetKey];
target.share = target.share + touchpoint.share;
target.touchpoints.push(touchpoint);
};
ComputeProvisioningRecord._getNormalizedResult = function (tempResult) {
var sumShares = 0;
for (var targetName in tempResult) {
if (tempResult.hasOwnProperty(targetName) && targetName !== '_') {
sumShares += tempResult[targetName].share;
}
}
var f = 1 / sumShares;
for (var targetName in tempResult) {
if (tempResult.hasOwnProperty(targetName) && targetName !== '_') {
tempResult[targetName].share = tempResult[targetName].share * f;
}
}
return tempResult;
};
ComputeProvisioningRecord.FUNCTION_NAME = 'computeProvisioningRecord';
return ComputeProvisioningRecord;
}());
partials.ComputeProvisioningRecord = ComputeProvisioningRecord;
})(partials = provisioning.partials || (provisioning.partials = {}));
})(provisioning = tpm.provisioning || (tpm.provisioning = {}));
})(tpm = econda.tpm || (econda.tpm = {}));
})(econda || (econda = {}));