fortnox-api 0.7.0 → 0.7.1

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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -4
  3. data/fortnox-api.gemspec +2 -2
  4. data/lib/fortnox/api/mappers.rb +1 -1
  5. data/lib/fortnox/api/mappers/value/{country_code_string.rb → country_string.rb} +3 -3
  6. data/lib/fortnox/api/models/document.rb +2 -2
  7. data/lib/fortnox/api/types.rb +20 -8
  8. data/lib/fortnox/api/types/shim/{country_code_string.rb → country_string.rb} +1 -1
  9. data/lib/fortnox/api/version.rb +1 -1
  10. data/spec/fortnox/api/mappers/base_spec.rb +2 -2
  11. data/spec/fortnox/api/repositories/customer_spec.rb +27 -0
  12. data/spec/fortnox/api/types/country_code_spec.rb +10 -44
  13. data/spec/fortnox/api/types/country_spec.rb +67 -0
  14. data/spec/vcr_cassettes/customers/save_new_with_country_code_SE.yml +56 -0
  15. data/spec/vcr_cassettes/invoices/save_new_with_country.yml +18 -8
  16. data/spec/vcr_cassettes/invoices/save_new_with_country_GB.yml +18 -8
  17. data/spec/vcr_cassettes/invoices/save_new_with_country_KR.yml +18 -8
  18. data/spec/vcr_cassettes/invoices/save_new_with_country_Norge.yml +18 -8
  19. data/spec/vcr_cassettes/invoices/save_new_with_country_Norway.yml +18 -8
  20. data/spec/vcr_cassettes/invoices/save_new_with_country_Sverige.yml +18 -8
  21. data/spec/vcr_cassettes/invoices/save_new_with_country_VA.yml +18 -8
  22. data/spec/vcr_cassettes/invoices/save_new_with_country_VI.yml +18 -8
  23. data/spec/vcr_cassettes/invoices/save_new_with_country_empty_string.yml +18 -8
  24. data/spec/vcr_cassettes/invoices/save_new_with_country_nil.yml +18 -8
  25. data/spec/vcr_cassettes/invoices/save_old_with_empty_country.yml +19 -9
  26. data/spec/vcr_cassettes/invoices/save_old_with_nil_country.yml +19 -9
  27. metadata +11 -9
  28. data/spec/support/matchers/type/have_country_code_matcher.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a174ee3cf9c8f2a5ee1a43ce636806e017e1462263eddfdd5e91968025144fb4
4
- data.tar.gz: d5f3c46c81e25009be272bee9bdfafe64e657f4ff5b7a131c272a49b8f9382f5
3
+ metadata.gz: 2a553a96a17c448e49472e1b41e703382defbda6a54427709145b8d60e02f34f
4
+ data.tar.gz: d7b3e147ad14c689c1fd24c7cf3529d3f951281c16d22bcbbf3c641ef2191d6e
5
5
  SHA512:
6
- metadata.gz: 942b59f8380781117425fbcdb713bbf05c3e4651779e517c89b1c1cd339bc521a19a79ca2df9c02098a472eabc31a5b9ae9f1b69945bd21c54e727075d4c66f9
7
- data.tar.gz: 598dd75a8a6d7f8af1b84e70a331192df243ebddad2174b09f43161767ab84b0e4c08dc8c020e55b9fa8928d8d3419f6ba7a99e2b5c6d21d541691d0eaacda17
6
+ metadata.gz: cef6687c30dca772585b966158dd94b17983c6393ca7e96fe619c154c0c312d7b4982978310a70469f0a4ddda0db2306a2fc6e9fc62ac31f45c2eb85930eb12f
7
+ data.tar.gz: 597a1bbf5704b5a020d6add724ac1a7e375ab610d19ab0c2ca342148a4727a1fe22ca75de82d69581366d5bc345259c211570f5a93b019ded657c11a73ba8ffc
@@ -4,15 +4,30 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.7.1]
8
+ ### Fixed
9
+ - Invalid validation for Customer's country attributes
10
+
7
11
  ## [0.7.0]
8
12
  ### Added
9
- - Adds build test for Ruby 2.6.0, 2.6.3 and 2.7.0-preview.
13
+ - Adds build test for Ruby `2.6.0`, `2.6.3` and `2.7.0-preview`.
10
14
 
11
15
  ### Removed
12
- - Drops support for Ruby < 2.4.0 since they are deprecated
16
+ - Drops support for Ruby < `2.4.0` since they are deprecated
13
17
 
14
18
  ### Fixed
15
- - Country attribute for Invoice and Order is now validated correctly.
19
+ - Country attribute for `Invoice` and `Order` is now validated correctly.
16
20
  - Fixes deprecation warnings
21
+ - Unlocks pinned `HTTParty` version
22
+ - Invalid email validation
23
+
24
+ ## [0.6.3]
25
+ ### Changed
26
+ - Pins `dry-types` to `< 0.13.0` due to breaking changes
27
+
28
+ ### Fixed
29
+ - Model attribute `url` is no longer null
17
30
 
18
- [0.7.0]: https://github.com/accodeing/fortnox-api/compare/v0.7.0...v0.6.3
31
+ [0.7.1]: https://github.com/accodeing/fortnox-api/compare/v0.7.0...v0.7.1
32
+ [0.7.0]: https://github.com/accodeing/fortnox-api/compare/v0.6.3...v0.7.0
33
+ [0.6.3]: https://github.com/accodeing/fortnox-api/compare/v0.6.2...v0.6.3
@@ -9,13 +9,13 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
9
9
  spec.name = 'fortnox-api'
10
10
  spec.version = Fortnox::API::VERSION
11
11
  spec.authors = ['Jonas Schubert Erlandsson', 'Hannes Elvemyr', 'Felix Holmgren']
12
- spec.email = ['info@my-codeworks.com']
12
+ spec.email = ['info@accodeing.com']
13
13
  spec.summary = 'Gem to use Fortnox REST API in Ruby.'
14
14
  spec.description = 'This gem uses the HTTParty library to abstract away the REST calls. It gives you access to a '\
15
15
  'number of objects that behave a lot like ActiveRecord instances, giving you access to methods '\
16
16
  'like `all`, `find`, `find_by_...` and so on. And each individual instance can be easily'\
17
17
  'persistable to Fortnox again using the `save` method.'
18
- spec.homepage = 'http://github.com/my-codeworks/fortnox-api'
18
+ spec.homepage = 'http://github.com/accodeing/fortnox-api'
19
19
  spec.license = 'LGPL-3.0'
20
20
 
21
21
  spec.files = `git ls-files -z`.split("\x0")
@@ -3,7 +3,7 @@
3
3
  require 'fortnox/api/types'
4
4
 
5
5
  require 'fortnox/api/mappers/value/array'
6
- require 'fortnox/api/mappers/value/country_code_string'
6
+ require 'fortnox/api/mappers/value/country_string'
7
7
  require 'fortnox/api/mappers/value/date'
8
8
  require 'fortnox/api/mappers/value/hash'
9
9
  require 'fortnox/api/mappers/value/identity'
@@ -5,10 +5,10 @@ require 'fortnox/api/mappers/base/canonical_name_sym'
5
5
  module Fortnox
6
6
  module API
7
7
  module Mapper
8
- class CountryCodeString
8
+ class CountryString
9
9
  extend CanonicalNameSym
10
10
 
11
- CountryCodeMapper = lambda do |code|
11
+ CountryMapper = lambda do |code|
12
12
  next code if code.nil? || code == ''
13
13
 
14
14
  # Fortnox only supports Swedish country name for Sweden
@@ -17,7 +17,7 @@ module Fortnox
17
17
  ::ISO3166::Country[code].translations['en']
18
18
  end
19
19
 
20
- Registry.register(canonical_name_sym, CountryCodeMapper)
20
+ Registry.register(canonical_name_sym, CountryMapper)
21
21
  end
22
22
  end
23
23
  end
@@ -44,7 +44,7 @@ module Fortnox
44
44
  attribute :contribution_value, Types::Nullable::Float.is(:read_only)
45
45
 
46
46
  # Country Country for the document address.
47
- attribute :country, Types::CountryCode
47
+ attribute :country, Types::Country
48
48
 
49
49
  # CostCenter Code of the cost center.
50
50
  attribute :cost_center, Types::Nullable::String
@@ -74,7 +74,7 @@ module Fortnox
74
74
  attribute :delivery_city, Types::Sized::String[1024]
75
75
 
76
76
  # DeliveryCountry Country for the document delivery address.
77
- attribute :delivery_country, Types::CountryCode
77
+ attribute :delivery_country, Types::Country
78
78
 
79
79
  # DeliveryDate Date of delivery.
80
80
  attribute :delivery_date, Types::Nullable::Date
@@ -3,7 +3,7 @@
3
3
  require 'dry-struct'
4
4
  require 'dry-types'
5
5
  require 'countries'
6
- require 'fortnox/api/types/shim/country_code_string'
6
+ require 'fortnox/api/types/shim/country_string'
7
7
 
8
8
  module Dry
9
9
  module Types
@@ -47,21 +47,33 @@ module Fortnox
47
47
  .optional
48
48
  .constructor(EnumConstructors.default)
49
49
 
50
+ Country = Strict::String
51
+ .optional
52
+ .constructor do |value|
53
+ next value if value.nil? || value == ''
54
+
55
+ # Fortnox only supports Swedish translation of Sweden
56
+ next CountryString.new('SE') if value =~ /^s(e$|we|ve)/i
57
+
58
+ country = ::ISO3166::Country[value] ||
59
+ ::ISO3166::Country.find_country_by_name(value) ||
60
+ ::ISO3166::Country.find_country_by_translated_names(value)
61
+
62
+ raise Dry::Types::ConstraintError.new('value violates constraints', value) if country.nil?
63
+
64
+ CountryString.new(country.alpha2)
65
+ end
66
+
50
67
  CountryCode = Strict::String
51
68
  .optional
52
69
  .constructor do |value|
53
70
  next value if value.nil? || value == ''
54
71
 
55
- # Fortnox only supports Swedish translation of Sweden
56
- next CountryCodeString.new('SE') if value =~ /^s(e$|we|ve)/i
57
-
58
- country = ::ISO3166::Country[value] ||
59
- ::ISO3166::Country.find_country_by_name(value) ||
60
- ::ISO3166::Country.find_country_by_translated_names(value)
72
+ country = ::ISO3166::Country[value]
61
73
 
62
74
  raise Dry::Types::ConstraintError.new('value violates constraints', value) if country.nil?
63
75
 
64
- CountryCodeString.new(country.alpha2)
76
+ country.alpha2
65
77
  end
66
78
 
67
79
  Currency = Strict::String
@@ -3,7 +3,7 @@
3
3
  module Fortnox
4
4
  module API
5
5
  module Types
6
- class CountryCodeString < String
6
+ class CountryString < String
7
7
  end
8
8
  end
9
9
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Fortnox
4
4
  module API
5
- VERSION = '0.7.0'
5
+ VERSION = '0.7.1'
6
6
  end
7
7
  end
@@ -117,10 +117,10 @@ describe Fortnox::API::Mapper::Base do
117
117
  end
118
118
  end
119
119
 
120
- describe 'CountryCode' do
120
+ describe 'Country' do
121
121
  subject { mapper.call('GB') }
122
122
 
123
- let(:mapper) { Fortnox::API::Registry[:countrycodestring] }
123
+ let(:mapper) { Fortnox::API::Registry[:countrystring] }
124
124
 
125
125
  it { is_expected.to eq('United Kingdom') }
126
126
 
@@ -40,4 +40,31 @@ describe Fortnox::API::Repository::Customer, order: :defined, integration: true
40
40
 
41
41
  # When recording new VCR casettes, expected matches must be increased
42
42
  include_examples '.search', :name, 'Test', 30
43
+
44
+ describe 'country reference' do
45
+ describe 'with valid country code \'SE\'' do
46
+ subject(:customer) do
47
+ VCR.use_cassette("#{vcr_dir}/save_new_with_country_code_SE") do
48
+ repository.save(
49
+ described_class::MODEL.new(
50
+ name: 'Customer with Swedish country code',
51
+ country_code: 'SE'
52
+ )
53
+ )
54
+ end
55
+ end
56
+
57
+ describe 'country code' do
58
+ subject { customer.country_code }
59
+
60
+ it { is_expected.to eq('SE') }
61
+ end
62
+
63
+ describe 'country' do
64
+ subject { customer.country }
65
+
66
+ it { is_expected.to eq('Sverige') }
67
+ end
68
+ end
69
+ end
43
70
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'spec_helper'
4
4
  require 'fortnox/api/types'
5
- require 'fortnox/api/types/examples/types'
6
5
 
7
6
  describe Fortnox::API::Types::CountryCode do
8
7
  context 'with nil' do
@@ -21,54 +20,21 @@ describe Fortnox::API::Types::CountryCode do
21
20
  it 'accepts country codes' do
22
21
  expect(described_class['NO']).to eq 'NO'
23
22
  end
24
-
25
- it 'accepts nil' do
26
- expect(described_class[nil]).to eq nil
27
- end
28
-
29
- it 'accepts empty string' do
30
- expect(described_class['']).to eq ''
31
- end
32
-
33
- it 'translates English country names to country code' do
34
- expect(described_class['Norway']).to eq 'NO'
35
- end
36
-
37
- it 'translates Swedish country names to country code' do
38
- expect(described_class['Norge']).to eq 'NO'
39
- end
40
-
41
- describe 'special cases' do
42
- valid_sweden_inputs = [
43
- 'SE', 'se', 'Sweden', 'sweden', 'Sverige', 'sverige',
44
- :SE, :se, :Sweden, :sweden, :Sverige, :sverige
45
- ].freeze
46
-
47
- valid_sweden_inputs.each do |sweden_input|
48
- it "converts \"#{sweden_input}\" to \"SE\"" do
49
- expect(described_class[sweden_input]).to eq 'SE'
50
- end
51
- end
52
-
53
- it 'accepts country code for El Salvador' do
54
- expect(described_class['SV']).to eq 'SV'
55
- end
56
-
57
- it 'translated Switzerland to ' do
58
- expect(described_class['Switzerland']).to eq 'CH'
59
- end
60
- end
61
23
  end
62
24
 
63
25
  context 'with invalid input' do
64
- invalid_inputs = [
65
- 'SEA', 'S', 'nonsense', :s
66
- ].freeze
26
+ describe 'valid country name' do
27
+ it do
28
+ expect do
29
+ described_class['Norway']
30
+ end.to raise_error(Dry::Types::ConstraintError)
31
+ end
32
+ end
67
33
 
68
- invalid_inputs.each do |invalid_input|
69
- it "#{invalid_input} raises Dry::Types::ConstraintError" do
34
+ describe 'invalid country code' do
35
+ it do
70
36
  expect do
71
- described_class[invalid_input]
37
+ described_class['XX']
72
38
  end.to raise_error(Dry::Types::ConstraintError)
73
39
  end
74
40
  end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'fortnox/api/types'
5
+
6
+ describe Fortnox::API::Types::Country do
7
+ context 'with nil' do
8
+ subject { described_class[nil] }
9
+
10
+ it { is_expected.to be_nil }
11
+ end
12
+
13
+ context 'with empty string' do
14
+ subject { described_class[''] }
15
+
16
+ it { is_expected.to eq('') }
17
+ end
18
+
19
+ context 'with valid input' do
20
+ it 'accepts country codes' do
21
+ expect(described_class['NO']).to eq 'NO'
22
+ end
23
+
24
+ it 'translates English country names to country code' do
25
+ expect(described_class['Norway']).to eq 'NO'
26
+ end
27
+
28
+ it 'translates Swedish country names to country code' do
29
+ expect(described_class['Norge']).to eq 'NO'
30
+ end
31
+
32
+ describe 'special cases' do
33
+ valid_sweden_inputs = [
34
+ 'SE', 'se', 'Sweden', 'sweden', 'Sverige', 'sverige',
35
+ :SE, :se, :Sweden, :sweden, :Sverige, :sverige
36
+ ].freeze
37
+
38
+ valid_sweden_inputs.each do |sweden_input|
39
+ it "converts \"#{sweden_input}\" to \"SE\"" do
40
+ expect(described_class[sweden_input]).to eq 'SE'
41
+ end
42
+ end
43
+
44
+ it 'accepts country code for El Salvador' do
45
+ expect(described_class['SV']).to eq 'SV'
46
+ end
47
+
48
+ it 'translated Switzerland to ' do
49
+ expect(described_class['Switzerland']).to eq 'CH'
50
+ end
51
+ end
52
+ end
53
+
54
+ context 'with invalid input' do
55
+ invalid_inputs = [
56
+ 'SEA', 'S', 'nonsense', :s
57
+ ].freeze
58
+
59
+ invalid_inputs.each do |invalid_input|
60
+ it "#{invalid_input} raises Dry::Types::ConstraintError" do
61
+ expect do
62
+ described_class[invalid_input]
63
+ end.to raise_error(Dry::Types::ConstraintError)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,56 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.fortnox.se/3/customers/
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"Customer":{"CountryCode":"SE","Name":"Customer with Swedish country
9
+ code"}}'
10
+ headers:
11
+ Content-Type:
12
+ - application/json
13
+ Accept:
14
+ - application/json
15
+ Client-Secret:
16
+ - 9aBA8ZgsvR
17
+ Access-Token:
18
+ - ccaef817-d5d8-4b1c-a316-54f3e55c5c54
19
+ response:
20
+ status:
21
+ code: 201
22
+ message: Created
23
+ headers:
24
+ Server:
25
+ - nginx
26
+ Date:
27
+ - Sat, 31 Aug 2019 18:40:48 GMT
28
+ Content-Type:
29
+ - application/json
30
+ Connection:
31
+ - close
32
+ Location:
33
+ - customers
34
+ X-Rack-Responsetime:
35
+ - '1007'
36
+ X-Uid:
37
+ - d8955922
38
+ X-Build:
39
+ - b1e7c74853
40
+ Strict-Transport-Security:
41
+ - max-age=31536000; includeSubdomains
42
+ X-Xss-Protection:
43
+ - 1; mode=block
44
+ X-Content-Type-Options:
45
+ - nosniff
46
+ X-Frame-Options:
47
+ - sameorigin
48
+ Referrer-Policy:
49
+ - strict-origin-when-cross-origin
50
+ body:
51
+ encoding: UTF-8
52
+ string: '{"Customer":{"@url":"https:\/\/api.fortnox.se\/3\/customers\/230","Address1":null,"Address2":null,"City":null,"Country":"Sverige","Comments":null,"Currency":"SEK","CostCenter":null,"CountryCode":"SE","Active":true,"CustomerNumber":"230","DefaultDeliveryTypes":{"Invoice":"PRINT","Order":"PRINT","Offer":"PRINT"},"DefaultTemplates":{"Order":"DEFAULTTEMPLATE","Offer":"DEFAULTTEMPLATE","Invoice":"DEFAULTTEMPLATE","CashInvoice":"DEFAULTTEMPLATE"},"DeliveryAddress1":null,"DeliveryAddress2":null,"DeliveryCity":null,"DeliveryCountry":null,"DeliveryCountryCode":null,"DeliveryFax":null,"DeliveryName":null,"DeliveryPhone1":null,"DeliveryPhone2":null,"DeliveryZipCode":null,"Email":"","EmailInvoice":"","EmailInvoiceBCC":"","EmailInvoiceCC":"","EmailOffer":"","EmailOfferBCC":"","EmailOfferCC":"","EmailOrder":"","EmailOrderBCC":"","EmailOrderCC":"","ExternalReference":null,"Fax":null,"GLN":null,"GLNDelivery":null,"InvoiceAdministrationFee":null,"InvoiceDiscount":null,"InvoiceFreight":null,"InvoiceRemark":"","Name":"Customer
53
+ with Swedish country code","OrganisationNumber":"","OurReference":"","Phone1":null,"Phone2":null,"PriceList":"A","Project":"","SalesAccount":null,"ShowPriceVATIncluded":false,"TermsOfDelivery":"","TermsOfPayment":"","Type":"COMPANY","VATNumber":"","VATType":"SEVAT","VisitingAddress":null,"VisitingCity":null,"VisitingCountry":null,"VisitingCountryCode":null,"VisitingZipCode":null,"WayOfDelivery":"","WWW":"","YourReference":"","ZipCode":null}}'
54
+ http_version:
55
+ recorded_at: Sat, 31 Aug 2019 18:40:48 GMT
56
+ recorded_with: VCR 4.0.0
@@ -23,7 +23,7 @@ http_interactions:
23
23
  Server:
24
24
  - nginx
25
25
  Date:
26
- - Mon, 03 Jun 2019 09:59:14 GMT
26
+ - Sun, 01 Sep 2019 07:02:19 GMT
27
27
  Content-Type:
28
28
  - application/json
29
29
  Connection:
@@ -31,16 +31,26 @@ http_interactions:
31
31
  Location:
32
32
  - invoices
33
33
  X-Rack-Responsetime:
34
- - '337'
34
+ - '87'
35
35
  X-Uid:
36
- - 651ea5d2
36
+ - 6b4d3446
37
37
  X-Build:
38
- - e930a91c78
38
+ - b1e7c74853
39
+ Strict-Transport-Security:
40
+ - max-age=31536000; includeSubdomains
41
+ X-Xss-Protection:
42
+ - 1; mode=block
43
+ X-Content-Type-Options:
44
+ - nosniff
45
+ X-Frame-Options:
46
+ - sameorigin
47
+ Referrer-Policy:
48
+ - strict-origin-when-cross-origin
39
49
  body:
40
50
  encoding: UTF-8
41
- string: '{"Invoice":{"@url":"https:\/\/api.fortnox.se\/3\/invoices\/134","@urlTaxReductionList":"https:\/\/api.fortnox.se\/3\/taxreductions?filter=invoices&referencenumber=134","AdministrationFee":0,"AdministrationFeeVAT":0,"Address1":"","Address2":"","Balance":0,"BasisTaxReduction":0,"Booked":false,"Cancelled":false,"City":"","Comments":"","ContractReference":0,"ContributionPercent":0,"ContributionValue":0,"Country":"Sverige","CostCenter":"","Credit":"false","CreditInvoiceReference":0,"Currency":"SEK","CurrencyRate":1,"CurrencyUnit":1,"CustomerName":"Old
42
- name","CustomerNumber":"1","DeliveryAddress1":"","DeliveryAddress2":"","DeliveryCity":"","DeliveryCountry":"","DeliveryDate":null,"DeliveryName":"","DeliveryZipCode":"","DocumentNumber":"134","DueDate":"2019-06-03","EDIInformation":{"EDIGlobalLocationNumber":"","EDIGlobalLocationNumberDelivery":"","EDIInvoiceExtra1":"","EDIInvoiceExtra2":"","EDIOurElectronicReference":"","EDIYourElectronicReference":""},"EmailInformation":{"EmailAddressFrom":null,"EmailAddressTo":"","EmailAddressCC":null,"EmailAddressBCC":null,"EmailSubject":"Faktura
43
- {no} bifogas","EmailBody":" "},"EUQuarterlyReport":false,"ExternalInvoiceReference1":"","ExternalInvoiceReference2":"","Freight":0,"FreightVAT":0,"Gross":0,"HouseWork":false,"InvoiceDate":"2019-06-03","InvoicePeriodStart":"","InvoicePeriodEnd":"","InvoiceReference":0,"InvoiceRows":[],"InvoiceType":"INVOICE","Labels":[],"Language":"SV","LastRemindDate":null,"Net":0,"NotCompleted":false,"NoxFinans":false,"OCR":"13458","OfferReference":0,"OrderReference":0,"OrganisationNumber":"860101-8735","OurReference":"","PaymentWay":"","Phone1":"","Phone2":"","PriceList":"A","PrintTemplate":"st","Project":"","WarehouseReady":true,"OutboundDate":"2019-06-03","Remarks":"","Reminders":0,"RoundOff":0,"Sent":false,"TaxReduction":null,"TermsOfDelivery":"","TermsOfPayment":0,"Total":0,"TotalToPay":0,"TotalVAT":0,"VATIncluded":false,"VoucherNumber":null,"VoucherSeries":null,"VoucherYear":null,"WayOfDelivery":"","YourOrderNumber":"","YourReference":"","ZipCode":"","AccountingMethod":"ACCRUAL","FinalPayDate":null}}'
51
+ string: '{"Invoice":{"@url":"https:\/\/api.fortnox.se\/3\/invoices\/144","@urlTaxReductionList":"https:\/\/api.fortnox.se\/3\/taxreductions?filter=invoices&referencenumber=144","AdministrationFee":0,"AdministrationFeeVAT":0,"Address1":"","Address2":"","Balance":0,"BasisTaxReduction":0,"Booked":false,"Cancelled":false,"City":"","Comments":"","ContractReference":0,"ContributionPercent":0,"ContributionValue":0,"Country":"Sverige","CostCenter":"","Credit":"false","CreditInvoiceReference":0,"Currency":"SEK","CurrencyRate":1,"CurrencyUnit":1,"CustomerName":"Old
52
+ name","CustomerNumber":"1","DeliveryAddress1":"","DeliveryAddress2":"","DeliveryCity":"","DeliveryCountry":"","DeliveryDate":null,"DeliveryName":"","DeliveryZipCode":"","DocumentNumber":"144","DueDate":"2019-09-01","EDIInformation":{"EDIGlobalLocationNumber":"","EDIGlobalLocationNumberDelivery":"","EDIInvoiceExtra1":"","EDIInvoiceExtra2":"","EDIOurElectronicReference":"","EDIYourElectronicReference":""},"EmailInformation":{"EmailAddressFrom":null,"EmailAddressTo":"","EmailAddressCC":null,"EmailAddressBCC":null,"EmailSubject":"Faktura
53
+ {no} bifogas","EmailBody":" "},"EUQuarterlyReport":false,"ExternalInvoiceReference1":"","ExternalInvoiceReference2":"","Freight":0,"FreightVAT":0,"Gross":0,"HouseWork":false,"InvoiceDate":"2019-09-01","InvoicePeriodStart":"","InvoicePeriodEnd":"","InvoiceReference":0,"InvoiceRows":[],"InvoiceType":"INVOICE","Labels":[],"Language":"SV","LastRemindDate":null,"Net":0,"NotCompleted":false,"NoxFinans":false,"OCR":"14456","OfferReference":0,"OrderReference":0,"OrganisationNumber":"860101-8735","OurReference":"","PaymentWay":"","Phone1":"","Phone2":"","PriceList":"A","PrintTemplate":"st","Project":"","WarehouseReady":true,"OutboundDate":"2019-09-01","Remarks":"","Reminders":0,"RoundOff":0,"Sent":false,"TaxReduction":null,"TermsOfDelivery":"","TermsOfPayment":0,"Total":0,"TotalToPay":0,"TotalVAT":0,"VATIncluded":false,"VoucherNumber":null,"VoucherSeries":null,"VoucherYear":null,"WayOfDelivery":"","YourOrderNumber":"","YourReference":"","ZipCode":"","AccountingMethod":"ACCRUAL","FinalPayDate":null}}'
44
54
  http_version:
45
- recorded_at: Mon, 03 Jun 2019 09:59:15 GMT
55
+ recorded_at: Sun, 01 Sep 2019 07:02:19 GMT
46
56
  recorded_with: VCR 4.0.0