moss_generator 0.1.5 → 0.2.0

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
  SHA256:
3
- metadata.gz: ad1ddceb7b906a75ee7db040f6f02daa81743a0740ee9f3c060d6ec91b4fdf29
4
- data.tar.gz: 94c9ba93ab8d08a7db9829cadd1c9e2cc5770777d09015e6bbbfa085aa207cd5
3
+ metadata.gz: 94864f353514bae1dc92e750adda259be65c3834431a20e3cc20a1316585dec9
4
+ data.tar.gz: 2d829fd20c5fa6e1c3a62041f279d04b60a8c4815b090fcf35ab9c3cf0a5904f
5
5
  SHA512:
6
- metadata.gz: 2c550595f24be6127e4555c58320e6e48c331cd17a8e74000ea57fbf7939d53c73c31bb390b3d7f71d84f7b0768f7c823e519a93b2b90bc226f30b6945bbb8af
7
- data.tar.gz: d803e9ec37eceb859a5d726d0a5376659a979039add06b84a2d8ce47dc2cb19a55adbc2be9f7cad0f4f88a7ed00095b430a3dbe641811996f7fbe87fded1f378
6
+ metadata.gz: ca4ffc090bfd23e9f33498f030f0094dcaa02dbf8f4790c62ad6a320b608dd8166a7c65d866877f4c923cbe16f44abdac10ac198e0b81b153e806adefa40fe87
7
+ data.tar.gz: 7a7702bd3cbe463060d88c9e7973ce015a1079dc288467500a9b17fb26d970142791d491f3d6a02f5b0235e2df1ad8fcce0d9b9c091bdb6976dfe241b265b83d
@@ -13,3 +13,6 @@ Layout/LineLength:
13
13
  Metrics/BlockLength:
14
14
  Exclude:
15
15
  - 'spec/**/*'
16
+
17
+ RSpec/NestedGroups:
18
+ Max: 4
@@ -1,16 +1,40 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- moss_generator (0.1.5)
4
+ moss_generator (0.2.0)
5
+ money (~> 6.14)
6
+ valvat (~> 1.1)
5
7
 
6
8
  GEM
7
9
  remote: https://rubygems.org/
8
10
  specs:
11
+ addressable (2.7.0)
12
+ public_suffix (>= 2.0.2, < 5.0)
13
+ akami (1.3.1)
14
+ gyoku (>= 0.4.0)
15
+ nokogiri
9
16
  ast (2.4.1)
17
+ builder (3.2.4)
18
+ concurrent-ruby (1.1.7)
10
19
  diff-lcs (1.4.4)
20
+ gyoku (1.3.1)
21
+ builder (>= 2.1.2)
22
+ httpi (2.4.5)
23
+ rack
24
+ socksify
25
+ i18n (1.8.7)
26
+ concurrent-ruby (~> 1.0)
27
+ money (6.14.0)
28
+ i18n (>= 0.6.4, <= 2)
29
+ nokogiri (1.11.1-x86_64-darwin)
30
+ racc (~> 1.4)
31
+ nori (2.6.0)
11
32
  parallel (1.20.1)
12
33
  parser (3.0.0.0)
13
34
  ast (~> 2.4.1)
35
+ public_suffix (4.0.6)
36
+ racc (1.5.2)
37
+ rack (2.2.3)
14
38
  rainbow (3.0.0)
15
39
  rake (13.0.3)
16
40
  regexp_parser (2.0.3)
@@ -48,7 +72,22 @@ GEM
48
72
  rubocop (~> 1.0)
49
73
  rubocop-ast (>= 1.1.0)
50
74
  ruby-progressbar (1.10.1)
75
+ savon (2.12.1)
76
+ akami (~> 1.2)
77
+ builder (>= 2.1.2)
78
+ gyoku (~> 1.2)
79
+ httpi (~> 2.3)
80
+ nokogiri (>= 1.8.1)
81
+ nori (~> 2.4)
82
+ wasabi (~> 3.4)
83
+ socksify (1.7.1)
51
84
  unicode-display_width (1.7.0)
85
+ valvat (1.1.0)
86
+ savon (>= 2.3.0)
87
+ wasabi (3.6.1)
88
+ addressable
89
+ httpi (~> 2.0)
90
+ nokogiri (>= 1.4.2)
52
91
 
53
92
  PLATFORMS
54
93
  x86_64-darwin-19
@@ -6,4 +6,6 @@ require_relative 'moss_generator/stripe'
6
6
 
7
7
  # Generate CSV-formatted string for MOSS report
8
8
  module MossGenerator
9
+ Money.default_currency = Money::Currency.new('SEK')
10
+ Money.rounding_mode = BigDecimal::ROUND_HALF_UP
9
11
  end
@@ -66,7 +66,7 @@ module MossGenerator
66
66
  [turnover_country,
67
67
  country,
68
68
  format_to_two_decimals(charges.first.vat_rate),
69
- format_to_two_decimals(charges.sum(&:amount)),
69
+ format_to_two_decimals(charges.sum(&:amount_without_vat)),
70
70
  format_to_two_decimals(charges.sum(&:vat_amount))]
71
71
  end
72
72
 
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'moss_generator/vat_rate'
4
+ require 'money'
5
+ require 'valvat/local'
4
6
 
5
7
  module MossGenerator
6
8
  # Parse charge data from single Stripe charge
@@ -9,6 +11,8 @@ module MossGenerator
9
11
 
10
12
  class NoVatRateForCountryError < StandardError; end
11
13
 
14
+ class NotInSwedishKronorError < StandardError; end
15
+
12
16
  attr_reader :charge
13
17
 
14
18
  def initialize(charge)
@@ -21,8 +25,12 @@ module MossGenerator
21
25
  raise NoConsumptionCountryError, "charge: #{charge}"
22
26
  end
23
27
 
24
- def amount
25
- amount_without_vat
28
+ def amount_without_vat
29
+ Money.new(amount_with_vat * percent_without_vat, 'SEK').dollars.to_f
30
+ end
31
+
32
+ def amount_without_vat_cents
33
+ Money.new(amount_with_vat * percent_without_vat, 'SEK').cents
26
34
  end
27
35
 
28
36
  def vat_rate
@@ -30,7 +38,9 @@ module MossGenerator
30
38
  end
31
39
 
32
40
  def vat_amount
33
- amount * vat_rate_calculatable_percent
41
+ Money.new(amount_without_vat_cents * vat_rate_calculatable_percent, 'SEK')
42
+ .dollars
43
+ .to_f
34
44
  end
35
45
 
36
46
  def skippable?
@@ -40,7 +50,9 @@ module MossGenerator
40
50
  private
41
51
 
42
52
  def company?
43
- charge.dig('metadata', 'vat_number').nil? ? false : true
53
+ return false if charge.dig('metadata', 'vat_number').nil?
54
+
55
+ Valvat::Syntax.validate(charge.dig('metadata', 'vat_number'))
44
56
  end
45
57
 
46
58
  def not_completed?
@@ -51,12 +63,13 @@ module MossGenerator
51
63
  charge['refunded']
52
64
  end
53
65
 
54
- def amount_without_vat
55
- amount_with_vat * percent_without_vat
56
- end
57
-
58
66
  def amount_with_vat
59
- charge.dig('balance_transaction', 'amount')
67
+ balance_transaction = charge['balance_transaction']
68
+ currency = balance_transaction['currency']
69
+ return balance_transaction['amount'] if currency == 'sek'
70
+
71
+ raise NotInSwedishKronorError,
72
+ "balance_transaction: #{balance_transaction}"
60
73
  end
61
74
 
62
75
  def percent_without_vat
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MossGenerator
4
- VERSION = '0.1.5'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['frdrkolsson']
9
9
  spec.email = ['fredrik.olsson@standout.se']
10
10
 
11
- spec.summary = 'Skatteverket Mini One Stop Shop(MOSS) generator.'
11
+ spec.summary = 'Skatteverket Mini One Stop Shop (MOSS) generator.'
12
12
  spec.description = spec.summary
13
13
  spec.homepage = 'https://github.com/standout/moss_generator'
14
14
  spec.license = 'MIT'
@@ -30,8 +30,9 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ['lib']
32
32
 
33
- # Uncomment to register a new dependency of your gem
34
- # spec.add_dependency "example-gem", "~> 1.0"
33
+ # spec.add_dependency to register a new dependency of your gem
34
+ spec.add_dependency 'money', '~> 6.14'
35
+ spec.add_dependency 'valvat', '~> 1.1'
35
36
 
36
37
  # For more information and examples about making a new gem, checkout our
37
38
  # guide at: https://bundler.io/guides/creating_gem.html
metadata CHANGED
@@ -1,16 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moss_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - frdrkolsson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-15 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Skatteverket Mini One Stop Shop(MOSS) generator.
11
+ date: 2021-01-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: money
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '6.14'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '6.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: valvat
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.1'
41
+ description: Skatteverket Mini One Stop Shop (MOSS) generator.
14
42
  email:
15
43
  - fredrik.olsson@standout.se
16
44
  executables: []
@@ -61,5 +89,5 @@ requirements: []
61
89
  rubygems_version: 3.2.3
62
90
  signing_key:
63
91
  specification_version: 4
64
- summary: Skatteverket Mini One Stop Shop(MOSS) generator.
92
+ summary: Skatteverket Mini One Stop Shop (MOSS) generator.
65
93
  test_files: []