From 4b03c189fd70ff0a1ba0205fd446eb651045bc74 Mon Sep 17 00:00:00 2001 From: Dante Date: Mon, 4 May 2015 18:11:42 -0400 Subject: [PATCH 01/14] PM-2573, and status width correction --- .../classes/class.indicatorsCalculator.php | 2 +- .../strategicDashboard/viewDashboardHelper.js | 10 +++ .../viewDashboardPresenter.js | 84 +++++++++++++++++-- .../strategicDashboard/viewDashboardView.js | 25 ++++++ .../strategicDashboard/viewDashboard.html | 2 +- 5 files changed, 116 insertions(+), 7 deletions(-) diff --git a/workflow/engine/classes/class.indicatorsCalculator.php b/workflow/engine/classes/class.indicatorsCalculator.php index 1ddad7e40..d0e735960 100644 --- a/workflow/engine/classes/class.indicatorsCalculator.php +++ b/workflow/engine/classes/class.indicatorsCalculator.php @@ -653,7 +653,7 @@ class indicatorsCalculator $db = ";dbname=".$workSpace->dbName; $user = $workSpace->dbUser; $pass = $workSpace->dbPass; - $connString = "mysql:$host$port$db;"; + $connString = "mysql:$host$port$db;charset=utf8;"; $dbh = new PDO($connString, $user, $pass); return $dbh; diff --git a/workflow/engine/js/strategicDashboard/viewDashboardHelper.js b/workflow/engine/js/strategicDashboard/viewDashboardHelper.js index 568f096d3..9ebe46ce5 100644 --- a/workflow/engine/js/strategicDashboard/viewDashboardHelper.js +++ b/workflow/engine/js/strategicDashboard/viewDashboardHelper.js @@ -15,6 +15,16 @@ ViewDashboardHelper.prototype.stringIfNull = function (val){ return val; }; +ViewDashboardHelper.prototype.zeroIfNull = function (val) { + var retval = 0; + if(val === null || val === undefined || val === "") { + retval = 0; + } else { + retval = val; + } + return retval; +}; + ViewDashboardHelper.prototype.labelIfEmpty = function (val){ if(val === null || val == undefined || val == ""){ val = "(No Name)"; diff --git a/workflow/engine/js/strategicDashboard/viewDashboardPresenter.js b/workflow/engine/js/strategicDashboard/viewDashboardPresenter.js index e823773e4..fe27124ad 100644 --- a/workflow/engine/js/strategicDashboard/viewDashboardPresenter.js +++ b/workflow/engine/js/strategicDashboard/viewDashboardPresenter.js @@ -101,23 +101,26 @@ ViewDashboardPresenter.prototype.dashboardIndicatorsViewModel = function(data) { newObject.favorite = 0; - newObject.percentageOverdueWidth = Math.round(newObject.percentageOverdue); + /*newObject.percentageOverdueWidth = Math.round(newObject.percentageOverdue); newObject.percentageAtRiskWidth = Math.round(newObject.percentageAtRisk); //to be sure that percentages sum up to 100 (the rounding will lose decimals)% newObject.percentageOnTimeWidth = 100 - newObject.percentageOverdueWidth - newObject.percentageAtRiskWidth; - newObject.percentageOverdueToShow = ((newObject.percentageOverdue == 0 ||newObject.percentageOverdue == null ) + newObject.percentageOverdueToShow = ((newObject.percentageOverdue == null || newObject.percentageOverdue <= 20 ) ? "" : newObject.percentageOverdueWidth + "%"); - newObject.percentageAtRiskToShow = ((newObject.percentageAtRisk == 0 || newObject.percentageAtRisk == null) + newObject.percentageAtRiskToShow = ((newObject.percentageAtRisk == null || newObject.percentageAtRisk == 0) ? "" : newObject.percentageAtRiskWidth + "%"); - newObject.percentageOnTimeToShow = ((newObject.percentageOnTime == 0 || newObject.percentageOnTime == 0) + newObject.percentageOnTimeToShow = ((newObject.percentageOnTime == 0 + && newObject.percentageAtRisk == 0 + && newObject.percentageOverdue == 0) ? G_STRING['ID_INBOX'] + ' ' + G_STRING['ID_EMPTY'] : newObject.percentageOnTimeWidth + "%"); - + */ + that.setStatusButtonWidthsAndDisplayValues(newObject); newObject.overdueVisibility = (newObject.percentageOverdueWidth > 0) ? "visible" : "hidden"; newObject.atRiskVisibility = (newObject.percentageAtRiskWidth > 0) ? "visible" : "hidden"; newObject.onTimeVisibility = (newObject.percentageOnTimeWidth > 0) ? "visible" : "hidden"; @@ -135,6 +138,77 @@ ViewDashboardPresenter.prototype.dashboardIndicatorsViewModel = function(data) { return returnList; }; + +ViewDashboardPresenter.prototype.setStatusButtonWidthsAndDisplayValues = function (data) { + var minPercent = 10; + var barsLessThanMin = []; + var barsNormal = []; + + var classifyBar = function (bar) { + if (bar.valueRounded <= minPercent && bar.valueRounded > 0) { + barsLessThanMin.push (bar); + } else { + barsNormal.push (bar) + } + } + + var atRisk = { + type : "atRisk", + value : data.percentageAtRisk, + valueRounded : Math.round(data.percentageAtRisk) + }; + + var overdue = { + type : "overdue", + value : data.percentageOverdue, + valueRounded : Math.round(data.percentageOverdue) + }; + + var onTime = { + type : "onTime", + value : data.percentageOnTime, + valueRounded : Math.round(data.percentageOnTime) + }; + + atRisk.valueToShow = (this.helper.zeroIfNull(atRisk.valueRounded) == 0) + ? "" + : atRisk.valueRounded + "%"; + + overdue.valueToShow = (this.helper.zeroIfNull(overdue.valueRounded) == 0) + ? "" + : overdue.valueRounded + "%"; + + onTime.valueToShow = (this.helper.zeroIfNull(onTime.valueRounded) == 0) + ? G_STRING['ID_INBOX'] + ' ' + G_STRING['ID_EMPTY'] + : onTime.valueRounded + "%"; + + classifyBar(atRisk); + classifyBar(overdue); + classifyBar(onTime); + + var widthToDivide = 100 - barsLessThanMin.length * minPercent; + var normalsSum = 0; + $.each (barsNormal, function() { + normalsSum += this.valueRounded; + }); + + $.each(barsNormal, function(key, bar) { + bar.width = widthToDivide * bar.valueRounded / normalsSum; + }); + + $.each(barsLessThanMin, function(key, bar) { + bar.width = minPercent; + }); + + data.percentageOverdueWidth = overdue.width; + data.percentageOnTimeWidth = onTime.width; + data.percentageAtRiskWidth = atRisk.width; + + data.percentageOverdueToShow = overdue.valueToShow; + data.percentageAtRiskToShow = atRisk.valueToShow; + data.percentageOnTimeToShow = onTime.valueToShow; +} + /*++++++++ FIRST LEVEL INDICATOR DATA +++++++++++++*/ ViewDashboardPresenter.prototype.getIndicatorData = function (indicatorId, indicatorType, initDate, endDate) { var that = this; diff --git a/workflow/engine/js/strategicDashboard/viewDashboardView.js b/workflow/engine/js/strategicDashboard/viewDashboardView.js index 8f564a432..c809cd7b2 100644 --- a/workflow/engine/js/strategicDashboard/viewDashboardView.js +++ b/workflow/engine/js/strategicDashboard/viewDashboardView.js @@ -195,6 +195,18 @@ WidgetBuilder.prototype.getIndicatorLoadedById = function (searchedIndicatorId) return retval; } +WidgetBuilder.prototype.getDashboardLoadedById = function (searchedDashboardId) { + var retval = null; + for (key in window.loadedDashboards) { + var dashboard = window.loadedDashboards[key]; + if (dashboard.id == searchedDashboardId) { + retval = dashboard; + } + } + if (retval == null) { throw new Error(searchedIndicatorId + " was not found in the loaded indicators.");} + return retval; +} + WidgetBuilder.prototype.buildGeneralIndicatorFirstView = function (indicatorData) { _.templateSettings.variable = "indicator"; var template = _.template ($("script.generalIndicatorMainPanel").html()); @@ -223,6 +235,7 @@ model = new ViewDashboardModel(token, urlProxy, ws[3]); presenter = new ViewDashboardPresenter(model); window.loadedIndicators = []; //updated in das-title-selector.click->fillIndicatorWidgets, ready->fillIndicatorWidgets +window.loadedDashboards = []; window.currentEntityData = null; window.currentIndicator = null;//updated in ind-button-selector.click ->loadIndicator, ready->loadIndicator window.currentDashboardId = null; @@ -354,6 +367,7 @@ $(document).ready(function() { .done(function(indicatorsVM) { fillIndicatorWidgets(indicatorsVM); loadIndicator(getFavoriteIndicator().id, defaultInitDate(), defaultEndDate()); + setActiveDashboard(); }); }); @@ -431,6 +445,15 @@ var selectDefaultMonthAndYear = function () { $('#year').val(compareYear); } +var setActiveDashboard = function () { + var builder = new WidgetBuilder(); + var dashboard = builder.getDashboardLoadedById(window.currentDashboardId); + if (dashboard == null) { + return; + } + $('#titleH4').text(dashboard.title); +} + var initialDraw = function () { selectDefaultMonthAndYear(); presenter.getUserDashboards(pageUserId) @@ -442,6 +465,7 @@ var initialDraw = function () { .done(function(indicatorsVM) { fillIndicatorWidgets(indicatorsVM); loadIndicator(getFavoriteIndicator().id, defaultInitDate(), defaultEndDate()); + setActiveDashboard(); }); }); } @@ -514,6 +538,7 @@ var fillDashboardsList = function (presenterData) { } _.templateSettings.variable = "dashboard"; var template = _.template ($("script.dashboardButtonTemplate").html()) + window.loadedDashboards = presenterData; for (key in presenterData) { var dashboard = presenterData[key]; $('#dashboardsList').append(template(dashboard)); diff --git a/workflow/engine/templates/strategicDashboard/viewDashboard.html b/workflow/engine/templates/strategicDashboard/viewDashboard.html index 5a52d4d68..73e8c6c2f 100644 --- a/workflow/engine/templates/strategicDashboard/viewDashboard.html +++ b/workflow/engine/templates/strategicDashboard/viewDashboard.html @@ -360,7 +360,7 @@ -

{translate label="ID_MANAGERS_DASHBOARDS"}

+

From 1d95ebdc155e722984c5e3421b5f11e21e9d33ef Mon Sep 17 00:00:00 2001 From: Dante Date: Tue, 5 May 2015 11:08:15 -0400 Subject: [PATCH 02/14] status empty Solved --- .../engine/js/strategicDashboard/viewDashboardPresenter.js | 7 ++++++- .../engine/templates/strategicDashboard/viewDashboard.html | 6 +++--- workflow/public_html/css/general.css | 2 +- workflow/public_html/css/gridstack.css | 2 +- workflow/public_html/css/sb-admin-2.css | 3 ++- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/workflow/engine/js/strategicDashboard/viewDashboardPresenter.js b/workflow/engine/js/strategicDashboard/viewDashboardPresenter.js index fe27124ad..425794764 100644 --- a/workflow/engine/js/strategicDashboard/viewDashboardPresenter.js +++ b/workflow/engine/js/strategicDashboard/viewDashboardPresenter.js @@ -179,7 +179,7 @@ ViewDashboardPresenter.prototype.setStatusButtonWidthsAndDisplayValues = functio : overdue.valueRounded + "%"; onTime.valueToShow = (this.helper.zeroIfNull(onTime.valueRounded) == 0) - ? G_STRING['ID_INBOX'] + ' ' + G_STRING['ID_EMPTY'] + ? "" : onTime.valueRounded + "%"; classifyBar(atRisk); @@ -200,6 +200,11 @@ ViewDashboardPresenter.prototype.setStatusButtonWidthsAndDisplayValues = functio bar.width = minPercent; }); + if (atRisk.valueToShow == 0 && overdue.valueToShow == 0 && onTime.valueToShow == 0) { + onTime.valueToShow = G_STRING['ID_INBOX'] + ' ' + G_STRING['ID_EMPTY']; + onTime.width = 100; + } + data.percentageOverdueWidth = overdue.width; data.percentageOnTimeWidth = onTime.width; data.percentageAtRiskWidth = atRisk.width; diff --git a/workflow/engine/templates/strategicDashboard/viewDashboard.html b/workflow/engine/templates/strategicDashboard/viewDashboard.html index 73e8c6c2f..de43ee202 100644 --- a/workflow/engine/templates/strategicDashboard/viewDashboard.html +++ b/workflow/engine/templates/strategicDashboard/viewDashboard.html @@ -64,7 +64,7 @@
- - -