sk_calc 1.0.1 → 1.0.3

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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- Zjk4Y2ZlMmY2N2EwMTY2NmE4ZjM2MjhkYzc2ODA3YjdmNjIwMjljNA==
5
- data.tar.gz: !binary |-
6
- MmU2OTgyZDQwNzA5YjRlZjNhMjhjMWNkMzAyMTc4NzE3Yzk2MzIyMA==
2
+ SHA1:
3
+ metadata.gz: 51ac1e01d1ba2a985d6b255cf9fd29ba85894154
4
+ data.tar.gz: e02b10b0129c7fa310aeeca46c131b0a7f60613d
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MThiZTg5ZTc4OGQ0NTg4MTllNjA3OTQ3ZGQ4ZTJlNjU2OTdhODgwNjI0MGNh
10
- OGIyZmJjNDY2NzQ5NmE3ZDE1YTdlMDM2YWM3MDRkNTU0MmExM2M3ZDgzNTBi
11
- N2YxZjJmZGI1MmE2YWJiYmUzM2UzYWFiNWNiNzQ2NThkNDFhNWQ=
12
- data.tar.gz: !binary |-
13
- MTU0OWQyNzFiYjFjZmE5Njg4ZWI4MTEwZjdhYjlmNmMyNTg2MTU5ZTE0ZTgy
14
- N2Y1NGI1NWU2MTFmYmVlYmRmNDM2OTBkMGMyNWRhNDNmZTVmMTUxY2E0MTZh
15
- N2MzMDMxMTEyZmY0OTY0ZTBkNDlhMTYyOWE4NGFkZDNmODg2YTQ=
6
+ metadata.gz: ff9cd7c68678c4c64e061adc80cd995271d03f4b7aa2aaec58bc762c3b07b2660ce3b7364bc469c9087ef48ed02eb660c31fbdd06193a081652cd3eae6c61227
7
+ data.tar.gz: 24958ad3c941142f8b49ca42b3eb53cf61a2c44115e15961e60744b734a652a59b3024d314f99a47ad0e22f8da9e8dbda6fe5bcbf7cd14b91813a597491de9b3
data/.travis.yml CHANGED
@@ -1,3 +1,3 @@
1
1
  rvm:
2
- - 1.9.3
2
+ - 2.3
3
3
  - 2.2
data/README.md CHANGED
@@ -16,6 +16,8 @@ mixing it into your local classes.
16
16
 
17
17
  == Install
18
18
 
19
+ Ruby 2.2 tested, 1.9 should work to
20
+
19
21
  gem install sk_calc
20
22
 
21
23
 
@@ -34,4 +36,4 @@ read spec/sk_calc/*.rb to see examples
34
36
 
35
37
  == Tests
36
38
 
37
- Copyright (c) 2011-2016 Georg Leciejewski, released under the MIT license
39
+ Copyright (c) 2011-2024 Georg Leciejewski, released under the MIT license
data/lib/sk_calc/items.rb CHANGED
@@ -67,17 +67,38 @@ module SK::Calc::Items
67
67
  # [1] => 57 #(items sum = 300)
68
68
  #
69
69
  #
70
- # @return [Hash]
70
+ # @return [Array<Array>]
71
71
  def tax_grouped(items=nil)
72
72
  items ||= line_items
73
73
  result = {}
74
74
  items.group_by(&:tax).each do |tax, item_group|
75
75
  net_total_sum = item_group.to_a.sum(&:net_total_base)
76
- result[tax] = (net_total_sum * tax / 100.0).round(SK::Calc.precision) if tax && !tax.zero?
76
+ result[tax] = (net_total_sum * tax.to_r / 100.0).round(SK::Calc.precision) if tax && !tax.zero?
77
77
  end
78
78
  result.sort
79
79
  end
80
80
 
81
+ # @return [Array<Hash<Symbol,Mixed>>]
82
+ def tax_grouped_details(items=nil)
83
+ items ||= line_items
84
+ result = []
85
+ items.group_by(&:tax).each do |tax, item_group|
86
+ net_total_sum = item_group.to_a.sum(&:net_total_base)
87
+ tax_total = if tax && !tax.zero?
88
+ (net_total_sum * tax.to_r / 100.0).round(SK::Calc.precision)
89
+ else
90
+ 0.0
91
+ end
92
+ result << {
93
+ tax: tax,
94
+ net_total: net_total_sum,
95
+ gross_total: net_total_sum+tax_total,
96
+ tax_total: tax_total,
97
+ }
98
+ end
99
+ result.sort{|a,b| a[:tax] <=> b[:tax]}
100
+ end
101
+
81
102
  private
82
103
 
83
104
  # Init total with 0 if nil and cast to Rational
@@ -1,5 +1,5 @@
1
1
  module SK
2
2
  module Calc
3
- VERSION = '1.0.1'
3
+ VERSION = '1.0.3'
4
4
  end
5
5
  end
@@ -17,28 +17,28 @@ describe SK::Calc do
17
17
  describe 'private convert methods' do
18
18
  it 'conv_tax' do
19
19
  i = ItemWithoutFields.new
20
- i.send(:conv_tax).should == 0
20
+ expect(i.send(:conv_tax)).to eq 0
21
21
  end
22
22
  it 'conv_price_single' do
23
23
  i = ItemWithoutFields.new
24
- i.send(:conv_price_single).should == 0
24
+ expect(i.send(:conv_price_single)).to eq 0
25
25
  end
26
26
 
27
27
  it 'rounds to max 6 conv_price_single' do
28
28
  i = ItemWithoutFields.new
29
29
  i.price_single = 1.12345678
30
- i.send(:conv_price_single).to_f.should == 1.123457
30
+ expect(i.send(:conv_price_single).to_f).to eq 1.123457
31
31
  end
32
32
 
33
33
  it 'conv_discount' do
34
34
  i = ItemWithoutFields.new
35
- i.send(:conv_discount).should == 0
35
+ expect(i.send(:conv_discount)).to eq 0
36
36
  end
37
37
 
38
38
  it 'conv_quantity' do
39
39
  i = ItemWithoutFields.new
40
- i.send(:conv_quantity).should == 0
41
- i.send(:conv_quantity).should be_a Rational
40
+ expect(i.send(:conv_quantity)).to eq 0
41
+ expect(i.send(:conv_quantity)).to be_a Rational
42
42
  end
43
43
  end
44
44
 
@@ -53,31 +53,31 @@ describe SK::Calc do
53
53
  end
54
54
 
55
55
  it "has net_single" do
56
- @i.net_single.should == 10.00
56
+ expect(@i.net_single).to eq 10.00
57
57
  end
58
58
 
59
59
  it "has gross_single" do
60
- @i.gross_single.should == 11.90
60
+ expect(@i.gross_single).to eq 11.90
61
61
  end
62
62
 
63
63
  it "has total" do
64
- @i.total.should == 10.0
64
+ expect(@i.total).to eq 10.0
65
65
  end
66
66
 
67
67
  it "has net_total" do
68
- @i.net_total.should == 10.0
68
+ expect(@i.net_total).to eq 10.0
69
69
  end
70
70
 
71
71
  it "has gross_total" do
72
- @i.gross_total.should == 11.90
72
+ expect(@i.gross_total).to eq 11.90
73
73
  end
74
74
 
75
75
  it "has net_total_base" do
76
- @i.net_total_base.should == 10.00
76
+ expect(@i.net_total_base).to eq 10.00
77
77
  end
78
78
 
79
79
  it "has tax_total" do
80
- @i.tax_total.should == 1.90
80
+ expect(@i.tax_total).to eq 1.90
81
81
  end
82
82
  end
83
83
 
@@ -92,30 +92,30 @@ describe SK::Calc do
92
92
  end
93
93
 
94
94
  it "has total" do
95
- @i.total.should == 12.605
95
+ expect(@i.total).to eq 12.605
96
96
  end
97
97
 
98
98
  it "has net_total" do
99
- @i.net_total.to_f.should == 12.61
99
+ expect(@i.net_total.to_f).to eq 12.61
100
100
  end
101
101
 
102
102
  it "has gross_total" do
103
- @i.gross_total.should == 15.0
103
+ expect(@i.gross_total).to eq 15.0
104
104
  end
105
105
 
106
106
  it "has net_total_base" do
107
- @i.net_total_base.should == 12.605
107
+ expect(@i.net_total_base).to eq 12.605
108
108
  end
109
109
  it "has net_total" do
110
- @i.net_total.should == 12.61
110
+ expect(@i.net_total).to eq 12.61
111
111
  end
112
112
 
113
113
  it "has tax_total_base" do
114
- @i.tax_total_base.should == 2.39495
114
+ expect(@i.tax_total_base).to eq 2.39495
115
115
  end
116
116
 
117
117
  it "has tax_total" do
118
- @i.tax_total.should == 2.39
118
+ expect(@i.tax_total).to eq 2.39
119
119
  end
120
120
  end
121
121
 
@@ -125,8 +125,8 @@ describe SK::Calc do
125
125
  i = LineItem.new
126
126
  i.price_single = 12345.123456
127
127
  i.quantity = BigDecimal.new("1.0")
128
- i.total.should == 12345.123456
129
- i.total.should be_a Rational
128
+ expect(i.total).to eq 12345.123456
129
+ expect(i.total).to be_a Rational
130
130
  end
131
131
  end
132
132
 
@@ -20,27 +20,57 @@ describe SK::Calc, 'items calculations' do
20
20
  @i.discount = 0
21
21
  @i.quantity = 1
22
22
  @i.tax = 19.0
23
-
23
+
24
24
  @doc = Doc.new
25
25
  @doc.line_items = [@i]
26
-
27
-
28
26
  end
29
27
 
30
- it "should calc net_total" do
28
+ it "calc net_total" do
29
+ @doc.sum_items
30
+ expect(@doc.net_total).to eq 10.0
31
+ end
32
+
33
+ it "calc gross_total" do
31
34
  @doc.sum_items
32
- @doc.net_total.should == 10.0
35
+ expect(@doc.gross_total).to eq 11.90
33
36
  end
34
37
 
35
- it "should calc gross_total" do
38
+ it "sums totals" do
36
39
  @doc.sum_items
37
- @doc.gross_total.should == 11.90
40
+ expect(@doc.price_total).to eq 10.0
41
+ expect(@doc.price_tax).to eq 1.90
38
42
  end
39
43
 
40
- it "should sum totals" do
44
+ it "sums items with tax as rational" do
45
+ @i.price_single = 7142.857143
46
+ @i.tax = BigDecimal('19.0')
41
47
  @doc.sum_items
42
- @doc.price_total.should == 10.0
43
- @doc.price_tax.should == 1.90
48
+ expect(@doc.price_total).to eq 7142.857143
49
+ expect(@doc.price_tax).to eq 1357.142857
50
+ expect(@doc.gross_total).to eq 8500.00
51
+ end
52
+
53
+ it "tax_grouped" do
54
+ @i.price_single = 7142.857143
55
+ @i.tax = BigDecimal('19.0')
56
+ res = @doc.tax_grouped
57
+ expect(res).to eq [[19.0, 1357.142857]]
44
58
  end
45
59
 
60
+
61
+ it "tax_grouped_details" do
62
+ b = LineItem.new
63
+ b.tax=7.0
64
+ b.quantity=10
65
+ b.price_single=10
66
+ b.discount=0
67
+
68
+ @doc.line_items << b
69
+
70
+ res = @doc.tax_grouped_details
71
+ expect(res[0]).to eq( {net_total: 100.0, tax: 7.0, tax_total: 7.0, gross_total:107.0})
72
+ expect(res[1]).to eq( {net_total:10, tax:19.0, tax_total:1.9, gross_total:11.9})
73
+ end
74
+
75
+
46
76
  end
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sk_calc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Georg Leciejewski
8
8
  - Mike Połtyn
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2012-02-15 00:00:00.000000000 Z
@@ -15,56 +15,56 @@ dependencies:
15
15
  name: rspec
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ! '>='
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ! '>='
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: simplecov
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ! '>='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
34
  version: '0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ! '>='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: activesupport
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ! '>='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ! '>='
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rake
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ! '>='
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
62
  version: 0.9.2
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ! '>='
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: 0.9.2
70
70
  description: Calculate document and line item totals. This moule is used inside SalesKIng
@@ -74,8 +74,8 @@ executables: []
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
- - .gitignore
78
- - .travis.yml
77
+ - ".gitignore"
78
+ - ".travis.yml"
79
79
  - Gemfile
80
80
  - LICENSE
81
81
  - README.md
@@ -91,24 +91,24 @@ files:
91
91
  homepage: http://github.com/salesking/sk_calc
92
92
  licenses: []
93
93
  metadata: {}
94
- post_install_message:
94
+ post_install_message:
95
95
  rdoc_options: []
96
96
  require_paths:
97
97
  - lib
98
98
  required_ruby_version: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - ! '>='
100
+ - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  requirements:
105
- - - ! '>='
105
+ - - ">="
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  requirements: []
109
- rubyforge_project:
110
- rubygems_version: 2.2.2
111
- signing_key:
109
+ rubyforge_project:
110
+ rubygems_version: 2.4.5.5
111
+ signing_key:
112
112
  specification_version: 4
113
113
  summary: SalesKing Calculation Module
114
114
  test_files: []