moss_generator 0.1.1 → 0.3.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 +4 -4
- data/.github/workflows/gempush.yml +5 -1
- data/.github/workflows/main.yml +1 -1
- data/.rubocop.yml +3 -0
- data/Gemfile.lock +40 -1
- data/config/vat_rates.json +1 -1
- data/lib/moss_generator.rb +2 -0
- data/lib/moss_generator/stripe.rb +6 -3
- data/lib/moss_generator/stripe_charge_row.rb +43 -5
- data/lib/moss_generator/vat_rate.rb +1 -1
- data/lib/moss_generator/version.rb +1 -1
- data/moss_generator.gemspec +4 -3
- metadata +34 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2b6449aa374fa85522e28aa9675f7bfd45b0b4a5ce390c6d0e912d079175ea1
|
4
|
+
data.tar.gz: 5c8dceae90fc3910fd31e575a131f35a8cda3641a5804757201f900ab6f65ea6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad5637afa82ebf7b60ed543eb685ae8790d332b2062c360ff7ead5a2b714ffb6ec44719dea021f2496cb19dfe1eb75123bfb6a755ec9c4d6f682570fbca4a8dc
|
7
|
+
data.tar.gz: 6db1366ba400e33e5f4e25458d4008fb4a01377950ad07775e454a3f251591fbefe7e1fe91bee589d809595cf9bd74b80e31d13b369f511bc7ebbf0ae98ddcdd
|
data/.github/workflows/main.yml
CHANGED
data/.rubocop.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,16 +1,40 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
moss_generator (0.
|
4
|
+
moss_generator (0.3.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
|
data/config/vat_rates.json
CHANGED
data/lib/moss_generator.rb
CHANGED
@@ -45,8 +45,11 @@ module MossGenerator
|
|
45
45
|
|
46
46
|
def group_charges_rows
|
47
47
|
charges_rows = charges.map do |charge|
|
48
|
-
MossGenerator::StripeChargeRow.new(charge)
|
49
|
-
|
48
|
+
charge_row = MossGenerator::StripeChargeRow.new(charge)
|
49
|
+
next if charge_row.skippable?
|
50
|
+
|
51
|
+
charge_row
|
52
|
+
end.compact
|
50
53
|
charges_rows.group_by(&:country_code)
|
51
54
|
end
|
52
55
|
|
@@ -63,7 +66,7 @@ module MossGenerator
|
|
63
66
|
[turnover_country,
|
64
67
|
country,
|
65
68
|
format_to_two_decimals(charges.first.vat_rate),
|
66
|
-
format_to_two_decimals(charges.sum(&:
|
69
|
+
format_to_two_decimals(charges.sum(&:amount_without_vat)),
|
67
70
|
format_to_two_decimals(charges.sum(&:vat_amount))]
|
68
71
|
end
|
69
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 NotInEuroError < 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
|
25
|
-
|
28
|
+
def amount_without_vat
|
29
|
+
Money.new(amount_with_vat * percent_without_vat).dollars.to_f
|
30
|
+
end
|
31
|
+
|
32
|
+
def amount_without_vat_cents
|
33
|
+
Money.new(amount_with_vat * percent_without_vat).cents
|
26
34
|
end
|
27
35
|
|
28
36
|
def vat_rate
|
@@ -30,18 +38,48 @@ module MossGenerator
|
|
30
38
|
end
|
31
39
|
|
32
40
|
def vat_amount
|
33
|
-
|
41
|
+
Money.new(amount_without_vat_cents * vat_rate_calculatable_percent)
|
42
|
+
.dollars
|
43
|
+
.to_f
|
44
|
+
end
|
45
|
+
|
46
|
+
def skippable?
|
47
|
+
company? || not_completed? || refunded?
|
34
48
|
end
|
35
49
|
|
36
50
|
private
|
37
51
|
|
52
|
+
def company?
|
53
|
+
return false if charge.dig('metadata', 'vat_number').nil?
|
54
|
+
|
55
|
+
Valvat::Syntax.validate(charge.dig('metadata', 'vat_number'))
|
56
|
+
end
|
57
|
+
|
58
|
+
def not_completed?
|
59
|
+
charge['status'] != 'succeeded'
|
60
|
+
end
|
61
|
+
|
62
|
+
def refunded?
|
63
|
+
charge['refunded']
|
64
|
+
end
|
65
|
+
|
66
|
+
def amount_with_vat
|
67
|
+
return charge['amount'] if charge['currency'].casecmp?('eur')
|
68
|
+
return if skippable?
|
69
|
+
|
70
|
+
raise NotInEuroError, "charge: #{charge}"
|
71
|
+
end
|
72
|
+
|
73
|
+
def percent_without_vat
|
74
|
+
1 / (vat_rate_calculatable_percent + 1)
|
75
|
+
end
|
76
|
+
|
38
77
|
def vat_rate_calculatable_percent
|
39
78
|
(vat_rate.to_f / 100)
|
40
79
|
end
|
41
80
|
|
42
81
|
def fetch_country_code
|
43
|
-
charge.dig('payment_method_details', 'card', 'country')
|
44
|
-
charge.dig('billing_details', 'address', 'country')
|
82
|
+
charge.dig('payment_method_details', 'card', 'country')
|
45
83
|
end
|
46
84
|
end
|
47
85
|
end
|
data/moss_generator.gemspec
CHANGED
@@ -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
|
-
#
|
34
|
-
|
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.
|
4
|
+
version: 0.3.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-
|
12
|
-
dependencies:
|
13
|
-
|
11
|
+
date: 2021-01-20 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: []
|
@@ -58,8 +86,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
58
86
|
- !ruby/object:Gem::Version
|
59
87
|
version: '0'
|
60
88
|
requirements: []
|
61
|
-
rubygems_version: 3.
|
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: []
|