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

278 lines
8.9 KiB
JavaScript

var TimeSeriesPresenter = function (model) {
var that = this;
this.helper = new ViewDashboardHelper();
this.model = model;
};
TimeSeriesPresenter.prototype.initializePresenter = function (dashboardId) {
var that = this;
var requestFinished = $.Deferred();
$.when (this.fillIndicatorList(dashboardId))
.done(function () {
that.periodicityState = {selValue: that.model.periodicityList()[0],
list: that.model.periodicityList(),
label: that.model.label('ID_PERIODICITY') + ": "
};
that.initPeriodState = {selValue:that.model.monthList()[0].value,
list:that.model.monthList(),
visible:true,
label: that.model.label('ID_FROM') + ": "
};
that.initYearState = {selValue : that.model.yearList() [0].value,
list : that.model.yearList(),
label: that.model.label('ID_YEAR') + ": "
};
that.endPeriodState = {selValue : that.model.defaultEndDate().getMonth() + 1,
list : that.model.monthList(),
visible:true,
label: that.model.label('ID_TO') + ": "
};
that.endYearState = { selValue : that.model.yearList() [0].value,
list : that.model.yearList(),
label: that.model.label('ID_YEAR') + ": "
};
that.initDate = that.model.defaultInitDate();
that.endDate = that.model.defaultEndDate();
requestFinished.resolve(true);
});
return requestFinished.promise();
};
TimeSeriesPresenter.prototype.fillIndicatorList = function (dashboardId) {
var requestFinished = $.Deferred();
var that = this;
var dummyDate = this.helper.date2MysqlString(new Date());
that.indicatorList(dashboardId, dummyDate, dummyDate)
.done(function(modelData){
if (modelData== null || modelData.length == 0) {
that.indicatorState = {selValue: null,
list: [],
label: that.model.label('ID_INDICATOR') + ": "
};
}
else {
that.indicatorState = {selValue: modelData[0].value,
list: modelData,
label: that.model.label('ID_INDICATOR') + ": "
};
}
requestFinished.resolve(that.indicatorState);
});
return requestFinished.promise();
};
TimeSeriesPresenter.prototype.indicatorList = function (dashboardId) {
var that = this;
var requestFinished = $.Deferred();
var dummyDate = this.helper.date2MysqlString(new Date());
var indicatorsAllowed = [1010, 1030];
this.model.indicatorList(dashboardId, dummyDate, dummyDate).done(function (data) {
var newArray = [];
var list = data;
$.each(list, function(index, originalObject) {
if (indicatorsAllowed.indexOf(originalObject.DAS_IND_TYPE*1) >= 0) {
var newObject = {label: originalObject.DAS_IND_TITLE,
value: originalObject.DAS_IND_UID
}
newArray.push(newObject);
}
});
requestFinished.resolve(newArray);
});
return requestFinished.promise();
};
TimeSeriesPresenter.prototype.changePeriodicity = function (periodicity) {
var that = this;
var retval = this.monthList;
switch (periodicity * 1) {
case this.helper.ReportingPeriodicityEnum.MONTH:
this.changePeriodicityToMonth(this.model.monthList());
break;
case this.helper.ReportingPeriodicityEnum.QUARTER:
this.changePeriodicityToQuarter(this.model.quarterList());
break;
case this.helper.ReportingPeriodicityEnum.SEMESTER:
this.changePeriodicityToSemester(this.model.semesterList());
break;
case this.helper.ReportingPeriodicityEnum.YEAR:
this.changePeriodicityToYear(this.model.yearList());
break;
default:
break;
}
return this;
}
TimeSeriesPresenter.prototype.changePeriodicityToMonth = function (monthList) {
this.initPeriodState.list = monthList;
this.endPeriodState.list = monthList;
this.initPeriodState.visible = true;
this.endPeriodState.visible = true;
this.endPeriodState.selValue = this.periodEquivalentFromDate (this.helper.ReportingPeriodicityEnum.MONTH, new Date());
}
TimeSeriesPresenter.prototype.changePeriodicityToQuarter = function (quarterList) {
this.initPeriodState.list = quarterList;
this.endPeriodState.list = quarterList;
this.initPeriodState.visible = true;
this.endPeriodState.visible = true;
this.endPeriodState.selValue = this.periodEquivalentFromDate (this.helper.ReportingPeriodicityEnum.QUARTER, new Date());
}
TimeSeriesPresenter.prototype.changePeriodicityToSemester = function (semesterList) {
this.initPeriodState.list = semesterList;
this.endPeriodState.list = semesterList;
this.initPeriodState.visible = true;
this.endPeriodState.visible = true;
this.endPeriodState.selValue = this.periodEquivalentFromDate (this.helper.ReportingPeriodicityEnum.SEMESTER, new Date());
}
TimeSeriesPresenter.prototype.changePeriodicityToYear = function (yearList) {
this.initPeriodState.list = [];
this.endPeriodState.list = [];
this.initPeriodState.visible = false;
this.endPeriodState.visible = false;
this.endPeriodState.selValue = this.periodEquivalentFromDate (this.helper.ReportingPeriodicityEnum.YEAR, new Date());
}
TimeSeriesPresenter.prototype.historicData = function (indicator, periodicity, initPeriod,
initYear, endPeriod, endYear) {
var that = this;
var requestFinished = $.Deferred();
var initDate = this.helper.periodInitDate(periodicity, initPeriod, initYear);
var endDate = this.helper.periodEndDate(periodicity, endPeriod, endYear);
this.model.historicData(indicator, periodicity, initDate, endDate).done(function (data) {
var graphData = [];
var list = data;
$.each(list, function(index, originalObject) {
var newObject = {datalabel: that.periodColumnName(periodicity, originalObject) + '/' + originalObject['YEAR'],
value: originalObject.VALUE,
period: that.periodColumnName(periodicity, originalObject),
year: originalObject.YEAR
}
graphData.push(newObject);
});
for (var y = initYear; y <= endYear; y++) {
var periodRunFrom = (y == initYear) ? initPeriod : 1;
var periodRunTo = (y == endYear) ? endPeriod : that.periodsInAYear(periodicity);
for (var p = periodRunFrom; p <= periodRunTo; p++) {
var results = $.grep(graphData,
function(obj) {
return (obj.year == y && obj.period == p);
});
if (results.length == 0) {
var newObject = { datalabel: p + '/' + y,
value: 0,
period: p,
year: y
};
graphData.push(newObject);
}
}
}
graphData = graphData.sort(function (a, b) {
return (a.year * 10 + a.period * 1) - (b.year * 10 + b.period * 1);
});
requestFinished.resolve(graphData);
});
return requestFinished.promise();
}
TimeSeriesPresenter.prototype.periodsInAYear = function (periodicity) {
var retval = "";
switch (periodicity * 1) {
case this.helper.ReportingPeriodicityEnum.MONTH:
retval = 12
break;
case this.helper.ReportingPeriodicityEnum.QUARTER:
retval = 4;
break;
case this.helper.ReportingPeriodicityEnum.SEMESTER:
retval = 2;
break;
case this.helper.ReportingPeriodicityEnum.YEAR:
retval = 1;
break;
}
if (retval == "") {
throw new Error("The periodicity " + periodicity + " is not supported.");
}
return retval;
}
TimeSeriesPresenter.prototype.periodColumnName = function (periodicity, object) {
var retval = "";
switch (periodicity * 1) {
case this.helper.ReportingPeriodicityEnum.MONTH:
retval = object.MONTH;
break;
case this.helper.ReportingPeriodicityEnum.QUARTER:
retval = object.QUARTER;
break;
case this.helper.ReportingPeriodicityEnum.SEMESTER:
retval = object.SEMESTER;
break;
case this.helper.ReportingPeriodicityEnum.YEAR:
retval = object.YEAR;
break;
}
if (retval == "") {
throw new Error("The periodicity " + periodicity + " is not supported.");
}
return retval;
}
TimeSeriesPresenter.prototype.periodEquivalentFromDate = function (periodicity, date) {
var retval = null;
var year = date.getFullYear();
switch (periodicity * 1) {
case this.helper.ReportingPeriodicityEnum.MONTH:
for (var i = 1; i < 12; i++) {
var periodInitDate = this.helper.periodInitDate (periodicity, i, year);
var periodEndDate = this.helper.periodEndDate (periodicity, i, year);
if (periodInitDate <= date && periodEndDate >= date) {
retval = i;
}
}
break;
case this.helper.ReportingPeriodicityEnum.QUARTER:
for (var i = 1; i < 4; i++) {
var periodInitDate = this.helper.periodInitDate (periodicity, i, year);
var periodEndDate = this.helper.periodEndDate (periodicity, i, year);
if (periodInitDate <= date && periodEndDate >= date) {
retval = i;
}
}
break;
case this.helper.ReportingPeriodicityEnum.SEMESTER:
for (var i = 1; i < 2; i++) {
var periodInitDate = this.helper.periodInitDate (periodicity, i, year);
var periodEndDate = this.helper.periodEndDate (periodicity, i, year);
if (periodInitDate <= date && periodEndDate >= date) {
retval = i;
}
}
break;
case this.helper.ReportingPeriodicityEnum.YEAR:
retval = year
break;
}
if (retval == null) {
throw new Error("The periodicity " + periodicity + " is not supported.");
}
return retval;
}