@@ -75,11 +75,11 @@ class indicatorsCalculator
|
||||
private $userGroupReportingMetadata = array("tableName" => "USR_REPORTING", "keyField" => "PRO_UID");
|
||||
private $processCategoryReportingMetadata = array("tableName" => "PRO_REPORTING", "keyField" => "PRO_UID");
|
||||
|
||||
private $peiCostFormula = "USER_HOUR_COST * SUM(case when TOTAL_TIME_BY_TASK >0 then TOTAL_CASES_OUT * CONFIGURED_TASK_TIME - TOTAL_TIME_BY_TASK * USER_HOUR_COST else 0 end)";
|
||||
private $peiCostFormula = " SUM(case when TOTAL_TIME_BY_TASK >0 then (TOTAL_CASES_OUT * CONFIGURED_TASK_TIME - TOTAL_TIME_BY_TASK) * USER_HOUR_COST else 0 end)";
|
||||
private $peiFormula = "SUM(TOTAL_CASES_OUT*CONFIGURED_TASK_TIME) / SUM(SDV_TIME * TOTAL_CASES_OUT + TOTAL_TIME_BY_TASK)";
|
||||
|
||||
private $ueiCostFormula = " USER_HOUR_COST * SUM(case when TOTAL_TIME_BY_TASK >0 then TOTAL_CASES_OUT * CONFIGURED_TASK_TIME - TOTAL_TIME_BY_TASK * USER_HOUR_COST else 0 end)";
|
||||
private $ueiFormula = "SUM(TOTAL_CASES_OUT * CONFIGURED_TASK_TIME) / SUM(TOTAL_TIME_BY_TASK * USER_HOUR_COST)";
|
||||
private $ueiCostFormula = " SUM(case when TOTAL_TIME_BY_TASK >0 then (TOTAL_CASES_OUT * CONFIGURED_TASK_TIME - TOTAL_TIME_BY_TASK) * USER_HOUR_COST else 0 end)";
|
||||
private $ueiFormula = "SUM(TOTAL_CASES_OUT * CONFIGURED_TASK_TIME) / SUM(TOTAL_TIME_BY_TASK)";
|
||||
|
||||
public function getSkewOfDataDistribution($table, $field) {
|
||||
/*$sqlString = "SET @median = (SELECT x.$field from $table x, $table y
|
||||
|
||||
@@ -44,7 +44,10 @@ class Dashboard extends BaseDashboard
|
||||
$dashboard = DashboardPeer::retrieveByPK($data['DAS_UID']);
|
||||
}
|
||||
|
||||
G::LoadSystem('inputfilter');
|
||||
$filter = new InputFilter();
|
||||
$data['DAS_UPDATE_DATE'] = date('Y-m-d H:i:s');
|
||||
$data['DAS_TITLE'] = $filter ->validateInput($data['DAS_TITLE'], "string");
|
||||
$dashboard->fromArray($data, BasePeer::TYPE_FIELDNAME);
|
||||
if ($dashboard->validate()) {
|
||||
$connection->begin();
|
||||
|
||||
@@ -21,11 +21,6 @@ class StrategicDashboard extends Controller
|
||||
{
|
||||
global $RBAC;
|
||||
|
||||
if ($RBAC->userCanAccess('PM_SETUP') != 1) {
|
||||
G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels');
|
||||
G::header( 'location: login/login' );
|
||||
exit(0);
|
||||
}
|
||||
$licensedFeatures = & PMLicensedFeatures::getSingleton();
|
||||
if (!$licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjBsZEJ6dnpJa3dTeWVLVT0=')) {
|
||||
G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels' );
|
||||
@@ -215,8 +210,8 @@ class StrategicDashboard extends Controller
|
||||
$translation['ID_NO_INEFFICIENT_USER_GROUPS'] = G::LoadTranslation('ID_NO_INEFFICIENT_USER_GROUPS');
|
||||
$translation['ID_NO_INEFFICIENT_USERS'] = G::LoadTranslation('ID_NO_INEFFICIENT_USERS');
|
||||
$translation['ID_DISPLAY_EMPTY'] = G::LoadTranslation('ID_DISPLAY_EMPTY');
|
||||
$translation['ID_EMPTY'] = G::LoadTranslation('ID_EMPTY');
|
||||
$translation['ID_INBOX'] = G::LoadTranslation('ID_INBOX');
|
||||
//text for inbox empty in status indicator
|
||||
$translation['ID_INBOX_EMPTY'] = G::LoadTranslation('ID_INBOX_EMPTY');
|
||||
|
||||
$this->setVar('translation', $translation);
|
||||
$this->render();
|
||||
@@ -266,9 +261,7 @@ class StrategicDashboard extends Controller
|
||||
$translation['ID_NO_INEFFICIENT_USER_GROUPS'] = G::LoadTranslation('ID_NO_INEFFICIENT_USER_GROUPS');
|
||||
$translation['ID_NO_INEFFICIENT_USERS'] = G::LoadTranslation('ID_NO_INEFFICIENT_USERS');
|
||||
$translation['ID_DISPLAY_EMPTY'] = G::LoadTranslation('ID_DISPLAY_EMPTY');
|
||||
$translation['ID_EMPTY'] = G::LoadTranslation('ID_EMPTY');
|
||||
$translation['ID_INBOX'] = G::LoadTranslation('ID_INBOX');
|
||||
|
||||
$translation['ID_INBOX_EMPTY'] = G::LoadTranslation('ID_INBOX_EMPTY');
|
||||
|
||||
$this->setVar('translation', $translation);
|
||||
$this->render();
|
||||
|
||||
@@ -192,7 +192,7 @@ ViewDashboardPresenter.prototype.setStatusButtonWidthsAndDisplayValues = functio
|
||||
});
|
||||
|
||||
if (atRisk.valueToShow == 0 && overdue.valueToShow == 0 && onTime.valueToShow == 0) {
|
||||
onTime.valueToShow = G_STRING['ID_INBOX'] + ' ' + G_STRING['ID_EMPTY'];
|
||||
onTime.valueToShow = G_STRING['ID_INBOX_EMPTY'];
|
||||
onTime.width = 100;
|
||||
}
|
||||
|
||||
@@ -310,18 +310,18 @@ ViewDashboardPresenter.prototype.statusViewModel = function(indicatorId, data) {
|
||||
$.each(data.dataList, function(index, originalObject) {
|
||||
|
||||
originalObject.taskTitle = that.helper.labelIfEmpty(originalObject.taskTitle);
|
||||
var title = originalObject.taskTitle.substring(0,10);
|
||||
//var title = originalObject.taskTitle.substring(0,10);
|
||||
|
||||
var newObject1 = {
|
||||
datalabel : title,
|
||||
datalabel : originalObject.taskTitle,
|
||||
value : originalObject.percentageTotalOverdue
|
||||
};
|
||||
var newObject2 = {
|
||||
datalabel : title,
|
||||
datalabel : originalObject.taskTitle,
|
||||
value : originalObject.percentageTotalAtRisk
|
||||
};
|
||||
var newObject3 = {
|
||||
datalabel : title,
|
||||
datalabel : originalObject.taskTitle,
|
||||
value : originalObject.percentageTotalOnTime
|
||||
};
|
||||
|
||||
@@ -338,6 +338,11 @@ ViewDashboardPresenter.prototype.statusViewModel = function(indicatorId, data) {
|
||||
originalObject.indicatorId = indicatorId;
|
||||
});
|
||||
|
||||
|
||||
that.makeShortLabel(graph1Data, 10);
|
||||
that.makeShortLabel(graph2Data, 10);
|
||||
that.makeShortLabel(graph3Data, 10);
|
||||
|
||||
var retval = data;
|
||||
retval.graph1Data = this.orderGraphData(graph1Data, "down").splice(0,7)
|
||||
retval.graph2Data = this.orderGraphData(graph2Data, "down").splice(0,7)
|
||||
@@ -517,10 +522,15 @@ ViewDashboardPresenter.prototype.adaptGraphData = function(listData) {
|
||||
|
||||
ViewDashboardPresenter.prototype.makeShortLabel = function(listData, labelLength) {
|
||||
$.each(listData, function(index, item) {
|
||||
var longLabel = (item.datalabel == null)
|
||||
? ""
|
||||
: item.datalabel.substring(0, 50);
|
||||
|
||||
var shortLabel = (item.datalabel == null)
|
||||
? ""
|
||||
: item.datalabel.substring(0,labelLength);
|
||||
item.datalabel = shortLabel;
|
||||
? ""
|
||||
: item.datalabel.substring(0, labelLength);
|
||||
|
||||
item.datalabel = shortLabel;
|
||||
item.longlabel = longLabel;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -590,7 +590,7 @@ var fillStatusIndicatorFirstView = function (presenterData) {
|
||||
|
||||
allowDrillDown:true,
|
||||
allowTransition:true,
|
||||
showTip: false,
|
||||
showTip: true,
|
||||
allowZoom: false,
|
||||
showLabels: true
|
||||
}
|
||||
@@ -650,7 +650,7 @@ var fillSpecialIndicatorFirstView = function(presenterData) {
|
||||
graph: {
|
||||
allowDrillDown:false,
|
||||
allowTransition:true,
|
||||
showTip: false,
|
||||
showTip: true,
|
||||
allowZoom: false,
|
||||
gapWidth:0.3,
|
||||
useShadows: true,
|
||||
@@ -674,7 +674,7 @@ var fillSpecialIndicatorFirstView = function(presenterData) {
|
||||
axisY:{ showAxis: true, label: G_STRING['ID_COSTS']},
|
||||
gridLinesX:false,
|
||||
gridLinesY:true,
|
||||
showTip: false,
|
||||
showTip: true,
|
||||
allowZoom: false,
|
||||
useShadows: true,
|
||||
paddingTop: 50,
|
||||
@@ -747,7 +747,7 @@ var fillSpecialIndicatorSecondView = function(presenterData) {
|
||||
graph: {
|
||||
allowTransition: false,
|
||||
allowDrillDown: true,
|
||||
showTip: false,
|
||||
showTip: true,
|
||||
allowZoom: false,
|
||||
useShadows: false,
|
||||
gridLinesX: true,
|
||||
@@ -837,7 +837,7 @@ var fillGeneralIndicatorFirstView = function (presenterData) {
|
||||
graph: {
|
||||
allowTransition: false,
|
||||
allowDrillDown: true,
|
||||
showTip: false,
|
||||
showTip: true,
|
||||
allowZoom: false,
|
||||
useShadows: false,
|
||||
gridLinesX: true,
|
||||
@@ -859,7 +859,7 @@ var fillGeneralIndicatorFirstView = function (presenterData) {
|
||||
graph: {
|
||||
allowTransition: false,
|
||||
allowDrillDown: true,
|
||||
showTip: false,
|
||||
showTip: true,
|
||||
allowZoom: false,
|
||||
useShadows: false,
|
||||
gridLinesX: true,
|
||||
@@ -885,7 +885,7 @@ var fillGeneralIndicatorFirstView = function (presenterData) {
|
||||
axisY:{ showAxis: true, label: G_STRING.ID_TIME_HOURS },
|
||||
gridLinesX:false,
|
||||
gridLinesY:true,
|
||||
showTip: false,
|
||||
showTip: true,
|
||||
allowZoom: false,
|
||||
useShadows: true,
|
||||
paddingTop: 50,
|
||||
@@ -907,7 +907,7 @@ var fillGeneralIndicatorFirstView = function (presenterData) {
|
||||
axisY:{ showAxis: true, label: G_STRING.ID_TIME_HOURS },
|
||||
gridLinesX:false,
|
||||
gridLinesY:true,
|
||||
showTip: false,
|
||||
showTip: true,
|
||||
allowZoom: false,
|
||||
useShadows: true,
|
||||
paddingTop: 50,
|
||||
|
||||
@@ -48,7 +48,7 @@ if ($RBAC->userCanAccess('PM_DASHBOARD') == 1) {
|
||||
|
||||
/*----------------------------------********---------------------------------*/
|
||||
$licensedFeatures = & PMLicensedFeatures::getSingleton();
|
||||
if ($licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjBsZEJ6dnpJa3dTeWVLVT0=') && ($RBAC->userCanAccess('PM_SETUP') == 1 || $RBAC->userCanAccess('PM_USERS') == 1)) {
|
||||
if ($licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjBsZEJ6dnpJa3dTeWVLVT0=') ) {
|
||||
$G_TMP_MENU->AddIdRawOption('DASHBOARD+', 'strategicDashboard/main', G::LoadTranslation('ID_STRATEGIC_DASHBOARD'), '', '', '', 'x-pm-dashboard');
|
||||
}
|
||||
/*----------------------------------********---------------------------------*/
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
||||
*/
|
||||
|
||||
$RBAC->requirePermissions( 'PM_DASHBOARD' );
|
||||
|
||||
$licensedFeatures = & PMLicensedFeatures::getSingleton();
|
||||
if (!$licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjBsZEJ6dnpJa3dTeWVLVT0=')) {
|
||||
G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels' );
|
||||
|
||||
@@ -239,7 +239,7 @@ Ext.onReady(function() {
|
||||
viewConfig: {
|
||||
forceFit:true
|
||||
},
|
||||
title : _('ID_STRATEGIC_DASHBOARD'),
|
||||
title : _('ID_KPI'),
|
||||
store: store,
|
||||
cm: cmodel,
|
||||
sm: smodel,
|
||||
|
||||
@@ -81,8 +81,8 @@ Ext.onReady( function() {
|
||||
xtype : 'textfield',
|
||||
anchor : '85%',
|
||||
maxLength : 250,
|
||||
maskRe : /([a-zA-Z0-9_'\s]+)$/,
|
||||
regex : /([a-zA-Z0-9_'\s]+)$/,
|
||||
maskRe : /^([a-zA-Z0-9_'\s]+)$/i,
|
||||
regex : /^([a-zA-Z0-9_'\s]+)$/i,
|
||||
regexText : _('ID_INVALID_VALUE', _('ID_DASHBOARD_TITLE')),
|
||||
allowBlank : false
|
||||
},
|
||||
@@ -752,8 +752,8 @@ var addTab = function (flag) {
|
||||
id : 'IND_TITLE_'+ indexTab,
|
||||
xtype : 'textfield',
|
||||
anchor : '85%',
|
||||
maskRe : /([a-zA-Z0-9_'\s]+)$/,
|
||||
regex : /([a-zA-Z0-9_'\s]+)$/,
|
||||
maskRe : /^([a-zA-Z0-9_'\s]+)$/,
|
||||
regex : /^([a-zA-Z0-9_'\s]+)$/,
|
||||
regexText : _('ID_INVALID_VALUE', _('ID_INDICATOR_TITLE')),
|
||||
maxLength : 250,
|
||||
allowBlank : false
|
||||
@@ -1040,10 +1040,14 @@ var validateNameDashboard = function () {
|
||||
var saveDashboard = function () {
|
||||
var title = Ext.getCmp('DAS_TITLE').getValue();
|
||||
var data = {};
|
||||
if (title == '') {
|
||||
if (title == '' ) {
|
||||
PMExt.warning(_('ID_DASHBOARD'), _('ID_DASHBOARD_TITLE') + ' '+ _('ID_IS_REQUIRED'));
|
||||
Ext.getCmp('DAS_TITLE').focus(true,10);
|
||||
return false;
|
||||
} else if (!Ext.getCmp('DAS_TITLE').isValid()) {
|
||||
PMExt.warning(_('ID_DASHBOARD'), _('ID_INVALID_VALUE', _('ID_DASHBOARD_TITLE')));
|
||||
Ext.getCmp('DAS_TITLE').focus(true,10);
|
||||
return false;
|
||||
}
|
||||
data['DAS_TITLE'] = title;
|
||||
var description = Ext.getCmp('DAS_DESCRIPTION').getValue();
|
||||
@@ -1111,6 +1115,10 @@ var saveAllIndicators = function (DAS_UID) {
|
||||
PMExt.warning(_('ID_DASHBOARD'), _('ID_INDICATOR_TITLE_REQUIRED', tabPanel.getItem(tabActivate[tab]).title));
|
||||
fieldsTab[1].focus(true,10);
|
||||
return false;
|
||||
} else if (!fieldsTab[1].isValid()) {
|
||||
PMExt.warning(_('ID_DASHBOARD'), _('ID_INVALID_VALUE', _('ID_INDICATOR_TITLE')));
|
||||
fieldsTab[1].focus(true,10);
|
||||
return false;
|
||||
} else if (fieldsTab[2].getValue().trim() == '') {
|
||||
PMExt.warning(_('ID_DASHBOARD'), _('ID_INDICATOR_TYPE_REQUIRED', tabPanel.getItem(tabActivate[tab]).title));
|
||||
fieldsTab[2].focus(true,10);
|
||||
@@ -1279,6 +1287,11 @@ var loadIndicators = function (DAS_UID) {
|
||||
});
|
||||
};
|
||||
|
||||
function converter(str) {
|
||||
str = str.replace(/'/g, "'");
|
||||
return str;
|
||||
}
|
||||
|
||||
var loadInfoDashboard = function (DAS_UID) {
|
||||
Ext.Ajax.request({
|
||||
url : urlProxy + 'dashboard/' + DAS_UID,
|
||||
@@ -1289,7 +1302,7 @@ var loadInfoDashboard = function (DAS_UID) {
|
||||
},
|
||||
success: function (response) {
|
||||
var jsonResp = Ext.util.JSON.decode(response.responseText);
|
||||
Ext.getCmp('DAS_TITLE').setValue(jsonResp['DAS_TITLE']);
|
||||
Ext.getCmp('DAS_TITLE').setValue(converter(jsonResp['DAS_TITLE']));
|
||||
Ext.getCmp('DAS_DESCRIPTION').setValue(jsonResp['DAS_DESCRIPTION']);
|
||||
},
|
||||
failure: function (response) {
|
||||
|
||||
@@ -522,11 +522,12 @@ Ext.onReady(function () {
|
||||
fieldLabel : _('ID_COST_BY_HOUR'),
|
||||
xtype : 'numberfield',
|
||||
allowNegative: false,
|
||||
emptyText : '0.00',
|
||||
decimalSeparator : '.',
|
||||
maskRe : /^[0-9]/i,
|
||||
regex : /^[0-9]/i,
|
||||
regexText : _('ID_INVALID_VALUE', _('ID_COST_BY_HOUR')),
|
||||
maxLength : 13,
|
||||
maxLength : 10,
|
||||
width : 80
|
||||
},
|
||||
{
|
||||
@@ -610,7 +611,6 @@ Ext.onReady(function () {
|
||||
if (Ext.getCmp('USR_CNF_PASS').getValue() != '') {
|
||||
userExecuteEvent(document.getElementById('USR_CNF_PASS'), 'blur');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1175,6 +1175,11 @@ function saveUser()
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (!Ext.getCmp('USR_COST_BY_HOUR').isValid()) {
|
||||
PMExt.warning(_('ID_ERROR'), _('ID_INVALID_VALUE_EXPECTING_POSITIVE_INTEGER', _('ID_COST_BY_HOUR')));
|
||||
Ext.getCmp('USR_COST_BY_HOUR').focus(true,10);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (USR_UID == '00000000000000000000000000000001') {
|
||||
if (Ext.getCmp('USR_ROLE').getValue() != PROCESSMAKER_ADMIN) {
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
.grid-stack-item[data-gs-x="2"] { left: 16.66666667% }
|
||||
.grid-stack-item[data-gs-x="1"] { left: 8.33333333% }
|
||||
|
||||
@media (max-width: 1000px) {
|
||||
@media (max-width: 990px) {
|
||||
.grid-stack-item {
|
||||
position: relative !important;
|
||||
width: auto !important;
|
||||
|
||||
Reference in New Issue
Block a user