Files
luos/workflow/engine/js/strategicDashboard/dashboardProxy.js

501 lines
17 KiB
JavaScript

var getKeyValue =
function getKeyValue(obj, key, undefined) {
var reg = /\./gi
, subKey
, keys
, context
, x
;
if (reg.test(key)) {
keys = key.split(reg);
context = obj;
for (x = 0; x < keys.length; x++) {
subKey = keys[x];
//the values of all keys except for
//the last one should be objects
if (x < keys.length -1) {
if (!context.hasOwnProperty(subKey)) {
return undefined;
}
context = context[subKey];
}
else {
return context[subKey];
}
}
}
else {
return obj[key];
}
};
var setKeyValue =
function setKeyValue(obj, key, value) {
var reg = /\./gi
, subKey
, keys
, context
, x
;
//check to see if we need to process
//multiple levels of objects
if (reg.test(key)) {
keys = key.split(reg);
context = obj;
for (x = 0; x < keys.length; x++) {
subKey = keys[x];
//the values of all keys except for
//the last one should be objects
if (x < keys.length -1) {
if (!context[subKey]) {
context[subKey] = {};
}
context = context[subKey];
}
else {
context[subKey] = value;
}
}
}
else {
obj[key] = value;
}
};
var merge =
function merge(objFrom, objTo, propMap) {
var toKey
, fromKey
, x
, value
, def
, transform
, key
, keyIsArray
;
if (!objTo) {
objTo = {};
}
for(fromKey in propMap) {
if (propMap.hasOwnProperty(fromKey)) {
toKey = propMap[fromKey];
//force toKey to an array of toKeys
if (!Array.isArray(toKey)) {
toKey = [toKey];
}
for(x = 0; x < toKey.length; x++) {
def = null;
transform = null;
key = toKey[x];
keyIsArray = Array.isArray(key);
if (typeof(key) === "object" && !keyIsArray) {
def = key.default || null;
transform = key.transform || null;
key = key.key;
//evaluate if the new key is an array
keyIsArray = Array.isArray(key);
}
if (keyIsArray) {
//key[toKeyName,transform,default]
def = key[2] || null;
transform = key[1] || null;
key = key[0];
}
if (def && typeof(def) === "function" ) {
def = def(objFrom, objTo);
}
value = getKeyValue(objFrom, fromKey);
if (transform) {
value = transform(value, objFrom, objTo);
}
if (typeof value !== 'undefined') {
setKeyValue(objTo, key, value);
}
else if (typeof def !== 'undefined') {
setKeyValue(objTo, key, def);
}
}
}
}
return objTo;
};
var DashboardProxy = function (oauthToken, server, workspace) {
this.server = server;
this.workspace = workspace;
this.baseUrl = "/api/1.0/" + workspace + "/";
this.oauthToken = oauthToken;
};
DashboardProxy.prototype.userDashboards = function(userId, callBack) {
this.getJson('dashboard/ownerData/' + userId,
function (r) {
var returnList = [];
$.each(r, function(index, originalObject) {
var map = {
"DAS_TITLE" : "dashName",
"DAS_UID" : "dashUid",
"DAS_FAVORITE" : "favorite",
};
var newObject = merge(originalObject, {}, map);
returnList.push(newObject);
});
callBack(returnList);
});
};
DashboardProxy.prototype.dashboardIndicators = function(dashboardId, initDate, endDate, callBack) {
this.getJson('dashboard/' + dashboardId + '/indicator?dateIni=' + initDate + '&dateFin=' + endDate,
function (r) {
var returnList = [];
$.each(r, function(index, originalObject) {
var map = {
"DAS_IND_UID" : "indUid",
"DAS_IND_TITLE" : "indName",
"DAS_IND_TYPE" : "id",
"DAS_IND_VARIATION" : "comparative",
"DAS_IND_DIRECTION" : "direction",
"DAS_IND_VALUE" : "index",
"DAS_IND_X" : "x",
"DAS_IND_Y" : "y",
"DAS_IND_WIDTH" : "width",
"DAS_IND_HEIGHT" : "height",
"DAS_UID_PROCESS" : "process"
};
var newObject = merge(originalObject, {}, map);
//TODO do not burn this value. Data must come from the endpoint
newObject.favorite = ((returnList.length == 1) ? 1 : 0);
returnList.push(newObject);
});
callBack(returnList);
});
};
DashboardProxy.prototype.peiData = function(indicatorId, measureDate, compareDate, callBack) {
var endPoint = "ReportingIndicators/process-efficiency-data?" +
"indicator_uid=" + indicatorId +
"&measure_date=" + measureDate +
"&compare_date=" + compareDate +
"&language=en";
this.getJson(endPoint,
function (r) {
var graphData = [];
$.each(r.data, function(index, originalObject) {
var map = {
"name" : "datalabel",
"inefficiencyCost" : "value"
};
var newObject = merge(originalObject, {}, map);
var shortLabel = (newObject.datalabel == null)
? ""
: newObject.datalabel.substring(0,15);
newObject.datalabel = shortLabel;
graphData.push(newObject);
});
r.dataToDraw = graphData.splice(0,7);
callBack(r);
});
}
DashboardProxy.prototype.processTasksData = function(process, initDate, endDate, callBack) {
var endPoint = "ReportingIndicators/process-tasks?" +
"process_list=" + process +
"&init_date=" + initDate +
"&end_date=" + endDate +
"&language=en";
this.getJson(endPoint,
function (r) {
var graphData = [];
$.each(r, function(index, originalObject) {
var map = {
"name" : "datalabel",
"averageTime" : "value",
"deviationTime" : "dispersion"
};
var newObject = merge(originalObject, {}, map);
newObject.datalabel = newObject.datalabel.substring(0, 7);
graphData.push(newObject);
});
var retval = {};
retval.dataToDraw = graphData.splice(0,7);
retval.tasksData = r;
callBack(retval);
});
}
DashboardProxy.prototype.ueiData = function(indicatorId, measureDate, compareDate, callBack) {
var endPoint = "ReportingIndicators/employee-efficiency-data?" +
"indicator_uid=" + indicatorId +
"&measure_date=" + measureDate +
"&compare_date=" + compareDate +
"&language=en";
this.getJson(endPoint,
function (r) {
var graphData = [];
$.each(r.data, function(index, originalObject) {
var map = {
"name" : "datalabel",
"averageTime" : "value",
"deviationTime" : "dispersion"
};
var newObject = merge(originalObject, {}, map);
var shortLabel = (newObject.datalabel == null)
? ""
: newObject.datalabel.substring(0,7);
newObject.datalabel = shortLabel;
graphData.push(newObject);
});
r.dataToDraw = graphData.splice(0,7);
callBack(r);
});
/*var retval = {
"efficiencyIndex":1.23,
"efficiencyVariation":0.23,
"inefficiencyCost":"$ 20112.23",
"employeeGroupsDataToDraw":
[
{"value":"96", "datalabel":"User 1"},
{"value":"84", "datalabel":"User 2"},
{"value":"72", "datalabel":"User 3"},
{"value":"18", "datalabel":"User 4"},
{"value":"85", "datalabel":"User 5"}
],
"employeeGroupsData": [
{"name": "User 1", "efficiencyIndex":"0.45", "innefficiencyCost":"$ 3404"},
{"name": "User 2", "efficiencyIndex":"1.45", "innefficiencyCost":"$ 1404"},
{"name": "User 3", "efficiencyIndex":"0.25", "innefficiencyCost":"$ 3304"},
{"name": "User 4", "efficiencyIndex":"1.95", "innefficiencyCost":"$ 404"},
{"name": "User 5", "efficiencyIndex":"1.25", "innefficiencyCost":"$ 13404"},
{"name": "User 6", "efficiencyIndex":"0.75", "innefficiencyCost":"$ 4"}
]
}
return retval;*/
}
DashboardProxy.prototype.userGroupData = function(groupId, initDate, endDate, callBack) {
var endPoint = "ReportingIndicators/group-employee-data?" +
"group_uid=" + groupId +
"&init_date=" + initDate +
"&end_date=" + endDate +
"&language=en";
this.getJson(endPoint,
function (r) {
var graphData = [];
$.each(r, function(index, originalObject) {
var map = {
"name" : "datalabel",
"averageTime" : "value",
"deviationTime" : "dispersion"
};
var newObject = merge(originalObject, {}, map);
newObject.datalabel = newObject.datalabel.substring(0, 7);
graphData.push(newObject);
});
var retval = {};
retval.dataToDraw = graphData.splice(0,7);
retval.tasksData = r;
callBack(retval);
});
}
DashboardProxy.prototype.generalIndicatorData = function(indicatorId, initDate, endDate, callBack) {
var method = "";
var endPoint = "ReportingIndicators/general-indicator-data?" +
"indicator_uid=" + indicatorId +
"&init_date=" + initDate +
"&end_date=" + endDate +
"&language=en";
this.getJson(endPoint,
function (r) {
$.each(r.graph1Data, function(index, originalObject) {
var label = (('YEAR' in originalObject) ? originalObject.YEAR : "") ;
label += (('MONTH' in originalObject) ? "/" + originalObject.MONTH : "") ;
label += (('QUARTER' in originalObject) ? "/" + originalObject.QUARTER : "");
label += (('SEMESTER' in originalObject) ? "/" + originalObject.SEMESTER : "");
originalObject.datalabel = label;
});
$.each(r.graph2Data, function(index, originalObject) {
var label = (('YEAR' in originalObject) ? originalObject.YEAR : "") ;
label += (('MONTH' in originalObject) ? "/" + originalObject.MONTH : "") ;
label += (('QUARTER' in originalObject) ? "/" + originalObject.QUARTER : "");
label += (('SEMESTER' in originalObject) ? "/" + originalObject.SEMESTER : "") ;
originalObject.datalabel = label;
});
callBack(r);
});
/*var retval = {
"index" : "23",
"graph1Data": [
{"value":"96", "datalabel":"User 1"},
{"value":"84", "datalabel":"User 2"},
{"value":"72", "datalabel":"User 3"},
{"value":"18", "datalabel":"User 4"},
{"value":"85", "datalabel":"User 5"}
],
"graph2Data": [
{"value":"196", "datalabel":"User 1"},
{"value":"184", "datalabel":"User 2"},
{"value":"172", "datalabel":"User 3"},
{"value":"118", "datalabel":"User 4"},
{"value":"185", "datalabel":"User 5"}
]
}
return retval;*/
}
DashboardProxy.prototype.userTasksData = function(processId, monthCompare, yearCompare) {
var retval = {
"tasksDataToDraw": [
{"value":"96", "datalabel":"Task 1"},
{"value":"84", "datalabel":"Task 2"},
{"value":"72", "datalabel":"Task 3"},
{"value":"18", "datalabel":"Task 4"},
{"value":"85", "datalabel":"Task 5"}
],
"tasksData": [
{"Name": "Task 1", "efficiencyIndex":"0.45", "deviationTime":"0.45", "averageTime":"34 days"},
{"Name": "Task 2", "efficiencyIndex":"1.45", "deviationTime":"1.45", "averageTime":"14 days"},
{"Name": "Task 3", "efficiencyIndex":"0.25", "deviationTime":"0.25", "averageTime":"3 days"},
{"Name": "Task 4", "efficiencyIndex":"1.95", "deviationTime":"1.95", "averageTime":"4 days"},
{"Name": "Task 5", "efficiencyIndex":"1.25", "deviationTime":"1.25", "averageTime":"14 days"},
{"Name": "Task 6", "efficiencyIndex":"0.75", "deviationTime":"0.75", "averageTime":"4 days"}
]
}
return retval;
}
DashboardProxy.prototype.getPositionIndicator = function(callBack) {
this.getJson('dashboard/config', function (r) {
var graphData = [];
$.each(r, function(index, originalObject) {
var map = {
"widgetId" : originalObject.widgetId,
"x" : originalObject.x,
"y" : originalObject.y,
"width" : originalObject.width,
"height" : originalObject.height
};
graphData.push(map);
});
callBack(graphData);
});
};
DashboardProxy.prototype.setPositionIndicator = function(data, callBack) {
var that = this;
this.getPositionIndicator(
function(response){
if (response.length != 0) {
that.putJson('dashboard/config', data, function (r) {
});
} else {
that.postJson('dashboard/config', data, function (r) {
});
}
}
);
};
DashboardProxy.prototype.getJson = function (endPoint, callBack) {
var that = this;
var callUrl = this.baseUrl + endPoint
//For Debug: console.log('Llamando:');
//For Debug: console.log(callUrl)
$.ajax({
url: callUrl,
type: 'GET',
datatype: 'json',
success: function(response) { callBack(response); },
error: function(jqXHR, textStatus, errorThrown) {
throw new Error(textStatus);
},
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', 'Bearer ' + that.oauthToken);
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
}
});
}
DashboardProxy.prototype.postJson = function (endPoint, data, callBack) {
var that = this;
$.ajax({
url : this.baseUrl + endPoint,
type : 'POST',
datatype : 'json',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
success: function(response) {
callBack(response);
},
error: function(jqXHR, textStatus, errorThrown) {
throw new Error(textStatus);
},
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', 'Bearer ' + that.oauthToken);
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
}
}).fail(function () {
throw new Error('Fail server');
});
};
DashboardProxy.prototype.putJson = function (endPoint, data, callBack) {
var that = this;
$.ajax({
url : this.baseUrl + endPoint,
type : 'PUT',
datatype : 'json',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
success: function(response) {
callBack(response);
},
error: function(jqXHR, textStatus, errorThrown) {
throw new Error(textStatus);
},
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', 'Bearer ' + that.oauthToken);
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
}
}).fail(function () {
throw new Error('Fail server');
});
};