gtmtech-crypto 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 78ed8270eb639f0c6bd3f0e8e9eb246be3d6d5ca
4
- data.tar.gz: 577a3a6572ff24224185a41051f19e5f7bb334fb
3
+ metadata.gz: 9249ed0680a98415b65c2c8a4b0a2a09757c6f39
4
+ data.tar.gz: fc6c53c8576ce6a614f9a8e4e47ff6b8a3b28280
5
5
  SHA512:
6
- metadata.gz: 5aae2d5056eb65275f79d34389d8ae5020e816ce1fbdd131b78853ae1895692a495f984681a0c95fa1ee75d05118ccfbb615de9a2d066bdbb2d987287d8b2ebd
7
- data.tar.gz: 37640e9619beebfcdceae491a6e0da454466ed671d5e3aab3cc4d1c69dbf8696b0596f57ade724a518f4e1adbf50fde4706f0d80ccbf177156d36ce0dc639729
6
+ metadata.gz: b169a5d180010831985fe0a5272f479ac5dc64d56a5018258fa46613e25617541c7b62f5435facef4a5aa15a167fc1e1cea545212471b6c83ff4d8f27bf85e4d
7
+ data.tar.gz: 0666c0d29a85d7439032af75fa5d5e50520cae9a0af5b3b175692b9a3c57a978f86f8275fd8eddb034217a9b4e464e315da7322e91af31d6cd35066ada588907
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "gtmtech-crypto"
7
- gem.version = "0.0.6"
7
+ gem.version = "0.0.7"
8
8
  gem.description = "Simple tool for accounting of cryptocurrencies"
9
9
  gem.summary = "Simple tool for accounting of cryptocurrencies"
10
10
  gem.author = "Geoff Meakin"
@@ -89,30 +89,58 @@ module Gtmtech
89
89
  printf("%-20s %-10s %-20s\n", "account", "currency", "amount")
90
90
  puts "-" * 120
91
91
  fees = {}
92
+ currencies = {}
92
93
  @@document[ "accounts" ].each do | name, account_info |
93
94
  account_info[ "currencies" ].sort.each do | currency |
94
95
  decimal = "0.0"
95
96
  @@document[ "transactions" ].each do |id, txn|
97
+ # explicit fees
96
98
  if txn[ "fees_account" ] == name and txn[ "fees_currency" ] == currency
97
99
  decimal = Utils.decimal_minus( decimal, txn[ "fees_amount" ] )
98
100
  unless fees.key? currency
99
101
  fees[ currency ] = "0.0"
100
102
  end
101
- fees[ currency ] = Utils.decimal_add( fees[currency], txn[ "fees_amount" ])
103
+ fees[ currency ] = Utils.decimal_add( fees[ currency ], txn[ "fees_amount" ])
102
104
  end
105
+
106
+ # account reconciliation
103
107
  if txn[ "source_account" ] == name and txn[ "source_currency" ] == currency
104
108
  decimal = Utils.decimal_minus( decimal, txn[ "source_amount" ] )
109
+
110
+ # implicit fees
111
+ if txn[ "source_currency" ] == txn[ "dest_currency" ] and txn[ "source_amount" ] != txn[ "dest_amount" ]
112
+ implicit_fees = Utils.decimal_minus( txn[ "source_amount" ], txn[ "dest_amount" ] )
113
+ unless fees.key? currency
114
+ fees[ currency ] = "0.0"
115
+ end
116
+ fees[ currency ] = Utils.decimal_add( fees[ currency ], implicit_fees )
117
+ end
118
+
105
119
  end
106
120
  if txn[ "dest_account" ] == name and txn[ "dest_currency" ] == currency
107
121
  decimal = Utils.decimal_add( decimal, txn[ "dest_amount" ] )
108
122
  end
109
123
  end
124
+ unless currencies.key? currency
125
+ currencies[ currency ] = "0.0"
126
+ end
127
+ currencies[ currency ] = Utils.decimal_add( currencies[ currency ], decimal )
110
128
  printf( "%-20s %-10s %-20s\n", name, currency, decimal )
111
129
  end
112
130
  end
113
131
  fees.keys.sort.each do |currency|
132
+ unless currencies.key? currency
133
+ currencies[ currency ] = "0.0"
134
+ end
135
+ currencies[ currency ] = Utils.decimal_add( currencies[ currency ], fees[ currency ] )
114
136
  printf( "%-20s %-10s %-20s\n", "**FEES**", currency, fees[ currency ] )
115
137
  end
138
+ puts ""
139
+ printf( "%-10s %-20s\n", "currency", "reconciliation" )
140
+ puts "-" * 120
141
+ currencies.keys.sort.each do |currency|
142
+ printf( "%-10s %-20s\n", currency, currencies[ currency ] )
143
+ end
116
144
  end
117
145
 
118
146
  def self.save
@@ -0,0 +1,41 @@
1
+ require 'gtmtech/crypto/subcommand'
2
+
3
+ module Gtmtech
4
+ module Crypto
5
+ module Subcommands
6
+
7
+ class Reconcile < Subcommand
8
+
9
+ def self.description
10
+ "reconcile transactions"
11
+ end
12
+
13
+ def self.usage
14
+ <<-EOS
15
+ Usage (crypto #{self.prettyname})
16
+
17
+ crypto #{self.prettyname}
18
+ - reconcile all transactions
19
+
20
+ Options:
21
+ EOS
22
+ end
23
+
24
+ def self.options
25
+ []
26
+ end
27
+
28
+ def self.reconcile
29
+ Data.load
30
+ Data.reconcile_transactions
31
+ end
32
+
33
+ def self.execute
34
+ self.reconcile
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -109,11 +109,6 @@ EOS
109
109
  Data.save
110
110
  end
111
111
 
112
- def self.reconcile
113
- Data.load
114
- Data.reconcile_transactions
115
- end
116
-
117
112
  def self.execute
118
113
  verb = ARGV.shift
119
114
  case verb.downcase
@@ -123,8 +118,6 @@ EOS
123
118
  self.list
124
119
  when "delete"
125
120
  self.delete
126
- when "reconcile"
127
- self.reconcile
128
121
  else
129
122
  self.error "transaction takes an action [new, list, delete] . See --help for more info"
130
123
  end
@@ -1,7 +1,7 @@
1
1
  module Gtmtech
2
2
  module Crypto
3
3
 
4
- VERSION = "0.0.6"
4
+ VERSION = "0.0.7"
5
5
  DESCRIPTION = "crypto is a cli tool for simple accounting of cryptocurrencies"
6
6
 
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gtmtech-crypto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geoff Meakin
@@ -46,6 +46,7 @@ files:
46
46
  - lib/gtmtech/crypto/subcommand.rb
47
47
  - lib/gtmtech/crypto/subcommands/account.rb
48
48
  - lib/gtmtech/crypto/subcommands/help.rb
49
+ - lib/gtmtech/crypto/subcommands/reconcile.rb
49
50
  - lib/gtmtech/crypto/subcommands/txn.rb
50
51
  - lib/gtmtech/crypto/subcommands/unknown_command.rb
51
52
  - lib/gtmtech/crypto/subcommands/version.rb