uomi 0.2.16 → 0.2.17
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 +15 -0
- data/lib/generators/active_record/templates/migration.rb +9 -1
- data/lib/uomi/credit_note.rb +32 -0
- data/lib/uomi/invoice.rb +7 -2
- data/lib/uomi/version.rb +1 -1
- data/spec/lib/uomi/credit_note_spec.rb +26 -0
- metadata +102 -121
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OGJlNzE0NmYyNTIxZTEyZTQ2OTBlYWNkNTI0YzkyYjgxMDZlNDcyNw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NmQ0MzExZDNmMTU2YjZjZDdjMDY0MGQ4YzE0MzRkNWFlZTc5NmJmYQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ODc4NWRiY2ExMzlkZDM5NmExZWNhNjM3MTgyZjAyYzkwNGMzODBiZjEwMmZj
|
10
|
+
NDQxMmM1MDljZGNjZmRiYzYxODhkMjAzZTM0Nzc0YzMxM2NlOWU1OGM2YTIw
|
11
|
+
Y2NiNjZhNDE0MmNhZDBiZTAwYTgxYTUxM2I1MGIxNmVlYTFhMDE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YzVlNWQ0ZDFkOTJjZjQyYWY3ODIxNzkzZGUxNTg3MWQ5Y2VkODZkMzhiM2Ix
|
14
|
+
MzU0N2UzZWMwMzA0YTY4NGNiNmQxYTI3YTYzZjg0MzNiZjUzZWMwYzNmYTlj
|
15
|
+
MmRlYWYxMWYyMGRkMGEwYzAyNDEwZjg4ZjVmZDRmM2U1NzRlMTU=
|
@@ -20,6 +20,8 @@ class CreateUomiTables < ActiveRecord::Migration
|
|
20
20
|
t.timestamps
|
21
21
|
end
|
22
22
|
|
23
|
+
add_index(:uomi_line_items, :invoice_id)
|
24
|
+
|
23
25
|
create_table "uomi_transactions", :force => true do |t|
|
24
26
|
t.integer "invoice_id"
|
25
27
|
t.string "type"
|
@@ -27,6 +29,8 @@ class CreateUomiTables < ActiveRecord::Migration
|
|
27
29
|
t.timestamps
|
28
30
|
end
|
29
31
|
|
32
|
+
add_index(:uomi_transactions, :invoice_id)
|
33
|
+
|
30
34
|
create_table "uomi_invoices", :force => true do |t|
|
31
35
|
t.integer "seller_id"
|
32
36
|
t.integer "buyer_id"
|
@@ -46,6 +50,8 @@ class CreateUomiTables < ActiveRecord::Migration
|
|
46
50
|
t.string "reference"
|
47
51
|
t.timestamps
|
48
52
|
end
|
53
|
+
|
54
|
+
add_index(:uomi_payment_references, :invoice_id)
|
49
55
|
|
50
56
|
create_table "uomi_sellers", :force => true do |t|
|
51
57
|
t.integer "sellerable_id"
|
@@ -65,6 +71,8 @@ class CreateUomiTables < ActiveRecord::Migration
|
|
65
71
|
t.timestamps
|
66
72
|
end
|
67
73
|
|
74
|
+
add_index(:uomi_invoice_decorators, :invoice_id)
|
75
|
+
|
68
76
|
create_table "uomi_credit_note_invoices", :force => true do |t|
|
69
77
|
t.integer "invoice_id"
|
70
78
|
t.integer "credit_note_id"
|
@@ -81,4 +89,4 @@ class CreateUomiTables < ActiveRecord::Migration
|
|
81
89
|
|
82
90
|
end
|
83
91
|
|
84
|
-
end
|
92
|
+
end
|
data/lib/uomi/credit_note.rb
CHANGED
@@ -6,6 +6,24 @@ module Uomi
|
|
6
6
|
has_many :invoices, through: :credit_note_invoices
|
7
7
|
has_many :credit_note_credit_transactions, dependent: :destroy
|
8
8
|
|
9
|
+
workflow do
|
10
|
+
state :draft do
|
11
|
+
event :issue, transitions_to: :issued
|
12
|
+
event :void, transitions_to: :voided
|
13
|
+
end
|
14
|
+
|
15
|
+
state :issued do
|
16
|
+
event :settle, transitions_to: :settled
|
17
|
+
event :void, transitions_to: :voided
|
18
|
+
end
|
19
|
+
|
20
|
+
state :settled do
|
21
|
+
event :void, transitions_to: :voided
|
22
|
+
end
|
23
|
+
|
24
|
+
state :voided
|
25
|
+
end
|
26
|
+
|
9
27
|
def issue(issued_at = Time.now)
|
10
28
|
self.issued_at = issued_at
|
11
29
|
create_initial_transaction!
|
@@ -97,5 +115,19 @@ module Uomi
|
|
97
115
|
self.add_debit_transaction(amount: options[:amount])
|
98
116
|
CreditNoteCreditTransaction.create!(transaction: invoice.transactions.last, credit_note_id: self.id)
|
99
117
|
end
|
118
|
+
|
119
|
+
def void
|
120
|
+
annul_remaining_amount! unless self.draft?
|
121
|
+
reverse_transactions_against_invoice
|
122
|
+
self
|
123
|
+
end
|
124
|
+
|
125
|
+
def reverse_transactions_against_invoice
|
126
|
+
credit_note_credit_transactions.each do |cnct|
|
127
|
+
invoice = cnct.transaction.invoice
|
128
|
+
invoice.add_debit_transaction(amount: cnct.transaction.amount)
|
129
|
+
invoice.save!
|
130
|
+
end
|
131
|
+
end
|
100
132
|
end
|
101
133
|
end
|
data/lib/uomi/invoice.rb
CHANGED
@@ -27,7 +27,10 @@ module Uomi
|
|
27
27
|
event :void, transitions_to: :voided
|
28
28
|
end
|
29
29
|
|
30
|
-
state :settled
|
30
|
+
state :settled do
|
31
|
+
event :unsettle, transitions_to: :issued
|
32
|
+
end
|
33
|
+
|
31
34
|
state :voided
|
32
35
|
end
|
33
36
|
|
@@ -102,8 +105,10 @@ module Uomi
|
|
102
105
|
end
|
103
106
|
|
104
107
|
def calculate_balance
|
105
|
-
|
108
|
+
bal = (0 - debit_transactions.sum(&:amount)) + credit_transactions.sum(&:amount)
|
109
|
+
self.balance = bal
|
106
110
|
settle! if should_settle?
|
111
|
+
unsettle! if (bal < 0 && settled?)
|
107
112
|
end
|
108
113
|
|
109
114
|
def should_settle?
|
data/lib/uomi/version.rb
CHANGED
@@ -216,6 +216,32 @@ describe Uomi::CreditNote do
|
|
216
216
|
t = @credit_note.credit_note_credit_transactions.last
|
217
217
|
t.transaction.invoice.should == @invoice2
|
218
218
|
end
|
219
|
+
|
220
|
+
context "Void the credit note" do
|
221
|
+
before(:each) do
|
222
|
+
@credit_note.void!
|
223
|
+
@credit_note.reload
|
224
|
+
@invoice1.reload
|
225
|
+
@invoice2.reload
|
226
|
+
end
|
227
|
+
|
228
|
+
it "Credit note should be voided" do
|
229
|
+
@credit_note.should be_voided
|
230
|
+
end
|
231
|
+
|
232
|
+
it "Invoice 1 should not be settled" do
|
233
|
+
@invoice1.should_not be_settled
|
234
|
+
end
|
235
|
+
|
236
|
+
it "invoice 2 should not be settled" do
|
237
|
+
@invoice2.should_not be_settled
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should still keep the links between credit notes and invoices for history" do
|
241
|
+
@invoice1.credit_notes.should == [@credit_note]
|
242
|
+
@invoice2.credit_notes.should == [@credit_note]
|
243
|
+
end
|
244
|
+
end
|
219
245
|
end
|
220
246
|
end
|
221
247
|
end
|
metadata
CHANGED
@@ -1,132 +1,122 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: uomi
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
segments:
|
6
|
-
- 0
|
7
|
-
- 2
|
8
|
-
- 16
|
9
|
-
version: 0.2.16
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.17
|
10
5
|
platform: ruby
|
11
|
-
authors:
|
6
|
+
authors:
|
12
7
|
- Douglas Anderson
|
13
8
|
- Jeffrey van Aswegen
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2015-02-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: activesupport
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ! '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
32
21
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: activerecord
|
36
22
|
prerelease: false
|
37
|
-
|
38
|
-
|
39
|
-
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ! '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: activerecord
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
40
32
|
- - ~>
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
- 3
|
44
|
-
- 0
|
45
|
-
version: "3.0"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '3.0'
|
46
35
|
type: :runtime
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: i18n
|
50
36
|
prerelease: false
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '3.0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: i18n
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
59
49
|
type: :runtime
|
60
|
-
version_requirements: *id003
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: workflow
|
63
50
|
prerelease: false
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: workflow
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - '='
|
61
|
+
- !ruby/object:Gem::Version
|
73
62
|
version: 0.8.7
|
74
63
|
type: :runtime
|
75
|
-
version_requirements: *id004
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: andand
|
78
64
|
prerelease: false
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.8.7
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: andand
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
87
77
|
type: :runtime
|
88
|
-
version_requirements: *id005
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: combustion
|
91
78
|
prerelease: false
|
92
|
-
|
93
|
-
|
94
|
-
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: combustion
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
95
88
|
- - ~>
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
segments:
|
98
|
-
- 0
|
99
|
-
- 3
|
100
|
-
- 1
|
89
|
+
- !ruby/object:Gem::Version
|
101
90
|
version: 0.3.1
|
102
91
|
type: :development
|
103
|
-
version_requirements: *id006
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: database_cleaner
|
106
92
|
prerelease: false
|
107
|
-
|
108
|
-
|
109
|
-
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ~>
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 0.3.1
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: database_cleaner
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
110
102
|
- - ~>
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
segments:
|
113
|
-
- 1
|
114
|
-
- 2
|
115
|
-
- 0
|
103
|
+
- !ruby/object:Gem::Version
|
116
104
|
version: 1.2.0
|
117
105
|
type: :development
|
118
|
-
|
119
|
-
|
120
|
-
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ~>
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 1.2.0
|
112
|
+
description: ! ' Manage invoices. '
|
113
|
+
email:
|
121
114
|
- i.am.douglas.anderson@gmail.com
|
122
115
|
- jeffmess@gmail.com
|
123
116
|
executables: []
|
124
|
-
|
125
117
|
extensions: []
|
126
|
-
|
127
118
|
extra_rdoc_files: []
|
128
|
-
|
129
|
-
files:
|
119
|
+
files:
|
130
120
|
- .gitignore
|
131
121
|
- .rvmrc
|
132
122
|
- .travis.yml
|
@@ -169,39 +159,30 @@ files:
|
|
169
159
|
- spec/lib/uomi/overdue_invoice_spec.rb
|
170
160
|
- spec/spec_helper.rb
|
171
161
|
- uomi.gemspec
|
172
|
-
has_rdoc: true
|
173
162
|
homepage: https://github.com/tehtorq/invoicing
|
174
163
|
licenses: []
|
175
|
-
|
164
|
+
metadata: {}
|
176
165
|
post_install_message:
|
177
166
|
rdoc_options: []
|
178
|
-
|
179
|
-
require_paths:
|
167
|
+
require_paths:
|
180
168
|
- lib
|
181
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
requirements:
|
192
|
-
- - ">="
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
segments:
|
195
|
-
- 0
|
196
|
-
version: "0"
|
169
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ! '>='
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0'
|
197
179
|
requirements: []
|
198
|
-
|
199
180
|
rubyforge_project: uomi
|
200
|
-
rubygems_version:
|
181
|
+
rubygems_version: 2.4.2
|
201
182
|
signing_key:
|
202
|
-
specification_version:
|
183
|
+
specification_version: 4
|
203
184
|
summary: An uomi gem.
|
204
|
-
test_files:
|
185
|
+
test_files:
|
205
186
|
- spec/README
|
206
187
|
- spec/internal/config/database.yml.sample
|
207
188
|
- spec/internal/config/routes.rb
|