2015-06-11 09:33:03 -04:00
|
|
|
var TimeSeriesPresenter = function (model) {
|
|
|
|
|
var that = this;
|
|
|
|
|
this.helper = new ViewDashboardHelper();
|
|
|
|
|
this.model = model;
|
|
|
|
|
};
|
|
|
|
|
|
2015-06-12 10:24:35 -04:00
|
|
|
TimeSeriesPresenter.prototype.initializePresenter = function (dashboardId) {
|
2015-06-11 09:33:03 -04:00
|
|
|
var that = this;
|
|
|
|
|
var requestFinished = $.Deferred();
|
2015-06-12 10:24:35 -04:00
|
|
|
$.when (this.fillIndicatorList(dashboardId))
|
2015-06-11 09:33:03 -04:00
|
|
|
.done(function () {
|
2015-06-12 10:24:35 -04:00
|
|
|
that.periodicityState = {selValue: that.model.periodicityList()[0],
|
|
|
|
|
list: that.model.periodicityList(),
|
|
|
|
|
label: that.model.label('ID_PERIODICITY') + ": "
|
|
|
|
|
};
|
2015-06-11 09:33:03 -04:00
|
|
|
|
|
|
|
|
that.initPeriodState = {selValue:that.model.monthList()[0].value,
|
|
|
|
|
list:that.model.monthList(),
|
2015-06-12 10:24:35 -04:00
|
|
|
visible:true,
|
|
|
|
|
label: that.model.label('ID_FROM') + ": "
|
|
|
|
|
};
|
2015-06-11 09:33:03 -04:00
|
|
|
|
|
|
|
|
that.initYearState = {selValue : that.model.yearList() [0].value,
|
2015-06-12 10:24:35 -04:00
|
|
|
list : that.model.yearList(),
|
|
|
|
|
label: that.model.label('ID_YEAR') + ": "
|
|
|
|
|
};
|
2015-06-11 09:33:03 -04:00
|
|
|
|
|
|
|
|
that.endPeriodState = {selValue : that.model.defaultEndDate().getMonth() + 1,
|
|
|
|
|
list : that.model.monthList(),
|
2015-06-12 10:24:35 -04:00
|
|
|
visible:true,
|
|
|
|
|
label: that.model.label('ID_TO') + ": "
|
|
|
|
|
};
|
2015-06-11 09:33:03 -04:00
|
|
|
|
|
|
|
|
that.endYearState = { selValue : that.model.yearList() [0].value,
|
2015-06-12 10:24:35 -04:00
|
|
|
list : that.model.yearList(),
|
|
|
|
|
label: that.model.label('ID_YEAR') + ": "
|
|
|
|
|
};
|
2015-06-11 09:33:03 -04:00
|
|
|
|
|
|
|
|
that.initDate = that.model.defaultInitDate();
|
|
|
|
|
that.endDate = that.model.defaultEndDate();
|
|
|
|
|
|
|
|
|
|
requestFinished.resolve(true);
|
|
|
|
|
});
|
|
|
|
|
return requestFinished.promise();
|
|
|
|
|
};
|
|
|
|
|
|
2015-06-12 10:24:35 -04:00
|
|
|
TimeSeriesPresenter.prototype.fillIndicatorList = function (dashboardId) {
|
2015-06-11 09:33:03 -04:00
|
|
|
var requestFinished = $.Deferred();
|
|
|
|
|
var that = this;
|
|
|
|
|
var dummyDate = this.helper.date2MysqlString(new Date());
|
2015-06-12 10:24:35 -04:00
|
|
|
that.indicatorList(dashboardId, dummyDate, dummyDate)
|
2015-06-11 09:33:03 -04:00
|
|
|
.done(function(modelData){
|
|
|
|
|
if (modelData== null || modelData.length == 0) {
|
2015-06-12 10:24:35 -04:00
|
|
|
that.indicatorState = {selValue: null,
|
|
|
|
|
list: [],
|
|
|
|
|
label: that.model.label('ID_INDICATOR') + ": "
|
|
|
|
|
};
|
2015-06-11 09:33:03 -04:00
|
|
|
}
|
|
|
|
|
else {
|
2015-06-12 10:24:35 -04:00
|
|
|
that.indicatorState = {selValue: modelData[0].value,
|
|
|
|
|
list: modelData,
|
|
|
|
|
label: that.model.label('ID_INDICATOR') + ": "
|
|
|
|
|
};
|
2015-06-11 09:33:03 -04:00
|
|
|
}
|
|
|
|
|
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());
|
|
|
|
|
this.model.indicatorList(dashboardId, dummyDate, dummyDate).done(function (data) {
|
|
|
|
|
var newArray = [];
|
|
|
|
|
$.each(data, function(index, originalObject) {
|
|
|
|
|
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:
|
2015-06-12 10:24:35 -04:00
|
|
|
this.changePeriodicityToMonth(this.model.monthList());
|
2015-06-11 09:33:03 -04:00
|
|
|
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;
|
2015-06-18 10:25:57 -04:00
|
|
|
this.endPeriodState.selValue = this.periodEquivalentFromDate (this.helper.ReportingPeriodicityEnum.MONTH, new Date());
|
2015-06-11 09:33:03 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TimeSeriesPresenter.prototype.changePeriodicityToQuarter = function (quarterList) {
|
|
|
|
|
this.initPeriodState.list = quarterList;
|
|
|
|
|
this.endPeriodState.list = quarterList;
|
|
|
|
|
this.initPeriodState.visible = true;
|
|
|
|
|
this.endPeriodState.visible = true;
|
2015-06-18 10:25:57 -04:00
|
|
|
this.endPeriodState.selValue = this.periodEquivalentFromDate (this.helper.ReportingPeriodicityEnum.QUARTER, new Date());
|
2015-06-11 09:33:03 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TimeSeriesPresenter.prototype.changePeriodicityToSemester = function (semesterList) {
|
|
|
|
|
this.initPeriodState.list = semesterList;
|
|
|
|
|
this.endPeriodState.list = semesterList;
|
|
|
|
|
this.initPeriodState.visible = true;
|
|
|
|
|
this.endPeriodState.visible = true;
|
2015-06-18 10:25:57 -04:00
|
|
|
this.endPeriodState.selValue = this.periodEquivalentFromDate (this.helper.ReportingPeriodicityEnum.SEMESTER, new Date());
|
2015-06-11 09:33:03 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TimeSeriesPresenter.prototype.changePeriodicityToYear = function (yearList) {
|
|
|
|
|
this.initPeriodState.list = [];
|
|
|
|
|
this.endPeriodState.list = [];
|
|
|
|
|
this.initPeriodState.visible = false;
|
|
|
|
|
this.endPeriodState.visible = false;
|
2015-06-18 10:25:57 -04:00
|
|
|
this.endPeriodState.selValue = this.periodEquivalentFromDate (this.helper.ReportingPeriodicityEnum.YEAR, new Date());
|
2015-06-11 09:33:03 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TimeSeriesPresenter.prototype.historicData = function (indicator, periodicity, initPeriod,
|
|
|
|
|
initYear, endPeriod, endYear) {
|
|
|
|
|
var that = this;
|
|
|
|
|
var requestFinished = $.Deferred();
|
|
|
|
|
var initDate = this.periodInitDate(periodicity, initPeriod, initYear);
|
|
|
|
|
var endDate = this.periodEndDate(periodicity, endPeriod, endYear);
|
|
|
|
|
this.model.historicData(indicator, periodicity, initDate, endDate).done(function (data) {
|
|
|
|
|
var graphData = [];
|
|
|
|
|
$.each(data, function(index, originalObject) {
|
2015-06-18 10:25:57 -04:00
|
|
|
var newObject = {datalabel: that.periodColumnName(periodicity, originalObject) + '/' + originalObject['YEAR'],
|
2015-06-11 09:33:03 -04:00
|
|
|
value: originalObject.VALUE
|
|
|
|
|
}
|
|
|
|
|
graphData.push(newObject);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
requestFinished.resolve(graphData);
|
|
|
|
|
});
|
|
|
|
|
return requestFinished.promise();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2015-06-18 10:25:57 -04:00
|
|
|
TimeSeriesPresenter.prototype.periodColumnName = function (periodicity, object) {
|
2015-06-11 09:33:03 -04:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-18 10:25:57 -04:00
|
|
|
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.periodInitDate (periodicity, i, year);
|
|
|
|
|
var periodEndDate = this.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.periodInitDate (periodicity, i, year);
|
|
|
|
|
var periodEndDate = this.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.periodInitDate (periodicity, i, year);
|
|
|
|
|
var periodEndDate = this.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;
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-11 09:33:03 -04:00
|
|
|
TimeSeriesPresenter.prototype.periodInitDate = function (periodicity, period, year) {
|
|
|
|
|
var retval = null;
|
|
|
|
|
switch (periodicity * 1) {
|
|
|
|
|
case this.helper.ReportingPeriodicityEnum.MONTH:
|
|
|
|
|
retval = new Date(year, period - 1, 1);
|
|
|
|
|
break;
|
|
|
|
|
case this.helper.ReportingPeriodicityEnum.QUARTER:
|
|
|
|
|
retval = new Date(year, 3 * (period-1), 1);
|
|
|
|
|
break;
|
|
|
|
|
case this.helper.ReportingPeriodicityEnum.SEMESTER:
|
|
|
|
|
retval = new Date(year, 6 * (period-1), 1);
|
|
|
|
|
break;
|
|
|
|
|
case this.helper.ReportingPeriodicityEnum.YEAR:
|
|
|
|
|
retval = new Date(year, 0, 1);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (retval == null) {
|
|
|
|
|
throw new Error("The periodicity " + periodicity + " is not supported.");
|
|
|
|
|
}
|
|
|
|
|
return retval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TimeSeriesPresenter.prototype.periodEndDate = function (periodicity, period, year) {
|
|
|
|
|
var retval = null;
|
|
|
|
|
switch (periodicity * 1) {
|
|
|
|
|
case this.helper.ReportingPeriodicityEnum.MONTH:
|
|
|
|
|
retval = new Date(year, period, 0);
|
|
|
|
|
break;
|
|
|
|
|
case this.helper.ReportingPeriodicityEnum.QUARTER:
|
|
|
|
|
retval = new Date(year, 3 * (period), 0);
|
|
|
|
|
break;
|
|
|
|
|
case this.helper.ReportingPeriodicityEnum.SEMESTER:
|
|
|
|
|
retval = new Date(year, 6 * (period), 0);
|
|
|
|
|
break;
|
|
|
|
|
case this.helper.ReportingPeriodicityEnum.YEAR:
|
|
|
|
|
retval = new Date(year, 11, 31);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (retval == null) {
|
|
|
|
|
throw new Error("The periodicity " + periodicity + " is not supported.");
|
|
|
|
|
}
|
|
|
|
|
return retval;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|