-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaccount-module.gs
53 lines (40 loc) · 1.25 KB
/
account-module.gs
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
/**
@author: Jeancarlo Fontalvo
@description: Account helpers and classes for data reporting for this accounting app ♥
*/
var accountModule = {};
(function(_){
accountModule.Nature = {
Debit: 1,
Credit: -1
}
/**
@class Account
*/
accountModule.Account = function(code, name, nature){
var self = this;
if( typeof code === "undefined" || typeof name === "undefined" )
throw "Must specify the code and name for the account";
self.code = code;
self.name = name;
self.nature = nature || accountModule.Nature.Debit;
var debits = [];
var credits = [];
self.addDebit = function(reference, value) {
debits.push( { reference : value } );
}
self.addCredit = function(reference, value) {
credits.push( { reference : value } );
}
self.getDebit = function(reference) {
return _.find(debits, { "reference": reference });
}
self.getCredit = function(reference) {
return _.find(credits, { "reference": reference });
}
self.getResidue = function() {
var residue = _.sumBy( self.debits, "reference" ) - _.sumBy( self.credits, "reference" );
return residue * Nature.Debit;
}
}
})(getLodash())