-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathstats-module.js
75 lines (68 loc) · 2.09 KB
/
stats-module.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
68
69
70
71
72
73
74
75
'use strict';
var xdgBasedir = require('xdg-basedir');
var csv = require('fast-csv');
var fs = require('fs');
var numberIsNan = require('number-is-nan');
var clc = require('cli-color');
var Configstore = require('configstore');
var pkg = require('./package.json');
var conf = new Configstore(pkg.name);
function showStats () {
var expensesFilepath = xdgBasedir.data + '/wallet/expenses.csv';
var stream = fs.createReadStream(expensesFilepath);
var totalCredit = 0.0;
var totalDebit = 0.0;
var totalStashed = conf.get('stashed');
csv
.fromStream(stream)
.transform(function (data) {
return {
'date': data[0],
'reason': data[1],
'category': data[2],
'credit': numberIsNan(parseFloat(data[3])) ? 0.0 : parseFloat(data[3]),
'debit': numberIsNan(parseFloat(data[4])) ? 0.0 : parseFloat(data[4])
};
})
.on('data', function (data) {
totalDebit += data.debit;
totalCredit += data.credit;
})
.on('end', function () {
var result = [
'',
'Total Credit : ' + clc.blue(totalCredit),
'Total Debit : ' + clc.blue(totalDebit),
clc.green('Balance : ') + clc.blue(totalCredit - totalDebit),
clc.green('Stashed : ') + clc.blue(totalStashed),
''
].join('\n');
console.log(result);
});
}
function getBalance (cb) {
var expensesFilepath = xdgBasedir.data + '/wallet/expenses.csv';
var stream = fs.createReadStream(expensesFilepath);
var totalCredit = 0.0;
var totalDebit = 0.0;
csv
.fromStream(stream)
.transform(function (data) {
return {
'date': data[0],
'reason': data[1],
'category': data[2],
'credit': numberIsNan(parseFloat(data[3])) ? 0.0 : parseFloat(data[3]),
'debit': numberIsNan(parseFloat(data[4])) ? 0.0 : parseFloat(data[4])
};
})
.on('data', function (data) {
totalDebit += data.debit;
totalCredit += data.credit;
})
.on('end', function () {
cb(null, totalCredit - totalDebit);
});
}
exports.getBalance = getBalance;
exports.showStats = showStats;