skv_report 0.1.0 → 0.3.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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7fd4ecad8c4ea82f45641e416b37f9046fe39048b7bde532e2998f3ede8d934b
4
- data.tar.gz: e359d4e13c9ca9a311c06bb3450cb7d0f008f80b9d5ada0dbdfded8b3aef50ec
3
+ metadata.gz: '090c92585c0b6d65add97fc64d0d60ce4ebd93c7b04a0d857bd711cf2ea833ab'
4
+ data.tar.gz: 42874efacf3f252ec232a3f20cdd3231a8d8fae23e8e9b98fa72c1f40805450d
5
5
  SHA512:
6
- metadata.gz: c5bcf4cafe1ba9310c2f17c356414346608ec9fd3c17bf65b2e53ddc3d300f8c4156ad3fdb4fbdb1a8b26d4dd3246cc114841d77235e21fcb4be051c6403ba33
7
- data.tar.gz: 14ea05feda440ea52e57a38e2c6ff670cb15321e577461534fc19ee1c95f8c74ae17b1a62eb2a726d446cb7d9150994e256ffc102936259eaae3ef11c29fd406
6
+ metadata.gz: 02d1349106880152c72335e0c8d8bc49906d9c28c52816046d8a40b9fc900e5b5388687c9075755312485099ab5202b89620d5dd484be093b244994f51e28dd0
7
+ data.tar.gz: 47d6544906fd3cbfb3dbb995ba13272d801fe9187c3e7f1b62d243fdd3e26032217dff53b2e01abc6a5c14f5e0b3a77f45937413782b8ef92001c856743a57fc
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- skv_report (0.1.0)
4
+ skv_report (0.3.3)
5
+ countries (~> 3.1.0)
5
6
  money (~> 6.14)
6
7
  valvat (~> 1.1)
7
8
 
@@ -17,19 +18,24 @@ GEM
17
18
  builder (3.2.4)
18
19
  byebug (11.1.3)
19
20
  coderay (1.1.3)
20
- concurrent-ruby (1.1.7)
21
+ concurrent-ruby (1.1.8)
22
+ countries (3.1.0)
23
+ i18n_data (~> 0.11.0)
24
+ sixarm_ruby_unaccent (~> 1.1)
25
+ unicode_utils (~> 1.4)
21
26
  diff-lcs (1.4.4)
22
27
  gyoku (1.3.1)
23
28
  builder (>= 2.1.2)
24
29
  httpi (2.4.5)
25
30
  rack
26
31
  socksify
27
- i18n (1.8.7)
32
+ i18n (1.8.10)
28
33
  concurrent-ruby (~> 1.0)
34
+ i18n_data (0.11.0)
29
35
  method_source (1.0.0)
30
- money (6.14.0)
36
+ money (6.14.1)
31
37
  i18n (>= 0.6.4, <= 2)
32
- nokogiri (1.11.1-x86_64-darwin)
38
+ nokogiri (1.11.3-x86_64-darwin)
33
39
  racc (~> 1.4)
34
40
  nori (2.6.0)
35
41
  parallel (1.20.1)
@@ -89,8 +95,10 @@ GEM
89
95
  nokogiri (>= 1.8.1)
90
96
  nori (~> 2.4)
91
97
  wasabi (~> 3.4)
98
+ sixarm_ruby_unaccent (1.2.0)
92
99
  socksify (1.7.1)
93
100
  unicode-display_width (1.7.0)
101
+ unicode_utils (1.4.0)
94
102
  valvat (1.1.0)
95
103
  savon (>= 2.3.0)
96
104
  wasabi (3.6.1)
data/README.md CHANGED
@@ -42,9 +42,13 @@ SKVReport::Stripe.call(charges, period, year, company_information, rates)
42
42
 
43
43
  ## Development
44
44
 
45
+ The main branch in this repository is called `main`.
46
+
45
47
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
46
48
 
47
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
49
+ To install this gem onto your local machine, run `bundle exec rake install`.
50
+
51
+ To release a new version, update the version number in `version.rb`, and then make a release on GitHub which will automatically build the gem and upload to rubygems.
48
52
 
49
53
  ## Exchange rates
50
54
 
@@ -9,41 +9,28 @@ module SKVReport
9
9
 
10
10
  class NoRateForCurrencyError < StandardError; end
11
11
 
12
- attr_reader :rates, :start_at, :base, :end_at
12
+ attr_reader :rates, :base_currency
13
13
 
14
14
  def initialize(rates = {})
15
- @rates = rates['rates']
15
+ @rates = rates['rates'] || rates['dates_with_rates']
16
16
  @base_currency = rates['base']
17
- @start_at = Date.parse(rates['start_at'])
18
- @end_at = Date.parse(rates['end_at'])
19
17
  end
20
18
 
21
- def rate_for(to_currency, date)
22
- date_for_rate = find_previous_existing_date(Date.parse(date))
23
- raise_no_rates_for_date_error(date) if date_for_rate.nil?
19
+ def rate_for(from_currency, date)
20
+ date_rates = rates[date]
21
+ raise_no_rates_for_date_error(date) if date_rates.nil?
24
22
 
25
- rate = rates.dig(date_for_rate.to_s, to_currency.upcase)
23
+ rate = rates.dig(date, from_currency.upcase)
26
24
  return rate unless rate.nil?
27
25
 
28
- raise NoRateForCurrencyError, "currency: #{to_currency}\nrates: #{rates}"
26
+ raise NoRateForCurrencyError,
27
+ "currency: #{from_currency}\nrates: #{rates}"
29
28
  end
30
29
 
31
30
  private
32
31
 
33
- # Test number of times this recursive method is called?
34
- def find_previous_existing_date(date)
35
- return nil if date_outside_of_range?(date)
36
-
37
- rates[date.to_s].nil? ? find_previous_existing_date(date - 1) : date
38
- end
39
-
40
- def date_outside_of_range?(date)
41
- date < start_at || date > end_at
42
- end
43
-
44
32
  def raise_no_rates_for_date_error(date)
45
- raise NoRatesForDateError,
46
- "date: #{date}\nstart_at: #{start_at}\nend_at: #{end_at}"
33
+ raise NoRatesForDateError, "date: #{date}\navailable_dates: #{rates.keys}"
47
34
  end
48
35
  end
49
36
  end
@@ -6,8 +6,6 @@ require 'skv_report/stripe_charge_row'
6
6
  module SKVReport
7
7
  # Generate SKV CSV string from Stripe charge
8
8
  class Stripe
9
- class NoTurnoverCountryError < StandardError; end
10
-
11
9
  class UndefinedTypeOfSalesError < StandardError; end
12
10
 
13
11
  attr_reader :charges, :period, :year, :company_information, :rates
@@ -3,6 +3,7 @@
3
3
  require 'money'
4
4
  require 'valvat/local'
5
5
  require 'date'
6
+ require 'countries/global'
6
7
 
7
8
  module SKVReport
8
9
  # Parse charge data from single Stripe charge
@@ -19,7 +20,7 @@ module SKVReport
19
20
  #
20
21
  def initialize(charge, exchange_rates)
21
22
  @charge = charge
22
- @buyer_vat_number = charge.dig('customer', 'tax_info', 'tax_id') || ''
23
+ @buyer_vat_number = vat_number
23
24
  @exchange_rates = exchange_rates
24
25
  end
25
26
 
@@ -28,15 +29,32 @@ module SKVReport
28
29
  end
29
30
 
30
31
  def skippable?
31
- swedish_buyer? || !valid_vat_number? || not_completed? || refunded?
32
+ buyer_vat_number.nil? ||
33
+ swedish_buyer? ||
34
+ !valid_vat_number? ||
35
+ !eu_member? ||
36
+ not_completed? ||
37
+ refunded?
32
38
  end
33
39
 
34
40
  private
35
41
 
42
+ def vat_number
43
+ tax_object = charge.dig('customer', 'tax_ids', 'data').find do |tax_data|
44
+ tax_data['type'].casecmp?('eu_vat')
45
+ end
46
+
47
+ tax_object&.fetch('value', '')
48
+ end
49
+
36
50
  def swedish_buyer?
37
51
  buyer_vat_number[0...2].casecmp?('SE')
38
52
  end
39
53
 
54
+ def eu_member?
55
+ ISO3166::Country.new(buyer_vat_number[0...2])&.in_eu?
56
+ end
57
+
40
58
  def valid_vat_number?
41
59
  Valvat::Syntax.validate(buyer_vat_number)
42
60
  end
@@ -50,7 +68,7 @@ module SKVReport
50
68
  end
51
69
 
52
70
  def convert_amount_to_sek(exchange_rate)
53
- (charge['amount'] * exchange_rate).round
71
+ (charge['amount'] * (1 / exchange_rate)).round
54
72
  end
55
73
 
56
74
  def not_completed?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SKVReport
4
- VERSION = '0.1.0'
4
+ VERSION = '0.3.3'
5
5
  end
data/skv_report.gemspec CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.require_paths = ['lib']
33
33
 
34
34
  # spec.add_dependency to register a new dependency of your gem
35
+ spec.add_dependency 'countries', '~> 3.1.0'
35
36
  spec.add_dependency 'money', '~> 6.14'
36
37
  spec.add_dependency 'valvat', '~> 1.1'
37
38
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skv_report
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - frdrkolsson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-17 00:00:00.000000000 Z
11
+ date: 2021-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: countries
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 3.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.1.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: money
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -85,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
99
  - !ruby/object:Gem::Version
86
100
  version: '0'
87
101
  requirements: []
88
- rubygems_version: 3.2.3
102
+ rubygems_version: 3.2.15
89
103
  signing_key:
90
104
  specification_version: 4
91
105
  summary: Generates CSV complete string for Skatteverkets Periodisk Sammanfattning