-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
67 lines (62 loc) · 2.35 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
const scrape = require('./scrape');
const firefly = require('./fireflyOutput');
const csvOutput = require('./csvOutput');
const accounts = require('./accounts.json');
var fs = require('fs');
var parse = require('csv-parse/lib/sync');
var lastSync = require('./lastSync.json');
var existingTransactions = {};
function generateId(transaction) {
// replace last 4 chars of date with 0000
transaction.date = transaction.date.substring(0, transaction.date.length - 4) + '000Z';
return `${transaction.date}-${transaction.description}-${transaction.identifier}-${transaction.chargedAmount}`
}
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
// Read previous transactions
accounts.forEach(account => {
if (fs.existsSync(`./${account.niceName}.csv`)) {
var data = fs.readFileSync(`./${account.niceName}.csv`, 'utf8');
var parsedData = parse(data, { columns: true, delimiter: ',' });
parsedData.forEach(transaction => {
existingTransactions[generateId(transaction)] = transaction;
});
}
});
(async () => {
await Promise.all(accounts.filter(account => account.enabled).map(account => {
console.log(`Start scraping account ${account.niceName}`);
scrape.scrape({
niceName: account.niceName,
companyId: account.companyId,
startDate: addDays(new Date(lastSync[account.niceName]), -14),
combineInstallments: false,
showBrowser: true,
defaultTimeout: 60000,
accountNumber: account.accountNumber,
}, account.credentials)
.then(trans => {
trans = trans.filter(transaction => transaction.status != 'pending' && !(generateId(transaction) in existingTransactions));
console.log(`Found ${trans.length} transaction for account ${account.niceName}`);
return trans;})
.then(trans => csvOutput.writeToCsv(trans, `${account.niceName}.csv`))
.then(trans => firefly.addTransactions(trans, account.niceName))
.then(trans => {
if (trans.length > 0) {
lastSync[account.niceName] = new Date();
// store last account syncDate to file
fs.writeFile('lastSync.json', JSON.stringify(lastSync), { encoding: 'utf8', flag: 'w' }, (err) => {
if (err)
console.log(err);
else {
console.log("File written successfully\n");
}
});
}
return trans;
})
}));
})();