uomi 0.2.16 → 0.2.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
@@ -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
- self.balance = (0 - debit_transactions.sum(&:amount)) + credit_transactions.sum(&:amount)
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?
@@ -1,3 +1,3 @@
1
1
  module Uomi
2
- VERSION = "0.2.16"
2
+ VERSION = "0.2.17"
3
3
  end
@@ -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
- prerelease: false
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
- date: 2014-09-16 00:00:00 +02:00
19
- default_executable:
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
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
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
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
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
- segments:
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
- requirement: &id003 !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- segments:
57
- - 0
58
- version: "0"
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
- requirement: &id004 !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - "="
68
- - !ruby/object:Gem::Version
69
- segments:
70
- - 0
71
- - 8
72
- - 7
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
- requirement: &id005 !ruby/object:Gem::Requirement
80
- none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- segments:
85
- - 0
86
- version: "0"
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
- requirement: &id006 !ruby/object:Gem::Requirement
93
- none: false
94
- requirements:
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
- requirement: &id007 !ruby/object:Gem::Requirement
108
- none: false
109
- requirements:
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
- version_requirements: *id007
119
- description: " Manage invoices. "
120
- email:
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
- none: false
183
- requirements:
184
- - - ">="
185
- - !ruby/object:Gem::Version
186
- segments:
187
- - 0
188
- version: "0"
189
- required_rubygems_version: !ruby/object:Gem::Requirement
190
- none: false
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: 1.3.7.1
181
+ rubygems_version: 2.4.2
201
182
  signing_key:
202
- specification_version: 3
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