2017-06-04 16:01:42 -04:00
|
|
|
var ImportConstants = require('../constants/ImportConstants');
|
|
|
|
|
|
|
|
var models = require('../models.js');
|
|
|
|
var OFXDownload = models.OFXDownload;
|
|
|
|
var Error = models.Error;
|
|
|
|
|
|
|
|
function beginImport() {
|
|
|
|
return {
|
|
|
|
type: ImportConstants.BEGIN_IMPORT
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function updateProgress(progress) {
|
|
|
|
return {
|
|
|
|
type: ImportConstants.UPDATE_IMPORT_PROGRESS,
|
|
|
|
progress: progress
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function importFinished() {
|
|
|
|
return {
|
|
|
|
type: ImportConstants.IMPORT_FINISHED
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function importFailed(error) {
|
|
|
|
return {
|
|
|
|
type: ImportConstants.IMPORT_FAILED,
|
|
|
|
error: error
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function openModal() {
|
|
|
|
return function(dispatch) {
|
|
|
|
dispatch({
|
|
|
|
type: ImportConstants.OPEN_IMPORT_MODAL
|
|
|
|
});
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function closeModal() {
|
|
|
|
return function(dispatch) {
|
|
|
|
dispatch({
|
|
|
|
type: ImportConstants.CLOSE_IMPORT_MODAL
|
|
|
|
});
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function importOFX(account, password, startDate, endDate) {
|
|
|
|
return function(dispatch) {
|
|
|
|
dispatch(beginImport());
|
|
|
|
dispatch(updateProgress(50));
|
|
|
|
|
|
|
|
var ofxdownload = new OFXDownload();
|
|
|
|
ofxdownload.OFXPassword = password;
|
|
|
|
ofxdownload.StartDate = startDate;
|
|
|
|
ofxdownload.EndDate = endDate;
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
type: "POST",
|
2017-11-13 20:49:26 -05:00
|
|
|
contentType: "application/json",
|
2017-06-04 16:01:42 -04:00
|
|
|
dataType: "json",
|
2017-11-11 08:05:09 -05:00
|
|
|
url: "v1/accounts/"+account.AccountId+"/imports/ofx",
|
2017-11-13 20:48:19 -05:00
|
|
|
data: ofxdownload.toJSON(),
|
2017-06-04 16:01:42 -04:00
|
|
|
success: function(data, status, jqXHR) {
|
|
|
|
var e = new Error();
|
|
|
|
e.fromJSON(data);
|
|
|
|
if (e.isError()) {
|
|
|
|
var errString = e.ErrorString;
|
|
|
|
if (e.ErrorId == 3 /* Invalid Request */) {
|
|
|
|
errString = "Please check that your password and all other OFX login credentials are correct.";
|
|
|
|
}
|
|
|
|
dispatch(importFailed(errString));
|
|
|
|
} else {
|
|
|
|
dispatch(importFinished());
|
|
|
|
}
|
|
|
|
},
|
|
|
|
error: function(jqXHR, status, error) {
|
|
|
|
dispatch(importFailed(error));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function importFile(url, inputElement) {
|
|
|
|
return function(dispatch) {
|
|
|
|
dispatch(beginImport());
|
|
|
|
|
|
|
|
if (inputElement.files.length == 0) {
|
|
|
|
dispatch(importFailed("No files specified to be imported"))
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (inputElement.files.length > 1) {
|
|
|
|
dispatch(importFailed("More than one file specified for import, only one allowed at a time"))
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
var file = inputElement.files[0];
|
|
|
|
var formData = new FormData();
|
|
|
|
formData.append('importfile', file, file.name);
|
|
|
|
|
|
|
|
var handleSetProgress = function(e) {
|
|
|
|
if (e.lengthComputable) {
|
|
|
|
var pct = Math.round(e.loaded/e.total*100);
|
|
|
|
dispatch(updateProgress(pct));
|
|
|
|
} else {
|
|
|
|
dispatch(updateProgress(50));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
type: "POST",
|
|
|
|
url: url,
|
|
|
|
data: formData,
|
|
|
|
xhr: function() {
|
|
|
|
var xhrObject = $.ajaxSettings.xhr();
|
|
|
|
if (xhrObject.upload) {
|
|
|
|
xhrObject.upload.addEventListener('progress', handleSetProgress, false);
|
|
|
|
} else {
|
|
|
|
dispatch(importFailed("File upload failed because xhr.upload isn't supported by your browser."));
|
|
|
|
}
|
|
|
|
return xhrObject;
|
|
|
|
},
|
|
|
|
success: function(data, status, jqXHR) {
|
|
|
|
var e = new Error();
|
|
|
|
e.fromJSON(data);
|
|
|
|
if (e.isError()) {
|
|
|
|
var errString = e.ErrorString;
|
|
|
|
if (e.ErrorId == 3 /* Invalid Request */) {
|
|
|
|
errString = "Please check that the file you uploaded is valid and try again.";
|
|
|
|
}
|
|
|
|
dispatch(importFailed(errString));
|
|
|
|
} else {
|
|
|
|
dispatch(importFinished());
|
|
|
|
}
|
|
|
|
},
|
|
|
|
error: function(jqXHR, status, error) {
|
|
|
|
dispatch(importFailed(error));
|
|
|
|
},
|
|
|
|
// So jQuery doesn't try to process the data or content-type
|
|
|
|
cache: false,
|
|
|
|
contentType: false,
|
|
|
|
processData: false
|
|
|
|
});
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function importOFXFile(inputElement, account) {
|
2017-11-11 08:05:09 -05:00
|
|
|
var url = "v1/accounts/"+account.AccountId+"/imports/ofxfile";
|
2017-06-04 16:01:42 -04:00
|
|
|
return importFile(url, inputElement);
|
|
|
|
}
|
|
|
|
|
|
|
|
function importGnucash(inputElement) {
|
2017-11-11 08:05:09 -05:00
|
|
|
var url = "v1/imports/gnucash";
|
2017-06-04 16:01:42 -04:00
|
|
|
return importFile(url, inputElement);
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
openModal: openModal,
|
|
|
|
closeModal: closeModal,
|
|
|
|
importOFX: importOFX,
|
|
|
|
importOFXFile: importOFXFile,
|
|
|
|
importGnucash: importGnucash
|
|
|
|
};
|