skv_report 0.1.0 → 0.3.3

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: 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