moss_generator 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b22a165ad650e03060e839cd9ea483817eec530a42836fc8f5e9d935aa2cebd5
4
- data.tar.gz: 3989024f80875480c50112e1360d6100e14d75cfceff9ab99a569a447de1becb
3
+ metadata.gz: d76e193b26e8d61b718f567d7416a7a06b63d1869a8b4f8734093aee72120ca5
4
+ data.tar.gz: 47ce0bc69d2cdf03c0c783c6fc2ca464b7da346597df81d074fcfda209bb2be5
5
5
  SHA512:
6
- metadata.gz: 45da0e44d80d6f5f04f762c948af8e91127b2deedd6d67ea23b77a8f731797a98e5674272d8084e9bfbff391803d18cefcbe0716ef802d000dc15aac58420416
7
- data.tar.gz: 3ab6c4be61713bf7032db78373d156c7a397a41d8ee1173097316d059229dfa7133e2416c01b1b60e29ad6fef43545cc3fe218e2553eda2ac42f6173a7da9eae
6
+ metadata.gz: c6bb77da4514d7cfb3560f826160e5fa51bce80ec9f413b9d1334c70070e69e4c6da7eba70e5e5bf73a8a4db0ee558072d6041c5d323677db14678b248b7423b
7
+ data.tar.gz: 0ff1ae9664e557fd06897730c1cfae4dce0ffbb99dece76e4464678b11428fc492709ff5b3333ee20875eca31aff68c778843d4bcc3032d58f6c753a8d68247a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- moss_generator (0.6.0)
4
+ moss_generator (0.7.0)
5
5
  countries (~> 4.0)
6
6
  money (~> 6.14)
7
7
  valvat (~> 1.1)
@@ -18,27 +18,29 @@ GEM
18
18
  builder (3.2.4)
19
19
  byebug (11.1.3)
20
20
  coderay (1.1.3)
21
- concurrent-ruby (1.1.9)
22
- countries (4.0.1)
23
- i18n_data (~> 0.13.0)
21
+ concurrent-ruby (1.1.10)
22
+ countries (4.2.3)
23
+ i18n_data (~> 0.16.0)
24
24
  sixarm_ruby_unaccent (~> 1.1)
25
25
  diff-lcs (1.4.4)
26
- gyoku (1.3.1)
26
+ gyoku (1.4.0)
27
27
  builder (>= 2.1.2)
28
+ rexml (~> 3.0)
28
29
  httpi (2.5.0)
29
30
  rack
30
31
  socksify
31
- i18n (1.8.11)
32
+ i18n (1.10.0)
32
33
  concurrent-ruby (~> 1.0)
33
- i18n_data (0.13.0)
34
+ i18n_data (0.16.0)
35
+ simple_po_parser (~> 1.1)
34
36
  method_source (1.0.0)
35
- mini_portile2 (2.6.1)
37
+ mini_portile2 (2.8.0)
36
38
  money (6.16.0)
37
39
  i18n (>= 0.6.4, <= 2)
38
- nokogiri (1.12.5)
39
- mini_portile2 (~> 2.6.1)
40
+ nokogiri (1.13.6)
41
+ mini_portile2 (~> 2.8.0)
40
42
  racc (~> 1.4)
41
- nokogiri (1.12.5-x86_64-darwin)
43
+ nokogiri (1.13.6-x86_64-darwin)
42
44
  racc (~> 1.4)
43
45
  nori (2.6.0)
44
46
  parallel (1.20.1)
@@ -50,9 +52,9 @@ GEM
50
52
  pry-byebug (3.9.0)
51
53
  byebug (~> 11.0)
52
54
  pry (~> 0.13.0)
53
- public_suffix (4.0.6)
55
+ public_suffix (4.0.7)
54
56
  racc (1.6.0)
55
- rack (2.2.3)
57
+ rack (2.2.3.1)
56
58
  rainbow (3.0.0)
57
59
  rake (13.0.3)
58
60
  regexp_parser (2.0.3)
@@ -98,12 +100,13 @@ GEM
98
100
  nokogiri (>= 1.8.1)
99
101
  nori (~> 2.4)
100
102
  wasabi (~> 3.4)
103
+ simple_po_parser (1.1.6)
101
104
  sixarm_ruby_unaccent (1.2.0)
102
105
  socksify (1.7.1)
103
106
  unicode-display_width (1.7.0)
104
- valvat (1.1.2)
107
+ valvat (1.1.4)
105
108
  savon (>= 2.3.0)
106
- wasabi (3.6.1)
109
+ wasabi (3.7.0)
107
110
  addressable
108
111
  httpi (~> 2.0)
109
112
  nokogiri (>= 1.4.2)
@@ -123,4 +126,4 @@ DEPENDENCIES
123
126
  rubocop-rspec (~> 2.1)
124
127
 
125
128
  BUNDLED WITH
126
- 2.2.3
129
+ 2.2.32
data/README.md CHANGED
@@ -48,6 +48,23 @@ Vat rates currently needs to be updated manually in `config/vat_rates.json`.
48
48
 
49
49
  Rates can also be found on the official website of the European Union [https://europa.eu/youreurope/business/taxation/vat/vat-rules-rates/index_en.htm#shortcut-8](https://europa.eu/youreurope/business/taxation/vat/vat-rules-rates/index_en.htm#shortcut-8), updates two times a year.
50
50
 
51
+ ### Custom VAT rates
52
+
53
+ If standard VAT rates is not enough a custom VAT service can be written and used instead. To create a VAT service that change VAT for a country with a standard VAT rates fallback this one could be used.
54
+
55
+ ```ruby
56
+ class CustomVat
57
+ # Insane 50.5% VAT for France
58
+ def for(country_code)
59
+ return 50.5 if country_code == 'FR'
60
+
61
+ MossGenerator::VatRate.for(country_code)
62
+ end
63
+ end
64
+
65
+ csv_string = MossGenerator::Stripe.call(charges, vat_number, period, year, rates, 'SERVICES', CustomVat.new)
66
+ ```
67
+
51
68
  ## Contributing
52
69
 
53
70
  Bug reports and pull requests are welcome on GitHub at https://github.com/standout/moss_generator.
@@ -8,23 +8,33 @@ module MossGenerator
8
8
  class Stripe
9
9
  class NoTurnoverCountryError < StandardError; end
10
10
 
11
- attr_reader :charges, :vat_number, :period, :year, :rates, :sale_type
12
-
13
- def initialize(charges, vat_number, period, year, rates, sale_type)
11
+ attr_reader :charges, :vat_number, :period, :year, :rates, :sale_type,
12
+ :vat_rate_service
13
+
14
+ # rubocop:disable Metrics/ParameterLists
15
+ def initialize(charges,
16
+ vat_number,
17
+ period,
18
+ year,
19
+ rates,
20
+ sale_type,
21
+ vat_rate_service = MossGenerator::VatRate)
14
22
  @charges = charges
15
23
  @vat_number = vat_number
16
24
  @period = period
17
25
  @year = year
18
26
  @rates = rates
19
27
  @sale_type = sale_type
28
+ @vat_rate_service = vat_rate_service
20
29
  end
30
+ # rubocop:enable Metrics/ParameterLists
21
31
 
22
- def self.call(charges, vat_number, period, year, rates, sale_type)
23
- new(charges, vat_number, period, year, rates, sale_type).call
32
+ def self.call(*args)
33
+ new(*args).call
24
34
  end
25
35
 
26
36
  def call
27
- CSV.generate(csv_options) do |csv|
37
+ CSV.generate(**csv_options) do |csv|
28
38
  csv << first_row
29
39
  csv << second_row
30
40
  generate_charges_rows(csv)
@@ -47,7 +57,8 @@ module MossGenerator
47
57
 
48
58
  def group_charges_rows
49
59
  charges_rows = charges.map do |charge|
50
- charge_row = MossGenerator::StripeChargeRow.new(charge, rates)
60
+ charge_row = MossGenerator::StripeChargeRow.new(charge, rates,
61
+ vat_rate_service)
51
62
  next if charge_row.skippable?
52
63
 
53
64
  charge_row
@@ -14,11 +14,12 @@ module MossGenerator
14
14
 
15
15
  class NoExchangeRateForCurrencyOrDateError < StandardError; end
16
16
 
17
- attr_reader :charge, :rates
17
+ attr_reader :charge, :rates, :vat_rate_service
18
18
 
19
- def initialize(charge, rates)
19
+ def initialize(charge, rates, vat_rate_service = MossGenerator::VatRate)
20
20
  @charge = charge
21
21
  @rates = rates
22
+ @vat_rate_service = vat_rate_service
22
23
  end
23
24
 
24
25
  def country_code
@@ -63,7 +64,7 @@ module MossGenerator
63
64
 
64
65
  21
65
66
  else
66
- MossGenerator::VatRate.for(country_code)
67
+ vat_rate_service.for(country_code)
67
68
  end
68
69
  end
69
70
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MossGenerator
4
- VERSION = '0.6.0'
4
+ VERSION = '0.7.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moss_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - frdrkolsson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-27 00:00:00.000000000 Z
11
+ date: 2022-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: countries
@@ -115,7 +115,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
117
  requirements: []
118
- rubygems_version: 3.2.32
118
+ rubygems_version: 3.3.7
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: Skatteverket One Stop Shop (OSS) generator.