moneygo/js/actions/ReportActions.js

241 lines
4.6 KiB
JavaScript

var ReportConstants = require('../constants/ReportConstants');
var ErrorActions = require('./ErrorActions');
var models = require('../models.js');
var Report = models.Report;
var Tabulation = models.Tabulation;
var Error = models.Error;
function fetchReports() {
return {
type: ReportConstants.FETCH_REPORTS
}
}
function reportsFetched(reports) {
return {
type: ReportConstants.REPORTS_FETCHED,
reports: reports
}
}
function createReport() {
return {
type: ReportConstants.CREATE_REPORT
}
}
function reportCreated(report) {
return {
type: ReportConstants.REPORT_CREATED,
report: report
}
}
function updateReport() {
return {
type: ReportConstants.UPDATE_REPORT
}
}
function reportUpdated(report) {
return {
type: ReportConstants.REPORT_UPDATED,
report: report
}
}
function removeReport() {
return {
type: ReportConstants.REMOVE_REPORT
}
}
function reportRemoved(reportId) {
return {
type: ReportConstants.REPORT_REMOVED,
reportId: reportId
}
}
function reportSelected(report) {
return {
type: ReportConstants.REPORT_SELECTED,
report: report
}
}
function tabulateReport(report) {
return {
type: ReportConstants.TABULATE_REPORT,
report: report
}
}
function reportTabulated(report, tabulation) {
return {
type: ReportConstants.REPORT_TABULATED,
report: report,
tabulation: tabulation
}
}
function selectionCleared() {
return {
type: ReportConstants.SELECTION_CLEARED
}
}
function seriesSelected(seriesTraversal) {
return {
type: ReportConstants.SERIES_SELECTED,
seriesTraversal: seriesTraversal
}
}
function fetchAll() {
return function (dispatch) {
dispatch(fetchReports());
$.ajax({
type: "GET",
dataType: "json",
url: "v1/reports/",
success: function(data, status, jqXHR) {
var e = new Error();
e.fromJSON(data);
if (e.isError()) {
dispatch(ErrorActions.serverError(e));
} else {
dispatch(reportsFetched(data.reports.map(function(json) {
var r = new Report();
r.fromJSON(json);
return r;
})));
}
},
error: function(jqXHR, status, error) {
dispatch(ErrorActions.ajaxError(error));
}
});
};
}
function create(report) {
return function (dispatch) {
dispatch(createReport());
$.ajax({
type: "POST",
contentType: "application/json",
dataType: "json",
url: "v1/reports/",
data: report.toJSON(),
success: function(data, status, jqXHR) {
var e = new Error();
e.fromJSON(data);
if (e.isError()) {
dispatch(ErrorActions.serverError(e));
} else {
var r = new Report();
r.fromJSON(data);
dispatch(reportCreated(r));
}
},
error: function(jqXHR, status, error) {
dispatch(ErrorActions.ajaxError(error));
}
});
};
}
function update(report) {
return function (dispatch) {
dispatch(updateReport());
$.ajax({
type: "PUT",
contentType: "application/json",
dataType: "json",
url: "v1/reports/"+report.ReportId+"/",
data: report.toJSON(),
success: function(data, status, jqXHR) {
var e = new Error();
e.fromJSON(data);
if (e.isError()) {
dispatch(ErrorActions.serverError(e));
} else {
var r = new Report();
r.fromJSON(data);
dispatch(reportUpdated(r));
dispatch(tabulate(r));
}
},
error: function(jqXHR, status, error) {
dispatch(ErrorActions.ajaxError(error));
}
});
};
}
function remove(report) {
return function(dispatch) {
dispatch(removeReport());
$.ajax({
type: "DELETE",
dataType: "json",
url: "v1/reports/"+report.ReportId+"/",
success: function(data, status, jqXHR) {
var e = new Error();
e.fromJSON(data);
if (e.isError()) {
dispatch(ErrorActions.serverError(e));
} else {
dispatch(reportRemoved(report.ReportId));
}
},
error: function(jqXHR, status, error) {
dispatch(ErrorActions.ajaxError(error));
}
});
};
}
function tabulate(report) {
return function (dispatch) {
dispatch(tabulateReport(report));
$.ajax({
type: "GET",
dataType: "json",
url: "v1/reports/"+report.ReportId+"/tabulations/",
success: function(data, status, jqXHR) {
var e = new Error();
e.fromJSON(data);
if (e.isError()) {
dispatch(ErrorActions.serverError(e));
} else {
var t = new Tabulation();
t.fromJSON(data);
dispatch(reportTabulated(report, t));
}
},
error: function(jqXHR, status, error) {
dispatch(ErrorActions.ajaxError(error));
}
});
};
}
module.exports = {
fetchAll: fetchAll,
create: create,
update: update,
remove: remove,
tabulate: tabulate,
select: reportSelected,
selectSeries: seriesSelected
};