docparse-supplier-nge
Version:
process ngrid electric utility bill data for use in the docparse system
76 lines (72 loc) • 1.89 kB
JavaScript
var async = require('async');
var rk = require('required-keys');
module.exports = function (data, callback) {
var invoiceIDs = [];
var keys = ['upload', 'accountNumbers'];
var err = rk.truthySync(data, keys);
if (err) { return callback(err); }
var upload = data.upload;
var index = 0;
var processPage = data.processPage;
if (!processPage) {
processPage = require('./processPage');
}
var setMatches = data.setMatches;
if (!setMatches) {
setMatches = require('docparse-upload-set-matches');
}
var pages = upload.text_pages;
if (!pages || pages.length === 0) {
return callback([{
key: 'upload',
message: 'upload.text_pages must have length above 0',
value: upload.text_pages
}]);
}
async.forEachSeries(
upload.text_pages,
function (page, cb) {
var pageData = {
accountNumbers: data.accountNumbers,
upload: data.upload,
page: page
};
processPage(pageData, function (err, ids) {
index++;
if (err) {
return cb(err);
}
if (ids) {
addInvoiceIDs(invoiceIDs, ids);
}
cb();
});
}, function (err) {
if (err) { return callback(err); }
if (!invoiceIDs || invoiceIDs.length === 0) {
upload.parsed = true;
upload.save(function (err) {
if (err) { return callback(err); }
callback(null, upload);
});
}
var setData = {
upload: upload,
invoiceIDs: invoiceIDs
};
setMatches(setData, function (err, upload) {
if (err) { return callback(err); }
upload.parsed = true;
callback(null, upload);
});
});
};
function addInvoiceIDs(set, additions) {
for (var i in additions) {
var id = additions[i];
var index = set.indexOf(id);
if (index < 0) {
set.push(id);
}
}
}