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.
@@ -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